[fusion-commits] r1493 - in sandbox/jx2: MapGuide jx/lib lib templates/mapserver/standard widgets

svn_fusion at osgeo.org svn_fusion at osgeo.org
Thu Sep 4 13:18:46 EDT 2008


Author: pagameba
Date: 2008-09-04 13:18:46 -0400 (Thu, 04 Sep 2008)
New Revision: 1493

Modified:
   sandbox/jx2/MapGuide/MapGuideViewerApi.js
   sandbox/jx2/jx/lib/jxlib.js
   sandbox/jx2/jx/lib/jxlib.uncompressed.js
   sandbox/jx2/jx/lib/jxskin_delicious.css
   sandbox/jx2/lib/ApplicationDefinition.js
   sandbox/jx2/lib/CanvasTool.js
   sandbox/jx2/lib/Map.js
   sandbox/jx2/lib/Widget.js
   sandbox/jx2/templates/mapserver/standard/ApplicationDefinition.xml
   sandbox/jx2/widgets/About.js
   sandbox/jx2/widgets/ActivityIndicator.js
   sandbox/jx2/widgets/Buffer.js
   sandbox/jx2/widgets/BufferPanel.js
   sandbox/jx2/widgets/CenterSelection.js
   sandbox/jx2/widgets/ClearSelection.js
   sandbox/jx2/widgets/ColorPicker.js
   sandbox/jx2/widgets/CursorPosition.js
   sandbox/jx2/widgets/EditableScale.js
   sandbox/jx2/widgets/ExtentHistory.js
   sandbox/jx2/widgets/Help.js
   sandbox/jx2/widgets/InitialMapView.js
   sandbox/jx2/widgets/InvokeScript.js
   sandbox/jx2/widgets/InvokeURL.js
   sandbox/jx2/widgets/LayerManager.js
   sandbox/jx2/widgets/Legend.js
   sandbox/jx2/widgets/LinkToView.js
   sandbox/jx2/widgets/MapMenu.js
   sandbox/jx2/widgets/Maptip.js
   sandbox/jx2/widgets/Measure.js
   sandbox/jx2/widgets/Navigator.js
   sandbox/jx2/widgets/OverviewMap.js
   sandbox/jx2/widgets/Pan.js
   sandbox/jx2/widgets/PanOnClick.js
   sandbox/jx2/widgets/PanQuery.js
   sandbox/jx2/widgets/Print.js
   sandbox/jx2/widgets/RefreshMap.js
   sandbox/jx2/widgets/SaveMap.js
   sandbox/jx2/widgets/Scalebar.js
   sandbox/jx2/widgets/ScalebarDual.js
   sandbox/jx2/widgets/Search.js
   sandbox/jx2/widgets/Select.js
   sandbox/jx2/widgets/SelectPolygon.js
   sandbox/jx2/widgets/SelectRadius.js
   sandbox/jx2/widgets/SelectRadiusValue.js
   sandbox/jx2/widgets/SelectWithin.js
   sandbox/jx2/widgets/SelectionInfo.js
   sandbox/jx2/widgets/SelectionPanel.js
   sandbox/jx2/widgets/TaskPane.js
   sandbox/jx2/widgets/ViewOptions.js
   sandbox/jx2/widgets/ViewSize.js
   sandbox/jx2/widgets/Zoom.js
   sandbox/jx2/widgets/ZoomOnClick.js
   sandbox/jx2/widgets/ZoomToSelection.js
Log:
rework widget core architecture to be more friendly (See #117)

Modified: sandbox/jx2/MapGuide/MapGuideViewerApi.js
===================================================================
--- sandbox/jx2/MapGuide/MapGuideViewerApi.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/MapGuide/MapGuideViewerApi.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -1,441 +1,441 @@
-/**
- * Fusion API AjaxViewer API layer
- *
- * $Id$
- *
- * Copyright (c) 2007, DM Solutions Group Inc.
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/***************************************************************************
-* This is a simple API layer to mimick the MapGuide ajaxviewer API
-*/
-var mapWidgetId = 'Map';
-
-function Refresh() {
-    var Fusion = window.top.Fusion;
-    var mapWidget = Fusion.getWidgetById(mapWidgetId);
-    if (mapWidget && mapWidget.isMapLoaded()) {
-        mapWidget.redraw();
-    }
-}
-
-function SetSelectionXML(selectionXml) {
-    var Fusion = window.top.Fusion;
-    var mapWidget = Fusion.getWidgetById(mapWidgetId);
-    if (mapWidget && mapWidget.isMapLoaded()) {
-        mapWidget.setSelection(selectionXml, true);
-    }
-}
-
-function ZoomToView(x, y, scale, refresh) {
-    var Fusion = window.top.Fusion;
-    var mapWidget = Fusion.getWidgetById(mapWidgetId);
-    if (mapWidget && mapWidget.isMapLoaded()) {
-        var extent = mapWidget.getExtentFromPoint(x, y, scale);
-        mapWidget.setExtents(extent);
-    }
-}
-
-function DigitizePoint(handler) {
-    if (handler) {
-      var Fusion = window.top.Fusion;
-      var mapWidget = Fusion.getWidgetById(mapWidgetId);
-      var digitizer = new Fusion.Tool.Canvas.Point(mapWidget);
-      digitizer.mouseUp = PointHandlers.prototype.mouseUp;
-      Object.inheritFrom(digitizer, Fusion.Tool.Canvas.prototype, []);
-      digitizer.handler = handler;
-      digitizer.activateCanvas();
-      
-      //add a listener to update the position of the features
-      var mapWidget = Fusion.getWidgetById(mapWidgetId);
-      mapWidget.registerForEvent(Fusion.Event.MAP_EXTENTS_CHANGED, 
-        function(){
-          digitizer.updatePx();
-          digitizer.clearContext();
-          digitizer.draw(digitizer.context);
-        }
-      );
-    }
-}
-
-function DigitizeLine(handler) {
-    if (handler) {
-      var Fusion = window.top.Fusion;
-      var mapWidget = Fusion.getWidgetById(mapWidgetId);
-      var digitizer = new Fusion.Tool.Canvas.Line(mapWidget);
-      digitizer.mouseDown = LineHandlers.prototype.mouseDown;
-      digitizer.mouseMove = LineHandlers.prototype.mouseMove;
-      Object.inheritFrom(digitizer, Fusion.Tool.Canvas.prototype, []);
-      digitizer.handler = handler;
-      digitizer.activateCanvas();
-      
-      //add a listener to update the position of the features
-      var mapWidget = Fusion.getWidgetById(mapWidgetId);
-      mapWidget.registerForEvent(Fusion.Event.MAP_EXTENTS_CHANGED, 
-        function(){
-          digitizer.updatePx();
-          digitizer.clearContext();
-          digitizer.draw(digitizer.context);
-        }
-      );
-    }
-}
-
-function DigitizeLineString(handler) {
-    if (handler) {
-      var Fusion = window.top.Fusion;
-      var mapWidget = Fusion.getWidgetById(mapWidgetId);
-      var digitizer = new Fusion.Tool.Canvas.Line(mapWidget);
-      digitizer.mouseDown = MultiPointHandlers.prototype.mouseDown;
-      digitizer.mouseMove = MultiPointHandlers.prototype.mouseMove;
-      digitizer.dblClick = MultiPointHandlers.prototype.dblClick;
-      Object.inheritFrom(digitizer, Fusion.Tool.Canvas.prototype, []);
-      digitizer.handler = handler;
-      digitizer.activateCanvas();
-      
-      //add a listener to update the position of the features
-      var mapWidget = Fusion.getWidgetById(mapWidgetId);
-      mapWidget.registerForEvent(Fusion.Event.MAP_EXTENTS_CHANGED, 
-        function(){
-          digitizer.updatePx();
-          digitizer.clearContext();
-          digitizer.draw(digitizer.context);
-        }
-      );
-    }
-}
-
-function DigitizeRectangle(handler) {
-    if (handler) {
-      var Fusion = window.top.Fusion;
-      var mapWidget = Fusion.getWidgetById(mapWidgetId);
-      var digitizer = new Fusion.Tool.Canvas.Polygon(mapWidget);
-      digitizer.mouseDown = RectangleHandlers.prototype.mouseDown;
-      digitizer.mouseMove = RectangleHandlers.prototype.mouseMove;
-      Object.inheritFrom(digitizer, Fusion.Tool.Canvas.prototype, []);
-      digitizer.handler = handler;
-      digitizer.activateCanvas();
-      
-      //add a listener to update the position of the features
-      var mapWidget = Fusion.getWidgetById(mapWidgetId);
-      mapWidget.registerForEvent(Fusion.Event.MAP_EXTENTS_CHANGED, 
-        function(){
-          digitizer.updatePx();
-          digitizer.clearContext();
-          digitizer.draw(digitizer.context);
-        }
-      );
-    }
-}
-
-function DigitizePolygon(handler) {
-    if (handler) {
-      var Fusion = window.top.Fusion;
-      var mapWidget = Fusion.getWidgetById(mapWidgetId);
-      var digitizer = new Fusion.Tool.Canvas.Polygon(mapWidget);
-      digitizer.mouseDown = MultiPointHandlers.prototype.mouseDown;
-      digitizer.mouseMove = MultiPointHandlers.prototype.mouseMove;
-      digitizer.dblClick = MultiPointHandlers.prototype.dblClick;
-      Object.inheritFrom(digitizer, Fusion.Tool.Canvas.prototype, []);
-      digitizer.handler = handler;
-      digitizer.activateCanvas();
-      
-      //add a listener to update the position of the features
-      var mapWidget = Fusion.getWidgetById(mapWidgetId);
-      mapWidget.registerForEvent(Fusion.Event.MAP_EXTENTS_CHANGED, 
-        function(){
-          digitizer.updatePx();
-          digitizer.clearContext();
-          digitizer.draw(digitizer.context);
-        }
-      );
-    }
-}
-
-Fusion.Tool.Canvas.prototype.getMap = function() {
-  return Fusion.getWidgetById(mapWidgetId);
-}
-
-Fusion.Tool.Canvas.prototype.deactivateCanvas = function() {
-    var map = this.getMap();
-    map.deregisterForEvent(Fusion.Event.MAP_RESIZED, this.resizeCanvasFn);
-    map.stopObserveEvent('mousemove', this.mouseMoveCB);
-    map.stopObserveEvent('mouseup', this.mouseUpCB);
-    map.stopObserveEvent('mousedown', this.mouseDownCB);
-    map.stopObserveEvent('dblclick', this.dblClickCB);
-}
-
-
-PointHandlers = Class.create();
-PointHandlers.prototype = {
-    mouseUp: function(e) {
-        var p = this.getMap().getEventPosition(e);
-        var point = this.getMap().pixToGeo(p.x, p.y);
-        this.setPoint(point.x, point.y);
-        this.clearContext();
-        this.draw(this.context);
-        this.isDigitizing = false;
-        this.deactivateCanvas();
-        this.handler(new Point(point.x, point.y));
-    }
-}
-    
-LineHandlers = Class.create();
-LineHandlers.prototype = {
-    mouseDown: function(e) {
-        if (Event.isLeftClick(e)) {
-            var p = this.getMap().getEventPosition(e);
-
-            if (!this.isDigitizing) {
-                this.segments = [];
-                var point = this.getMap().pixToGeo(p.x, p.y);
-                var from = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
-                var to = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
-                var seg = new Fusion.Tool.Canvas.Segment(from,to);
-                seg.setEditing(true);
-                this.addSegment(seg);
-                this.clearContext();
-                this.draw(this.context);     
-
-                this.isDigitizing = true;
-            } else {
-                this.isDigitizing = false;
-                var seg = this.lastSegment();
-                seg.setEditing(false);
-                //seg = this.extendLine();
-                this.clearContext();
-                this.draw(this.context);
-                this.deactivateCanvas();
-                
-                this.clean();
-                var ls = new LineString();
-                var nodes = this.getNodes();
-                for (var i=0; i<nodes.length; ++i) {
-                  var node = nodes[i];
-                  ls.AddPoint(new Point(node.x, node.y));
-                }
-                this.handler(ls);
-                
-            }
-        }
-    },
-
-    mouseMove: function(e) {
-        //console.log('SelectRadius.mouseMove');
-        if (!this.isDigitizing) {
-            return;
-        }
-    
-        var p = this.getMap().getEventPosition(e);
-        var seg = this.lastSegment();
-        seg.to.setPx(p.x,p.y);
-        seg.to.updateGeo();
-        this.clearContext();
-        this.draw(this.context);
-    },
-}
-    
-RectangleHandlers = Class.create();
-RectangleHandlers.prototype = {
-    mouseDown: function(e) {
-        if (Event.isLeftClick(e)) {
-            var p = this.getMap().getEventPosition(e);
-
-            if (!this.isDigitizing) {
-                this.segments = [];
-                var point = this.getMap().pixToGeo(p.x, p.y);
-                var from = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
-                var to = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
-                this.seg1 = new Fusion.Tool.Canvas.Segment(from,to);
-                this.addSegment(this.seg1);
-                from = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
-                to = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
-                this.seg2 = new Fusion.Tool.Canvas.Segment(from,to);
-                this.addSegment(this.seg2);
-                from = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
-                to = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
-                this.seg3 = new Fusion.Tool.Canvas.Segment(from,to);
-                this.addSegment(this.seg3);
-                from = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
-                to = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
-                this.seg4 = new Fusion.Tool.Canvas.Segment(from,to);
-                this.addSegment(this.seg4);
-                this.clearContext();
-                this.draw(this.context);     
-
-                this.isDigitizing = true;
-            } else {
-                this.clearContext();
-                this.draw(this.context);
-                this.deactivateCanvas();
-                
-                this.clean();
-                var p1 = new Point(this.seg1.from.x,this.seg1.from.y);
-                var p2 = new Point(this.seg3.from.x,this.seg3.from.y);
-                var rect = new Rectangle(p1, p2);
-                this.handler(rect);
-                
-            }
-        }
-    },
-
-    mouseMove: function(e) {
-        //console.log('SelectRadius.mouseMove');
-        if (!this.isDigitizing) {
-            return;
-        }
-    
-        var p = this.getMap().getEventPosition(e);
-        this.seg1.to.setPx(p.x, this.seg1.from.py);
-        this.seg1.to.updateGeo();
-        this.seg2.from.setPx(p.x, this.seg1.from.py);
-        this.seg2.from.updateGeo();
-        this.seg2.to.setPx(p.x, p.y);
-        this.seg2.to.updateGeo();
-        this.seg3.from.setPx(p.x, p.y);
-        this.seg3.from.updateGeo();
-        this.seg3.to.setPx(this.seg1.from.px, p.y);
-        this.seg3.to.updateGeo();
-        this.seg4.from.setPx(this.seg1.from.px, p.y);
-        this.seg4.from.updateGeo();
-        this.clearContext();
-        this.draw(this.context);
-    },
-}
-    
-MultiPointHandlers = Class.create();
-MultiPointHandlers.prototype = {
-    mouseDown: function(e) {
-        if (Event.isLeftClick(e)) {
-            var p = this.getMap().getEventPosition(e);
-
-            if (!this.isDigitizing) {
-                this.segments = [];
-                var point = this.getMap().pixToGeo(p.x, p.y);
-                var from = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
-                var to = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
-                var seg = new Fusion.Tool.Canvas.Segment(from,to);
-                seg.setEditing(true);
-                this.addSegment(seg);
-                this.clearContext();
-                this.draw(this.context);     
-
-                this.isDigitizing = true;
-            } else {
-                var seg = this.lastSegment();
-                seg.setEditing(false);
-                seg = this.extendLine();
-                seg.setEditing(true);
-                this.clearContext();
-                this.draw(this.context);
-            }
-        }
-    },
-
-    mouseMove: function(e) {
-        //console.log('SelectRadius.mouseMove');
-        if (!this.isDigitizing) {
-            return;
-        }
-    
-        var p = this.getMap().getEventPosition(e);
-        var seg = this.lastSegment();
-        seg.to.setPx(p.x,p.y);
-        seg.to.updateGeo();
-        this.clearContext();
-        this.draw(this.context);
-    },
-    
-    dblClick: function(e) {
-        //console.log('Digitizer.dblClick');
-        if (!this.isDigitizing) {
-            return;
-        }
-        this.event = e;
-        var p = this.getMap().getEventPosition(e);
-        var point = this.getMap().pixToGeo(p.x, p.y);
-        var seg = this.lastSegment();
-        seg.setEditing(false);
-        seg.to.set(point.x,point.y);
-        this.clearContext();
-        this.draw(this.context);
-        this.isDigitizing = false;
-        this.deactivateCanvas();
-        
-        this.clean();
-        var ls = new LineString();
-        var nodes = this.getNodes();
-        for (var i=0; i<nodes.length; ++i) {
-          var node = nodes[i];
-          ls.AddPoint(new Point(node.x, node.y));
-        }
-        this.handler(ls);
-    }
-}
-    
-function Point(x, y) {
-    this.X = x;
-    this.Y = y;
-}
-
-function LineString()
-{
-    this.points = new Array();
-    this.Count = 0;
-
-    this.AddPoint = function(pt)
-    {
-        this.points.push(pt);
-        this.Count ++;
-    }
-
-    this.Point = function(i)
-    {
-        if(i < 0 || i >= this.points.length)
-            return null;
-        return this.points[i];
-    }
-}
-
-function Circle()
-{
-    this.Center = null;
-    this.Radius = 0;
-
-    this.SetRadius = function(pt)
-    {
-        dx = pt.X - this.Center.X;
-        dy = pt.Y - this.Center.Y;
-        this.Radius = Math.sqrt(dx*dx + dy*dy);
-    }
-}
-
-function Rectangle(p1, p2)
-{
-    this.Point1 = p1;
-    this.Point2 = p2;
-}
-
-function Polygon()
-{
-    this.LineStringInfo = LineString;
-    this.LineStringInfo();
-}
-
+/**
+ * Fusion API AjaxViewer API layer
+ *
+ * $Id$
+ *
+ * Copyright (c) 2007, DM Solutions Group Inc.
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/***************************************************************************
+* This is a simple API layer to mimick the MapGuide ajaxviewer API
+*/
+var mapWidgetId = 'Map';
+
+function Refresh() {
+    var Fusion = window.top.Fusion;
+    var mapWidget = Fusion.getWidgetById(mapWidgetId);
+    if (mapWidget && mapWidget.isMapLoaded()) {
+        mapWidget.redraw();
+    }
+}
+
+function SetSelectionXML(selectionXml) {
+    var Fusion = window.top.Fusion;
+    var mapWidget = Fusion.getWidgetById(mapWidgetId);
+    if (mapWidget && mapWidget.isMapLoaded()) {
+        mapWidget.setSelection(selectionXml, true);
+    }
+}
+
+function ZoomToView(x, y, scale, refresh) {
+    var Fusion = window.top.Fusion;
+    var mapWidget = Fusion.getWidgetById(mapWidgetId);
+    if (mapWidget && mapWidget.isMapLoaded()) {
+        var extent = mapWidget.getExtentFromPoint(x, y, scale);
+        mapWidget.setExtents(extent);
+    }
+}
+
+function DigitizePoint(handler) {
+    if (handler) {
+      var Fusion = window.top.Fusion;
+      var mapWidget = Fusion.getWidgetById(mapWidgetId);
+      var digitizer = new Fusion.Tool.Canvas.Point(mapWidget);
+      digitizer.mouseUp = PointHandlers.prototype.mouseUp;
+      Object.inheritFrom(digitizer, Fusion.Tool.Canvas.prototype, []);
+      digitizer.handler = handler;
+      digitizer.activateCanvas();
+      
+      //add a listener to update the position of the features
+      var mapWidget = Fusion.getWidgetById(mapWidgetId);
+      mapWidget.registerForEvent(Fusion.Event.MAP_EXTENTS_CHANGED, 
+        function(){
+          digitizer.updatePx();
+          digitizer.clearContext();
+          digitizer.draw(digitizer.context);
+        }
+      );
+    }
+}
+
+function DigitizeLine(handler) {
+    if (handler) {
+      var Fusion = window.top.Fusion;
+      var mapWidget = Fusion.getWidgetById(mapWidgetId);
+      var digitizer = new Fusion.Tool.Canvas.Line(mapWidget);
+      digitizer.mouseDown = LineHandlers.prototype.mouseDown;
+      digitizer.mouseMove = LineHandlers.prototype.mouseMove;
+      Object.inheritFrom(digitizer, Fusion.Tool.Canvas.prototype, []);
+      digitizer.handler = handler;
+      digitizer.activateCanvas();
+      
+      //add a listener to update the position of the features
+      var mapWidget = Fusion.getWidgetById(mapWidgetId);
+      mapWidget.registerForEvent(Fusion.Event.MAP_EXTENTS_CHANGED, 
+        function(){
+          digitizer.updatePx();
+          digitizer.clearContext();
+          digitizer.draw(digitizer.context);
+        }
+      );
+    }
+}
+
+function DigitizeLineString(handler) {
+    if (handler) {
+      var Fusion = window.top.Fusion;
+      var mapWidget = Fusion.getWidgetById(mapWidgetId);
+      var digitizer = new Fusion.Tool.Canvas.Line(mapWidget);
+      digitizer.mouseDown = MultiPointHandlers.prototype.mouseDown;
+      digitizer.mouseMove = MultiPointHandlers.prototype.mouseMove;
+      digitizer.dblClick = MultiPointHandlers.prototype.dblClick;
+      Object.inheritFrom(digitizer, Fusion.Tool.Canvas.prototype, []);
+      digitizer.handler = handler;
+      digitizer.activateCanvas();
+      
+      //add a listener to update the position of the features
+      var mapWidget = Fusion.getWidgetById(mapWidgetId);
+      mapWidget.registerForEvent(Fusion.Event.MAP_EXTENTS_CHANGED, 
+        function(){
+          digitizer.updatePx();
+          digitizer.clearContext();
+          digitizer.draw(digitizer.context);
+        }
+      );
+    }
+}
+
+function DigitizeRectangle(handler) {
+    if (handler) {
+      var Fusion = window.top.Fusion;
+      var mapWidget = Fusion.getWidgetById(mapWidgetId);
+      var digitizer = new Fusion.Tool.Canvas.Polygon(mapWidget);
+      digitizer.mouseDown = RectangleHandlers.prototype.mouseDown;
+      digitizer.mouseMove = RectangleHandlers.prototype.mouseMove;
+      Object.inheritFrom(digitizer, Fusion.Tool.Canvas.prototype, []);
+      digitizer.handler = handler;
+      digitizer.activateCanvas();
+      
+      //add a listener to update the position of the features
+      var mapWidget = Fusion.getWidgetById(mapWidgetId);
+      mapWidget.registerForEvent(Fusion.Event.MAP_EXTENTS_CHANGED, 
+        function(){
+          digitizer.updatePx();
+          digitizer.clearContext();
+          digitizer.draw(digitizer.context);
+        }
+      );
+    }
+}
+
+function DigitizePolygon(handler) {
+    if (handler) {
+      var Fusion = window.top.Fusion;
+      var mapWidget = Fusion.getWidgetById(mapWidgetId);
+      var digitizer = new Fusion.Tool.Canvas.Polygon(mapWidget);
+      digitizer.mouseDown = MultiPointHandlers.prototype.mouseDown;
+      digitizer.mouseMove = MultiPointHandlers.prototype.mouseMove;
+      digitizer.dblClick = MultiPointHandlers.prototype.dblClick;
+      Object.inheritFrom(digitizer, Fusion.Tool.Canvas.prototype, []);
+      digitizer.handler = handler;
+      digitizer.activateCanvas();
+      
+      //add a listener to update the position of the features
+      var mapWidget = Fusion.getWidgetById(mapWidgetId);
+      mapWidget.registerForEvent(Fusion.Event.MAP_EXTENTS_CHANGED, 
+        function(){
+          digitizer.updatePx();
+          digitizer.clearContext();
+          digitizer.draw(digitizer.context);
+        }
+      );
+    }
+}
+
+Fusion.Tool.Canvas.prototype.getMap = function() {
+  return Fusion.getWidgetById(mapWidgetId);
+}
+
+Fusion.Tool.Canvas.prototype.deactivateCanvas = function() {
+    var map = this.getMap();
+    map.deregisterForEvent(Fusion.Event.MAP_RESIZED, this.resizeCanvasFn);
+    map.stopObserveEvent('mousemove', this.mouseMoveCB);
+    map.stopObserveEvent('mouseup', this.mouseUpCB);
+    map.stopObserveEvent('mousedown', this.mouseDownCB);
+    map.stopObserveEvent('dblclick', this.dblClickCB);
+}
+
+
+PointHandlers = Class.create();
+PointHandlers.prototype = {
+    mouseUp: function(e) {
+        var p = this.getMap().getEventPosition(e);
+        var point = this.getMap().pixToGeo(p.x, p.y);
+        this.setPoint(point.x, point.y);
+        this.clearContext();
+        this.draw(this.context);
+        this.isDigitizing = false;
+        this.deactivateCanvas();
+        this.handler(new Point(point.x, point.y));
+    }
+}
+    
+LineHandlers = Class.create();
+LineHandlers.prototype = {
+    mouseDown: function(e) {
+        if (OpenLayers.Event.isLeftClick(e)) {
+            var p = this.getMap().getEventPosition(e);
+
+            if (!this.isDigitizing) {
+                this.segments = [];
+                var point = this.getMap().pixToGeo(p.x, p.y);
+                var from = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
+                var to = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
+                var seg = new Fusion.Tool.Canvas.Segment(from,to);
+                seg.setEditing(true);
+                this.addSegment(seg);
+                this.clearContext();
+                this.draw(this.context);     
+
+                this.isDigitizing = true;
+            } else {
+                this.isDigitizing = false;
+                var seg = this.lastSegment();
+                seg.setEditing(false);
+                //seg = this.extendLine();
+                this.clearContext();
+                this.draw(this.context);
+                this.deactivateCanvas();
+                
+                this.clean();
+                var ls = new LineString();
+                var nodes = this.getNodes();
+                for (var i=0; i<nodes.length; ++i) {
+                  var node = nodes[i];
+                  ls.AddPoint(new Point(node.x, node.y));
+                }
+                this.handler(ls);
+                
+            }
+        }
+    },
+
+    mouseMove: function(e) {
+        //console.log('SelectRadius.mouseMove');
+        if (!this.isDigitizing) {
+            return;
+        }
+    
+        var p = this.getMap().getEventPosition(e);
+        var seg = this.lastSegment();
+        seg.to.setPx(p.x,p.y);
+        seg.to.updateGeo();
+        this.clearContext();
+        this.draw(this.context);
+    },
+}
+    
+RectangleHandlers = Class.create();
+RectangleHandlers.prototype = {
+    mouseDown: function(e) {
+        if (OpenLayers.Event.isLeftClick(e)) {
+            var p = this.getMap().getEventPosition(e);
+
+            if (!this.isDigitizing) {
+                this.segments = [];
+                var point = this.getMap().pixToGeo(p.x, p.y);
+                var from = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
+                var to = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
+                this.seg1 = new Fusion.Tool.Canvas.Segment(from,to);
+                this.addSegment(this.seg1);
+                from = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
+                to = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
+                this.seg2 = new Fusion.Tool.Canvas.Segment(from,to);
+                this.addSegment(this.seg2);
+                from = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
+                to = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
+                this.seg3 = new Fusion.Tool.Canvas.Segment(from,to);
+                this.addSegment(this.seg3);
+                from = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
+                to = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
+                this.seg4 = new Fusion.Tool.Canvas.Segment(from,to);
+                this.addSegment(this.seg4);
+                this.clearContext();
+                this.draw(this.context);     
+
+                this.isDigitizing = true;
+            } else {
+                this.clearContext();
+                this.draw(this.context);
+                this.deactivateCanvas();
+                
+                this.clean();
+                var p1 = new Point(this.seg1.from.x,this.seg1.from.y);
+                var p2 = new Point(this.seg3.from.x,this.seg3.from.y);
+                var rect = new Rectangle(p1, p2);
+                this.handler(rect);
+                
+            }
+        }
+    },
+
+    mouseMove: function(e) {
+        //console.log('SelectRadius.mouseMove');
+        if (!this.isDigitizing) {
+            return;
+        }
+    
+        var p = this.getMap().getEventPosition(e);
+        this.seg1.to.setPx(p.x, this.seg1.from.py);
+        this.seg1.to.updateGeo();
+        this.seg2.from.setPx(p.x, this.seg1.from.py);
+        this.seg2.from.updateGeo();
+        this.seg2.to.setPx(p.x, p.y);
+        this.seg2.to.updateGeo();
+        this.seg3.from.setPx(p.x, p.y);
+        this.seg3.from.updateGeo();
+        this.seg3.to.setPx(this.seg1.from.px, p.y);
+        this.seg3.to.updateGeo();
+        this.seg4.from.setPx(this.seg1.from.px, p.y);
+        this.seg4.from.updateGeo();
+        this.clearContext();
+        this.draw(this.context);
+    },
+}
+    
+MultiPointHandlers = Class.create();
+MultiPointHandlers.prototype = {
+    mouseDown: function(e) {
+        if (OpenLayers.Event.isLeftClick(e)) {
+            var p = this.getMap().getEventPosition(e);
+
+            if (!this.isDigitizing) {
+                this.segments = [];
+                var point = this.getMap().pixToGeo(p.x, p.y);
+                var from = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
+                var to = new Fusion.Tool.Canvas.Node(point.x,point.y, this.getMap());
+                var seg = new Fusion.Tool.Canvas.Segment(from,to);
+                seg.setEditing(true);
+                this.addSegment(seg);
+                this.clearContext();
+                this.draw(this.context);     
+
+                this.isDigitizing = true;
+            } else {
+                var seg = this.lastSegment();
+                seg.setEditing(false);
+                seg = this.extendLine();
+                seg.setEditing(true);
+                this.clearContext();
+                this.draw(this.context);
+            }
+        }
+    },
+
+    mouseMove: function(e) {
+        //console.log('SelectRadius.mouseMove');
+        if (!this.isDigitizing) {
+            return;
+        }
+    
+        var p = this.getMap().getEventPosition(e);
+        var seg = this.lastSegment();
+        seg.to.setPx(p.x,p.y);
+        seg.to.updateGeo();
+        this.clearContext();
+        this.draw(this.context);
+    },
+    
+    dblClick: function(e) {
+        //console.log('Digitizer.dblClick');
+        if (!this.isDigitizing) {
+            return;
+        }
+        this.event = e;
+        var p = this.getMap().getEventPosition(e);
+        var point = this.getMap().pixToGeo(p.x, p.y);
+        var seg = this.lastSegment();
+        seg.setEditing(false);
+        seg.to.set(point.x,point.y);
+        this.clearContext();
+        this.draw(this.context);
+        this.isDigitizing = false;
+        this.deactivateCanvas();
+        
+        this.clean();
+        var ls = new LineString();
+        var nodes = this.getNodes();
+        for (var i=0; i<nodes.length; ++i) {
+          var node = nodes[i];
+          ls.AddPoint(new Point(node.x, node.y));
+        }
+        this.handler(ls);
+    }
+}
+    
+function Point(x, y) {
+    this.X = x;
+    this.Y = y;
+}
+
+function LineString()
+{
+    this.points = new Array();
+    this.Count = 0;
+
+    this.AddPoint = function(pt)
+    {
+        this.points.push(pt);
+        this.Count ++;
+    }
+
+    this.Point = function(i)
+    {
+        if(i < 0 || i >= this.points.length)
+            return null;
+        return this.points[i];
+    }
+}
+
+function Circle()
+{
+    this.Center = null;
+    this.Radius = 0;
+
+    this.SetRadius = function(pt)
+    {
+        dx = pt.X - this.Center.X;
+        dy = pt.Y - this.Center.Y;
+        this.Radius = Math.sqrt(dx*dx + dy*dy);
+    }
+}
+
+function Rectangle(p1, p2)
+{
+    this.Point1 = p1;
+    this.Point2 = p2;
+}
+
+function Polygon()
+{
+    this.LineStringInfo = LineString;
+    this.LineStringInfo();
+}
+

Modified: sandbox/jx2/jx/lib/jxlib.js
===================================================================
--- sandbox/jx2/jx/lib/jxlib.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/jx/lib/jxlib.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -27,4 +27,4 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  * DEALINGS IN THE SOFTWARE.
  *****************************************************************************/
-var MooTools={version:"1.2dev",build:""};var Native=function(J){J=J||{};var F=J.afterImplement||function(){};var G=J.generics;G=(G!==false);var H=J.legacy;var E=J.initialize;var B=J.protect;var A=J.name;var C=E||H;C.constructor=Native;C.$family={name:"native"};if(H&&E){C.prototype=H.prototype}C.prototype.constructor=C;if(A){var D=A.toLowerCase();C.prototype.$family={name:D};Native.typize(C,D)}var I=function(M,K,N,L){if(!B||L||!M.prototype[K]){M.prototype[K]=N}if(G){Native.genericize(M,K,B)}F.call(M,K,N);return M};C.implement=function(L,K,N){if(typeof L=="string"){return I(this,L,K,N)}for(var M in L){I(this,M,L[M],K)}return this};C.alias=function(M,K,N){if(typeof M=="string"){M=this.prototype[M];if(M){I(this,K,M,N)}}else{for(var L in M){this.alias(L,M[L],K)}}return this};return C};Native.implement=function(D,C){for(var B=0,A=D.length;B<A;B++){D[B].implement(C)}};Native.genericize=function(B,C,A){if((!A||!B[C])&&typeof B.prototype[C]=="function"){B[C]=function(){var D=Array.prototype.slice.call(arguments);return B.prototype[C].apply(D.shift(),D)}}};Native.typize=function(A,B){if(!A.type){A.type=function(C){return($type(C)===B)}}};Native.alias=function(E,B,A,F){for(var D=0,C=E.length;D<C;D++){E[D].alias(B,A,F)}};(function(B){for(var A in B){Native.typize(B[A],A)}})({"boolean":Boolean,"native":Native,object:Object});(function(B){for(var A in B){new Native({name:A,initialize:B[A],protect:true})}})({String:String,Function:Function,Number:Number,Array:Array,RegExp:RegExp,Date:Date});(function(B,A){for(var C=A.length;C--;C){Native.genericize(B,A[C],true)}return arguments.callee})(Array,["pop","push","reverse","shift","sort","splice","unshift","concat","join","slice","toString","valueOf","indexOf","lastIndexOf"])(String,["charAt","charCodeAt","concat","indexOf","lastIndexOf","match","replace","search","slice","split","substr","substring","toLowerCase","toUpperCase","valueOf"]);function $chk(A){return !!(A||A===0)}function $clear(A){clearTimeout(A);clearInterval(A);return null}function $defined(A){return(A!=undefined)}function $empty(){}function $arguments(A){return function(){return arguments[A]}}function $lambda(A){return(typeof A=="function")?A:function(){return A}}function $extend(C,A){for(var B in (A||{})){C[B]=A[B]}return C}function $unlink(C){var B;switch($type(C)){case"object":B={};for(var E in C){B[E]=$unlink(C[E])}break;case"hash":B=$unlink(C.getClean());break;case"array":B=[];for(var D=0,A=C.length;D<A;D++){B[D]=$unlink(C[D])}break;default:return C}return B}function $merge(){var E={};for(var D=0,A=arguments.length;D<A;D++){var B=arguments[D];if($type(B)!="object"){continue}for(var C in B){var G=B[C],F=E[C];E[C]=(F&&$type(G)=="object"&&$type(F)=="object")?$merge(F,G):$unlink(G)}}return E}function $pick(){for(var B=0,A=arguments.length;B<A;B++){if(arguments[B]!=undefined){return arguments[B]}}return null}function $random(B,A){return Math.floor(Math.random()*(A-B+1)+B)}function $splat(B){var A=$type(B);return(A)?((A!="array"&&A!="arguments")?[B]:B):[]}var $time=Date.now||function(){return new Date().getTime()};function $try(){for(var B=0,A=arguments.length;B<A;B++){try{return arguments[B]()}catch(C){}}return null}function $type(A){if(A==undefined){return false}if(A.$family){return(A.$family.name=="number"&&!isFinite(A))?false:A.$family.name}if(A.nodeName){switch(A.nodeType){case 1:return"element";case 3:return(/\S/).test(A.nodeValue)?"textnode":"whitespace"}}else{if(typeof A.length=="number"){if(A.callee){return"arguments"}else{if(A.item){return"collection"}}}}return typeof A}var Hash=new Native({name:"Hash",initialize:function(A){if($type(A)=="hash"){A=$unlink(A.getClean())}for(var B in A){this[B]=A[B]}return this}});Hash.implement({getLength:function(){var B=0;for(var A in this){if(this.hasOwnProperty(A)){B++}}return B},forEach:function(B,C){for(var A in this){if(this.hasOwnProperty(A)){B.call(C,this[A],A,this)}}},getClean:function(){var B={};for(var A in this){if(this.hasOwnProperty(A)){B[A]=this[A]}}return B}});Hash.alias("forEach","each");function $H(A){return new Hash(A)}Array.implement({forEach:function(C,D){for(var B=0,A=this.length;B<A;B++){C.call(D,this[B],B,this)}}});Array.alias("forEach","each");function $A(C){if(C.item){var D=[];for(var B=0,A=C.length;B<A;B++){D[B]=C[B]}return D}return Array.prototype.slice.call(C)}function $each(C,B,D){var A=$type(C);((A=="arguments"||A=="collection"||A=="array")?Array:Hash).each(C,B,D)}var Browser=new Hash({Engine:{name:"unknown",version:""},Platform:{name:(navigator.platform.match(/mac|win|linux/i)||["other"])[0].toLowerCase()},Features:{xpath:!!(document.evaluate),air:!!(window.runtime)},Plugins:{}});if(window.opera){Browser.Engine={name:"presto",version:(document.getElementsByClassName)?950:925}}else{if(window.ActiveXObject){Browser.Engine={name:"trident",version:(window.XMLHttpRequest)?5:4}}else{if(!navigator.taintEnabled){Browser.Engine={name:"webkit",version:(Browser.Features.xpath)?420:419}}else{if(document.getBoxObjectFor!=null){Browser.Engine={name:"gecko",version:(document.getElementsByClassName)?19:18}}}}}Browser.Engine[Browser.Engine.name]=Browser.Engine[Browser.Engine.name+Browser.Engine.version]=true;if(window.orientation!=undefined){Browser.Platform.name="ipod"}Browser.Platform[Browser.Platform.name]=true;Browser.Request=function(){return $try(function(){return new XMLHttpRequest()},function(){return new ActiveXObject("MSXML2.XMLHTTP")})};Browser.Features.xhr=!!(Browser.Request());Browser.Plugins.Flash=(function(){var A=($try(function(){return navigator.plugins["Shockwave Flash"].description},function(){return new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")})||"0 r0").match(/\d+/g);return{version:parseInt(A[0]||0+"."+A[1]||0),build:parseInt(A[2]||0)}})();function $exec(B){if(!B){return B}if(window.execScript){window.execScript(B)}else{var A=document.createElement("script");A.setAttribute("type","text/javascript");A.text=B;document.head.appendChild(A);document.head.removeChild(A)}return B}Native.UID=1;var $uid=(Browser.Engine.trident)?function(A){return(A.uid||(A.uid=[Native.UID++]))[0]}:function(A){return A.uid||(A.uid=Native.UID++)};var Window=new Native({name:"Window",legacy:(Browser.Engine.trident)?null:window.Window,initialize:function(A){$uid(A);if(!A.Element){A.Element=$empty;if(Browser.Engine.webkit){A.document.createElement("iframe")}A.Element.prototype=(Browser.Engine.webkit)?window["[[DOMElement.prototype]]"]:{}}return $extend(A,Window.Prototype)},afterImplement:function(B,A){window[B]=Window.Prototype[B]=A}});Window.Prototype={$family:{name:"window"}};new Window(window);var Document=new Native({name:"Document",legacy:(Browser.Engine.trident)?null:window.Document,initialize:function(A){$uid(A);A.head=A.getElementsByTagName("head")[0];A.html=A.getElementsByTagName("html")[0];A.window=A.defaultView||A.parentWindow;if(Browser.Engine.trident4){$try(function(){A.execCommand("BackgroundImageCache",false,true)})}return $extend(A,Document.Prototype)},afterImplement:function(B,A){document[B]=Document.Prototype[B]=A}});Document.Prototype={$family:{name:"document"}};new Document(document);Array.implement({every:function(C,D){for(var B=0,A=this.length;B<A;B++){if(!C.call(D,this[B],B,this)){return false}}return true},filter:function(D,E){var C=[];for(var B=0,A=this.length;B<A;B++){if(D.call(E,this[B],B,this)){C.push(this[B])}}return C},clean:function(){return this.filter($defined)},indexOf:function(C,D){var A=this.length;for(var B=(D<0)?Math.max(0,A+D):D||0;B<A;B++){if(this[B]===C){return B}}return -1},map:function(D,E){var C=[];for(var B=0,A=this.length;B<A;B++){C[B]=D.call(E,this[B],B,this)}return C},some:function(C,D){for(var B=0,A=this.length;B<A;B++){if(C.call(D,this[B],B,this)){return true}}return false},associate:function(C){var D={},B=Math.min(this.length,C.length);for(var A=0;A<B;A++){D[C[A]]=this[A]}return D},link:function(C){var A={};for(var E=0,B=this.length;E<B;E++){for(var D in C){if(C[D](this[E])){A[D]=this[E];delete C[D];break}}}return A},contains:function(A,B){return this.indexOf(A,B)!=-1},extend:function(C){for(var B=0,A=C.length;B<A;B++){this.push(C[B])}return this},getLast:function(){return(this.length)?this[this.length-1]:null},getRandom:function(){return(this.length)?this[$random(0,this.length-1)]:null},include:function(A){if(!this.contains(A)){this.push(A)}return this},combine:function(C){for(var B=0,A=C.length;B<A;B++){this.include(C[B])}return this},erase:function(B){for(var A=this.length;A--;A){if(this[A]===B){this.splice(A,1)}}return this},empty:function(){this.length=0;return this},flatten:function(){var D=[];for(var B=0,A=this.length;B<A;B++){var C=$type(this[B]);if(!C){continue}D=D.concat((C=="array"||C=="collection"||C=="arguments")?Array.flatten(this[B]):this[B])}return D},hexToRgb:function(B){if(this.length!=3){return null}var A=this.map(function(C){if(C.length==1){C+=C}return C.toInt(16)});return(B)?A:"rgb("+A+")"},rgbToHex:function(D){if(this.length<3){return null}if(this.length==4&&this[3]==0&&!D){return"transparent"}var B=[];for(var A=0;A<3;A++){var C=(this[A]-0).toString(16);B.push((C.length==1)?"0"+C:C)}return(D)?B:"#"+B.join("")}});Function.implement({extend:function(A){for(var B in A){this[B]=A[B]}return this},create:function(B){var A=this;B=B||{};return function(D){var C=B.arguments;C=(C!=undefined)?$splat(C):Array.slice(arguments,(B.event)?1:0);if(B.event){C=[D||window.event].extend(C)}var E=function(){return A.apply(B.bind||null,C)};if(B.delay){return setTimeout(E,B.delay)}if(B.periodical){return setInterval(E,B.periodical)}if(B.attempt){return $try(E)}return E()}},pass:function(A,B){return this.create({arguments:A,bind:B})},attempt:function(A,B){return this.create({arguments:A,bind:B,attempt:true})()},bind:function(B,A){return this.create({bind:B,arguments:A})},bindWithEvent:function(B,A){return this.create({bind:B,event:true,arguments:A})},delay:function(B,C,A){return this.create({delay:B,bind:C,arguments:A})()},periodical:function(A,C,B){return this.create({periodical:A,bind:C,arguments:B})()},run:function(A,B){return this.apply(B,$splat(A))}});Number.implement({limit:function(B,A){return Math.min(A,Math.max(B,this))},round:function(A){A=Math.pow(10,A||0);return Math.round(this*A)/A},times:function(B,C){for(var A=0;A<this;A++){B.call(C,A,this)}},toFloat:function(){return parseFloat(this)},toInt:function(A){return parseInt(this,A||10)}});Number.alias("times","each");(function(B){var A={};B.each(function(C){if(!Number[C]){A[C]=function(){return Math[C].apply(null,[this].concat($A(arguments)))}}});Number.implement(A)})(["abs","acos","asin","atan","atan2","ceil","cos","exp","floor","log","max","min","pow","sin","sqrt","tan"]);String.implement({test:function(A,B){return((typeof A=="string")?new RegExp(A,B):A).test(this)},contains:function(A,B){return(B)?(B+this+B).indexOf(B+A+B)>-1:this.indexOf(A)>-1},trim:function(){return this.replace(/^\s+|\s+$/g,"")},clean:function(){return this.replace(/\s+/g," ").trim()},camelCase:function(){return this.replace(/-\D/g,function(A){return A.charAt(1).toUpperCase()})},hyphenate:function(){return this.replace(/[A-Z]/g,function(A){return("-"+A.charAt(0).toLowerCase())})},capitalize:function(){return this.replace(/\b[a-z]/g,function(A){return A.toUpperCase()})},escapeRegExp:function(){return this.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1")},toInt:function(A){return parseInt(this,A||10)},toFloat:function(){return parseFloat(this)},hexToRgb:function(B){var A=this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);return(A)?A.slice(1).hexToRgb(B):null},rgbToHex:function(B){var A=this.match(/\d{1,3}/g);return(A)?A.rgbToHex(B):null},stripScripts:function(B){var A="";var C=this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi,function(){A+=arguments[1]+"\n";return""});if(B===true){$exec(A)}else{if($type(B)=="function"){B(A,C)}}return C},substitute:function(A,B){return this.replace(B||(/\\?\{([^}]+)\}/g),function(D,C){if(D.charAt(0)=="\\"){return D.slice(1)}return(A[C]!=undefined)?A[C]:""})}});Hash.implement({has:Object.prototype.hasOwnProperty,keyOf:function(B){for(var A in this){if(this.hasOwnProperty(A)&&this[A]===B){return A}}return null},hasValue:function(A){return(Hash.keyOf(this,A)!==null)},extend:function(A){Hash.each(A,function(C,B){Hash.set(this,B,C)},this);return this},combine:function(A){Hash.each(A,function(C,B){Hash.include(this,B,C)},this);return this},erase:function(A){if(this.hasOwnProperty(A)){delete this[A]}return this},get:function(A){return(this.hasOwnProperty(A))?this[A]:null},set:function(A,B){if(!this[A]||this.hasOwnProperty(A)){this[A]=B}return this},empty:function(){Hash.each(this,function(B,A){delete this[A]},this);return this},include:function(B,C){var A=this[B];if(A==undefined){this[B]=C}return this},map:function(B,C){var A=new Hash;Hash.each(this,function(E,D){A.set(D,B.call(C,E,D,this))},this);return A},filter:function(B,C){var A=new Hash;Hash.each(this,function(E,D){if(B.call(C,E,D,this)){A.set(D,E)}},this);return A},every:function(B,C){for(var A in this){if(this.hasOwnProperty(A)&&!B.call(C,this[A],A)){return false}}return true},some:function(B,C){for(var A in this){if(this.hasOwnProperty(A)&&B.call(C,this[A],A)){return true}}return false},getKeys:function(){var A=[];Hash.each(this,function(C,B){A.push(B)});return A},getValues:function(){var A=[];Hash.each(this,function(B){A.push(B)});return A},toQueryString:function(A){var B=[];Hash.each(this,function(F,E){if(A){E=A+"["+E+"]"}var D;switch($type(F)){case"object":D=Hash.toQueryString(F,E);break;case"array":var C={};F.each(function(H,G){C[G]=H});D=Hash.toQueryString(C,E);break;default:D=E+"="+encodeURIComponent(F)}if(F!=undefined){B.push(D)}});return B.join("&")}});Hash.alias({keyOf:"indexOf",hasValue:"contains"});var Event=new Native({name:"Event",initialize:function(A,F){F=F||window;var K=F.document;A=A||F.event;if(A.$extended){return A}this.$extended=true;var J=A.type;var G=A.target||A.srcElement;while(G&&G.nodeType==3){G=G.parentNode}if(J.test(/key/)){var B=A.which||A.keyCode;var M=Event.Keys.keyOf(B);if(J=="keydown"){var D=B-111;if(D>0&&D<13){M="f"+D}}M=M||String.fromCharCode(B).toLowerCase()}else{if(J.match(/(click|mouse|menu)/i)){K=(!K.compatMode||K.compatMode=="CSS1Compat")?K.html:K.body;var I={x:A.pageX||A.clientX+K.scrollLeft,y:A.pageY||A.clientY+K.scrollTop};var C={x:(A.pageX)?A.pageX-F.pageXOffset:A.clientX,y:(A.pageY)?A.pageY-F.pageYOffset:A.clientY};if(J.match(/DOMMouseScroll|mousewheel/)){var H=(A.wheelDelta)?A.wheelDelta/120:-(A.detail||0)/3}var E=(A.which==3)||(A.button==2);var L=null;if(J.match(/over|out/)){switch(J){case"mouseover":L=A.relatedTarget||A.fromElement;break;case"mouseout":L=A.relatedTarget||A.toElement}if(!(function(){while(L&&L.nodeType==3){L=L.parentNode}return true}).create({attempt:Browser.Engine.gecko})()){L=false}}}}return $extend(this,{event:A,type:J,page:I,client:C,rightClick:E,wheel:H,relatedTarget:L,target:G,code:B,key:M,shift:A.shiftKey,control:A.ctrlKey,alt:A.altKey,meta:A.metaKey})}});Event.Keys=new Hash({enter:13,up:38,down:40,left:37,right:39,esc:27,space:32,backspace:8,tab:9,"delete":46});Event.implement({stop:function(){return this.stopPropagation().preventDefault()},stopPropagation:function(){if(this.event.stopPropagation){this.event.stopPropagation()}else{this.event.cancelBubble=true}return this},preventDefault:function(){if(this.event.preventDefault){this.event.preventDefault()}else{this.event.returnValue=false}return this}});var Class=new Native({name:"Class",initialize:function(B){B=B||{};var A=function(E){for(var D in this){this[D]=$unlink(this[D])}for(var F in Class.Mutators){if(!this[F]){continue}Class.Mutators[F](this,this[F]);delete this[F]}this.constructor=A;if(E===$empty){return this}var C=(this.initialize)?this.initialize.apply(this,arguments):this;if(this.options&&this.options.initialize){this.options.initialize.call(this)}return C};$extend(A,this);A.constructor=Class;A.prototype=B;return A}});Class.implement({implement:function(){Class.Mutators.Implements(this.prototype,Array.slice(arguments));return this}});Class.Mutators={Implements:function(A,B){$splat(B).each(function(C){$extend(A,($type(C)=="class")?new C($empty):C)})},Extends:function(self,klass){var instance=new klass($empty);delete instance.parent;delete instance.parentOf;for(var key in instance){var current=self[key],previous=instance[key];if(current==undefined){self[key]=previous;continue}var ctype=$type(current),ptype=$type(previous);if(ctype!=ptype){continue}switch(ctype){case"function":if(!arguments.callee.caller){self[key]=eval("("+String(current).replace(/\bthis\.parent\(\s*(\))?/g,function(full,close){return"arguments.callee._parent_.call(this"+(close||", ")})+")")}self[key]._parent_=previous;break;case"object":self[key]=$merge(previous,current)}}self.parent=function(){return arguments.callee.caller._parent_.apply(this,arguments)};self.parentOf=function(descendant){return descendant._parent_.apply(this,Array.slice(arguments,1))}}};var Chain=new Class({chain:function(){this.$chain=(this.$chain||[]).extend(arguments);return this},callChain:function(){return(this.$chain&&this.$chain.length)?this.$chain.shift().apply(this,arguments):false},clearChain:function(){if(this.$chain){this.$chain.empty()}return this}});var Events=new Class({addEvent:function(C,B,A){C=Events.removeOn(C);if(B!=$empty){this.$events=this.$events||{};this.$events[C]=this.$events[C]||[];this.$events[C].include(B);if(A){B.internal=true}}return this},addEvents:function(A){for(var B in A){this.addEvent(B,A[B])}return this},fireEvent:function(C,B,A){C=Events.removeOn(C);if(!this.$events||!this.$events[C]){return this}this.$events[C].each(function(D){D.create({bind:this,delay:A,"arguments":B})()},this);return this},removeEvent:function(B,A){B=Events.removeOn(B);if(!this.$events||!this.$events[B]){return this}if(!A.internal){this.$events[B].erase(A)}return this},removeEvents:function(C){for(var D in this.$events){if(C&&C!=D){continue}var B=this.$events[D];for(var A=B.length;A--;A){this.removeEvent(D,B[A])}}return this}});Events.removeOn=function(A){return A.replace(/^on([A-Z])/,function(B,C){return C.toLowerCase()})};var Options=new Class({setOptions:function(){this.options=$merge.run([this.options].extend(arguments));if(!this.addEvent){return this}for(var A in this.options){if($type(this.options[A])!="function"||!(/^on[A-Z]/).test(A)){continue}this.addEvent(A,this.options[A]);delete this.options[A]}return this}});Document.implement({newElement:function(A,B){if(Browser.Engine.trident&&B){["name","type","checked"].each(function(C){if(!B[C]){return }A+=" "+C+'="'+B[C]+'"';if(C!="checked"){delete B[C]}});A="<"+A+">"}return $.element(this.createElement(A)).set(B)},newTextNode:function(A){return this.createTextNode(A)},getDocument:function(){return this},getWindow:function(){return this.defaultView||this.parentWindow},purge:function(){var C=this.getElementsByTagName("*");for(var B=0,A=C.length;B<A;B++){Browser.freeMem(C[B])}}});var Element=new Native({name:"Element",legacy:window.Element,initialize:function(A,B){var C=Element.Constructors.get(A);if(C){return C(B)}if(typeof A=="string"){return document.newElement(A,B)}return $(A).set(B)},afterImplement:function(A,B){if(!Array[A]){Elements.implement(A,Elements.multi(A))}Element.Prototype[A]=B}});Element.Prototype={$family:{name:"element"}};Element.Constructors=new Hash;var IFrame=new Native({name:"IFrame",generics:false,initialize:function(){var E=Array.link(arguments,{properties:Object.type,iframe:$defined});var C=E.properties||{};var B=$(E.iframe)||false;var D=C.onload||$empty;delete C.onload;C.id=C.name=$pick(C.id,C.name,B.id,B.name,"IFrame_"+$time());B=new Element(B||"iframe",C);var A=function(){var F=$try(function(){return B.contentWindow.location.host});if(F&&F==window.location.host){var H=new Window(B.contentWindow);var G=new Document(B.contentWindow.document);$extend(H.Element.prototype,Element.Prototype)}D.call(B.contentWindow,B.contentWindow.document)};(!window.frames[C.id])?B.addListener("load",A):A();return B}});var Elements=new Native({initialize:function(F,B){B=$extend({ddup:true,cash:true},B);F=F||[];if(B.ddup||B.cash){var G={},E=[];for(var C=0,A=F.length;C<A;C++){var D=$.element(F[C],!B.cash);if(B.ddup){if(G[D.uid]){continue}G[D.uid]=true}E.push(D)}F=E}return(B.cash)?$extend(F,this):F}});Elements.implement({filter:function(A,B){if(!A){return this}return new Elements(Array.filter(this,(typeof A=="string")?function(C){return C.match(A)}:A,B))}});Elements.multi=function(A){return function(){var B=[];var F=true;for(var D=0,C=this.length;D<C;D++){var E=this[D][A].apply(this[D],arguments);B.push(E);if(F){F=($type(E)=="element")}}return(F)?new Elements(B):B}};Window.implement({$:function(B,C){if(B&&B.$family&&B.uid){return B}var A=$type(B);return($[A])?$[A](B,C,this.document):null},$$:function(A){if(arguments.length==1&&typeof A=="string"){return this.document.getElements(A)}var F=[];var C=Array.flatten(arguments);for(var D=0,B=C.length;D<B;D++){var E=C[D];switch($type(E)){case"element":E=[E];break;case"string":E=this.document.getElements(E,true);break;default:E=false}if(E){F.extend(E)}}return new Elements(F)},getDocument:function(){return this.document},getWindow:function(){return this}});$.string=function(C,B,A){C=A.getElementById(C);return(C)?$.element(C,B):null};$.element=function(A,D){$uid(A);if(!D&&!A.$family&&!(/^object|embed$/i).test(A.tagName)){var B=Element.Prototype;for(var C in B){A[C]=B[C]}}return A};$.object=function(B,C,A){if(B.toElement){return $.element(B.toElement(A),C)}return null};$.textnode=$.whitespace=$.window=$.document=$arguments(0);Native.implement([Element,Document],{getElement:function(A,B){return $(this.getElements(A,true)[0]||null,B)},getElements:function(A,D){A=A.split(",");var C=[];var B=(A.length>1);A.each(function(E){var F=this.getElementsByTagName(E.trim());(B)?C.extend(F):C=F},this);return new Elements(C,{ddup:B,cash:!D})}});Element.Storage={get:function(A){return(this[A]||(this[A]={}))}};Element.Inserters=new Hash({before:function(B,A){if(A.parentNode){A.parentNode.insertBefore(B,A)}},after:function(B,A){if(!A.parentNode){return }var C=A.nextSibling;(C)?A.parentNode.insertBefore(B,C):A.parentNode.appendChild(B)},bottom:function(B,A){A.appendChild(B)},top:function(B,A){var C=A.firstChild;(C)?A.insertBefore(B,C):A.appendChild(B)}});Element.Inserters.inside=Element.Inserters.bottom;Element.Inserters.each(function(C,B){var A=B.capitalize();Element.implement("inject"+A,function(D){C(this,$(D,true));return this});Element.implement("grab"+A,function(D){C($(D,true),this);return this})});Element.implement({getDocument:function(){return this.ownerDocument},getWindow:function(){return this.ownerDocument.getWindow()},getElementById:function(D,C){var B=this.ownerDocument.getElementById(D);if(!B){return null}for(var A=B.parentNode;A!=this;A=A.parentNode){if(!A){return null}}return $.element(B,C)},set:function(D,B){switch($type(D)){case"object":for(var C in D){this.set(C,D[C])}break;case"string":var A=Element.Properties.get(D);(A&&A.set)?A.set.apply(this,Array.slice(arguments,1)):this.setProperty(D,B)}return this},get:function(B){var A=Element.Properties.get(B);return(A&&A.get)?A.get.apply(this,Array.slice(arguments,1)):this.getProperty(B)},erase:function(B){var A=Element.Properties.get(B);(A&&A.erase)?A.erase.apply(this,Array.slice(arguments,1)):this.removeProperty(B);return this},match:function(A){return(!A||Element.get(this,"tag")==A)},inject:function(B,A){Element.Inserters.get(A||"bottom")(this,$(B,true));return this},wraps:function(B,A){B=$(B,true);return this.replaces(B).grab(B,A)},grab:function(B,A){Element.Inserters.get(A||"bottom")($(B,true),this);return this},appendText:function(B,A){return this.grab(this.getDocument().newTextNode(B),A)},adopt:function(){Array.flatten(arguments).each(function(A){A=$(A,true);if(A){this.appendChild(A)}},this);return this},dispose:function(){return(this.parentNode)?this.parentNode.removeChild(this):this},clone:function(D,C){switch($type(this)){case"element":var H={};for(var G=0,E=this.attributes.length;G<E;G++){var B=this.attributes[G],L=B.nodeName.toLowerCase();if(Browser.Engine.trident&&(/input/i).test(this.tagName)&&(/width|height/).test(L)){continue}var K=(L=="style"&&this.style)?this.style.cssText:B.nodeValue;if(!$chk(K)||L=="uid"||(L=="id"&&!C)){continue}if(K!="inherit"&&["string","number"].contains($type(K))){H[L]=K}}var J=new Element(this.nodeName.toLowerCase(),H);if(D!==false){for(var I=0,F=this.childNodes.length;I<F;I++){var A=Element.clone(this.childNodes[I],true,C);if(A){J.grab(A)}}}return J;case"textnode":return document.newTextNode(this.nodeValue)}return null},replaces:function(A){A=$(A,true);A.parentNode.replaceChild(this,A);return this},hasClass:function(A){return this.className.contains(A," ")},addClass:function(A){if(!this.hasClass(A)){this.className=(this.className+" "+A).clean()}return this},removeClass:function(A){this.className=this.className.replace(new RegExp("(^|\\s)"+A+"(?:\\s|$)"),"$1").clean();return this},toggleClass:function(A){return this.hasClass(A)?this.removeClass(A):this.addClass(A)},getComputedStyle:function(B){if(this.currentStyle){return this.currentStyle[B.camelCase()]}var A=this.getWindow().getComputedStyle(this,null);return(A)?A.getPropertyValue([B.hyphenate()]):null},empty:function(){$A(this.childNodes).each(function(A){Browser.freeMem(A);Element.empty(A);Element.dispose(A)},this);return this},destroy:function(){Browser.freeMem(this.empty().dispose());return null},getSelected:function(){return new Elements($A(this.options).filter(function(A){return A.selected}))},toQueryString:function(){var A=[];this.getElements("input, select, textarea").each(function(B){if(!B.name||B.disabled){return }var C=(B.tagName.toLowerCase()=="select")?Element.getSelected(B).map(function(D){return D.value}):((B.type=="radio"||B.type=="checkbox")&&!B.checked)?null:B.value;$splat(C).each(function(D){if(D){A.push(B.name+"="+encodeURIComponent(D))}})});return A.join("&")},getProperty:function(C){var B=Element.Attributes,A=B.Props[C];var D=(A)?this[A]:this.getAttribute(C,2);return(B.Bools[C])?!!D:(A)?D:D||null},getProperties:function(){var A=$A(arguments);return A.map(function(B){return this.getProperty(B)},this).associate(A)},setProperty:function(D,E){var C=Element.Attributes,B=C.Props[D],A=$defined(E);if(B&&C.Bools[D]){E=(E||!A)?true:false}else{if(!A){return this.removeProperty(D)}}(B)?this[B]=E:this.setAttribute(D,E);return this},setProperties:function(A){for(var B in A){this.setProperty(B,A[B])}return this},removeProperty:function(D){var C=Element.Attributes,B=C.Props[D],A=(B&&C.Bools[D]);(B)?this[B]=(A)?false:"":this.removeAttribute(D);return this},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this}});(function(){var A=function(D,B,I,C,F,H){var E=D[I||B];var G=[];while(E){if(E.nodeType==1&&(!C||Element.match(E,C))){G.push(E);if(!F){break}}E=E[B]}return(F)?new Elements(G,{ddup:false,cash:!H}):$(G[0],H)};Element.implement({getPrevious:function(B,C){return A(this,"previousSibling",null,B,false,C)},getAllPrevious:function(B,C){return A(this,"previousSibling",null,B,true,C)},getNext:function(B,C){return A(this,"nextSibling",null,B,false,C)},getAllNext:function(B,C){return A(this,"nextSibling",null,B,true,C)},getFirst:function(B,C){return A(this,"nextSibling","firstChild",B,false,C)},getLast:function(B,C){return A(this,"previousSibling","lastChild",B,false,C)},getParent:function(B,C){return A(this,"parentNode",null,B,false,C)},getParents:function(B,C){return A(this,"parentNode",null,B,true,C)},getChildren:function(B,C){return A(this,"nextSibling","firstChild",B,true,C)},hasChild:function(B){B=$(B,true);return(!!B&&$A(this.getElementsByTagName(B.tagName)).contains(B))}})})();Element.Properties=new Hash;Element.Properties.style={set:function(A){this.style.cssText=A},get:function(){return this.style.cssText},erase:function(){this.style.cssText=""}};Element.Properties.tag={get:function(){return this.tagName.toLowerCase()}};Element.Properties.href={get:function(){return(!this.href)?null:this.href.replace(new RegExp("^"+document.location.protocol+"//"+document.location.host),"")}};Element.Properties.html={set:function(){return this.innerHTML=Array.flatten(arguments).join("")}};Native.implement([Element,Window,Document],{addListener:function(B,A){if(this.addEventListener){this.addEventListener(B,A,false)}else{this.attachEvent("on"+B,A)}return this},removeListener:function(B,A){if(this.removeEventListener){this.removeEventListener(B,A,false)}else{this.detachEvent("on"+B,A)}return this},retrieve:function(B,A){var D=Element.Storage.get(this.uid);var C=D[B];if($defined(A)&&!$defined(C)){C=D[B]=A}return $pick(C)},store:function(B,A){var C=Element.Storage.get(this.uid);C[B]=A;return this},eliminate:function(A){var B=Element.Storage.get(this.uid);delete B[A];return this}});Element.Attributes=new Hash({Props:{html:"innerHTML","class":"className","for":"htmlFor",text:(Browser.Engine.trident)?"innerText":"textContent"},Bools:["compact","nowrap","ismap","declare","noshade","checked","disabled","readonly","multiple","selected","noresize","defer"],Camels:["value","accessKey","cellPadding","cellSpacing","colSpan","frameBorder","maxLength","readOnly","rowSpan","tabIndex","useMap"]});Browser.freeMem=function(A){if(!A){return }if(Browser.Engine.trident&&(/object/i).test(A.tagName)){for(var B in A){if(typeof A[B]=="function"){A[B]=$empty}}Element.dispose(A)}if(A.uid&&A.removeEvents){A.removeEvents()}};(function(B){var C=B.Bools,A=B.Camels;B.Bools=C=C.associate(C);Hash.extend(Hash.combine(B.Props,C),A.associate(A.map(function(D){return D.toLowerCase()})));B.erase("Camels")})(Element.Attributes);window.addListener("unload",function(){window.removeListener("unload",arguments.callee);document.purge();if(Browser.Engine.trident){CollectGarbage()}});Element.Properties.events={set:function(A){this.addEvents(A)}};Native.implement([Element,Window,Document],{addEvent:function(E,G){var H=this.retrieve("events",{});H[E]=H[E]||{keys:[],values:[]};if(H[E].keys.contains(G)){return this}H[E].keys.push(G);var F=E,A=Element.Events.get(E),C=G,I=this;if(A){if(A.onAdd){A.onAdd.call(this,G)}if(A.condition){C=function(J){if(A.condition.call(this,J)){return G.call(this,J)}return false}}F=A.base||F}var D=function(){return G.call(I)};var B=Element.NativeEvents[F]||0;if(B){if(B==2){D=function(J){J=new Event(J,I.getWindow());if(C.call(I,J)===false){J.stop()}}}this.addListener(F,D)}H[E].values.push(D);return this},removeEvent:function(D,C){var B=this.retrieve("events");if(!B||!B[D]){return this}var G=B[D].keys.indexOf(C);if(G==-1){return this}var A=B[D].keys.splice(G,1)[0];var F=B[D].values.splice(G,1)[0];var E=Element.Events.get(D);if(E){if(E.onRemove){E.onRemove.call(this,C)}D=E.base||D}return(Element.NativeEvents[D])?this.removeListener(D,F):this},addEvents:function(A){for(var B in A){this.addEvent(B,A[B])}return this},removeEvents:function(B){var A=this.retrieve("events");if(!A){return this}if(!B){for(var C in A){this.removeEvents(C)}A=null}else{if(A[B]){while(A[B].keys[0]){this.removeEvent(B,A[B].keys[0])}A[B]=null}}return this},fireEvent:function(D,B,A){var C=this.retrieve("events");if(!C||!C[D]){return this}C[D].keys.each(function(E){E.create({bind:this,delay:A,"arguments":B})()},this);return this},cloneEvents:function(D,A){D=$(D);var C=D.retrieve("events");if(!C){return this}if(!A){for(var B in C){this.cloneEvents(D,B)}}else{if(C[A]){C[A].keys.each(function(E){this.addEvent(A,E)},this)}}return this}});Element.NativeEvents={click:2,dblclick:2,mouseup:2,mousedown:2,contextmenu:2,mousewheel:2,DOMMouseScroll:2,mouseover:2,mouseout:2,mousemove:2,selectstart:2,selectend:2,keydown:2,keypress:2,keyup:2,focus:2,blur:2,change:2,reset:2,select:2,submit:2,load:1,unload:1,beforeunload:2,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1};(function(){var A=function(B){var C=B.relatedTarget;if(C==undefined){return true}if(C===false){return false}return($type(this)!="document"&&C!=this&&C.prefix!="xul"&&!this.hasChild(C))};Element.Events=new Hash({mouseenter:{base:"mouseover",condition:A},mouseleave:{base:"mouseout",condition:A},mousewheel:{base:(Browser.Engine.gecko)?"DOMMouseScroll":"mousewheel"}})})();Element.Properties.styles={set:function(A){this.setStyles(A)}};Element.Properties.opacity={set:function(A,B){if(!B){if(A==0){if(this.style.visibility!="hidden"){this.style.visibility="hidden"}}else{if(this.style.visibility!="visible"){this.style.visibility="visible"}}}if(!this.currentStyle||!this.currentStyle.hasLayout){this.style.zoom=1}if(Browser.Engine.trident){this.style.filter=(A==1)?"":"alpha(opacity="+A*100+")"}this.style.opacity=A;this.store("opacity",A)},get:function(){return this.retrieve("opacity",1)}};Element.implement({setOpacity:function(A){return this.set("opacity",A,true)},getOpacity:function(){return this.get("opacity")},setStyle:function(B,A){switch(B){case"opacity":return this.set("opacity",parseFloat(A));case"float":B=(Browser.Engine.trident)?"styleFloat":"cssFloat"}B=B.camelCase();if($type(A)!="string"){var C=(Element.Styles.get(B)||"@").split(" ");A=$splat(A).map(function(E,D){if(!C[D]){return""}return($type(E)=="number")?C[D].replace("@",Math.round(E)):E}).join(" ")}else{if(A==String(Number(A))){A=Math.round(A)}}this.style[B]=A;return this},getStyle:function(G){switch(G){case"opacity":return this.get("opacity");case"float":G=(Browser.Engine.trident)?"styleFloat":"cssFloat"}G=G.camelCase();var A=this.style[G];if(!$chk(A)){A=[];for(var F in Element.ShortStyles){if(G!=F){continue}for(var E in Element.ShortStyles[F]){A.push(this.getStyle(E))}return A.join(" ")}A=this.getComputedStyle(G)}if(A){A=String(A);var C=A.match(/rgba?\([\d\s,]+\)/);if(C){A=A.replace(C[0],C[0].rgbToHex())}}if(Browser.Engine.presto||(Browser.Engine.trident&&!$chk(parseInt(A)))){if(G.test(/^(height|width)$/)){var B=(G=="width")?["left","right"]:["top","bottom"],D=0;B.each(function(H){D+=this.getStyle("border-"+H+"-width").toInt()+this.getStyle("padding-"+H).toInt()},this);return this["offset"+G.capitalize()]-D+"px"}if(Browser.Engine.presto&&String(A).test("px")){return A}if(G.test(/(border(.+)Width|margin|padding)/)){return"0px"}}return A},setStyles:function(B){for(var A in B){this.setStyle(A,B[A])}return this},getStyles:function(){var A={};Array.each(arguments,function(B){A[B]=this.getStyle(B)},this);return A}});Element.Styles=new Hash({left:"@px",top:"@px",bottom:"@px",right:"@px",width:"@px",height:"@px",maxWidth:"@px",maxHeight:"@px",minWidth:"@px",minHeight:"@px",backgroundColor:"rgb(@, @, @)",backgroundPosition:"@px @px",color:"rgb(@, @, @)",fontSize:"@px",letterSpacing:"@px",lineHeight:"@px",clip:"rect(@px @px @px @px)",margin:"@px @px @px @px",padding:"@px @px @px @px",border:"@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)",borderWidth:"@px @px @px @px",borderStyle:"@ @ @ @",borderColor:"rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)",zIndex:"@",zoom:"@",fontWeight:"@",textIndent:"@px",opacity:"@"});Element.ShortStyles={margin:{},padding:{},border:{},borderWidth:{},borderStyle:{},borderColor:{}};["Top","Right","Bottom","Left"].each(function(G){var F=Element.ShortStyles;var B=Element.Styles;["margin","padding"].each(function(H){var I=H+G;F[H][I]=B[I]="@px"});var E="border"+G;F.border[E]=B[E]="@px @ rgb(@, @, @)";var D=E+"Width",A=E+"Style",C=E+"Color";F[E]={};F.borderWidth[D]=F[E][D]=B[D]="@px";F.borderStyle[A]=F[E][A]=B[A]="@";F.borderColor[C]=F[E][C]=B[C]="rgb(@, @, @)"});(function(){Element.implement({scrollTo:function(H,I){if(B(this)){this.getWindow().scrollTo(H,I)}else{this.scrollLeft=H;this.scrollTop=I}return this},getSize:function(){if(B(this)){return this.getWindow().getSize()}return{x:this.offsetWidth,y:this.offsetHeight}},getScrollSize:function(){if(B(this)){return this.getWindow().getScrollSize()}return{x:this.scrollWidth,y:this.scrollHeight}},getScroll:function(){if(B(this)){return this.getWindow().getScroll()}return{x:this.scrollLeft,y:this.scrollTop}},getScrolls:function(){var I=this,H={x:0,y:0};while(I&&!B(I)){H.x+=I.scrollLeft;H.y+=I.scrollTop;I=I.parentNode}return H},getOffsetParent:function(){var H=this;if(B(H)){return null}if(!Browser.Engine.trident){return H.offsetParent}while((H=H.parentNode)&&!B(H)){if(D(H,"position")!="static"){return H}}return null},getOffsets:function(){var I=this,H={x:0,y:0};if(B(this)){return H}while(I&&!B(I)){H.x+=I.offsetLeft;H.y+=I.offsetTop;if(Browser.Engine.gecko){if(!F(I)){H.x+=C(I);H.y+=G(I)}var J=I.parentNode;if(J&&D(J,"overflow")!="visible"){H.x+=C(J);H.y+=G(J)}}else{if(I!=this&&(Browser.Engine.trident||Browser.Engine.webkit)){H.x+=C(I);H.y+=G(I)}}I=I.offsetParent;if(Browser.Engine.trident){while(I&&!I.currentStyle.hasLayout){I=I.offsetParent}}}if(Browser.Engine.gecko&&!F(this)){H.x-=C(this);H.y-=G(this)}return H},getPosition:function(K){if(B(this)){return{x:0,y:0}}var L=this.getOffsets(),I=this.getScrolls();var H={x:L.x-I.x,y:L.y-I.y};var J=(K&&(K=$(K)))?K.getPosition():{x:0,y:0};return{x:H.x-J.x,y:H.y-J.y}},getCoordinates:function(J){if(B(this)){return this.getWindow().getCoordinates()}var H=this.getPosition(J),I=this.getSize();var K={left:H.x,top:H.y,width:I.x,height:I.y};K.right=K.left+K.width;K.bottom=K.top+K.height;return K},computePosition:function(H){return{left:H.x-E(this,"margin-left"),top:H.y-E(this,"margin-top")}},position:function(H){return this.setStyles(this.computePosition(H))}});Native.implement([Document,Window],{getSize:function(){var I=this.getWindow();if(Browser.Engine.presto||Browser.Engine.webkit){return{x:I.innerWidth,y:I.innerHeight}}var H=A(this);return{x:H.clientWidth,y:H.clientHeight}},getScroll:function(){var I=this.getWindow();var H=A(this);return{x:I.pageXOffset||H.scrollLeft,y:I.pageYOffset||H.scrollTop}},getScrollSize:function(){var I=A(this);var H=this.getSize();return{x:Math.max(I.scrollWidth,H.x),y:Math.max(I.scrollHeight,H.y)}},getPosition:function(){return{x:0,y:0}},getCoordinates:function(){var H=this.getSize();return{top:0,left:0,bottom:H.y,right:H.x,height:H.y,width:H.x}}});var D=Element.getComputedStyle;function E(H,I){return D(H,I).toInt()||0}function F(H){return D(H,"-moz-box-sizing")=="border-box"}function G(H){return E(H,"border-top-width")}function C(H){return E(H,"border-left-width")}function B(H){return(/^(?:body|html)$/i).test(H.tagName)}function A(H){var I=H.getDocument();return(!I.compatMode||I.compatMode=="CSS1Compat")?I.html:I.body}})();Native.implement([Window,Document,Element],{getHeight:function(){return this.getSize().y},getWidth:function(){return this.getSize().x},getScrollTop:function(){return this.getScroll().y},getScrollLeft:function(){return this.getScroll().x},getScrollHeight:function(){return this.getScrollSize().y},getScrollWidth:function(){return this.getScrollSize().x},getTop:function(){return this.getPosition().y},getLeft:function(){return this.getPosition().x}});Native.implement([Document,Element],{getElements:function(H,G){H=H.split(",");var C,E={};for(var D=0,B=H.length;D<B;D++){var A=H[D],F=Selectors.Utils.search(this,A,E);if(D!=0&&F.item){F=$A(F)}C=(D==0)?F:(C.item)?$A(C).concat(F):C.concat(F)}return new Elements(C,{ddup:(H.length>1),cash:!G})}});Element.implement({match:function(B){if(!B){return true}var D=Selectors.Utils.parseTagAndID(B);var A=D[0],E=D[1];if(!Selectors.Filters.byID(this,E)||!Selectors.Filters.byTag(this,A)){return false}var C=Selectors.Utils.parseSelector(B);return(C)?Selectors.Utils.filter(this,C,{}):true}});var Selectors={Cache:{nth:{},parsed:{}}};Selectors.RegExps={id:(/#([\w-]+)/),tag:(/^(\w+|\*)/),quick:(/^(\w+|\*)$/),splitter:(/\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g),combined:(/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)["']?(.*?)["']?)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g)};Selectors.Utils={chk:function(B,C){if(!C){return true}var A=$uid(B);if(!C[A]){return C[A]=true}return false},parseNthArgument:function(F){if(Selectors.Cache.nth[F]){return Selectors.Cache.nth[F]}var C=F.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);if(!C){return false}var E=parseInt(C[1]);var B=(E||E===0)?E:1;var D=C[2]||false;var A=parseInt(C[3])||0;if(B!=0){A--;while(A<1){A+=B}while(A>=B){A-=B}}else{B=A;D="index"}switch(D){case"n":C={a:B,b:A,special:"n"};break;case"odd":C={a:2,b:0,special:"n"};break;case"even":C={a:2,b:1,special:"n"};break;case"first":C={a:0,special:"index"};break;case"last":C={special:"last-child"};break;case"only":C={special:"only-child"};break;default:C={a:(B-1),special:"index"}}return Selectors.Cache.nth[F]=C},parseSelector:function(E){if(Selectors.Cache.parsed[E]){return Selectors.Cache.parsed[E]}var D,H={classes:[],pseudos:[],attributes:[]};while((D=Selectors.RegExps.combined.exec(E))){var I=D[1],G=D[2],F=D[3],B=D[4],C=D[5],J=D[6];if(I){H.classes.push(I)}else{if(C){var A=Selectors.Pseudo.get(C);if(A){H.pseudos.push({parser:A,argument:J})}else{H.attributes.push({name:C,operator:"=",value:J})}}else{if(G){H.attributes.push({name:G,operator:F,value:B})}}}}if(!H.classes.length){delete H.classes}if(!H.attributes.length){delete H.attributes}if(!H.pseudos.length){delete H.pseudos}if(!H.classes&&!H.attributes&&!H.pseudos){H=null}return Selectors.Cache.parsed[E]=H},parseTagAndID:function(B){var A=B.match(Selectors.RegExps.tag);var C=B.match(Selectors.RegExps.id);return[(A)?A[1]:"*",(C)?C[1]:false]},filter:function(F,C,E){var D;if(C.classes){for(D=C.classes.length;D--;D){var G=C.classes[D];if(!Selectors.Filters.byClass(F,G)){return false}}}if(C.attributes){for(D=C.attributes.length;D--;D){var B=C.attributes[D];if(!Selectors.Filters.byAttribute(F,B.name,B.operator,B.value)){return false}}}if(C.pseudos){for(D=C.pseudos.length;D--;D){var A=C.pseudos[D];if(!Selectors.Filters.byPseudo(F,A.parser,A.argument,E)){return false}}}return true},getByTagAndID:function(B,A,D){if(D){var C=(B.getElementById)?B.getElementById(D,true):Element.getElementById(B,D,true);return(C&&Selectors.Filters.byTag(C,A))?[C]:[]}else{return B.getElementsByTagName(A)}},search:function(J,I,O){var B=[];var C=I.trim().replace(Selectors.RegExps.splitter,function(Z,Y,X){B.push(Y);return":)"+X}).split(":)");var K,F,E,V;for(var U=0,Q=C.length;U<Q;U++){var T=C[U];if(U==0&&Selectors.RegExps.quick.test(T)){K=J.getElementsByTagName(T);continue}var A=B[U-1];var L=Selectors.Utils.parseTagAndID(T);var W=L[0],M=L[1];if(U==0){K=Selectors.Utils.getByTagAndID(J,W,M)}else{var D={},H=[];for(var S=0,R=K.length;S<R;S++){H=Selectors.Getters[A](H,K[S],W,M,D)}K=H}var G=Selectors.Utils.parseSelector(T);if(G){E=[];for(var P=0,N=K.length;P<N;P++){V=K[P];if(Selectors.Utils.filter(V,G,O)){E.push(V)}}K=E}}return K}};Selectors.Getters={" ":function(H,G,I,A,E){var D=Selectors.Utils.getByTagAndID(G,I,A);for(var C=0,B=D.length;C<B;C++){var F=D[C];if(Selectors.Utils.chk(F,E)){H.push(F)}}return H},">":function(H,G,I,A,F){var C=Selectors.Utils.getByTagAndID(G,I,A);for(var E=0,D=C.length;E<D;E++){var B=C[E];if(B.parentNode==G&&Selectors.Utils.chk(B,F)){H.push(B)}}return H},"+":function(C,B,A,E,D){while((B=B.nextSibling)){if(B.nodeType==1){if(Selectors.Utils.chk(B,D)&&Selectors.Filters.byTag(B,A)&&Selectors.Filters.byID(B,E)){C.push(B)}break}}return C},"~":function(C,B,A,E,D){while((B=B.nextSibling)){if(B.nodeType==1){if(!Selectors.Utils.chk(B,D)){break}if(Selectors.Filters.byTag(B,A)&&Selectors.Filters.byID(B,E)){C.push(B)}}}return C}};Selectors.Filters={byTag:function(B,A){return(A=="*"||(B.tagName&&B.tagName.toLowerCase()==A))},byID:function(A,B){return(!B||(A.id&&A.id==B))},byClass:function(B,A){return(B.className&&B.className.contains(A," "))},byPseudo:function(A,D,C,B){return D.call(A,C,B)},byAttribute:function(C,D,B,E){var A=Element.prototype.getProperty.call(C,D);if(!A){return false}if(!B||E==undefined){return true}switch(B){case"=":return(A==E);case"*=":return(A.contains(E));case"^=":return(A.substr(0,E.length)==E);case"$=":return(A.substr(A.length-E.length)==E);case"!=":return(A!=E);case"~=":return A.contains(E," ");case"|=":return A.contains(E,"-")}return false}};Selectors.Pseudo=new Hash({empty:function(){return !(this.innerText||this.textContent||"").length},not:function(A){return !Element.match(this,A)},contains:function(A){return(this.innerText||this.textContent||"").contains(A)},"first-child":function(){return Selectors.Pseudo.index.call(this,0)},"last-child":function(){var A=this;while((A=A.nextSibling)){if(A.nodeType==1){return false}}return true},"only-child":function(){var B=this;while((B=B.previousSibling)){if(B.nodeType==1){return false}}var A=this;while((A=A.nextSibling)){if(A.nodeType==1){return false}}return true},"nth-child":function(G,E){G=(G==undefined)?"n":G;var C=Selectors.Utils.parseNthArgument(G);if(C.special!="n"){return Selectors.Pseudo[C.special].call(this,C.a,E)}var F=0;E.positions=E.positions||{};var D=$uid(this);if(!E.positions[D]){var B=this;while((B=B.previousSibling)){if(B.nodeType!=1){continue}F++;var A=E.positions[$uid(B)];if(A!=undefined){F=A+F;break}}E.positions[D]=F}return(E.positions[D]%C.a==C.b)},index:function(A){var B=this,C=0;while((B=B.previousSibling)){if(B.nodeType==1&&++C>A){return false}}return(C==A)},even:function(B,A){return Selectors.Pseudo["nth-child"].call(this,"2n+1",A)},odd:function(B,A){return Selectors.Pseudo["nth-child"].call(this,"2n",A)}});Element.Events.domready={onAdd:function(A){if(Browser.loaded){A.call(this)}}};(function(){var B=function(){if(Browser.loaded){return }Browser.loaded=true;window.fireEvent("domready");document.fireEvent("domready")};switch(Browser.Engine.name){case"webkit":(function(){(["loaded","complete"].contains(document.readyState))?B():arguments.callee.delay(50)})();break;case"trident":var A=document.createElement("div");(function(){($try(function(){A.doScroll("left");return $(A).inject(document.body).set("html","temp").dispose()}))?B():arguments.callee.delay(50)})();break;default:window.addEvent("load",B);document.addEvent("DOMContentLoaded",B)}})();var JSON=new Hash({encode:function(B){switch($type(B)){case"string":return'"'+B.replace(/[\x00-\x1f\\"]/g,JSON.$replaceChars)+'"';case"array":return"["+String(B.map(JSON.encode).filter($defined))+"]";case"object":case"hash":var A=[];Hash.each(B,function(E,D){var C=JSON.encode(E);if(C){A.push(JSON.encode(D)+":"+C)}});return"{"+A+"}";case"number":case"boolean":return String(B);case false:return"null"}return null},$specialChars:{"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},$replaceChars:function(A){return JSON.$specialChars[A]||"\\u00"+Math.floor(A.charCodeAt()/16).toString(16)+(A.charCodeAt()%16).toString(16)},decode:function(string,secure){if($type(string)!="string"||!string.length){return null}if(secure&&!(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g,"@").replace(/"[^"\\\n\r]*"/g,""))){return null}return eval("("+string+")")}});Native.implement([Hash,Array,String,Number],{toJSON:function(){return JSON.encode(this)}});var Cookie=new Class({Implements:Options,options:{path:false,domain:false,duration:false,secure:false,document:document},initialize:function(B,A){this.key=B;this.setOptions(A)},write:function(B){B=encodeURIComponent(B);if(this.options.domain){B+="; domain="+this.options.domain}if(this.options.path){B+="; path="+this.options.path}if(this.options.duration){var A=new Date();A.setTime(A.getTime()+this.options.duration*24*60*60*1000);B+="; expires="+A.toGMTString()}if(this.options.secure){B+="; secure"}this.options.document.cookie=this.key+"="+B;return this},read:function(){var A=this.options.document.cookie.match("(?:^|;)\\s*"+this.key.escapeRegExp()+"=([^;]*)");return(A)?decodeURIComponent(A[1]):null},dispose:function(){new Cookie(this.key,$merge(this.options,{duration:-1})).write("");return this}});Cookie.write=function(B,C,A){return new Cookie(B,A).write(C)};Cookie.read=function(A){return new Cookie(A).read()};Cookie.dispose=function(B,A){return new Cookie(B,A).dispose()};var Swiff=new Class({Implements:[Options],options:{id:null,height:1,width:1,container:null,properties:{},params:{quality:"high",allowScriptAccess:"always",wMode:"transparent",swLiveConnect:true},callBacks:{},vars:{}},toElement:function(){return this.object},initialize:function(L,M){this.instance="Swiff_"+$time();this.setOptions(M);M=this.options;var B=this.id=M.id||this.instance;var A=$(M.container);Swiff.CallBacks[this.instance]={};var E=M.params,G=M.vars,F=M.callBacks;var H=$extend({height:M.height,width:M.width},M.properties);var K=this;for(var D in F){Swiff.CallBacks[this.instance][D]=(function(N){return function(){return N.apply(K.object,arguments)}})(F[D]);G[D]="Swiff.CallBacks."+this.instance+"."+D}E.flashVars=Hash.toQueryString(G);if(Browser.Engine.trident){H.classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";E.movie=L}else{H.type="application/x-shockwave-flash";H.data=L}var J='<object id="'+B+'"';for(var I in H){J+=" "+I+'="'+H[I]+'"'}J+=">";for(var C in E){if(E[C]){J+='<param name="'+C+'" value="'+E[C]+'" />'}}J+="</object>";this.object=((A)?A.empty():new Element("div")).set("html",J).firstChild},replaces:function(A){A=$(A,true);A.parentNode.replaceChild(this.toElement(),A);return this},inject:function(A){$(A,true).appendChild(this.toElement());return this},remote:function(){return Swiff.remote.apply(Swiff,[this.toElement()].extend(arguments))}});Swiff.CallBacks={};Swiff.remote=function(obj,fn){var rs=obj.CallFunction('<invoke name="'+fn+'" returntype="javascript">'+__flash__argumentsToXML(arguments,2)+"</invoke>");return eval(rs)};var Fx=new Class({Implements:[Chain,Events,Options],options:{fps:50,unit:false,duration:500,link:"ignore",transition:function(A){return -(Math.cos(Math.PI*A)-1)/2}},initialize:function(A){this.subject=this.subject||this;this.setOptions(A);this.options.duration=Fx.Durations[this.options.duration]||this.options.duration.toInt();var B=this.options.wait;if(B===false){this.options.link="cancel"}},step:function(){var A=$time();if(A<this.time+this.options.duration){var B=this.options.transition((A-this.time)/this.options.duration);this.set(this.compute(this.from,this.to,B))}else{this.set(this.compute(this.from,this.to,1));this.complete()}},set:function(A){return A},compute:function(C,B,A){return Fx.compute(C,B,A)},check:function(A){if(!this.timer){return true}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(A.bind(this,Array.slice(arguments,1)));return false}return false},start:function(B,A){if(!this.check(arguments.callee,B,A)){return this}this.from=B;this.to=A;this.time=0;this.startTimer();this.onStart();return this},complete:function(){if(this.stopTimer()){this.onComplete()}return this},cancel:function(){if(this.stopTimer()){this.onCancel()}return this},onStart:function(){this.fireEvent("start",this.subject)},onComplete:function(){this.fireEvent("complete",this.subject);if(!this.callChain()){this.fireEvent("chainComplete",this.subject)}},onCancel:function(){this.fireEvent("cancel",this.subject).clearChain()},pause:function(){this.stopTimer();return this},resume:function(){this.startTimer();return this},stopTimer:function(){if(!this.timer){return false}this.time=$time()-this.time;this.timer=$clear(this.timer);return true},startTimer:function(){if(this.timer){return false}this.time=$time()-this.time;this.timer=this.step.periodical(Math.round(1000/this.options.fps),this);return true}});Fx.compute=function(C,B,A){return(B-C)*A+C};Fx.Durations={"short":250,normal:500,"long":1000};Fx.CSS=new Class({Extends:Fx,prepare:function(D,E,B){B=$splat(B);var C=B[1];if(!$chk(C)){B[1]=B[0];B[0]=D.getStyle(E)}var A=B.map(this.parse);return{from:A[0],to:A[1]}},parse:function(A){A=$lambda(A)();A=(typeof A=="string")?A.split(" "):$splat(A);return A.map(function(C){C=String(C);var B=false;Fx.CSS.Parsers.each(function(F,E){if(B){return }var D=F.parse(C);if($chk(D)){B={value:D,parser:F}}});B=B||{value:C,parser:Fx.CSS.Parsers.String};return B})},compute:function(D,C,B){var A=[];(Math.min(D.length,C.length)).times(function(E){A.push({value:D[E].parser.compute(D[E].value,C[E].value,B),parser:D[E].parser})});A.$family={name:"fx:css:value"};return A},serve:function(C,B){if($type(C)!="fx:css:value"){C=this.parse(C)}var A=[];C.each(function(D){A=A.concat(D.parser.serve(D.value,B))});return A},render:function(A,D,C,B){A.setStyle(D,this.serve(C,B))},search:function(A){if(Fx.CSS.Cache[A]){return Fx.CSS.Cache[A]}var B={};Array.each(document.styleSheets,function(E,D){var C=E.href;if(C&&C.contains("://")&&!C.contains(document.domain)){return }var F=E.rules||E.cssRules;Array.each(F,function(I,G){if(!I.style){return }var H=(I.selectorText)?I.selectorText.replace(/^\w+/,function(J){return J.toLowerCase()}):null;if(!H||!H.test("^"+A+"$")){return }Element.Styles.each(function(K,J){if(!I.style[J]||Element.ShortStyles[J]){return }K=String(I.style[J]);B[J]=(K.test(/^rgb/))?K.rgbToHex():K})})});return Fx.CSS.Cache[A]=B}});Fx.CSS.Cache={};Fx.CSS.Parsers=new Hash({Color:{parse:function(A){if(A.match(/^#[0-9a-f]{3,6}$/i)){return A.hexToRgb(true)}return((A=A.match(/(\d+),\s*(\d+),\s*(\d+)/)))?[A[1],A[2],A[3]]:false},compute:function(C,B,A){return C.map(function(E,D){return Math.round(Fx.compute(C[D],B[D],A))})},serve:function(A){return A.map(Number)}},Number:{parse:parseFloat,compute:Fx.compute,serve:function(B,A){return(A)?B+A:B}},String:{parse:$lambda(false),compute:$arguments(1),serve:$arguments(0)}});Fx.Tween=new Class({Extends:Fx.CSS,initialize:function(B,A){this.element=this.subject=$(B);this.parent(A)},set:function(B,A){if(arguments.length==1){A=B;B=this.property||this.options.property}this.render(this.element,B,A,this.options.unit);return this},start:function(C,E,D){if(!this.check(arguments.callee,C,E,D)){return this}var B=Array.flatten(arguments);this.property=this.options.property||B.shift();var A=this.prepare(this.element,this.property,B);return this.parent(A.from,A.to)}});Element.Properties.tween={set:function(A){var B=this.retrieve("tween");if(B){B.cancel()}return this.eliminate("tween").store("tween:options",$extend({link:"cancel"},A))},get:function(A){if(A||!this.retrieve("tween")){if(A||!this.retrieve("tween:options")){this.set("tween",A)}this.store("tween",new Fx.Tween(this,this.retrieve("tween:options")))}return this.retrieve("tween")}};Element.implement({tween:function(A,C,B){this.get("tween").start(arguments);return this},fade:function(C){var E=this.get("tween"),D="opacity",A;C=$pick(C,"toggle");switch(C){case"in":E.start(D,1);break;case"out":E.start(D,0);break;case"show":E.set(D,1);break;case"hide":E.set(D,0);break;case"toggle":var B=this.retrieve("fade:flag",this.get("opacity")==1);E.start(D,(B)?0:1);this.store("fade:flag",!B);A=true;break;default:E.start(D,arguments)}if(!A){this.eliminate("fade:flag")}return this},highlight:function(C,A){if(!A){A=this.retrieve("highlight:original",this.getStyle("background-color"));A=(A=="transparent")?"#fff":A}var B=this.get("tween");B.start("background-color",C||"#ffff88",A).chain(function(){this.setStyle("background-color",this.retrieve("highlight:original"));B.callChain()}.bind(this));return this}});Fx.Morph=new Class({Extends:Fx.CSS,initialize:function(B,A){this.element=this.subject=$(B);this.parent(A)},set:function(A){if(typeof A=="string"){A=this.search(A)}for(var B in A){this.render(this.element,B,A[B],this.options.unit)}return this},compute:function(E,D,C){var A={};for(var B in E){A[B]=this.parent(E[B],D[B],C)}return A},start:function(B){if(!this.check(arguments.callee,B)){return this}if(typeof B=="string"){B=this.search(B)}var E={},D={};for(var C in B){var A=this.prepare(this.element,C,B[C]);E[C]=A.from;D[C]=A.to}return this.parent(E,D)}});Element.Properties.morph={set:function(A){var B=this.retrieve("morph");if(B){B.cancel()}return this.eliminate("morph").store("morph:options",$extend({link:"cancel"},A))},get:function(A){if(A||!this.retrieve("morph")){if(A||!this.retrieve("morph:options")){this.set("morph",A)}this.store("morph",new Fx.Morph(this,this.retrieve("morph:options")))}return this.retrieve("morph")}};Element.implement({morph:function(A){this.get("morph").start(A);return this}});(function(){var A=Fx.prototype.initialize;Fx.prototype.initialize=function(B){A.call(this,B);var C=this.options.transition;if(typeof C=="string"&&(C=C.split(":"))){var D=Fx.Transitions;D=D[C[0]]||D[C[0].capitalize()];if(C[1]){D=D["ease"+C[1].capitalize()+(C[2]?C[2].capitalize():"")]}this.options.transition=D}}})();Fx.Transition=function(B,A){A=$splat(A);return $extend(B,{easeIn:function(C){return B(C,A)},easeOut:function(C){return 1-B(1-C,A)},easeInOut:function(C){return(C<=0.5)?B(2*C,A)/2:(2-B(2*(1-C),A))/2}})};Fx.Transitions=new Hash({linear:$arguments(0)});Fx.Transitions.extend=function(A){for(var B in A){Fx.Transitions[B]=new Fx.Transition(A[B])}};Fx.Transitions.extend({Pow:function(B,A){return Math.pow(B,A[0]||6)},Expo:function(A){return Math.pow(2,8*(A-1))},Circ:function(A){return 1-Math.sin(Math.acos(A))},Sine:function(A){return 1-Math.sin((1-A)*Math.PI/2)},Back:function(B,A){A=A[0]||1.618;return Math.pow(B,2)*((A+1)*B-A)},Bounce:function(D){var C;for(var B=0,A=1;1;B+=A,A/=2){if(D>=(7-4*B)/11){C=-Math.pow((11-6*B-11*D)/4,2)+A*A;break}}return C},Elastic:function(B,A){return Math.pow(2,10*--B)*Math.cos(20*B*Math.PI*(A[0]||1)/3)}});["Quad","Cubic","Quart","Quint"].each(function(B,A){Fx.Transitions[B]=new Fx.Transition(function(C){return Math.pow(C,[A+2])})});var Request=new Class({Implements:[Chain,Events,Options],options:{url:"",data:"",headers:{"X-Requested-With":"XMLHttpRequest",Accept:"text/javascript, text/html, application/xml, text/xml, */*"},async:true,format:false,method:"post",link:"ignore",isSuccess:null,emulation:true,urlEncoded:true,encoding:"utf-8",evalScripts:false,evalResponse:false},initialize:function(A){this.xhr=new Browser.Request();this.setOptions(A);this.options.isSuccess=this.options.isSuccess||this.isSuccess;this.headers=new Hash(this.options.headers)},onStateChange:function(){if(this.xhr.readyState!=4||!this.running){return }this.running=false;this.status=0;$try(function(){this.status=this.xhr.status}.bind(this));if(this.options.isSuccess.call(this,this.status)){this.response={text:this.xhr.responseText,xml:this.xhr.responseXML};this.success(this.response.text,this.response.xml)}else{this.response={text:null,xml:null};this.failure()}this.xhr.onreadystatechange=$empty},isSuccess:function(){return((this.status>=200)&&(this.status<300))},processScripts:function(A){if(this.options.evalResponse||(/(ecma|java)script/).test(this.getHeader("Content-type"))){return $exec(A)}return A.stripScripts(this.options.evalScripts)},success:function(B,A){this.onSuccess(this.processScripts(B),A)},onSuccess:function(){this.fireEvent("complete",arguments).fireEvent("success",arguments).callChain()},failure:function(){this.onFailure()},onFailure:function(){this.fireEvent("complete").fireEvent("failure",this.xhr)},setHeader:function(A,B){this.headers.set(A,B);return this},getHeader:function(A){return $try(function(){return this.xhr.getResponseHeader(A)}.bind(this))},check:function(A){if(!this.running){return true}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(A.bind(this,Array.slice(arguments,1)));return false}return false},send:function(I){if(!this.check(arguments.callee,I)){return this}this.running=true;var G=$type(I);if(G=="string"||G=="element"){I={data:I}}var D=this.options;I=$extend({data:D.data,url:D.url,method:D.method},I);var E=I.data,B=I.url,A=I.method;switch($type(E)){case"element":E=$(E).toQueryString();break;case"object":case"hash":E=Hash.toQueryString(E)}if(this.options.format){var H="format="+this.options.format;E=(E)?H+"&"+E:H}if(this.options.emulation&&["put","delete"].contains(A)){var F="_method="+A;E=(E)?F+"&"+E:F;A="post"}if(this.options.urlEncoded&&A=="post"){var C=(this.options.encoding)?"; charset="+this.options.encoding:"";this.headers.set("Content-type","application/x-www-form-urlencoded"+C)}if(E&&A=="get"){B=B+(B.contains("?")?"&":"?")+E;E=null}this.xhr.open(A.toUpperCase(),B,this.options.async);this.xhr.onreadystatechange=this.onStateChange.bind(this);this.headers.each(function(K,J){if(!$try(function(){this.xhr.setRequestHeader(J,K);return true}.bind(this))){this.fireEvent("exception",[J,K])}},this);this.fireEvent("request");this.xhr.send(E);if(!this.options.async){this.onStateChange()}return this},cancel:function(){if(!this.running){return this}this.running=false;this.xhr.abort();this.xhr.onreadystatechange=$empty;this.xhr=new Browser.Request();this.fireEvent("cancel");return this}});(function(){var A={};["get","post","put","delete","GET","POST","PUT","DELETE"].each(function(B){A[B]=function(){var C=Array.link(arguments,{url:String.type,data:$defined});return this.send($extend(C,{method:B.toLowerCase()}))}});Request.implement(A)})();Element.Properties.send={set:function(A){var B=this.retrieve("send");if(B){B.cancel()}return this.eliminate("send").store("send:options",$extend({data:this,link:"cancel",method:this.get("method")||"post",url:this.get("action")},A))},get:function(A){if(A||!this.retrieve("send")){if(A||!this.retrieve("send:options")){this.set("send",A)}this.store("send",new Request(this.retrieve("send:options")))}return this.retrieve("send")}};Element.implement({send:function(A){var B=this.get("send");B.send({data:this,url:A||B.options.url});return this}});Request.HTML=new Class({Extends:Request,options:{update:false,evalScripts:true,filter:false},processHTML:function(C){var B=C.match(/<body[^>]*>([\s\S]*?)<\/body>/i);C=(B)?B[1]:C;var A=new Element("div");return $try(function(){var D="<root>"+C+"</root>",G;if(Browser.Engine.trident){G=new ActiveXObject("Microsoft.XMLDOM");G.async=false;G.loadXML(D)}else{G=new DOMParser().parseFromString(D,"text/xml")}D=G.getElementsByTagName("root")[0];for(var F=0,E=D.childNodes.length;F<E;F++){var H=Element.clone(D.childNodes[F],true,true);if(H){A.grab(H)}}return A})||A.set("html",C)},success:function(D){var C=this.options,B=this.response;B.html=D.stripScripts(function(E){B.javascript=E});var A=this.processHTML(B.html);B.tree=A.childNodes;B.elements=A.getElements("*");if(C.filter){B.tree=B.elements.filter(C.filter)}if(C.update){$(C.update).empty().adopt(B.tree)}if(C.evalScripts){$exec(B.javascript)}this.onSuccess(B.tree,B.elements,B.html,B.javascript)}});Element.Properties.load={set:function(A){var B=this.retrieve("load");if(B){send.cancel()}return this.eliminate("load").store("load:options",$extend({data:this,link:"cancel",update:this,method:"get"},A))},get:function(A){if(A||!this.retrieve("load")){if(A||!this.retrieve("load:options")){this.set("load",A)}this.store("load",new Request.HTML(this.retrieve("load:options")))}return this.retrieve("load")}};Element.implement({load:function(){this.get("load").send(Array.link(arguments,{data:Object.type,url:String.type}));return this}});Request.JSON=new Class({Extends:Request,options:{secure:true},initialize:function(A){this.parent(A);this.headers.extend({Accept:"application/json","X-Request":"JSON"})},success:function(A){this.response.json=JSON.decode(A,this.options.secure);this.onSuccess(this.response.json,A)}});Fx.Slide=new Class({Extends:Fx,options:{mode:"vertical"},initialize:function(B,A){this.addEvent("complete",function(){this.open=(this.wrapper["offset"+this.layout.capitalize()]!=0);if(this.open&&Browser.Engine.webkit419){this.element.dispose().inject(this.wrapper)}},true);this.element=this.subject=$(B);this.parent(A);var C=this.element.retrieve("wrapper");this.wrapper=C||new Element("div",{styles:$extend(this.element.getStyles("margin","position"),{overflow:"hidden"})}).wraps(this.element);this.element.store("wrapper",this.wrapper).setStyle("margin",0);this.now=[];this.open=true},vertical:function(){this.margin="margin-top";this.layout="height";this.offset=this.element.offsetHeight},horizontal:function(){this.margin="margin-left";this.layout="width";this.offset=this.element.offsetWidth},set:function(A){this.element.setStyle(this.margin,A[0]);this.wrapper.setStyle(this.layout,A[1]);return this},compute:function(E,D,C){var B=[];var A=2;A.times(function(F){B[F]=Fx.compute(E[F],D[F],C)});return B},start:function(B,E){if(!this.check(arguments.callee,B,E)){return this}this[E||this.options.mode]();var D=this.element.getStyle(this.margin).toInt();var C=this.wrapper.getStyle(this.layout).toInt();var A=[[D,C],[0,this.offset]];var G=[[D,C],[-this.offset,0]];var F;switch(B){case"in":F=A;break;case"out":F=G;break;case"toggle":F=(this.wrapper["offset"+this.layout.capitalize()]==0)?A:G}return this.parent(F[0],F[1])},slideIn:function(A){return this.start("in",A)},slideOut:function(A){return this.start("out",A)},hide:function(A){this[A||this.options.mode]();this.open=false;return this.set([-this.offset,0])},show:function(A){this[A||this.options.mode]();this.open=true;return this.set([0,this.offset])},toggle:function(A){return this.start("toggle",A)}});Element.Properties.slide={set:function(B){var A=this.retrieve("slide");if(A){A.cancel()}return this.eliminate("slide").store("slide:options",$extend({link:"cancel"},B))},get:function(A){if(A||!this.retrieve("slide")){if(A||!this.retrieve("slide:options")){this.set("slide",A)}this.store("slide",new Fx.Slide(this,this.retrieve("slide:options")))}return this.retrieve("slide")}};Element.implement({slide:function(D,E){D=D||"toggle";var B=this.get("slide"),A;switch(D){case"hide":B.hide(E);break;case"show":B.show(E);break;case"toggle":var C=this.retrieve("slide:flag",B.open);B[(C)?"slideOut":"slideIn"](E);this.store("slide:flag",!C);A=true;break;default:B.start(D,E)}if(!A){this.eliminate("slide:flag")}return this}});Fx.Scroll=new Class({Extends:Fx,options:{offset:{x:0,y:0},wheelStops:true},initialize:function(B,A){this.element=this.subject=$(B);this.parent(A);var D=this.cancel.bind(this,false);if($type(this.element)!="element"){this.element=$(this.element.getDocument().body)}var C=this.element;if(this.options.wheelStops){this.addEvent("start",function(){C.addEvent("mousewheel",D)},true);this.addEvent("complete",function(){C.removeEvent("mousewheel",D)},true)}},set:function(){var A=Array.flatten(arguments);this.element.scrollTo(A[0],A[1])},compute:function(E,D,C){var B=[];var A=2;A.times(function(F){B.push(Fx.compute(E[F],D[F],C))});return B},start:function(C,H){if(!this.check(arguments.callee,C,H)){return this}var E=this.element.getSize(),F=this.element.getScrollSize();var B=this.element.getScroll(),D={x:C,y:H};for(var G in D){var A=F[G]-E[G];if($chk(D[G])){D[G]=($type(D[G])=="number")?D[G].limit(0,A):A}else{D[G]=B[G]}D[G]+=this.options.offset[G]}return this.parent([B.x,B.y],[D.x,D.y])},toTop:function(){return this.start(false,0)},toLeft:function(){return this.start(0,false)},toRight:function(){return this.start("right",false)},toBottom:function(){return this.start(false,"bottom")},toElement:function(B){var A=$(B).getPosition(this.element);return this.start(A.x,A.y)}});Fx.Elements=new Class({Extends:Fx.CSS,initialize:function(B,A){this.elements=this.subject=$$(B);this.parent(A)},compute:function(G,H,I){var C={};for(var D in G){var A=G[D],E=H[D],F=C[D]={};for(var B in A){F[B]=this.parent(A[B],E[B],I)}}return C},set:function(B){for(var C in B){var A=B[C];for(var D in A){this.render(this.elements[C],D,A[D],this.options.unit)}}return this},start:function(C){if(!this.check(arguments.callee,C)){return this}var H={},I={};for(var D in C){var F=C[D],A=H[D]={},G=I[D]={};for(var B in F){var E=this.prepare(this.elements[D],B,F[B]);A[B]=E.from;G[B]=E.to}}return this.parent(H,I)}});var Drag=new Class({Implements:[Events,Options],options:{snap:6,unit:"px",grid:false,style:true,limit:false,handle:false,invert:false,preventDefault:false,modifiers:{x:"left",y:"top"}},initialize:function(){var B=Array.link(arguments,{options:Object.type,element:$defined});this.element=$(B.element);this.document=this.element.getDocument();this.setOptions(B.options||{});var A=$type(this.options.handle);this.handles=(A=="array"||A=="collection")?$$(this.options.handle):$(this.options.handle)||this.element;this.mouse={now:{},pos:{}};this.value={start:{},now:{}};this.selection=(Browser.Engine.trident)?"selectstart":"mousedown";this.bound={start:this.start.bind(this),check:this.check.bind(this),drag:this.drag.bind(this),stop:this.stop.bind(this),cancel:this.cancel.bind(this),eventStop:$lambda(false)};this.attach()},attach:function(){this.handles.addEvent("mousedown",this.bound.start);return this},detach:function(){this.handles.removeEvent("mousedown",this.bound.start);return this},start:function(C){if(this.options.preventDefault){C.preventDefault()}this.fireEvent("beforeStart",this.element);this.mouse.start=C.page;var A=this.options.limit;this.limit={x:[],y:[]};for(var D in this.options.modifiers){if(!this.options.modifiers[D]){continue}if(this.options.style){this.value.now[D]=this.element.getStyle(this.options.modifiers[D]).toInt()}else{this.value.now[D]=this.element[this.options.modifiers[D]]}if(this.options.invert){this.value.now[D]*=-1}this.mouse.pos[D]=C.page[D]-this.value.now[D];if(A&&A[D]){for(var B=2;B--;B){if($chk(A[D][B])){this.limit[D][B]=$lambda(A[D][B])()}}}}if($type(this.options.grid)=="number"){this.options.grid={x:this.options.grid,y:this.options.grid}}this.document.addEvents({mousemove:this.bound.check,mouseup:this.bound.cancel});this.document.addEvent(this.selection,this.bound.eventStop)},check:function(A){if(this.options.preventDefault){A.preventDefault()}var B=Math.round(Math.sqrt(Math.pow(A.page.x-this.mouse.start.x,2)+Math.pow(A.page.y-this.mouse.start.y,2)));if(B>this.options.snap){this.cancel();this.document.addEvents({mousemove:this.bound.drag,mouseup:this.bound.stop});this.fireEvent("start",this.element).fireEvent("snap",this.element)}},drag:function(A){if(this.options.preventDefault){A.preventDefault()}this.mouse.now=A.page;for(var B in this.options.modifiers){if(!this.options.modifiers[B]){continue}this.value.now[B]=this.mouse.now[B]-this.mouse.pos[B];if(this.options.invert){this.value.now[B]*=-1}if(this.options.limit&&this.limit[B]){if($chk(this.limit[B][1])&&(this.value.now[B]>this.limit[B][1])){this.value.now[B]=this.limit[B][1]}else{if($chk(this.limit[B][0])&&(this.value.now[B]<this.limit[B][0])){this.value.now[B]=this.limit[B][0]}}}if(this.options.grid[B]){this.value.now[B]-=(this.value.now[B]%this.options.grid[B])}if(this.options.style){this.element.setStyle(this.options.modifiers[B],this.value.now[B]+this.options.unit)}else{this.element[this.options.modifiers[B]]=this.value.now[B]}}this.fireEvent("drag",this.element)},cancel:function(A){this.document.removeEvent("mousemove",this.bound.check);this.document.removeEvent("mouseup",this.bound.cancel);if(A){this.document.removeEvent(this.selection,this.bound.eventStop);this.fireEvent("cancel",this.element)}},stop:function(A){this.document.removeEvent(this.selection,this.bound.eventStop);this.document.removeEvent("mousemove",this.bound.drag);this.document.removeEvent("mouseup",this.bound.stop);if(A){this.fireEvent("complete",this.element)}}});Element.implement({makeResizable:function(A){return new Drag(this,$merge({modifiers:{x:"width",y:"height"}},A))}});Drag.Move=new Class({Extends:Drag,options:{droppables:[],container:false},initialize:function(C,B){this.parent(C,B);this.droppables=$$(this.options.droppables);this.container=$(this.options.container);if(this.container&&$type(this.container)!="element"){this.container=$(this.container.getDocument().body)}C=this.element;var D=C.getStyle("position");var A=(D!="static")?D:"absolute";if(C.getStyle("left")=="auto"||C.getStyle("top")=="auto"){C.position(C.getPosition(C.offsetParent))}C.setStyle("position",A);this.addEvent("start",function(){this.checkDroppables()},true)},start:function(B){if(this.container){var D=this.element,J=this.container,E=J.getCoordinates(D.offsetParent),F={},A={};["top","right","bottom","left"].each(function(K){F[K]=J.getStyle("padding-"+K).toInt();A[K]=D.getStyle("margin-"+K).toInt()},this);var C=D.offsetWidth+A.left+A.right,I=D.offsetHeight+A.top+A.bottom;var H=[E.left+F.left,E.right-F.right-C];var G=[E.top+F.top,E.bottom-F.bottom-I];this.options.limit={x:H,y:G}}this.parent(B)},checkAgainst:function(B){B=B.getCoordinates();var A=this.mouse.now;return(A.x>B.left&&A.x<B.right&&A.y<B.bottom&&A.y>B.top)},checkDroppables:function(){var A=this.droppables.filter(this.checkAgainst,this).getLast();if(this.overed!=A){if(this.overed){this.fireEvent("leave",[this.element,this.overed])}if(A){this.overed=A;this.fireEvent("enter",[this.element,A])}else{this.overed=null}}},drag:function(A){this.parent(A);if(this.droppables.length){this.checkDroppables()}},stop:function(A){this.checkDroppables();this.fireEvent("drop",[this.element,this.overed]);this.overed=null;return this.parent(A)}});Element.implement({makeDraggable:function(A){return new Drag.Move(this,A)}});Hash.Cookie=new Class({Extends:Cookie,options:{autoSave:true},initialize:function(B,A){this.parent(B,A);this.load()},save:function(){var A=JSON.encode(this.hash);if(!A||A.length>4096){return false}if(A=="{}"){this.dispose()}else{this.write(A)}return true},load:function(){this.hash=new Hash(JSON.decode(this.read(),true));return this}});Hash.Cookie.implement((function(){var A={};Hash.each(Hash.prototype,function(C,B){A[B]=function(){var D=C.apply(this.hash,arguments);if(this.options.autoSave){this.save()}return D}});return A})());var Color=new Native({initialize:function(B,C){if(arguments.length>=3){C="rgb";B=Array.slice(arguments,0,3)}else{if(typeof B=="string"){if(B.match(/rgb/)){B=B.rgbToHex().hexToRgb(true)}else{if(B.match(/hsb/)){B=B.hsbToRgb()}else{B=B.hexToRgb(true)}}}}C=C||"rgb";switch(C){case"hsb":var A=B;B=B.hsbToRgb();B.hsb=A;break;case"hex":B=B.hexToRgb(true);break}B.rgb=B.slice(0,3);B.hsb=B.hsb||B.rgbToHsb();B.hex=B.rgbToHex();return $extend(B,this)}});Color.implement({mix:function(){var A=Array.slice(arguments);var C=($type(A.getLast())=="number")?A.pop():50;var B=this.slice();A.each(function(D){D=new Color(D);for(var E=0;E<3;E++){B[E]=Math.round((B[E]/100*(100-C))+(D[E]/100*C))}});return new Color(B,"rgb")},invert:function(){return new Color(this.map(function(A){return 255-A}))},setHue:function(A){return new Color([A,this.hsb[1],this.hsb[2]],"hsb")},setSaturation:function(A){return new Color([this.hsb[0],A,this.hsb[2]],"hsb")},setBrightness:function(A){return new Color([this.hsb[0],this.hsb[1],A],"hsb")}});function $RGB(C,B,A){return new Color([C,B,A],"rgb")}function $HSB(C,B,A){return new Color([C,B,A],"hsb")}function $HEX(A){return new Color(A,"hex")}Array.implement({rgbToHsb:function(){var B=this[0],C=this[1],J=this[2];var G,F,H;var I=Math.max(B,C,J),E=Math.min(B,C,J);var K=I-E;H=I/255;F=(I!=0)?K/I:0;if(F==0){G=0}else{var D=(I-B)/K;var A=(I-C)/K;var L=(I-J)/K;if(B==I){G=L-A}else{if(C==I){G=2+D-L}else{G=4+A-D}}G/=6;if(G<0){G++}}return[Math.round(G*360),Math.round(F*100),Math.round(H*100)]},hsbToRgb:function(){var C=Math.round(this[2]/100*255);if(this[1]==0){return[C,C,C]}else{var A=this[0]%360;var E=A%60;var F=Math.round((this[2]*(100-this[1]))/10000*255);var D=Math.round((this[2]*(6000-this[1]*E))/600000*255);var B=Math.round((this[2]*(6000-this[1]*(60-E)))/600000*255);switch(Math.floor(A/60)){case 0:return[C,B,F];case 1:return[D,C,F];case 2:return[F,C,B];case 3:return[F,D,C];case 4:return[B,F,C];case 5:return[C,F,D]}}return false}});String.implement({rgbToHsb:function(){var A=this.match(/\d{1,3}/g);return(A)?hsb.rgbToHsb():null},hsbToRgb:function(){var A=this.match(/\d{1,3}/g);return(A)?A.hsbToRgb():null}});var Group=new Class({initialize:function(){this.instances=Array.flatten(arguments);this.events={};this.checker={}},addEvent:function(B,A){this.checker[B]=this.checker[B]||{};this.events[B]=this.events[B]||[];if(this.events[B].contains(A)){return false}else{this.events[B].push(A)}this.instances.each(function(C,D){C.addEvent(B,this.check.bind(this,[B,C,D]))},this);return this},check:function(C,A,B){this.checker[C][B]=true;var D=this.instances.every(function(F,E){return this.checker[C][E]||false},this);if(!D){return }this.checker[C]={};this.events[C].each(function(E){E.call(this,this.instances,A)},this)}});var Asset=new Hash({javascript:function(F,D){D=$extend({onload:$empty,document:document,check:$lambda(true)},D);var B=new Element("script",{src:F,type:"text/javascript"});var E=D.onload.bind(B),A=D.check,G=D.document;delete D.onload;delete D.check;delete D.document;B.addEvents({load:E,readystatechange:function(){if(["loaded","complete"].contains(this.readyState)){E()}}}).setProperties(D);if(Browser.Engine.webkit419){var C=(function(){if(!$try(A)){return }$clear(C);E()}).periodical(50)}return B.inject(G.head)},css:function(B,A){return new Element("link",$merge({rel:"stylesheet",media:"screen",type:"text/css",href:B},A)).inject(document.head)},image:function(C,B){B=$merge({onload:$empty,onabort:$empty,onerror:$empty},B);var D=new Image();var A=$(D)||new Element("img");["load","abort","error"].each(function(E){var F="on"+E;var G=B[F];delete B[F];D[F]=function(){if(!D){return }if(!A.parentNode){A.width=D.width;A.height=D.height}D=D.onload=D.onabort=D.onerror=null;G.delay(1,A,A);A.fireEvent(E,A,1)}});D.src=A.src=C;if(D&&D.complete){D.onload.delay(1)}return A.setProperties(B)},images:function(D,C){C=$merge({onComplete:$empty,onProgress:$empty},C);if(!D.push){D=[D]}var A=[];var B=0;D.each(function(F){var E=new Asset.image(F,{onload:function(){C.onProgress.call(this,B,D.indexOf(F));B++;if(B==D.length){C.onComplete()}}});A.push(E)});return new Elements(A)}});var Sortables=new Class({Implements:[Events,Options],options:{snap:4,opacity:1,clone:false,revert:false,handle:false,constrain:false},initialize:function(A,B){this.setOptions(B);this.elements=[];this.lists=[];this.idle=true;this.addLists($$($(A)||A));if(!this.options.clone){this.options.revert=false}if(this.options.revert){this.effect=new Fx.Morph(null,$merge({duration:250,link:"cancel"},this.options.revert))}},attach:function(){this.addLists(this.lists);return this},detach:function(){this.lists=this.removeLists(this.lists);return this},addItems:function(){Array.flatten(arguments).each(function(A){this.elements.push(A);var B=A.retrieve("sortables:start",this.start.bindWithEvent(this,A));(this.options.handle?A.getElement(this.options.handle)||A:A).addEvent("mousedown",B)},this);return this},addLists:function(){Array.flatten(arguments).each(function(A){this.lists.push(A);this.addItems(A.getChildren())},this);return this},removeItems:function(){var A=[];Array.flatten(arguments).each(function(B){A.push(B);this.elements.erase(B);var C=B.retrieve("sortables:start");(this.options.handle?B.getElement(this.options.handle)||B:B).removeEvent("mousedown",C)},this);return $$(A)},removeLists:function(){var A=[];Array.flatten(arguments).each(function(B){A.push(B);this.lists.erase(B);this.removeItems(B.getChildren())},this);return $$(A)},getClone:function(B,A){if(!this.options.clone){return new Element("div").inject(document.body)}if($type(this.options.clone)=="function"){return this.options.clone.call(this,B,A,this.list)}return A.clone(true).setStyles({margin:"0px",position:"absolute",visibility:"hidden",width:A.getStyle("width")}).inject(this.list).position(A.getPosition(A.getOffsetParent()))},getDroppables:function(){var A=this.list.getChildren();if(!this.options.constrain){A=this.lists.concat(A).erase(this.list)}return A.erase(this.clone).erase(this.element)},insert:function(C,B){var A="inside";if(this.lists.contains(B)){this.list=B;this.drag.droppables=this.getDroppables()}else{A=this.element.getAllPrevious().contains(B)?"before":"after"}this.element.inject(B,A);this.fireEvent("sort",[this.element,this.clone])},start:function(B,A){if(!this.idle){return }this.idle=false;this.element=A;this.opacity=A.get("opacity");this.list=A.getParent();this.clone=this.getClone(B,A);this.drag=new Drag.Move(this.clone,{snap:this.options.snap,container:this.options.constrain&&this.element.getParent(),droppables:this.getDroppables(),onSnap:function(){B.stop();this.clone.setStyle("visibility","visible");this.element.set("opacity",this.options.opacity||0);this.fireEvent("start",[this.element,this.clone])}.bind(this),onEnter:this.insert.bind(this),onCancel:this.reset.bind(this),onComplete:this.end.bind(this)});this.clone.inject(this.element,"before");this.drag.start(B)},end:function(){this.drag.detach();this.element.set("opacity",this.opacity);if(this.effect){var A=this.element.getStyles("width","height");var B=this.clone.computePosition(this.element.getPosition(this.clone.offsetParent));this.effect.element=this.clone;this.effect.start({top:B.top,left:B.left,width:A.width,height:A.height,opacity:0.25}).chain(this.reset.bind(this))}else{this.reset()}},reset:function(){this.idle=true;this.clone.destroy();this.fireEvent("complete",this.element)},serialize:function(){var C=Array.link(arguments,{modifier:Function.type,index:$defined});var B=this.lists.map(function(D){return D.getChildren().map(C.modifier||function(E){return E.get("id")},this)},this);var A=C.index;if(this.lists.length==1){A=0}return $chk(A)&&A>=0&&A<this.lists.length?B[A]:B}});var Tips=new Class({Implements:[Events,Options],options:{onShow:function(A){A.setStyle("visibility","visible")},onHide:function(A){A.setStyle("visibility","hidden")},showDelay:100,hideDelay:100,className:null,offsets:{x:16,y:16},fixed:false},initialize:function(){var C=Array.link(arguments,{options:Object.type,elements:$defined});this.setOptions(C.options||null);this.tip=new Element("div").inject(document.body);if(this.options.className){this.tip.addClass(this.options.className)}var B=new Element("div",{"class":"tip-top"}).inject(this.tip);this.container=new Element("div",{"class":"tip"}).inject(this.tip);var A=new Element("div",{"class":"tip-bottom"}).inject(this.tip);this.tip.setStyles({position:"absolute",top:0,left:0,visibility:"hidden"});if(C.elements){this.attach(C.elements)}},attach:function(A){$$(A).each(function(D){var G=D.retrieve("tip:title",D.get("title"));var F=D.retrieve("tip:text",D.get("rel")||D.get("href"));var E=D.retrieve("tip:enter",this.elementEnter.bindWithEvent(this,D));var C=D.retrieve("tip:leave",this.elementLeave.bindWithEvent(this,D));D.addEvents({mouseenter:E,mouseleave:C});if(!this.options.fixed){var B=D.retrieve("tip:move",this.elementMove.bindWithEvent(this,D));D.addEvent("mousemove",B)}D.store("tip:native",D.get("title"));D.erase("title")},this);return this},detach:function(A){$$(A).each(function(C){C.removeEvent("mouseenter",C.retrieve("tip:enter")||$empty);C.removeEvent("mouseleave",C.retrieve("tip:leave")||$empty);C.removeEvent("mousemove",C.retrieve("tip:move")||$empty);C.eliminate("tip:enter").eliminate("tip:leave").eliminate("tip:move");var B=C.retrieve("tip:native");if(B){C.set("title",B)}});return this},elementEnter:function(B,A){$A(this.container.childNodes).each(Element.dispose);var D=A.retrieve("tip:title");if(D){this.titleElement=new Element("div",{"class":"tip-title"}).inject(this.container);this.fill(this.titleElement,D)}var C=A.retrieve("tip:text");if(C){this.textElement=new Element("div",{"class":"tip-text"}).inject(this.container);this.fill(this.textElement,C)}this.timer=$clear(this.timer);this.timer=this.show.delay(this.options.showDelay,this);this.position((!this.options.fixed)?B:{page:A.getPosition()})},elementLeave:function(A){$clear(this.timer);this.timer=this.hide.delay(this.options.hideDelay,this)},elementMove:function(A){this.position(A)},position:function(D){var B=window.getSize(),A=window.getScroll();var E={x:this.tip.offsetWidth,y:this.tip.offsetHeight};var C={x:"left",y:"top"};for(var F in C){var G=D.page[F]+this.options.offsets[F];if((G+E[F]-A[F])>B[F]){G=D.page[F]-this.options.offsets[F]-E[F]}this.tip.setStyle(C[F],G)}},fill:function(A,B){(typeof B=="string")?A.set("html",B):A.adopt(B)},show:function(){this.fireEvent("show",this.tip)},hide:function(){this.fireEvent("hide",this.tip)}});var SmoothScroll=new Class({Extends:Fx.Scroll,initialize:function(B,C){C=C||document;var E=C.getDocument(),D=C.getWindow();this.parent(E,B);this.links=(this.options.links)?$$(this.options.links):$$(E.links);var A=D.location.href.match(/^[^#]*/)[0]+"#";this.links.each(function(G){if(G.href.indexOf(A)!=0){return }var F=G.href.substr(A.length);if(F&&$(F)){this.useLink(G,F)}},this);if(!Browser.Engine.webkit419){this.addEvent("complete",function(){D.location.hash=this.anchor},true)}},useLink:function(B,A){B.addEvent("click",function(C){this.anchor=A;this.toElement(A);C.stop()}.bind(this))}});var Slider=new Class({Implements:[Events,Options],options:{onTick:function(A){if(this.options.snap){A=this.toPosition(this.step)}this.knob.setStyle(this.property,A)},snap:false,offset:0,range:false,wheel:false,steps:100,mode:"horizontal"},initialize:function(E,A,D){this.setOptions(D);this.element=$(E);this.knob=$(A);this.previousChange=this.previousEnd=this.step=-1;this.element.addEvent("mousedown",this.clickedElement.bind(this));if(this.options.wheel){this.element.addEvent("mousewheel",this.scrolledElement.bindWithEvent(this))}var F,B={},C={x:false,y:false};switch(this.options.mode){case"vertical":this.axis="y";this.property="top";F="offsetHeight";break;case"horizontal":this.axis="x";this.property="left";F="offsetWidth"}this.half=this.knob[F]/2;this.full=this.element[F]-this.knob[F]+(this.options.offset*2);this.min=$chk(this.options.range[0])?this.options.range[0]:0;this.max=$chk(this.options.range[1])?this.options.range[1]:this.options.steps;this.range=this.max-this.min;this.steps=this.options.steps||this.full;this.stepSize=Math.abs(this.range)/this.steps;this.stepWidth=this.stepSize*this.full/Math.abs(this.range);this.knob.setStyle("position","relative").setStyle(this.property,-this.options.offset);C[this.axis]=this.property;B[this.axis]=[-this.options.offset,this.full-this.options.offset];this.drag=new Drag(this.knob,{snap:0,limit:B,modifiers:C,onDrag:this.draggedKnob.bind(this),onStart:this.draggedKnob.bind(this),onComplete:function(){this.draggedKnob();this.end()}.bind(this)});if(this.options.snap){this.drag.options.grid=Math.ceil(this.stepWidth);this.drag.options.limit[this.axis][1]=this.full}},set:function(A){if(!((this.range>0)^(A<this.min))){A=this.min}if(!((this.range>0)^(A>this.max))){A=this.max}this.step=Math.round(A);this.checkStep();this.end();this.fireEvent("tick",this.toPosition(this.step));return this},clickedElement:function(C){var B=this.range<0?-1:1;var A=C.page[this.axis]-this.element.getPosition()[this.axis]-this.half;A=A.limit(-this.options.offset,this.full-this.options.offset);this.step=Math.round(this.min+B*this.toStep(A));this.checkStep();this.end();this.fireEvent("tick",A)},scrolledElement:function(A){var B=(this.options.mode=="horizontal")?(A.wheel<0):(A.wheel>0);this.set(B?this.step-this.stepSize:this.step+this.stepSize);A.stop()},draggedKnob:function(){var B=this.range<0?-1:1;var A=this.drag.value.now[this.axis];A=A.limit(-this.options.offset,this.full-this.options.offset);this.step=Math.round(this.min+B*this.toStep(A));this.checkStep()},checkStep:function(){if(this.previousChange!=this.step){this.previousChange=this.step;this.fireEvent("change",this.step)}},end:function(){if(this.previousEnd!==this.step){this.previousEnd=this.step;this.fireEvent("complete",this.step+"")}},toStep:function(A){var B=(A+this.options.offset)*this.stepSize/this.full*this.steps;return this.options.steps?Math.round(B-=B%this.stepSize):B},toPosition:function(A){return(this.full*Math.abs(this.min-A))/(this.steps*this.stepSize)-this.options.offset}});var Scroller=new Class({Implements:[Events,Options],options:{area:20,velocity:1,onChange:function(A,B){this.element.scrollTo(A,B)}},initialize:function(B,A){this.setOptions(A);this.element=$(B);this.listener=($type(this.element)!="element")?$(this.element.getDocument().body):this.element;this.timer=null;this.coord=this.getCoords.bind(this)},start:function(){this.listener.addEvent("mousemove",this.coord)},stop:function(){this.listener.removeEvent("mousemove",this.coord);this.timer=$clear(this.timer)},getCoords:function(A){this.page=(this.listener.get("tag")=="body")?A.client:A.page;if(!this.timer){this.timer=this.scroll.periodical(50,this)}},scroll:function(){var B=this.element.getSize(),A=this.element.getScroll(),E=this.element.getPosition(),D={x:0,y:0};for(var C in this.page){if(this.page[C]<(this.options.area+E[C])&&A[C]!=0){D[C]=(this.page[C]-this.options.area-E[C])*this.options.velocity}else{if(this.page[C]+this.options.area>(B[C]+E[C])&&B[C]+B[C]!=A[C]){D[C]=(this.page[C]-B[C]+this.options.area-E[C])*this.options.velocity}}}if(D.y||D.x){this.fireEvent("change",[A.x+D.x,A.y+D.y])}}});var Accordion=new Class({Extends:Fx.Elements,options:{display:0,show:false,height:true,width:false,opacity:true,fixedHeight:false,fixedWidth:false,wait:false,alwaysHide:false},initialize:function(){var C=Array.link(arguments,{container:Element.type,options:Object.type,togglers:$defined,elements:$defined});this.parent(C.elements,C.options);this.togglers=$$(C.togglers);this.container=$(C.container);this.previous=-1;if(this.options.alwaysHide){this.options.wait=true}if($chk(this.options.show)){this.options.display=false;this.previous=this.options.show}if(this.options.start){this.options.display=false;this.options.show=false}this.effects={};if(this.options.opacity){this.effects.opacity="fullOpacity"}if(this.options.width){this.effects.width=this.options.fixedWidth?"fullWidth":"offsetWidth"}if(this.options.height){this.effects.height=this.options.fixedHeight?"fullHeight":"scrollHeight"}for(var B=0,A=this.togglers.length;B<A;B++){this.addSection(this.togglers[B],this.elements[B])}this.elements.each(function(E,D){if(this.options.show===D){this.fireEvent("active",[this.togglers[D],E])}else{for(var F in this.effects){E.setStyle(F,0)}}},this);if($chk(this.options.display)){this.display(this.options.display)}},addSection:function(E,C,G){E=$(E);C=$(C);var F=this.togglers.contains(E);var B=this.togglers.length;this.togglers.include(E);this.elements.include(C);if(B&&(!F||G)){G=$pick(G,B-1);E.inject(this.togglers[G],"before");C.inject(E,"after")}else{if(this.container&&!F){E.inject(this.container);C.inject(this.container)}}var A=this.togglers.indexOf(E);E.addEvent("click",this.display.bind(this,A));if(this.options.height){C.setStyles({"padding-top":0,"border-top":"none","padding-bottom":0,"border-bottom":"none"})}if(this.options.width){C.setStyles({"padding-left":0,"border-left":"none","padding-right":0,"border-right":"none"})}C.fullOpacity=1;if(this.options.fixedWidth){C.fullWidth=this.options.fixedWidth}if(this.options.fixedHeight){C.fullHeight=this.options.fixedHeight}C.setStyle("overflow","hidden");if(!F){for(var D in this.effects){C.setStyle(D,0)}}return this},display:function(A){A=($type(A)=="element")?this.elements.indexOf(A):A;if((this.timer&&this.options.wait)||(A===this.previous&&!this.options.alwaysHide)){return this}this.previous=A;var B={};this.elements.each(function(E,D){B[D]={};var C=(D!=A)||(this.options.alwaysHide&&(E.offsetHeight>0));this.fireEvent(C?"background":"active",[this.togglers[D],E]);for(var F in this.effects){B[D][F]=C?0:E[this.effects[F]]}},this);return this.start(B)}});window.addEvent("load",function(){if(!("console" in window)||!("firebug" in window.console)){var B=["log","debug","info","warn","error","assert","dir","dirxml","group","groupEnd","time","timeEnd","count","trace","profile","profileEnd"];window.console={};for(var A=0;A<B.length;++A){window.console[B[A]]=function(){}}}});(function(){var A=navigator.userAgent.toLowerCase();var B=A.indexOf("msie")>-1,D=A.indexOf("msie 7")>-1;if(B&&!D){try{document.execCommand("BackgroundImageCache",false,true)}catch(C){}}})();if(typeof Jx=="undefined"){var Jx={};(function(){var C=document.getElementsByTagName("SCRIPT");for(var A=0;A<C.length;A++){var B=C[A].src;var D=/(.*)(js|lib\/)jxlib(.*)/.exec(B);if(D&&D[0]){Jx.aPixel=document.createElement("img");Jx.aPixel.src=D[1]+"/images/a_pixel.png";Jx.baseURL=Jx.aPixel.src.substring(0,Jx.aPixel.src.indexOf("images/a_pixel.png"))}}})()}Jx.applyPNGFilter=function(C){var A=Jx.baseURL+"images/a_pixel.png";if(C.src!=A){var B=C.src;C.src=A;C.runtimeStyle.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+B+"',sizingMethod='scale')"}};Jx.imgQueue=[];Jx.imgLoaded={};Jx.imagesLoading=0;Jx.addToImgQueue=function(A){if(Jx.imgLoaded[A.src]){A.element.src=A.src}else{Jx.imgQueue.push(A);Jx.imgLoaded[A.src]=true}Jx.checkImgQueue()};Jx.checkImgQueue=function(){while(Jx.imagesLoading<2&&Jx.imgQueue.length>0){Jx.loadNextImg()}};Jx.loadNextImg=function(){var A=Jx.imgQueue.shift();if(A){++Jx.imagesLoading;A.element.onload=function(){--Jx.imagesLoading;Jx.checkImgQueue()};A.element.onerror=function(){--Jx.imagesLoading;Jx.checkImgQueue()};A.element.src=A.src}};Jx.createIframeShim=function(){return new Element("iframe",{"class":"jxIframeShim",scrolling:"no",frameborder:0})};Jx.UniqueId=new Class({uniqueIdRefs:null,initUniqueId:function(){this.uniqueIdRefs=[]},deregisterIds:function(){this.uniqueIdRefs=[]},registerIds:function(C,A){if(C.indexOf(A.id)!=-1){this.uniqueIdRefs[A.id]=A}for(var B=0;B<A.childNodes.length;B++){this.registerIds(C,A.childNodes[B])}},getObj:function(A){return this.uniqueIdRefs[A]||null}});Element.implement({getBoxSizing:function(){var B="content-box";if(Browser.Engine.trident||Browser.Engine.presto){var A=document.compatMode;if(A=="BackCompat"||A=="QuirksMode"){B="border-box"}else{B="content-box"}}else{if(arguments.length==0){node=document.documentElement}var C=this.getStyle("-moz-box-sizing");if(!C){C=this.getStyle("box-sizing")}B=(C?C:"content-box")}return B},getContentBoxSize:function(){var A=this.offsetWidth;var C=this.offsetHeight;var D=this.getPaddingSize();var B=this.getBorderSize();A=A-D.left-D.right-B.left-B.right;C=C-D.bottom-D.top-B.bottom-B.top;return{width:A,height:C}},getBorderBoxSize:function(){var A=this.offsetWidth;var B=this.offsetHeight;return{width:A,height:B}},getMarginBoxSize:function(){var C=this.getMarginSize();var A=this.offsetWidth+C.left+C.right;var B=this.offsetHeight+C.top+C.bottom;return{width:A,height:B}},setContentBoxSize:function(C){if(this.getBoxSizing()=="border-box"){var E=this.getPaddingSize();var B=this.getBorderSize();if(typeof C.width!="undefined"){var D=(C.width+E.left+E.right+B.left+B.right);if(D<0){D=0}this.style.width=D+"px"}if(typeof C.height!="undefined"){var A=(C.height+E.top+E.bottom+B.top+B.bottom);if(A<0){A=0}this.style.height=A+"px"}}else{if(typeof C.width!="undefined"){this.style.width=C.width+"px"}if(typeof C.height!="undefined"){this.style.height=C.height+"px"}}},setBorderBoxSize:function(C){if(this.getBoxSizing()=="content-box"){var F=this.getPaddingSize();var B=this.getBorderSize();var E=this.getMarginSize();if(typeof C.width!="undefined"){var D=(C.width-F.left-F.right-B.left-B.right-E.left-E.right);if(D<0){D=0}this.style.width=D+"px"}if(typeof C.height!="undefined"){var A=(C.height-F.top-F.bottom-B.top-B.bottom-E.top-E.bottom);if(A<0){A=0}this.style.height=A+"px"}}else{if(typeof C.width!="undefined"&&C.width>=0){this.style.width=C.width+"px"}if(typeof C.height!="undefined"&&C.height>=0){this.style.height=C.height+"px"}}},getPaddingSize:function(){var B=this.getNumber(this.getStyle("padding-left"));var C=this.getNumber(this.getStyle("padding-top"));var D=this.getNumber(this.getStyle("padding-right"));var A=this.getNumber(this.getStyle("padding-bottom"));return{left:B,top:C,right:D,bottom:A}},getBorderSize:function(){var B=this.getNumber(this.getStyle("border-left-width"));var C=this.getNumber(this.getStyle("border-top-width"));var D=this.getNumber(this.getStyle("border-right-width"));var A=this.getNumber(this.getStyle("border-bottom-width"));return{left:B,top:C,right:D,bottom:A}},getMarginSize:function(){var B=this.getNumber(this.getStyle("margin-left"));var C=this.getNumber(this.getStyle("margin-top"));var D=this.getNumber(this.getStyle("margin-right"));var A=this.getNumber(this.getStyle("margin-bottom"));return{left:B,top:C,right:D,bottom:A}},getNumber:function(B){var A=B==null||isNaN(parseInt(B))?0:parseInt(B);return A},getPageDimensions:function(){return{width:window.getWidth(),height:window.getHeight()}},descendantOf:function(B){var A=$(this.parentNode);if(A==B){return true}else{if(!A||!A.parentNode){return null}else{if(A.parentNode===A){return null}else{return A.descendantOf(B)}}}},findElement:function(B){if(this.tagName==B){return this}var A=$(this.parentNode);if(A){if(A.tagName==B){return A}else{if(!A.parentNode||A.parentNode==A){return null}else{return A.findElement(B)}}}else{return null}}});Jx.ContentLoader=new Class({contentIsLoaded:false,loadContent:function(A){A=$(A);if(this.options.content){var B;if(this.options.content.domObj){B=$(this.options.content.domObj)}else{B=$(this.options.content)}if(B){A.appendChild(B);this.contentIsLoaded=true}else{A.innerHTML=this.options.content;this.contentIsLoaded=true}}else{if(this.options.contentURL){this.contentIsLoaded=false;new Request({url:this.options.contentURL,method:"get",update:A,onSuccess:(function(C){A.innerHTML=C;this.contentIsLoaded=true;this.fireEvent("contentLoaded",this)}).bind(this),onFailure:(function(){this.contentIsLoaded=true;this.fireEvent("contentLoadFailed",this)}).bind(this),headers:{"If-Modified-Since":"Sat, 1 Jan 2000 00:00:00 GMT"}}).send()}else{this.contentIsLoaded=true}}if(this.contentIsLoaded){this.fireEvent("contentLoaded",this)}},processContent:function(A){$A(A.childNodes).each(function(B){if(B.tagName=="INPUT"||B.tagName=="SELECT"||B.tagName=="TEXTAREA"){if(B.type=="button"){B.addEvent("click",function(){this.fireEvent("click",this,B)})}else{B.addEvent("change",function(){this.fireEvent("change",B)})}}else{if(B.childNodes){this.processContent(B)}}},this)}});Jx.AutoPosition=new Class({position:function(F,C,N){F=$(F);C=$(C);var B=$splat(N.horizontal||["center center"]);var G=$splat(N.vertical||["center center"]);var E=$merge({top:0,right:0,bottom:0,left:0},N.offsets||{});var I;if(!$(F.parentNode)||F.parentNode==document.body){I=Element.getPageDimensions()}else{I=$(F.parentNode).getContentBoxSize()}var K=C.getCoordinates();var M=F.getMarginBoxSize();var D;var L;var J;var A;if(!B.some(function(O){var P=O.split(" ");if(P.length!=2){return false}if(!isNaN(parseInt(P[0]))){D=parseInt(P[0])}else{switch(P[0]){case"right":D=K.left+K.width;break;case"center":D=K.left+Math.round(K.width/2);break;case"left":default:D=K.left}}switch(P[1]){case"left":D-=E.left;L=D+M.width;break;case"right":D+=E.right;L=D;D=D-M.width;break;case"center":default:D=D-Math.round(M.width/2);L=D+M.width}return(D>=0&&L<=I.width)})){if(L>I.width){D=I.width-M.width}if(D<0){D=0}}F.setStyle("left",D);if(!G.some(function(O){var P=O.split(" ");if(P.length!=2){return false}if(!isNaN(parseInt(P[0]))){J=parseInt(P[0])}else{switch(P[0]){case"bottom":J=K.top+K.height;break;case"center":J=K.top+Math.round(K.height/2);break;case"top":default:J=K.top}}switch(P[1]){case"top":J-=E.top;A=J+M.height;break;case"bottom":J+=E.bottom;A=J;J=J-M.height;break;case"center":default:J=J-Math.round(M.height/2);A=J+M.height}return(J>=0&&A<=I.height)})){if(A>I.height){J=I.height-M.height}if(J<0){J=0}}F.setStyle("top",J);var H=F.retrieve("jxLayout");if(H){H.options.left=D;H.options.top=J}}});Jx.Chrome=new Class({chrome:null,makeChrome:function(A){var C=new Element("div",{"class":"jxChrome"});A.adopt(C);this.chromeOffsets=C.getPaddingSize();C.setStyle("padding",0);var B=C.getStyle("backgroundImage");if(!B.contains("http://")){B=null}else{B=B.slice(4,-1);if(B.charAt(0)=='"'){B=B.slice(1,-1)}C.setStyle("backgroundImage","none");["TL","TR","BL","BR"].each(function(D){C.adopt(new Element("div",{"class":"jxChrome"+D}).adopt(new Element("img",{src:B})))},this)}if(!window.opera){C.adopt(Jx.createIframeShim())}C.dispose();this.chrome=C},showChrome:function(B){B=$(B);var A;if(!this.chromeResizeHandler){this.chromeResizeHandler=this.showChrome.bind(this)}if(!this.chrome){this.makeChrome(B)}if(B&&this.chrome.parentNode!==B){var C=$(this.chrome.parentNode);if(C){A=C.retrieve("jxLayout");if(A){A.removeEvent("sizeChange",this.chromeResizeHandler)}}B.adopt(this.chrome);A=B.retrieve("jxLayout");if(A){A.addEvent("sizeChange",this.chromeResizeHandler)}}this.resizeChrome()},resizeChrome:function(){},hideChrome:function(){if(this.chrome){if(this.chrome.parentNode){var A=this.chrome.parentNode.retrieve("jxLayout");if(A){A.removeEvent("sizeChange",this.chromeResizeHandler)}}this.chrome.dispose()}}});Jx.Button=new Class({Implements:[Options,Events],domObj:null,options:{id:"",type:"Button",image:"",tooltip:"",label:"",enabled:true,toggle:false,halign:"center",valign:"middle",isActive:false,container:"div"},initialize:function(B){this.setOptions(B);var E=new Element(this.options.container,{"class":"jx"+this.options.type+"Container"});if(this.options.toggle){E.addClass("jx"+this.options.type+"Toggle")}var A=new Element("a",{"class":"jx"+this.options.type,href:"javascript:void(0)",title:this.options.tooltip,alt:this.options.tooltip,events:{click:this.clicked.bindWithEvent(this)}});if(this.options.isActive){A.addClass("jx"+this.options.type+"Active")}E.appendChild(A);var D=new Element("span",{"class":"jx"+this.options.type+"Content"});A.appendChild(D);if(this.options.image||!this.options.label){var C=new Element("img",{"class":"jx"+this.options.type+"Icon",src:Jx.aPixel.src});if(this.options.image.indexOf("a_pixel.png")==-1){C.setStyle("backgroundImage","url("+this.options.image+")")}D.appendChild(C);if(this.options.imageClass){C.addClass(this.options.imageClass)}}l=new Element("span",{html:this.options.label});if(this.options.label){l.addClass("jx"+this.options.type+"Label")}D.appendChild(l);if(this.options.id){E.id=this.options.id}if(this.options.halign=="left"){E.addClass("jx"+this.options.type+"ContentLeft")}if(this.options.valign=="top"){E.addClass("jx"+this.options.type+"ContentTop")}this.domA=A;this.domLabel=l;this.domObj=E;this.setEnabled(this.options.enabled)},clicked:function(A){if(this.options.enabled){if(this.options.toggle){this.setActive(!this.options.isActive)}else{this.fireEvent("click",{obj:this,event:A})}}},setEnabled:function(A){this.options.enabled=A;if(this.options.enabled){this.domObj.removeClass("jx"+this.options.type+"Disabled")}else{this.domObj.addClass("jx"+this.options.type+"Disabled")}},isActive:function(){return this.options.isActive},setActive:function(A){if(this.options.isActive==A){return }this.options.isActive=A;if(this.options.isActive){this.domA.addClass("jx"+this.options.type+"Active");this.fireEvent("down",this)}else{this.domA.removeClass("jx"+this.options.type+"Active");this.fireEvent("up",this)}},setImage:function(A){if(this.domImg){this.domImg.set("src",A)}},setLabel:function(A){if(this.domLabel){this.domLabel.set("html",A)}},setTooltip:function(A){if(this.domImg){this.domImg.set({title:A,alt:A})}},addTo:function(B,A){B=$(B);A=A?$(A):null;if(A&&A.parentNode==B){B.insertBefore(this.domObj,A)}else{B.appendChild(this.domObj)}}});Jx.Button.Flyout=new Class({Extends:Jx.Button,Implements:[Jx.ContentLoader,Jx.AutoPosition,Jx.Chrome],content:null,initialize:function(A){if(!Jx.Button.Flyout.Stack){Jx.Button.Flyout.Stack=[]}this.parent(A);this.domA.addClass("jx"+this.options.type+"Flyout");this.contentContainer=new Element("div",{"class":"jxFlyout"});this.content=new Element("div",{"class":"jxFlyoutContent"});this.contentContainer.adopt(this.content);this.content.store("jxFlyout",this);this.loadContent(this.content);this.keypressWatcher=this.keypressHandler.bindWithEvent(this);this.hideWatcher=this.clickHandler.bindWithEvent(this)},clicked:function(C){if(!this.owner){this.owner=document.body;var B=$(this.domObj.parentNode);while(B!=document.body&&this.owner==document.body){var A=B.retrieve("jxFlyout");if(A){this.owner=A;break}else{B=$(B.parentNode)}}}if(Jx.Button.Flyout.Stack[Jx.Button.Flyout.Stack.length-1]==this){this.hide();return }else{if(this.owner!=document.body){if(this.owner.currentFlyout==this){this.hide();return }else{if(this.owner.currentFlyout){this.owner.currentFlyout.hide()}}this.owner.currentFlyout=this}else{while(Jx.Button.Flyout.Stack.length){Jx.Button.Flyout.Stack[Jx.Button.Flyout.Stack.length-1].hide()}}}Jx.Button.Flyout.Stack.push(this);this.options.isActive=true;this.domA.addClass("jx"+this.options.type+"Active");this.contentContainer.setStyle("visibility","hidden");document.body.adopt(this.contentContainer);this.showChrome(this.contentContainer);this.position(this.contentContainer,this.domObj,{horizontal:["left left","right right"],vertical:["bottom top","top bottom"],offsets:this.chromeOffsets});this.contentContainer.setStyle("visibility","");window.addEvent("keypress",this.keypressWatcher);document.addEvent("click",this.hideWatcher);this.fireEvent("open",this)},hide:function(){if(this.owner!=document.body){this.owner.currentFlyout=null}Jx.Button.Flyout.Stack.pop();this.setActive(false);this.contentContainer.dispose();window.removeEvent("keypress",this.keypressWatcher);document.removeEvent("click",this.hideWatcher);this.fireEvent("close",this)},clickHandler:function(B){B=new Event(B);var C=$(B.target);var A=Jx.Button.Flyout.Stack[Jx.Button.Flyout.Stack.length-1];if(!C.descendantOf(A.content)&&!C.descendantOf(A.domObj)){A.hide()}},keypressHandler:function(A){A=new Event(A);if(A.key=="esc"){Jx.Button.Flyout.Stack[Jx.Button.Flyout.Stack.length-1].hide()}}});Jx.Button.Multi=new Class({activeButton:null,buttons:null,initialize:function(){this.buttons=[];var A=new Element("div");this.tb=new Jx.Toolbar({parent:A,position:"right"});this.flyout=new Jx.Button.Flyout({content:A});this.flyout.domObj.firstChild.addClass("jxButtonMulti");this.domObj=new Element("div",{"class":"jxButtonMultiContainer"});this.domObj.grab(this.flyout.domObj)},add:function(){$A(arguments).each(function(B){if(!B instanceof Jx.Button){return }this.buttons.push(B);var A=new Jx.Button($merge(B.options,{onClick:this.setButton.bind(this,B)}));B.multiButton=A;this.tb.add(A);if(!this.activeButton){this.domObj.grab(B.domObj,"top");this.activeButton=B}},this)},remove:function(A){if(!A||!A.multiButton){return }if(this.tb.remove(A.multiButton)){A.multiButton=null;if(this.activeButton==A){if(!this.buttons.some(function(B){if(B!=A){this.setActiveButton(B);return true}else{return false}},this)){this.setActiveButton(null)}}this.flyout.content.style.height="";this.flyout.content.style.width="";this.buttons.erase(A)}},addTo:function(B,A){B=$(B);A=A?$(A):null;if(A&&A.parentNode==B){B.grab(this.domObj,"top")}else{B.adopt(this.domObj)}},setActiveButton:function(A){if(this.activeButton){this.activeButton.domObj.dispose()}if(A&&A.domObj){this.domObj.grab(A.domObj,"top")}this.activeButton=A},setButton:function(A){this.setActiveButton(A);A.clicked();this.flyout.hide()}});Jx.ColorPalette=new Class({Implements:[Options,Events],domObj:null,options:{color:"#000000",alpha:1},hexColors:["00","33","66","99","CC","FF"],initialize:function(C){this.setOptions(C);this.domObj=new Element("div",{id:this.options.id,"class":"jxColorPalette"});var H=new Element("div",{"class":"jxColorBar"});var Q=new Element("div",{"class":"jxColorPreview"});this.selectedSwatch=new Element("div",{"class":"jxColorSelected"});this.previewSwatch=new Element("div",{"class":"jxColorHover"});Q.adopt(this.selectedSwatch);Q.adopt(this.previewSwatch);H.adopt(Q);this.colorInputLabel=new Element("label",{"class":"jxColorLabel",html:"#"});H.adopt(this.colorInputLabel);var K=this.changed.bind(this);this.colorInput=new Element("input",{"class":"jxHexInput",type:"text",maxLength:6,events:{keyup:K,blur:K,change:K}});H.adopt(this.colorInput);this.alphaLabel=new Element("label",{"class":"jxAlphaLabel",html:"alpha (%)"});H.adopt(this.alphaLabel);this.alphaInput=new Element("input",{"class":"jxAlphaInput",type:"text",maxLength:3,events:{keyup:this.alphaChanged.bind(this)}});H.adopt(this.alphaInput);this.domObj.adopt(H);Q=new Element("div",{"class":"jxClearer"});this.domObj.adopt(Q);var I=this.swatchClick.bindWithEvent(this);var G=this.swatchOver.bindWithEvent(this);var P=new Element("table",{"class":"jxColorGrid"});var A=new Element("tbody");P.adopt(A);for(var N=0;N<12;N++){var B=new Element("tr");for(var L=-3;L<18;L++){var F=false;var J,O,R;if(L<0){if(L==-3||L==-1){J=O=R=0;F=true}else{if(N<6){J=O=R=N}else{if(N==6){J=5;O=0;R=0}else{if(N==7){J=0;O=5;R=0}else{if(N==8){J=0;O=0;R=5}else{if(N==9){J=5;O=5;R=0}else{if(N==10){J=0;O=5;R=5}else{if(N==11){J=5;O=0;R=5}}}}}}}}}else{J=parseInt(N/6)*3+parseInt(L/6);O=L%6;R=N%6}var D="#"+this.hexColors[J]+this.hexColors[O]+this.hexColors[R];var E=new Element("td");if(!F){E.setStyle("backgroundColor",D);var S=new Element("a",{"class":"colorSwatch "+(((J>2&&O>2)||(J>2&&R>2)||(O>2&&R>2))?"borderBlack":"borderWhite"),href:"#",title:D,alt:D,events:{mouseover:G,click:I}});S.store("swatchColor",D);E.adopt(S)}else{var M=new Element("span",{"class":"emptyCell"});E.adopt(M)}B.adopt(E)}A.adopt(B)}this.domObj.adopt(P);this.updateSelected()},swatchOver:function(B){var A=B.target;this.previewSwatch.setStyle("backgroundColor",A.retrieve("swatchColor"))},swatchClick:function(B){var A=B.target;this.options.color=A.retrieve("swatchColor");this.updateSelected();this.fireEvent("click",this)},changed:function(){var A=this.colorInput.value;if(A.substring(0,1)=="#"){A=A.substring(1)}if(A.toLowerCase().match(/^[0-9a-f]{6}$/)){this.options.color="#"+A.toUpperCase();this.updateSelected()}},alphaChanged:function(){var A=this.alphaInput.value;if(A.match(/^[0-9]{1,3}$/)){this.options.alpha=parseFloat(A/100);this.updateSelected()}},setColor:function(A){this.colorInput.value=A;this.changed()},setAlpha:function(A){this.alphaInput.value=A;this.alphaChanged()},updateSelected:function(){var A={backgroundColor:this.options.color};this.colorInput.value=this.options.color.substring(1);this.alphaInput.value=parseInt(this.options.alpha*100);if(this.options.alpha<1){A.opacity=this.options.alpha;A.filter="Alpha(opacity="+(this.options.alpha*100)+")"}else{A.opacity="";A.filter=""}this.selectedSwatch.setStyles(A);this.previewSwatch.setStyles(A);this.fireEvent("change",this)}});Jx.Button.Color=new Class({Extends:Jx.Button.Flyout,swatch:null,options:{color:"#000000",alpha:100},initialize:function(A){if(!Jx.Button.Color.ColorPalette){Jx.Button.Color.ColorPalette=new Jx.ColorPalette(this.options)}var B=new Element("span",{"class":"jxButtonSwatch"});this.selectedSwatch=new Element("span");B.appendChild(this.selectedSwatch);this.colorChangeFn=this.changed.bind(this);this.hideFn=this.hide.bind(this);Jx.Button.Flyout.prototype.initialize.apply(this,[A]);$(this.domObj.firstChild).addClass("jxButtonColor");this.domObj.firstChild.firstChild.insertBefore(B,this.domObj.firstChild.firstChild.firstChild);this.updateSwatch()},clicked:function(){if(Jx.Button.Color.ColorPalette.currentButton){Jx.Button.Color.ColorPalette.currentButton.hide()}Jx.Button.Color.ColorPalette.currentButton=this;Jx.Button.Color.ColorPalette.addEvent("change",this.colorChangeFn);Jx.Button.Color.ColorPalette.addEvent("click",this.hideFn);this.content.appendChild(Jx.Button.Color.ColorPalette.domObj);Jx.Button.Color.ColorPalette.domObj.setStyle("display","block");Jx.Button.Flyout.prototype.clicked.apply(this,arguments);Jx.Button.Color.ColorPalette.options.color=this.options.color;Jx.Button.Color.ColorPalette.options.alpha=this.options.alpha/100;Jx.Button.Color.ColorPalette.updateSelected()},hide:function(){this.setActive(false);Jx.Button.Color.ColorPalette.removeEvent("change",this.colorChangeFn);Jx.Button.Color.ColorPalette.removeEvent("click",this.hideFn);Jx.Button.Flyout.prototype.hide.apply(this,arguments);Jx.Button.Color.ColorPalette.currentButton=null},setColor:function(A){this.options.color=A;this.updateSwatch()},setAlpha:function(A){this.options.alpha=A;this.updateSwatch()},changed:function(A){var B=false;if(this.options.color!=A.options.color){this.options.color=A.options.color;B=true}if(this.options.alpha!=A.options.alpha*100){this.options.alpha=A.options.alpha*100;B=true}if(B){this.updateSwatch();this.fireEvent("change",this)}},updateSwatch:function(){var A={backgroundColor:this.options.color};if(this.options.alpha<100){A.filter="Alpha(opacity="+(this.options.alpha)+")";A.opacity=this.options.alpha/100}else{A.opacity="";A.filter=""}this.selectedSwatch.setStyles(A)}});Jx.ButtonSet=new Class({Implements:[Options,Events],buttons:null,initialize:function(A){this.setOptions(A);this.buttons=[];this.buttonChangedHandler=this.buttonChanged.bind(this)},add:function(){$A(arguments).each(function(A){A.domObj.addClass("jx"+A.options.type+"Set");A.addEvent("down",this.buttonChangedHandler);var B=this;A.setActive=function(C){if(this.options.isActive&&B.activeButton==this){return }else{Jx.Button.prototype.setActive.apply(this,[C])}};if(!this.activeButton){A.setActive(true)}this.buttons.push(A)},this)},remove:function(A){this.buttons.erase(A);if(this.activeButton==A){if(this.buttons.length){this.buttons[0].setActive(true)}A.removeEvent("down",this.buttonChangedHandler);A.setActive=Jx.Button.prototype.setActive}},setActiveButton:function(B){var A=this.activeButton;this.activeButton=B;if(A&&A!=B){A.setActive(false)}},buttonChanged:function(A){this.setActiveButton(A);this.fireEvent("change",this)}});Jx.Grid=new Class({Implements:[Options],domObj:null,model:null,options:{alternateRowColors:false,rowHeaders:false,columnHeaders:false,rowSelection:false,cellSelection:false},initialize:function(B,A){this.setOptions(A);this.domObj=$(B);var C=this.domObj.retrieve("jxLayout");if(C){C.addEvent("sizeChange",this.resize.bind(this))}this.rowColObj=new Element("div",{"class":"jxGridContainer"});this.colObj=new Element("div",{"class":"jxGridContainer"});this.colTable=new Element("table",{"class":"jxGridTable"});this.colTableHead=new Element("thead");this.colTable.appendChild(this.colTableHead);this.colTableBody=new Element("tbody");this.colTable.appendChild(this.colTableBody);this.colObj.appendChild(this.colTable);this.rowObj=new Element("div",{"class":"jxGridContainer"});this.rowTable=new Element("table",{"class":"jxGridTable"});this.rowTableHead=new Element("thead");this.rowTable.appendChild(this.rowTableHead);this.rowObj.appendChild(this.rowTable);this.gridObj=new Element("div",{"class":"jxGridContainer",styles:{overflow:"scroll"}});this.gridTable=new Element("table",{"class":"jxGridTable"});this.gridTableBody=new Element("tbody");this.gridTable.appendChild(this.gridTableBody);this.gridObj.appendChild(this.gridTable);this.domObj.appendChild(this.rowColObj);this.domObj.appendChild(this.rowObj);this.domObj.appendChild(this.colObj);this.domObj.appendChild(this.gridObj);this.gridObj.addEvent("scroll",this.onScroll.bind(this));this.gridObj.addEvent("click",this.onClickGrid.bindWithEvent(this));this.rowObj.addEvent("click",this.onClickRowHeader.bindWithEvent(this));this.colObj.addEvent("click",this.onClickColumnHeader.bindWithEvent(this));this.gridObj.addEvent("mousemove",this.onMouseMoveGrid.bindWithEvent(this));this.rowObj.addEvent("mousemove",this.onMouseMoveRowHeader.bindWithEvent(this));this.colObj.addEvent("mousemove",this.onMouseMoveColumnHeader.bindWithEvent(this))},onScroll:function(){this.colObj.scrollLeft=this.gridObj.scrollLeft;this.rowObj.scrollTop=this.gridObj.scrollTop},resize:function(){if(!this.model){return }var C=this.options.columnHeaders?this.model.getColumnHeaderHeight():1;var A=this.options.rowHeaders?this.model.getRowHeaderWidth():1;var B=Element.getContentBoxSize(this.domObj);this.rowColObj.setStyles({width:A-1,height:C-1});this.rowObj.setStyles({top:C,left:0,width:A-1,height:B.height-C-1});this.colObj.setStyles({top:0,left:A,width:B.width-A-1,height:C-1});this.gridObj.setStyles({top:C,left:A,width:B.width-A-1,height:B.height-C-1})},setModel:function(A){if(this.model){this.model.removeGridListener(this)}this.model=A;if(this.model){if(this.domObj.resize){this.domObj.resize()}this.model.addGridListener(this);this.createGrid();this.resize()}else{this.destroyGrid()}},destroyGrid:function(){var A=this.colTableHead.cloneNode(false);this.colTable.replaceChild(A,this.colTableHead);this.colTableHead=A;A=this.colTableBody.cloneNode(false);this.colTable.replaceChild(A,this.colTableBody);this.colTableBody=A;A=this.rowTableHead.cloneNode(false);this.rowTable.replaceChild(A,this.rowTableHead);this.rowTableHead=A;A=this.gridTableBody.cloneNode(false);this.gridTable.replaceChild(A,this.gridTableBody);this.gridTableBody=A},createGrid:function(){this.destroyGrid();if(this.model){var L=this.model;var E=L.getColumnCount();var Q=L.getRowCount();if(this.options.columnHeaders){var N=L.getColumnHeaderHeight();var P=new Element("tr");this.colTableHead.appendChild(P);var M=new Element("tr");this.colTableBody.appendChild(M);var C=new Element("th",{styles:{width:0,height:0}});P.appendChild(C);C=C.cloneNode(true);C.setStyle("height",N);M.appendChild(C);for(var K=0;K<E;K++){var J=L.getColumnWidth(K);C=new Element("th",{"class":"jxGridColHeadHide",styles:{width:J}});var B=new Element("p",{styles:{height:0,width:J}});C.appendChild(B);P.appendChild(C);C=new Element("th",{"class":"jxGridColHead",html:L.getColumnHeaderHTML(K)});M.appendChild(C)}var C=new Element("th",{styles:{width:1000,height:0}});P.appendChild(C);C=C.cloneNode(true);C.setStyle("height",N-1);C.className="jxGridColHead";M.appendChild(C)}if(this.options.rowHeaders){var H=L.getRowHeaderWidth();var O=new Element("tr");var G=new Element("td",{styles:{width:0,height:0}});O.appendChild(G);var C=new Element("th",{styles:{width:H,height:0}});O.appendChild(C);this.rowTableHead.appendChild(O);for(var K=0;K<Q;K++){var A=L.getRowHeight(K);var O=new Element("tr");var G=new Element("td",{"class":"jxGridRowHeadHide",styles:{width:0,height:A}});var B=new Element("p",{styles:{width:0,height:A}});G.appendChild(B);O.appendChild(G);var C=new Element("th",{"class":"jxGridRowHead",html:L.getRowHeaderHTML(K)});O.appendChild(C);this.rowTableHead.appendChild(O)}var O=new Element("tr");var G=new Element("td",{styles:{width:0,height:1000}});O.appendChild(G);var C=new Element("th",{"class":"jxGridRowHead",styles:{width:H,height:1000}});O.appendChild(C);this.rowTableHead.appendChild(O)}var N=L.getColumnHeaderHeight();var M=new Element("tr");this.gridTableBody.appendChild(M);var G=new Element("td",{styles:{width:0,height:0}});M.appendChild(G);for(var K=0;K<E;K++){var J=L.getColumnWidth(K);G=new Element("td",{"class":"jxGridColHeadHide",styles:{width:J}});var B=new Element("p",{styles:{width:J,height:0}});G.appendChild(B);M.appendChild(G)}for(var I=0;I<Q;I++){var A=L.getRowHeight(I);var D=A;var O=new Element("tr");this.gridTableBody.appendChild(O);var G=new Element("td",{"class":"jxGridRowHeadHide",styles:{width:0,height:A}});var B=new Element("p",{styles:{height:A}});G.appendChild(B);O.appendChild(G);for(var K=0;K<E;K++){var J=L.getColumnWidth(K);G=new Element("td",{"class":"jxGridCell"});G.innerHTML=L.getValueAt(I,K);O.appendChild(G);var F=G.getSize();if(F.height>D){D=F.height}}if(document.all){D-=1}if(this.options.rowHeaders){this.setRowHeaderHeight(I,D)}if(this.options.alternateRowColors){O.className=(I%2)?"jxGridRowOdd":"jxGridRowEven"}else{O.className="jxGridRowAll"}}}},setRowHeaderHeight:function(B,A){this.rowTableHead.childNodes[B+1].childNodes[0].childNodes[0].style.height=(A)+"px"},gridChanged:function(B,D,A,C){if(this.model==B){this.gridObj.childNodes[D].childNodes[A].innerHTML=C}},prelightRowHeader:function(B){var A=(B>=0&&B<this.rowTableHead.rows.length-1)?this.rowTableHead.rows[B+1].cells[1]:null;if(this.prelitRowHeader!=A){if(this.prelitRowHeader){this.prelitRowHeader.removeClass("jxGridRowHeaderPrelight")}this.prelitRowHeader=A;if(this.prelitRowHeader){this.prelitRowHeader.addClass("jxGridRowHeaderPrelight")}}},prelightColumnHeader:function(B){if(this.colTableBody.rows.length==0){return }var A=(B>=0&&B<this.colTableBody.rows[0].cells.length-1)?this.colTableBody.rows[0].cells[B+1]:null;if(this.prelitColumnHeader!=A){if(this.prelitColumnHeader){this.prelitColumnHeader.removeClass("jxGridColumnHeaderPrelight")}this.prelitColumnHeader=A;if(this.prelitColumnHeader){this.prelitColumnHeader.addClass("jxGridColumnHeaderPrelight")}}},prelightRow:function(B){var A=(B>=0&&B<this.gridTableBody.rows.length-1)?this.gridTableBody.rows[B+1]:null;if(this.prelitRow!=B){if(this.prelitRow){this.prelitRow.removeClass("jxGridRowPrelight")}this.prelitRow=A;if(this.prelitRow&&!this.prelitRow.hasClass("jxGridRowSelected")){this.prelightRowHeader(B);this.prelitRow.addClass("jxGridRowPrelight")}}},prelightColumn:function(A){this.prelightColumnHeader(A)},prelightCell:function(B,A){var C=(B>=0&&A>=0&&B<this.gridTableBody.rows.length-1&&A<this.gridTableBody.rows[B+1].cells.length-1)?this.gridTableBody.rows[B+1].cells[A+1]:null;if(this.prelitCell!=C){if(this.prelitCell){this.prelitCell.removeClass("jxGridCellPrelight")}this.prelitCell=C;if(this.prelitCell){this.prelitCell.addClass("jxGridCellPrelight");this.prelightRow(B);this.prelightColumn(A)}}},selectCell:function(B,A){var C=(B>=0&&A>=0&&B<this.gridTableBody.rows.length-1&&A<this.gridTableBody.rows[B+1].cells.length-1)?this.gridTableBody.rows[B+1].cells[A+1]:null;if(!C){return }if(this.selectedCell){this.selectedCell.addClass("jxGridCellSelected")}else{this.selectedCell.removeClass("jxGridCellSelected")}},selectRowHeader:function(C,B){var A=(C>=0&&C<this.rowTableHead.rows.length-1)?this.rowTableHead.rows[C+1].cells[1]:null;if(!A){return }if(B){A.addClass("jxGridRowHeaderSelected")}else{A.removeClass("jxGridRowHeaderSelected")}},selectRow:function(C,A){var B=(C>=0&&C<this.gridTableBody.rows.length-1)?this.gridTableBody.rows[C+1]:null;if(B){if(A){B.addClass("jxGridRowSelected")}else{B.removeClass("jxGridRowSelected")}}this.selectRowHeader(C,A)},selectColumnHeader:function(B,C){if(this.colTableBody.rows.length==0){return }var A=(B>=0&&B<this.colTableBody.rows[0].cells.length-1)?this.colTableBody.rows[0].cells[B+1]:null;if(A==null){return }if(C){A.addClass("jxGridColumnHeaderSelected")}else{A.removeClass("jxGridColumnHeaderSelected")}},selectColumn:function(A,C){if(A>=0&&A<this.gridTable.rows[0].cells.length){if(C){for(var B=0;B<this.gridTable.rows.length;B++){this.gridTable.rows[B].cells[this.selectedColumn+1].removeClass("jxGridColumnSelected")}}else{for(var B=0;B<this.gridTable.rows.length;B++){this.gridTable.rows[B].cells[A+1].addClass("jxGridColumnSelected")}}}this.selectColumnHeader(A,C)},onMouseMoveGrid:function(B){var A=this.getRowColumnFromEvent(B);this.prelightCell(A.row,A.column)},onMouseMoveRowHeader:function(B){var A=this.getRowColumnFromEvent(B);this.prelightRow(A.row)},onMouseMoveColumnHeader:function(B){var A=this.getRowColumnFromEvent(B);this.prelightColumn(A.column)},onClickGrid:function(B){var A=this.getRowColumnFromEvent(B);if(this.model.cellSelected){this.model.cellSelected(this,A.row,A.column)}},onClickRowHeader:function(B){var A=this.getRowColumnFromEvent(B);if(this.model.rowSelected){this.model.rowSelected(this,A.row)}},onClickColumnHeader:function(B){var A=this.getRowColumnFromEvent(B);if(this.model.columnSelected){this.model.columnSelected(this,A.column)}},getRowColumnFromEvent:function(D){var F=D.target;if(F.tagName!="TD"&&F.tagName!="TH"){return{row:-1,column:-1}}var C=F.parentNode;var A=F.cellIndex-1;var E=C.rowIndex-1;if(A==-1){for(var B=0;B<C.childNodes.length;B++){if(C.childNodes[B]==F){A=B-1;break}}}return{row:E,column:A}}});Jx.Layout=new Class({Implements:[Options,Events],options:{propagate:true,position:"absolute",left:0,right:0,top:0,bottom:0,width:null,height:null,minWidth:0,minHeight:0,maxWidth:-1,maxHeight:-1},initialize:function(B,A){this.setOptions(A);this.domObj=$(B);this.domObj.resize=this.resize.bind(this);this.domObj.setStyle("position",this.options.position);this.domObj.store("jxLayout",this);if(document.body==this.domObj.parentNode){window.addEvent("resize",this.windowResize.bindWithEvent(this));window.addEvent("load",this.resize.bind(this))}},windowResize:function(){if(this.resizeTimer){$clear(this.resizeTimer);this.resizeTimer=null}this.resizeTimer=this.resize.delay(100,this)},resize:function(K){this.resizeTimer=null;var B=false;if(K){for(var F in K){if(F=="forceResize"){continue}if(this.options[F]!=K[F]){B=true;this.options[F]=K[F]}}if(K.forceResize){B=true}}if(!$(this.domObj.parentNode)){return }var C;if(this.domObj.parentNode.tagName=="BODY"){C=Element.getPageDimensions()}else{C=$(this.domObj.parentNode).getContentBoxSize()}if(this.lastParentSize&&!B){B=(this.lastParentSize.width!=C.width||this.lastParentSize.height!=C.height)}else{B=true}this.lastParentSize=C;if(!B){return }var D,J,I,G;if(this.options.left!=null){D=this.options.left;if(this.options.right==null){if(this.options.width==null){I=C.width-D;if(I<this.options.minWidth){I=this.options.minWidth}if(this.options.maxWidth>=0&&I>this.options.maxWidth){I=this.options.maxWidth}}else{I=this.options.width}}else{if(this.options.width==null){I=C.width-D-this.options.right;if(I<this.options.minWidth){I=this.options.minWidth}if(this.options.maxWidth>=0&&I>this.options.maxWidth){I=this.options.maxWidth}}else{I=this.options.width}}}else{if(this.options.right==null){if(this.options.width==null){D=0;I=C.width;if(this.options.maxWidth>=0&&I>this.options.maxWidth){D=D+parseInt(I-this.options.maxWidth)/2;I=this.options.maxWidth}}else{I=this.options.width;D=parseInt((C.width-I)/2);if(D<0){D=0}}}else{if(this.options.width!=null){I=this.options.width;D=C.width-I-this.options.right;if(D<0){D=0}}else{D=0;I=C.width-this.options.right;if(I<this.options.minWidth){I=this.options.minWidth}if(this.options.maxWidth>=0&&I>this.options.maxWidth){D=I-this.options.maxWidth-this.options.right;I=this.options.maxWidth}}}}if(this.options.top!=null){J=this.options.top;if(this.options.bottom==null){if(this.options.height==null){G=C.height-J;if(G<this.options.minHeight){G=this.options.minHeight}if(this.options.maxHeight>=0&&G>this.options.maxHeight){G=this.options.maxHeight}}else{G=this.options.height;if(this.options.maxHeight>=0&&G>this.options.maxHeight){J=G-this.options.maxHeight;G=this.options.maxHeight}}}else{if(this.options.height==null){G=C.height-J-this.options.bottom;if(G<this.options.minHeight){G=this.options.minHeight}if(this.options.maxHeight>=0&&G>this.options.maxHeight){G=this.options.maxHeight}}else{G=this.options.height}}}else{if(this.options.bottom==null){if(this.options.height==null){J=0;G=C.height;if(G<this.options.minHeight){G=this.options.minHeight}if(this.options.maxHeight>=0&&G>this.options.maxHeight){J=parseInt((C.height-this.options.maxHeight)/2);G=this.options.maxHeight}}else{G=this.options.height;J=parseInt((C.height-G)/2);if(J<0){J=0}}}else{if(this.options.height!=null){G=this.options.height;J=C.height-G-this.options.bottom;if(J<0){J=0}}else{J=0;G=C.height-this.options.bottom;if(G<this.options.minHeight){G=this.options.minHeight}if(this.options.maxHeight>=0&&G>this.options.maxHeight){J=C.height-this.options.maxHeight-this.options.bottom;G=this.options.maxHeight}}}}var E={width:I};if(this.options.position=="absolute"){var H=$(this.domObj.parentNode).getPaddingSize();this.domObj.setStyles({position:this.options.position,left:D+H.left,top:J+H.top});E.height=G}else{if(this.options.height){E.height=this.options.height}}this.domObj.setBorderBoxSize(E);if(this.options.propagate){var A={forceResize:K?K.forceResize:false};$A(this.domObj.childNodes).each(function(L){if(L.resize&&L.getStyle("display")!="none"){L.resize(A)}})}this.fireEvent("sizeChange",this)}});Jx.Menu=new Class({Implements:[Jx.AutoPosition,Jx.Chrome],domObj:null,button:null,subDomObj:null,items:null,initialize:function(A){if(!Jx.Menu.Menus){Jx.Menu.Menus=[]}this.items=[];this.contentContainer=new Element("div",{"class":"jxMenuContainer"});this.subDomObj=new Element("ul",{"class":"jxMenu"});this.contentContainer.adopt(this.subDomObj);if(A){this.domObj=new Element("li",{id:A.id,events:{mouseover:this.onMouseOver.bindWithEvent(this)}});this.button=new Jx.Button($merge(A,{onClick:this.show.bind(this)}));this.button.domA.addClass("jxButtonMenu");this.domObj.adopt(this.button.domObj)}this.hideWatcher=this.hide.bindWithEvent(this);this.keypressWatcher=this.keypressHandler.bindWithEvent(this)},add:function(){$A(arguments).each(function(A){this.items.push(A);A.setOwner(this);this.subDomObj.adopt(A.domObj)},this)},deactivate:function(){this.hide()},actionPerformed:function(){this.hide()},onMouseOver:function(A){if(Jx.Menu.Menus[0]&&Jx.Menu.Menus[0]!=this){this.show({event:A})}},hide:function(A){if(A){if(A.target.descendantOf(this.domObj)||A.target.descendantOf(this.subDomObj)){return }}if(Jx.Menu.Menus[0]&&Jx.Menu.Menus[0]==this){Jx.Menu.Menus[0]=null}if(this.domA){this.domA.removeClass("jx"+this.button.options.type+"Active")}this.contentContainer.dispose();this.items.each(function(B){B.hide(A)});document.removeEvent("mousedown",this.hideWatcher);document.removeEvent("keyup",this.keypressWatcher)},show:function(B){var A=B.event;if(Jx.Menu.Menus[0]&&Jx.Menu.Menus[0]!=this){Jx.Menu.Menus[0].hide(A)}if(this.items.length==0){return }Jx.Menu.Menus[0]=this;this.contentContainer.setStyle("visibility","hidden");document.body.adopt(this.contentContainer);this.contentContainer.setContentBoxSize(this.subDomObj.getMarginBoxSize());this.showChrome(this.contentContainer);this.position(this.contentContainer,this.button.domObj,{horizontal:["left left"],vertical:["bottom top","top bottom"],offsets:this.chromeOffsets});this.contentContainer.setStyle("visibility","");if(this.domA){this.domA.addClass("jx"+this.button.options.type+"Active")}if(A){A.stop()}document.addEvent("mousedown",this.hideWatcher);document.addEvent("keyup",this.keypressWatcher)},setVisibleItem:function(A){if(this.visibleItem!=A){if(this.visibleItem&&this.visibleItem.hide){this.visibleItem.hide()}this.visibleItem=A;this.visibleItem.show()}},keypressHandler:function(A){A=new Event(A);if(A.key=="esc"){this.hide()}}});Jx.Menu.Item=new Class({Implements:[Options,Events],Extends:Jx.Button,owner:null,button:null,options:{enabled:true,image:Jx.baseURL+"images/a_pixel.png",label:"&nbsp;"},initialize:function(A){this.parent($merge(A,{container:"li",type:"MenuItem"}));this.domObj.addEvent("mouseover",this.onMouseOver.bindWithEvent(this));if(!this.options.enabled){this.domObj.addClass("jxMenuItemDisabled")}},setOwner:function(A){this.owner=A},hide:$empty,show:$empty,clicked:function(A){if(this.options.enabled){if(this.options.toggle){this.setActive(!this.options.isActive)}this.fireEvent("click",this);if(this.owner&&this.owner.deactivate){this.owner.deactivate(A.event)}}},propertyChanged:function(A){this.options.enabled=A.isEnabled();if(this.options.enabled){this.domObj.removeClass("jxMenuItemDisabled")}else{if(!this.domObj.hadClass("jxMenuItemDisabled")){this.domObj.addClass("jxMenuItemDisabled")}}},onMouseOver:function(A){if(this.owner&&this.owner.setVisibleItem){this.owner.setVisibleItem(this)}this.show(A)}});Jx.Menu.Separator=new Class({domObj:null,owner:null,initialize:function(){this.domObj=new Element("li",{"class":"jxMenuItem"});var A=new Element("span",{"class":"jxMenuSeparator",html:"&nbsp;"});this.domObj.appendChild(A)},setOwner:function(A){this.owner=A},hide:$empty,show:$empty});Jx.Menu.SubMenu=new Class({Extends:Jx.Menu.Item,Implements:[Options,Events,Jx.AutoPosition,Jx.Chrome],subDomObj:null,owner:null,visibleItem:null,items:null,initialize:function(A){this.open=false;this.items=[];this.parent(A);this.domA.addClass("jxButtonSubMenu");this.contentContainer=new Element("div",{"class":"jxMenuContainer"});this.subDomObj=new Element("ul",{"class":"jxSubMenu"});this.contentContainer.adopt(this.subDomObj)},setOwner:function(A){this.owner=A},show:function(){if(this.open||this.items.length==0){return }this.contentContainer.setStyle("visibility","hidden");document.body.adopt(this.contentContainer);this.contentContainer.setContentBoxSize(this.subDomObj.getMarginBoxSize());this.showChrome(this.contentContainer);this.position(this.contentContainer,this.domObj,{horizontal:["right left","left right"],vertical:["top top"],offsets:this.chromeOffsets});this.open=true;this.contentContainer.setStyle("visibility","");this.setActive(true)},hide:function(){if(!this.open){return }this.open=false;this.items.each(function(A){A.hide()});this.contentContainer.dispose();this.visibleItem=null},add:function(){var A=this;$A(arguments).each(function(B){A.items.push(B);B.setOwner(A);A.subDomObj.adopt(B.domObj)})},insertBefore:function(C,D){var B=false;for(var A=0;A<this.items.length;A++){if(this.items[A]==D){this.items.splice(A,0,C);this.subDomObj.insertBefore(C.domObj,D.domObj);B=true;break}}if(!B){this.add(C)}},remove:function(B){for(var A=0;A<this.items.length;A++){if(this.items[A]==B){this.items.splice(A,1);this.subDomObj.removeChild(B.domObj);break}}},processActionEvent:function(A){if(this.open){this.hide()}else{this.show()}if(A&&A.event){A.event.stop()}},deactivate:function(A){if(this.owner){this.owner.deactivate(A)}},isActive:function(){if(this.owner){return this.owner.isActive()}else{return false}},setActive:function(A){if(this.owner&&this.owner.setActive){this.owner.setActive(A)}},setVisibleItem:function(A){if(this.visibleItem!=A){if(this.visibleItem&&this.visibleItem.hide){this.visibleItem.hide()}this.visibleItem=A;this.visibleItem.show()}}});Jx.Menu.Context=new Class({Extends:Jx.Menu,initialize:function(A){this.parent();if($(A)){$(A).addEvent("contextmenu",this.show.bindWithEvent(this))}},show:function(A){if(this.items.length==0){return }this.contentContainer.setStyle("visibility","hidden");document.body.adopt(this.contentContainer);this.contentContainer.setContentBoxSize(this.subDomObj.getMarginBoxSize());this.position(this.contentContainer,document.body,{horizontal:[A.page.x+" left"],vertical:[A.page.y+" top",A.page.y+" bottom"],offsets:this.chromeOffsets});this.contentContainer.setStyle("visibility","");this.showChrome(this.contentContainer);document.addEvent("mousedown",this.hideWatcher);document.addEvent("keyup",this.keypressWatcher);A.stop()}});Jx.Panel=new Class({Implements:[Options,Events,Jx.UniqueId,Jx.ContentLoader],toolbarContainers:{top:null,right:null,bottom:null,left:null},options:{label:"&nbsp;",imageBaseUrl:Jx.baseURL+"images/",position:"absolute",height:null,collapse:true,detach:false,close:false,closed:false,hideTitle:false,type:"Panel"},initialize:function(N){this.toolbars=N.toolbars||[];this.setOptions(N);if($defined(this.options.height)&&!$defined(N.position)){this.options.position="relative"}this.initUniqueId();this.title=new Element("div",{"class":"jx"+this.options.type+"Title"});this.labelObj=new Element("span",{"class":"jx"+this.options.type+"Label",html:this.options.label});this.title.adopt(this.labelObj);var K=new Element("div",{"class":"jx"+this.options.type+"Controls"});var E=new Element("div");K.adopt(E);this.toolbar=new Jx.Toolbar({parent:E});this.title.adopt(K);var F=this;if(this.options.menu){this.menu=new Jx.Menu({image:Jx.baseURL+"images/panel_controls.png"});this.menu.domObj.addClass("jx"+this.options.type+"Menu");this.menu.domObj.addClass("jxButtonContentLeft");this.toolbar.add(this.menu)}if(this.options.collapse){var H=new Jx.Button({image:Jx.baseURL+"images/panel_controls.png",tooltip:"Collapse/Expand Panel",onClick:function(){F.toggleCollapse()}});H.domObj.addClass("jx"+this.options.type+"Collapse");this.toolbar.add(H);if(this.menu){var L=new Jx.Menu.Item({label:"Collapse",onClick:function(){F.toggleCollapse()}});this.addEvent("collapse",function(){if(F.options.closed){L.setLabel("Expand")}else{L.setLabel("Collapse")}});this.menu.add(L)}}if(this.options.maximize){var H=new Jx.Button({image:Jx.baseURL+"images/panel_controls.png",tooltip:"Maximize Panel",onClick:function(){F.maximize()}});H.domObj.addClass("jx"+this.options.type+"Maximize");this.toolbar.add(H);if(this.menu){var L=new Jx.Menu.Item({label:"Maximize",onClick:function(){F.maximize()}});this.menu.add(L)}}if(this.options.close){var H=new Jx.Button({image:Jx.baseURL+"images/panel_controls.png",tooltip:"Close Panel",onClick:function(){F.close()}});H.domObj.addClass("jx"+this.options.type+"Close");this.toolbar.add(H);if(this.menu){var L=new Jx.Menu.Item({label:"Close",onClick:function(){F.close()}});this.menu.add(L)}}this.title.addEvent("dblclick",function(){F.toggleCollapse()});this.domObj=new Element("div",{"class":"jx"+this.options.type});if(this.options.id){this.domObj.id=this.options.id}if($(this.options.parent)){$(this.options.parent).adopt(this.domObj)}var G=new Jx.Layout(this.domObj,$merge(this.options,{propagate:false}));var M=this.layoutContent.bind(this);G.addEvent("sizeChange",M);if(!this.options.hideTitle){this.domObj.adopt(this.title)}this.contentContainer=new Element("div",{"class":"jx"+this.options.type+"ContentContainer"});this.domObj.adopt(this.contentContainer);for(var B=0;B<this.toolbars.length;B++){var A=this.toolbars[B];A.addEvent("add",M);A.addEvent("remove",M);var D=A.options.position;var J=this.toolbarContainers[D];if(!J){var J=new Element("div",{"class":"jxToolbarContainer jxToolbar"+D.capitalize()});new Jx.Layout(J);var C=new Element("div",{"class":"jxClearer"});J.appendChild(C);this.contentContainer.adopt(J);this.toolbarContainers[D]=J}var I=A.domObj;J.insertBefore(I,J.lastChild)}this.content=new Element("div",{"class":"jx"+this.options.type+"Content"});new Jx.Layout(this.contentContainer);new Jx.Layout(this.content);this.contentContainer.adopt(this.content);this.loadContent(this.content,N);this.toggleCollapse(this.options.closed)},layoutContent:function(){var G=0;var H=0;var A=0;var C=0;var J=0;var I;var D;var F;if(!this.options.hideTitle&&this.title.parentNode==this.domObj){G=this.title.getMarginBoxSize().height}var B=this.domObj.getContentBoxSize();if(B.height>G){this.contentContainer.setStyle("display","block");this.options.closed=false;this.contentContainer.resize({top:G,height:null,bottom:0});["left","right"].each(function(L){if(this.toolbarContainers[L]){this.toolbarContainers[L].style.width=""}},this);["top","bottom"].each(function(L){if(this.toolbarContainers[L]){this.toolbarContainers[L].style.height=""}},this);for(var E=0;E<this.toolbars.length;E++){D=this.toolbars[E];F=D.options.position;I=this.toolbarContainers[F];var K=I.getBorderBoxSize();switch(F){case"top":H=K.height;break;case"bottom":A=K.height;break;case"left":C=K.width;break;case"right":J=K.width;break}}I=this.toolbarContainers.top;if(I){I.resize({top:0,left:C,right:J,bottom:null,height:H,width:null})}I=this.toolbarContainers.bottom;if(I){I.resize({top:null,left:C,right:J,bottom:0,height:A,width:null})}I=this.toolbarContainers.left;if(I){I.resize({top:H,left:0,right:null,bottom:A,height:null,width:C})}I=this.toolbarContainers.right;if(I){I.resize({top:H,left:null,right:0,bottom:A,height:null,width:J})}this.content.resize({top:H,bottom:A,left:C,right:J})}else{this.contentContainer.setStyle("display","none");this.options.closed=true}},setLabel:function(A){this.labelObj.innerHTML=A},getLabel:function(){return this.labelObj.innerHTML},finalize:function(){this.domObj=null;this.deregisterIds()},maximize:function(){if(this.manager){this.manager.maximizePanel(this)}},setContent:function(A){this.content.innerHTML=A;this.bContentReady=true},setContentURL:function(B){this.bContentReady=false;this.setBusy(true);if(arguments[1]){this.onContentReady=arguments[1]}if(B.indexOf("?")==-1){B=B+"?"}var C={method:"get",onComplete:this.panelContentLoaded.bind(this),requestHeaders:["If-Modified-Since","Sat, 1 Jan 2000 00:00:00 GMT"]};var A=new Request(B,C).send()},panelContentLoaded:function(A){this.content.innerHTML=A.responseText;this.bContentReady=true;this.setBusy(false);if(this.onContentReady){window.setTimeout(this.onContentReady.bind(this),1)}},setBusy:function(A){this.busyCount+=A?1:-1;this.loadingObj.img.style.visibility=(this.busyCount>0)?"visible":"hidden"},addTo:function(B,A){B=$(B);A=A?$(A):null;if(A&&A.parentNode==B){B.insertBefore(this.domObj,A)}else{B.appendChild(this.domObj)}this.domObj.resize()},toggleCollapse:function(C){if($defined(C)){this.options.closed=C}else{this.options.closed=!this.options.closed}if(this.options.closed){if(!this.domObj.hasClass("jx"+this.options.type+"Min")){this.domObj.addClass("jx"+this.options.type+"Min");this.contentContainer.setStyle("display","none");var B=this.domObj.getMarginSize();var A=B.top+B.bottom;if(this.title.parentNode==this.domObj){A+=this.title.getMarginBoxSize().height}this.domObj.resize({height:A});this.fireEvent("collapse",this)}}else{if(this.domObj.hasClass("jx"+this.options.type+"Min")){this.domObj.removeClass("jx"+this.options.type+"Min");this.contentContainer.setStyle("display","block");this.domObj.resize({height:this.options.height});this.fireEvent("expand",this)}}},close:function(){this.domObj.dispose();this.fireEvent("close",this)}});Jx.Dialog=new Class({Extends:Jx.Panel,Implements:[Jx.AutoPosition,Jx.Chrome],blanket:null,options:{modal:true,position:"absolute",width:250,height:250,left:0,top:0,bottom:null,right:null,label:"New Dialog",id:"",parent:null,resize:false,move:true,close:true,collapse:true},initialize:function(A){if(!Jx.Dialog.Stack){Jx.Dialog.Stack=[];Jx.Dialog.ZIndex=[100]}this.isOpening=false;this.parent($merge({parent:document.body},A,{type:"Dialog",position:"absolute"}));this.options.parent=$(this.options.parent);if(!window.opera&&this.options.modal){this.blanket=new Element("div",{"class":"jxDialogModal",styles:{display:"none",zIndex:-1}});this.options.parent.adopt(this.blanket);(new Jx.Layout(this.blanket)).resize()}this.domObj.setStyle("display","none");this.options.parent.adopt(this.domObj);if(this.options.move){this.title.addClass("jxDialogMoveable");new Drag(this.domObj,{handle:this.title,onStart:(function(){this.contentContainer.setStyle("visibility","hidden")}).bind(this),onComplete:(function(){this.contentContainer.setStyle("visibility","");this.position(this.domObj,this.options.parent,{horizontal:[parseInt(this.domObj.style.left)+" left"],vertical:[parseInt(this.domObj.style.top)+" top"]});this.options.left=parseInt(this.domObj.style.left);this.options.top=parseInt(this.domObj.style.top);if(!this.options.closed){this.domObj.resize(this.options)}}).bind(this)})}if(this.options.resize){this.resizeHandle=new Element("div",{"class":"jxDialogResize",styles:{display:this.options.closed?"none":"block"}});this.domObj.appendChild(this.resizeHandle);this.resizeHandleSize=this.resizeHandle.getSize();this.resizeHandle.setStyles({bottom:this.resizeHandleSize.height,right:this.resizeHandleSize.width});this.domObj.makeResizable({handle:this.resizeHandle,onStart:(function(){this.contentContainer.setStyle("visibility","hidden")}).bind(this),onDrag:this.resizeChrome.bind(this),onComplete:(function(){var B=this.domObj.getMarginBoxSize();this.options.width=B.width;this.options.height=B.height;this.layoutContent();this.domObj.resize(this.options);this.contentContainer.setStyle("visibility","");this.fireEvent("resize")}).bind(this)})}this.domObj.addEvent("mousedown",(function(){Jx.Dialog.Stack.erase(this).push(this);Jx.Dialog.Stack.each(function(C,B){C.domObj.setStyle("zIndex",101+B)})}).bind(this))},sizeChanged:function(){if(!this.options.closed){this.layoutContent();this.resizeChrome()}},toggleCollapse:function(C){if($defined(C)){this.options.closed=C}else{this.options.closed=!this.options.closed}if(this.options.closed){if(!this.domObj.hasClass("jx"+this.options.type+"Min")){this.domObj.addClass("jx"+this.options.type+"Min")}this.contentContainer.setStyle("display","none");if(this.resizeHandle){this.resizeHandle.setStyle("display","none")}}else{if(this.domObj.hasClass("jx"+this.options.type+"Min")){this.domObj.removeClass("jx"+this.options.type+"Min")}this.contentContainer.setStyle("display","block");if(this.resizeHandle){this.resizeHandle.setStyle("display","block")}}if(this.options.closed){var B=this.domObj.getMarginSize();var A=this.title.getMarginBoxSize();this.domObj.resize({height:B.top+A.height+B.bottom});this.fireEvent("collapse")}else{this.domObj.resize(this.options);this.fireEvent("expand")}},setTitle:function(A){this.title.childNodes[0].innerHTML=A},show:function(){Jx.Dialog.Stack.push(this);if(this.options.modal){this.blanket.setStyles({zIndex:Jx.Dialog.ZIndex[0]++,visibility:"visible",display:"block"})}this.domObj.setStyles({zIndex:Jx.Dialog.ZIndex[0]++,display:"block"});if(this.options.closed){var B=this.domObj.getMarginSize();var A=this.title.getMarginBoxSize();this.domObj.resize({height:B.top+A.height+B.bottom})}else{this.domObj.resize(this.options)}this.showChrome(this.domObj);this.position(this.domObj,this.options.parent,{horizontal:[this.options.left+" left"],vertical:[this.options.top+" top"]});this.options.left=parseInt(this.domObj.style.left);this.options.top=parseInt(this.domObj.style.top)},hide:function(){Jx.Dialog.Stack.erase(this);Jx.Dialog.ZIndex[0]--;this.domObj.setStyle("display","none");if(this.options.modal){this.blanket.setStyle("visibility","hidden");Jx.Dialog.ZIndex[0]--}},open:function(){if(!this.isOpening){this.isOpening=true}if(this.contentIsLoaded){this.show();this.fireEvent("open",this);this.isOpening=false}},close:function(){this.isOpening=false;this.hide();this.fireEvent("close")},onContentLoaded:function(){if(this.isOpening){this.open()}}});Jx.PanelSet=new Class({panels:null,height:null,firstLayout:true,initialize:function(C,B){this.domObj=$(C);this.panels=B;var H=new Element("div",{styles:{position:"absolute"}});new Jx.Layout(H,{minHeight:0,maxHeight:0,height:0});var G=[H];B.each(function(I){G.push(I.domObj);I.options.hideTitle=true;I.contentContainer.resize({top:0});I.addEvent("expand",this.maximizePanel.bind(this,I));I.domObj.store("Jx.Panel",I)},this);this.splitter=new Jx.Splitter(this.domObj,{splitInto:B.length+1,layout:"vertical",elements:G});this.splitter.sizeChanged=this.sizeChanged.bind(this);for(var E=0;E<this.panels.length;E++){var A=this.panels[E];var F=this.splitter.bars[E];A.title.setStyle("visibility","hidden");document.body.adopt(A.title);var D=A.title.getBorderBoxSize();F.adopt(A.title);A.title.setStyle("visibility","");F.setStyle("height",D.height);F.removeClass("jxSplitterBar");F.addClass("jxPanelBar");A.manager=this}},sizeChanged:function(){if(this.firstLayout){if(this.panels[0].title.getBorderBoxSize().height!=0){for(var B=0;B<this.splitter.bars.length;B++){var A=this.panels[B];this.splitter.bars[B].style.height=A.title.getBorderBoxSize().height+"px";this.splitter.bars[B].store("size",null)}this.firstLayout=false;Jx.Splitter.prototype.sizeChanged.apply(this.splitter,[])}}else{Jx.Splitter.prototype.sizeChanged.apply(this.splitter,[])}},maximizePanel:function(A){var E=this.domObj.getContentBoxSize().height;var D=0;for(var C=1;C<this.splitter.elements.length;C++){var F=this.splitter.elements[C];D+=F.retrieve("leftBar").getBorderBoxSize().height;if(F!==A.domObj){var B=F.retrieve("Jx.Panel");var G=F.retrieve("jxLayout").options;F.resize({top:D,height:G.minHeight,bottom:null});D+=G.minHeight;F.retrieve("rightBar").style.top=D+"px"}else{break}}b=E;for(var C=this.splitter.elements.length-1;C>0;C--){F=this.splitter.elements[C];if(F!==A.domObj){var G=F.retrieve("jxLayout").options;b-=G.minHeight;F.resize({top:b,height:G.minHeight,bottom:null});b-=F.retrieve("leftBar").getBorderBoxSize().height;F.retrieve("leftBar").style.top=b+"px"}else{break}}A.domObj.resize({top:D,height:b-D,bottom:null})}});Jx.Combo=new Class({Implements:[Options,Events,Jx.AutoPosition],domObj:null,ul:null,currentSelection:null,initialize:function(A){this.setOptions(A);this.domObj=new Element("div",{"class":"jxCombo"});if(this.options.id){this.domObj.id=this.options.id}if(this.options.editable){this.domInput=new Element("input",{"class":"jxComboInput",type:"text",events:{change:this.valueChanged.bindWithEvent(this),keydown:this.onKeyPress.bindWithEvent(this)}})}else{this.domInput=new Element("span",{"class":"jxComboInput"})}this.domObj.appendChild(this.domInput);this.domA=new Element("a",{"class":"jxComboDiscloser",href:"javascript:void(0)",events:{click:this.toggle.bind(this)}});this.domButton=new Element("img",{"class":"png24",src:Jx.baseURL+"images/disclose2.png"});this.domA.appendChild(this.domButton);this.domObj.appendChild(this.domA);if(!window.opera){this.domObj.appendChild(Jx.createIframeShim())}this.domListDiv=new Element("div",{"class":"jxComboOptions"});this.domList=new Element("ul");this.domListDiv.appendChild(this.domList);this.keypressHandler=this.keypress.bindWithEvent(this);this.clickHandler=this.click.bindWithEvent(this)},onKeyPress:function(A){if(A.key=="enter"){this.valueChanged()}},valueChanged:function(){this.fireEvent("changed",this)},add:function(D,B){var A=new Element("li");var C=new Element("a",{href:"javascript:void(0)",events:{click:this.pick.bindWithEvent(this)}});if($type(D)=="string"){C.innerHTML=D}else{C.appendChild(D)}A.appendChild(C);if(arguments.length>1&&this.domList.childNodes.length>B){this.domList.insertBefore(A,this.domList.childNodes[B])}else{this.domList.appendChild(A)}if(this.getValue()==""){this.setValue(C.childNodes[0])}},remove:function(A){if(A>0&&A<this.domList.childNodes.length){this.domList.removeChild(this.domList.childNodes[A])}},pick:function(B){var A=B.target;if(A.tagName=="A"){this.currentSelection=A;this.setValue(this.currentSelection.childNodes[0]);this.valueChanged()}this.close()},setValue:function(A){if(this.options.editable){if(typeof (A)=="string"){this.domInput.value=A}else{if(A.nodeType&&A.nodeType==3){this.domInput.value=A.nodeValue}else{this.domInput.value=A.innerHTML}}}else{if(typeof (A)=="string"){this.domInput.innerHTML=A}else{if(A.nodeType&&A.nodeType==3){this.domInput.innerHTML=A.nodeValue}else{this.domInput.appendChild(A)}}}},getValue:function(){value="";if(this.options.editable){value=this.domInput.value}else{if(this.domInput.childNodes.length>0){if(this.domInput.childNodes[0].nodeType==3){value=this.domInput.innerHTML}else{value=this.domInput.childNodes[0]}}}return value},toggle:function(){if(this.domListDiv.style.display=="block"){this.close()}else{this.open()}},open:function(){this.position(this.domListDiv,this.domObj,{horizontal:["left left","right right"],vertical:["bottom top","top bottom"]});this.domListDiv.width="";this.domListDiv.setStyle("visibility","hidden");document.body.adopt(this.domListDiv);this.domListDiv.setBorderBoxSize({width:Math.max(this.domListDiv.getSize().x,this.domObj.getSize().x)});this.domListDiv.setStyle("visibility","");document.addEvents({keydown:this.keypressHandler,click:this.clickHandler})},keypress:function(A){if(A.key=="esc"){this.close()}},click:function(A){if(!A.target.descendantOf(this.domListDiv)&&!A.target.descendantOf(this.domObj)){this.close()}},close:function(){this.domListDiv.dispose();document.removeEvents({keydown:this.keypressHandler,click:this.clickHandler})},getSelection:function(){return this.currentSelection?this.currentSelection.name:""}});Jx.Splitter=new Class({Implements:[Options],domObj:null,elements:null,bars:null,firstUpdate:true,options:{useChildren:false,splitInto:2,elements:null,containerOptions:[],barOptions:[],layout:"horizontal",snaps:[]},initialize:function(A,I){this.setOptions(I);this.domObj=$(A);this.domObj.addClass("jxSplitContainer");this.domObj.setStyle("overflow","hidden");var H=this.domObj.retrieve("jxLayout");if(H){H.addEvent("sizeChange",this.sizeChanged.bind(this))}this.elements=[];this.bars=[];var G=2;if(this.options.useChildren){this.elements=this.domObj.getChildren();G=this.elements.length}else{G=this.options.elements?this.options.elements.length:this.options.splitInto;for(var E=0;E<G;E++){var C;if(this.options.elements&&this.options.elements[E]){C=$(this.options.elements[E]);if(!C){C=this.prepareElement();C.id=this.options.elements[E]}}else{C=this.prepareElement()}this.elements[E]=C;this.domObj.adopt(this.elements[E])}}this.elements.each(function(J){J.addClass("jxSplitArea")});for(var E=0;E<G;E++){if(!this.elements[E].retrieve("jxLayout")){new Jx.Layout(this.elements[E],this.options.containerOptions[E])}}for(var E=1;E<G;E++){this.bars[E-1]=this.prepareBar();this.bars[E-1].store("leftSide",this.elements[E-1]);this.bars[E-1].store("rightSide",this.elements[E]);this.elements[E-1].store("rightBar",this.bars[E-1]);this.elements[E].store("leftBar",this.bars[E-1]);this.domObj.adopt(this.bars[E-1])}this.establishConstraints();for(var E=0;E<this.options.barOptions.length;E++){if(!this.bars[E]){continue}var B=this.options.barOptions[E];if(B&&B.snap&&(B.snap=="before"||B.snap=="after")){var F;if(B.snap=="before"){F=this.bars[E].retrieve("leftSide")}else{if(B.snap=="after"){F=this.bars[E].retrieve("rightSide")}}var D=new Element("a",{"class":"jxSnap"+this.options.layout.capitalize()+B.snap.capitalize(),href:"javascript:void(0)"});this.bars[E].adopt(D);new Jx.Splitter.Snap(D,F,this)}}for(var E=0;E<this.options.snaps.length;E++){if(this.options.snaps[E]){new Jx.Splitter.Snap(this.options.snaps[E],this.elements[E],this)}}},prepareElement:function(){var A=new Element("div",{styles:{position:"absolute"}});return A},prepareBar:function(){var A=new Element("div",{"class":"jxSplitBar"+this.options.layout.capitalize(),title:"drag this bar to resize"});A.store("splitterObj",this);return A},establishConstraints:function(){var A={};var B;if(this.options.layout=="horizontal"){A.y=[0,0];B=this.dragHorizontal}else{A.x=[0,0];B=this.dragVertical}this.bars.each(function(C){new Drag(C,{limit:A,onSnap:function(D){D.addClass("jxSplitBarDrag")},onComplete:(function(D){D.removeClass("jxSplitBarDrag");if(D.retrieve("splitterObj")!=this){return }B.apply(this,[D])}).bind(this)})},this)},dragHorizontal:function(F){var A=parseInt(F.style.left);var H=F.retrieve("leftSide");var C=F.retrieve("rightSide");var D=H.retrieve("jxLayout");var G=C.retrieve("jxLayout");var E=this.domObj.getPaddingSize().left;var I,O,K;var N=F.retrieve("size");if(!N){N=F.getBorderBoxSize();F.store("size",N)}I=A+N.width-E;var B=this.domObj.getContentBoxSize();if(G.options.width!=null){O=G.options.width+G.options.left-I;K=B.width-I-O}else{O=B.width-G.options.right-I;K=G.options.right}if(O<0){O=0}if(O<G.options.minWidth){O=G.options.minWidth}if(G.options.maxWidth>=0&&O>G.options.maxWidth){O=G.options.maxWidth}I=B.width-K-O;A=I-N.width;var J,M;J=D.options.left;M=A-J;if(M<0){M=0}if(M<D.options.minWidth){M=D.options.minWidth}if(D.options.maxWidth>=0&&M>D.options.maxWidth){M=D.options.maxWidth}if(J+M!=A){A=J+M;var L=A+N.width-I;I+=L;O-=L}F.style.left=E+A+"px";if(D.options.width==null){var B=this.domObj.getContentBoxSize();H.resize({right:B.width-J-M})}else{H.resize({width:M})}if(G.options.width==null){C.resize({left:I})}else{C.resize({left:I,width:O})}},dragVertical:function(F){var J=parseInt(F.style.top);var D=F.retrieve("leftSide");var A=F.retrieve("rightSide");var E=D.retrieve("jxLayout");var H=A.retrieve("jxLayout");var N=this.domObj.getPaddingSize().top;var O=F.retrieve("size");if(!O){O=F.getBorderBoxSize();F.store("size",O)}var B=this.domObj.getContentBoxSize();var C,M,K;C=J+O.height-N;if(H.options.height!=null){M=H.options.height+H.options.top-C;K=B.height-C-M}else{M=B.height-H.options.bottom-C;K=H.options.bottom}if(M<0){M=0}if(M<H.options.minHeight){M=H.options.minHeight}if(H.options.maxHeight>=0&&M>H.options.maxHeight){M=H.options.maxHeight}C=B.height-K-M;J=C-O.height;var I,G;I=E.options.top;G=J-I;if(G<0){G=0}if(G<E.options.minHeight){G=E.options.minHeight}if(E.options.maxHeight>=0&&G>E.options.maxHeight){G=E.options.maxHeight}if(I+G!=J){J=I+G;var L=J+O.height-C;C+=L;M-=L}F.style.top=N+J+"px";if(E.options.height==null){D.resize({bottom:B.height-I-G})}else{D.resize({height:G})}if(H.options.height==null){A.resize({top:C})}else{A.resize({top:C,height:M})}},sizeChanged:function(){if(this.options.layout=="horizontal"){this.horizontalResize()}else{this.verticalResize()}},horizontalResize:function(){var O=this.domObj.getContentBoxSize().width;var D=O;for(var E=0;E<this.bars.length;E++){var L=this.bars[E];var Q=L.retrieve("size");if(!Q||Q.width==0){Q=L.getBorderBoxSize();L.store("size",Q)}O-=Q.width}var I=0;var H;for(var E=0;E<this.elements.length;E++){var K=this.elements[E];H=K.retrieve("jxLayout").options;if(H.width!=null){O-=parseInt(H.width)}else{var N=0;if(H.right!=0||H.left!=0){N=K.getBorderBoxSize().width}O-=N;I++}}if(I==0){O+=H.width;H.width=null;I=1}var G=parseInt(O/I);var P=O%I;var B=this.domObj.getPaddingSize().left;var C=0;for(var E=0;E<this.elements.length;E++){var K=this.elements[E];var J=K.retrieve("jxLayout");var H=J.options;if(H.width!=null){J.resize({left:C});C+=H.width}else{var M=G;if(I==1){M+=P}I--;var N=0;if(H.right!=0||H.left!=0){N=K.getBorderBoxSize().width+M}else{N=M}if(N<0){if(I>0){G=G+N/I}N=0}if(N<H.minWidth){if(I>0){G=G+(N-H.minWidth)/I}N=H.minWidth}if(H.maxWidth>=0&&N>H.maxWidth){if(I>0){G=G+(N-H.maxWidth)/I}N=K.options.maxWidth}var A=D-C-N;J.resize({left:C,right:A});C+=N}var F=K.retrieve("rightBar");if(F){F.setStyle("left",B+C);C+=F.retrieve("size").width}}},verticalResize:function(){var N=this.domObj.getContentBoxSize().height;var B=N;for(var D=0;D<this.bars.length;D++){var L=this.bars[D];var Q=L.retrieve("size");if(!Q||Q.height==0){Q=L.getBorderBoxSize();L.store("size",Q)}N-=Q.height}var I=0;var H;for(var D=0;D<this.elements.length;D++){var K=this.elements[D];H=K.retrieve("jxLayout").options;if(H.height!=null){N-=parseInt(H.height)}else{var G=0;if(H.bottom!=0||H.top!=0){G=K.getBorderBoxSize().height}N-=G;I++}}if(I==0){N+=H.height;H.height=null;I=1}var F=parseInt(N/I);var O=N%I;var P=this.domObj.getPaddingSize().top;var C=0;for(var D=0;D<this.elements.length;D++){var K=this.elements[D];var J=K.retrieve("jxLayout");var H=J.options;if(H.height!=null){J.resize({top:C});C+=H.height}else{var M=F;if(I==1){M+=O}I--;var G=0;if(H.bottom!=0||H.top!=0){G=K.getBorderBoxSize().height+M}else{G=M}if(G<0){if(I>0){F=F+G/I}G=0}if(G<H.minHeight){if(I>0){F=F+(G-H.minHeight)/I}G=H.minHeight}if(H.maxHeight>=0&&G>H.maxHeight){if(I>0){F=F+(G-H.maxHeight)/I}G=H.maxHeight}var A=B-C-G;J.resize({top:C,bottom:A});C+=G}var E=K.retrieve("rightBar");if(E){E.style.top=P+C+"px";C+=E.retrieve("size").height}}}});Jx.Splitter.Snap=new Class({snap:null,element:null,splitter:null,layout:"vertical",initialize:function(A,E,F){this.snap=A;this.element=E;var D=E.retrieve("jxLayout");D.addEvent("sizeChange",this.sizeChange.bind(this));this.splitter=F;this.layout=F.options.layout;var B=D.options;var C=this.element.getContentBoxSize();if(this.layout=="vertical"){this.originalSize=C.height;this.minimumSize=B.minHeight?B.minHeight:0}else{this.originalSize=C.width;this.minimumSize=B.minWidth?B.minWidth:0}A.addEvent("click",this.toggleElement.bind(this))},toggleElement:function(){var B=this.element.getContentBoxSize();var A={};if(this.layout=="vertical"){if(B.height==this.minimumSize){A.height=this.originalSize}else{this.originalSize=B.height;A.height=this.minimumSize}}else{if(B.width==this.minimumSize){A.width=this.originalSize}else{this.originalSize=B.width;A.width=this.minimumSize}}this.element.resize(A);this.splitter.sizeChanged()},sizeChange:function(){var A=this.element.getBorderBoxSize();if(this.layout=="vertical"){if(A.height==this.minimumSize){this.snap.addClass("jxSnapClosed");this.snap.removeClass("jxSnapOpened")}else{this.snap.addClass("jxSnapOpened");this.snap.removeClass("jxSnapClosed")}}else{if(A.width==this.minimumSize){this.snap.addClass("jxSnapClosed");this.snap.removeClass("jxSnapOpened")}else{this.snap.addClass("jxSnapOpened");this.snap.removeClass("jxSnapClosed")}}}});Jx.TabSet=new Class({Implements:[Options,Events],tabs:null,domObj:null,initialize:function(B,A){this.setOptions(A);this.tabs=[];this.domObj=$(B);if(!this.domObj.hasClass("jxTabSetContainer")){this.domObj.addClass("jxTabSetContainer")}this.selectionChangedFn=this.selectionChanged.bind(this)},resizeTabBox:function(){var B=Element.getContentBoxSize(this.domObj.parentNode);Element.setBorderBoxSize(this.domObj,{width:B.width,height:B.height});for(var A=0;A<this.domObj.childNodes.length;A++){if(this.domObj.childNodes[A].nodeType==3){continue}Element.setBorderBoxSize(this.domObj.childNodes[A],{height:B.height});if(this.domObj.childNodes[A].resize){this.domObj.childNodes[A].resize()}}},add:function(){$A(arguments).each(function(A){if(A instanceof Jx.Button.Tab){A.addEvent("down",this.selectionChangedFn);this.domObj.appendChild(A.content);if(!this.activeTab){A.setActive(true)}this.tabs.push(A)}},this)},remove:function(A){if(A instanceof Jx.Button.Tab&&this.tabs.indexOf(A)!=-1){this.tabs.erase(A);if(this.activeTab==A){if(this.tabs.length){this.tabs[0].setActive(true)}}A.removeEvent("down",this.selectionChangedFn);A.content.dispose()}},setActiveTab:function(A){if(this.activeTab&&this.activeTab!=A){this.activeTab.setActive(false)}this.activeTab=A;if(this.activeTab.content.resize){this.activeTab.content.resize()}},selectionChanged:function(A){this.setActiveTab(A);this.fireEvent("tabChange",this,A)}});Jx.TabSet=new Class({Implements:[Options,Events],tabs:null,domObj:null,initialize:function(B,A){this.setOptions(A);this.tabs=[];this.domObj=$(B);if(!this.domObj.hasClass("jxTabSetContainer")){this.domObj.addClass("jxTabSetContainer")}this.selectionChangedFn=this.selectionChanged.bind(this)},resizeTabBox:function(){var B=Element.getContentBoxSize(this.domObj.parentNode);Element.setBorderBoxSize(this.domObj,{width:B.width,height:B.height});for(var A=0;A<this.domObj.childNodes.length;A++){if(this.domObj.childNodes[A].nodeType==3){continue}Element.setBorderBoxSize(this.domObj.childNodes[A],{height:B.height});if(this.domObj.childNodes[A].resize){this.domObj.childNodes[A].resize()}}},add:function(){$A(arguments).each(function(A){if(A instanceof Jx.Button.Tab){A.addEvent("down",this.selectionChangedFn);this.domObj.appendChild(A.content);if(!this.activeTab){A.setActive(true)}this.tabs.push(A)}},this)},remove:function(A){if(A instanceof Jx.Button.Tab&&this.tabs.indexOf(A)!=-1){this.tabs.erase(A);if(this.activeTab==A){if(this.tabs.length){this.tabs[0].setActive(true)}}A.removeEvent("down",this.selectionChangedFn);A.content.dispose()}},setActiveTab:function(A){if(this.activeTab&&this.activeTab!=A){this.activeTab.setActive(false)}this.activeTab=A;if(this.activeTab.content.resize){this.activeTab.content.resize()}},selectionChanged:function(A){this.setActiveTab(A);this.fireEvent("tabChange",this,A)}});Jx.Button.Tab=new Class({Extends:Jx.Button,Implements:[Options,Events,Jx.ContentLoader],content:null,initialize:function(A){A=$merge(A,{type:"Tab",toggle:true});this.parent(A);this.content=new Element("div",{"class":"tabContent"});this.loadContent(this.content);new Jx.Layout(this.content,A);var B=this;this.addEvent("down",function(){B.content.addClass("tabContentActive")});this.addEvent("up",function(){B.content.removeClass("tabContentActive")})},clicked:function(A){this.setActive(true)}});Jx.Toolbar=new Class({Implements:[Options,Events],items:null,domObj:null,isActive:false,options:{position:"top",parent:null},initialize:function(B){this.setOptions(B);this.domObj=new Element("ul",{id:this.options.id,"class":"jxToolbar"});if(this.options.parent){var A=$(this.options.parent);if(!A.hasClass("jxToolbarContainer")){A.addClass("jxToolbarContainer");A.appendChild(this.domObj);var C=new Element("div",{"class":"jxClearer"});A.appendChild(C)}else{A.insertBefore(this.domObj,A.lastChild)}if(["top","right","bottom","left"].contains(this.options.position)){A.addClass("jxToolbar"+this.options.position.capitalize())}else{A.addClass("jxToolbarTop")}}this.deactivateWatcher=this.deactivate.bindWithEvent(this)},add:function(){for(var B=0;B<arguments.length;B++){var A=arguments[B];A.toolbar=this;if(A.domObj){A=A.domObj}if(A.tagName=="LI"){if(!A.hasClass("jxToolItem")){A.addClass("jxToolItem")}this.domObj.appendChild(A)}else{var C=new Jx.Toolbar.Item(A);this.domObj.appendChild(C.domObj)}}if(arguments.length>0){this.fireEvent("add",this)}},remove:function(B){if(B.domObj){B=B.domObj}var A=B.findElement("LI");if(A&&A.parentNode==this.domObj){B.dispose();this.fireEvent("remove",this)}else{return null}},deactivate:function(){this.items.each(function(A){A.hide()});this.setActive(false)},isActive:function(){return this.isActive},setActive:function(A){this.isActive=A;if(this.isActive){document.addEvent("click",this.deactivateWatcher)}else{document.removeEvent("click",this.deactivateWatcher)}},setVisibleItem:function(A){if(this.visibleItem&&this.visibleItem.hide&&this.visibleItem!=A){this.visibleItem.hide()}this.visibleItem=A;if(this.isActive()){this.visibleItem.show()}}});Jx.Toolbar.Item=new Class({domObj:null,initialize:function(A){this.al=[];this.domObj=new Element("li",{"class":"jxToolItem"});if(A){if(A.domObj){this.domObj.appendChild(A.domObj);if(A instanceof Jx.Tab){this.domObj.addClass("jxTabItem")}}else{this.domObj.appendChild(A);if(A.hasClass("jxTab")){this.domObj.addClass("jxTabItem")}}}}});Jx.Toolbar.Separator=new Class({domObj:null,initialize:function(){this.domObj=new Element("li",{"class":"jxToolItem"});this.domSpan=new Element("span",{"class":"separator"});this.domObj.appendChild(this.domSpan)}});Jx.TreeItem=new Class({Implements:[Options,Events],domObj:null,owner:null,options:{label:"",data:null,contextMenu:null,image:null,enabled:true,type:"Item",imageClass:""},initialize:function(A){this.setOptions(A);this.domObj=new Element("li",{"class":"jxTree"+this.options.type});if(this.options.id){this.domObj.id=this.options.id}this.domNode=new Element("img",{"class":"jxTreeImage",src:Jx.aPixel.src});this.domObj.appendChild(this.domNode);this.domLabel=(this.options.draw)?this.options.draw.apply(this):this.draw();this.domObj.appendChild(this.domLabel);this.domObj.store("jxTreeItem",this);if(!this.options.enabled){this.domObj.addClass("jxDisabled")}},draw:function(){var B=new Element("img",{"class":"jxTreeIcon",src:Jx.aPixel.src});if(this.options.image){B.setStyle("backgroundImage","url("+this.options.image+")")}if(this.options.imageClass){B.addClass(this.options.imageClass)}var A=new Element("a",{href:"javascript:void(0)",html:this.options.label,events:{click:this.selected.bindWithEvent(this),dblclick:this.selected.bindWithEvent(this),contextmenu:this.showMenu.bindWithEvent(this)}});A.appendChild(B);return A},finalize:function(){this.finalizeItem()},finalizeItem:function(){if(!this.domObj){return }this.options=null;this.domObj=null;this.owner=null},clone:function(){return new Jx.TreeItem(this.options)},update:function(B){var A=(arguments.length>1)?arguments[1]:(this.owner&&this.owner.isLastNode(this));if(A){this.domObj.removeClass("jxTree"+this.options.type);this.domObj.addClass("jxTree"+this.options.type+"Last")}else{this.domObj.removeClass("jxTree"+this.options.type+"Last");this.domObj.addClass("jxTree"+this.options.type)}},selected:function(A){this.lastEvent=A;this.fireEvent("click",this)},showMenu:function(A){this.lastEvent=A;this.fireEvent("click",this);if(this.contextMenu){this.contextMenu.show(this.lastEvent)}A.stop()},getName:function(){return this.options.label},propertyChanged:function(A){this.options.enabled=A.isEnabled();if(this.options.enabled){this.domObj.removeClass("jxDisabled")}else{this.domObj.addClass("jxDisabled")}}});Jx.TreeFolder=new Class({Extends:Jx.TreeItem,subDomObj:null,nodes:null,isOpen:false,options:{folderCloseImage:Jx.baseURL+"images/tree_folder.png",folderOpenImage:Jx.baseURL+"images/tree_folder_open.png"},initialize:function(A){this.parent($merge(A,{type:"Branch"}));this.domObj.childNodes[0].addEvent("click",this.clicked.bindWithEvent(this));this.nodes=[];this.subDomObj=new Element("ul",{"class":"jxTree"});this.domObj.appendChild(this.subDomObj);this.subDomObj.className="jxTree";if(this.options.isOpen){this.expand()}else{this.collapse()}},finalize:function(){this.finalizeFolder();this.finalizeItem();this.subDomObj=null},finalizeFolder:function(){this.domObj.childNodes[0].removeEvents();for(var A=this.nodes.length-1;A>=0;A--){this.nodes[A].finalize();if(this.nodes[A].domObj){this.subDomObj.removeChild(this.nodes[A].domObj)}this.nodes.pop()}},clone:function(){var A=new Jx.TreeFolder(this.options);this.nodes.each(function(B){A.append(B.clone())});return A},isLastNode:function(A){if(this.nodes.length==0){return false}else{return this.nodes[this.nodes.length-1]==A}},update:function(C){if(!this.parent){return }var B=false;if(arguments.length>1){B=arguments[1]}else{B=(this.owner&&this.owner.isLastNode(this))}var D="jxTree"+this.options.type;D+=B?"Last":"";D+=this.options.isOpen?"Open":"Closed";this.domObj.className=D;if(B){this.subDomObj.className="jxTree"}else{this.subDomObj.className="jxTree jxTreeNest"}if(this.nodes&&C){var A=this;this.nodes.each(function(F,E){F.update(false,E==A.nodes.length-1)})}},append:function(A){A.owner=this;this.nodes.push(A);this.subDomObj.appendChild(A.domObj);this.update(true)},insert:function(D,B){D.owner=this;if(!B){this.nodes.unshift(D);if(this.subDomObj.childNodes.length==0){this.subDomObj.appendChild(D.domObj)}else{this.subDomObj.insertBefore(D.domObj,this.subDomObj.childNodes[0])}}else{var A=false;for(var C=0;C<this.nodes.length;C++){if(this.nodes[C]==B){C=C+1;if(C<this.nodes.length){this.nodes.splice(C,0,D);this.subDomObj.insertBefore(D.domObj,this.subDomObj.childNodes[C]);A=true;break}}}if(!A){this.nodes.push(D);this.subDomObj.appendChild(D.domObj)}}this.update(true)},remove:function(B){B.owner=null;for(var A=0;A<this.nodes.length;A++){if(this.nodes[A]==B){this.nodes.splice(A,1);this.subDomObj.removeChild(this.subDomObj.childNodes[A]);break}}this.update(true)},replace:function(D,B){var A=false;for(var C=0;C<this.nodes.length;C++){if(this.nodes[C]==B){if(C<this.nodes.length){D.owner=this;this.nodes.splice(C,1,D);this.subDomObj.replaceChild(D.domObj,B.domObj);return true}}}return false},clicked:function(A){if(this.options.isOpen){this.collapse()}else{this.expand()}},expand:function(){this.options.isOpen=true;this.subDomObj.setStyle("display","block");this.update(true);this.fireEvent("disclosed",this)},collapse:function(){this.options.isOpen=false;this.subDomObj.setStyle("display","none");this.update(true);this.fireEvent("disclosed",this)},findChild:function(C){if(C.length==0){return this}if(C.length==1){for(var B=0;B<this.nodes.length;B++){if(this.nodes[B].getName()==C[0]){return this.nodes[B]}}return null}var A=C.shift();for(var B=0;B<this.nodes.length;B++){if(this.nodes[B].getName()==A&&this.nodes[B].findChild){return this.nodes[B].findChild(C)}}return null}});Jx.Tree=new Class({Extends:Jx.TreeFolder,initialize:function(B,A){this.parent(A);this.subDomObj=new Element("ul",{"class":"jxTreeRoot"});$(B).appendChild(this.subDomObj);this.nodes=[];this.isOpen=true},finalize:function(){this.clear();this.subDomObj.parentNode.removeChild(this.subDomObj)},clear:function(){for(var A=this.nodes.length-1;A>=0;A--){this.subDomObj.removeChild(this.nodes[A].domObj);this.nodes[A].finalize();this.nodes.pop()}},update:function(A){var B=true;if(this.subDomObj){if(B){this.subDomObj.removeClass("jxTreeNest")}else{this.subDomObj.addClass("jxTreeNest")}}if(this.nodes&&A){this.nodes.each(function(C){C.update(false)})}},append:function(A){A.owner=this;this.nodes.push(A);this.subDomObj.appendChild(A.domObj);this.update(true)}});
\ No newline at end of file
+var MooTools={version:"1.2dev",build:""};var Native=function(J){J=J||{};var F=J.afterImplement||function(){};var G=J.generics;G=(G!==false);var H=J.legacy;var E=J.initialize;var B=J.protect;var A=J.name;var C=E||H;C.constructor=Native;C.$family={name:"native"};if(H&&E){C.prototype=H.prototype}C.prototype.constructor=C;if(A){var D=A.toLowerCase();C.prototype.$family={name:D};Native.typize(C,D)}var I=function(M,K,N,L){if(!B||L||!M.prototype[K]){M.prototype[K]=N}if(G){Native.genericize(M,K,B)}F.call(M,K,N);return M};C.implement=function(L,K,N){if(typeof L=="string"){return I(this,L,K,N)}for(var M in L){I(this,M,L[M],K)}return this};C.alias=function(M,K,N){if(typeof M=="string"){M=this.prototype[M];if(M){I(this,K,M,N)}}else{for(var L in M){this.alias(L,M[L],K)}}return this};return C};Native.implement=function(D,C){for(var B=0,A=D.length;B<A;B++){D[B].implement(C)}};Native.genericize=function(B,C,A){if((!A||!B[C])&&typeof B.prototype[C]=="function"){B[C]=function(){var D=Array.prototype.slice.call(arguments);return B.prototype[C].apply(D.shift(),D)}}};Native.typize=function(A,B){if(!A.type){A.type=function(C){return($type(C)===B)}}};Native.alias=function(E,B,A,F){for(var D=0,C=E.length;D<C;D++){E[D].alias(B,A,F)}};(function(B){for(var A in B){Native.typize(B[A],A)}})({"boolean":Boolean,"native":Native,object:Object});(function(B){for(var A in B){new Native({name:A,initialize:B[A],protect:true})}})({String:String,Function:Function,Number:Number,Array:Array,RegExp:RegExp,Date:Date});(function(B,A){for(var C=A.length;C--;C){Native.genericize(B,A[C],true)}return arguments.callee})(Array,["pop","push","reverse","shift","sort","splice","unshift","concat","join","slice","toString","valueOf","indexOf","lastIndexOf"])(String,["charAt","charCodeAt","concat","indexOf","lastIndexOf","match","replace","search","slice","split","substr","substring","toLowerCase","toUpperCase","valueOf"]);function $chk(A){return !!(A||A===0)}function $clear(A){clearTimeout(A);clearInterval(A);return null}function $defined(A){return(A!=undefined)}function $empty(){}function $arguments(A){return function(){return arguments[A]}}function $lambda(A){return(typeof A=="function")?A:function(){return A}}function $extend(C,A){for(var B in (A||{})){C[B]=A[B]}return C}function $unlink(C){var B;switch($type(C)){case"object":B={};for(var E in C){B[E]=$unlink(C[E])}break;case"hash":B=$unlink(C.getClean());break;case"array":B=[];for(var D=0,A=C.length;D<A;D++){B[D]=$unlink(C[D])}break;default:return C}return B}function $merge(){var E={};for(var D=0,A=arguments.length;D<A;D++){var B=arguments[D];if($type(B)!="object"){continue}for(var C in B){var G=B[C],F=E[C];E[C]=(F&&$type(G)=="object"&&$type(F)=="object")?$merge(F,G):$unlink(G)}}return E}function $pick(){for(var B=0,A=arguments.length;B<A;B++){if(arguments[B]!=undefined){return arguments[B]}}return null}function $random(B,A){return Math.floor(Math.random()*(A-B+1)+B)}function $splat(B){var A=$type(B);return(A)?((A!="array"&&A!="arguments")?[B]:B):[]}var $time=Date.now||function(){return new Date().getTime()};function $try(){for(var B=0,A=arguments.length;B<A;B++){try{return arguments[B]()}catch(C){}}return null}function $type(A){if(A==undefined){return false}if(A.$family){return(A.$family.name=="number"&&!isFinite(A))?false:A.$family.name}if(A.nodeName){switch(A.nodeType){case 1:return"element";case 3:return(/\S/).test(A.nodeValue)?"textnode":"whitespace"}}else{if(typeof A.length=="number"){if(A.callee){return"arguments"}else{if(A.item){return"collection"}}}}return typeof A}var Hash=new Native({name:"Hash",initialize:function(A){if($type(A)=="hash"){A=$unlink(A.getClean())}for(var B in A){this[B]=A[B]}return this}});Hash.implement({getLength:function(){var B=0;for(var A in this){if(this.hasOwnProperty(A)){B++}}return B},forEach:function(B,C){for(var A in this){if(this.hasOwnProperty(A)){B.call(C,this[A],A,this)}}},getClean:function(){var B={};for(var A in this){if(this.hasOwnProperty(A)){B[A]=this[A]}}return B}});Hash.alias("forEach","each");function $H(A){return new Hash(A)}Array.implement({forEach:function(C,D){for(var B=0,A=this.length;B<A;B++){C.call(D,this[B],B,this)}}});Array.alias("forEach","each");function $A(C){if(C.item){var D=[];for(var B=0,A=C.length;B<A;B++){D[B]=C[B]}return D}return Array.prototype.slice.call(C)}function $each(C,B,D){var A=$type(C);((A=="arguments"||A=="collection"||A=="array")?Array:Hash).each(C,B,D)}var Browser=new Hash({Engine:{name:"unknown",version:""},Platform:{name:(navigator.platform.match(/mac|win|linux/i)||["other"])[0].toLowerCase()},Features:{xpath:!!(document.evaluate),air:!!(window.runtime)},Plugins:{}});if(window.opera){Browser.Engine={name:"presto",version:(document.getElementsByClassName)?950:925}}else{if(window.ActiveXObject){Browser.Engine={name:"trident",version:(window.XMLHttpRequest)?5:4}}else{if(!navigator.taintEnabled){Browser.Engine={name:"webkit",version:(Browser.Features.xpath)?420:419}}else{if(document.getBoxObjectFor!=null){Browser.Engine={name:"gecko",version:(document.getElementsByClassName)?19:18}}}}}Browser.Engine[Browser.Engine.name]=Browser.Engine[Browser.Engine.name+Browser.Engine.version]=true;if(window.orientation!=undefined){Browser.Platform.name="ipod"}Browser.Platform[Browser.Platform.name]=true;Browser.Request=function(){return $try(function(){return new XMLHttpRequest()},function(){return new ActiveXObject("MSXML2.XMLHTTP")})};Browser.Features.xhr=!!(Browser.Request());Browser.Plugins.Flash=(function(){var A=($try(function(){return navigator.plugins["Shockwave Flash"].description},function(){return new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")})||"0 r0").match(/\d+/g);return{version:parseInt(A[0]||0+"."+A[1]||0),build:parseInt(A[2]||0)}})();function $exec(B){if(!B){return B}if(window.execScript){window.execScript(B)}else{var A=document.createElement("script");A.setAttribute("type","text/javascript");A.text=B;document.head.appendChild(A);document.head.removeChild(A)}return B}Native.UID=1;var $uid=(Browser.Engine.trident)?function(A){return(A.uid||(A.uid=[Native.UID++]))[0]}:function(A){return A.uid||(A.uid=Native.UID++)};var Window=new Native({name:"Window",legacy:(Browser.Engine.trident)?null:window.Window,initialize:function(A){$uid(A);if(!A.Element){A.Element=$empty;if(Browser.Engine.webkit){A.document.createElement("iframe")}A.Element.prototype=(Browser.Engine.webkit)?window["[[DOMElement.prototype]]"]:{}}return $extend(A,Window.Prototype)},afterImplement:function(B,A){window[B]=Window.Prototype[B]=A}});Window.Prototype={$family:{name:"window"}};new Window(window);var Document=new Native({name:"Document",legacy:(Browser.Engine.trident)?null:window.Document,initialize:function(A){$uid(A);A.head=A.getElementsByTagName("head")[0];A.html=A.getElementsByTagName("html")[0];A.window=A.defaultView||A.parentWindow;if(Browser.Engine.trident4){$try(function(){A.execCommand("BackgroundImageCache",false,true)})}return $extend(A,Document.Prototype)},afterImplement:function(B,A){document[B]=Document.Prototype[B]=A}});Document.Prototype={$family:{name:"document"}};new Document(document);Array.implement({every:function(C,D){for(var B=0,A=this.length;B<A;B++){if(!C.call(D,this[B],B,this)){return false}}return true},filter:function(D,E){var C=[];for(var B=0,A=this.length;B<A;B++){if(D.call(E,this[B],B,this)){C.push(this[B])}}return C},clean:function(){return this.filter($defined)},indexOf:function(C,D){var A=this.length;for(var B=(D<0)?Math.max(0,A+D):D||0;B<A;B++){if(this[B]===C){return B}}return -1},map:function(D,E){var C=[];for(var B=0,A=this.length;B<A;B++){C[B]=D.call(E,this[B],B,this)}return C},some:function(C,D){for(var B=0,A=this.length;B<A;B++){if(C.call(D,this[B],B,this)){return true}}return false},associate:function(C){var D={},B=Math.min(this.length,C.length);for(var A=0;A<B;A++){D[C[A]]=this[A]}return D},link:function(C){var A={};for(var E=0,B=this.length;E<B;E++){for(var D in C){if(C[D](this[E])){A[D]=this[E];delete C[D];break}}}return A},contains:function(A,B){return this.indexOf(A,B)!=-1},extend:function(C){for(var B=0,A=C.length;B<A;B++){this.push(C[B])}return this},getLast:function(){return(this.length)?this[this.length-1]:null},getRandom:function(){return(this.length)?this[$random(0,this.length-1)]:null},include:function(A){if(!this.contains(A)){this.push(A)}return this},combine:function(C){for(var B=0,A=C.length;B<A;B++){this.include(C[B])}return this},erase:function(B){for(var A=this.length;A--;A){if(this[A]===B){this.splice(A,1)}}return this},empty:function(){this.length=0;return this},flatten:function(){var D=[];for(var B=0,A=this.length;B<A;B++){var C=$type(this[B]);if(!C){continue}D=D.concat((C=="array"||C=="collection"||C=="arguments")?Array.flatten(this[B]):this[B])}return D},hexToRgb:function(B){if(this.length!=3){return null}var A=this.map(function(C){if(C.length==1){C+=C}return C.toInt(16)});return(B)?A:"rgb("+A+")"},rgbToHex:function(D){if(this.length<3){return null}if(this.length==4&&this[3]==0&&!D){return"transparent"}var B=[];for(var A=0;A<3;A++){var C=(this[A]-0).toString(16);B.push((C.length==1)?"0"+C:C)}return(D)?B:"#"+B.join("")}});Function.implement({extend:function(A){for(var B in A){this[B]=A[B]}return this},create:function(B){var A=this;B=B||{};return function(D){var C=B.arguments;C=(C!=undefined)?$splat(C):Array.slice(arguments,(B.event)?1:0);if(B.event){C=[D||window.event].extend(C)}var E=function(){return A.apply(B.bind||null,C)};if(B.delay){return setTimeout(E,B.delay)}if(B.periodical){return setInterval(E,B.periodical)}if(B.attempt){return $try(E)}return E()}},pass:function(A,B){return this.create({arguments:A,bind:B})},attempt:function(A,B){return this.create({arguments:A,bind:B,attempt:true})()},bind:function(B,A){return this.create({bind:B,arguments:A})},bindWithEvent:function(B,A){return this.create({bind:B,event:true,arguments:A})},delay:function(B,C,A){return this.create({delay:B,bind:C,arguments:A})()},periodical:function(A,C,B){return this.create({periodical:A,bind:C,arguments:B})()},run:function(A,B){return this.apply(B,$splat(A))}});Number.implement({limit:function(B,A){return Math.min(A,Math.max(B,this))},round:function(A){A=Math.pow(10,A||0);return Math.round(this*A)/A},times:function(B,C){for(var A=0;A<this;A++){B.call(C,A,this)}},toFloat:function(){return parseFloat(this)},toInt:function(A){return parseInt(this,A||10)}});Number.alias("times","each");(function(B){var A={};B.each(function(C){if(!Number[C]){A[C]=function(){return Math[C].apply(null,[this].concat($A(arguments)))}}});Number.implement(A)})(["abs","acos","asin","atan","atan2","ceil","cos","exp","floor","log","max","min","pow","sin","sqrt","tan"]);String.implement({test:function(A,B){return((typeof A=="string")?new RegExp(A,B):A).test(this)},contains:function(A,B){return(B)?(B+this+B).indexOf(B+A+B)>-1:this.indexOf(A)>-1},trim:function(){return this.replace(/^\s+|\s+$/g,"")},clean:function(){return this.replace(/\s+/g," ").trim()},camelCase:function(){return this.replace(/-\D/g,function(A){return A.charAt(1).toUpperCase()})},hyphenate:function(){return this.replace(/[A-Z]/g,function(A){return("-"+A.charAt(0).toLowerCase())})},capitalize:function(){return this.replace(/\b[a-z]/g,function(A){return A.toUpperCase()})},escapeRegExp:function(){return this.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1")},toInt:function(A){return parseInt(this,A||10)},toFloat:function(){return parseFloat(this)},hexToRgb:function(B){var A=this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);return(A)?A.slice(1).hexToRgb(B):null},rgbToHex:function(B){var A=this.match(/\d{1,3}/g);return(A)?A.rgbToHex(B):null},stripScripts:function(B){var A="";var C=this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi,function(){A+=arguments[1]+"\n";return""});if(B===true){$exec(A)}else{if($type(B)=="function"){B(A,C)}}return C},substitute:function(A,B){return this.replace(B||(/\\?\{([^}]+)\}/g),function(D,C){if(D.charAt(0)=="\\"){return D.slice(1)}return(A[C]!=undefined)?A[C]:""})}});Hash.implement({has:Object.prototype.hasOwnProperty,keyOf:function(B){for(var A in this){if(this.hasOwnProperty(A)&&this[A]===B){return A}}return null},hasValue:function(A){return(Hash.keyOf(this,A)!==null)},extend:function(A){Hash.each(A,function(C,B){Hash.set(this,B,C)},this);return this},combine:function(A){Hash.each(A,function(C,B){Hash.include(this,B,C)},this);return this},erase:function(A){if(this.hasOwnProperty(A)){delete this[A]}return this},get:function(A){return(this.hasOwnProperty(A))?this[A]:null},set:function(A,B){if(!this[A]||this.hasOwnProperty(A)){this[A]=B}return this},empty:function(){Hash.each(this,function(B,A){delete this[A]},this);return this},include:function(B,C){var A=this[B];if(A==undefined){this[B]=C}return this},map:function(B,C){var A=new Hash;Hash.each(this,function(E,D){A.set(D,B.call(C,E,D,this))},this);return A},filter:function(B,C){var A=new Hash;Hash.each(this,function(E,D){if(B.call(C,E,D,this)){A.set(D,E)}},this);return A},every:function(B,C){for(var A in this){if(this.hasOwnProperty(A)&&!B.call(C,this[A],A)){return false}}return true},some:function(B,C){for(var A in this){if(this.hasOwnProperty(A)&&B.call(C,this[A],A)){return true}}return false},getKeys:function(){var A=[];Hash.each(this,function(C,B){A.push(B)});return A},getValues:function(){var A=[];Hash.each(this,function(B){A.push(B)});return A},toQueryString:function(A){var B=[];Hash.each(this,function(F,E){if(A){E=A+"["+E+"]"}var D;switch($type(F)){case"object":D=Hash.toQueryString(F,E);break;case"array":var C={};F.each(function(H,G){C[G]=H});D=Hash.toQueryString(C,E);break;default:D=E+"="+encodeURIComponent(F)}if(F!=undefined){B.push(D)}});return B.join("&")}});Hash.alias({keyOf:"indexOf",hasValue:"contains"});var Event=new Native({name:"Event",initialize:function(A,F){F=F||window;var K=F.document;A=A||F.event;if(A.$extended){return A}this.$extended=true;var J=A.type;var G=A.target||A.srcElement;while(G&&G.nodeType==3){G=G.parentNode}if(J.test(/key/)){var B=A.which||A.keyCode;var M=Event.Keys.keyOf(B);if(J=="keydown"){var D=B-111;if(D>0&&D<13){M="f"+D}}M=M||String.fromCharCode(B).toLowerCase()}else{if(J.match(/(click|mouse|menu)/i)){K=(!K.compatMode||K.compatMode=="CSS1Compat")?K.html:K.body;var I={x:A.pageX||A.clientX+K.scrollLeft,y:A.pageY||A.clientY+K.scrollTop};var C={x:(A.pageX)?A.pageX-F.pageXOffset:A.clientX,y:(A.pageY)?A.pageY-F.pageYOffset:A.clientY};if(J.match(/DOMMouseScroll|mousewheel/)){var H=(A.wheelDelta)?A.wheelDelta/120:-(A.detail||0)/3}var E=(A.which==3)||(A.button==2);var L=null;if(J.match(/over|out/)){switch(J){case"mouseover":L=A.relatedTarget||A.fromElement;break;case"mouseout":L=A.relatedTarget||A.toElement}if(!(function(){while(L&&L.nodeType==3){L=L.parentNode}return true}).create({attempt:Browser.Engine.gecko})()){L=false}}}}return $extend(this,{event:A,type:J,page:I,client:C,rightClick:E,wheel:H,relatedTarget:L,target:G,code:B,key:M,shift:A.shiftKey,control:A.ctrlKey,alt:A.altKey,meta:A.metaKey})}});Event.Keys=new Hash({enter:13,up:38,down:40,left:37,right:39,esc:27,space:32,backspace:8,tab:9,"delete":46});Event.implement({stop:function(){return this.stopPropagation().preventDefault()},stopPropagation:function(){if(this.event.stopPropagation){this.event.stopPropagation()}else{this.event.cancelBubble=true}return this},preventDefault:function(){if(this.event.preventDefault){this.event.preventDefault()}else{this.event.returnValue=false}return this}});var Class=new Native({name:"Class",initialize:function(B){B=B||{};var A=function(E){for(var D in this){this[D]=$unlink(this[D])}for(var F in Class.Mutators){if(!this[F]){continue}Class.Mutators[F](this,this[F]);delete this[F]}this.constructor=A;if(E===$empty){return this}var C=(this.initialize)?this.initialize.apply(this,arguments):this;if(this.options&&this.options.initialize){this.options.initialize.call(this)}return C};$extend(A,this);A.constructor=Class;A.prototype=B;return A}});Class.implement({implement:function(){Class.Mutators.Implements(this.prototype,Array.slice(arguments));return this}});Class.Mutators={Implements:function(A,B){$splat(B).each(function(C){$extend(A,($type(C)=="class")?new C($empty):C)})},Extends:function(self,klass){var instance=new klass($empty);delete instance.parent;delete instance.parentOf;for(var key in instance){var current=self[key],previous=instance[key];if(current==undefined){self[key]=previous;continue}var ctype=$type(current),ptype=$type(previous);if(ctype!=ptype){continue}switch(ctype){case"function":if(!arguments.callee.caller){self[key]=eval("("+String(current).replace(/\bthis\.parent\(\s*(\))?/g,function(full,close){return"arguments.callee._parent_.call(this"+(close||", ")})+")")}self[key]._parent_=previous;break;case"object":self[key]=$merge(previous,current)}}self.parent=function(){return arguments.callee.caller._parent_.apply(this,arguments)};self.parentOf=function(descendant){return descendant._parent_.apply(this,Array.slice(arguments,1))}}};var Chain=new Class({chain:function(){this.$chain=(this.$chain||[]).extend(arguments);return this},callChain:function(){return(this.$chain&&this.$chain.length)?this.$chain.shift().apply(this,arguments):false},clearChain:function(){if(this.$chain){this.$chain.empty()}return this}});var Events=new Class({addEvent:function(C,B,A){C=Events.removeOn(C);if(B!=$empty){this.$events=this.$events||{};this.$events[C]=this.$events[C]||[];this.$events[C].include(B);if(A){B.internal=true}}return this},addEvents:function(A){for(var B in A){this.addEvent(B,A[B])}return this},fireEvent:function(C,B,A){C=Events.removeOn(C);if(!this.$events||!this.$events[C]){return this}this.$events[C].each(function(D){D.create({bind:this,delay:A,"arguments":B})()},this);return this},removeEvent:function(B,A){B=Events.removeOn(B);if(!this.$events||!this.$events[B]){return this}if(!A.internal){this.$events[B].erase(A)}return this},removeEvents:function(C){for(var D in this.$events){if(C&&C!=D){continue}var B=this.$events[D];for(var A=B.length;A--;A){this.removeEvent(D,B[A])}}return this}});Events.removeOn=function(A){return A.replace(/^on([A-Z])/,function(B,C){return C.toLowerCase()})};var Options=new Class({setOptions:function(){this.options=$merge.run([this.options].extend(arguments));if(!this.addEvent){return this}for(var A in this.options){if($type(this.options[A])!="function"||!(/^on[A-Z]/).test(A)){continue}this.addEvent(A,this.options[A]);delete this.options[A]}return this}});Document.implement({newElement:function(A,B){if(Browser.Engine.trident&&B){["name","type","checked"].each(function(C){if(!B[C]){return }A+=" "+C+'="'+B[C]+'"';if(C!="checked"){delete B[C]}});A="<"+A+">"}return $.element(this.createElement(A)).set(B)},newTextNode:function(A){return this.createTextNode(A)},getDocument:function(){return this},getWindow:function(){return this.defaultView||this.parentWindow},purge:function(){var C=this.getElementsByTagName("*");for(var B=0,A=C.length;B<A;B++){Browser.freeMem(C[B])}}});var Element=new Native({name:"Element",legacy:window.Element,initialize:function(A,B){var C=Element.Constructors.get(A);if(C){return C(B)}if(typeof A=="string"){return document.newElement(A,B)}return $(A).set(B)},afterImplement:function(A,B){if(!Array[A]){Elements.implement(A,Elements.multi(A))}Element.Prototype[A]=B}});Element.Prototype={$family:{name:"element"}};Element.Constructors=new Hash;var IFrame=new Native({name:"IFrame",generics:false,initialize:function(){var E=Array.link(arguments,{properties:Object.type,iframe:$defined});var C=E.properties||{};var B=$(E.iframe)||false;var D=C.onload||$empty;delete C.onload;C.id=C.name=$pick(C.id,C.name,B.id,B.name,"IFrame_"+$time());B=new Element(B||"iframe",C);var A=function(){var F=$try(function(){return B.contentWindow.location.host});if(F&&F==window.location.host){var H=new Window(B.contentWindow);var G=new Document(B.contentWindow.document);$extend(H.Element.prototype,Element.Prototype)}D.call(B.contentWindow,B.contentWindow.document)};(!window.frames[C.id])?B.addListener("load",A):A();return B}});var Elements=new Native({initialize:function(F,B){B=$extend({ddup:true,cash:true},B);F=F||[];if(B.ddup||B.cash){var G={},E=[];for(var C=0,A=F.length;C<A;C++){var D=$.element(F[C],!B.cash);if(B.ddup){if(G[D.uid]){continue}G[D.uid]=true}E.push(D)}F=E}return(B.cash)?$extend(F,this):F}});Elements.implement({filter:function(A,B){if(!A){return this}return new Elements(Array.filter(this,(typeof A=="string")?function(C){return C.match(A)}:A,B))}});Elements.multi=function(A){return function(){var B=[];var F=true;for(var D=0,C=this.length;D<C;D++){var E=this[D][A].apply(this[D],arguments);B.push(E);if(F){F=($type(E)=="element")}}return(F)?new Elements(B):B}};Window.implement({$:function(B,C){if(B&&B.$family&&B.uid){return B}var A=$type(B);return($[A])?$[A](B,C,this.document):null},$$:function(A){if(arguments.length==1&&typeof A=="string"){return this.document.getElements(A)}var F=[];var C=Array.flatten(arguments);for(var D=0,B=C.length;D<B;D++){var E=C[D];switch($type(E)){case"element":E=[E];break;case"string":E=this.document.getElements(E,true);break;default:E=false}if(E){F.extend(E)}}return new Elements(F)},getDocument:function(){return this.document},getWindow:function(){return this}});$.string=function(C,B,A){C=A.getElementById(C);return(C)?$.element(C,B):null};$.element=function(A,D){$uid(A);if(!D&&!A.$family&&!(/^object|embed$/i).test(A.tagName)){var B=Element.Prototype;for(var C in B){A[C]=B[C]}}return A};$.object=function(B,C,A){if(B.toElement){return $.element(B.toElement(A),C)}return null};$.textnode=$.whitespace=$.window=$.document=$arguments(0);Native.implement([Element,Document],{getElement:function(A,B){return $(this.getElements(A,true)[0]||null,B)},getElements:function(A,D){A=A.split(",");var C=[];var B=(A.length>1);A.each(function(E){var F=this.getElementsByTagName(E.trim());(B)?C.extend(F):C=F},this);return new Elements(C,{ddup:B,cash:!D})}});Element.Storage={get:function(A){return(this[A]||(this[A]={}))}};Element.Inserters=new Hash({before:function(B,A){if(A.parentNode){A.parentNode.insertBefore(B,A)}},after:function(B,A){if(!A.parentNode){return }var C=A.nextSibling;(C)?A.parentNode.insertBefore(B,C):A.parentNode.appendChild(B)},bottom:function(B,A){A.appendChild(B)},top:function(B,A){var C=A.firstChild;(C)?A.insertBefore(B,C):A.appendChild(B)}});Element.Inserters.inside=Element.Inserters.bottom;Element.Inserters.each(function(C,B){var A=B.capitalize();Element.implement("inject"+A,function(D){C(this,$(D,true));return this});Element.implement("grab"+A,function(D){C($(D,true),this);return this})});Element.implement({getDocument:function(){return this.ownerDocument},getWindow:function(){return this.ownerDocument.getWindow()},getElementById:function(D,C){var B=this.ownerDocument.getElementById(D);if(!B){return null}for(var A=B.parentNode;A!=this;A=A.parentNode){if(!A){return null}}return $.element(B,C)},set:function(D,B){switch($type(D)){case"object":for(var C in D){this.set(C,D[C])}break;case"string":var A=Element.Properties.get(D);(A&&A.set)?A.set.apply(this,Array.slice(arguments,1)):this.setProperty(D,B)}return this},get:function(B){var A=Element.Properties.get(B);return(A&&A.get)?A.get.apply(this,Array.slice(arguments,1)):this.getProperty(B)},erase:function(B){var A=Element.Properties.get(B);(A&&A.erase)?A.erase.apply(this,Array.slice(arguments,1)):this.removeProperty(B);return this},match:function(A){return(!A||Element.get(this,"tag")==A)},inject:function(B,A){Element.Inserters.get(A||"bottom")(this,$(B,true));return this},wraps:function(B,A){B=$(B,true);return this.replaces(B).grab(B,A)},grab:function(B,A){Element.Inserters.get(A||"bottom")($(B,true),this);return this},appendText:function(B,A){return this.grab(this.getDocument().newTextNode(B),A)},adopt:function(){Array.flatten(arguments).each(function(A){A=$(A,true);if(A){this.appendChild(A)}},this);return this},dispose:function(){return(this.parentNode)?this.parentNode.removeChild(this):this},clone:function(D,C){switch($type(this)){case"element":var H={};for(var G=0,E=this.attributes.length;G<E;G++){var B=this.attributes[G],L=B.nodeName.toLowerCase();if(Browser.Engine.trident&&(/input/i).test(this.tagName)&&(/width|height/).test(L)){continue}var K=(L=="style"&&this.style)?this.style.cssText:B.nodeValue;if(!$chk(K)||L=="uid"||(L=="id"&&!C)){continue}if(K!="inherit"&&["string","number"].contains($type(K))){H[L]=K}}var J=new Element(this.nodeName.toLowerCase(),H);if(D!==false){for(var I=0,F=this.childNodes.length;I<F;I++){var A=Element.clone(this.childNodes[I],true,C);if(A){J.grab(A)}}}return J;case"textnode":return document.newTextNode(this.nodeValue)}return null},replaces:function(A){A=$(A,true);A.parentNode.replaceChild(this,A);return this},hasClass:function(A){return this.className.contains(A," ")},addClass:function(A){if(!this.hasClass(A)){this.className=(this.className+" "+A).clean()}return this},removeClass:function(A){this.className=this.className.replace(new RegExp("(^|\\s)"+A+"(?:\\s|$)"),"$1").clean();return this},toggleClass:function(A){return this.hasClass(A)?this.removeClass(A):this.addClass(A)},getComputedStyle:function(B){if(this.currentStyle){return this.currentStyle[B.camelCase()]}var A=this.getWindow().getComputedStyle(this,null);return(A)?A.getPropertyValue([B.hyphenate()]):null},empty:function(){$A(this.childNodes).each(function(A){Browser.freeMem(A);Element.empty(A);Element.dispose(A)},this);return this},destroy:function(){Browser.freeMem(this.empty().dispose());return null},getSelected:function(){return new Elements($A(this.options).filter(function(A){return A.selected}))},toQueryString:function(){var A=[];this.getElements("input, select, textarea").each(function(B){if(!B.name||B.disabled){return }var C=(B.tagName.toLowerCase()=="select")?Element.getSelected(B).map(function(D){return D.value}):((B.type=="radio"||B.type=="checkbox")&&!B.checked)?null:B.value;$splat(C).each(function(D){if(D){A.push(B.name+"="+encodeURIComponent(D))}})});return A.join("&")},getProperty:function(C){var B=Element.Attributes,A=B.Props[C];var D=(A)?this[A]:this.getAttribute(C,2);return(B.Bools[C])?!!D:(A)?D:D||null},getProperties:function(){var A=$A(arguments);return A.map(function(B){return this.getProperty(B)},this).associate(A)},setProperty:function(D,E){var C=Element.Attributes,B=C.Props[D],A=$defined(E);if(B&&C.Bools[D]){E=(E||!A)?true:false}else{if(!A){return this.removeProperty(D)}}(B)?this[B]=E:this.setAttribute(D,E);return this},setProperties:function(A){for(var B in A){this.setProperty(B,A[B])}return this},removeProperty:function(D){var C=Element.Attributes,B=C.Props[D],A=(B&&C.Bools[D]);(B)?this[B]=(A)?false:"":this.removeAttribute(D);return this},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this}});(function(){var A=function(D,B,I,C,F,H){var E=D[I||B];var G=[];while(E){if(E.nodeType==1&&(!C||Element.match(E,C))){G.push(E);if(!F){break}}E=E[B]}return(F)?new Elements(G,{ddup:false,cash:!H}):$(G[0],H)};Element.implement({getPrevious:function(B,C){return A(this,"previousSibling",null,B,false,C)},getAllPrevious:function(B,C){return A(this,"previousSibling",null,B,true,C)},getNext:function(B,C){return A(this,"nextSibling",null,B,false,C)},getAllNext:function(B,C){return A(this,"nextSibling",null,B,true,C)},getFirst:function(B,C){return A(this,"nextSibling","firstChild",B,false,C)},getLast:function(B,C){return A(this,"previousSibling","lastChild",B,false,C)},getParent:function(B,C){return A(this,"parentNode",null,B,false,C)},getParents:function(B,C){return A(this,"parentNode",null,B,true,C)},getChildren:function(B,C){return A(this,"nextSibling","firstChild",B,true,C)},hasChild:function(B){B=$(B,true);return(!!B&&$A(this.getElementsByTagName(B.tagName)).contains(B))}})})();Element.Properties=new Hash;Element.Properties.style={set:function(A){this.style.cssText=A},get:function(){return this.style.cssText},erase:function(){this.style.cssText=""}};Element.Properties.tag={get:function(){return this.tagName.toLowerCase()}};Element.Properties.href={get:function(){return(!this.href)?null:this.href.replace(new RegExp("^"+document.location.protocol+"//"+document.location.host),"")}};Element.Properties.html={set:function(){return this.innerHTML=Array.flatten(arguments).join("")}};Native.implement([Element,Window,Document],{addListener:function(B,A){if(this.addEventListener){this.addEventListener(B,A,false)}else{this.attachEvent("on"+B,A)}return this},removeListener:function(B,A){if(this.removeEventListener){this.removeEventListener(B,A,false)}else{this.detachEvent("on"+B,A)}return this},retrieve:function(B,A){var D=Element.Storage.get(this.uid);var C=D[B];if($defined(A)&&!$defined(C)){C=D[B]=A}return $pick(C)},store:function(B,A){var C=Element.Storage.get(this.uid);C[B]=A;return this},eliminate:function(A){var B=Element.Storage.get(this.uid);delete B[A];return this}});Element.Attributes=new Hash({Props:{html:"innerHTML","class":"className","for":"htmlFor",text:(Browser.Engine.trident)?"innerText":"textContent"},Bools:["compact","nowrap","ismap","declare","noshade","checked","disabled","readonly","multiple","selected","noresize","defer"],Camels:["value","accessKey","cellPadding","cellSpacing","colSpan","frameBorder","maxLength","readOnly","rowSpan","tabIndex","useMap"]});Browser.freeMem=function(A){if(!A){return }if(Browser.Engine.trident&&(/object/i).test(A.tagName)){for(var B in A){if(typeof A[B]=="function"){A[B]=$empty}}Element.dispose(A)}if(A.uid&&A.removeEvents){A.removeEvents()}};(function(B){var C=B.Bools,A=B.Camels;B.Bools=C=C.associate(C);Hash.extend(Hash.combine(B.Props,C),A.associate(A.map(function(D){return D.toLowerCase()})));B.erase("Camels")})(Element.Attributes);window.addListener("unload",function(){window.removeListener("unload",arguments.callee);document.purge();if(Browser.Engine.trident){CollectGarbage()}});Element.Properties.events={set:function(A){this.addEvents(A)}};Native.implement([Element,Window,Document],{addEvent:function(E,G){var H=this.retrieve("events",{});H[E]=H[E]||{keys:[],values:[]};if(H[E].keys.contains(G)){return this}H[E].keys.push(G);var F=E,A=Element.Events.get(E),C=G,I=this;if(A){if(A.onAdd){A.onAdd.call(this,G)}if(A.condition){C=function(J){if(A.condition.call(this,J)){return G.call(this,J)}return false}}F=A.base||F}var D=function(){return G.call(I)};var B=Element.NativeEvents[F]||0;if(B){if(B==2){D=function(J){J=new Event(J,I.getWindow());if(C.call(I,J)===false){J.stop()}}}this.addListener(F,D)}H[E].values.push(D);return this},removeEvent:function(D,C){var B=this.retrieve("events");if(!B||!B[D]){return this}var G=B[D].keys.indexOf(C);if(G==-1){return this}var A=B[D].keys.splice(G,1)[0];var F=B[D].values.splice(G,1)[0];var E=Element.Events.get(D);if(E){if(E.onRemove){E.onRemove.call(this,C)}D=E.base||D}return(Element.NativeEvents[D])?this.removeListener(D,F):this},addEvents:function(A){for(var B in A){this.addEvent(B,A[B])}return this},removeEvents:function(B){var A=this.retrieve("events");if(!A){return this}if(!B){for(var C in A){this.removeEvents(C)}A=null}else{if(A[B]){while(A[B].keys[0]){this.removeEvent(B,A[B].keys[0])}A[B]=null}}return this},fireEvent:function(D,B,A){var C=this.retrieve("events");if(!C||!C[D]){return this}C[D].keys.each(function(E){E.create({bind:this,delay:A,"arguments":B})()},this);return this},cloneEvents:function(D,A){D=$(D);var C=D.retrieve("events");if(!C){return this}if(!A){for(var B in C){this.cloneEvents(D,B)}}else{if(C[A]){C[A].keys.each(function(E){this.addEvent(A,E)},this)}}return this}});Element.NativeEvents={click:2,dblclick:2,mouseup:2,mousedown:2,contextmenu:2,mousewheel:2,DOMMouseScroll:2,mouseover:2,mouseout:2,mousemove:2,selectstart:2,selectend:2,keydown:2,keypress:2,keyup:2,focus:2,blur:2,change:2,reset:2,select:2,submit:2,load:1,unload:1,beforeunload:2,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1};(function(){var A=function(B){var C=B.relatedTarget;if(C==undefined){return true}if(C===false){return false}return($type(this)!="document"&&C!=this&&C.prefix!="xul"&&!this.hasChild(C))};Element.Events=new Hash({mouseenter:{base:"mouseover",condition:A},mouseleave:{base:"mouseout",condition:A},mousewheel:{base:(Browser.Engine.gecko)?"DOMMouseScroll":"mousewheel"}})})();Element.Properties.styles={set:function(A){this.setStyles(A)}};Element.Properties.opacity={set:function(A,B){if(!B){if(A==0){if(this.style.visibility!="hidden"){this.style.visibility="hidden"}}else{if(this.style.visibility!="visible"){this.style.visibility="visible"}}}if(!this.currentStyle||!this.currentStyle.hasLayout){this.style.zoom=1}if(Browser.Engine.trident){this.style.filter=(A==1)?"":"alpha(opacity="+A*100+")"}this.style.opacity=A;this.store("opacity",A)},get:function(){return this.retrieve("opacity",1)}};Element.implement({setOpacity:function(A){return this.set("opacity",A,true)},getOpacity:function(){return this.get("opacity")},setStyle:function(B,A){switch(B){case"opacity":return this.set("opacity",parseFloat(A));case"float":B=(Browser.Engine.trident)?"styleFloat":"cssFloat"}B=B.camelCase();if($type(A)!="string"){var C=(Element.Styles.get(B)||"@").split(" ");A=$splat(A).map(function(E,D){if(!C[D]){return""}return($type(E)=="number")?C[D].replace("@",Math.round(E)):E}).join(" ")}else{if(A==String(Number(A))){A=Math.round(A)}}this.style[B]=A;return this},getStyle:function(G){switch(G){case"opacity":return this.get("opacity");case"float":G=(Browser.Engine.trident)?"styleFloat":"cssFloat"}G=G.camelCase();var A=this.style[G];if(!$chk(A)){A=[];for(var F in Element.ShortStyles){if(G!=F){continue}for(var E in Element.ShortStyles[F]){A.push(this.getStyle(E))}return A.join(" ")}A=this.getComputedStyle(G)}if(A){A=String(A);var C=A.match(/rgba?\([\d\s,]+\)/);if(C){A=A.replace(C[0],C[0].rgbToHex())}}if(Browser.Engine.presto||(Browser.Engine.trident&&!$chk(parseInt(A)))){if(G.test(/^(height|width)$/)){var B=(G=="width")?["left","right"]:["top","bottom"],D=0;B.each(function(H){D+=this.getStyle("border-"+H+"-width").toInt()+this.getStyle("padding-"+H).toInt()},this);return this["offset"+G.capitalize()]-D+"px"}if(Browser.Engine.presto&&String(A).test("px")){return A}if(G.test(/(border(.+)Width|margin|padding)/)){return"0px"}}return A},setStyles:function(B){for(var A in B){this.setStyle(A,B[A])}return this},getStyles:function(){var A={};Array.each(arguments,function(B){A[B]=this.getStyle(B)},this);return A}});Element.Styles=new Hash({left:"@px",top:"@px",bottom:"@px",right:"@px",width:"@px",height:"@px",maxWidth:"@px",maxHeight:"@px",minWidth:"@px",minHeight:"@px",backgroundColor:"rgb(@, @, @)",backgroundPosition:"@px @px",color:"rgb(@, @, @)",fontSize:"@px",letterSpacing:"@px",lineHeight:"@px",clip:"rect(@px @px @px @px)",margin:"@px @px @px @px",padding:"@px @px @px @px",border:"@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)",borderWidth:"@px @px @px @px",borderStyle:"@ @ @ @",borderColor:"rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)",zIndex:"@",zoom:"@",fontWeight:"@",textIndent:"@px",opacity:"@"});Element.ShortStyles={margin:{},padding:{},border:{},borderWidth:{},borderStyle:{},borderColor:{}};["Top","Right","Bottom","Left"].each(function(G){var F=Element.ShortStyles;var B=Element.Styles;["margin","padding"].each(function(H){var I=H+G;F[H][I]=B[I]="@px"});var E="border"+G;F.border[E]=B[E]="@px @ rgb(@, @, @)";var D=E+"Width",A=E+"Style",C=E+"Color";F[E]={};F.borderWidth[D]=F[E][D]=B[D]="@px";F.borderStyle[A]=F[E][A]=B[A]="@";F.borderColor[C]=F[E][C]=B[C]="rgb(@, @, @)"});(function(){Element.implement({scrollTo:function(H,I){if(B(this)){this.getWindow().scrollTo(H,I)}else{this.scrollLeft=H;this.scrollTop=I}return this},getSize:function(){if(B(this)){return this.getWindow().getSize()}return{x:this.offsetWidth,y:this.offsetHeight}},getScrollSize:function(){if(B(this)){return this.getWindow().getScrollSize()}return{x:this.scrollWidth,y:this.scrollHeight}},getScroll:function(){if(B(this)){return this.getWindow().getScroll()}return{x:this.scrollLeft,y:this.scrollTop}},getScrolls:function(){var I=this,H={x:0,y:0};while(I&&!B(I)){H.x+=I.scrollLeft;H.y+=I.scrollTop;I=I.parentNode}return H},getOffsetParent:function(){var H=this;if(B(H)){return null}if(!Browser.Engine.trident){return H.offsetParent}while((H=H.parentNode)&&!B(H)){if(D(H,"position")!="static"){return H}}return null},getOffsets:function(){var I=this,H={x:0,y:0};if(B(this)){return H}while(I&&!B(I)){H.x+=I.offsetLeft;H.y+=I.offsetTop;if(Browser.Engine.gecko){if(!F(I)){H.x+=C(I);H.y+=G(I)}var J=I.parentNode;if(J&&D(J,"overflow")!="visible"){H.x+=C(J);H.y+=G(J)}}else{if(I!=this&&(Browser.Engine.trident||Browser.Engine.webkit)){H.x+=C(I);H.y+=G(I)}}I=I.offsetParent;if(Browser.Engine.trident){while(I&&!I.currentStyle.hasLayout){I=I.offsetParent}}}if(Browser.Engine.gecko&&!F(this)){H.x-=C(this);H.y-=G(this)}return H},getPosition:function(K){if(B(this)){return{x:0,y:0}}var L=this.getOffsets(),I=this.getScrolls();var H={x:L.x-I.x,y:L.y-I.y};var J=(K&&(K=$(K)))?K.getPosition():{x:0,y:0};return{x:H.x-J.x,y:H.y-J.y}},getCoordinates:function(J){if(B(this)){return this.getWindow().getCoordinates()}var H=this.getPosition(J),I=this.getSize();var K={left:H.x,top:H.y,width:I.x,height:I.y};K.right=K.left+K.width;K.bottom=K.top+K.height;return K},computePosition:function(H){return{left:H.x-E(this,"margin-left"),top:H.y-E(this,"margin-top")}},position:function(H){return this.setStyles(this.computePosition(H))}});Native.implement([Document,Window],{getSize:function(){var I=this.getWindow();if(Browser.Engine.presto||Browser.Engine.webkit){return{x:I.innerWidth,y:I.innerHeight}}var H=A(this);return{x:H.clientWidth,y:H.clientHeight}},getScroll:function(){var I=this.getWindow();var H=A(this);return{x:I.pageXOffset||H.scrollLeft,y:I.pageYOffset||H.scrollTop}},getScrollSize:function(){var I=A(this);var H=this.getSize();return{x:Math.max(I.scrollWidth,H.x),y:Math.max(I.scrollHeight,H.y)}},getPosition:function(){return{x:0,y:0}},getCoordinates:function(){var H=this.getSize();return{top:0,left:0,bottom:H.y,right:H.x,height:H.y,width:H.x}}});var D=Element.getComputedStyle;function E(H,I){return D(H,I).toInt()||0}function F(H){return D(H,"-moz-box-sizing")=="border-box"}function G(H){return E(H,"border-top-width")}function C(H){return E(H,"border-left-width")}function B(H){return(/^(?:body|html)$/i).test(H.tagName)}function A(H){var I=H.getDocument();return(!I.compatMode||I.compatMode=="CSS1Compat")?I.html:I.body}})();Native.implement([Window,Document,Element],{getHeight:function(){return this.getSize().y},getWidth:function(){return this.getSize().x},getScrollTop:function(){return this.getScroll().y},getScrollLeft:function(){return this.getScroll().x},getScrollHeight:function(){return this.getScrollSize().y},getScrollWidth:function(){return this.getScrollSize().x},getTop:function(){return this.getPosition().y},getLeft:function(){return this.getPosition().x}});Native.implement([Document,Element],{getElements:function(H,G){H=H.split(",");var C,E={};for(var D=0,B=H.length;D<B;D++){var A=H[D],F=Selectors.Utils.search(this,A,E);if(D!=0&&F.item){F=$A(F)}C=(D==0)?F:(C.item)?$A(C).concat(F):C.concat(F)}return new Elements(C,{ddup:(H.length>1),cash:!G})}});Element.implement({match:function(B){if(!B){return true}var D=Selectors.Utils.parseTagAndID(B);var A=D[0],E=D[1];if(!Selectors.Filters.byID(this,E)||!Selectors.Filters.byTag(this,A)){return false}var C=Selectors.Utils.parseSelector(B);return(C)?Selectors.Utils.filter(this,C,{}):true}});var Selectors={Cache:{nth:{},parsed:{}}};Selectors.RegExps={id:(/#([\w-]+)/),tag:(/^(\w+|\*)/),quick:(/^(\w+|\*)$/),splitter:(/\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g),combined:(/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)["']?(.*?)["']?)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g)};Selectors.Utils={chk:function(B,C){if(!C){return true}var A=$uid(B);if(!C[A]){return C[A]=true}return false},parseNthArgument:function(F){if(Selectors.Cache.nth[F]){return Selectors.Cache.nth[F]}var C=F.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);if(!C){return false}var E=parseInt(C[1]);var B=(E||E===0)?E:1;var D=C[2]||false;var A=parseInt(C[3])||0;if(B!=0){A--;while(A<1){A+=B}while(A>=B){A-=B}}else{B=A;D="index"}switch(D){case"n":C={a:B,b:A,special:"n"};break;case"odd":C={a:2,b:0,special:"n"};break;case"even":C={a:2,b:1,special:"n"};break;case"first":C={a:0,special:"index"};break;case"last":C={special:"last-child"};break;case"only":C={special:"only-child"};break;default:C={a:(B-1),special:"index"}}return Selectors.Cache.nth[F]=C},parseSelector:function(E){if(Selectors.Cache.parsed[E]){return Selectors.Cache.parsed[E]}var D,H={classes:[],pseudos:[],attributes:[]};while((D=Selectors.RegExps.combined.exec(E))){var I=D[1],G=D[2],F=D[3],B=D[4],C=D[5],J=D[6];if(I){H.classes.push(I)}else{if(C){var A=Selectors.Pseudo.get(C);if(A){H.pseudos.push({parser:A,argument:J})}else{H.attributes.push({name:C,operator:"=",value:J})}}else{if(G){H.attributes.push({name:G,operator:F,value:B})}}}}if(!H.classes.length){delete H.classes}if(!H.attributes.length){delete H.attributes}if(!H.pseudos.length){delete H.pseudos}if(!H.classes&&!H.attributes&&!H.pseudos){H=null}return Selectors.Cache.parsed[E]=H},parseTagAndID:function(B){var A=B.match(Selectors.RegExps.tag);var C=B.match(Selectors.RegExps.id);return[(A)?A[1]:"*",(C)?C[1]:false]},filter:function(F,C,E){var D;if(C.classes){for(D=C.classes.length;D--;D){var G=C.classes[D];if(!Selectors.Filters.byClass(F,G)){return false}}}if(C.attributes){for(D=C.attributes.length;D--;D){var B=C.attributes[D];if(!Selectors.Filters.byAttribute(F,B.name,B.operator,B.value)){return false}}}if(C.pseudos){for(D=C.pseudos.length;D--;D){var A=C.pseudos[D];if(!Selectors.Filters.byPseudo(F,A.parser,A.argument,E)){return false}}}return true},getByTagAndID:function(B,A,D){if(D){var C=(B.getElementById)?B.getElementById(D,true):Element.getElementById(B,D,true);return(C&&Selectors.Filters.byTag(C,A))?[C]:[]}else{return B.getElementsByTagName(A)}},search:function(J,I,O){var B=[];var C=I.trim().replace(Selectors.RegExps.splitter,function(Z,Y,X){B.push(Y);return":)"+X}).split(":)");var K,F,E,V;for(var U=0,Q=C.length;U<Q;U++){var T=C[U];if(U==0&&Selectors.RegExps.quick.test(T)){K=J.getElementsByTagName(T);continue}var A=B[U-1];var L=Selectors.Utils.parseTagAndID(T);var W=L[0],M=L[1];if(U==0){K=Selectors.Utils.getByTagAndID(J,W,M)}else{var D={},H=[];for(var S=0,R=K.length;S<R;S++){H=Selectors.Getters[A](H,K[S],W,M,D)}K=H}var G=Selectors.Utils.parseSelector(T);if(G){E=[];for(var P=0,N=K.length;P<N;P++){V=K[P];if(Selectors.Utils.filter(V,G,O)){E.push(V)}}K=E}}return K}};Selectors.Getters={" ":function(H,G,I,A,E){var D=Selectors.Utils.getByTagAndID(G,I,A);for(var C=0,B=D.length;C<B;C++){var F=D[C];if(Selectors.Utils.chk(F,E)){H.push(F)}}return H},">":function(H,G,I,A,F){var C=Selectors.Utils.getByTagAndID(G,I,A);for(var E=0,D=C.length;E<D;E++){var B=C[E];if(B.parentNode==G&&Selectors.Utils.chk(B,F)){H.push(B)}}return H},"+":function(C,B,A,E,D){while((B=B.nextSibling)){if(B.nodeType==1){if(Selectors.Utils.chk(B,D)&&Selectors.Filters.byTag(B,A)&&Selectors.Filters.byID(B,E)){C.push(B)}break}}return C},"~":function(C,B,A,E,D){while((B=B.nextSibling)){if(B.nodeType==1){if(!Selectors.Utils.chk(B,D)){break}if(Selectors.Filters.byTag(B,A)&&Selectors.Filters.byID(B,E)){C.push(B)}}}return C}};Selectors.Filters={byTag:function(B,A){return(A=="*"||(B.tagName&&B.tagName.toLowerCase()==A))},byID:function(A,B){return(!B||(A.id&&A.id==B))},byClass:function(B,A){return(B.className&&B.className.contains(A," "))},byPseudo:function(A,D,C,B){return D.call(A,C,B)},byAttribute:function(C,D,B,E){var A=Element.prototype.getProperty.call(C,D);if(!A){return false}if(!B||E==undefined){return true}switch(B){case"=":return(A==E);case"*=":return(A.contains(E));case"^=":return(A.substr(0,E.length)==E);case"$=":return(A.substr(A.length-E.length)==E);case"!=":return(A!=E);case"~=":return A.contains(E," ");case"|=":return A.contains(E,"-")}return false}};Selectors.Pseudo=new Hash({empty:function(){return !(this.innerText||this.textContent||"").length},not:function(A){return !Element.match(this,A)},contains:function(A){return(this.innerText||this.textContent||"").contains(A)},"first-child":function(){return Selectors.Pseudo.index.call(this,0)},"last-child":function(){var A=this;while((A=A.nextSibling)){if(A.nodeType==1){return false}}return true},"only-child":function(){var B=this;while((B=B.previousSibling)){if(B.nodeType==1){return false}}var A=this;while((A=A.nextSibling)){if(A.nodeType==1){return false}}return true},"nth-child":function(G,E){G=(G==undefined)?"n":G;var C=Selectors.Utils.parseNthArgument(G);if(C.special!="n"){return Selectors.Pseudo[C.special].call(this,C.a,E)}var F=0;E.positions=E.positions||{};var D=$uid(this);if(!E.positions[D]){var B=this;while((B=B.previousSibling)){if(B.nodeType!=1){continue}F++;var A=E.positions[$uid(B)];if(A!=undefined){F=A+F;break}}E.positions[D]=F}return(E.positions[D]%C.a==C.b)},index:function(A){var B=this,C=0;while((B=B.previousSibling)){if(B.nodeType==1&&++C>A){return false}}return(C==A)},even:function(B,A){return Selectors.Pseudo["nth-child"].call(this,"2n+1",A)},odd:function(B,A){return Selectors.Pseudo["nth-child"].call(this,"2n",A)}});Element.Events.domready={onAdd:function(A){if(Browser.loaded){A.call(this)}}};(function(){var B=function(){if(Browser.loaded){return }Browser.loaded=true;window.fireEvent("domready");document.fireEvent("domready")};switch(Browser.Engine.name){case"webkit":(function(){(["loaded","complete"].contains(document.readyState))?B():arguments.callee.delay(50)})();break;case"trident":var A=document.createElement("div");(function(){($try(function(){A.doScroll("left");return $(A).inject(document.body).set("html","temp").dispose()}))?B():arguments.callee.delay(50)})();break;default:window.addEvent("load",B);document.addEvent("DOMContentLoaded",B)}})();var JSON=new Hash({encode:function(B){switch($type(B)){case"string":return'"'+B.replace(/[\x00-\x1f\\"]/g,JSON.$replaceChars)+'"';case"array":return"["+String(B.map(JSON.encode).filter($defined))+"]";case"object":case"hash":var A=[];Hash.each(B,function(E,D){var C=JSON.encode(E);if(C){A.push(JSON.encode(D)+":"+C)}});return"{"+A+"}";case"number":case"boolean":return String(B);case false:return"null"}return null},$specialChars:{"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},$replaceChars:function(A){return JSON.$specialChars[A]||"\\u00"+Math.floor(A.charCodeAt()/16).toString(16)+(A.charCodeAt()%16).toString(16)},decode:function(string,secure){if($type(string)!="string"||!string.length){return null}if(secure&&!(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g,"@").replace(/"[^"\\\n\r]*"/g,""))){return null}return eval("("+string+")")}});Native.implement([Hash,Array,String,Number],{toJSON:function(){return JSON.encode(this)}});var Cookie=new Class({Implements:Options,options:{path:false,domain:false,duration:false,secure:false,document:document},initialize:function(B,A){this.key=B;this.setOptions(A)},write:function(B){B=encodeURIComponent(B);if(this.options.domain){B+="; domain="+this.options.domain}if(this.options.path){B+="; path="+this.options.path}if(this.options.duration){var A=new Date();A.setTime(A.getTime()+this.options.duration*24*60*60*1000);B+="; expires="+A.toGMTString()}if(this.options.secure){B+="; secure"}this.options.document.cookie=this.key+"="+B;return this},read:function(){var A=this.options.document.cookie.match("(?:^|;)\\s*"+this.key.escapeRegExp()+"=([^;]*)");return(A)?decodeURIComponent(A[1]):null},dispose:function(){new Cookie(this.key,$merge(this.options,{duration:-1})).write("");return this}});Cookie.write=function(B,C,A){return new Cookie(B,A).write(C)};Cookie.read=function(A){return new Cookie(A).read()};Cookie.dispose=function(B,A){return new Cookie(B,A).dispose()};var Swiff=new Class({Implements:[Options],options:{id:null,height:1,width:1,container:null,properties:{},params:{quality:"high",allowScriptAccess:"always",wMode:"transparent",swLiveConnect:true},callBacks:{},vars:{}},toElement:function(){return this.object},initialize:function(L,M){this.instance="Swiff_"+$time();this.setOptions(M);M=this.options;var B=this.id=M.id||this.instance;var A=$(M.container);Swiff.CallBacks[this.instance]={};var E=M.params,G=M.vars,F=M.callBacks;var H=$extend({height:M.height,width:M.width},M.properties);var K=this;for(var D in F){Swiff.CallBacks[this.instance][D]=(function(N){return function(){return N.apply(K.object,arguments)}})(F[D]);G[D]="Swiff.CallBacks."+this.instance+"."+D}E.flashVars=Hash.toQueryString(G);if(Browser.Engine.trident){H.classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";E.movie=L}else{H.type="application/x-shockwave-flash";H.data=L}var J='<object id="'+B+'"';for(var I in H){J+=" "+I+'="'+H[I]+'"'}J+=">";for(var C in E){if(E[C]){J+='<param name="'+C+'" value="'+E[C]+'" />'}}J+="</object>";this.object=((A)?A.empty():new Element("div")).set("html",J).firstChild},replaces:function(A){A=$(A,true);A.parentNode.replaceChild(this.toElement(),A);return this},inject:function(A){$(A,true).appendChild(this.toElement());return this},remote:function(){return Swiff.remote.apply(Swiff,[this.toElement()].extend(arguments))}});Swiff.CallBacks={};Swiff.remote=function(obj,fn){var rs=obj.CallFunction('<invoke name="'+fn+'" returntype="javascript">'+__flash__argumentsToXML(arguments,2)+"</invoke>");return eval(rs)};var Fx=new Class({Implements:[Chain,Events,Options],options:{fps:50,unit:false,duration:500,link:"ignore",transition:function(A){return -(Math.cos(Math.PI*A)-1)/2}},initialize:function(A){this.subject=this.subject||this;this.setOptions(A);this.options.duration=Fx.Durations[this.options.duration]||this.options.duration.toInt();var B=this.options.wait;if(B===false){this.options.link="cancel"}},step:function(){var A=$time();if(A<this.time+this.options.duration){var B=this.options.transition((A-this.time)/this.options.duration);this.set(this.compute(this.from,this.to,B))}else{this.set(this.compute(this.from,this.to,1));this.complete()}},set:function(A){return A},compute:function(C,B,A){return Fx.compute(C,B,A)},check:function(A){if(!this.timer){return true}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(A.bind(this,Array.slice(arguments,1)));return false}return false},start:function(B,A){if(!this.check(arguments.callee,B,A)){return this}this.from=B;this.to=A;this.time=0;this.startTimer();this.onStart();return this},complete:function(){if(this.stopTimer()){this.onComplete()}return this},cancel:function(){if(this.stopTimer()){this.onCancel()}return this},onStart:function(){this.fireEvent("start",this.subject)},onComplete:function(){this.fireEvent("complete",this.subject);if(!this.callChain()){this.fireEvent("chainComplete",this.subject)}},onCancel:function(){this.fireEvent("cancel",this.subject).clearChain()},pause:function(){this.stopTimer();return this},resume:function(){this.startTimer();return this},stopTimer:function(){if(!this.timer){return false}this.time=$time()-this.time;this.timer=$clear(this.timer);return true},startTimer:function(){if(this.timer){return false}this.time=$time()-this.time;this.timer=this.step.periodical(Math.round(1000/this.options.fps),this);return true}});Fx.compute=function(C,B,A){return(B-C)*A+C};Fx.Durations={"short":250,normal:500,"long":1000};Fx.CSS=new Class({Extends:Fx,prepare:function(D,E,B){B=$splat(B);var C=B[1];if(!$chk(C)){B[1]=B[0];B[0]=D.getStyle(E)}var A=B.map(this.parse);return{from:A[0],to:A[1]}},parse:function(A){A=$lambda(A)();A=(typeof A=="string")?A.split(" "):$splat(A);return A.map(function(C){C=String(C);var B=false;Fx.CSS.Parsers.each(function(F,E){if(B){return }var D=F.parse(C);if($chk(D)){B={value:D,parser:F}}});B=B||{value:C,parser:Fx.CSS.Parsers.String};return B})},compute:function(D,C,B){var A=[];(Math.min(D.length,C.length)).times(function(E){A.push({value:D[E].parser.compute(D[E].value,C[E].value,B),parser:D[E].parser})});A.$family={name:"fx:css:value"};return A},serve:function(C,B){if($type(C)!="fx:css:value"){C=this.parse(C)}var A=[];C.each(function(D){A=A.concat(D.parser.serve(D.value,B))});return A},render:function(A,D,C,B){A.setStyle(D,this.serve(C,B))},search:function(A){if(Fx.CSS.Cache[A]){return Fx.CSS.Cache[A]}var B={};Array.each(document.styleSheets,function(E,D){var C=E.href;if(C&&C.contains("://")&&!C.contains(document.domain)){return }var F=E.rules||E.cssRules;Array.each(F,function(I,G){if(!I.style){return }var H=(I.selectorText)?I.selectorText.replace(/^\w+/,function(J){return J.toLowerCase()}):null;if(!H||!H.test("^"+A+"$")){return }Element.Styles.each(function(K,J){if(!I.style[J]||Element.ShortStyles[J]){return }K=String(I.style[J]);B[J]=(K.test(/^rgb/))?K.rgbToHex():K})})});return Fx.CSS.Cache[A]=B}});Fx.CSS.Cache={};Fx.CSS.Parsers=new Hash({Color:{parse:function(A){if(A.match(/^#[0-9a-f]{3,6}$/i)){return A.hexToRgb(true)}return((A=A.match(/(\d+),\s*(\d+),\s*(\d+)/)))?[A[1],A[2],A[3]]:false},compute:function(C,B,A){return C.map(function(E,D){return Math.round(Fx.compute(C[D],B[D],A))})},serve:function(A){return A.map(Number)}},Number:{parse:parseFloat,compute:Fx.compute,serve:function(B,A){return(A)?B+A:B}},String:{parse:$lambda(false),compute:$arguments(1),serve:$arguments(0)}});Fx.Tween=new Class({Extends:Fx.CSS,initialize:function(B,A){this.element=this.subject=$(B);this.parent(A)},set:function(B,A){if(arguments.length==1){A=B;B=this.property||this.options.property}this.render(this.element,B,A,this.options.unit);return this},start:function(C,E,D){if(!this.check(arguments.callee,C,E,D)){return this}var B=Array.flatten(arguments);this.property=this.options.property||B.shift();var A=this.prepare(this.element,this.property,B);return this.parent(A.from,A.to)}});Element.Properties.tween={set:function(A){var B=this.retrieve("tween");if(B){B.cancel()}return this.eliminate("tween").store("tween:options",$extend({link:"cancel"},A))},get:function(A){if(A||!this.retrieve("tween")){if(A||!this.retrieve("tween:options")){this.set("tween",A)}this.store("tween",new Fx.Tween(this,this.retrieve("tween:options")))}return this.retrieve("tween")}};Element.implement({tween:function(A,C,B){this.get("tween").start(arguments);return this},fade:function(C){var E=this.get("tween"),D="opacity",A;C=$pick(C,"toggle");switch(C){case"in":E.start(D,1);break;case"out":E.start(D,0);break;case"show":E.set(D,1);break;case"hide":E.set(D,0);break;case"toggle":var B=this.retrieve("fade:flag",this.get("opacity")==1);E.start(D,(B)?0:1);this.store("fade:flag",!B);A=true;break;default:E.start(D,arguments)}if(!A){this.eliminate("fade:flag")}return this},highlight:function(C,A){if(!A){A=this.retrieve("highlight:original",this.getStyle("background-color"));A=(A=="transparent")?"#fff":A}var B=this.get("tween");B.start("background-color",C||"#ffff88",A).chain(function(){this.setStyle("background-color",this.retrieve("highlight:original"));B.callChain()}.bind(this));return this}});Fx.Morph=new Class({Extends:Fx.CSS,initialize:function(B,A){this.element=this.subject=$(B);this.parent(A)},set:function(A){if(typeof A=="string"){A=this.search(A)}for(var B in A){this.render(this.element,B,A[B],this.options.unit)}return this},compute:function(E,D,C){var A={};for(var B in E){A[B]=this.parent(E[B],D[B],C)}return A},start:function(B){if(!this.check(arguments.callee,B)){return this}if(typeof B=="string"){B=this.search(B)}var E={},D={};for(var C in B){var A=this.prepare(this.element,C,B[C]);E[C]=A.from;D[C]=A.to}return this.parent(E,D)}});Element.Properties.morph={set:function(A){var B=this.retrieve("morph");if(B){B.cancel()}return this.eliminate("morph").store("morph:options",$extend({link:"cancel"},A))},get:function(A){if(A||!this.retrieve("morph")){if(A||!this.retrieve("morph:options")){this.set("morph",A)}this.store("morph",new Fx.Morph(this,this.retrieve("morph:options")))}return this.retrieve("morph")}};Element.implement({morph:function(A){this.get("morph").start(A);return this}});(function(){var A=Fx.prototype.initialize;Fx.prototype.initialize=function(B){A.call(this,B);var C=this.options.transition;if(typeof C=="string"&&(C=C.split(":"))){var D=Fx.Transitions;D=D[C[0]]||D[C[0].capitalize()];if(C[1]){D=D["ease"+C[1].capitalize()+(C[2]?C[2].capitalize():"")]}this.options.transition=D}}})();Fx.Transition=function(B,A){A=$splat(A);return $extend(B,{easeIn:function(C){return B(C,A)},easeOut:function(C){return 1-B(1-C,A)},easeInOut:function(C){return(C<=0.5)?B(2*C,A)/2:(2-B(2*(1-C),A))/2}})};Fx.Transitions=new Hash({linear:$arguments(0)});Fx.Transitions.extend=function(A){for(var B in A){Fx.Transitions[B]=new Fx.Transition(A[B])}};Fx.Transitions.extend({Pow:function(B,A){return Math.pow(B,A[0]||6)},Expo:function(A){return Math.pow(2,8*(A-1))},Circ:function(A){return 1-Math.sin(Math.acos(A))},Sine:function(A){return 1-Math.sin((1-A)*Math.PI/2)},Back:function(B,A){A=A[0]||1.618;return Math.pow(B,2)*((A+1)*B-A)},Bounce:function(D){var C;for(var B=0,A=1;1;B+=A,A/=2){if(D>=(7-4*B)/11){C=-Math.pow((11-6*B-11*D)/4,2)+A*A;break}}return C},Elastic:function(B,A){return Math.pow(2,10*--B)*Math.cos(20*B*Math.PI*(A[0]||1)/3)}});["Quad","Cubic","Quart","Quint"].each(function(B,A){Fx.Transitions[B]=new Fx.Transition(function(C){return Math.pow(C,[A+2])})});var Request=new Class({Implements:[Chain,Events,Options],options:{url:"",data:"",headers:{"X-Requested-With":"XMLHttpRequest",Accept:"text/javascript, text/html, application/xml, text/xml, */*"},async:true,format:false,method:"post",link:"ignore",isSuccess:null,emulation:true,urlEncoded:true,encoding:"utf-8",evalScripts:false,evalResponse:false},initialize:function(A){this.xhr=new Browser.Request();this.setOptions(A);this.options.isSuccess=this.options.isSuccess||this.isSuccess;this.headers=new Hash(this.options.headers)},onStateChange:function(){if(this.xhr.readyState!=4||!this.running){return }this.running=false;this.status=0;$try(function(){this.status=this.xhr.status}.bind(this));if(this.options.isSuccess.call(this,this.status)){this.response={text:this.xhr.responseText,xml:this.xhr.responseXML};this.success(this.response.text,this.response.xml)}else{this.response={text:null,xml:null};this.failure()}this.xhr.onreadystatechange=$empty},isSuccess:function(){return((this.status>=200)&&(this.status<300))},processScripts:function(A){if(this.options.evalResponse||(/(ecma|java)script/).test(this.getHeader("Content-type"))){return $exec(A)}return A.stripScripts(this.options.evalScripts)},success:function(B,A){this.onSuccess(this.processScripts(B),A)},onSuccess:function(){this.fireEvent("complete",arguments).fireEvent("success",arguments).callChain()},failure:function(){this.onFailure()},onFailure:function(){this.fireEvent("complete").fireEvent("failure",this.xhr)},setHeader:function(A,B){this.headers.set(A,B);return this},getHeader:function(A){return $try(function(){return this.xhr.getResponseHeader(A)}.bind(this))},check:function(A){if(!this.running){return true}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(A.bind(this,Array.slice(arguments,1)));return false}return false},send:function(I){if(!this.check(arguments.callee,I)){return this}this.running=true;var G=$type(I);if(G=="string"||G=="element"){I={data:I}}var D=this.options;I=$extend({data:D.data,url:D.url,method:D.method},I);var E=I.data,B=I.url,A=I.method;switch($type(E)){case"element":E=$(E).toQueryString();break;case"object":case"hash":E=Hash.toQueryString(E)}if(this.options.format){var H="format="+this.options.format;E=(E)?H+"&"+E:H}if(this.options.emulation&&["put","delete"].contains(A)){var F="_method="+A;E=(E)?F+"&"+E:F;A="post"}if(this.options.urlEncoded&&A=="post"){var C=(this.options.encoding)?"; charset="+this.options.encoding:"";this.headers.set("Content-type","application/x-www-form-urlencoded"+C)}if(E&&A=="get"){B=B+(B.contains("?")?"&":"?")+E;E=null}this.xhr.open(A.toUpperCase(),B,this.options.async);this.xhr.onreadystatechange=this.onStateChange.bind(this);this.headers.each(function(K,J){if(!$try(function(){this.xhr.setRequestHeader(J,K);return true}.bind(this))){this.fireEvent("exception",[J,K])}},this);this.fireEvent("request");this.xhr.send(E);if(!this.options.async){this.onStateChange()}return this},cancel:function(){if(!this.running){return this}this.running=false;this.xhr.abort();this.xhr.onreadystatechange=$empty;this.xhr=new Browser.Request();this.fireEvent("cancel");return this}});(function(){var A={};["get","post","put","delete","GET","POST","PUT","DELETE"].each(function(B){A[B]=function(){var C=Array.link(arguments,{url:String.type,data:$defined});return this.send($extend(C,{method:B.toLowerCase()}))}});Request.implement(A)})();Element.Properties.send={set:function(A){var B=this.retrieve("send");if(B){B.cancel()}return this.eliminate("send").store("send:options",$extend({data:this,link:"cancel",method:this.get("method")||"post",url:this.get("action")},A))},get:function(A){if(A||!this.retrieve("send")){if(A||!this.retrieve("send:options")){this.set("send",A)}this.store("send",new Request(this.retrieve("send:options")))}return this.retrieve("send")}};Element.implement({send:function(A){var B=this.get("send");B.send({data:this,url:A||B.options.url});return this}});Request.HTML=new Class({Extends:Request,options:{update:false,evalScripts:true,filter:false},processHTML:function(C){var B=C.match(/<body[^>]*>([\s\S]*?)<\/body>/i);C=(B)?B[1]:C;var A=new Element("div");return $try(function(){var D="<root>"+C+"</root>",G;if(Browser.Engine.trident){G=new ActiveXObject("Microsoft.XMLDOM");G.async=false;G.loadXML(D)}else{G=new DOMParser().parseFromString(D,"text/xml")}D=G.getElementsByTagName("root")[0];for(var F=0,E=D.childNodes.length;F<E;F++){var H=Element.clone(D.childNodes[F],true,true);if(H){A.grab(H)}}return A})||A.set("html",C)},success:function(D){var C=this.options,B=this.response;B.html=D.stripScripts(function(E){B.javascript=E});var A=this.processHTML(B.html);B.tree=A.childNodes;B.elements=A.getElements("*");if(C.filter){B.tree=B.elements.filter(C.filter)}if(C.update){$(C.update).empty().adopt(B.tree)}if(C.evalScripts){$exec(B.javascript)}this.onSuccess(B.tree,B.elements,B.html,B.javascript)}});Element.Properties.load={set:function(A){var B=this.retrieve("load");if(B){send.cancel()}return this.eliminate("load").store("load:options",$extend({data:this,link:"cancel",update:this,method:"get"},A))},get:function(A){if(A||!this.retrieve("load")){if(A||!this.retrieve("load:options")){this.set("load",A)}this.store("load",new Request.HTML(this.retrieve("load:options")))}return this.retrieve("load")}};Element.implement({load:function(){this.get("load").send(Array.link(arguments,{data:Object.type,url:String.type}));return this}});Request.JSON=new Class({Extends:Request,options:{secure:true},initialize:function(A){this.parent(A);this.headers.extend({Accept:"application/json","X-Request":"JSON"})},success:function(A){this.response.json=JSON.decode(A,this.options.secure);this.onSuccess(this.response.json,A)}});Fx.Slide=new Class({Extends:Fx,options:{mode:"vertical"},initialize:function(B,A){this.addEvent("complete",function(){this.open=(this.wrapper["offset"+this.layout.capitalize()]!=0);if(this.open&&Browser.Engine.webkit419){this.element.dispose().inject(this.wrapper)}},true);this.element=this.subject=$(B);this.parent(A);var C=this.element.retrieve("wrapper");this.wrapper=C||new Element("div",{styles:$extend(this.element.getStyles("margin","position"),{overflow:"hidden"})}).wraps(this.element);this.element.store("wrapper",this.wrapper).setStyle("margin",0);this.now=[];this.open=true},vertical:function(){this.margin="margin-top";this.layout="height";this.offset=this.element.offsetHeight},horizontal:function(){this.margin="margin-left";this.layout="width";this.offset=this.element.offsetWidth},set:function(A){this.element.setStyle(this.margin,A[0]);this.wrapper.setStyle(this.layout,A[1]);return this},compute:function(E,D,C){var B=[];var A=2;A.times(function(F){B[F]=Fx.compute(E[F],D[F],C)});return B},start:function(B,E){if(!this.check(arguments.callee,B,E)){return this}this[E||this.options.mode]();var D=this.element.getStyle(this.margin).toInt();var C=this.wrapper.getStyle(this.layout).toInt();var A=[[D,C],[0,this.offset]];var G=[[D,C],[-this.offset,0]];var F;switch(B){case"in":F=A;break;case"out":F=G;break;case"toggle":F=(this.wrapper["offset"+this.layout.capitalize()]==0)?A:G}return this.parent(F[0],F[1])},slideIn:function(A){return this.start("in",A)},slideOut:function(A){return this.start("out",A)},hide:function(A){this[A||this.options.mode]();this.open=false;return this.set([-this.offset,0])},show:function(A){this[A||this.options.mode]();this.open=true;return this.set([0,this.offset])},toggle:function(A){return this.start("toggle",A)}});Element.Properties.slide={set:function(B){var A=this.retrieve("slide");if(A){A.cancel()}return this.eliminate("slide").store("slide:options",$extend({link:"cancel"},B))},get:function(A){if(A||!this.retrieve("slide")){if(A||!this.retrieve("slide:options")){this.set("slide",A)}this.store("slide",new Fx.Slide(this,this.retrieve("slide:options")))}return this.retrieve("slide")}};Element.implement({slide:function(D,E){D=D||"toggle";var B=this.get("slide"),A;switch(D){case"hide":B.hide(E);break;case"show":B.show(E);break;case"toggle":var C=this.retrieve("slide:flag",B.open);B[(C)?"slideOut":"slideIn"](E);this.store("slide:flag",!C);A=true;break;default:B.start(D,E)}if(!A){this.eliminate("slide:flag")}return this}});Fx.Scroll=new Class({Extends:Fx,options:{offset:{x:0,y:0},wheelStops:true},initialize:function(B,A){this.element=this.subject=$(B);this.parent(A);var D=this.cancel.bind(this,false);if($type(this.element)!="element"){this.element=$(this.element.getDocument().body)}var C=this.element;if(this.options.wheelStops){this.addEvent("start",function(){C.addEvent("mousewheel",D)},true);this.addEvent("complete",function(){C.removeEvent("mousewheel",D)},true)}},set:function(){var A=Array.flatten(arguments);this.element.scrollTo(A[0],A[1])},compute:function(E,D,C){var B=[];var A=2;A.times(function(F){B.push(Fx.compute(E[F],D[F],C))});return B},start:function(C,H){if(!this.check(arguments.callee,C,H)){return this}var E=this.element.getSize(),F=this.element.getScrollSize();var B=this.element.getScroll(),D={x:C,y:H};for(var G in D){var A=F[G]-E[G];if($chk(D[G])){D[G]=($type(D[G])=="number")?D[G].limit(0,A):A}else{D[G]=B[G]}D[G]+=this.options.offset[G]}return this.parent([B.x,B.y],[D.x,D.y])},toTop:function(){return this.start(false,0)},toLeft:function(){return this.start(0,false)},toRight:function(){return this.start("right",false)},toBottom:function(){return this.start(false,"bottom")},toElement:function(B){var A=$(B).getPosition(this.element);return this.start(A.x,A.y)}});Fx.Elements=new Class({Extends:Fx.CSS,initialize:function(B,A){this.elements=this.subject=$$(B);this.parent(A)},compute:function(G,H,I){var C={};for(var D in G){var A=G[D],E=H[D],F=C[D]={};for(var B in A){F[B]=this.parent(A[B],E[B],I)}}return C},set:function(B){for(var C in B){var A=B[C];for(var D in A){this.render(this.elements[C],D,A[D],this.options.unit)}}return this},start:function(C){if(!this.check(arguments.callee,C)){return this}var H={},I={};for(var D in C){var F=C[D],A=H[D]={},G=I[D]={};for(var B in F){var E=this.prepare(this.elements[D],B,F[B]);A[B]=E.from;G[B]=E.to}}return this.parent(H,I)}});var Drag=new Class({Implements:[Events,Options],options:{snap:6,unit:"px",grid:false,style:true,limit:false,handle:false,invert:false,preventDefault:false,modifiers:{x:"left",y:"top"}},initialize:function(){var B=Array.link(arguments,{options:Object.type,element:$defined});this.element=$(B.element);this.document=this.element.getDocument();this.setOptions(B.options||{});var A=$type(this.options.handle);this.handles=(A=="array"||A=="collection")?$$(this.options.handle):$(this.options.handle)||this.element;this.mouse={now:{},pos:{}};this.value={start:{},now:{}};this.selection=(Browser.Engine.trident)?"selectstart":"mousedown";this.bound={start:this.start.bind(this),check:this.check.bind(this),drag:this.drag.bind(this),stop:this.stop.bind(this),cancel:this.cancel.bind(this),eventStop:$lambda(false)};this.attach()},attach:function(){this.handles.addEvent("mousedown",this.bound.start);return this},detach:function(){this.handles.removeEvent("mousedown",this.bound.start);return this},start:function(C){if(this.options.preventDefault){C.preventDefault()}this.fireEvent("beforeStart",this.element);this.mouse.start=C.page;var A=this.options.limit;this.limit={x:[],y:[]};for(var D in this.options.modifiers){if(!this.options.modifiers[D]){continue}if(this.options.style){this.value.now[D]=this.element.getStyle(this.options.modifiers[D]).toInt()}else{this.value.now[D]=this.element[this.options.modifiers[D]]}if(this.options.invert){this.value.now[D]*=-1}this.mouse.pos[D]=C.page[D]-this.value.now[D];if(A&&A[D]){for(var B=2;B--;B){if($chk(A[D][B])){this.limit[D][B]=$lambda(A[D][B])()}}}}if($type(this.options.grid)=="number"){this.options.grid={x:this.options.grid,y:this.options.grid}}this.document.addEvents({mousemove:this.bound.check,mouseup:this.bound.cancel});this.document.addEvent(this.selection,this.bound.eventStop)},check:function(A){if(this.options.preventDefault){A.preventDefault()}var B=Math.round(Math.sqrt(Math.pow(A.page.x-this.mouse.start.x,2)+Math.pow(A.page.y-this.mouse.start.y,2)));if(B>this.options.snap){this.cancel();this.document.addEvents({mousemove:this.bound.drag,mouseup:this.bound.stop});this.fireEvent("start",this.element).fireEvent("snap",this.element)}},drag:function(A){if(this.options.preventDefault){A.preventDefault()}this.mouse.now=A.page;for(var B in this.options.modifiers){if(!this.options.modifiers[B]){continue}this.value.now[B]=this.mouse.now[B]-this.mouse.pos[B];if(this.options.invert){this.value.now[B]*=-1}if(this.options.limit&&this.limit[B]){if($chk(this.limit[B][1])&&(this.value.now[B]>this.limit[B][1])){this.value.now[B]=this.limit[B][1]}else{if($chk(this.limit[B][0])&&(this.value.now[B]<this.limit[B][0])){this.value.now[B]=this.limit[B][0]}}}if(this.options.grid[B]){this.value.now[B]-=(this.value.now[B]%this.options.grid[B])}if(this.options.style){this.element.setStyle(this.options.modifiers[B],this.value.now[B]+this.options.unit)}else{this.element[this.options.modifiers[B]]=this.value.now[B]}}this.fireEvent("drag",this.element)},cancel:function(A){this.document.removeEvent("mousemove",this.bound.check);this.document.removeEvent("mouseup",this.bound.cancel);if(A){this.document.removeEvent(this.selection,this.bound.eventStop);this.fireEvent("cancel",this.element)}},stop:function(A){this.document.removeEvent(this.selection,this.bound.eventStop);this.document.removeEvent("mousemove",this.bound.drag);this.document.removeEvent("mouseup",this.bound.stop);if(A){this.fireEvent("complete",this.element)}}});Element.implement({makeResizable:function(A){return new Drag(this,$merge({modifiers:{x:"width",y:"height"}},A))}});Drag.Move=new Class({Extends:Drag,options:{droppables:[],container:false},initialize:function(C,B){this.parent(C,B);this.droppables=$$(this.options.droppables);this.container=$(this.options.container);if(this.container&&$type(this.container)!="element"){this.container=$(this.container.getDocument().body)}C=this.element;var D=C.getStyle("position");var A=(D!="static")?D:"absolute";if(C.getStyle("left")=="auto"||C.getStyle("top")=="auto"){C.position(C.getPosition(C.offsetParent))}C.setStyle("position",A);this.addEvent("start",function(){this.checkDroppables()},true)},start:function(B){if(this.container){var D=this.element,J=this.container,E=J.getCoordinates(D.offsetParent),F={},A={};["top","right","bottom","left"].each(function(K){F[K]=J.getStyle("padding-"+K).toInt();A[K]=D.getStyle("margin-"+K).toInt()},this);var C=D.offsetWidth+A.left+A.right,I=D.offsetHeight+A.top+A.bottom;var H=[E.left+F.left,E.right-F.right-C];var G=[E.top+F.top,E.bottom-F.bottom-I];this.options.limit={x:H,y:G}}this.parent(B)},checkAgainst:function(B){B=B.getCoordinates();var A=this.mouse.now;return(A.x>B.left&&A.x<B.right&&A.y<B.bottom&&A.y>B.top)},checkDroppables:function(){var A=this.droppables.filter(this.checkAgainst,this).getLast();if(this.overed!=A){if(this.overed){this.fireEvent("leave",[this.element,this.overed])}if(A){this.overed=A;this.fireEvent("enter",[this.element,A])}else{this.overed=null}}},drag:function(A){this.parent(A);if(this.droppables.length){this.checkDroppables()}},stop:function(A){this.checkDroppables();this.fireEvent("drop",[this.element,this.overed]);this.overed=null;return this.parent(A)}});Element.implement({makeDraggable:function(A){return new Drag.Move(this,A)}});Hash.Cookie=new Class({Extends:Cookie,options:{autoSave:true},initialize:function(B,A){this.parent(B,A);this.load()},save:function(){var A=JSON.encode(this.hash);if(!A||A.length>4096){return false}if(A=="{}"){this.dispose()}else{this.write(A)}return true},load:function(){this.hash=new Hash(JSON.decode(this.read(),true));return this}});Hash.Cookie.implement((function(){var A={};Hash.each(Hash.prototype,function(C,B){A[B]=function(){var D=C.apply(this.hash,arguments);if(this.options.autoSave){this.save()}return D}});return A})());var Color=new Native({initialize:function(B,C){if(arguments.length>=3){C="rgb";B=Array.slice(arguments,0,3)}else{if(typeof B=="string"){if(B.match(/rgb/)){B=B.rgbToHex().hexToRgb(true)}else{if(B.match(/hsb/)){B=B.hsbToRgb()}else{B=B.hexToRgb(true)}}}}C=C||"rgb";switch(C){case"hsb":var A=B;B=B.hsbToRgb();B.hsb=A;break;case"hex":B=B.hexToRgb(true);break}B.rgb=B.slice(0,3);B.hsb=B.hsb||B.rgbToHsb();B.hex=B.rgbToHex();return $extend(B,this)}});Color.implement({mix:function(){var A=Array.slice(arguments);var C=($type(A.getLast())=="number")?A.pop():50;var B=this.slice();A.each(function(D){D=new Color(D);for(var E=0;E<3;E++){B[E]=Math.round((B[E]/100*(100-C))+(D[E]/100*C))}});return new Color(B,"rgb")},invert:function(){return new Color(this.map(function(A){return 255-A}))},setHue:function(A){return new Color([A,this.hsb[1],this.hsb[2]],"hsb")},setSaturation:function(A){return new Color([this.hsb[0],A,this.hsb[2]],"hsb")},setBrightness:function(A){return new Color([this.hsb[0],this.hsb[1],A],"hsb")}});function $RGB(C,B,A){return new Color([C,B,A],"rgb")}function $HSB(C,B,A){return new Color([C,B,A],"hsb")}function $HEX(A){return new Color(A,"hex")}Array.implement({rgbToHsb:function(){var B=this[0],C=this[1],J=this[2];var G,F,H;var I=Math.max(B,C,J),E=Math.min(B,C,J);var K=I-E;H=I/255;F=(I!=0)?K/I:0;if(F==0){G=0}else{var D=(I-B)/K;var A=(I-C)/K;var L=(I-J)/K;if(B==I){G=L-A}else{if(C==I){G=2+D-L}else{G=4+A-D}}G/=6;if(G<0){G++}}return[Math.round(G*360),Math.round(F*100),Math.round(H*100)]},hsbToRgb:function(){var C=Math.round(this[2]/100*255);if(this[1]==0){return[C,C,C]}else{var A=this[0]%360;var E=A%60;var F=Math.round((this[2]*(100-this[1]))/10000*255);var D=Math.round((this[2]*(6000-this[1]*E))/600000*255);var B=Math.round((this[2]*(6000-this[1]*(60-E)))/600000*255);switch(Math.floor(A/60)){case 0:return[C,B,F];case 1:return[D,C,F];case 2:return[F,C,B];case 3:return[F,D,C];case 4:return[B,F,C];case 5:return[C,F,D]}}return false}});String.implement({rgbToHsb:function(){var A=this.match(/\d{1,3}/g);return(A)?hsb.rgbToHsb():null},hsbToRgb:function(){var A=this.match(/\d{1,3}/g);return(A)?A.hsbToRgb():null}});var Group=new Class({initialize:function(){this.instances=Array.flatten(arguments);this.events={};this.checker={}},addEvent:function(B,A){this.checker[B]=this.checker[B]||{};this.events[B]=this.events[B]||[];if(this.events[B].contains(A)){return false}else{this.events[B].push(A)}this.instances.each(function(C,D){C.addEvent(B,this.check.bind(this,[B,C,D]))},this);return this},check:function(C,A,B){this.checker[C][B]=true;var D=this.instances.every(function(F,E){return this.checker[C][E]||false},this);if(!D){return }this.checker[C]={};this.events[C].each(function(E){E.call(this,this.instances,A)},this)}});var Asset=new Hash({javascript:function(F,D){D=$extend({onload:$empty,document:document,check:$lambda(true)},D);var B=new Element("script",{src:F,type:"text/javascript"});var E=D.onload.bind(B),A=D.check,G=D.document;delete D.onload;delete D.check;delete D.document;B.addEvents({load:E,readystatechange:function(){if(["loaded","complete"].contains(this.readyState)){E()}}}).setProperties(D);if(Browser.Engine.webkit419){var C=(function(){if(!$try(A)){return }$clear(C);E()}).periodical(50)}return B.inject(G.head)},css:function(B,A){return new Element("link",$merge({rel:"stylesheet",media:"screen",type:"text/css",href:B},A)).inject(document.head)},image:function(C,B){B=$merge({onload:$empty,onabort:$empty,onerror:$empty},B);var D=new Image();var A=$(D)||new Element("img");["load","abort","error"].each(function(E){var F="on"+E;var G=B[F];delete B[F];D[F]=function(){if(!D){return }if(!A.parentNode){A.width=D.width;A.height=D.height}D=D.onload=D.onabort=D.onerror=null;G.delay(1,A,A);A.fireEvent(E,A,1)}});D.src=A.src=C;if(D&&D.complete){D.onload.delay(1)}return A.setProperties(B)},images:function(D,C){C=$merge({onComplete:$empty,onProgress:$empty},C);if(!D.push){D=[D]}var A=[];var B=0;D.each(function(F){var E=new Asset.image(F,{onload:function(){C.onProgress.call(this,B,D.indexOf(F));B++;if(B==D.length){C.onComplete()}}});A.push(E)});return new Elements(A)}});var Sortables=new Class({Implements:[Events,Options],options:{snap:4,opacity:1,clone:false,revert:false,handle:false,constrain:false},initialize:function(A,B){this.setOptions(B);this.elements=[];this.lists=[];this.idle=true;this.addLists($$($(A)||A));if(!this.options.clone){this.options.revert=false}if(this.options.revert){this.effect=new Fx.Morph(null,$merge({duration:250,link:"cancel"},this.options.revert))}},attach:function(){this.addLists(this.lists);return this},detach:function(){this.lists=this.removeLists(this.lists);return this},addItems:function(){Array.flatten(arguments).each(function(A){this.elements.push(A);var B=A.retrieve("sortables:start",this.start.bindWithEvent(this,A));(this.options.handle?A.getElement(this.options.handle)||A:A).addEvent("mousedown",B)},this);return this},addLists:function(){Array.flatten(arguments).each(function(A){this.lists.push(A);this.addItems(A.getChildren())},this);return this},removeItems:function(){var A=[];Array.flatten(arguments).each(function(B){A.push(B);this.elements.erase(B);var C=B.retrieve("sortables:start");(this.options.handle?B.getElement(this.options.handle)||B:B).removeEvent("mousedown",C)},this);return $$(A)},removeLists:function(){var A=[];Array.flatten(arguments).each(function(B){A.push(B);this.lists.erase(B);this.removeItems(B.getChildren())},this);return $$(A)},getClone:function(B,A){if(!this.options.clone){return new Element("div").inject(document.body)}if($type(this.options.clone)=="function"){return this.options.clone.call(this,B,A,this.list)}return A.clone(true).setStyles({margin:"0px",position:"absolute",visibility:"hidden",width:A.getStyle("width")}).inject(this.list).position(A.getPosition(A.getOffsetParent()))},getDroppables:function(){var A=this.list.getChildren();if(!this.options.constrain){A=this.lists.concat(A).erase(this.list)}return A.erase(this.clone).erase(this.element)},insert:function(C,B){var A="inside";if(this.lists.contains(B)){this.list=B;this.drag.droppables=this.getDroppables()}else{A=this.element.getAllPrevious().contains(B)?"before":"after"}this.element.inject(B,A);this.fireEvent("sort",[this.element,this.clone])},start:function(B,A){if(!this.idle){return }this.idle=false;this.element=A;this.opacity=A.get("opacity");this.list=A.getParent();this.clone=this.getClone(B,A);this.drag=new Drag.Move(this.clone,{snap:this.options.snap,container:this.options.constrain&&this.element.getParent(),droppables:this.getDroppables(),onSnap:function(){B.stop();this.clone.setStyle("visibility","visible");this.element.set("opacity",this.options.opacity||0);this.fireEvent("start",[this.element,this.clone])}.bind(this),onEnter:this.insert.bind(this),onCancel:this.reset.bind(this),onComplete:this.end.bind(this)});this.clone.inject(this.element,"before");this.drag.start(B)},end:function(){this.drag.detach();this.element.set("opacity",this.opacity);if(this.effect){var A=this.element.getStyles("width","height");var B=this.clone.computePosition(this.element.getPosition(this.clone.offsetParent));this.effect.element=this.clone;this.effect.start({top:B.top,left:B.left,width:A.width,height:A.height,opacity:0.25}).chain(this.reset.bind(this))}else{this.reset()}},reset:function(){this.idle=true;this.clone.destroy();this.fireEvent("complete",this.element)},serialize:function(){var C=Array.link(arguments,{modifier:Function.type,index:$defined});var B=this.lists.map(function(D){return D.getChildren().map(C.modifier||function(E){return E.get("id")},this)},this);var A=C.index;if(this.lists.length==1){A=0}return $chk(A)&&A>=0&&A<this.lists.length?B[A]:B}});var Tips=new Class({Implements:[Events,Options],options:{onShow:function(A){A.setStyle("visibility","visible")},onHide:function(A){A.setStyle("visibility","hidden")},showDelay:100,hideDelay:100,className:null,offsets:{x:16,y:16},fixed:false},initialize:function(){var C=Array.link(arguments,{options:Object.type,elements:$defined});this.setOptions(C.options||null);this.tip=new Element("div").inject(document.body);if(this.options.className){this.tip.addClass(this.options.className)}var B=new Element("div",{"class":"tip-top"}).inject(this.tip);this.container=new Element("div",{"class":"tip"}).inject(this.tip);var A=new Element("div",{"class":"tip-bottom"}).inject(this.tip);this.tip.setStyles({position:"absolute",top:0,left:0,visibility:"hidden"});if(C.elements){this.attach(C.elements)}},attach:function(A){$$(A).each(function(D){var G=D.retrieve("tip:title",D.get("title"));var F=D.retrieve("tip:text",D.get("rel")||D.get("href"));var E=D.retrieve("tip:enter",this.elementEnter.bindWithEvent(this,D));var C=D.retrieve("tip:leave",this.elementLeave.bindWithEvent(this,D));D.addEvents({mouseenter:E,mouseleave:C});if(!this.options.fixed){var B=D.retrieve("tip:move",this.elementMove.bindWithEvent(this,D));D.addEvent("mousemove",B)}D.store("tip:native",D.get("title"));D.erase("title")},this);return this},detach:function(A){$$(A).each(function(C){C.removeEvent("mouseenter",C.retrieve("tip:enter")||$empty);C.removeEvent("mouseleave",C.retrieve("tip:leave")||$empty);C.removeEvent("mousemove",C.retrieve("tip:move")||$empty);C.eliminate("tip:enter").eliminate("tip:leave").eliminate("tip:move");var B=C.retrieve("tip:native");if(B){C.set("title",B)}});return this},elementEnter:function(B,A){$A(this.container.childNodes).each(Element.dispose);var D=A.retrieve("tip:title");if(D){this.titleElement=new Element("div",{"class":"tip-title"}).inject(this.container);this.fill(this.titleElement,D)}var C=A.retrieve("tip:text");if(C){this.textElement=new Element("div",{"class":"tip-text"}).inject(this.container);this.fill(this.textElement,C)}this.timer=$clear(this.timer);this.timer=this.show.delay(this.options.showDelay,this);this.position((!this.options.fixed)?B:{page:A.getPosition()})},elementLeave:function(A){$clear(this.timer);this.timer=this.hide.delay(this.options.hideDelay,this)},elementMove:function(A){this.position(A)},position:function(D){var B=window.getSize(),A=window.getScroll();var E={x:this.tip.offsetWidth,y:this.tip.offsetHeight};var C={x:"left",y:"top"};for(var F in C){var G=D.page[F]+this.options.offsets[F];if((G+E[F]-A[F])>B[F]){G=D.page[F]-this.options.offsets[F]-E[F]}this.tip.setStyle(C[F],G)}},fill:function(A,B){(typeof B=="string")?A.set("html",B):A.adopt(B)},show:function(){this.fireEvent("show",this.tip)},hide:function(){this.fireEvent("hide",this.tip)}});var SmoothScroll=new Class({Extends:Fx.Scroll,initialize:function(B,C){C=C||document;var E=C.getDocument(),D=C.getWindow();this.parent(E,B);this.links=(this.options.links)?$$(this.options.links):$$(E.links);var A=D.location.href.match(/^[^#]*/)[0]+"#";this.links.each(function(G){if(G.href.indexOf(A)!=0){return }var F=G.href.substr(A.length);if(F&&$(F)){this.useLink(G,F)}},this);if(!Browser.Engine.webkit419){this.addEvent("complete",function(){D.location.hash=this.anchor},true)}},useLink:function(B,A){B.addEvent("click",function(C){this.anchor=A;this.toElement(A);C.stop()}.bind(this))}});var Slider=new Class({Implements:[Events,Options],options:{onTick:function(A){if(this.options.snap){A=this.toPosition(this.step)}this.knob.setStyle(this.property,A)},snap:false,offset:0,range:false,wheel:false,steps:100,mode:"horizontal"},initialize:function(E,A,D){this.setOptions(D);this.element=$(E);this.knob=$(A);this.previousChange=this.previousEnd=this.step=-1;this.element.addEvent("mousedown",this.clickedElement.bind(this));if(this.options.wheel){this.element.addEvent("mousewheel",this.scrolledElement.bindWithEvent(this))}var F,B={},C={x:false,y:false};switch(this.options.mode){case"vertical":this.axis="y";this.property="top";F="offsetHeight";break;case"horizontal":this.axis="x";this.property="left";F="offsetWidth"}this.half=this.knob[F]/2;this.full=this.element[F]-this.knob[F]+(this.options.offset*2);this.min=$chk(this.options.range[0])?this.options.range[0]:0;this.max=$chk(this.options.range[1])?this.options.range[1]:this.options.steps;this.range=this.max-this.min;this.steps=this.options.steps||this.full;this.stepSize=Math.abs(this.range)/this.steps;this.stepWidth=this.stepSize*this.full/Math.abs(this.range);this.knob.setStyle("position","relative").setStyle(this.property,-this.options.offset);C[this.axis]=this.property;B[this.axis]=[-this.options.offset,this.full-this.options.offset];this.drag=new Drag(this.knob,{snap:0,limit:B,modifiers:C,onDrag:this.draggedKnob.bind(this),onStart:this.draggedKnob.bind(this),onComplete:function(){this.draggedKnob();this.end()}.bind(this)});if(this.options.snap){this.drag.options.grid=Math.ceil(this.stepWidth);this.drag.options.limit[this.axis][1]=this.full}},set:function(A){if(!((this.range>0)^(A<this.min))){A=this.min}if(!((this.range>0)^(A>this.max))){A=this.max}this.step=Math.round(A);this.checkStep();this.end();this.fireEvent("tick",this.toPosition(this.step));return this},clickedElement:function(C){var B=this.range<0?-1:1;var A=C.page[this.axis]-this.element.getPosition()[this.axis]-this.half;A=A.limit(-this.options.offset,this.full-this.options.offset);this.step=Math.round(this.min+B*this.toStep(A));this.checkStep();this.end();this.fireEvent("tick",A)},scrolledElement:function(A){var B=(this.options.mode=="horizontal")?(A.wheel<0):(A.wheel>0);this.set(B?this.step-this.stepSize:this.step+this.stepSize);A.stop()},draggedKnob:function(){var B=this.range<0?-1:1;var A=this.drag.value.now[this.axis];A=A.limit(-this.options.offset,this.full-this.options.offset);this.step=Math.round(this.min+B*this.toStep(A));this.checkStep()},checkStep:function(){if(this.previousChange!=this.step){this.previousChange=this.step;this.fireEvent("change",this.step)}},end:function(){if(this.previousEnd!==this.step){this.previousEnd=this.step;this.fireEvent("complete",this.step+"")}},toStep:function(A){var B=(A+this.options.offset)*this.stepSize/this.full*this.steps;return this.options.steps?Math.round(B-=B%this.stepSize):B},toPosition:function(A){return(this.full*Math.abs(this.min-A))/(this.steps*this.stepSize)-this.options.offset}});var Scroller=new Class({Implements:[Events,Options],options:{area:20,velocity:1,onChange:function(A,B){this.element.scrollTo(A,B)}},initialize:function(B,A){this.setOptions(A);this.element=$(B);this.listener=($type(this.element)!="element")?$(this.element.getDocument().body):this.element;this.timer=null;this.coord=this.getCoords.bind(this)},start:function(){this.listener.addEvent("mousemove",this.coord)},stop:function(){this.listener.removeEvent("mousemove",this.coord);this.timer=$clear(this.timer)},getCoords:function(A){this.page=(this.listener.get("tag")=="body")?A.client:A.page;if(!this.timer){this.timer=this.scroll.periodical(50,this)}},scroll:function(){var B=this.element.getSize(),A=this.element.getScroll(),E=this.element.getPosition(),D={x:0,y:0};for(var C in this.page){if(this.page[C]<(this.options.area+E[C])&&A[C]!=0){D[C]=(this.page[C]-this.options.area-E[C])*this.options.velocity}else{if(this.page[C]+this.options.area>(B[C]+E[C])&&B[C]+B[C]!=A[C]){D[C]=(this.page[C]-B[C]+this.options.area-E[C])*this.options.velocity}}}if(D.y||D.x){this.fireEvent("change",[A.x+D.x,A.y+D.y])}}});var Accordion=new Class({Extends:Fx.Elements,options:{display:0,show:false,height:true,width:false,opacity:true,fixedHeight:false,fixedWidth:false,wait:false,alwaysHide:false},initialize:function(){var C=Array.link(arguments,{container:Element.type,options:Object.type,togglers:$defined,elements:$defined});this.parent(C.elements,C.options);this.togglers=$$(C.togglers);this.container=$(C.container);this.previous=-1;if(this.options.alwaysHide){this.options.wait=true}if($chk(this.options.show)){this.options.display=false;this.previous=this.options.show}if(this.options.start){this.options.display=false;this.options.show=false}this.effects={};if(this.options.opacity){this.effects.opacity="fullOpacity"}if(this.options.width){this.effects.width=this.options.fixedWidth?"fullWidth":"offsetWidth"}if(this.options.height){this.effects.height=this.options.fixedHeight?"fullHeight":"scrollHeight"}for(var B=0,A=this.togglers.length;B<A;B++){this.addSection(this.togglers[B],this.elements[B])}this.elements.each(function(E,D){if(this.options.show===D){this.fireEvent("active",[this.togglers[D],E])}else{for(var F in this.effects){E.setStyle(F,0)}}},this);if($chk(this.options.display)){this.display(this.options.display)}},addSection:function(E,C,G){E=$(E);C=$(C);var F=this.togglers.contains(E);var B=this.togglers.length;this.togglers.include(E);this.elements.include(C);if(B&&(!F||G)){G=$pick(G,B-1);E.inject(this.togglers[G],"before");C.inject(E,"after")}else{if(this.container&&!F){E.inject(this.container);C.inject(this.container)}}var A=this.togglers.indexOf(E);E.addEvent("click",this.display.bind(this,A));if(this.options.height){C.setStyles({"padding-top":0,"border-top":"none","padding-bottom":0,"border-bottom":"none"})}if(this.options.width){C.setStyles({"padding-left":0,"border-left":"none","padding-right":0,"border-right":"none"})}C.fullOpacity=1;if(this.options.fixedWidth){C.fullWidth=this.options.fixedWidth}if(this.options.fixedHeight){C.fullHeight=this.options.fixedHeight}C.setStyle("overflow","hidden");if(!F){for(var D in this.effects){C.setStyle(D,0)}}return this},display:function(A){A=($type(A)=="element")?this.elements.indexOf(A):A;if((this.timer&&this.options.wait)||(A===this.previous&&!this.options.alwaysHide)){return this}this.previous=A;var B={};this.elements.each(function(E,D){B[D]={};var C=(D!=A)||(this.options.alwaysHide&&(E.offsetHeight>0));this.fireEvent(C?"background":"active",[this.togglers[D],E]);for(var F in this.effects){B[D][F]=C?0:E[this.effects[F]]}},this);return this.start(B)}});window.addEvent("load",function(){if(!("console" in window)||!("firebug" in window.console)){var B=["log","debug","info","warn","error","assert","dir","dirxml","group","groupEnd","time","timeEnd","count","trace","profile","profileEnd"];window.console={};for(var A=0;A<B.length;++A){window.console[B[A]]=function(){}}}});(function(){var A=navigator.userAgent.toLowerCase();var B=A.indexOf("msie")>-1,D=A.indexOf("msie 7")>-1;if(B&&!D){try{document.execCommand("BackgroundImageCache",false,true)}catch(C){}}})();if(typeof Jx=="undefined"){var Jx={};(function(){var C=document.getElementsByTagName("SCRIPT");for(var A=0;A<C.length;A++){var B=C[A].src;var D=/(.*)(js|lib\/)jxlib(.*)/.exec(B);if(D&&D[0]){Jx.aPixel=document.createElement("img");Jx.aPixel.src=D[1]+"/images/a_pixel.png";Jx.baseURL=Jx.aPixel.src.substring(0,Jx.aPixel.src.indexOf("images/a_pixel.png"))}}})()}Jx.applyPNGFilter=function(C){var A=Jx.baseURL+"images/a_pixel.png";if(C.src!=A){var B=C.src;C.src=A;C.runtimeStyle.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+B+"',sizingMethod='scale')"}};Jx.imgQueue=[];Jx.imgLoaded={};Jx.imagesLoading=0;Jx.addToImgQueue=function(A){if(Jx.imgLoaded[A.src]){A.element.src=A.src}else{Jx.imgQueue.push(A);Jx.imgLoaded[A.src]=true}Jx.checkImgQueue()};Jx.checkImgQueue=function(){while(Jx.imagesLoading<2&&Jx.imgQueue.length>0){Jx.loadNextImg()}};Jx.loadNextImg=function(){var A=Jx.imgQueue.shift();if(A){++Jx.imagesLoading;A.element.onload=function(){--Jx.imagesLoading;Jx.checkImgQueue()};A.element.onerror=function(){--Jx.imagesLoading;Jx.checkImgQueue()};A.element.src=A.src}};Jx.createIframeShim=function(){return new Element("iframe",{"class":"jxIframeShim",scrolling:"no",frameborder:0})};Jx.UniqueId=new Class({uniqueIdRefs:null,initUniqueId:function(){this.uniqueIdRefs=[]},deregisterIds:function(){this.uniqueIdRefs=[]},registerIds:function(C,A){if(C.indexOf(A.id)!=-1){this.uniqueIdRefs[A.id]=A}for(var B=0;B<A.childNodes.length;B++){this.registerIds(C,A.childNodes[B])}},getObj:function(A){return this.uniqueIdRefs[A]||null}});Element.implement({getBoxSizing:function(){var B="content-box";if(Browser.Engine.trident||Browser.Engine.presto){var A=document.compatMode;if(A=="BackCompat"||A=="QuirksMode"){B="border-box"}else{B="content-box"}}else{if(arguments.length==0){node=document.documentElement}var C=this.getStyle("-moz-box-sizing");if(!C){C=this.getStyle("box-sizing")}B=(C?C:"content-box")}return B},getContentBoxSize:function(){var A=this.offsetWidth;var C=this.offsetHeight;var D=this.getPaddingSize();var B=this.getBorderSize();A=A-D.left-D.right-B.left-B.right;C=C-D.bottom-D.top-B.bottom-B.top;return{width:A,height:C}},getBorderBoxSize:function(){var A=this.offsetWidth;var B=this.offsetHeight;return{width:A,height:B}},getMarginBoxSize:function(){var C=this.getMarginSize();var A=this.offsetWidth+C.left+C.right;var B=this.offsetHeight+C.top+C.bottom;return{width:A,height:B}},setContentBoxSize:function(C){if(this.getBoxSizing()=="border-box"){var E=this.getPaddingSize();var B=this.getBorderSize();if(typeof C.width!="undefined"){var D=(C.width+E.left+E.right+B.left+B.right);if(D<0){D=0}this.style.width=D+"px"}if(typeof C.height!="undefined"){var A=(C.height+E.top+E.bottom+B.top+B.bottom);if(A<0){A=0}this.style.height=A+"px"}}else{if(typeof C.width!="undefined"){this.style.width=C.width+"px"}if(typeof C.height!="undefined"){this.style.height=C.height+"px"}}},setBorderBoxSize:function(C){if(this.getBoxSizing()=="content-box"){var F=this.getPaddingSize();var B=this.getBorderSize();var E=this.getMarginSize();if(typeof C.width!="undefined"){var D=(C.width-F.left-F.right-B.left-B.right-E.left-E.right);if(D<0){D=0}this.style.width=D+"px"}if(typeof C.height!="undefined"){var A=(C.height-F.top-F.bottom-B.top-B.bottom-E.top-E.bottom);if(A<0){A=0}this.style.height=A+"px"}}else{if(typeof C.width!="undefined"&&C.width>=0){this.style.width=C.width+"px"}if(typeof C.height!="undefined"&&C.height>=0){this.style.height=C.height+"px"}}},getPaddingSize:function(){var B=this.getNumber(this.getStyle("padding-left"));var C=this.getNumber(this.getStyle("padding-top"));var D=this.getNumber(this.getStyle("padding-right"));var A=this.getNumber(this.getStyle("padding-bottom"));return{left:B,top:C,right:D,bottom:A}},getBorderSize:function(){var B=this.getNumber(this.getStyle("border-left-width"));var C=this.getNumber(this.getStyle("border-top-width"));var D=this.getNumber(this.getStyle("border-right-width"));var A=this.getNumber(this.getStyle("border-bottom-width"));return{left:B,top:C,right:D,bottom:A}},getMarginSize:function(){var B=this.getNumber(this.getStyle("margin-left"));var C=this.getNumber(this.getStyle("margin-top"));var D=this.getNumber(this.getStyle("margin-right"));var A=this.getNumber(this.getStyle("margin-bottom"));return{left:B,top:C,right:D,bottom:A}},getNumber:function(B){var A=B==null||isNaN(parseInt(B))?0:parseInt(B);return A},getPageDimensions:function(){return{width:window.getWidth(),height:window.getHeight()}},descendantOf:function(B){var A=$(this.parentNode);if(A==B){return true}else{if(!A||!A.parentNode){return null}else{if(A.parentNode===A){return null}else{return A.descendantOf(B)}}}},findElement:function(B){if(this.tagName==B){return this}var A=$(this.parentNode);if(A){if(A.tagName==B){return A}else{if(!A.parentNode||A.parentNode==A){return null}else{return A.findElement(B)}}}else{return null}}});Jx.ContentLoader=new Class({contentIsLoaded:false,loadContent:function(A){A=$(A);if(this.options.content){var B;if(this.options.content.domObj){B=$(this.options.content.domObj)}else{B=$(this.options.content)}if(B){A.appendChild(B);this.contentIsLoaded=true}else{A.innerHTML=this.options.content;this.contentIsLoaded=true}}else{if(this.options.contentURL){this.contentIsLoaded=false;new Request({url:this.options.contentURL,method:"get",update:A,onSuccess:(function(C){A.innerHTML=C;this.contentIsLoaded=true;this.fireEvent("contentLoaded",this)}).bind(this),onFailure:(function(){this.contentIsLoaded=true;this.fireEvent("contentLoadFailed",this)}).bind(this),headers:{"If-Modified-Since":"Sat, 1 Jan 2000 00:00:00 GMT"}}).send()}else{this.contentIsLoaded=true}}if(this.contentIsLoaded){this.fireEvent("contentLoaded",this)}},processContent:function(A){$A(A.childNodes).each(function(B){if(B.tagName=="INPUT"||B.tagName=="SELECT"||B.tagName=="TEXTAREA"){if(B.type=="button"){B.addEvent("click",function(){this.fireEvent("click",this,B)})}else{B.addEvent("change",function(){this.fireEvent("change",B)})}}else{if(B.childNodes){this.processContent(B)}}},this)}});Jx.AutoPosition=new Class({position:function(F,C,N){F=$(F);C=$(C);var B=$splat(N.horizontal||["center center"]);var G=$splat(N.vertical||["center center"]);var E=$merge({top:0,right:0,bottom:0,left:0},N.offsets||{});var I;if(!$(F.parentNode)||F.parentNode==document.body){I=Element.getPageDimensions()}else{I=$(F.parentNode).getContentBoxSize()}var K=C.getCoordinates();var M=F.getMarginBoxSize();var D;var L;var J;var A;if(!B.some(function(O){var P=O.split(" ");if(P.length!=2){return false}if(!isNaN(parseInt(P[0]))){D=parseInt(P[0])}else{switch(P[0]){case"right":D=K.left+K.width;break;case"center":D=K.left+Math.round(K.width/2);break;case"left":default:D=K.left}}switch(P[1]){case"left":D-=E.left;L=D+M.width;break;case"right":D+=E.right;L=D;D=D-M.width;break;case"center":default:D=D-Math.round(M.width/2);L=D+M.width}return(D>=0&&L<=I.width)})){if(L>I.width){D=I.width-M.width}if(D<0){D=0}}F.setStyle("left",D);if(!G.some(function(O){var P=O.split(" ");if(P.length!=2){return false}if(!isNaN(parseInt(P[0]))){J=parseInt(P[0])}else{switch(P[0]){case"bottom":J=K.top+K.height;break;case"center":J=K.top+Math.round(K.height/2);break;case"top":default:J=K.top}}switch(P[1]){case"top":J-=E.top;A=J+M.height;break;case"bottom":J+=E.bottom;A=J;J=J-M.height;break;case"center":default:J=J-Math.round(M.height/2);A=J+M.height}return(J>=0&&A<=I.height)})){if(A>I.height){J=I.height-M.height}if(J<0){J=0}}F.setStyle("top",J);var H=F.retrieve("jxLayout");if(H){H.options.left=D;H.options.top=J}}});Jx.Chrome=new Class({chrome:null,makeChrome:function(A){var C=new Element("div",{"class":"jxChrome"});A.adopt(C);this.chromeOffsets=C.getPaddingSize();C.setStyle("padding",0);var B=C.getStyle("backgroundImage");if(!B.contains("http://")){B=null}else{B=B.slice(4,-1);if(B.charAt(0)=='"'){B=B.slice(1,-1)}C.setStyle("backgroundImage","none");["TL","TR","BL","BR"].each(function(D){C.adopt(new Element("div",{"class":"jxChrome"+D}).adopt(new Element("img",{src:B})))},this)}if(!window.opera){C.adopt(Jx.createIframeShim())}C.dispose();this.chrome=C},showChrome:function(A){A=$(A);if(!this.chrome){this.makeChrome(A)}if(A&&this.chrome.parentNode!==A){A.adopt(this.chrome)}},hideChrome:function(){if(this.chrome){this.chrome.dispose()}}});Jx.Button=new Class({Implements:[Options,Events],domObj:null,options:{id:"",type:"Button",image:"",tooltip:"",label:"",enabled:true,toggle:false,toggleClass:"Toggle",halign:"center",valign:"middle",isActive:false,container:"div"},initialize:function(B){this.setOptions(B);var E=new Element(this.options.container,{"class":"jx"+this.options.type+"Container"});if(this.options.toggle&&this.options.toggleClass){E.addClass("jx"+this.options.type+this.options.toggleClass)}var A=new Element("a",{"class":"jx"+this.options.type,href:"javascript:void(0)",title:this.options.tooltip,alt:this.options.tooltip,events:{click:this.clicked.bindWithEvent(this)}});if(this.options.isActive){A.addClass("jx"+this.options.type+"Active")}E.appendChild(A);var D=new Element("span",{"class":"jx"+this.options.type+"Content"});A.appendChild(D);if(this.options.image||!this.options.label){var C=new Element("img",{"class":"jx"+this.options.type+"Icon",src:Jx.aPixel.src});if(this.options.image.indexOf("a_pixel.png")==-1){C.setStyle("backgroundImage","url("+this.options.image+")")}D.appendChild(C);if(this.options.imageClass){C.addClass(this.options.imageClass)}}l=new Element("span",{html:this.options.label});if(this.options.label){l.addClass("jx"+this.options.type+"Label")}D.appendChild(l);if(this.options.id){E.id=this.options.id}if(this.options.halign=="left"){E.addClass("jx"+this.options.type+"ContentLeft")}if(this.options.valign=="top"){E.addClass("jx"+this.options.type+"ContentTop")}this.domA=A;this.domLabel=l;this.domObj=E;this.setEnabled(this.options.enabled)},clicked:function(A){if(this.options.enabled){if(this.options.toggle){this.setActive(!this.options.isActive)}else{this.fireEvent("click",{obj:this,event:A})}}},setEnabled:function(A){this.options.enabled=A;if(this.options.enabled){this.domObj.removeClass("jx"+this.options.type+"Disabled")}else{this.domObj.addClass("jx"+this.options.type+"Disabled")}},isActive:function(){return this.options.isActive},setActive:function(A){if(this.options.isActive==A){return }this.options.isActive=A;if(this.options.isActive){this.domA.addClass("jx"+this.options.type+"Active");this.fireEvent("down",this)}else{this.domA.removeClass("jx"+this.options.type+"Active");this.fireEvent("up",this)}},setImage:function(A){if(this.domImg){this.domImg.set("src",A)}},setLabel:function(A){if(this.domLabel){this.domLabel.set("html",A)}},setTooltip:function(A){if(this.domImg){this.domImg.set({title:A,alt:A})}},addTo:function(B,A){B=$(B);A=A?$(A):null;if(A&&A.parentNode==B){B.insertBefore(this.domObj,A)}else{B.appendChild(this.domObj)}}});Jx.Button.Flyout=new Class({Extends:Jx.Button,Implements:[Jx.ContentLoader,Jx.AutoPosition,Jx.Chrome],content:null,initialize:function(A){if(!Jx.Button.Flyout.Stack){Jx.Button.Flyout.Stack=[]}this.parent(A);this.domA.addClass("jx"+this.options.type+"Flyout");this.contentContainer=new Element("div",{"class":"jxFlyout"});this.content=new Element("div",{"class":"jxFlyoutContent"});this.contentContainer.adopt(this.content);this.content.store("jxFlyout",this);this.loadContent(this.content);this.keypressWatcher=this.keypressHandler.bindWithEvent(this);this.hideWatcher=this.clickHandler.bindWithEvent(this)},clicked:function(C){if(!this.owner){this.owner=document.body;var B=$(this.domObj.parentNode);while(B!=document.body&&this.owner==document.body){var A=B.retrieve("jxFlyout");if(A){this.owner=A;break}else{B=$(B.parentNode)}}}if(Jx.Button.Flyout.Stack[Jx.Button.Flyout.Stack.length-1]==this){this.hide();return }else{if(this.owner!=document.body){if(this.owner.currentFlyout==this){this.hide();return }else{if(this.owner.currentFlyout){this.owner.currentFlyout.hide()}}this.owner.currentFlyout=this}else{while(Jx.Button.Flyout.Stack.length){Jx.Button.Flyout.Stack[Jx.Button.Flyout.Stack.length-1].hide()}}}Jx.Button.Flyout.Stack.push(this);this.options.isActive=true;this.domA.addClass("jx"+this.options.type+"Active");this.contentContainer.setStyle("visibility","hidden");document.body.adopt(this.contentContainer);this.showChrome(this.contentContainer);this.position(this.contentContainer,this.domObj,{horizontal:["left left","right right"],vertical:["bottom top","top bottom"],offsets:this.chromeOffsets});this.contentContainer.setStyle("visibility","");window.addEvent("keypress",this.keypressWatcher);document.addEvent("click",this.hideWatcher);this.fireEvent("open",this)},hide:function(){if(this.owner!=document.body){this.owner.currentFlyout=null}Jx.Button.Flyout.Stack.pop();this.setActive(false);this.contentContainer.dispose();window.removeEvent("keypress",this.keypressWatcher);document.removeEvent("click",this.hideWatcher);this.fireEvent("close",this)},clickHandler:function(B){B=new Event(B);var C=$(B.target);var A=Jx.Button.Flyout.Stack[Jx.Button.Flyout.Stack.length-1];if(!C.descendantOf(A.content)&&!C.descendantOf(A.domObj)){A.hide()}},keypressHandler:function(A){A=new Event(A);if(A.key=="esc"){Jx.Button.Flyout.Stack[Jx.Button.Flyout.Stack.length-1].hide()}}});Jx.Button.Multi=new Class({activeButton:null,buttons:null,initialize:function(){this.buttons=[];var A=new Element("div");this.tb=new Jx.Toolbar({parent:A,position:"right"});this.flyout=new Jx.Button.Flyout({content:A});this.flyout.domObj.firstChild.addClass("jxButtonMulti");this.domObj=new Element("div",{"class":"jxButtonMultiContainer"});this.domObj.grab(this.flyout.domObj)},add:function(){$A(arguments).each(function(B){if(!B instanceof Jx.Button){return }this.buttons.push(B);var A=new Jx.Button($merge(B.options,{onClick:this.setButton.bind(this,B)}));B.multiButton=A;this.tb.add(A);if(!this.activeButton){this.domObj.grab(B.domObj,"top");this.activeButton=B}},this)},remove:function(A){if(!A||!A.multiButton){return }if(this.tb.remove(A.multiButton)){A.multiButton=null;if(this.activeButton==A){if(!this.buttons.some(function(B){if(B!=A){this.setActiveButton(B);return true}else{return false}},this)){this.setActiveButton(null)}}this.flyout.content.style.height="";this.flyout.content.style.width="";this.buttons.erase(A)}},addTo:function(B,A){B=$(B);A=A?$(A):null;if(A&&A.parentNode==B){B.grab(this.domObj,"top")}else{B.adopt(this.domObj)}},setActiveButton:function(A){if(this.activeButton){this.activeButton.domObj.dispose()}if(A&&A.domObj){this.domObj.grab(A.domObj,"top")}this.activeButton=A},setButton:function(A){this.setActiveButton(A);A.clicked();this.flyout.hide()}});Jx.ColorPalette=new Class({Implements:[Options,Events],domObj:null,options:{color:"#000000",alpha:1},hexColors:["00","33","66","99","CC","FF"],initialize:function(C){this.setOptions(C);this.domObj=new Element("div",{id:this.options.id,"class":"jxColorPalette"});var H=new Element("div",{"class":"jxColorBar"});var Q=new Element("div",{"class":"jxColorPreview"});this.selectedSwatch=new Element("div",{"class":"jxColorSelected"});this.previewSwatch=new Element("div",{"class":"jxColorHover"});Q.adopt(this.selectedSwatch);Q.adopt(this.previewSwatch);H.adopt(Q);this.colorInputLabel=new Element("label",{"class":"jxColorLabel",html:"#"});H.adopt(this.colorInputLabel);var K=this.changed.bind(this);this.colorInput=new Element("input",{"class":"jxHexInput",type:"text",maxLength:6,events:{keyup:K,blur:K,change:K}});H.adopt(this.colorInput);this.alphaLabel=new Element("label",{"class":"jxAlphaLabel",html:"alpha (%)"});H.adopt(this.alphaLabel);this.alphaInput=new Element("input",{"class":"jxAlphaInput",type:"text",maxLength:3,events:{keyup:this.alphaChanged.bind(this)}});H.adopt(this.alphaInput);this.domObj.adopt(H);Q=new Element("div",{"class":"jxClearer"});this.domObj.adopt(Q);var I=this.swatchClick.bindWithEvent(this);var G=this.swatchOver.bindWithEvent(this);var P=new Element("table",{"class":"jxColorGrid"});var A=new Element("tbody");P.adopt(A);for(var N=0;N<12;N++){var B=new Element("tr");for(var L=-3;L<18;L++){var F=false;var J,O,R;if(L<0){if(L==-3||L==-1){J=O=R=0;F=true}else{if(N<6){J=O=R=N}else{if(N==6){J=5;O=0;R=0}else{if(N==7){J=0;O=5;R=0}else{if(N==8){J=0;O=0;R=5}else{if(N==9){J=5;O=5;R=0}else{if(N==10){J=0;O=5;R=5}else{if(N==11){J=5;O=0;R=5}}}}}}}}}else{J=parseInt(N/6)*3+parseInt(L/6);O=L%6;R=N%6}var D="#"+this.hexColors[J]+this.hexColors[O]+this.hexColors[R];var E=new Element("td");if(!F){E.setStyle("backgroundColor",D);var S=new Element("a",{"class":"colorSwatch "+(((J>2&&O>2)||(J>2&&R>2)||(O>2&&R>2))?"borderBlack":"borderWhite"),href:"#",title:D,alt:D,events:{mouseover:G,click:I}});S.store("swatchColor",D);E.adopt(S)}else{var M=new Element("span",{"class":"emptyCell"});E.adopt(M)}B.adopt(E)}A.adopt(B)}this.domObj.adopt(P);this.updateSelected()},swatchOver:function(B){var A=B.target;this.previewSwatch.setStyle("backgroundColor",A.retrieve("swatchColor"))},swatchClick:function(B){var A=B.target;this.options.color=A.retrieve("swatchColor");this.updateSelected();this.fireEvent("click",this)},changed:function(){var A=this.colorInput.value;if(A.substring(0,1)=="#"){A=A.substring(1)}if(A.toLowerCase().match(/^[0-9a-f]{6}$/)){this.options.color="#"+A.toUpperCase();this.updateSelected()}},alphaChanged:function(){var A=this.alphaInput.value;if(A.match(/^[0-9]{1,3}$/)){this.options.alpha=parseFloat(A/100);this.updateSelected()}},setColor:function(A){this.colorInput.value=A;this.changed()},setAlpha:function(A){this.alphaInput.value=A;this.alphaChanged()},updateSelected:function(){var A={backgroundColor:this.options.color};this.colorInput.value=this.options.color.substring(1);this.alphaInput.value=parseInt(this.options.alpha*100);if(this.options.alpha<1){A.opacity=this.options.alpha;A.filter="Alpha(opacity="+(this.options.alpha*100)+")"}else{A.opacity="";A.filter=""}this.selectedSwatch.setStyles(A);this.previewSwatch.setStyles(A);this.fireEvent("change",this)}});Jx.Button.Color=new Class({Extends:Jx.Button.Flyout,swatch:null,options:{color:"#000000",alpha:100},initialize:function(A){if(!Jx.Button.Color.ColorPalette){Jx.Button.Color.ColorPalette=new Jx.ColorPalette(this.options)}var B=new Element("span",{"class":"jxButtonSwatch"});this.selectedSwatch=new Element("span");B.appendChild(this.selectedSwatch);this.colorChangeFn=this.changed.bind(this);this.hideFn=this.hide.bind(this);Jx.Button.Flyout.prototype.initialize.apply(this,[A]);$(this.domObj.firstChild).addClass("jxButtonColor");this.domObj.firstChild.firstChild.insertBefore(B,this.domObj.firstChild.firstChild.firstChild);this.updateSwatch()},clicked:function(){if(Jx.Button.Color.ColorPalette.currentButton){Jx.Button.Color.ColorPalette.currentButton.hide()}Jx.Button.Color.ColorPalette.currentButton=this;Jx.Button.Color.ColorPalette.addEvent("change",this.colorChangeFn);Jx.Button.Color.ColorPalette.addEvent("click",this.hideFn);this.content.appendChild(Jx.Button.Color.ColorPalette.domObj);Jx.Button.Color.ColorPalette.domObj.setStyle("display","block");Jx.Button.Flyout.prototype.clicked.apply(this,arguments);Jx.Button.Color.ColorPalette.options.color=this.options.color;Jx.Button.Color.ColorPalette.options.alpha=this.options.alpha/100;Jx.Button.Color.ColorPalette.updateSelected()},hide:function(){this.setActive(false);Jx.Button.Color.ColorPalette.removeEvent("change",this.colorChangeFn);Jx.Button.Color.ColorPalette.removeEvent("click",this.hideFn);Jx.Button.Flyout.prototype.hide.apply(this,arguments);Jx.Button.Color.ColorPalette.currentButton=null},setColor:function(A){this.options.color=A;this.updateSwatch()},setAlpha:function(A){this.options.alpha=A;this.updateSwatch()},changed:function(A){var B=false;if(this.options.color!=A.options.color){this.options.color=A.options.color;B=true}if(this.options.alpha!=A.options.alpha*100){this.options.alpha=A.options.alpha*100;B=true}if(B){this.updateSwatch();this.fireEvent("change",this)}},updateSwatch:function(){var A={backgroundColor:this.options.color};if(this.options.alpha<100){A.filter="Alpha(opacity="+(this.options.alpha)+")";A.opacity=this.options.alpha/100}else{A.opacity="";A.filter=""}this.selectedSwatch.setStyles(A)}});Jx.ButtonSet=new Class({Implements:[Options,Events],buttons:null,initialize:function(A){this.setOptions(A);this.buttons=[];this.buttonChangedHandler=this.buttonChanged.bind(this)},add:function(){$A(arguments).each(function(A){if(A.domObj.hasClass("jx"+A.options.type+"Toggle")){A.domObj.removeClass("jx"+A.options.type+"Toggle");A.domObj.addClass("jx"+A.options.type+"Set")}A.addEvent("down",this.buttonChangedHandler);var B=this;A.setActive=function(C){if(this.options.isActive&&B.activeButton==this){return }else{Jx.Button.prototype.setActive.apply(this,[C])}};if(!this.activeButton){A.setActive(true)}this.buttons.push(A)},this)},remove:function(A){this.buttons.erase(A);if(this.activeButton==A){if(this.buttons.length){this.buttons[0].setActive(true)}A.removeEvent("down",this.buttonChangedHandler);A.setActive=Jx.Button.prototype.setActive}},setActiveButton:function(B){var A=this.activeButton;this.activeButton=B;if(A&&A!=B){A.setActive(false)}},buttonChanged:function(A){this.setActiveButton(A);this.fireEvent("change",this)}});Jx.Grid=new Class({Implements:[Options],domObj:null,model:null,options:{alternateRowColors:false,rowHeaders:false,columnHeaders:false,rowSelection:false,columnSelection:false,cellPrelight:false,rowPrelight:false,columnPrelight:false,rowHeaderPrelight:false,columnHeaderPrelight:false,cellSelection:false},initialize:function(B,A){this.setOptions(A);this.domObj=$(B);var C=this.domObj.retrieve("jxLayout");if(C){C.addEvent("sizeChange",this.resize.bind(this))}this.rowColObj=new Element("div",{"class":"jxGridContainer"});this.colObj=new Element("div",{"class":"jxGridContainer"});this.colTable=new Element("table",{"class":"jxGridTable"});this.colTableHead=new Element("thead");this.colTable.appendChild(this.colTableHead);this.colTableBody=new Element("tbody");this.colTable.appendChild(this.colTableBody);this.colObj.appendChild(this.colTable);this.rowObj=new Element("div",{"class":"jxGridContainer"});this.rowTable=new Element("table",{"class":"jxGridTable"});this.rowTableHead=new Element("thead");this.rowTable.appendChild(this.rowTableHead);this.rowObj.appendChild(this.rowTable);this.gridObj=new Element("div",{"class":"jxGridContainer",styles:{overflow:"scroll"}});this.gridTable=new Element("table",{"class":"jxGridTable"});this.gridTableBody=new Element("tbody");this.gridTable.appendChild(this.gridTableBody);this.gridObj.appendChild(this.gridTable);this.domObj.appendChild(this.rowColObj);this.domObj.appendChild(this.rowObj);this.domObj.appendChild(this.colObj);this.domObj.appendChild(this.gridObj);this.gridObj.addEvent("scroll",this.onScroll.bind(this));this.gridObj.addEvent("click",this.onClickGrid.bindWithEvent(this));this.rowObj.addEvent("click",this.onClickRowHeader.bindWithEvent(this));this.colObj.addEvent("click",this.onClickColumnHeader.bindWithEvent(this));this.gridObj.addEvent("mousemove",this.onMouseMoveGrid.bindWithEvent(this));this.rowObj.addEvent("mousemove",this.onMouseMoveRowHeader.bindWithEvent(this));this.colObj.addEvent("mousemove",this.onMouseMoveColumnHeader.bindWithEvent(this))},onScroll:function(){this.colObj.scrollLeft=this.gridObj.scrollLeft;this.rowObj.scrollTop=this.gridObj.scrollTop},resize:function(){if(!this.model){return }var C=this.options.columnHeaders?this.model.getColumnHeaderHeight():1;var A=this.options.rowHeaders?this.model.getRowHeaderWidth():1;var B=Element.getContentBoxSize(this.domObj);this.rowColObj.setStyles({width:A-1,height:C-1});this.rowObj.setStyles({top:C,left:0,width:A-1,height:B.height-C-1});this.colObj.setStyles({top:0,left:A,width:B.width-A-1,height:C-1});this.gridObj.setStyles({top:C,left:A,width:B.width-A-1,height:B.height-C-1})},setModel:function(A){if(this.model){this.model.removeGridListener(this)}this.model=A;if(this.model){if(this.domObj.resize){this.domObj.resize()}this.model.addGridListener(this);this.createGrid();this.resize()}else{this.destroyGrid()}},destroyGrid:function(){var A=this.colTableHead.cloneNode(false);this.colTable.replaceChild(A,this.colTableHead);this.colTableHead=A;A=this.colTableBody.cloneNode(false);this.colTable.replaceChild(A,this.colTableBody);this.colTableBody=A;A=this.rowTableHead.cloneNode(false);this.rowTable.replaceChild(A,this.rowTableHead);this.rowTableHead=A;A=this.gridTableBody.cloneNode(false);this.gridTable.replaceChild(A,this.gridTableBody);this.gridTableBody=A},createGrid:function(){this.destroyGrid();if(this.model){var L=this.model;var E=L.getColumnCount();var Q=L.getRowCount();if(this.options.columnHeaders){var N=L.getColumnHeaderHeight();var P=new Element("tr");this.colTableHead.appendChild(P);var M=new Element("tr");this.colTableBody.appendChild(M);var C=new Element("th",{styles:{width:0,height:0}});P.appendChild(C);C=C.cloneNode(true);C.setStyle("height",N);M.appendChild(C);for(var K=0;K<E;K++){var J=L.getColumnWidth(K);C=new Element("th",{"class":"jxGridColHeadHide",styles:{width:J}});var B=new Element("p",{styles:{height:0,width:J}});C.appendChild(B);P.appendChild(C);C=new Element("th",{"class":"jxGridColHead",html:L.getColumnHeaderHTML(K)});M.appendChild(C)}var C=new Element("th",{styles:{width:1000,height:0}});P.appendChild(C);C=C.cloneNode(true);C.setStyle("height",N-1);C.className="jxGridColHead";M.appendChild(C)}if(this.options.rowHeaders){var H=L.getRowHeaderWidth();var O=new Element("tr");var G=new Element("td",{styles:{width:0,height:0}});O.appendChild(G);var C=new Element("th",{styles:{width:H,height:0}});O.appendChild(C);this.rowTableHead.appendChild(O);for(var K=0;K<Q;K++){var A=L.getRowHeight(K);var O=new Element("tr");var G=new Element("td",{"class":"jxGridRowHeadHide",styles:{width:0,height:A}});var B=new Element("p",{styles:{width:0,height:A}});G.appendChild(B);O.appendChild(G);var C=new Element("th",{"class":"jxGridRowHead",html:L.getRowHeaderHTML(K)});O.appendChild(C);this.rowTableHead.appendChild(O)}var O=new Element("tr");var G=new Element("td",{styles:{width:0,height:1000}});O.appendChild(G);var C=new Element("th",{"class":"jxGridRowHead",styles:{width:H,height:1000}});O.appendChild(C);this.rowTableHead.appendChild(O)}var N=L.getColumnHeaderHeight();var M=new Element("tr");this.gridTableBody.appendChild(M);var G=new Element("td",{styles:{width:0,height:0}});M.appendChild(G);for(var K=0;K<E;K++){var J=L.getColumnWidth(K);G=new Element("td",{"class":"jxGridColHeadHide",styles:{width:J}});var B=new Element("p",{styles:{width:J,height:0}});G.appendChild(B);M.appendChild(G)}for(var I=0;I<Q;I++){var A=L.getRowHeight(I);var D=A;var O=new Element("tr");this.gridTableBody.appendChild(O);var G=new Element("td",{"class":"jxGridRowHeadHide",styles:{width:0,height:A}});var B=new Element("p",{styles:{height:A}});G.appendChild(B);O.appendChild(G);for(var K=0;K<E;K++){var J=L.getColumnWidth(K);G=new Element("td",{"class":"jxGridCell"});G.innerHTML=L.getValueAt(I,K);O.appendChild(G);var F=G.getSize();if(F.height>D){D=F.height}}if(document.all){D-=1}if(this.options.rowHeaders){this.setRowHeaderHeight(I,D)}if(this.options.alternateRowColors){O.className=(I%2)?"jxGridRowOdd":"jxGridRowEven"}else{O.className="jxGridRowAll"}}}},setRowHeaderHeight:function(B,A){this.rowTableHead.childNodes[B+1].childNodes[0].childNodes[0].style.height=(A)+"px"},gridChanged:function(B,D,A,C){if(this.model==B){this.gridObj.childNodes[D].childNodes[A].innerHTML=C}},prelightRowHeader:function(B){var A=(B>=0&&B<this.rowTableHead.rows.length-1)?this.rowTableHead.rows[B+1].cells[1]:null;if(this.prelitRowHeader!=A){if(this.prelitRowHeader){this.prelitRowHeader.removeClass("jxGridRowHeaderPrelight")}this.prelitRowHeader=A;if(this.prelitRowHeader){this.prelitRowHeader.addClass("jxGridRowHeaderPrelight")}}},prelightColumnHeader:function(B){if(this.colTableBody.rows.length==0){return }var A=(B>=0&&B<this.colTableBody.rows[0].cells.length-1)?this.colTableBody.rows[0].cells[B+1]:null;if(this.prelitColumnHeader!=A){if(this.prelitColumnHeader){this.prelitColumnHeader.removeClass("jxGridColumnHeaderPrelight")}this.prelitColumnHeader=A;if(this.prelitColumnHeader){this.prelitColumnHeader.addClass("jxGridColumnHeaderPrelight")}}},prelightRow:function(B){var A=(B>=0&&B<this.gridTableBody.rows.length-1)?this.gridTableBody.rows[B+1]:null;if(this.prelitRow!=B){if(this.prelitRow){this.prelitRow.removeClass("jxGridRowPrelight")}this.prelitRow=A;if(this.prelitRow){this.prelightRowHeader(B);this.prelitRow.addClass("jxGridRowPrelight")}}},prelightColumn:function(A){if(A>=0&&A<this.gridTable.rows[0].cells.length){if($chk(this.prelitColumn)){for(var B=0;B<this.gridTable.rows.length;B++){this.gridTable.rows[B].cells[this.prelitColumn+1].removeClass("jxGridColumnPrelight")}}this.prelitColumn=A;for(var B=0;B<this.gridTable.rows.length;B++){this.gridTable.rows[B].cells[A+1].addClass("jxGridColumnPrelight")}}this.prelightColumnHeader(A)},prelightCell:function(B,A){var C=(B>=0&&A>=0&&B<this.gridTableBody.rows.length-1&&A<this.gridTableBody.rows[B+1].cells.length-1)?this.gridTableBody.rows[B+1].cells[A+1]:null;if(this.prelitCell!=C){if(this.prelitCell){this.prelitCell.removeClass("jxGridCellPrelight")}this.prelitCell=C;if(this.prelitCell){this.prelitCell.addClass("jxGridCellPrelight")}}},selectCell:function(B,A){var C=(B>=0&&A>=0&&B<this.gridTableBody.rows.length-1&&A<this.gridTableBody.rows[B+1].cells.length-1)?this.gridTableBody.rows[B+1].cells[A+1]:null;if(!C){return }if(this.selectedCell){this.selectedCell.removeClass("jxGridCellSelected")}this.selectedCell=C;this.selectedCell.addClass("jxGridCellSelected")},selectRowHeader:function(C,B){var A=(C>=0&&C<this.rowTableHead.rows.length-1)?this.rowTableHead.rows[C+1].cells[1]:null;if(!A){return }if(B){A.addClass("jxGridRowHeaderSelected")}else{A.removeClass("jxGridRowHeaderSelected")}},selectRow:function(C,A){var B=(C>=0&&C<this.gridTableBody.rows.length-1)?this.gridTableBody.rows[C+1]:null;if(B){if(A){B.addClass("jxGridRowSelected")}else{B.removeClass("jxGridRowSelected")}this.selectRowHeader(C,A)}},selectColumnHeader:function(B,C){if(this.colTableBody.rows.length==0){return }var A=(B>=0&&B<this.colTableBody.rows[0].cells.length-1)?this.colTableBody.rows[0].cells[B+1]:null;if(A==null){return }if(C){A.addClass("jxGridColumnHeaderSelected")}else{A.removeClass("jxGridColumnHeaderSelected")}},selectColumn:function(A,C){if(A>=0&&A<this.gridTable.rows[0].cells.length){if(C){for(var B=0;B<this.gridTable.rows.length;B++){this.gridTable.rows[B].cells[A+1].addClass("jxGridColumnSelected")}}else{for(var B=0;B<this.gridTable.rows.length;B++){this.gridTable.rows[B].cells[A+1].removeClass("jxGridColumnSelected")}}this.selectColumnHeader(A,C)}},onMouseMoveGrid:function(B){var A=this.getRowColumnFromEvent(B);if(this.options.cellPrelight){this.prelightCell(A.row,A.column)}if(this.options.rowPrelight){this.prelightRow(A.row)}if(this.options.rowHeaderPrelight){this.prelightRowHeader(A.row)}if(this.options.columnPrelight){this.prelightColumn(A.column)}if(this.options.columnHeaderPrelight){this.prelightColumnHeader(A.column)}},onMouseMoveRowHeader:function(B){if(this.options.rowPrelight){var A=this.getRowColumnFromEvent(B);this.prelightRow(A.row)}},onMouseMoveColumnHeader:function(B){if(this.options.columnPrelight){var A=this.getRowColumnFromEvent(B);this.prelightColumn(A.column)}},onClickGrid:function(B){var A=this.getRowColumnFromEvent(B);if(this.options.cellSelection&&this.model.cellSelected){this.model.cellSelected(this,A.row,A.column)}if(this.options.rowSelection&&this.model.rowSelected){this.model.rowSelected(this,A.row)}if(this.options.columnSelection&&this.model.columnSelected){this.model.columnSelected(this,A.column)}},onClickRowHeader:function(B){var A=this.getRowColumnFromEvent(B);if(this.options.rowSelection&&this.model.rowSelected){this.model.rowSelected(this,A.row)}},onClickColumnHeader:function(B){var A=this.getRowColumnFromEvent(B);if(this.options.columnSelection&&this.model.columnSelected){this.model.columnSelected(this,A.column)}},getRowColumnFromEvent:function(D){var F=D.target;if(F.tagName!="TD"&&F.tagName!="TH"){return{row:-1,column:-1}}var C=F.parentNode;var A=F.cellIndex-1;var E=C.rowIndex-1;if(A==-1){for(var B=0;B<C.childNodes.length;B++){if(C.childNodes[B]==F){A=B-1;break}}}return{row:E,column:A}}});Jx.Layout=new Class({Implements:[Options,Events],options:{propagate:true,position:"absolute",left:0,right:0,top:0,bottom:0,width:null,height:null,minWidth:0,minHeight:0,maxWidth:-1,maxHeight:-1},initialize:function(B,A){this.setOptions(A);this.domObj=$(B);this.domObj.resize=this.resize.bind(this);this.domObj.setStyle("position",this.options.position);this.domObj.store("jxLayout",this);if(document.body==this.domObj.parentNode){window.addEvent("resize",this.windowResize.bindWithEvent(this));window.addEvent("load",this.resize.bind(this))}},windowResize:function(){if(this.resizeTimer){$clear(this.resizeTimer);this.resizeTimer=null}this.resizeTimer=this.resize.delay(100,this)},resize:function(K){this.resizeTimer=null;var B=false;if(K){for(var F in K){if(F=="forceResize"){continue}if(this.options[F]!=K[F]){B=true;this.options[F]=K[F]}}if(K.forceResize){B=true}}if(!$(this.domObj.parentNode)){return }var C;if(this.domObj.parentNode.tagName=="BODY"){C=Element.getPageDimensions()}else{C=$(this.domObj.parentNode).getContentBoxSize()}if(this.lastParentSize&&!B){B=(this.lastParentSize.width!=C.width||this.lastParentSize.height!=C.height)}else{B=true}this.lastParentSize=C;if(!B){return }var D,J,I,G;if(this.options.left!=null){D=this.options.left;if(this.options.right==null){if(this.options.width==null){I=C.width-D;if(I<this.options.minWidth){I=this.options.minWidth}if(this.options.maxWidth>=0&&I>this.options.maxWidth){I=this.options.maxWidth}}else{I=this.options.width}}else{if(this.options.width==null){I=C.width-D-this.options.right;if(I<this.options.minWidth){I=this.options.minWidth}if(this.options.maxWidth>=0&&I>this.options.maxWidth){I=this.options.maxWidth}}else{I=this.options.width}}}else{if(this.options.right==null){if(this.options.width==null){D=0;I=C.width;if(this.options.maxWidth>=0&&I>this.options.maxWidth){D=D+parseInt(I-this.options.maxWidth)/2;I=this.options.maxWidth}}else{I=this.options.width;D=parseInt((C.width-I)/2);if(D<0){D=0}}}else{if(this.options.width!=null){I=this.options.width;D=C.width-I-this.options.right;if(D<0){D=0}}else{D=0;I=C.width-this.options.right;if(I<this.options.minWidth){I=this.options.minWidth}if(this.options.maxWidth>=0&&I>this.options.maxWidth){D=I-this.options.maxWidth-this.options.right;I=this.options.maxWidth}}}}if(this.options.top!=null){J=this.options.top;if(this.options.bottom==null){if(this.options.height==null){G=C.height-J;if(G<this.options.minHeight){G=this.options.minHeight}if(this.options.maxHeight>=0&&G>this.options.maxHeight){G=this.options.maxHeight}}else{G=this.options.height;if(this.options.maxHeight>=0&&G>this.options.maxHeight){J=G-this.options.maxHeight;G=this.options.maxHeight}}}else{if(this.options.height==null){G=C.height-J-this.options.bottom;if(G<this.options.minHeight){G=this.options.minHeight}if(this.options.maxHeight>=0&&G>this.options.maxHeight){G=this.options.maxHeight}}else{G=this.options.height}}}else{if(this.options.bottom==null){if(this.options.height==null){J=0;G=C.height;if(G<this.options.minHeight){G=this.options.minHeight}if(this.options.maxHeight>=0&&G>this.options.maxHeight){J=parseInt((C.height-this.options.maxHeight)/2);G=this.options.maxHeight}}else{G=this.options.height;J=parseInt((C.height-G)/2);if(J<0){J=0}}}else{if(this.options.height!=null){G=this.options.height;J=C.height-G-this.options.bottom;if(J<0){J=0}}else{J=0;G=C.height-this.options.bottom;if(G<this.options.minHeight){G=this.options.minHeight}if(this.options.maxHeight>=0&&G>this.options.maxHeight){J=C.height-this.options.maxHeight-this.options.bottom;G=this.options.maxHeight}}}}var E={width:I};if(this.options.position=="absolute"){var H=$(this.domObj.parentNode).getPaddingSize();this.domObj.setStyles({position:this.options.position,left:D+H.left,top:J+H.top});E.height=G}else{if(this.options.height){E.height=this.options.height}}this.domObj.setBorderBoxSize(E);if(this.options.propagate){var A={forceResize:K?K.forceResize:false};$A(this.domObj.childNodes).each(function(L){if(L.resize&&L.getStyle("display")!="none"){L.resize(A)}})}this.fireEvent("sizeChange",this)}});Jx.Menu=new Class({Implements:[Jx.AutoPosition,Jx.Chrome],domObj:null,button:null,subDomObj:null,items:null,initialize:function(A){if(!Jx.Menu.Menus){Jx.Menu.Menus=[]}this.items=[];this.contentContainer=new Element("div",{"class":"jxMenuContainer"});this.subDomObj=new Element("ul",{"class":"jxMenu"});this.contentContainer.adopt(this.subDomObj);if(A){this.domObj=new Element("li",{id:A.id,events:{mouseover:this.onMouseOver.bindWithEvent(this)}});this.button=new Jx.Button($merge(A,{onClick:this.show.bind(this)}));this.button.domA.addClass("jxButtonMenu");this.domObj.adopt(this.button.domObj)}this.hideWatcher=this.hide.bindWithEvent(this);this.keypressWatcher=this.keypressHandler.bindWithEvent(this)},add:function(){$A(arguments).each(function(A){this.items.push(A);A.setOwner(this);this.subDomObj.adopt(A.domObj)},this)},deactivate:function(){this.hide()},actionPerformed:function(){this.hide()},onMouseOver:function(A){if(Jx.Menu.Menus[0]&&Jx.Menu.Menus[0]!=this){this.show({event:A})}},eventInMenu:function(A){return A.target.descendantOf(this.domObj)||A.target.descendantOf(this.subDomObj)||this.items.some(function(B){return B instanceof Jx.Menu.SubMenu&&B.eventInMenu(A)})},hide:function(A){if(A){if(this.eventInMenu(A)){return }}if(Jx.Menu.Menus[0]&&Jx.Menu.Menus[0]==this){Jx.Menu.Menus[0]=null}if(this.button&&this.button.domA){this.button.domA.removeClass("jx"+this.button.options.type+"Active")}this.contentContainer.dispose();this.items.each(function(B){B.hide(A)});document.removeEvent("mousedown",this.hideWatcher);document.removeEvent("keyup",this.keypressWatcher)},show:function(B){var A=B.event;if(Jx.Menu.Menus[0]&&Jx.Menu.Menus[0]!=this){Jx.Menu.Menus[0].hide(A)}if(this.items.length==0){return }Jx.Menu.Menus[0]=this;this.contentContainer.setStyle("visibility","hidden");document.body.adopt(this.contentContainer);this.contentContainer.setContentBoxSize(this.subDomObj.getMarginBoxSize());this.showChrome(this.contentContainer);this.position(this.contentContainer,this.button.domObj,{horizontal:["left left"],vertical:["bottom top","top bottom"],offsets:this.chromeOffsets});this.contentContainer.setStyle("visibility","");if(this.button&&this.button.domA){this.button.domA.addClass("jx"+this.button.options.type+"Active")}if(A){A.stop()}document.addEvent("mousedown",this.hideWatcher);document.addEvent("keyup",this.keypressWatcher)},setVisibleItem:function(A){if(this.visibleItem!=A){if(this.visibleItem&&this.visibleItem.hide){this.visibleItem.hide()}this.visibleItem=A;this.visibleItem.show()}},keypressHandler:function(A){A=new Event(A);if(A.key=="esc"){this.hide()}}});Jx.Menu.Item=new Class({Implements:[Options,Events],Extends:Jx.Button,owner:null,options:{enabled:true,image:Jx.baseURL+"images/a_pixel.png",label:"&nbsp;",toggleClass:"Toggle"},initialize:function(A){this.parent($merge(A,{container:"li",type:"MenuItem",toggleClass:(A.image?null:this.options.toggleClass)}));this.domObj.addEvent("mouseover",this.onMouseOver.bindWithEvent(this));if(!this.options.enabled){this.domObj.addClass("jxMenuItemDisabled")}},setOwner:function(A){this.owner=A},hide:$empty,show:$empty,clicked:function(A){if(this.options.enabled){if(this.options.toggle){this.setActive(!this.options.isActive)}this.fireEvent("click",this);if(this.owner&&this.owner.deactivate){this.owner.deactivate(A.event)}}},propertyChanged:function(A){this.options.enabled=A.isEnabled();if(this.options.enabled){this.domObj.removeClass("jxMenuItemDisabled")}else{if(!this.domObj.hadClass("jxMenuItemDisabled")){this.domObj.addClass("jxMenuItemDisabled")}}},onMouseOver:function(A){if(this.owner&&this.owner.setVisibleItem){this.owner.setVisibleItem(this)}this.show(A)}});Jx.Menu.Separator=new Class({domObj:null,owner:null,initialize:function(){this.domObj=new Element("li",{"class":"jxMenuItem"});var A=new Element("span",{"class":"jxMenuSeparator",html:"&nbsp;"});this.domObj.appendChild(A)},setOwner:function(A){this.owner=A},hide:$empty,show:$empty});Jx.Menu.SubMenu=new Class({Extends:Jx.Menu.Item,Implements:[Options,Events,Jx.AutoPosition,Jx.Chrome],subDomObj:null,owner:null,visibleItem:null,items:null,initialize:function(A){this.open=false;this.items=[];this.parent(A);this.domA.addClass("jxButtonSubMenu");this.contentContainer=new Element("div",{"class":"jxMenuContainer"});this.subDomObj=new Element("ul",{"class":"jxSubMenu"});this.contentContainer.adopt(this.subDomObj)},setOwner:function(A){this.owner=A},show:function(){if(this.open||this.items.length==0){return }this.contentContainer.setStyle("visibility","hidden");document.body.adopt(this.contentContainer);this.contentContainer.setContentBoxSize(this.subDomObj.getMarginBoxSize());this.showChrome(this.contentContainer);this.position(this.contentContainer,this.domObj,{horizontal:["right left","left right"],vertical:["top top"],offsets:this.chromeOffsets});this.open=true;this.contentContainer.setStyle("visibility","");this.setActive(true)},eventInMenu:function(A){return A.target.descendantOf(this.domObj)||A.target.descendantOf(this.subDomObj)||this.items.some(function(B){return B instanceof Jx.Menu.SubMenu&&B.eventInMenu(A)})},hide:function(){if(!this.open){return }this.open=false;this.items.each(function(A){A.hide()});this.contentContainer.dispose();this.visibleItem=null},add:function(){var A=this;$A(arguments).each(function(B){A.items.push(B);B.setOwner(A);A.subDomObj.adopt(B.domObj)})},insertBefore:function(C,D){var B=false;for(var A=0;A<this.items.length;A++){if(this.items[A]==D){this.items.splice(A,0,C);this.subDomObj.insertBefore(C.domObj,D.domObj);B=true;break}}if(!B){this.add(C)}},remove:function(B){for(var A=0;A<this.items.length;A++){if(this.items[A]==B){this.items.splice(A,1);this.subDomObj.removeChild(B.domObj);break}}},processActionEvent:function(A){if(this.open){this.hide()}else{this.show()}if(A&&A.event){A.event.stop()}},deactivate:function(A){if(this.owner){this.owner.deactivate(A)}},isActive:function(){if(this.owner){return this.owner.isActive()}else{return false}},setActive:function(A){if(this.owner&&this.owner.setActive){this.owner.setActive(A)}},setVisibleItem:function(A){if(this.visibleItem!=A){if(this.visibleItem&&this.visibleItem.hide){this.visibleItem.hide()}this.visibleItem=A;this.visibleItem.show()}}});Jx.Menu.Context=new Class({Extends:Jx.Menu,initialize:function(A){this.parent();if($(A)){$(A).addEvent("contextmenu",this.show.bindWithEvent(this))}},show:function(A){if(this.items.length==0){return }this.contentContainer.setStyle("visibility","hidden");document.body.adopt(this.contentContainer);this.contentContainer.setContentBoxSize(this.subDomObj.getMarginBoxSize());this.position(this.contentContainer,document.body,{horizontal:[A.page.x+" left"],vertical:[A.page.y+" top",A.page.y+" bottom"],offsets:this.chromeOffsets});this.contentContainer.setStyle("visibility","");this.showChrome(this.contentContainer);document.addEvent("mousedown",this.hideWatcher);document.addEvent("keyup",this.keypressWatcher);A.stop()}});Jx.Panel=new Class({Implements:[Options,Events,Jx.UniqueId,Jx.ContentLoader],toolbarContainers:{top:null,right:null,bottom:null,left:null},options:{label:"&nbsp;",imageBaseUrl:Jx.baseURL+"images/",position:"absolute",height:null,collapse:true,detach:false,close:false,closed:false,hideTitle:false,type:"Panel"},initialize:function(N){this.toolbars=N.toolbars||[];this.setOptions(N);if($defined(this.options.height)&&!$defined(N.position)){this.options.position="relative"}this.initUniqueId();this.title=new Element("div",{"class":"jx"+this.options.type+"Title"});this.labelObj=new Element("span",{"class":"jx"+this.options.type+"Label",html:this.options.label});this.title.adopt(this.labelObj);var K=new Element("div",{"class":"jx"+this.options.type+"Controls"});var E=new Element("div");K.adopt(E);this.toolbar=new Jx.Toolbar({parent:E});this.title.adopt(K);var F=this;if(this.options.menu){this.menu=new Jx.Menu({image:Jx.baseURL+"images/panel_controls.png"});this.menu.domObj.addClass("jx"+this.options.type+"Menu");this.menu.domObj.addClass("jxButtonContentLeft");this.toolbar.add(this.menu)}if(this.options.collapse){var H=new Jx.Button({image:Jx.baseURL+"images/panel_controls.png",tooltip:"Collapse/Expand Panel",onClick:function(){F.toggleCollapse()}});H.domObj.addClass("jx"+this.options.type+"Collapse");this.toolbar.add(H);if(this.menu){var L=new Jx.Menu.Item({label:"Collapse",onClick:function(){F.toggleCollapse()}});this.addEvent("collapse",function(){if(F.options.closed){L.setLabel("Expand")}else{L.setLabel("Collapse")}});this.menu.add(L)}}if(this.options.maximize){var H=new Jx.Button({image:Jx.baseURL+"images/panel_controls.png",tooltip:"Maximize Panel",onClick:function(){F.maximize()}});H.domObj.addClass("jx"+this.options.type+"Maximize");this.toolbar.add(H);if(this.menu){var L=new Jx.Menu.Item({label:"Maximize",onClick:function(){F.maximize()}});this.menu.add(L)}}if(this.options.close){var H=new Jx.Button({image:Jx.baseURL+"images/panel_controls.png",tooltip:"Close Panel",onClick:function(){F.close()}});H.domObj.addClass("jx"+this.options.type+"Close");this.toolbar.add(H);if(this.menu){var L=new Jx.Menu.Item({label:"Close",onClick:function(){F.close()}});this.menu.add(L)}}this.title.addEvent("dblclick",function(){F.toggleCollapse()});this.domObj=new Element("div",{"class":"jx"+this.options.type});if(this.options.id){this.domObj.id=this.options.id}if($(this.options.parent)){$(this.options.parent).adopt(this.domObj)}var G=new Jx.Layout(this.domObj,$merge(this.options,{propagate:false}));var M=this.layoutContent.bind(this);G.addEvent("sizeChange",M);if(!this.options.hideTitle){this.domObj.adopt(this.title)}this.contentContainer=new Element("div",{"class":"jx"+this.options.type+"ContentContainer"});this.domObj.adopt(this.contentContainer);for(var B=0;B<this.toolbars.length;B++){var A=this.toolbars[B];A.addEvent("add",M);A.addEvent("remove",M);var D=A.options.position;var J=this.toolbarContainers[D];if(!J){var J=new Element("div",{"class":"jxToolbarContainer jxToolbar"+D.capitalize()});new Jx.Layout(J);var C=new Element("div",{"class":"jxClearer"});J.appendChild(C);this.contentContainer.adopt(J);this.toolbarContainers[D]=J}var I=A.domObj;J.insertBefore(I,J.lastChild)}this.content=new Element("div",{"class":"jx"+this.options.type+"Content"});new Jx.Layout(this.contentContainer);new Jx.Layout(this.content);this.contentContainer.adopt(this.content);this.loadContent(this.content,N);this.toggleCollapse(this.options.closed)},layoutContent:function(){var G=0;var H=0;var A=0;var C=0;var J=0;var I;var D;var F;if(!this.options.hideTitle&&this.title.parentNode==this.domObj){G=this.title.getMarginBoxSize().height}var B=this.domObj.getContentBoxSize();if(B.height>G){this.contentContainer.setStyle("display","block");this.options.closed=false;this.contentContainer.resize({top:G,height:null,bottom:0});["left","right"].each(function(L){if(this.toolbarContainers[L]){this.toolbarContainers[L].style.width=""}},this);["top","bottom"].each(function(L){if(this.toolbarContainers[L]){this.toolbarContainers[L].style.height=""}},this);for(var E=0;E<this.toolbars.length;E++){D=this.toolbars[E];F=D.options.position;I=this.toolbarContainers[F];var K=I.getBorderBoxSize();switch(F){case"top":H=K.height;break;case"bottom":A=K.height;break;case"left":C=K.width;break;case"right":J=K.width;break}}I=this.toolbarContainers.top;if(I){I.resize({top:0,left:C,right:J,bottom:null,height:H,width:null})}I=this.toolbarContainers.bottom;if(I){I.resize({top:null,left:C,right:J,bottom:0,height:A,width:null})}I=this.toolbarContainers.left;if(I){I.resize({top:H,left:0,right:null,bottom:A,height:null,width:C})}I=this.toolbarContainers.right;if(I){I.resize({top:H,left:null,right:0,bottom:A,height:null,width:J})}this.content.resize({top:H,bottom:A,left:C,right:J})}else{this.contentContainer.setStyle("display","none");this.options.closed=true}},setLabel:function(A){this.labelObj.innerHTML=A},getLabel:function(){return this.labelObj.innerHTML},finalize:function(){this.domObj=null;this.deregisterIds()},maximize:function(){if(this.manager){this.manager.maximizePanel(this)}},setContent:function(A){this.content.innerHTML=A;this.bContentReady=true},setContentURL:function(B){this.bContentReady=false;this.setBusy(true);if(arguments[1]){this.onContentReady=arguments[1]}if(B.indexOf("?")==-1){B=B+"?"}var C={method:"get",onComplete:this.panelContentLoaded.bind(this),requestHeaders:["If-Modified-Since","Sat, 1 Jan 2000 00:00:00 GMT"]};var A=new Request(B,C).send()},panelContentLoaded:function(A){this.content.innerHTML=A.responseText;this.bContentReady=true;this.setBusy(false);if(this.onContentReady){window.setTimeout(this.onContentReady.bind(this),1)}},setBusy:function(A){this.busyCount+=A?1:-1;this.loadingObj.img.style.visibility=(this.busyCount>0)?"visible":"hidden"},addTo:function(B,A){B=$(B);A=A?$(A):null;if(A&&A.parentNode==B){B.insertBefore(this.domObj,A)}else{B.appendChild(this.domObj)}this.domObj.resize()},toggleCollapse:function(C){if($defined(C)){this.options.closed=C}else{this.options.closed=!this.options.closed}if(this.options.closed){if(!this.domObj.hasClass("jx"+this.options.type+"Min")){this.domObj.addClass("jx"+this.options.type+"Min");this.contentContainer.setStyle("display","none");var B=this.domObj.getMarginSize();var A=B.top+B.bottom;if(this.title.parentNode==this.domObj){A+=this.title.getMarginBoxSize().height}this.domObj.resize({height:A});this.fireEvent("collapse",this)}}else{if(this.domObj.hasClass("jx"+this.options.type+"Min")){this.domObj.removeClass("jx"+this.options.type+"Min");this.contentContainer.setStyle("display","block");this.domObj.resize({height:this.options.height});this.fireEvent("expand",this)}}},close:function(){this.domObj.dispose();this.fireEvent("close",this)}});Jx.Dialog=new Class({Extends:Jx.Panel,Implements:[Jx.AutoPosition,Jx.Chrome],blanket:null,options:{modal:true,position:"absolute",width:250,height:250,left:0,top:0,bottom:null,right:null,label:"New Dialog",id:"",parent:null,resize:false,move:true,close:true,collapse:true},initialize:function(A){if(!Jx.Dialog.Stack){Jx.Dialog.Stack=[];Jx.Dialog.ZIndex=[100]}this.isOpening=false;this.parent($merge({parent:document.body},A,{type:"Dialog",position:"absolute"}));this.options.parent=$(this.options.parent);if(!window.opera&&this.options.modal){this.blanket=new Element("div",{"class":"jxDialogModal",styles:{display:"none",zIndex:-1}});this.options.parent.adopt(this.blanket);(new Jx.Layout(this.blanket)).resize()}this.domObj.setStyle("display","none");this.options.parent.adopt(this.domObj);if(this.options.move){this.title.addClass("jxDialogMoveable");new Drag(this.domObj,{handle:this.title,onStart:(function(){this.contentContainer.setStyle("visibility","hidden");this.chrome.addClass("jxChromeDrag")}).bind(this),onComplete:(function(){this.chrome.removeClass("jxChromeDrag");this.contentContainer.setStyle("visibility","");this.position(this.domObj,this.options.parent,{horizontal:[parseInt(this.domObj.style.left)+" left"],vertical:[parseInt(this.domObj.style.top)+" top"]});this.options.left=parseInt(this.domObj.style.left);this.options.top=parseInt(this.domObj.style.top);if(!this.options.closed){this.domObj.resize(this.options)}}).bind(this)})}if(this.options.resize){this.resizeHandle=new Element("div",{"class":"jxDialogResize",styles:{display:this.options.closed?"none":"block"}});this.domObj.appendChild(this.resizeHandle);this.resizeHandleSize=this.resizeHandle.getSize();this.resizeHandle.setStyles({bottom:this.resizeHandleSize.height,right:this.resizeHandleSize.width});this.domObj.makeResizable({handle:this.resizeHandle,onStart:(function(){this.contentContainer.setStyle("visibility","hidden");this.chrome.addClass("jxChromeDrag")}).bind(this),onComplete:(function(){this.chrome.removeClass("jxChromeDrag");var B=this.domObj.getMarginBoxSize();this.options.width=B.width;this.options.height=B.height;this.layoutContent();this.domObj.resize(this.options);this.contentContainer.setStyle("visibility","");this.fireEvent("resize")}).bind(this)})}this.domObj.addEvent("mousedown",(function(){Jx.Dialog.Stack.erase(this).push(this);Jx.Dialog.Stack.each(function(C,B){C.domObj.setStyle("zIndex",101+B)})}).bind(this))},sizeChanged:function(){if(!this.options.closed){this.layoutContent()}},toggleCollapse:function(C){if($defined(C)){this.options.closed=C}else{this.options.closed=!this.options.closed}if(this.options.closed){if(!this.domObj.hasClass("jx"+this.options.type+"Min")){this.domObj.addClass("jx"+this.options.type+"Min")}this.contentContainer.setStyle("display","none");if(this.resizeHandle){this.resizeHandle.setStyle("display","none")}}else{if(this.domObj.hasClass("jx"+this.options.type+"Min")){this.domObj.removeClass("jx"+this.options.type+"Min")}this.contentContainer.setStyle("display","block");if(this.resizeHandle){this.resizeHandle.setStyle("display","block")}}if(this.options.closed){var B=this.domObj.getMarginSize();var A=this.title.getMarginBoxSize();this.domObj.resize({height:B.top+A.height+B.bottom});this.fireEvent("collapse")}else{this.domObj.resize(this.options);this.fireEvent("expand")}},setTitle:function(A){this.title.childNodes[0].innerHTML=A},show:function(){Jx.Dialog.Stack.push(this);if(this.options.modal){this.blanket.setStyles({zIndex:Jx.Dialog.ZIndex[0]++,visibility:"visible",display:"block"})}this.domObj.setStyles({zIndex:Jx.Dialog.ZIndex[0]++,display:"block"});if(this.options.closed){var B=this.domObj.getMarginSize();var A=this.title.getMarginBoxSize();this.domObj.resize({height:B.top+A.height+B.bottom})}else{this.domObj.resize(this.options)}this.showChrome(this.domObj);this.position(this.domObj,this.options.parent,{horizontal:[this.options.left+" left"],vertical:[this.options.top+" top"]});this.options.left=parseInt(this.domObj.style.left);this.options.top=parseInt(this.domObj.style.top)},hide:function(){Jx.Dialog.Stack.erase(this);Jx.Dialog.ZIndex[0]--;this.domObj.setStyle("display","none");if(this.options.modal){this.blanket.setStyle("visibility","hidden");Jx.Dialog.ZIndex[0]--}},open:function(){if(!this.isOpening){this.isOpening=true}if(this.contentIsLoaded){this.show();this.fireEvent("open",this);this.isOpening=false}},close:function(){this.isOpening=false;this.hide();this.fireEvent("close")},onContentLoaded:function(){if(this.isOpening){this.open()}}});Jx.PanelSet=new Class({panels:null,height:null,firstLayout:true,initialize:function(C,B){this.domObj=$(C);this.panels=B;var H=new Element("div",{styles:{position:"absolute"}});new Jx.Layout(H,{minHeight:0,maxHeight:0,height:0});var G=[H];B.each(function(I){G.push(I.domObj);I.options.hideTitle=true;I.contentContainer.resize({top:0});I.addEvent("expand",this.maximizePanel.bind(this,I));I.domObj.store("Jx.Panel",I)},this);this.splitter=new Jx.Splitter(this.domObj,{splitInto:B.length+1,layout:"vertical",elements:G});this.splitter.sizeChanged=this.sizeChanged.bind(this);for(var E=0;E<this.panels.length;E++){var A=this.panels[E];var F=this.splitter.bars[E];A.title.setStyle("visibility","hidden");document.body.adopt(A.title);var D=A.title.getBorderBoxSize();F.adopt(A.title);A.title.setStyle("visibility","");F.setStyle("height",D.height);F.removeClass("jxSplitterBar");F.addClass("jxPanelBar");A.manager=this}},sizeChanged:function(){if(this.firstLayout){if(this.panels[0].title.getBorderBoxSize().height!=0){for(var B=0;B<this.splitter.bars.length;B++){var A=this.panels[B];this.splitter.bars[B].style.height=A.title.getBorderBoxSize().height+"px";this.splitter.bars[B].store("size",null)}this.firstLayout=false;Jx.Splitter.prototype.sizeChanged.apply(this.splitter,[])}}else{Jx.Splitter.prototype.sizeChanged.apply(this.splitter,[])}},maximizePanel:function(A){var E=this.domObj.getContentBoxSize().height;var D=0;for(var C=1;C<this.splitter.elements.length;C++){var F=this.splitter.elements[C];D+=F.retrieve("leftBar").getBorderBoxSize().height;if(F!==A.domObj){var B=F.retrieve("Jx.Panel");var G=F.retrieve("jxLayout").options;F.resize({top:D,height:G.minHeight,bottom:null});D+=G.minHeight;F.retrieve("rightBar").style.top=D+"px"}else{break}}b=E;for(var C=this.splitter.elements.length-1;C>0;C--){F=this.splitter.elements[C];if(F!==A.domObj){var G=F.retrieve("jxLayout").options;b-=G.minHeight;F.resize({top:b,height:G.minHeight,bottom:null});b-=F.retrieve("leftBar").getBorderBoxSize().height;F.retrieve("leftBar").style.top=b+"px"}else{break}}A.domObj.resize({top:D,height:b-D,bottom:null})}});Jx.Combo=new Class({Implements:[Options,Events,Jx.AutoPosition,Jx.Chrome],domObj:null,ul:null,currentSelection:null,initialize:function(A){this.setOptions(A);this.domObj=new Element("div",{"class":"jxCombo"});if(this.options.id){this.domObj.id=this.options.id}if(this.options.editable){this.domInput=new Element("input",{"class":"jxComboInput",type:"text",events:{change:this.valueChanged.bindWithEvent(this),keydown:this.onKeyPress.bindWithEvent(this)}})}else{this.domInput=new Element("span",{"class":"jxComboInput"})}this.domObj.appendChild(this.domInput);this.domA=new Element("a",{"class":"jxComboDiscloser",href:"javascript:void(0)",events:{click:this.toggle.bind(this)}});this.domButton=new Element("img",{"class":"png24",src:Jx.baseURL+"images/disclose2.png"});this.domA.appendChild(this.domButton);this.domObj.appendChild(this.domA);if(!window.opera){this.domObj.appendChild(Jx.createIframeShim())}this.domListDiv=new Element("div",{"class":"jxComboOptions"});this.domList=new Element("ul");this.domListDiv.appendChild(this.domList);this.keypressHandler=this.keypress.bindWithEvent(this);this.clickHandler=this.click.bindWithEvent(this)},onKeyPress:function(A){if(A.key=="enter"){this.valueChanged()}},valueChanged:function(){this.fireEvent("changed",this)},add:function(D,B){var A=new Element("li");var C=new Element("a",{href:"javascript:void(0)",events:{click:this.pick.bindWithEvent(this)}});if($type(D)=="string"){C.innerHTML=D}else{C.appendChild(D)}A.appendChild(C);if(arguments.length>1&&this.domList.childNodes.length>B){this.domList.insertBefore(A,this.domList.childNodes[B])}else{this.domList.appendChild(A)}if(this.getValue()==""){this.setValue(C.childNodes[0])}},remove:function(A){if(A>0&&A<this.domList.childNodes.length){this.domList.removeChild(this.domList.childNodes[A])}},pick:function(B){var A=B.target;if(A.tagName=="A"){this.currentSelection=A;this.setValue(this.currentSelection.childNodes[0]);this.valueChanged()}this.close()},setValue:function(A){if(this.options.editable){if(typeof (A)=="string"){this.domInput.value=A}else{if(A.nodeType&&A.nodeType==3){this.domInput.value=A.nodeValue}else{this.domInput.value=A.innerHTML}}}else{if(typeof (A)=="string"){this.domInput.innerHTML=A}else{if(A.nodeType&&A.nodeType==3){this.domInput.innerHTML=A.nodeValue}else{this.domInput.appendChild(A)}}}},getValue:function(){value="";if(this.options.editable){value=this.domInput.value}else{if(this.domInput.childNodes.length>0){if(this.domInput.childNodes[0].nodeType==3){value=this.domInput.innerHTML}else{value=this.domInput.childNodes[0]}}}return value},toggle:function(){if(this.domListDiv.style.display=="block"){this.close()}else{this.open()}},open:function(){this.domListDiv.setStyle("visibility","hidden");document.body.adopt(this.domListDiv);this.domListDiv.width="";this.domListDiv.setContentBoxSize({width:Math.max(this.domListDiv.getSize().x,this.domObj.getSize().x)});this.showChrome(this.domListDiv);this.position(this.domListDiv,this.domObj,{horizontal:["left left","right right"],vertical:["bottom top","top bottom"],offsets:this.chromeOffsets});this.domListDiv.setStyle("visibility","");document.addEvents({keydown:this.keypressHandler,click:this.clickHandler})},keypress:function(A){if(A.key=="esc"){this.close()}},click:function(A){if(!A.target.descendantOf(this.domListDiv)&&!A.target.descendantOf(this.domObj)){this.close()}},close:function(){this.domListDiv.dispose();document.removeEvents({keydown:this.keypressHandler,click:this.clickHandler})},getSelection:function(){return this.currentSelection?this.currentSelection.name:""}});Jx.Splitter=new Class({Implements:[Options],domObj:null,elements:null,bars:null,firstUpdate:true,options:{useChildren:false,splitInto:2,elements:null,containerOptions:[],barOptions:[],layout:"horizontal",snaps:[]},initialize:function(A,I){this.setOptions(I);this.domObj=$(A);this.domObj.addClass("jxSplitContainer");this.domObj.setStyle("overflow","hidden");var H=this.domObj.retrieve("jxLayout");if(H){H.addEvent("sizeChange",this.sizeChanged.bind(this))}this.elements=[];this.bars=[];var G=2;if(this.options.useChildren){this.elements=this.domObj.getChildren();G=this.elements.length}else{G=this.options.elements?this.options.elements.length:this.options.splitInto;for(var E=0;E<G;E++){var C;if(this.options.elements&&this.options.elements[E]){C=$(this.options.elements[E]);if(!C){C=this.prepareElement();C.id=this.options.elements[E]}}else{C=this.prepareElement()}this.elements[E]=C;this.domObj.adopt(this.elements[E])}}this.elements.each(function(J){J.addClass("jxSplitArea")});for(var E=0;E<G;E++){if(!this.elements[E].retrieve("jxLayout")){new Jx.Layout(this.elements[E],this.options.containerOptions[E])}}for(var E=1;E<G;E++){this.bars[E-1]=this.prepareBar();this.bars[E-1].store("leftSide",this.elements[E-1]);this.bars[E-1].store("rightSide",this.elements[E]);this.elements[E-1].store("rightBar",this.bars[E-1]);this.elements[E].store("leftBar",this.bars[E-1]);this.domObj.adopt(this.bars[E-1])}this.establishConstraints();for(var E=0;E<this.options.barOptions.length;E++){if(!this.bars[E]){continue}var B=this.options.barOptions[E];if(B&&B.snap&&(B.snap=="before"||B.snap=="after")){var F;if(B.snap=="before"){F=this.bars[E].retrieve("leftSide")}else{if(B.snap=="after"){F=this.bars[E].retrieve("rightSide")}}var D=new Element("a",{"class":"jxSnap"+this.options.layout.capitalize()+B.snap.capitalize(),href:"javascript:void(0)"});this.bars[E].adopt(D);new Jx.Splitter.Snap(D,F,this)}}for(var E=0;E<this.options.snaps.length;E++){if(this.options.snaps[E]){new Jx.Splitter.Snap(this.options.snaps[E],this.elements[E],this)}}},prepareElement:function(){var A=new Element("div",{styles:{position:"absolute"}});return A},prepareBar:function(){var A=new Element("div",{"class":"jxSplitBar"+this.options.layout.capitalize(),title:"drag this bar to resize"});A.store("splitterObj",this);return A},establishConstraints:function(){var A={};var B;if(this.options.layout=="horizontal"){A.y=[0,0];B=this.dragHorizontal}else{A.x=[0,0];B=this.dragVertical}this.bars.each(function(C){new Drag(C,{limit:A,onSnap:function(D){D.addClass("jxSplitBarDrag")},onComplete:(function(D){D.removeClass("jxSplitBarDrag");if(D.retrieve("splitterObj")!=this){return }B.apply(this,[D])}).bind(this)})},this)},dragHorizontal:function(F){var A=parseInt(F.style.left);var H=F.retrieve("leftSide");var C=F.retrieve("rightSide");var D=H.retrieve("jxLayout");var G=C.retrieve("jxLayout");var E=this.domObj.getPaddingSize().left;var I,O,K;var N=F.retrieve("size");if(!N){N=F.getBorderBoxSize();F.store("size",N)}I=A+N.width-E;var B=this.domObj.getContentBoxSize();if(G.options.width!=null){O=G.options.width+G.options.left-I;K=B.width-I-O}else{O=B.width-G.options.right-I;K=G.options.right}if(O<0){O=0}if(O<G.options.minWidth){O=G.options.minWidth}if(G.options.maxWidth>=0&&O>G.options.maxWidth){O=G.options.maxWidth}I=B.width-K-O;A=I-N.width;var J,M;J=D.options.left;M=A-J;if(M<0){M=0}if(M<D.options.minWidth){M=D.options.minWidth}if(D.options.maxWidth>=0&&M>D.options.maxWidth){M=D.options.maxWidth}if(J+M!=A){A=J+M;var L=A+N.width-I;I+=L;O-=L}F.style.left=E+A+"px";if(D.options.width==null){var B=this.domObj.getContentBoxSize();H.resize({right:B.width-J-M})}else{H.resize({width:M})}if(G.options.width==null){C.resize({left:I})}else{C.resize({left:I,width:O})}},dragVertical:function(F){var J=parseInt(F.style.top);var D=F.retrieve("leftSide");var A=F.retrieve("rightSide");var E=D.retrieve("jxLayout");var H=A.retrieve("jxLayout");var N=this.domObj.getPaddingSize().top;var O=F.retrieve("size");if(!O){O=F.getBorderBoxSize();F.store("size",O)}var B=this.domObj.getContentBoxSize();var C,M,K;C=J+O.height-N;if(H.options.height!=null){M=H.options.height+H.options.top-C;K=B.height-C-M}else{M=B.height-H.options.bottom-C;K=H.options.bottom}if(M<0){M=0}if(M<H.options.minHeight){M=H.options.minHeight}if(H.options.maxHeight>=0&&M>H.options.maxHeight){M=H.options.maxHeight}C=B.height-K-M;J=C-O.height;var I,G;I=E.options.top;G=J-I;if(G<0){G=0}if(G<E.options.minHeight){G=E.options.minHeight}if(E.options.maxHeight>=0&&G>E.options.maxHeight){G=E.options.maxHeight}if(I+G!=J){J=I+G;var L=J+O.height-C;C+=L;M-=L}F.style.top=N+J+"px";if(E.options.height==null){D.resize({bottom:B.height-I-G})}else{D.resize({height:G})}if(H.options.height==null){A.resize({top:C})}else{A.resize({top:C,height:M})}},sizeChanged:function(){if(this.options.layout=="horizontal"){this.horizontalResize()}else{this.verticalResize()}},horizontalResize:function(){var O=this.domObj.getContentBoxSize().width;var D=O;for(var E=0;E<this.bars.length;E++){var L=this.bars[E];var Q=L.retrieve("size");if(!Q||Q.width==0){Q=L.getBorderBoxSize();L.store("size",Q)}O-=Q.width}var I=0;var H;for(var E=0;E<this.elements.length;E++){var K=this.elements[E];H=K.retrieve("jxLayout").options;if(H.width!=null){O-=parseInt(H.width)}else{var N=0;if(H.right!=0||H.left!=0){N=K.getBorderBoxSize().width}O-=N;I++}}if(I==0){O+=H.width;H.width=null;I=1}var G=parseInt(O/I);var P=O%I;var B=this.domObj.getPaddingSize().left;var C=0;for(var E=0;E<this.elements.length;E++){var K=this.elements[E];var J=K.retrieve("jxLayout");var H=J.options;if(H.width!=null){J.resize({left:C});C+=H.width}else{var M=G;if(I==1){M+=P}I--;var N=0;if(H.right!=0||H.left!=0){N=K.getBorderBoxSize().width+M}else{N=M}if(N<0){if(I>0){G=G+N/I}N=0}if(N<H.minWidth){if(I>0){G=G+(N-H.minWidth)/I}N=H.minWidth}if(H.maxWidth>=0&&N>H.maxWidth){if(I>0){G=G+(N-H.maxWidth)/I}N=K.options.maxWidth}var A=D-C-N;J.resize({left:C,right:A});C+=N}var F=K.retrieve("rightBar");if(F){F.setStyle("left",B+C);C+=F.retrieve("size").width}}},verticalResize:function(){var N=this.domObj.getContentBoxSize().height;var B=N;for(var D=0;D<this.bars.length;D++){var L=this.bars[D];var Q=L.retrieve("size");if(!Q||Q.height==0){Q=L.getBorderBoxSize();L.store("size",Q)}N-=Q.height}var I=0;var H;for(var D=0;D<this.elements.length;D++){var K=this.elements[D];H=K.retrieve("jxLayout").options;if(H.height!=null){N-=parseInt(H.height)}else{var G=0;if(H.bottom!=0||H.top!=0){G=K.getBorderBoxSize().height}N-=G;I++}}if(I==0){N+=H.height;H.height=null;I=1}var F=parseInt(N/I);var O=N%I;var P=this.domObj.getPaddingSize().top;var C=0;for(var D=0;D<this.elements.length;D++){var K=this.elements[D];var J=K.retrieve("jxLayout");var H=J.options;if(H.height!=null){J.resize({top:C});C+=H.height}else{var M=F;if(I==1){M+=O}I--;var G=0;if(H.bottom!=0||H.top!=0){G=K.getBorderBoxSize().height+M}else{G=M}if(G<0){if(I>0){F=F+G/I}G=0}if(G<H.minHeight){if(I>0){F=F+(G-H.minHeight)/I}G=H.minHeight}if(H.maxHeight>=0&&G>H.maxHeight){if(I>0){F=F+(G-H.maxHeight)/I}G=H.maxHeight}var A=B-C-G;J.resize({top:C,bottom:A});C+=G}var E=K.retrieve("rightBar");if(E){E.style.top=P+C+"px";C+=E.retrieve("size").height}}}});Jx.Splitter.Snap=new Class({snap:null,element:null,splitter:null,layout:"vertical",initialize:function(A,E,F){this.snap=A;this.element=E;var D=E.retrieve("jxLayout");D.addEvent("sizeChange",this.sizeChange.bind(this));this.splitter=F;this.layout=F.options.layout;var B=D.options;var C=this.element.getContentBoxSize();if(this.layout=="vertical"){this.originalSize=C.height;this.minimumSize=B.minHeight?B.minHeight:0}else{this.originalSize=C.width;this.minimumSize=B.minWidth?B.minWidth:0}A.addEvent("click",this.toggleElement.bind(this))},toggleElement:function(){var B=this.element.getContentBoxSize();var A={};if(this.layout=="vertical"){if(B.height==this.minimumSize){A.height=this.originalSize}else{this.originalSize=B.height;A.height=this.minimumSize}}else{if(B.width==this.minimumSize){A.width=this.originalSize}else{this.originalSize=B.width;A.width=this.minimumSize}}this.element.resize(A);this.splitter.sizeChanged()},sizeChange:function(){var A=this.element.getBorderBoxSize();if(this.layout=="vertical"){if(A.height==this.minimumSize){this.snap.addClass("jxSnapClosed");this.snap.removeClass("jxSnapOpened")}else{this.snap.addClass("jxSnapOpened");this.snap.removeClass("jxSnapClosed")}}else{if(A.width==this.minimumSize){this.snap.addClass("jxSnapClosed");this.snap.removeClass("jxSnapOpened")}else{this.snap.addClass("jxSnapOpened");this.snap.removeClass("jxSnapClosed")}}}});Jx.TabSet=new Class({Implements:[Options,Events],tabs:null,domObj:null,initialize:function(B,A){this.setOptions(A);this.tabs=[];this.domObj=$(B);if(!this.domObj.hasClass("jxTabSetContainer")){this.domObj.addClass("jxTabSetContainer")}this.selectionChangedFn=this.selectionChanged.bind(this)},resizeTabBox:function(){var B=Element.getContentBoxSize(this.domObj.parentNode);Element.setBorderBoxSize(this.domObj,{width:B.width,height:B.height});for(var A=0;A<this.domObj.childNodes.length;A++){if(this.domObj.childNodes[A].nodeType==3){continue}Element.setBorderBoxSize(this.domObj.childNodes[A],{height:B.height});if(this.domObj.childNodes[A].resize){this.domObj.childNodes[A].resize()}}},add:function(){$A(arguments).each(function(A){if(A instanceof Jx.Button.Tab){A.addEvent("down",this.selectionChangedFn);this.domObj.appendChild(A.content);if(!this.activeTab){A.setActive(true)}this.tabs.push(A)}},this)},remove:function(A){if(A instanceof Jx.Button.Tab&&this.tabs.indexOf(A)!=-1){this.tabs.erase(A);if(this.activeTab==A){if(this.tabs.length){this.tabs[0].setActive(true)}}A.removeEvent("down",this.selectionChangedFn);A.content.dispose()}},setActiveTab:function(A){if(this.activeTab&&this.activeTab!=A){this.activeTab.setActive(false)}this.activeTab=A;if(this.activeTab.content.resize){this.activeTab.content.resize()}},selectionChanged:function(A){this.setActiveTab(A);this.fireEvent("tabChange",this,A)}});Jx.TabSet=new Class({Implements:[Options,Events],tabs:null,domObj:null,initialize:function(B,A){this.setOptions(A);this.tabs=[];this.domObj=$(B);if(!this.domObj.hasClass("jxTabSetContainer")){this.domObj.addClass("jxTabSetContainer")}this.selectionChangedFn=this.selectionChanged.bind(this)},resizeTabBox:function(){var B=Element.getContentBoxSize(this.domObj.parentNode);Element.setBorderBoxSize(this.domObj,{width:B.width,height:B.height});for(var A=0;A<this.domObj.childNodes.length;A++){if(this.domObj.childNodes[A].nodeType==3){continue}Element.setBorderBoxSize(this.domObj.childNodes[A],{height:B.height});if(this.domObj.childNodes[A].resize){this.domObj.childNodes[A].resize()}}},add:function(){$A(arguments).each(function(A){if(A instanceof Jx.Button.Tab){A.addEvent("down",this.selectionChangedFn);this.domObj.appendChild(A.content);if(!this.activeTab){A.setActive(true)}this.tabs.push(A)}},this)},remove:function(A){if(A instanceof Jx.Button.Tab&&this.tabs.indexOf(A)!=-1){this.tabs.erase(A);if(this.activeTab==A){if(this.tabs.length){this.tabs[0].setActive(true)}}A.removeEvent("down",this.selectionChangedFn);A.content.dispose()}},setActiveTab:function(A){if(this.activeTab&&this.activeTab!=A){this.activeTab.setActive(false)}this.activeTab=A;if(this.activeTab.content.resize){this.activeTab.content.resize()}},selectionChanged:function(A){this.setActiveTab(A);this.fireEvent("tabChange",this,A)}});Jx.Button.Tab=new Class({Extends:Jx.Button,Implements:[Options,Events,Jx.ContentLoader],content:null,initialize:function(A){A=$merge(A,{type:"Tab",toggle:true});this.parent(A);this.content=new Element("div",{"class":"tabContent"});this.loadContent(this.content);new Jx.Layout(this.content,A);var B=this;this.addEvent("down",function(){B.content.addClass("tabContentActive")});this.addEvent("up",function(){B.content.removeClass("tabContentActive")})},clicked:function(A){this.setActive(true)}});Jx.Toolbar=new Class({Implements:[Options,Events],items:null,domObj:null,isActive:false,options:{position:"top",parent:null},initialize:function(B){this.setOptions(B);this.domObj=new Element("ul",{id:this.options.id,"class":"jxToolbar"});if(this.options.parent){var A=$(this.options.parent);if(!A.hasClass("jxToolbarContainer")){A.addClass("jxToolbarContainer");A.appendChild(this.domObj);var C=new Element("div",{"class":"jxClearer"});A.appendChild(C)}else{A.insertBefore(this.domObj,A.lastChild)}if(["top","right","bottom","left"].contains(this.options.position)){A.addClass("jxToolbar"+this.options.position.capitalize())}else{A.addClass("jxToolbarTop")}}this.deactivateWatcher=this.deactivate.bindWithEvent(this)},add:function(){for(var B=0;B<arguments.length;B++){var A=arguments[B];A.toolbar=this;if(A.domObj){A=A.domObj}if(A.tagName=="LI"){if(!A.hasClass("jxToolItem")){A.addClass("jxToolItem")}this.domObj.appendChild(A)}else{var C=new Jx.Toolbar.Item(A);this.domObj.appendChild(C.domObj)}}if(arguments.length>0){this.fireEvent("add",this)}},remove:function(B){if(B.domObj){B=B.domObj}var A=B.findElement("LI");if(A&&A.parentNode==this.domObj){B.dispose();this.fireEvent("remove",this)}else{return null}},deactivate:function(){this.items.each(function(A){A.hide()});this.setActive(false)},isActive:function(){return this.isActive},setActive:function(A){this.isActive=A;if(this.isActive){document.addEvent("click",this.deactivateWatcher)}else{document.removeEvent("click",this.deactivateWatcher)}},setVisibleItem:function(A){if(this.visibleItem&&this.visibleItem.hide&&this.visibleItem!=A){this.visibleItem.hide()}this.visibleItem=A;if(this.isActive()){this.visibleItem.show()}}});Jx.Toolbar.Item=new Class({domObj:null,initialize:function(A){this.al=[];this.domObj=new Element("li",{"class":"jxToolItem"});if(A){if(A.domObj){this.domObj.appendChild(A.domObj);if(A instanceof Jx.Tab){this.domObj.addClass("jxTabItem")}}else{this.domObj.appendChild(A);if(A.hasClass("jxTab")){this.domObj.addClass("jxTabItem")}}}}});Jx.Toolbar.Separator=new Class({domObj:null,initialize:function(){this.domObj=new Element("li",{"class":"jxToolItem"});this.domSpan=new Element("span",{"class":"separator"});this.domObj.appendChild(this.domSpan)}});Jx.TreeItem=new Class({Implements:[Options,Events],domObj:null,owner:null,options:{label:"",data:null,contextMenu:null,image:null,enabled:true,type:"Item",imageClass:""},initialize:function(A){this.setOptions(A);this.domObj=new Element("li",{"class":"jxTree"+this.options.type});if(this.options.id){this.domObj.id=this.options.id}this.domNode=new Element("img",{"class":"jxTreeImage",src:Jx.aPixel.src});this.domObj.appendChild(this.domNode);this.domLabel=(this.options.draw)?this.options.draw.apply(this):this.draw();this.domObj.appendChild(this.domLabel);this.domObj.store("jxTreeItem",this);if(!this.options.enabled){this.domObj.addClass("jxDisabled")}},draw:function(){var B=new Element("img",{"class":"jxTreeIcon",src:Jx.aPixel.src});if(this.options.image){B.setStyle("backgroundImage","url("+this.options.image+")")}if(this.options.imageClass){B.addClass(this.options.imageClass)}var A=new Element("a",{href:"javascript:void(0)",html:this.options.label,events:{click:this.selected.bindWithEvent(this),dblclick:this.selected.bindWithEvent(this),contextmenu:this.showMenu.bindWithEvent(this)}});A.appendChild(B);return A},finalize:function(){this.finalizeItem()},finalizeItem:function(){if(!this.domObj){return }this.options=null;this.domObj=null;this.owner=null},clone:function(){return new Jx.TreeItem(this.options)},update:function(B){var A=(arguments.length>1)?arguments[1]:(this.owner&&this.owner.isLastNode(this));if(A){this.domObj.removeClass("jxTree"+this.options.type);this.domObj.addClass("jxTree"+this.options.type+"Last")}else{this.domObj.removeClass("jxTree"+this.options.type+"Last");this.domObj.addClass("jxTree"+this.options.type)}},selected:function(A){this.lastEvent=A;this.fireEvent("click",this)},showMenu:function(A){this.lastEvent=A;this.fireEvent("click",this);if(this.contextMenu){this.contextMenu.show(this.lastEvent)}A.stop()},getName:function(){return this.options.label},propertyChanged:function(A){this.options.enabled=A.isEnabled();if(this.options.enabled){this.domObj.removeClass("jxDisabled")}else{this.domObj.addClass("jxDisabled")}}});Jx.TreeFolder=new Class({Extends:Jx.TreeItem,subDomObj:null,nodes:null,isOpen:false,options:{folderCloseImage:Jx.baseURL+"images/tree_folder.png",folderOpenImage:Jx.baseURL+"images/tree_folder_open.png"},initialize:function(A){this.parent($merge(A,{type:"Branch"}));this.domObj.childNodes[0].addEvent("click",this.clicked.bindWithEvent(this));this.nodes=[];this.subDomObj=new Element("ul",{"class":"jxTree"});this.domObj.appendChild(this.subDomObj);this.subDomObj.className="jxTree";if(this.options.isOpen){this.expand()}else{this.collapse()}},finalize:function(){this.finalizeFolder();this.finalizeItem();this.subDomObj=null},finalizeFolder:function(){this.domObj.childNodes[0].removeEvents();for(var A=this.nodes.length-1;A>=0;A--){this.nodes[A].finalize();if(this.nodes[A].domObj){this.subDomObj.removeChild(this.nodes[A].domObj)}this.nodes.pop()}},clone:function(){var A=new Jx.TreeFolder(this.options);this.nodes.each(function(B){A.append(B.clone())});return A},isLastNode:function(A){if(this.nodes.length==0){return false}else{return this.nodes[this.nodes.length-1]==A}},update:function(C){if(!this.parent){return }var B=false;if(arguments.length>1){B=arguments[1]}else{B=(this.owner&&this.owner.isLastNode(this))}var D="jxTree"+this.options.type;D+=B?"Last":"";D+=this.options.isOpen?"Open":"Closed";this.domObj.className=D;if(B){this.subDomObj.className="jxTree"}else{this.subDomObj.className="jxTree jxTreeNest"}if(this.nodes&&C){var A=this;this.nodes.each(function(F,E){F.update(false,E==A.nodes.length-1)})}},append:function(A){A.owner=this;this.nodes.push(A);this.subDomObj.appendChild(A.domObj);this.update(true)},insert:function(D,B){D.owner=this;if(!B){this.nodes.unshift(D);if(this.subDomObj.childNodes.length==0){this.subDomObj.appendChild(D.domObj)}else{this.subDomObj.insertBefore(D.domObj,this.subDomObj.childNodes[0])}}else{var A=false;for(var C=0;C<this.nodes.length;C++){if(this.nodes[C]==B){C=C+1;if(C<this.nodes.length){this.nodes.splice(C,0,D);this.subDomObj.insertBefore(D.domObj,this.subDomObj.childNodes[C]);A=true;break}}}if(!A){this.nodes.push(D);this.subDomObj.appendChild(D.domObj)}}this.update(true)},remove:function(B){B.owner=null;for(var A=0;A<this.nodes.length;A++){if(this.nodes[A]==B){this.nodes.splice(A,1);this.subDomObj.removeChild(this.subDomObj.childNodes[A]);break}}this.update(true)},replace:function(D,B){var A=false;for(var C=0;C<this.nodes.length;C++){if(this.nodes[C]==B){if(C<this.nodes.length){D.owner=this;this.nodes.splice(C,1,D);this.subDomObj.replaceChild(D.domObj,B.domObj);return true}}}return false},clicked:function(A){if(this.options.isOpen){this.collapse()}else{this.expand()}},expand:function(){this.options.isOpen=true;this.subDomObj.setStyle("display","block");this.update(true);this.fireEvent("disclosed",this)},collapse:function(){this.options.isOpen=false;this.subDomObj.setStyle("display","none");this.update(true);this.fireEvent("disclosed",this)},findChild:function(C){if(C.length==0){return this}if(C.length==1){for(var B=0;B<this.nodes.length;B++){if(this.nodes[B].getName()==C[0]){return this.nodes[B]}}return null}var A=C.shift();for(var B=0;B<this.nodes.length;B++){if(this.nodes[B].getName()==A&&this.nodes[B].findChild){return this.nodes[B].findChild(C)}}return null}});Jx.Tree=new Class({Extends:Jx.TreeFolder,initialize:function(B,A){this.parent(A);this.subDomObj=new Element("ul",{"class":"jxTreeRoot"});$(B).appendChild(this.subDomObj);this.nodes=[];this.isOpen=true},finalize:function(){this.clear();this.subDomObj.parentNode.removeChild(this.subDomObj)},clear:function(){for(var A=this.nodes.length-1;A>=0;A--){this.subDomObj.removeChild(this.nodes[A].domObj);this.nodes[A].finalize();this.nodes.pop()}},update:function(A){var B=true;if(this.subDomObj){if(B){this.subDomObj.removeClass("jxTreeNest")}else{this.subDomObj.addClass("jxTreeNest")}}if(this.nodes&&A){this.nodes.each(function(C){C.update(false)})}},append:function(A){A.owner=this;this.nodes.push(A);this.subDomObj.appendChild(A.domObj);this.update(true)}});
\ No newline at end of file

Modified: sandbox/jx2/jx/lib/jxlib.uncompressed.js
===================================================================
--- sandbox/jx2/jx/lib/jxlib.uncompressed.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/jx/lib/jxlib.uncompressed.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -5303,7 +5303,7 @@
 		return this.start(obj);
 	}
 
-});// $Id: common.js 793 2008-08-28 14:22:32Z pspencer $
+});// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx
  * Jx is a global singleton object that contains the entire Jx library
@@ -6235,68 +6235,24 @@
      */
     showChrome: function(element) {
         element = $(element);
-        var jxl;
-        if (!this.chromeResizeHandler) {
-            this.chromeResizeHandler = this.showChrome.bind(this);
-        }
         if (!this.chrome) {
             this.makeChrome(element);
         }
         if (element && this.chrome.parentNode !== element) {
-            var p = $(this.chrome.parentNode);
-            if (p) {
-                jxl = p.retrieve('jxLayout');
-                if (jxl) {
-                    jxl.removeEvent('sizeChange', this.chromeResizeHandler);
-                }
-            }
             element.adopt(this.chrome);
-            jxl = element.retrieve('jxLayout');
-            if (jxl) {
-                jxl.addEvent('sizeChange', this.chromeResizeHandler);
-            }
         }
-        this.resizeChrome();
     },
     /**
-     * Method: resizeChrome
-     * resizes the chrome to fit around its parent, should be called
-     * automatically if the parent is controlled by <Jx.Layout>, 
-     * otherwise you will need to call this yourself if your chromed
-     * element changes size.
-     */
-    resizeChrome: function() {
-        // if (this.chrome && this.chrome.parentNode) {
-        //     var p = $(this.chrome.parentNode);
-        //     var padding = this.chrome.getPaddingSize();
-        //     var chromeBorder = this.chrome.getBorderSize();
-        //     var margin = p.getMarginSize();
-        //     var border = p.getBorderSize();
-        //     var size = p.getMarginBoxSize();
-        //     this.chrome.setStyles({
-        //          left: -(padding.left + chromeBorder.left + border.left + margin.left),
-        //          top: -(padding.top +  chromeBorder.top + border.top + margin.top)
-        //     });
-        //     this.chrome.setContentBoxSize(size);
-        // }        
-    },
-    /**
      * Method: hideChrome
      * removes the chrome from the DOM.  If you do this, you can't
      * call showChrome with no arguments.
      */
     hideChrome: function() {
         if (this.chrome) {
-            if (this.chrome.parentNode) {
-                var jxl = this.chrome.parentNode.retrieve('jxLayout');
-                if (jxl) {
-                    jxl.removeEvent('sizeChange', this.chromeResizeHandler);
-                }            
-            }
             this.chrome.dispose();
         }
     }
-});// $Id: button.js 792 2008-08-28 12:57:49Z pspencer $
+});// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.Button
  * Jx.Button creates a clickable element that can be added to a web page.
@@ -6421,6 +6377,7 @@
         label: '',
         enabled: true,
         toggle: false,
+        toggleClass: 'Toggle',
         halign: 'center',
         valign: 'middle',
         isActive: false,
@@ -6466,8 +6423,8 @@
         
         // the main container for the button
         var d = new Element(this.options.container, {'class': 'jx'+this.options.type+'Container'});
-        if (this.options.toggle) {
-            d.addClass('jx'+this.options.type+'Toggle');
+        if (this.options.toggle && this.options.toggleClass) {
+            d.addClass('jx'+this.options.type+this.options.toggleClass);
         }
         // the clickable part of the button
         var a = new Element('a', {
@@ -6654,7 +6611,7 @@
             parent.appendChild(this.domObj);            
         }
     }
-});// $Id: button.flyout.js 782 2008-08-26 17:36:11Z pspencer $
+});// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.Button.Flyout
  * Flyout buttons expose a panel when the user clicks the button.  The
@@ -6864,7 +6821,7 @@
             Jx.Button.Flyout.Stack[Jx.Button.Flyout.Stack.length - 1].hide();
         }
     }
-});// $Id: button.multi.js 711 2008-08-13 20:38:33Z pspencer $
+});// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.Button.Multi
  * Multi buttons are used to contain multiple buttons in a drop down list
@@ -7055,7 +7012,7 @@
         button.clicked();
         this.flyout.hide();
     }
-});// $Id: colorpalette.js 763 2008-08-21 13:18:11Z pspencer $
+});// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.ColorPalette
  * A Jx.ColorPalette presents a user interface for selecting colors.  Currently,
@@ -7355,7 +7312,7 @@
     }
 });
 
-// $Id: button.color.js 763 2008-08-21 13:18:11Z pspencer $ 
+// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $ 
 /**
  * Class: Jx.Button.Color
  * A <Jx.ColorPalette> wrapped up in a Jx.Button.  The button includes a
@@ -7531,7 +7488,7 @@
         this.selectedSwatch.setStyles(styles);
     }
 });
-// $Id: $
+// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.ButtonSet
  * A ButtonSet manages a set of <Jx.Button> instances by ensuring that only one
@@ -7594,7 +7551,10 @@
      */
     add : function() {
         $A(arguments).each(function(button) {
-            button.domObj.addClass('jx'+button.options.type+'Set');
+            if (button.domObj.hasClass('jx'+button.options.type+'Toggle')) {
+                button.domObj.removeClass('jx'+button.options.type+'Toggle');
+                button.domObj.addClass('jx'+button.options.type+'Set');                
+            }
             button.addEvent('down',this.buttonChangedHandler);
             var that = this;
             button.setActive = function(isActive) {
@@ -7657,7 +7617,7 @@
 
 
 
-// $Id: grid.js 711 2008-08-13 20:38:33Z pspencer $
+// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.Grid
  * A tabular control that has fixed scrolling headers on the rows and columns
@@ -7772,6 +7732,12 @@
         rowHeaders: false,
         columnHeaders: false,
         rowSelection: false,
+        columnSelection: false,
+        cellPrelight: false,
+        rowPrelight: false,
+        columnPrelight: false,
+        rowHeaderPrelight: false,
+        columnHeaderPrelight: false,
         cellSelection: false
     },
     /**
@@ -7793,8 +7759,16 @@
      *      of row header cells are displayed.
      * rowSelection - defaults to false.  If set to true, allow the
      *      user to select rows.
+     * columnSelection - defaults to false.  If set to true, allow the
+     *      user to select columns.
      * cellSelection - defaults to false.  If set to true, allow the
      *      user to select cells.
+     * cellPrelight - defaults to false.  If set to true, the cell under
+     *      the mouse is highlighted as the mouse moves.
+     * rowPrelight - defaults to false.  If set to true, the row under
+     *      the mouse is highlighted as the mouse moves.
+     * columnPrelight - defaults to false.  If set to true, the column
+     *      under the mouse is highlighted as the mouse moves.
      */
     initialize : function( domObj, options ) {
         this.setOptions(options);
@@ -8199,7 +8173,7 @@
                 this.prelitRow.removeClass('jxGridRowPrelight');
             }
             this.prelitRow = tr;
-            if (this.prelitRow && !this.prelitRow.hasClass('jxGridRowSelected')) {
+            if (this.prelitRow) {
                 this.prelightRowHeader(row);
                 this.prelitRow.addClass('jxGridRowPrelight');
             }
@@ -8221,6 +8195,18 @@
         /* TODO: Jx.Grid.prelightColumn
          * implement column prelighting (possibly) 
          */
+        if (col >= 0 && col < this.gridTable.rows[0].cells.length) {
+            if ($chk(this.prelitColumn)) {
+                for (var i=0; i<this.gridTable.rows.length; i++) {
+                    this.gridTable.rows[i].cells[this.prelitColumn + 1].removeClass('jxGridColumnPrelight');
+                }
+            }
+            this.prelitColumn = col;
+            for (var i=0; i<this.gridTable.rows.length; i++) {
+                this.gridTable.rows[i].cells[col + 1].addClass('jxGridColumnPrelight');
+            }            
+        }
+        
         this.prelightColumnHeader(col);
     },
     
@@ -8242,8 +8228,6 @@
             this.prelitCell = td;
             if (this.prelitCell) {
                 this.prelitCell.addClass('jxGridCellPrelight');
-                this.prelightRow(row);
-                this.prelightColumn(col);
             }
         }    
     },
@@ -8267,10 +8251,10 @@
          }
          
          if (this.selectedCell) {
-             this.selectedCell.addClass('jxGridCellSelected');
-         } else {
              this.selectedCell.removeClass('jxGridCellSelected');
          }
+         this.selectedCell = td;
+         this.selectedCell.addClass('jxGridCellSelected');
     },
     
     /** 
@@ -8313,8 +8297,8 @@
             } else {
                 tr.removeClass('jxGridRowSelected');
             }
+            this.selectRowHeader(row, selected);
         }
-        this.selectRowHeader(row, selected);
     },
     
     /** 
@@ -8356,16 +8340,15 @@
         if (col >= 0 && col < this.gridTable.rows[0].cells.length) {
             if (selected) {
                 for (var i=0; i<this.gridTable.rows.length; i++) {
-                    this.gridTable.rows[i].cells[this.selectedColumn + 1].removeClass('jxGridColumnSelected');
+                    this.gridTable.rows[i].cells[col + 1].addClass('jxGridColumnSelected');
                 }
             } else {
                 for (var i=0; i<this.gridTable.rows.length; i++) {
-                    this.gridTable.rows[i].cells[col+1].addClass('jxGridColumnSelected');
-                }
-                
+                    this.gridTable.rows[i].cells[col + 1].removeClass('jxGridColumnSelected');
+                }   
             }
+            this.selectColumnHeader(col, selected);
         }
-        this.selectColumnHeader(col, selected);
     },
     
     /**
@@ -8378,7 +8361,21 @@
      */
     onMouseMoveGrid: function(e) {
         var rc = this.getRowColumnFromEvent(e);
-        this.prelightCell(rc.row, rc.column);
+        if (this.options.cellPrelight) {
+            this.prelightCell(rc.row, rc.column);            
+        }
+        if (this.options.rowPrelight) {
+            this.prelightRow(rc.row);            
+        }
+        if (this.options.rowHeaderPrelight) {
+            this.prelightRowHeader(rc.row);            
+        }
+        if (this.options.columnPrelight) {
+            this.prelightColumn(rc.column);
+        }        
+        if (this.options.columnHeaderPrelight) {
+            this.prelightColumnHeader(rc.column);
+        }        
     },
     
     /**
@@ -8390,8 +8387,10 @@
      * e - {Event} the browser event object
      */
     onMouseMoveRowHeader: function(e) {
-        var rc = this.getRowColumnFromEvent(e);
-        this.prelightRow(rc.row);
+        if (this.options.rowPrelight) {
+            var rc = this.getRowColumnFromEvent(e);
+            this.prelightRow(rc.row);            
+        }
     },
 
     /**
@@ -8403,8 +8402,10 @@
      * e - {Event} the browser event object
      */
     onMouseMoveColumnHeader: function(e) {
-        var rc = this.getRowColumnFromEvent(e);
-        this.prelightColumn(rc.column);
+        if (this.options.columnPrelight) {
+            var rc = this.getRowColumnFromEvent(e);
+            this.prelightColumn(rc.column);
+        }
     },
     
     /**
@@ -8430,11 +8431,17 @@
      */
     onClickGrid: function(e) {
         var rc = this.getRowColumnFromEvent(e);
-        //this.selectCell(rc.row, rc.column);
         
-        if (this.model.cellSelected) {
+        if (this.options.cellSelection && this.model.cellSelected) {
             this.model.cellSelected(this, rc.row, rc.column);
         }
+        if (this.options.rowSelection && this.model.rowSelected) {
+            this.model.rowSelected(this, rc.row);
+        }
+        if (this.options.columnSelection && this.model.columnSelected) {
+            this.model.columnSelected(this, rc.column);
+        }
+        
     },
     
     /**
@@ -8464,7 +8471,7 @@
     onClickRowHeader: function(e) {
         var rc = this.getRowColumnFromEvent(e);
         
-        if (this.model.rowSelected) {
+        if (this.options.rowSelection && this.model.rowSelected) {
             this.model.rowSelected(this, rc.row);
         }
     },
@@ -8496,7 +8503,7 @@
     onClickColumnHeader: function(e) {
         var rc = this.getRowColumnFromEvent(e);
         
-        if (this.model.columnSelected) {
+        if (this.options.columnSelection && this.model.columnSelected) {
             this.model.columnSelected(this, rc.column);
         }
     },
@@ -8538,7 +8545,7 @@
         }
         return {row:row,column:col};
     }
-});// $Id: layout.js 746 2008-08-16 00:30:25Z pspencer $
+});// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.Layout
  * Jx.Layout is used to provide more flexible layout options for applications
@@ -8938,7 +8945,7 @@
 
         this.fireEvent('sizeChange',this);
     }
-});// $Id: menu.js 782 2008-08-26 17:36:11Z pspencer $
+});// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.Menu
  * A main menu as opposed to a sub menu that lives inside the menu.
@@ -9070,6 +9077,18 @@
             this.show({event:e});
         }
     },
+    
+    eventInMenu: function(e) {
+        return e.target.descendantOf(this.domObj) ||
+               e.target.descendantOf(this.subDomObj) ||
+               this.items.some(
+                   function(item) {
+                       return item instanceof Jx.Menu.SubMenu && 
+                              item.eventInMenu(e);
+                   }
+               );
+    },
+    
     /**
      * Method: hide
      * Hide the menu.
@@ -9079,16 +9098,15 @@
      */
     hide: function(e) {
         if (e) {
-            if (e.target.descendantOf(this.domObj) ||
-                e.target.descendantOf(this.subDomObj)) {
+            if (this.eventInMenu(e)) {
                 return;
             }
         }
         if (Jx.Menu.Menus[0] && Jx.Menu.Menus[0] == this) {
             Jx.Menu.Menus[0] = null;
         }
-        if (this.domA) {
-            this.domA.removeClass('jx'+this.button.options.type+'Active');            
+        if (this.button && this.button.domA) {
+            this.button.domA.removeClass('jx'+this.button.options.type+'Active');            
         }
         this.contentContainer.dispose();
         this.items.each(function(item){item.hide(e);});
@@ -9129,8 +9147,8 @@
 
         this.contentContainer.setStyle('visibility','');
         
-        if (this.domA) {
-            this.domA.addClass('jx'+this.button.options.type+'Active');            
+        if (this.button && this.button.domA) {
+            this.button.domA.addClass('jx'+this.button.options.type+'Active');            
         }
         if (e) {
             e.stop();
@@ -9166,7 +9184,7 @@
     }
 });
 
-// $Id: menu.item.js 777 2008-08-25 15:20:23Z pspencer $
+// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.Menu.Item
  * A menu item is a single entry in a menu.  It is typically composed of
@@ -9200,16 +9218,11 @@
      * {<Jx.SubMenu> or <Jx.Menu>} the menu that contains the menu item.
      */
     owner: null,
-    /**
-     * Property: button
-     * {<Jx.Button>} the clickable part of the menu item is managed as a
-     * <Jx.Button>
-     */
-    button: null,
     options: {
         enabled: true,
         image: Jx.baseURL + 'images/a_pixel.png',
-        label: '&nbsp;'
+        label: '&nbsp;',
+        toggleClass: 'Toggle'
     },
     /**
      * Constructor: Jx.Menu.Item
@@ -9226,7 +9239,8 @@
     initialize: function(options) {
         this.parent($merge(options, {
             container:'li',
-            type:'MenuItem'
+            type:'MenuItem',
+            toggleClass: (options.image ? null : this.options.toggleClass)
         }));
         this.domObj.addEvent('mouseover', this.onMouseOver.bindWithEvent(this));
         if (!this.options.enabled) {
@@ -9297,7 +9311,7 @@
     }
 });
 
-// $Id: menu.separator.js 711 2008-08-13 20:38:33Z pspencer $
+// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.Menu.Separator
  * A convenience class to create a visual separator in a menu.
@@ -9352,7 +9366,7 @@
      * Show the menu item
      */
     show: $empty
-});// $Id: menu.submenu.js 782 2008-08-26 17:36:11Z pspencer $
+});// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.Menu.SubMenu
  * A sub menu contains menu items within a main menu or another
@@ -9461,6 +9475,18 @@
         
         this.setActive(true);
     },
+    
+    eventInMenu: function(e) {
+        return e.target.descendantOf(this.domObj) ||
+               e.target.descendantOf(this.subDomObj) ||
+               this.items.some(
+                   function(item) {
+                       return item instanceof Jx.Menu.SubMenu && 
+                              item.eventInMenu(e);
+                   }
+               );
+    },
+    
     /**
      * Method: hide
      * Hide the sub menu
@@ -9601,7 +9627,7 @@
             this.visibleItem.show();
         }
     }
-});// $Id: menu.context.js 788 2008-08-27 15:07:01Z pspencer $
+});// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.Menu.Context
  * A <Jx.Menu> that has no button but can be opened at a specific 
@@ -9674,7 +9700,7 @@
 
         e.stop();
     }    
-});// $Id: panel.js 800 2008-08-29 21:43:52Z pspencer $
+});// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.Panel
  * A panel is a fundamental container object that has a content
@@ -10171,7 +10197,7 @@
         this.fireEvent('close', this);
     }
     
-});// $Id: dialog.js 782 2008-08-26 17:36:11Z pspencer $
+});// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.Dialog
  * A Jx.Dialog implements a floating dialog.  Dialogs represent a useful way
@@ -10327,8 +10353,10 @@
                 handle: this.title,
                 onStart: (function() {
                     this.contentContainer.setStyle('visibility','hidden');
+                    this.chrome.addClass('jxChromeDrag');
                 }).bind(this),
                 onComplete: (function() {
+                    this.chrome.removeClass('jxChromeDrag');
                     this.contentContainer.setStyle('visibility','');
                     this.position(this.domObj, this.options.parent, {
                         horizontal:[parseInt(this.domObj.style.left)+' left'],
@@ -10362,9 +10390,10 @@
                 handle:this.resizeHandle,
                 onStart: (function() {
                     this.contentContainer.setStyle('visibility','hidden');
+                    this.chrome.addClass('jxChromeDrag');
                 }).bind(this),
-                onDrag: this.resizeChrome.bind(this),
                 onComplete: (function() {
+                    this.chrome.removeClass('jxChromeDrag');
                     var size = this.domObj.getMarginBoxSize();
                     this.options.width = size.width;
                     this.options.height = size.height;
@@ -10391,7 +10420,6 @@
     sizeChanged: function() {
         if (!this.options.closed) {
             this.layoutContent();
-            this.resizeChrome();
         }
     },
     
@@ -10543,7 +10571,7 @@
         }
     }
 });
-// $Id: panelset.js 762 2008-08-20 20:59:40Z pspencer $
+// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.PanelSet
  *
@@ -10698,7 +10726,7 @@
         }
         panel.domObj.resize({top: t, height:b - t, bottom: null});
     }
-});// $Id: combo.js 751 2008-08-16 13:15:37Z pspencer $
+});// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.Combo
  * A drop down list of selectable items that can be any HTML.
@@ -10721,7 +10749,7 @@
  * This file is licensed under an MIT style license
  */
 Jx.Combo = new Class({
-    Implements: [Options,Events,Jx.AutoPosition],
+    Implements: [Options,Events,Jx.AutoPosition, Jx.Chrome],
     /** 
      * Property: domObj
      * {HTMLElement} the div that contains the control, 
@@ -10956,14 +10984,16 @@
      * Open the pick list
      */
     open: function() {
+        this.domListDiv.setStyle('visibility','hidden');
+        document.body.adopt(this.domListDiv);
+        this.domListDiv.width = '';
+        this.domListDiv.setContentBoxSize({width: Math.max(this.domListDiv.getSize().x, this.domObj.getSize().x)});
+        this.showChrome(this.domListDiv);
         this.position(this.domListDiv, this.domObj, {
             horizontal: ['left left', 'right right'],
-            vertical: ['bottom top', 'top bottom']
+            vertical: ['bottom top', 'top bottom'],
+            offsets: this.chromeOffsets
         });
-        this.domListDiv.width = '';
-        this.domListDiv.setStyle('visibility','hidden');
-        document.body.adopt(this.domListDiv);
-        this.domListDiv.setBorderBoxSize({width: Math.max(this.domListDiv.getSize().x, this.domObj.getSize().x)});
         this.domListDiv.setStyle('visibility','');
         document.addEvents({
             keydown:  this.keypressHandler,
@@ -11015,7 +11045,7 @@
     getSelection: function() {
         return this.currentSelection ? this.currentSelection.name : '';
     }
-});// $Id: splitter.js 775 2008-08-22 14:27:26Z pspencer $
+});// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.Splitter
  * a Jx.Splitter creates two or more containers within a parent container
@@ -11677,7 +11707,7 @@
              }
          }
     }
-});// $Id: splitter.snap.js 711 2008-08-13 20:38:33Z pspencer $
+});// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.Splitter.Snap
  * A helper class to create an element that can snap a split panel open or
@@ -11795,7 +11825,7 @@
             }
         }
     }
-});// $Id: tabset.js 758 2008-08-19 02:35:50Z pspencer $
+});// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.TabSet
  * A TabSet manages a set of <Jx.Button.Tab> content areas by ensuring that only one
@@ -11962,7 +11992,7 @@
 
 
 
-// $Id: tabset.js 758 2008-08-19 02:35:50Z pspencer $
+// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.TabSet
  * A TabSet manages a set of <Jx.Button.Tab> content areas by ensuring that only one
@@ -12129,7 +12159,7 @@
 
 
 
-// $Id: button.tab.js 758 2008-08-19 02:35:50Z pspencer $
+// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.Button.Tab
  * A single tab in a tab set.  A tab has a label (displayed in the tab) and a
@@ -12211,7 +12241,7 @@
     clicked : function(evt) {
         this.setActive(true);
     }
-});// $Id: toolbar.js 800 2008-08-29 21:43:52Z pspencer $
+});// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.Toolbar
  * A toolbar is a container object that contains other objects such as
@@ -12427,7 +12457,7 @@
         }
     }
 });
-// $Id: toolbar.item.js 711 2008-08-13 20:38:33Z pspencer $
+// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.Toolbar.Item
  * A helper class to provide a container for something to go into 
@@ -12469,7 +12499,7 @@
             }
         }
     }
-});// $Id: toolbar.separator.js 711 2008-08-13 20:38:33Z pspencer $
+});// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.Toolbar.Separator
  * A helper class that represents a visual separator in a <Jx.Toolbar>
@@ -12499,7 +12529,7 @@
         this.domObj.appendChild(this.domSpan);
     }
 });
-// $Id: treeitem.js 797 2008-08-29 19:44:34Z pspencer $
+// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.TreeItem 
  * An item in a tree.  An item is a leaf node that has no children.
@@ -12705,7 +12735,7 @@
             this.domObj.addClass('jxDisabled');
         }
     }
-});// $Id: treefolder.js 797 2008-08-29 19:44:34Z pspencer $
+});// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.TreeFolder
  * A Jx.TreeFolder is an item in a tree that can contain other items.  It is
@@ -13038,7 +13068,7 @@
         }
         return null;
     }
-});// $Id: tree.js 797 2008-08-29 19:44:34Z pspencer $
+});// $Id: jxlib.uncompressed.js 823 2008-09-04 17:15:02Z pspencer $
 /**
  * Class: Jx.Tree
  * Jx.Tree displays hierarchical data in a tree structure of folders and nodes.

Modified: sandbox/jx2/jx/lib/jxskin_delicious.css
===================================================================
--- sandbox/jx2/jx/lib/jxskin_delicious.css	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/jx/lib/jxskin_delicious.css	2008-09-04 17:18:46 UTC (rev 1493)
@@ -21,4 +21,4 @@
  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  * DEALINGS IN THE SOFTWARE.
- */body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';}a{outline:none;}.png24{filter:expression(Jx.applyPNGFilter(this));}.jxClearer{display:block;position:relative;float:none;clear:both;font-size:0;line-height:0;width:0;height:0;margin:0;padding:0;}.jxDisabled{opacity:.4;filter:Alpha(opacity=40);}iframe.jxIframeShim{position:absolute;top:0;left:0;width:100%;height:100%;filter:Alpha(opacity:0);opacity:0;z-index:-1;}div.jxButtonContainer{display:block;position:relative;float:left;margin:2px;padding:0;border:none;}a.jxButton{display:block;position:relative;float:left;margin:0;padding:0 0 0 3px;border:none;background-image:url(../images/delicious/button_bg.png);background-position:left -56px;background-repeat:no-repeat;text-decoration:none;}ul.jxToolbar a.jxButton{background-position:left top;}span.jxButtonContent{display:block;position:relative;float:left;font-size:0;line-height:0;margin:0;padding:6px 6px 6px 3px;border:none;background-image:url(../images/delicious/button_bg.png);background-position:right -56px;background-repeat:no-repeat;}ul.jxToolbar span.jxButtonContent{background-position:right top;}a.jxButton:hover{background-position:left -224px;}ul.jxToolbar a.jxButton:hover{background-position:left -56px;}a.jxButton:hover span.jxButtonContent{background-position:right -224px;}ul.jxToolbar a.jxButton:hover span.jxButtonContent{background-position:right -56px;}ul.jxToolbar a.jxButtonActive,a.jxButtonActive{background-position:left -168px;}ul.jxToolbar a.jxButtonActive span.jxButtonContent,a.jxButtonActive span.jxButtonContent{background-position:right -168px;}ul.jxToolbar a.jxButtonActive:hover,a.jxButtonActive:hover{background-position:left -224px;}ul.jxToolbar a.jxButtonActive:hover span.jxButtonContent,a.jxButtonActive:hover span.jxButtonContent{background-position:right -224px;}ul.jxToolbar a.jxButton:active,a.jxButton:active,ul.jxToolbar a.jxButtonActive:active,a.jxButtonActive:active{background-position:left -112px;}ul.jxToolbar a.jxButton:active span.jxButtonContent,a.jxButton:active span.jxButtonContent,ul.jxToolbar a.jxButtonActive:active span.jxButtonContent,a.jxButtonActive:active span.jxButtonContent{background-position:right -112px;}ul.jxToolbar .jxDisabled a.jxButton:hover,ul.jxToolbar .jxDisabled a.jxButton:active,.jxDisabled a.jxButton:hover,.jxDisabled a.jxButton:active{background-position:left top;}ul.jxToolbar .jxDisabled a.jxButton:hover span.jxButtonContent,ul.jxToolbar .jxDisabled a.jxButton:active span.jxButtonContent,.jxDisabled a.jxButton:hover span.jxButtonContent,.jxDisabled a.jxButton:active span.jxButtonContent{background-position:right top;}img.jxButtonIcon{position:relative;float:left;width:16px;height:16px;background-position:center center;background-repeat:no-repeat;}span.jxButtonContent span{font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:16px;}span.jxButtonContent span.jxButtonLabel{display:block;position:relative;float:left;cursor:pointer;margin:0;padding:0 4px 0 4px;color:#000;font-size:11px;}a.jxButtonMenu span.jxButtonContent span,a.jxButtonFlyout span.jxButtonContent span{padding-right:16px;background-image:url(../images/delicious/emblems.png);background-position:right -16px;background-repeat:no-repeat;}a.jxButtonMulti span.jxButtonContent,a.jxButtonFlyout span.jxButtonContent{padding-left:0;padding-right:0;}a.jxButtonMulti span.jxButtonLabel{padding-left:0;padding-right:0;}.jxFlyout .jxChrome{background-image:url(../images/delicious/flyout_chrome.png);padding:5px 5px 7px 6px;}.jxFlyout{position:absolute;display:block;clear:both;float:none;z-index:100;margin:0;padding:0;font-size:12px;line-height:14px;}.jxFlyoutContent{position:relative;display:block;overflow:auto;margin:6px 6px 8px 7px;}.jxFlyout .jxBarRight,.jxFlyout .jxBarLeft{float:left;height:auto;width:auto;}.jxChrome{position:absolute;display:block;font-size:0;line-height:0;z-index:-1;width:100%;height:100%;top:0;left:0;}.jxChromeDrag{opacity:.5;filter:Alpha(opacity=50);}.jxChromeTL{position:absolute;overflow:hidden;left:0;top:0;width:50%;height:50%;}.jxChromeTR{position:absolute;overflow:hidden;left:50%;top:0;width:50%;height:50%;}.jxChromeBL{position:absolute;overflow:hidden;left:0;top:50%;width:50%;height:50%;}.jxChromeBR{position:absolute;overflow:hidden;left:50%;top:50%;width:50%;height:50%;}.jxChromeTL img{position:absolute;top:0;left:0;}.jxChromeTR img{position:absolute;top:0;right:0;}.jxChromeBL img{position:absolute;bottom:0;left:0;}.jxChromeBR img{position:absolute;bottom:0;right:0;}.jxColorBar{position:relative;}table.jxColorGrid{position:relative;border-collapse:collapse;empty-cells:show;clear:both;}.jxColorGrid td{border:1px solid #000;}.jxColorGrid td.emptyCell{border:0 solid #000;}.jxColorGrid td.emptyCell span{display:block;width:7px;height:7px;line-height:0;font-size:0;border:0 solid #000;padding:1px;margin:0;}.jxColorGrid a.colorSwatch{display:block;width:7px;height:7px;line-height:0;font-size:0;border:0 solid #000;margin:0;padding:1px;}.jxColorGrid a.borderWhite:hover{border:1px solid #fff;padding:0;}.jxColorGrid a.borderBlack:hover{border:1px solid #000;padding:0;}input.jxHexInput{width:55px;vertical-align:middle;}input.jxAlphaInput{width:30px;vertical-align:middle;}div.jxColorPreview{float:left;position:relative;width:20px;height:20px;border:1px solid #000;margin:2px;vertical-align:middle;background-image:url('../images/grid.png');}span.jxButtonContent span.jxButtonSwatch{display:block;float:left;width:14px;height:14px;border:1px solid #000;background-image:url('../images/grid.png');padding-right:0!important;}span.jxButtonContent span.jxButtonSwatch span{display:block;width:14px;height:14px;position:absolute;padding-right:0;}div.jxColorPreview img{position:absolute;z-index:0;}div.jxColorPreview div.jxColorSelected{width:20px;height:10px;position:absolute;z-index:1;}div.jxColorPreview div.jxColorHover{width:20px;height:10px;position:absolute;bottom:0;z-index:1;}label.jxColorLabel,label.jxAlphaLabel{width:auto;font-family:Arial,sans-serif;font-size:12px;line-height:24px;padding:2px;vertical-align:middle;}a.jxColorClose{position:absolute;top:0;right:0;width:16px;height:16px;}a.jxColorClose img{width:16px;height:16px;}.jxComboOptions .jxChrome{background-image:url(../images/delicious/flyout_chrome.png);padding:5px 5px 7px 6px;}div.jxCombo{position:relative;display:block;padding:0;padding-right:22px;margin:0;border:0;font-family:Arial,Helvetica,sans-serif;font-size:11px;z-index:1;line-height:24px;float:left;}.jxComboDiscloser{position:absolute;right:3px;top:3px;}.jxComboDiscloser img{width:16px;height:16px;border:0;}.jxComboInput{position:relative;display:block;float:left;line-height:14px;height:14px;padding:5px 10px;border:1px solid #f0f0f0;}div.jxComboOptions{position:absolute;height:auto;color:#000;z-index:1;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:24px;padding:6px 6px 8px 7px;}div.jxComboOptions ul{position:relative;display:block;margin:0;padding:0;border:none;list-style-type:none;}div.jxComboOptions li{position:relative;display:block;margin:0;padding:0;border:none;height:20px;}div.jxComboOptions a{position:relative;display:block;text-decoration:none;white-space:nowrap;line-height:20px;height:20px;color:#000;background-image:none;padding:0 4px;}div.jxComboOptions a:hover{background-image:url(../images/delicious/tree_bg.png);background-color:#CDE5FF;background-repeat:repeat-x;background-position:0 0;}div.jxComboOptions a.selected{font-weight:bold;background-color:#ffffb3;}.jxDialog .jxChrome{background-image:url(../images/delicious/dialog_chrome.png);}.jxDialog{display:block;z-index:1;}.jxDialogContentContainer{z-index:1;margin:0 11px 13px 12px;border:1px solid #b7b7b7;background-color:#f0f0f0;}.jxDialogModal{position:absolute;display:block;top:0;left:0;width:100%;height:100%;background-color:#000;opacity:.2;filter:Alpha(opacity=20);}.jxDialogContent{display:block;position:relative;overflow:auto;padding:0;z-index:1;}.jxDialogTitle{display:block;position:relative;background-image:url(../images/a_pixel.png);text-align:center;height:24px;line-height:24px;z-index:1;margin:6px 6px 0 7px;}.jxDialogMin .jxDialogTitle{margin-bottom:8px;}.jxDialogMoveable{cursor:move;}.jxDialogLabel{font-family:Arial,Helvetica,sans-serif;font-size:12px;font-weight:bold;line-height:21px;color:#000;white-space:nowrap;}.jxDialogResize{position:absolute;bottom:7px;right:6px;width:16px;height:16px;z-index:2;border:0;cursor:se-resize;background-image:url(../images/delicious/dialog_resize.png);}.jxDialogControls{position:absolute;top:3px;right:2px;height:16px;width:80px;}.jxDialogControls img{background-image:url('../images/panel_controls.png');background-repeat:no-repeat;border:0;margin:0;width:16px;height:16px;}.jxDialogClose img{background-position:0 -32px;}.jxDialogMenu img{background-position:0 -48px;}.jxDialogHelp img{background-position:0 -64px;}.jxDialogCollapse img{background-position:0 -16px;}.jxDialogMin .jxDialogCollapse img{background-position:0 0;}.jxDialogMax .jxDialogCollapse img{background-position:0 -16px;}.jxDialogLoading img{border:0;margin:0;width:16px;height:16px;visibility:hidden;position:absolute;top:1px;left:2px;}.jxDialogControls .jxButtonContainer,.jxDialogControls span.jxButtonContent,.jxDialogControls a.jxButton:hover span.jxButtonContent,.jxDialogControls a.jxButton:active span.jxButtonContent,.jxDialogControls a.jxButtonActive span.jxButtonContent,.jxDialogControls a.jxButtonActive:hover span.jxButtonContent,.jxDialogControls a.jxButtonActive:active span.jxButtonContent,.jxDialogControls .jxButtonDisabled a.jxButton span.jxButtonContent,.jxDialogControls .jxButtonDisabled a.jxButton:hover span.jxButtonContent,.jxDialogControls .jxButtonDisabled a.jxButton:active span.jxButtonContent,.jxDialogControls a.jxButton,.jxDialogControls a.jxButton:hover,.jxDialogControls a.jxButton:active,.jxDialogControls a.jxButtonActive,.jxDialogControls a.jxButtonActive:hover,.jxDialogControls a.jxButtonActive:active,.jxDialogControls .jxButtonDisabled a.jxButton,.jxDialogControls .jxButtonDisabled a.jxButton:hover,.jxDialogControls .jxButtonDisabled a.jxButton:active{padding:0;margin:0;border:none;background-color:transparent;background-image:none;}.jxDialogControls a.jxButtonMenu span.jxButtonContent,.jxDialogControls a.jxButtonFlyout span.jxButtonContent{background-image:none;}.jxDialogControls a.jxButtonMenu span.jxButtonContent span,.jxDialogControls a.jxButtonFlyout span.jxButtonContent span{padding-right:0;}.jxDialogControls .jxToolbarContainer{position:absolute;right:0;background-image:none;background-color:transparent;margin:0;padding:0;border:none;}.jxDialogControls ul.jxToolbar{float:right;background-image:none;background-color:transparent;margin:0;padding:0;border:none;}.jxDialogControls .jxBarTop,.jxDialogControls .jxBarBottom,.jxDialogControls .jxBarLeft,.jxDialogControls .jxBarRight{width:auto;height:auto;}.jxDialogControls .jxBarTop ul.jxToolbar,.jxDialogControls .jxBarBottom ul.jxToolbar,.jxDialogControls .jxBarLeft ul.jxToolbar,.jxDialogControls .jxBarRight ul.jxToolbar,.jxDialogControls .jxBarTop li.jxToolItem,.jxDialogControls .jxBarBottom li.jxToolItem,.jxDialogControls .jxBarLeft li.jxToolItem,.jxDialogControls .jxBarRight li.jxToolItem{background-image:none;background-color:transparent;margin:0;padding:0;border:none;}.jxGridContainer{position:absolute;top:0;left:0;border-left:0 solid #96a7b4;border-top:0 solid #96a7b4;border-right:1px solid #96a7b4;border-bottom:1px solid #96a7b4;overflow:hidden;font-family:Arial,Verdana,sans-serif;font-size:12px;font-weight:normal;}.jxGridTable{position:relative;table-layout:fixed;border-collapse:collapse;border-style:none;width:0;}.jxGridColHeadHide{height:0;line-height:0;font-size:0;background-color:#fff;white-space:normal;}.jxGridColHeadHide p,.jxGridRowHeadHide p{font-size:0;line-height:0;height:0;margin:0;padding:0;}.jxGridRowHeadHide{width:0;white-space:normal;}.jxGridCell{border-right:1px solid #cecece;border-bottom:1px solid #cecece;overflow:hidden;padding-left:3px;padding-right:3px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.jxGridColHead{border-top:0 solid #96a7b4;border-right:1px solid #96a7b4;border-bottom:1px solid #96a7b4;border-left:0 solid #96a7b4;background-color:#ebebeb;text-align:center;font-weight:bold;color:#45525f;}.jxGridRowHead{border-top:0 solid #96a7b4;border-right:1px solid #96a7b4;border-bottom:1px solid #96a7b4;border-left:0 solid #96a7b4;background-color:#ebebeb;text-align:center;font-weight:bold;color:#45525f;}.jxGridRowAll{background-color:#fff;}.jxGridRowOdd td{border-right:1px solid #999;border-bottom:1px solid #999;}.jxGridRowEven td{border-right:1px solid #999;border-bottom:1px solid #999;}.jxGridRowSelected{background-color:#dae6f2;}.jxGridColumnSelected{background-color:#dae6f2;}.jxGridCellSelected{background-color:#dae6f2;}.jxGridRowPrelight{background-color:#f2f2f2;}.jxGridColumnPrelight{background-color:#f2f2f2;}.jxGridCellPrelight{background-color:#e8e8e8;}.jxGridRowHeaderPrelight{background-color:#dfdfdf;}.jxGridColumnHeaderPrelight{background-color:#dfdfdf;}.jxGridRowHeaderSelected{background-color:#6d7f8e;color:#fff;}.jxGridColumnHeaderSelected{background-color:#6d7f8e;color:#fff;}.jxMenuContainer .jxChrome{background-image:url(../images/delicious/flyout_chrome.png);padding:5px 5px 7px 6px;}a.jxButtonMenu span.jxMenuItemSpan{padding-right:16px;}.jxMenuContainer{position:absolute;display:block;z-index:200;padding:0;}ul.jxMenu,ul.jxSubMenu{display:block;position:relative;list-style-type:none;margin:0;padding:6px 6px 8px 7px;}li.jxMenuItemContainer{display:block;position:relative;margin:0;padding:0;}a.jxMenuItem{display:block;position:relative;text-decoration:none;border:1px solid #fff;font-family:Arial,Helvetica,sans-serif;font-size:11px;text-decoration:none;margin:2px 2px;padding:0;color:#000;}a.jxMenuItem:hover{border:1px solid #C5E0FF;background-image:url(../images/delicious/menu_bg.png);background-color:#CDE5FF;background-repeat:repeat-x;background-position:0 0;}a.jxMenuItem:hover span.jxMenuItemContent{border:1px solid #F4F9FF;border-bottom:1px solid #E4F0FF;}span.jxMenuItemContent{display:block;position:relative;font-family:Arial,Helvetica,sans-serif;font-size:0;line-height:0;white-space:nowrap;padding:0;margin:0;border:1px solid #fff;}a.jxButtonSubMenu span.jxMenuItemContent,a.jxButtonSubMenu:hover span.jxMenuItemContent{background-image:url(../images/delicious/emblems.png);background-position:right -48px;background-repeat:no-repeat;padding-right:20px;}img.jxMenuItemIcon{position:absolute;top:0;left:0;display:inline;width:16px;height:16px;background-position:left center;background-repeat:no-repeat;}span.jxMenuItemContent span{display:block;position:relative;cursor:pointer;margin:0;padding:0 0 0 20px;font-size:16px;line-height:16px;}span.jxMenuItemContent span.jxMenuItemLabel{color:#000;font-size:12px;}a.jxMenuItemActive img.jxMenuItemIcon{background-image:url(../images/delicious/emblems.png);background-position:2px -64px;background-repeat:no-repeat;}.jxMenuItemSet a.jxMenuItemActive img.jxMenuItemIcon{background-image:url(../images/delicious/emblems.png);background-position:2px -80px;background-repeat:no-repeat;}li.jxMenuItemDisabled span.jxMenuItemLabel{color:#ccc;}li.jxMenuItemDisabled a.jxMenuItem:hover{background-color:#fff;border:1px solid #fff;}ul.jxMenu span.jxMenuSeparator{display:block;font-size:10px;line-height:10px;background-image:url(../images/toolbar_separator_v.png);background-repeat:repeat-x;background-position:left center;}.jxPanel{display:block;position:relative;}.jxPanelContentContainer{overflow:hidden;background-color:#f0f0f0;}.jxPanelContent{position:relative;display:block;overflow:auto;background-color:#fff;margin:0;padding:0;}.jxPanelTitle{display:block;position:relative;background-image:url(../images/delicious/snap_bg.png);background-repeat:repeat-x;background-position:left top;height:22px;margin:0;padding:0;}.jxPanelLabel{padding-left:25px;font-family:Arial,Helvetica,sans-serif;font-size:12px;font-weight:bold;line-height:21px;color:#000;white-space:nowrap;}.jxPanelControls{position:absolute;top:3px;right:2px;height:16px;width:80px;}.jxPanelControls img{background-image:url('../images/panel_controls.png');background-repeat:no-repeat;border:0;margin:0;width:16px;height:16px;}.jxPanelClose img{background-position:0 -32px;}.jxPanelMenu img{background-position:0 -48px;}.jxPanelHelp img{background-position:0 -64px;}.jxPanelCollapse img{background-position:0 -16px;}.jxPanelMin .jxPanelCollapse img{background-position:0 0;}.jxPanelMax .jxPanelCollapse img{background-position:0 -16px;}.jxPanelMaximize img{background-position:0 0;}.jxPanelLoading img{border:0;margin:0;width:16px;height:16px;visibility:hidden;position:absolute;top:1px;left:2px;}.jxPanelControls .jxButtonContainer,.jxPanelControls span.jxButtonContent,.jxPanelControls a.jxButton:hover span.jxButtonContent,.jxPanelControls a.jxButton:active span.jxButtonContent,.jxPanelControls a.jxButtonActive span.jxButtonContent,.jxPanelControls a.jxButtonActive:hover span.jxButtonContent,.jxPanelControls a.jxButtonActive:active span.jxButtonContent,.jxPanelControls .jxButtonDisabled a.jxButton span.jxButtonContent,.jxPanelControls .jxButtonDisabled a.jxButton:hover span.jxButtonContent,.jxPanelControls .jxButtonDisabled a.jxButton:active span.jxButtonContent,.jxPanelControls a.jxButton,.jxPanelControls a.jxButton:hover,.jxPanelControls a.jxButton:active,.jxPanelControls a.jxButtonActive,.jxPanelControls a.jxButtonActive:hover,.jxPanelControls a.jxButtonActive:active,.jxPanelControls .jxButtonDisabled a.jxButton,.jxPanelControls .jxButtonDisabled a.jxButton:hover,.jxPanelControls .jxButtonDisabled a.jxButton:active{padding:0;margin:0;border:none;background-color:transparent;background-image:none;}.jxPanelControls a.jxButtonMenu span.jxButtonContent,.jxPanelControls a.jxButtonFlyout span.jxButtonContent{background-image:none;}.jxPanelControls a.jxButtonMenu span.jxButtonContent span,.jxPanelControls a.jxButtonFlyout span.jxButtonContent span{padding-right:0;}.jxPanelControls .jxToolbarContainer{position:absolute;right:0;background-image:none;background-color:transparent;margin:0;padding:0;border:none;}.jxPanelControls ul.jxToolbar{float:right;background-image:none;background-color:transparent;margin:0;padding:0;border:none;}.jxPanelControls .jxBarTop,.jxPanelControls .jxBarBottom,.jxPanelControls .jxBarLeft,.jxPanelControls .jxBarRight{width:auto;height:auto;}.jxPanelControls .jxBarTop ul.jxToolbar,.jxPanelControls .jxBarBottom ul.jxToolbar,.jxPanelControls .jxBarLeft ul.jxToolbar,.jxPanelControls .jxBarRight ul.jxToolbar,.jxPanelControls .jxBarTop li.jxToolItem,.jxPanelControls .jxBarBottom li.jxToolItem,.jxPanelControls .jxBarLeft li.jxToolItem,.jxPanelControls .jxBarRight li.jxToolItem{border:none;background-image:none;background-color:transparent;margin:0;padding:0;border:none;}.jxSplitBarHorizontal{position:absolute;line-height:1px;width:5px;height:100%;cursor:col-resize;background-color:#f0f0f0;z-index:1;}.jxSplitBarVertical{position:absolute;line-height:1px;width:100%;height:5px;cursor:row-resize;background-color:#f0f0f0;z-index:1;}.jxSplitContainer{margin:0;}.jxSplitArea{overflow:hidden;z-index:0;}.jxSplitBarDrag{background-color:#eee;}.jxTabSetContainer{position:relative;display:block;width:200px;height:200px;margin:0;padding:0;border:1px solid #d8d8d8;background-color:#fff;}.jxTabSetContainer .jxToolbarContainer{z-index:auto;}.tabContent{display:none;position:relative;width:100%;height:100%;overflow:auto;}.tabContentActive{display:block;}.jxTabBoxTop,.jxTabBoxBottom,.jxTabBoxLeft,.jxTabBoxRight{overflow:visible;}.jxTabBoxTop .jxToolbarTop,.jxTabBoxBottom .jxToolbarBottom,.jxTabBoxLeft .jxToolbarLeft,.jxTabBoxRight .jxToolbarRight{position:absolute;}li.jxTabItem{margin:0;padding:0;}.jxToolbarTop li.jxTabItem,.jxToolbarBottom li.jxTabItem{border:none;}.jxToolbarLeft li.jxTabItem,.jxToolbarRight li.jxTabItem{border:none;}a.jxTab{display:block;position:relative;margin:0;padding:0;border:none;background-repeat:no-repeat;text-decoration:none;color:#000;}a.jxTab:hover,a.jxTab:active,a.jxTabActive,a.jxTabActive:hover,a.jxTabActive:active,.jxDisabled a.jxButton:hover,.jxDisabled a.jxButton:active{border:none;}span.jxTabContent{display:block;font-size:0;line-height:0;margin:0;padding:0;background-repeat:no-repeat;}img.jxTabIcon{position:relative;width:16px;height:16px;background-position:center center;background-repeat:no-repeat;}span.jxTabLabel{display:block;position:relative;cursor:pointer;margin:0;padding:0;color:#000;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:16px;}.jxToolbarTop a.jxTab,.jxTabBarTop a.jxTab{float:left;padding-left:6px;background-image:url(../images/delicious/tab_top_bg.png);background-position:left -56px;}.jxToolbarTop span.jxTabContent,.jxTabBarTop span.jxTabContent{float:left;padding:6px 6px 6px 0;background-image:url(../images/delicious/tab_top_bg.png);background-position:right -56px;}.jxToolbarTop img.jxTabIcon,.jxTabBarTop img.jxTabIcon{float:left;}.jxToolbarTop span.jxTabLabel,.jxTabBarTop span.jxTabLabel{float:left;padding:0 4px 0 4px;}.jxToolbarTop a.jxTab:hover,.jxTabBarTop a.jxTab:hover{background-position:left -224px;}.jxToolbarTop a.jxTab:hover span.jxTabContent,.jxTabBarTop a.jxTab:hover span.jxTabContent{background-position:right -224px;}.jxToolbarTop a.jxTab:active,.jxTabBarTop a.jxTab:active{background-position:left -112px;}.jxToolbarTop a.jxTab:active span.jxTabContent,.jxTabBarTop a.jxTab:active span.jxTabContent{background-position:right -112px;}.jxToolbarTop a.jxTabActive,.jxTabBarTop a.jxTabActive{background-position:left -168px;}.jxToolbarTop a.jxTabActive span.jxTabContent,.jxTabBarTop a.jxTabActive span.jxTabContent{background-position:right -168px;}.jxTabBoxBottom{margin-bottom:27px;}.jxTabBoxBottom .jxToolbarBottom{bottom:-27px;}.jxToolbarBottom li.jxTabItem{float:left;}.jxToolbarBottom a.jxTab{float:left;padding-left:6px;background-image:url(../images/graphic/tab_bottom_bg.png);background-position:left -2px;border-top:1px solid #999;}.jxToolbarBottom span.jxTabContent{float:left;padding:6px 6px 6px 0;background-image:url(../images/graphic/tab_bottom_bg.png);background-position:right -2px;}.jxToolbarBottom img.jxTabIcon{float:left;}.jxToolbarBottom span.jxTabLabel{float:left;padding:0 4px 0 4px;}.jxToolbarBottom a.jxTab:hover{background-position:left top;}.jxToolbarBottom a.jxTab:hover span.jxTabContent{background-position:right top;}.jxToolbarBottom a.jxTabActive{background-position:left -56px;border-top:1px solid #fff;}.jxToolbarBottom a.jxTabActive span.jxTabContent{background-position:right -56px;}.jxTabBoxLeft{margin-left:27px;}.jxTabBoxLeft .jxToolbarLeft{left:-27px;}.jxToolbarLeft a.jxTab{padding-top:6px;background-image:url(../images/graphic/tab_left_bg.png);background-position:2px top;border-right:1px solid #999;}.jxToolbarLeft span.jxTabContent{padding:0 6px 6px 6px;background-image:url(../images/graphic/tab_left_bg.png);background-position:2px bottom;}.jxToolbarLeft a.jxTab:hover{background-position:left top;}.jxToolbarLeft a.jxTab:hover span.jxTabContent{background-position:left bottom;}.jxToolbarLeft a.jxTabActive{background-position:-56px top;border-right:1px solid #fff;}.jxToolbarLeft a.jxTabActive span.jxTabContent{background-position:-56px bottom;}.jxTabBoxRight{margin-right:27px;}.jxTabBoxRight .jxToolbarRight{right:-27px;}.jxToolbarRight a.jxTab{padding-top:6px;background-image:url(../images/graphic/tab_right_bg.png);background-position:-2px top;border-left:1px solid #999;}.jxToolbarRight span.jxTabContent{padding:0 6px 6px 6px;background-image:url(../images/graphic/tab_right_bg.png);background-position:-2px bottom;}.jxToolbarRight a.jxTab:hover{background-position:left top;}.jxToolbarRight a.jxTab:hover span.jxTabContent{background-position:left bottom;}.jxToolbarRight a.jxTabActive{background-position:-56px top;border-left:1px solid #fff;}.jxToolbarRight a.jxTabActive span.jxTabContent{background-position:-56px bottom;}.jxToolbarContainer{display:block;position:relative;z-index:1;margin:0;padding:0;border:0;background-color:#f0f0f0;}.jxToolbarTop,.jxToolbarBottom{width:100%;height:auto;background-image:url(../images/delicious/toolbar_bg.png);background-repeat:repeat-x;background-position:bottom;}.jxTabBarTop,.jxTabBarBottom{background-image:url(../images/delicious/tabbar_bg.png);}.jxToolbarLeft,.jxToolbarRight{width:auto;height:100%;background-repeat:repeat-y;background-position:right;}.toolbarLabel{display:block;position:relative;float:left;margin:0;padding:0;font-family:Arial,Hevetica,sans-serif;font-size:11px;line-height:24px;color:#000;}ul.jxToolbar{display:block;position:relative;float:left;list-style-type:none;margin:0;padding:0;}.jxToolbarTop ul.jxToolbar,.jxToolbarBottom ul.jxToolbar,.jxToolbarLeft ul.jxToolbar,.jxToolbarRight ul.jxToolbar{border:none;}li.jxToolItem{display:block;position:relative;float:left;font-size:0;line-height:0;padding:0;margin:0;}.jxToolbarTop li.jxToolItem,.jxToolbarBottom li.jxToolItem,.jxToolbarLeft li.jxToolItem,.jxToolbarRight li.jxToolItem{border:none;}li.jxToolItem .separator{display:block;position:relative;float:left;font-size:0;line-height:0;width:8px;height:20px;border:0;margin:0;padding:4px;background-repeat:no-repeat;background-position:center center;}.jxToolbarTop li.jxToolItem span.separator,.jxToolbarBottom li.jxToolItem span.separator{background-image:url(../images/toolbar_separator_h.png);}.jxToolbarLeft li.jxToolItem span.separator,.jxToolbarRight li.jxToolItem span.separator{background-image:url(../images/toolbar_separator_v.png);}.jxToolbarLeft label.toolbarLabel,.jxToolbarLeft ul.jxToolbar,.jxToolbarLeft li.jxToolItem,.jxToolbarRight label.toolbarLabel,.jxToolbarRight ul.jxToolbar,.jxToolbarRight li.jxToolItem{clear:both;}.verticalToolbar{width:auto;}.verticalToolbar label.toolbarLabel,.verticalToolbar ul.jxToolbar,.verticalToolbar li.jxToolItem{clear:both;}.jxTree,.jxTreeRoot{position:relative;display:block;list-style:none;margin:0;padding:0;}.jxTreeNest{list-style:none;margin:0;padding:0;background-repeat:repeat-y;background-position:left top;}.jxTree li,.jxTreeRoot li{position:relative;display:block;margin:0;padding:0;background-repeat:no-repeat;background-position:left top;white-space:nowrap;width:100%;font-size:0;line-height:0;}.jxTree li{margin-left:16px;}.jxTree li.jxDisabled,.jxTreeRoot li.jxDisabled{opacity:.4;-moz-opacity:.4;filter:Alpha(opacity=40);}.jxTree a,.jxTreeRoot a{position:relative;display:block;margin:0 0 0 14px;padding:0 0 0 20px;z-index:0;font-family:Arial,Helvetica,sans-serif;font-size:11px;color:#000;text-decoration:none;line-height:20px;height:20px;}.jxTree a:hover,.jxTreeRoot a:hover{background-image:url(../images/delicious/tree_bg.png);background-color:#CDE5FF;background-repeat:repeat-x;background-position:0 0;}.jxTreeNest{background-image:url(../images/tree_vert_line.png);}.jxTreeImage,.jxTreeIcon{position:absolute;display:inline;left:0;top:0;width:16px;height:20px;z-index:1;background-image:url(../images/delicious/tree.png);background-repeat:no-repeat;border:0;margin:0;}.jxTreeIcon{left:2px;}.jxTreeBranchOpen .jxTreeIcon,.jxTreeBranchLastOpen .jxTreeIcon{background-position:left -40px;}.jxTreeBranchOpen .jxTreeImage{background-position:left -100px;}.jxTreeBranchLastOpen .jxTreeImage{background-position:left -160px;}.jxTreeBranchClosed .jxTreeIcon,.jxTreeBranchLastClosed .jxTreeIcon{background-position:left -20px;}.jxTreeBranchClosed .jxTreeImage{background-position:left -80px;}.jxTreeBranchLastClosed .jxTreeImage{background-position:left -140px;}.jxTreeItem .jxTreeIcon,.jxTreeItemLast .jxTreeIcon{background-position:left 0;}.jxTreeItem .jxTreeImage{background-position:left -60px;}.jxTreeItemLast .jxTreeImage{background-position:left -120px;}.jxTreeItemSelected{background-color:#AFD4FA;font-weight:bold;}.jxTreeItem a,.jxTreeItem img,.jxTreeItem input,.jxTreeItemLast a,.jxTreeItemLast img,.jxTreeItemLast input,.jxTreeBranch a,.jxTreeBranch img,.jxTreeBranch input,.jxTreeBranchLast a,.jxTreeBranchLast img,.jxTreeBranchLast input{vertical-align:middle;}
\ No newline at end of file
+ */body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';}a{outline:none;}.png24{filter:expression(Jx.applyPNGFilter(this));}.jxClearer{display:block;position:relative;float:none;clear:both;font-size:0;line-height:0;width:0;height:0;margin:0;padding:0;}.jxDisabled{opacity:.4;filter:Alpha(opacity=40);}iframe.jxIframeShim{position:absolute;top:0;left:0;width:100%;height:100%;filter:Alpha(opacity:0);opacity:0;z-index:-1;}div.jxButtonContainer{display:block;position:relative;float:left;margin:2px;padding:0;border:none;}a.jxButton{display:block;position:relative;float:left;margin:0;padding:0 0 0 4px;border:none;background-image:url(../images/delicious/button_bg.png);background-position:left -56px;background-repeat:no-repeat;text-decoration:none;}ul.jxToolbar a.jxButton{background-position:left top;}span.jxButtonContent{display:block;position:relative;float:left;font-size:0;line-height:0;margin:0;padding:4px 4px 4px 0;border:none;background-image:url(../images/delicious/button_bg.png);background-position:right -56px;background-repeat:no-repeat;}ul.jxToolbar span.jxButtonContent{background-position:right top;}a.jxButton:hover{background-position:left -224px;}ul.jxToolbar a.jxButton:hover{background-position:left -56px;}a.jxButton:hover span.jxButtonContent{background-position:right -224px;}ul.jxToolbar a.jxButton:hover span.jxButtonContent{background-position:right -56px;}ul.jxToolbar a.jxButtonActive,a.jxButtonActive{background-position:left -168px;}ul.jxToolbar a.jxButtonActive span.jxButtonContent,a.jxButtonActive span.jxButtonContent{background-position:right -168px;}ul.jxToolbar a.jxButtonActive:hover,a.jxButtonActive:hover{background-position:left -224px;}ul.jxToolbar a.jxButtonActive:hover span.jxButtonContent,a.jxButtonActive:hover span.jxButtonContent{background-position:right -224px;}ul.jxToolbar a.jxButton:active,a.jxButton:active,ul.jxToolbar a.jxButtonActive:active,a.jxButtonActive:active{background-position:left -112px;}ul.jxToolbar a.jxButton:active span.jxButtonContent,a.jxButton:active span.jxButtonContent,ul.jxToolbar a.jxButtonActive:active span.jxButtonContent,a.jxButtonActive:active span.jxButtonContent{background-position:right -112px;}ul.jxToolbar .jxDisabled a.jxButton:hover,ul.jxToolbar .jxDisabled a.jxButton:active,.jxDisabled a.jxButton:hover,.jxDisabled a.jxButton:active{background-position:left top;}ul.jxToolbar .jxDisabled a.jxButton:hover span.jxButtonContent,ul.jxToolbar .jxDisabled a.jxButton:active span.jxButtonContent,.jxDisabled a.jxButton:hover span.jxButtonContent,.jxDisabled a.jxButton:active span.jxButtonContent{background-position:right top;}img.jxButtonIcon{position:relative;float:left;width:16px;height:16px;background-position:center center;background-repeat:no-repeat;}span.jxButtonContent span{font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:16px;}span.jxButtonContent span.jxButtonLabel{display:block;position:relative;float:left;cursor:pointer;margin:0;padding:0 4px 0 4px;color:#000;font-size:11px;}a.jxButtonMenu span.jxButtonContent span,a.jxButtonFlyout span.jxButtonContent span{padding-right:16px;background-image:url(../images/delicious/emblems.png);background-position:right -32px;background-repeat:no-repeat;}a.jxButtonMulti span.jxButtonContent,a.jxButtonFlyout span.jxButtonContent{padding-left:0;padding-right:0;}a.jxButtonMulti span.jxButtonLabel{padding-left:0;padding-right:0;}.jxFlyout .jxChrome{background-image:url(../images/delicious/flyout_chrome.png);padding:5px 5px 7px 6px;}.jxFlyout{position:absolute;display:block;clear:both;float:none;z-index:100;margin:0;padding:0;font-size:12px;line-height:14px;}.jxFlyoutContent{position:relative;display:block;overflow:auto;margin:6px 6px 8px 7px;}.jxFlyout .jxBarRight,.jxFlyout .jxBarLeft{float:left;height:auto;width:auto;}.jxChrome{position:absolute;display:block;font-size:0;line-height:0;z-index:-1;width:100%;height:100%;top:0;left:0;}.jxChromeDrag{opacity:.5;filter:Alpha(opacity=50);}.jxChromeTL{position:absolute;overflow:hidden;left:0;top:0;width:50%;height:50%;}.jxChromeTR{position:absolute;overflow:hidden;left:50%;top:0;width:50%;height:50%;}.jxChromeBL{position:absolute;overflow:hidden;left:0;top:50%;width:50%;height:50%;}.jxChromeBR{position:absolute;overflow:hidden;left:50%;top:50%;width:50%;height:50%;}.jxChromeTL img{position:absolute;top:0;left:0;}.jxChromeTR img{position:absolute;top:0;right:0;}.jxChromeBL img{position:absolute;bottom:0;left:0;}.jxChromeBR img{position:absolute;bottom:0;right:0;}.jxColorBar{position:relative;}table.jxColorGrid{position:relative;border-collapse:collapse;empty-cells:show;clear:both;}.jxColorGrid td{border:1px solid #000;}.jxColorGrid td.emptyCell{border:0 solid #000;}.jxColorGrid td.emptyCell span{display:block;width:7px;height:7px;line-height:0;font-size:0;border:0 solid #000;padding:1px;margin:0;}.jxColorGrid a.colorSwatch{display:block;width:7px;height:7px;line-height:0;font-size:0;border:0 solid #000;margin:0;padding:1px;}.jxColorGrid a.borderWhite:hover{border:1px solid #fff;padding:0;}.jxColorGrid a.borderBlack:hover{border:1px solid #000;padding:0;}input.jxHexInput{width:55px;vertical-align:middle;}input.jxAlphaInput{width:30px;vertical-align:middle;}div.jxColorPreview{float:left;position:relative;width:20px;height:20px;border:1px solid #000;margin:2px;vertical-align:middle;background-image:url('../images/grid.png');}span.jxButtonContent span.jxButtonSwatch{display:block;float:left;width:14px;height:14px;border:1px solid #000;background-image:url('../images/grid.png');padding-right:0!important;}span.jxButtonContent span.jxButtonSwatch span{display:block;width:14px;height:14px;position:absolute;padding-right:0;}div.jxColorPreview img{position:absolute;z-index:0;}div.jxColorPreview div.jxColorSelected{width:20px;height:10px;position:absolute;z-index:1;}div.jxColorPreview div.jxColorHover{width:20px;height:10px;position:absolute;bottom:0;z-index:1;}label.jxColorLabel,label.jxAlphaLabel{width:auto;font-family:Arial,sans-serif;font-size:12px;line-height:24px;padding:2px;vertical-align:middle;}a.jxColorClose{position:absolute;top:0;right:0;width:16px;height:16px;}a.jxColorClose img{width:16px;height:16px;}.jxComboOptions .jxChrome{background-image:url(../images/delicious/flyout_chrome.png);padding:5px 5px 7px 6px;}div.jxCombo{position:relative;display:block;padding:0;padding-right:22px;margin:0;border:0;font-family:Arial,Helvetica,sans-serif;font-size:11px;z-index:1;line-height:24px;float:left;}.jxComboDiscloser{position:absolute;right:3px;top:3px;}.jxComboDiscloser img{width:16px;height:16px;border:0;}.jxComboInput{position:relative;display:block;float:left;line-height:14px;height:14px;padding:5px 10px;border:1px solid #f0f0f0;}div.jxComboOptions{position:absolute;height:auto;color:#000;z-index:1;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:24px;padding:6px 6px 8px 7px;}div.jxComboOptions ul{position:relative;display:block;margin:0;padding:0;border:none;list-style-type:none;}div.jxComboOptions li{position:relative;display:block;margin:0;padding:0;border:none;height:20px;}div.jxComboOptions a{position:relative;display:block;text-decoration:none;white-space:nowrap;line-height:20px;height:20px;color:#000;background-image:none;padding:0 4px;}div.jxComboOptions a:hover{background-image:url(../images/delicious/tree_bg.png);background-color:#CDE5FF;background-repeat:repeat-x;background-position:0 0;}div.jxComboOptions a.selected{font-weight:bold;background-color:#ffffb3;}.jxDialog .jxChrome{background-image:url(../images/delicious/dialog_chrome.png);}.jxDialog{display:block;z-index:1;}.jxDialogContentContainer{z-index:1;margin:0 11px 13px 12px;border:1px solid #b7b7b7;background-color:#f0f0f0;}.jxDialogModal{position:absolute;display:block;top:0;left:0;width:100%;height:100%;background-color:#000;opacity:.2;filter:Alpha(opacity=20);}.jxDialogContent{display:block;position:relative;overflow:auto;padding:0;z-index:1;}.jxDialogTitle{display:block;position:relative;background-image:url(../images/a_pixel.png);text-align:center;height:24px;line-height:24px;z-index:1;margin:6px 6px 0 7px;}.jxDialogMin .jxDialogTitle{margin-bottom:8px;}.jxDialogMoveable{cursor:move;}.jxDialogLabel{font-family:Arial,Helvetica,sans-serif;font-size:12px;font-weight:bold;line-height:21px;color:#000;white-space:nowrap;}.jxDialogResize{position:absolute;bottom:7px;right:6px;width:16px;height:16px;z-index:2;border:0;cursor:se-resize;background-image:url(../images/delicious/dialog_resize.png);}.jxDialogControls{position:absolute;top:3px;right:2px;height:16px;width:80px;}.jxDialogControls img{background-image:url('../images/panel_controls.png');background-repeat:no-repeat;border:0;margin:0;width:16px;height:16px;}.jxDialogClose img{background-position:0 -32px;}.jxDialogMenu img{background-position:0 -48px;}.jxDialogHelp img{background-position:0 -64px;}.jxDialogCollapse img{background-position:0 -16px;}.jxDialogMin .jxDialogCollapse img{background-position:0 0;}.jxDialogMax .jxDialogCollapse img{background-position:0 -16px;}.jxDialogLoading img{border:0;margin:0;width:16px;height:16px;visibility:hidden;position:absolute;top:1px;left:2px;}.jxDialogControls .jxButtonContainer,.jxDialogControls span.jxButtonContent,.jxDialogControls a.jxButton:hover span.jxButtonContent,.jxDialogControls a.jxButton:active span.jxButtonContent,.jxDialogControls a.jxButtonActive span.jxButtonContent,.jxDialogControls a.jxButtonActive:hover span.jxButtonContent,.jxDialogControls a.jxButtonActive:active span.jxButtonContent,.jxDialogControls .jxButtonDisabled a.jxButton span.jxButtonContent,.jxDialogControls .jxButtonDisabled a.jxButton:hover span.jxButtonContent,.jxDialogControls .jxButtonDisabled a.jxButton:active span.jxButtonContent,.jxDialogControls a.jxButton,.jxDialogControls a.jxButton:hover,.jxDialogControls a.jxButton:active,.jxDialogControls a.jxButtonActive,.jxDialogControls a.jxButtonActive:hover,.jxDialogControls a.jxButtonActive:active,.jxDialogControls .jxButtonDisabled a.jxButton,.jxDialogControls .jxButtonDisabled a.jxButton:hover,.jxDialogControls .jxButtonDisabled a.jxButton:active{padding:0;margin:0;border:none;background-color:transparent;background-image:none;}.jxDialogControls a.jxButtonMenu span.jxButtonContent,.jxDialogControls a.jxButtonFlyout span.jxButtonContent{background-image:none;}.jxDialogControls a.jxButtonMenu span.jxButtonContent span,.jxDialogControls a.jxButtonFlyout span.jxButtonContent span{padding-right:0;}.jxDialogControls .jxToolbarContainer{position:absolute;right:0;background-image:none;background-color:transparent;margin:0;padding:0;border:none;}.jxDialogControls ul.jxToolbar{float:right;background-image:none;background-color:transparent;margin:0;padding:0;border:none;}.jxDialogControls .jxBarTop,.jxDialogControls .jxBarBottom,.jxDialogControls .jxBarLeft,.jxDialogControls .jxBarRight{width:auto;height:auto;}.jxDialogControls .jxBarTop ul.jxToolbar,.jxDialogControls .jxBarBottom ul.jxToolbar,.jxDialogControls .jxBarLeft ul.jxToolbar,.jxDialogControls .jxBarRight ul.jxToolbar,.jxDialogControls .jxBarTop li.jxToolItem,.jxDialogControls .jxBarBottom li.jxToolItem,.jxDialogControls .jxBarLeft li.jxToolItem,.jxDialogControls .jxBarRight li.jxToolItem{background-image:none;background-color:transparent;margin:0;padding:0;border:none;}.jxGridContainer{position:absolute;top:0;left:0;border-left:0 solid #d8d8d8;border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;overflow:hidden;font-family:Arial,Verdana,sans-serif;font-size:12px;font-weight:normal;}.jxGridTable{position:relative;table-layout:fixed;border-collapse:collapse;border-style:none;width:0;}.jxGridColHeadHide{height:0;line-height:0;font-size:0;background-color:#fff;white-space:normal;}.jxGridColHeadHide p,.jxGridRowHeadHide p{font-size:0;line-height:0;height:0;margin:0;padding:0;}.jxGridRowHeadHide{width:0;white-space:normal;}.jxGridCell{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;overflow:hidden;padding-left:3px;padding-right:3px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.jxGridColHead{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;background-color:#f2f2f2;background-image:url('../images/delicious/table_col_bg.png');background-position:0 0;background-repeat:repeat-x;text-align:center;font-weight:bold;color:#333;}.jxGridRowHead{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;background-color:#f2f2f2;background-image:url('../images/delicious/table_row_bg.png');background-position:0 0;background-repeat:repeat-y;text-align:center;font-weight:bold;color:#333;}.jxGridRowAll{background-color:#fff;}.jxGridColumnHeaderSelected{background-color:#e1e1e1;background-position:0 -200px;}.jxGridRowHeaderSelected{background-color:#e1e1e1;background-position:-400px 0;}.jxGridColumnSelected{background-color:#f7f7f7;}.jxGridRowSelected td{background-color:#f7f7f7;}td.jxGridCellSelected{background-color:#ebebeb;}.jxGridColumnHeaderPrelight{background-color:#cee5ff;background-position:0 -300px;}.jxGridRowHeaderPrelight{background-color:#cee5ff;background-position:-600px 0;}.jxGridColumnPrelight{background-color:#e5f1ff;}.jxGridRowPrelight td{background-color:#e5f1ff;}td.jxGridCellPrelight{background-color:#cce3ff;}.jxMenuContainer .jxChrome{background-image:url(../images/delicious/flyout_chrome.png);padding:5px 5px 7px 6px;}a.jxButtonMenu span.jxMenuItemSpan{padding-right:16px;}.jxMenuContainer{position:absolute;display:block;z-index:200;padding:0;}ul.jxMenu,ul.jxSubMenu{display:block;position:relative;list-style-type:none;margin:0;padding:6px 6px 8px 7px;}li.jxMenuItemContainer{display:block;position:relative;margin:0;padding:0;}a.jxMenuItem{display:block;position:relative;text-decoration:none;border:1px solid #fff;font-family:Arial,Helvetica,sans-serif;font-size:11px;text-decoration:none;margin:2px 2px;padding:0;color:#000;}a.jxMenuItem:hover{border:1px solid #C5E0FF;background-image:url(../images/delicious/menu_bg.png);background-color:#CDE5FF;background-repeat:repeat-x;background-position:0 0;}a.jxMenuItem:hover span.jxMenuItemContent{border:1px solid #F4F9FF;border-bottom:1px solid #E4F0FF;}span.jxMenuItemContent{display:block;position:relative;font-family:Arial,Helvetica,sans-serif;font-size:0;line-height:0;white-space:nowrap;padding:0;margin:0;border:1px solid #fff;}a.jxButtonSubMenu span.jxMenuItemContent,a.jxButtonSubMenu:hover span.jxMenuItemContent{background-image:url(../images/delicious/emblems.png);background-position:right -64px;background-repeat:no-repeat;padding-right:20px;}img.jxMenuItemIcon{position:absolute;top:0;left:0;display:inline;width:16px;height:16px;background-position:left center;background-repeat:no-repeat;}span.jxMenuItemContent span{display:block;position:relative;cursor:pointer;margin:0;padding:0 0 0 20px;font-size:16px;line-height:16px;}span.jxMenuItemContent span.jxMenuItemLabel{color:#000;font-size:12px;}.jxMenuItemToggle img.jxMenuItemIcon,.jxMenuItemSet img.jxMenuItemIcon{background-image:url(../images/delicious/emblems.png);background-position:2px 0;background-repeat:no-repeat;}.jxMenuItemToggle a.jxMenuItemActive img.jxMenuItemIcon{background-position:2px -80px;}.jxMenuItemSet a.jxMenuItemActive img.jxMenuItemIcon{background-position:2px -96px;}a.jxMenuItemActive img.jxMenuItemIcon{top:-2px;left:-2px;padding:1px;border:1px solid #C5E0FF;}a.jxMenuItemActive span.jxMenuItemContent{background-image:url(../images/delicious/menu_icon_bg.png);background-position:0 0;background-repeat:no-repeat;}li.jxMenuItemDisabled span.jxMenuItemLabel{color:#ccc;}li.jxMenuItemDisabled a.jxMenuItem:hover{background-color:#fff;border:1px solid #fff;}ul.jxMenu span.jxMenuSeparator{display:block;font-size:10px;line-height:10px;background-image:url(../images/toolbar_separator_v.png);background-repeat:repeat-x;background-position:left center;}.jxPanel{display:block;position:relative;}.jxPanelContentContainer{overflow:hidden;background-color:#f0f0f0;}.jxPanelContent{position:relative;display:block;overflow:auto;background-color:#fff;margin:0;padding:0;}.jxPanelTitle{display:block;position:relative;background-image:url(../images/delicious/snap_bg.png);background-repeat:repeat-x;background-position:left top;height:22px;margin:0;padding:0;}.jxPanelLabel{padding-left:25px;font-family:Arial,Helvetica,sans-serif;font-size:12px;font-weight:bold;line-height:21px;color:#000;white-space:nowrap;}.jxPanelControls{position:absolute;top:3px;right:2px;height:16px;width:80px;}.jxPanelControls img{background-image:url('../images/panel_controls.png');background-repeat:no-repeat;border:0;margin:0;width:16px;height:16px;}.jxPanelClose img{background-position:0 -32px;}.jxPanelMenu img{background-position:0 -48px;}.jxPanelHelp img{background-position:0 -64px;}.jxPanelCollapse img{background-position:0 -16px;}.jxPanelMin .jxPanelCollapse img{background-position:0 0;}.jxPanelMax .jxPanelCollapse img{background-position:0 -16px;}.jxPanelMaximize img{background-position:0 0;}.jxPanelLoading img{border:0;margin:0;width:16px;height:16px;visibility:hidden;position:absolute;top:1px;left:2px;}.jxPanelControls .jxButtonContainer,.jxPanelControls span.jxButtonContent,.jxPanelControls a.jxButton:hover span.jxButtonContent,.jxPanelControls a.jxButton:active span.jxButtonContent,.jxPanelControls a.jxButtonActive span.jxButtonContent,.jxPanelControls a.jxButtonActive:hover span.jxButtonContent,.jxPanelControls a.jxButtonActive:active span.jxButtonContent,.jxPanelControls .jxButtonDisabled a.jxButton span.jxButtonContent,.jxPanelControls .jxButtonDisabled a.jxButton:hover span.jxButtonContent,.jxPanelControls .jxButtonDisabled a.jxButton:active span.jxButtonContent,.jxPanelControls a.jxButton,.jxPanelControls a.jxButton:hover,.jxPanelControls a.jxButton:active,.jxPanelControls a.jxButtonActive,.jxPanelControls a.jxButtonActive:hover,.jxPanelControls a.jxButtonActive:active,.jxPanelControls .jxButtonDisabled a.jxButton,.jxPanelControls .jxButtonDisabled a.jxButton:hover,.jxPanelControls .jxButtonDisabled a.jxButton:active{padding:0;margin:0;border:none;background-color:transparent;background-image:none;}.jxPanelControls a.jxButtonMenu span.jxButtonContent,.jxPanelControls a.jxButtonFlyout span.jxButtonContent{background-image:none;}.jxPanelControls a.jxButtonMenu span.jxButtonContent span,.jxPanelControls a.jxButtonFlyout span.jxButtonContent span{padding-right:0;}.jxPanelControls .jxToolbarContainer{position:absolute;right:0;background-image:none;background-color:transparent;margin:0;padding:0;border:none;}.jxPanelControls ul.jxToolbar{float:right;background-image:none;background-color:transparent;margin:0;padding:0;border:none;}.jxPanelControls .jxBarTop,.jxPanelControls .jxBarBottom,.jxPanelControls .jxBarLeft,.jxPanelControls .jxBarRight{width:auto;height:auto;}.jxPanelControls .jxBarTop ul.jxToolbar,.jxPanelControls .jxBarBottom ul.jxToolbar,.jxPanelControls .jxBarLeft ul.jxToolbar,.jxPanelControls .jxBarRight ul.jxToolbar,.jxPanelControls .jxBarTop li.jxToolItem,.jxPanelControls .jxBarBottom li.jxToolItem,.jxPanelControls .jxBarLeft li.jxToolItem,.jxPanelControls .jxBarRight li.jxToolItem{border:none;background-image:none;background-color:transparent;margin:0;padding:0;border:none;}.jxSplitBarHorizontal{position:absolute;line-height:1px;width:5px;height:100%;cursor:col-resize;background-color:#f0f0f0;z-index:1;}.jxSplitBarVertical{position:absolute;line-height:1px;width:100%;height:5px;cursor:row-resize;background-color:#f0f0f0;z-index:1;}.jxSplitContainer{margin:0;}.jxSplitArea{overflow:hidden;z-index:0;}.jxSplitBarDrag{background-color:#eee;}.jxTabSetContainer{position:relative;display:block;width:200px;height:200px;margin:0;padding:0;border:1px solid #d8d8d8;background-color:#fff;}.jxTabSetContainer .jxToolbarContainer{z-index:auto;}.tabContent{display:none;position:relative;width:100%;height:100%;overflow:auto;}.tabContentActive{display:block;}.jxTabBoxTop,.jxTabBoxBottom,.jxTabBoxLeft,.jxTabBoxRight{overflow:visible;}.jxTabBoxTop .jxToolbarTop,.jxTabBoxBottom .jxToolbarBottom,.jxTabBoxLeft .jxToolbarLeft,.jxTabBoxRight .jxToolbarRight{position:absolute;}li.jxTabItem{margin:0;padding:0;}.jxToolbarTop li.jxTabItem,.jxToolbarBottom li.jxTabItem{border:none;}.jxToolbarLeft li.jxTabItem,.jxToolbarRight li.jxTabItem{border:none;}a.jxTab{display:block;position:relative;margin:0;padding:0;border:none;background-repeat:no-repeat;text-decoration:none;color:#000;}a.jxTab:hover,a.jxTab:active,a.jxTabActive,a.jxTabActive:hover,a.jxTabActive:active,.jxDisabled a.jxButton:hover,.jxDisabled a.jxButton:active{border:none;}span.jxTabContent{display:block;font-size:0;line-height:0;margin:0;padding:0;background-repeat:no-repeat;}img.jxTabIcon{position:relative;width:16px;height:16px;background-position:center center;background-repeat:no-repeat;}span.jxTabLabel{display:block;position:relative;cursor:pointer;margin:0;padding:0;color:#000;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:16px;}.jxToolbarTop a.jxTab,.jxTabBarTop a.jxTab{float:left;padding-left:6px;background-image:url(../images/delicious/tab_top_bg.png);background-position:left -56px;}.jxToolbarTop span.jxTabContent,.jxTabBarTop span.jxTabContent{float:left;padding:6px 6px 6px 0;background-image:url(../images/delicious/tab_top_bg.png);background-position:right -56px;}.jxToolbarTop img.jxTabIcon,.jxTabBarTop img.jxTabIcon{float:left;}.jxToolbarTop span.jxTabLabel,.jxTabBarTop span.jxTabLabel{float:left;padding:0 4px 0 4px;}.jxToolbarTop a.jxTab:hover,.jxTabBarTop a.jxTab:hover{background-position:left -224px;}.jxToolbarTop a.jxTab:hover span.jxTabContent,.jxTabBarTop a.jxTab:hover span.jxTabContent{background-position:right -224px;}.jxToolbarTop a.jxTab:active,.jxTabBarTop a.jxTab:active{background-position:left -112px;}.jxToolbarTop a.jxTab:active span.jxTabContent,.jxTabBarTop a.jxTab:active span.jxTabContent{background-position:right -112px;}.jxToolbarTop a.jxTabActive,.jxTabBarTop a.jxTabActive{background-position:left -168px;}.jxToolbarTop a.jxTabActive span.jxTabContent,.jxTabBarTop a.jxTabActive span.jxTabContent{background-position:right -168px;}.jxTabBoxBottom{margin-bottom:27px;}.jxTabBoxBottom .jxToolbarBottom{bottom:-27px;}.jxToolbarBottom li.jxTabItem{float:left;}.jxToolbarBottom a.jxTab{float:left;padding-left:6px;background-image:url(../images/graphic/tab_bottom_bg.png);background-position:left -2px;border-top:1px solid #999;}.jxToolbarBottom span.jxTabContent{float:left;padding:6px 6px 6px 0;background-image:url(../images/graphic/tab_bottom_bg.png);background-position:right -2px;}.jxToolbarBottom img.jxTabIcon{float:left;}.jxToolbarBottom span.jxTabLabel{float:left;padding:0 4px 0 4px;}.jxToolbarBottom a.jxTab:hover{background-position:left top;}.jxToolbarBottom a.jxTab:hover span.jxTabContent{background-position:right top;}.jxToolbarBottom a.jxTabActive{background-position:left -56px;border-top:1px solid #fff;}.jxToolbarBottom a.jxTabActive span.jxTabContent{background-position:right -56px;}.jxTabBoxLeft{margin-left:27px;}.jxTabBoxLeft .jxToolbarLeft{left:-27px;}.jxToolbarLeft a.jxTab{padding-top:6px;background-image:url(../images/graphic/tab_left_bg.png);background-position:2px top;border-right:1px solid #999;}.jxToolbarLeft span.jxTabContent{padding:0 6px 6px 6px;background-image:url(../images/graphic/tab_left_bg.png);background-position:2px bottom;}.jxToolbarLeft a.jxTab:hover{background-position:left top;}.jxToolbarLeft a.jxTab:hover span.jxTabContent{background-position:left bottom;}.jxToolbarLeft a.jxTabActive{background-position:-56px top;border-right:1px solid #fff;}.jxToolbarLeft a.jxTabActive span.jxTabContent{background-position:-56px bottom;}.jxTabBoxRight{margin-right:27px;}.jxTabBoxRight .jxToolbarRight{right:-27px;}.jxToolbarRight a.jxTab{padding-top:6px;background-image:url(../images/graphic/tab_right_bg.png);background-position:-2px top;border-left:1px solid #999;}.jxToolbarRight span.jxTabContent{padding:0 6px 6px 6px;background-image:url(../images/graphic/tab_right_bg.png);background-position:-2px bottom;}.jxToolbarRight a.jxTab:hover{background-position:left top;}.jxToolbarRight a.jxTab:hover span.jxTabContent{background-position:left bottom;}.jxToolbarRight a.jxTabActive{background-position:-56px top;border-left:1px solid #fff;}.jxToolbarRight a.jxTabActive span.jxTabContent{background-position:-56px bottom;}.jxToolbarContainer{display:block;position:relative;z-index:1;margin:0;padding:0;border:0;background-color:#f0f0f0;}.jxToolbarTop,.jxToolbarBottom{width:100%;height:auto;background-image:url(../images/delicious/toolbar_bg.png);background-repeat:repeat-x;background-position:0 0;}.jxTabBarTop,.jxTabBarBottom{background-image:url(../images/delicious/tabbar_bg.png);background-repeat:repeat-x;background-position:0 0;}.jxToolbarLeft,.jxToolbarRight{width:auto;height:100%;background-image:url(../images/delicious/toolbar_bg.png);background-repeat:repeat-x;background-position:0 0;}.toolbarLabel{display:block;position:relative;float:left;margin:0;padding:0;font-family:Arial,Hevetica,sans-serif;font-size:11px;line-height:24px;color:#000;}ul.jxToolbar{display:block;position:relative;float:left;list-style-type:none;margin:0;padding:0;}.jxToolbarTop ul.jxToolbar,.jxToolbarBottom ul.jxToolbar,.jxToolbarLeft ul.jxToolbar,.jxToolbarRight ul.jxToolbar{border:none;}li.jxToolItem{display:block;position:relative;float:left;font-size:0;line-height:0;padding:0;margin:0;}.jxToolbarTop li.jxToolItem,.jxToolbarBottom li.jxToolItem,.jxToolbarLeft li.jxToolItem,.jxToolbarRight li.jxToolItem{border:none;}li.jxToolItem .separator{display:block;position:relative;float:left;font-size:0;line-height:0;width:8px;height:20px;border:0;margin:0;padding:4px;background-repeat:no-repeat;background-position:center center;}.jxToolbarTop li.jxToolItem span.separator,.jxToolbarBottom li.jxToolItem span.separator{background-image:url(../images/toolbar_separator_h.png);}.jxToolbarLeft li.jxToolItem span.separator,.jxToolbarRight li.jxToolItem span.separator{background-image:url(../images/toolbar_separator_v.png);}.jxToolbarLeft label.toolbarLabel,.jxToolbarLeft ul.jxToolbar,.jxToolbarLeft li.jxToolItem,.jxToolbarRight label.toolbarLabel,.jxToolbarRight ul.jxToolbar,.jxToolbarRight li.jxToolItem{clear:both;}.verticalToolbar{width:auto;}.verticalToolbar label.toolbarLabel,.verticalToolbar ul.jxToolbar,.verticalToolbar li.jxToolItem{clear:both;}.jxTree,.jxTreeRoot{position:relative;display:block;list-style:none;margin:0;padding:0;}.jxTreeNest{list-style:none;margin:0;padding:0;background-repeat:repeat-y;background-position:left top;}.jxTree li,.jxTreeRoot li{position:relative;display:block;margin:0;padding:0;background-repeat:no-repeat;background-position:left top;white-space:nowrap;width:100%;font-size:0;line-height:0;}.jxTree li{margin-left:16px;}.jxTree li.jxDisabled,.jxTreeRoot li.jxDisabled{opacity:.4;-moz-opacity:.4;filter:Alpha(opacity=40);}.jxTree a,.jxTreeRoot a{position:relative;display:block;margin:0 0 0 14px;padding:0 0 0 20px;z-index:0;font-family:Arial,Helvetica,sans-serif;font-size:11px;color:#000;text-decoration:none;line-height:20px;height:20px;}.jxTree a:hover,.jxTreeRoot a:hover{background-image:url(../images/delicious/tree_bg.png);background-color:#CDE5FF;background-repeat:repeat-x;background-position:0 0;}.jxTreeNest{background-image:url(../images/tree_vert_line.png);}.jxTreeImage,.jxTreeIcon{position:absolute;display:inline;left:0;top:0;width:16px;height:20px;z-index:1;background-image:url(../images/delicious/tree.png);background-repeat:no-repeat;border:0;margin:0;}.jxTreeIcon{left:2px;}.jxTreeBranchOpen .jxTreeIcon,.jxTreeBranchLastOpen .jxTreeIcon{background-position:left -40px;}.jxTreeBranchOpen .jxTreeImage{background-position:left -100px;}.jxTreeBranchLastOpen .jxTreeImage{background-position:left -160px;}.jxTreeBranchClosed .jxTreeIcon,.jxTreeBranchLastClosed .jxTreeIcon{background-position:left -20px;}.jxTreeBranchClosed .jxTreeImage{background-position:left -80px;}.jxTreeBranchLastClosed .jxTreeImage{background-position:left -140px;}.jxTreeItem .jxTreeIcon,.jxTreeItemLast .jxTreeIcon{background-position:left 0;}.jxTreeItem .jxTreeImage{background-position:left -60px;}.jxTreeItemLast .jxTreeImage{background-position:left -120px;}.jxTreeItemSelected{background-color:#AFD4FA;font-weight:bold;}.jxTreeItem a,.jxTreeItem img,.jxTreeItem input,.jxTreeItemLast a,.jxTreeItemLast img,.jxTreeItemLast input,.jxTreeBranch a,.jxTreeBranch img,.jxTreeBranch input,.jxTreeBranchLast a,.jxTreeBranchLast img,.jxTreeBranchLast input{vertical-align:middle;}
\ No newline at end of file

Modified: sandbox/jx2/lib/ApplicationDefinition.js
===================================================================
--- sandbox/jx2/lib/ApplicationDefinition.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/lib/ApplicationDefinition.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -649,7 +649,7 @@
     getWidgetsByType: function(type) {
         var widgets = [];
         for (var i=0; i<this.widgetInstances.length; i++) {
-            if (this.widgetInstances[i].sType == type) {
+            if (this.widgetInstances[i].type == type) {
                 widgets.push(this.widgetInstances[i]);
             }
         }
@@ -859,32 +859,47 @@
                     var name = 'FusionItem'+this.uniqueId[0];
                     this.uniqueId[0]++;
                     if (container instanceof Jx.Toolbar) {
-                        /* create a button for the widget */
-                        var tbItem = new Jx.Toolbar.Item();
-                        tbItem.domObj.id = name;
-                        container.add(tbItem);
-                        widgetTag.create(widgetSet, name);
+                        var widget = widgetTag.create(widgetSet, '');
+                        if (!widget.uiClass) {
+                            widget.uiClass = Jx.Toolbar.Item;
+                            widget.setUiObject(new widget.uiClass());
+                        } else if (widget.uiClass == Jx.Button || widget.uiClass == Jx.Menu) {
+                            widget.setUiObject(new widget.uiClass({
+                                label: widgetTag.label,
+                                image: widgetTag.imageUrl,
+                                toggle: widget.isExclusive,
+                                onClick: OpenLayers.Function.bind(widget.activate, widget),
+                                onUp: OpenLayers.Function.bind(widget.deactivate, widget),
+                                onDown: OpenLayers.Function.bind(widget.activate, widget),
+                            }));                            
+                            if (widget.isExclusive) {
+                                widget.getMap().buttonSet.add(widget.uiObj);
+                            }
+                        }
+                        container.add(widget.uiObj);
                     } else if (container instanceof Jx.Splitter) {
                         var widget = widgetTag.create(widgetSet, idx);
                     } else if (container instanceof Jx.Menu ||
                                container instanceof Jx.Menu.Context ||
                                container instanceof Jx.Menu.SubMenu) {
                         var widget = widgetTag.create(widgetSet, '');
-                        widget.id = name; 
-                        if (widget.oMenu) {   //for widgets that extend MenuBase
-                          widget.oMenu.domObj.id = name;
-                          widget.oMenu.domObj.widget = widget;
-                          container.add(widget.oMenu);
-                        } else {
-                          var menuItem = new Jx.Menu.Item({
-                              label: widgetTag.label,
-                              image: widgetTag.imageUrl,
-                              onClick: OpenLayers.Function.bind(widget.activateTool, widget)
-                          });
-                          menuItem.domObj.id = name;
-                          menuItem.domObj.widget = widget;
-                          container.add(menuItem);
+                        if (!widget.uiClass || widget.uiClass == Jx.Button) {
+                            widget.uiClass = Jx.Menu.Item;
+                        } else if (widget.uiClass == Jx.Menu) {
+                            widget.uiClass = Jx.Menu.SubMenu;
                         }
+                        widget.setUiObject(new widget.uiClass({
+                            label: widgetTag.label,
+                            image: widgetTag.imageUrl,
+                            toggle: widget.isExclusive,
+                            onClick: OpenLayers.Function.bind(widget.activate, widget),
+                            onUp: OpenLayers.Function.bind(widget.deactivate, widget),
+                            onDown: OpenLayers.Function.bind(widget.activate, widget),
+                        }));
+                        container.add(widget.uiObj);
+                        if (widget.isExclusive) {
+                            widget.getMap().buttonSet.add(widget.uiObj);
+                        }
                     }
                 } else {
                   Fusion.reportError(new Fusion.Error(Fusion.Error.WARNING, 

Modified: sandbox/jx2/lib/CanvasTool.js
===================================================================
--- sandbox/jx2/lib/CanvasTool.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/lib/CanvasTool.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -35,8 +35,7 @@
     width: null,
     height: null,
     
-    initialize : function()
-    {
+    initializeCanvas: function() {
         this.context = null;
         this.canvas = null;
         this.width = null;
@@ -67,7 +66,7 @@
         map.registerForEvent(Fusion.Event.MAP_RESIZED, this.resizeCanvasFn);
         var domObj = map.getDomObj();
         
-        var size = Element.getDimensions(domObj);
+        var size = $(domObj).getContentBoxSize();
         this.width = size.width;
         this.height = size.height;
         

Modified: sandbox/jx2/lib/Map.js
===================================================================
--- sandbox/jx2/lib/Map.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/lib/Map.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -919,7 +919,7 @@
      
      executeFromContextMenu: function(widget) {
          //console.log('executefromcontextmenu');
-         widget.execute(this.contextMenuPosition.x, this.contextMenuPosition.y);
+         widget.activate(this.contextMenuPosition.x, this.contextMenuPosition.y);
      }
 });
 
@@ -1103,7 +1103,7 @@
 
 
 Fusion.SelectionObject.Layer = OpenLayers.Class({
-    sName: null,
+    name: null,
     nElements: null,
     aElements: null,
     nProperties: null,
@@ -1118,7 +1118,7 @@
     
     initialize: function(o, layerName) 
     {
-        this.sName =  layerName;
+        this.name =  layerName;
         this.nElements =  o[layerName].numelements;
 
         this.aElements = [];
@@ -1198,7 +1198,7 @@
 
     getName : function()
     {
-        return this.sName;
+        return this.name;
     },
 
     getNumElements : function()

Modified: sandbox/jx2/lib/Widget.js
===================================================================
--- sandbox/jx2/lib/Widget.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/lib/Widget.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -34,9 +34,9 @@
 Fusion.Event.WIDGET_STATE_CHANGED = Fusion.Event.lastEventId++;
  
 Fusion.Widget = OpenLayers.Class(Fusion.Lib.EventMgr, {
-    isExclusive: null,
-    sName: null,
-    sType: null,
+    isExclusive: false,
+    name: null,
+    type: null,
     oMap: null,
     bEnabled: false,
     mapLoadedWatcher: null,
@@ -44,15 +44,19 @@
     groups: [],
     group: null,
     domObj: null,
+    uiClass: null,
+    initializeWidget: function() {},
+    activate: function() {},
+    deactivate: function() {},
+    setUiObject: function(uiObj) { this.uiObj = uiObj; },
     
     /**
      * initialize the widget
-     * @param sName {string} the name of the widget
+     * @param name {string} the name of the widget
      */
-    initialize: function(widgetTag, bMutEx) {
-        this.isExclusive = bMutEx;
-        this.sType = widgetTag.type;
-        this.sName = widgetTag.name;
+    initialize: function(widgetTag) {
+        this.type = widgetTag.type;
+        this.name = widgetTag.name;
         this.widgetTag = widgetTag;
         this.registerEventID(Fusion.Event.WIDGET_STATE_CHANGED);
         
@@ -71,6 +75,8 @@
         }
 
         this.paramRegister = [];
+        
+        this.initializeWidget(widgetTag);
     },
     /**
      * set the map object that this widget is associated with
@@ -143,7 +149,7 @@
      * @return {string} the name of the widget
      */
     getName: function() {
-        return this.sName;
+        return this.name;
     },
     
     /**

Modified: sandbox/jx2/templates/mapserver/standard/ApplicationDefinition.xml
===================================================================
--- sandbox/jx2/templates/mapserver/standard/ApplicationDefinition.xml	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/templates/mapserver/standard/ApplicationDefinition.xml	2008-09-04 17:18:46 UTC (rev 1493)
@@ -135,7 +135,7 @@
       </Item>
       <Item xsi:type="FlyoutItemType">
         <Function>Flyout</Function>
-        <Label>Select More</Label>
+        <Label>More Selection Tools</Label>
         <Tooltip>Open the select menu</Tooltip>
         <ImageUrl/>
         <ImageClass/>

Modified: sandbox/jx2/widgets/About.js
===================================================================
--- sandbox/jx2/widgets/About.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/About.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -31,7 +31,8 @@
 *
 * **********************************************************************/
 
-Fusion.Widget.About = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase, {
+Fusion.Widget.About = OpenLayers.Class(Fusion.Widget, {
+    uiClass: Jx.Button,
     _nWidth : 500,
     _nHeight : 400,
     _sDefaultUrl : '/mapguide/mapadmin/about.php',  //TBD we need a Fusion specific About page
@@ -44,11 +45,7 @@
  * widgetTag - JSON node for this widget from the Application definition
  *
  */
-    initialize : function(widgetTag) {
-        //console.log('About.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, true]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
         this._sAboutUrl = (json.AboutURL) ? 
                 json.AboutURL[0] : this._sDefaultUrl;
@@ -61,7 +58,7 @@
      * opens a pop-up window with the about information when invoked
      * 
      */
-    execute : function() {
+    activate: function() {
       //console.log('About.execute');
 
       var sFeatures = 'menubar=no,location=no,resizable=no,status=no';

Modified: sandbox/jx2/widgets/ActivityIndicator.js
===================================================================
--- sandbox/jx2/widgets/ActivityIndicator.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/ActivityIndicator.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -36,9 +36,7 @@
 
 Fusion.Widget.ActivityIndicator = OpenLayers.Class(Fusion.Widget, {
     element: null,
-    initialize : function(widgetTag) {
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, true]);
+    initializeWidget: function(widgetTag) {
         this.element = this.domObj;
         var json = widgetTag.extension;
         if (json.ElementId) {

Modified: sandbox/jx2/widgets/Buffer.js
===================================================================
--- sandbox/jx2/widgets/Buffer.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/Buffer.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -34,8 +34,9 @@
  *
  * **************************************************************************/
 
-Fusion.Widget.Buffer = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase,
-{
+Fusion.Widget.Buffer = OpenLayers.Class(Fusion.Widget, {
+    uiClass: Jx.Button,
+    isExclusive: true,
     layerName: null,
     layerNameInput: null,
     bufferDistance: null,
@@ -46,12 +47,7 @@
     borderColorInput: null,
     fillColor: null,
     fillColorInput: null,
-    initialize: function(widgetTag) {
-        //console.log('Buffer.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, true]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-        
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
         
         /* pick up default values */

Modified: sandbox/jx2/widgets/BufferPanel.js
===================================================================
--- sandbox/jx2/widgets/BufferPanel.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/BufferPanel.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -35,15 +35,11 @@
  * there, otherwise it will open a new window with that name.
  * **********************************************************************/
 
-Fusion.Widget.BufferPanel = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase, {
+Fusion.Widget.BufferPanel = OpenLayers.Class(Fusion.Widget, {
+    uiClass: Jx.Button,
     sFeatures : 'menubar=no,location=no,resizable=no,status=no',
 
-    initialize : function(widgetTag) {
-        //console.log('BufferPanel.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
         this.sTarget = json.Target ? json.Target[0] : "BufferPanelWindow";
         this.sBaseUrl = Fusion.getFusionURL() + 'widgets/BufferPanel/BufferPanel.php';
@@ -93,7 +89,7 @@
         }
     },
     
-    execute : function() {
+    activate: function() {
         var url = this.sBaseUrl;
         //add in other parameters to the url here
         

Modified: sandbox/jx2/widgets/CenterSelection.js
===================================================================
--- sandbox/jx2/widgets/CenterSelection.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/CenterSelection.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -32,8 +32,9 @@
  * **********************************************************************/
 
 
-Fusion.Widget.CenterSelection = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase, {
-    initialize : function(widgetTag) {
+Fusion.Widget.CenterSelection = OpenLayers.Class(Fusion.Widget, {
+    uiClass: Jx.Button,
+    initializeWidget: function(widgetTag) {
         //console.log('CenterSelection.initialize');
 
         Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
@@ -48,7 +49,7 @@
      * get the selection from the map (which may not be loaded yet).
      * zoomToSelection is called when the selection is ready.
      */
-    execute : function() {
+    activate: function() {
         this.getMap().getSelection(OpenLayers.Function.bind(this.centerSelection, this));
     },
 

Modified: sandbox/jx2/widgets/ClearSelection.js
===================================================================
--- sandbox/jx2/widgets/ClearSelection.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/ClearSelection.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -29,14 +29,9 @@
  * Clears the current selection, if any.
  * **********************************************************************/
 
-Fusion.Widget.ClearSelection = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase, {
-
-    initialize : function(widgetTag) {
-        //console.log('ClearSelection.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-        
+Fusion.Widget.ClearSelection = OpenLayers.Class(Fusion.Widget, {
+    uiClass: Jx.Button,
+    initializeWidget: function(widgetTag) {        
         this.enable = Fusion.Widget.ClearSelection.prototype.enable;
         
         this.getMap().registerForEvent(Fusion.Event.MAP_SELECTION_ON, OpenLayers.Function.bind(this.enable, this));
@@ -46,7 +41,7 @@
     /**
      * clears slection on map.
      */
-    execute : function() {
+    activate: function() {
         this.getMap().clearSelection();
     },
     

Modified: sandbox/jx2/widgets/ColorPicker.js
===================================================================
--- sandbox/jx2/widgets/ColorPicker.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/ColorPicker.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -32,6 +32,8 @@
  * **********************************************************************/
 
 Fusion.Widget.ColorPicker = OpenLayers.Class(Fusion.Widget, {
+    uiClass: Jx.Button.Color,
+    
     /* HTML input element that is used to store both the initial
        value for this widget and receives the color value as the
        color changes */
@@ -46,8 +48,7 @@
     
     colorButton: null,
     
-    initialize : function(widgetTag) {      
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
+    initializeWidget: function(widgetTag) {      
         var json = widgetTag.extension;
         if (json.ColorInputId) {
             this.colorInput = $(json.ColorInputId[0]);
@@ -58,24 +59,16 @@
             this.color = '#'+this.colorInput.value.substring(2);
             this.colorInput.widget = this;
         }
-        
-        this.colorButton = new Jx.Button.Color({
-            color: this.color, 
-            alpha: this.alpha, 
-            label: widgetTag.label, 
-            tooltip: widgetTag.tooltip
-        });
-        this.colorButton.addEvent('colorChange', OpenLayers.Function.bind(this.colorChanged, this));
-        
-        if (this.domObj) {
-            this.domObj.appendChild(this.colorButton.domObj);
-        }
     },
     
+    setUiObject: function(uiObj) {
+        Fusion.Widget.prototype.setUiObject.apply(this, [uiObj]);
+        this.uiObj.addEvent('colorChange', OpenLayers.Function.bind(this.colorChanged, this));
+    },
+    
     colorChanged: function(button) {
-        var a = parseInt(this.colorButton.alpha*255/100).toString(16);
-        var c = a + this.colorButton.color.substring(1);
-        //console.log('colorChanged: '+c);
+        var a = parseInt(this.uiObj.alpha*255/100).toString(16);
+        var c = a + this.uiObj.color.substring(1);
         if (this.colorInput) {
             this.colorInput.value = c;
         }

Modified: sandbox/jx2/widgets/CursorPosition.js
===================================================================
--- sandbox/jx2/widgets/CursorPosition.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/CursorPosition.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -61,11 +61,7 @@
     /* the units to display distances in */
     units: Fusion.UNKNOWN,
 
-    initialize : function(widgetTag) {
-        //console.log('CursorPosition.initialize');
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, true]);
-                
-        
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
         
         this.emptyText = json.EmptyText ? json.EmptyText[0] : this.domObj.innerHTML;

Modified: sandbox/jx2/widgets/EditableScale.js
===================================================================
--- sandbox/jx2/widgets/EditableScale.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/EditableScale.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -33,18 +33,14 @@
 Fusion.Widget.EditableScale = OpenLayers.Class(Fusion.Widget, {
     precision: 4,
     
-    initialize : function(widgetTag) {
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
-        
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
         
         var domPrefix = document.createElement('span');
         domPrefix.className = 'inputEditableScalePrefix';
         domPrefix.innerHTML = '1: ';
-        this.domObj.appendChild(domPrefix);
         this.domScale = document.createElement('input');
         this.domScale.className = 'inputEditableScale';
-        this.domObj.appendChild(this.domScale);
         OpenLayers.Event.observe(this.domScale, 'keypress', 
            OpenLayers.Function.bindAsEventListener(this.keyPressHandler, this));
         this.precision = json.Precision ? parseInt(json.Precision[0]) : this.precision;
@@ -56,6 +52,12 @@
         
     },
     
+    setUiObject: function(uiObj) {
+        Fusion.Widget.prototype.setUiObject.apply(this, [uiObj]);
+        this.domObj.appendChild(domPrefix);
+        this.uiObj.appendChild(this.domScale);
+    },
+    
     scaleChanged: function() {
         this.domScale.value = this.scaleToString(this.getMap().oMapOL.getScale());
     },

Modified: sandbox/jx2/widgets/ExtentHistory.js
===================================================================
--- sandbox/jx2/widgets/ExtentHistory.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/ExtentHistory.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -32,16 +32,13 @@
 
 Fusion.Event.HISTORY_CHANGED = Fusion.Event.lastEventId++;
 
-Fusion.Widget.ExtentHistory = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase,  {
+Fusion.Widget.ExtentHistory = OpenLayers.Class(Fusion.Widget, {
+    uiClass: Jx.Button,
     events: [],
     aHistory: [],
     sDirection: null,
     EPS: 0.00000001,  //percentage difference allowed in bounds values for test for equal
-    initialize : function(widgetTag) {
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-        
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
         var sDirection = json.Direction ? json.Direction[0].toLowerCase() : 'previous';
         if (sDirection != 'previous' && sDirection != 'next') {
@@ -118,7 +115,7 @@
         }
     },
 
-    execute: function() {
+    activate: function() {
         if (this.sDirection == 'previous') {
             if (this.aHistory['index'] > 0) {
                 this.aHistory['index'] --;

Modified: sandbox/jx2/widgets/Help.js
===================================================================
--- sandbox/jx2/widgets/Help.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/Help.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -30,7 +30,9 @@
  * 
  * **********************************************************************/
 
-Fusion.Widget.Help = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase, {
+Fusion.Widget.Help = OpenLayers.Class(Fusion.Widget, {
+    uiClass: Jx.Button,
+    
     /* popup window initialization parameters */
     sFeatures : 'menubar=no,location=no,resizable=no,status=no',
 
@@ -44,11 +46,7 @@
      */
     baseUrl: null,
     
-    initialize : function(widgetTag) {
-        //console.log('Help.initialize');
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
         this.target = json.Target ? json.Target[0] : "HelpWindow";
         this.baseUrl = json.Url ? json.Url[0] : Fusion.getFusionURL() + widgetTag.location + '/Help/Help.html';
@@ -61,7 +59,7 @@
         }
     },
     
-    execute : function() {
+    activate: function() {
         var url = this.baseUrl;
         /* check to see if this is going into a task pane */
         var taskPaneTarget = Fusion.getWidgetById(this.target);

Modified: sandbox/jx2/widgets/InitialMapView.js
===================================================================
--- sandbox/jx2/widgets/InitialMapView.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/InitialMapView.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -1,46 +1,37 @@
-/**
- * Fusion.Widget.InitialMapView
- *
- * $Id$
- *
- * Copyright (c) 2007, DM Solutions Group Inc.
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
- /********************************************************************
- * Class: Fusion.Widget.InitialMapView
- *
- * Restore the map to it's full extents determined when it was initially loaded.
- * 
- * **********************************************************************/
-
-
-Fusion.Widget.InitialMapView = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase,  {
-    initialize : function(widgetTag) {
-        //console.log('InitialMapView.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-    },
-
-    execute: function() {
-        //console.log('InitialMapView.activateTool');
-        this.getMap().fullExtents();
-    }
-});
+/**
+ * Fusion.Widget.InitialMapView
+ *
+ * $Id$
+ *
+ * Copyright (c) 2007, DM Solutions Group Inc.
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+ /********************************************************************
+ * Class: Fusion.Widget.InitialMapView
+ *
+ * Restore the map to it's full extents determined when it was initially loaded.
+ * 
+ * **********************************************************************/
+Fusion.Widget.InitialMapView = OpenLayers.Class(Fusion.Widget, {
+    uiClass: Jx.Button,
+    activate: function() {
+        this.getMap().fullExtents();
+    }
+});

Modified: sandbox/jx2/widgets/InvokeScript.js
===================================================================
--- sandbox/jx2/widgets/InvokeScript.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/InvokeScript.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -29,21 +29,18 @@
  * Executes an arbitrary piece of JavaScript code
  * **********************************************************************/
 
-Fusion.Widget.InvokeScript = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase,  {
-    sScript: null,
-    initialize : function(widgetTag) {
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-        
+Fusion.Widget.InvokeScript = OpenLayers.Class(Fusion.Widget, {
+    uiClass: Jx.Button,
+    script: null,
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
-        this.sScript = json.Script ? json.Script[0] : '';
+        this.script = json.Script ? json.Script[0] : '';
     },
 
     /**
      * called when the button is clicked by the Fusion.Tool.ButtonBase widget
      */
-    execute : function() {
-        eval(this.sScript);
+    activate: function() {
+        eval(this.script);
     }
 });
\ No newline at end of file

Modified: sandbox/jx2/widgets/InvokeURL.js
===================================================================
--- sandbox/jx2/widgets/InvokeURL.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/InvokeURL.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -35,15 +35,11 @@
  *
  * **********************************************************************/
 
-Fusion.Widget.InvokeURL = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase,  {
+Fusion.Widget.InvokeURL = OpenLayers.Class(Fusion.Widget, {
+    uiClass: Jx.Button,
     sFeatures : 'menubar=no,location=no,resizable=no,status=no',
 
-    initialize : function(widgetTag) {
-        //console.log('InvokeURL.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-        
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
         this.sTarget = json.Target ? json.Target[0] : "InvokeUrlWindow";
         this.sBaseUrl = json.Url[0];  //must be supplied
@@ -93,7 +89,7 @@
         }
     },
     
-    execute : function() {
+    activate: function() {
         var url = this.sBaseUrl;
         //add in other parameters to the url here
         

Modified: sandbox/jx2/widgets/LayerManager.js
===================================================================
--- sandbox/jx2/widgets/LayerManager.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/LayerManager.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -53,11 +53,7 @@
 Fusion.Widget.LayerManager = OpenLayers.Class(Fusion.Widget,  {
     currentNode: null,
     bIsDrawn: false,
-    initialize : function(widgetTag) {
-        //console.log('LayerManager.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, true]);
-         
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
         this.delIconSrc = json.DeleteIcon ? json.DeleteIcon[0] : 'images/icons/select-delete.png';
     

Modified: sandbox/jx2/widgets/Legend.js
===================================================================
--- sandbox/jx2/widgets/Legend.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/Legend.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -74,10 +74,7 @@
      */
     defaultGroupInfoIcon: 'images/icons/tree_group_info.png',
     
-    initialize : function(widgetTag) {           
-        //console.log('Legend.initialize');
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, true]);
-        
+    initializeWidget: function(widgetTag) {           
         // TODO: maybe it's a good idea to do a function like Fusion.Widget.BindRenderer.. for limit the code
         // duplication if we plan to apply this pattern to others widgets
         Fusion.addWidgetStyleSheet(widgetTag.location + 'Legend/Legend.css');
@@ -266,7 +263,7 @@
         });
         //this.collapseBranchItem.disable();
         
-        this.contextMenu = new Jx.Menu.Context(this.sName);
+        this.contextMenu = new Jx.Menu.Context(this.name);
         this.contextMenu.add(this.collapseBranchItem, 
                               this.expandBranchItem, 
                               this.refreshItem, 

Modified: sandbox/jx2/widgets/LinkToView.js
===================================================================
--- sandbox/jx2/widgets/LinkToView.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/LinkToView.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -31,11 +31,7 @@
 
 
 Fusion.Widget.LinkToView = OpenLayers.Class(Fusion.Widget,  {
-    initialize : function(widgetTag) {
-        //console.log('LinkToView.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
-        
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
         this.baseUrl = window.location.protocol + '//' + window.location.host + window.location.pathname + '?';
 

Modified: sandbox/jx2/widgets/MapMenu.js
===================================================================
--- sandbox/jx2/widgets/MapMenu.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/MapMenu.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -30,23 +30,21 @@
  * application.  The list of maps is configured in the ApplicationDefinition.
  * **********************************************************************/
 
-Fusion.Widget.MapMenu = OpenLayers.Class(Fusion.Widget,  Fusion.Tool.MenuBase,
-{
+Fusion.Widget.MapMenu = OpenLayers.Class(Fusion.Widget,  {
+    uiClass: Jx.Menu,
     domObj: null,
     oMenu: null,
     mapGroupData: null,
     sRootFolder: '',
     aMenus : null,
-    initialize : function(widgetTag)
-    {
-        //console.log('MapMenu.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
-        Fusion.Tool.MenuBase.prototype.initialize.apply(this, []);
-
+    initializeWidget: function(widgetTag) {
         this.enable();
+    },
+    
+    setUiObject: function(uiObj) {
+        Fusion.Widget.prototype.setUiObject.apply(this, [uiObj]);
         
-        var json = widgetTag.extension;
+        var json = this.widgetTag.extension;
         
         //If no folder is specified for enumeration, build a menu
         //from the mapgroup alone. Folders are only supported with MapGuide.
@@ -68,7 +66,7 @@
                 this.oMenu.add(menuItem);
             }
         }
-        
+
         //get the mapdefinitions as xml if there  is a folder specified
         //in the widget tag. All subfolders will be enumerated.
         //FIXME: this should be platform agnostic, Library:// isn't!
@@ -82,7 +80,6 @@
                           onComplete: OpenLayers.Function.bind(this.processMapMenu, this)};
             Fusion.ajaxRequest(s, params);
         };
-
     },
 
     processMapMenu: function(r) {
@@ -156,9 +153,9 @@
     },
     
     //action to perform when the button is clicked
-    activateTool: function() {
-        this.oMenu.show();
-    },
+    //activateTool: function() {
+    //    this.oMenu.show();
+    //},
         
     //change the map, preserving current extents
     switchMap: function(data) {

Modified: sandbox/jx2/widgets/Maptip.js
===================================================================
--- sandbox/jx2/widgets/Maptip.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/Maptip.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -48,8 +48,7 @@
  * **********************************************************************/
 
 
-Fusion.Widget.Maptip = OpenLayers.Class(Fusion.Widget,
-{
+Fusion.Widget.Maptip = OpenLayers.Class(Fusion.Widget, {
     oCurrentPosition: null,
     oMapTipPosition: null,
     nTimer: null,
@@ -59,11 +58,7 @@
     sWinFeatures: 'menubar=no,location=no,resizable=no,status=no',
     offset: new OpenLayers.Pixel(2,2),
     
-    initialize : function(widgetTag)
-    {
-      //console.log('Maptip.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, true]);
+    initialize : function(widgetTag) {
         var json = widgetTag.extension;
         
         this.sTarget = json.Target ? json.Target[0] : "MaptipWindow";

Modified: sandbox/jx2/widgets/Measure.js
===================================================================
--- sandbox/jx2/widgets/Measure.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/Measure.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -39,8 +39,10 @@
 Fusion.Event.MEASURE_CLEAR = Fusion.Event.lastEventId++;
 Fusion.Event.MEASURE_COMPLETE = Fusion.Event.lastEventId++;
 
-Fusion.Widget.Measure = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase, Fusion.Tool.Canvas,
-{
+Fusion.Widget.Measure = OpenLayers.Class(Fusion.Widget, Fusion.Tool.Canvas, {
+    isExclusive: true,
+    uiClass: Jx.Button,
+    
     isDigitizing: false,
     //distance of each segment
     distances: null,
@@ -77,11 +79,8 @@
     /* Style for the polygon line used for area draw */    
     areaStyle: null,
     
-    initialize : function(widgetTag) {
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, true]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-        Fusion.Tool.Canvas.prototype.initialize.apply(this, []);
+    initializeWidget: function(widgetTag) {
+        this.initializeCanvas();
         
         this.asCursor = ['crosshair'];
         var json = widgetTag.extension;
@@ -133,7 +132,7 @@
         //console.log('Rule::onKeyPress');
         var charCode = (e.charCode ) ? e.charCode : ((e.keyCode) ? e.keyCode : e.which);
         //console.log(charCode);
-        if (charCode == Event.KEY_ESC) {
+        if (charCode == OpenLayers.Event.KEY_ESC) {
             this.resetCanvas();
         } 
     },
@@ -202,7 +201,7 @@
      * deactivate the ruler tool
      */
     deactivate: function() {
-        //console.log('Ruler.deactivate');
+        console.log('Ruler.deactivate');
         OpenLayers.Event.stopObserving(document, 'keypress', this.keyHandler);           
         this.deactivateCanvas();
         this.resetCanvas();
@@ -228,8 +227,8 @@
      *
      * @param e Event the event that happened on the mapObj
      */
-    mouseDown: function(e) {  	
-        if (Event.isLeftClick(e)) {
+    mouseDown: function(e) {
+        if (OpenLayers.Event.isLeftClick(e)) {
             var map = this.getMap();
             var p = map.getEventPosition(e);
             var gp = map.pixToGeo(p.x, p.y);

Modified: sandbox/jx2/widgets/Navigator.js
===================================================================
--- sandbox/jx2/widgets/Navigator.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/Navigator.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -29,15 +29,12 @@
  * A widget that immplements an in-map navigation control with zoom and pan.
  * **********************************************************************/
 
-Fusion.Widget.Navigator = OpenLayers.Class(Fusion.Widget,
-{
+Fusion.Widget.Navigator = OpenLayers.Class(Fusion.Widget, {
     bInternalChange: false,
     zoomInFactor: 4,
     zoomOutFactor: 2,
     panAmount: 50,
-    initialize : function(widgetTag) {
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, true]);
+    initializeWidget: function(widgetTag) {
         var m = document.createElement('map');
         m.name = 'Navigator_ImageMap';
         m.id = 'Navigator_ImageMap';

Modified: sandbox/jx2/widgets/OverviewMap.js
===================================================================
--- sandbox/jx2/widgets/OverviewMap.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/OverviewMap.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -30,18 +30,13 @@
  * primary map.
  * **********************************************************************/
 
-Fusion.Widget.OverviewMap = OpenLayers.Class(Fusion.Widget,
-{
+Fusion.Widget.OverviewMap = OpenLayers.Class(Fusion.Widget, {
     oSize: null,
     nMinRatio : 4,
     nMaxRatio : 32,
     bDisplayed : false,
   
-    initialize : function(widgetTag) {
-        //console.log('OverviewMap.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
-        
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
         if (json.MinRatio) {
             this.nMinRatio = json.MinRatio[0];

Modified: sandbox/jx2/widgets/Pan.js
===================================================================
--- sandbox/jx2/widgets/Pan.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/Pan.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -29,14 +29,10 @@
  * A widget that allows for naviagtion by panning
  * **********************************************************************/
 
-Fusion.Widget.Pan = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase,
-{
-    initialize : function(widgetTag) {
-        //console.log('Pan.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, true]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-        
+Fusion.Widget.Pan = OpenLayers.Class(Fusion.Widget, {
+    isExclusive: true,
+    uiClass: Jx.Button,
+    initializeWidget: function(widgetTag) {
         this.control = new OpenLayers.Control.DragPan();
         this.getMap().oMapOL.addControl(this.control);
         this.control.handler.keyMask = 0;

Modified: sandbox/jx2/widgets/PanOnClick.js
===================================================================
--- sandbox/jx2/widgets/PanOnClick.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/PanOnClick.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -31,18 +31,12 @@
  * **********************************************************************/
 
 
-Fusion.Widget.PanOnClick = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase, 
-{
+Fusion.Widget.PanOnClick = OpenLayers.Class(Fusion.Widget, {
+    uiClass: Jx.Button,
     fPercent: null,
     nDeltaX: null,
     nDeltaY: null,
-    initialize : function(widgetTag)
-    {
-        //console.log('FitToWindow.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-        
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
         
         var percent = json.Percentage ? json.Percentage[0] : 75;
@@ -76,8 +70,7 @@
     /**
      * called when the button is clicked by the Fusion.Tool.ButtonBase widget
      */
-    execute : function()
-    {
+    activate: function() {
         var extents = this.getMap().getCurrentExtents();
         var center = this.getMap().getCurrentCenter();
         var fX, fY;

Modified: sandbox/jx2/widgets/PanQuery.js
===================================================================
--- sandbox/jx2/widgets/PanQuery.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/PanQuery.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -33,19 +33,13 @@
 
 //Fusion.require('widgets/Pan.js');
 
-Fusion.Widget.PanQuery = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase,
-{
+Fusion.Widget.PanQuery = OpenLayers.Class(Fusion.Widget, {
+    isExclusive: true,
+    uiClass: Jx.Button,
     selectionType: 'INTERSECTS',
     nTolerance: 3,
     bActiveOnly: false,
-    initialize : function(widgetTag) {
-        //console.log('PanQuery.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, true]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-        //OpenLayers.Util.extend(this, Fusion.Widget.Pan.prototype);
-        //Fusion.Widget.Pan.prototype.initialize.apply(this, [widgetTag]);
-
+    initializeWidget: function(widgetTag) {
         this.control = new OpenLayers.Control.DragPan();
         this.getMap().oMapOL.addControl(this.control);
         //TODO figure out how to set the mouseup via handlerOptions

Modified: sandbox/jx2/widgets/Print.js
===================================================================
--- sandbox/jx2/widgets/Print.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/Print.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -30,13 +30,9 @@
  *
  * **********************************************************************/
 
-Fusion.Widget.Print = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase,
-{
-    initialize : function(widgetTag) {
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-        
+Fusion.Widget.Print = OpenLayers.Class(Fusion.Widget, {
+    uiClass: Jx.Button,
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
         
         var showPrintUI = json.ShowPrintUI ? json.ShowPrintUI[0] : 'false';
@@ -71,7 +67,7 @@
      * load an interface that builds a printable version of
      * the current map view
      */
-    execute : function() {
+    activate: function() {
         if (this.showPrintUI) {
             this.openPrintUI();
         } else {

Modified: sandbox/jx2/widgets/RefreshMap.js
===================================================================
--- sandbox/jx2/widgets/RefreshMap.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/RefreshMap.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -31,20 +31,9 @@
  * **********************************************************************/
 
 
-Fusion.Widget.RefreshMap = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase,
-{
-    initialize : function(widgetTag) {
-        //console.log('RefreshMap.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-    },
-
-    /**
-     * 
-     */
-    execute : function() {
-        var map = this.getMap();
-        map.redraw();
+Fusion.Widget.RefreshMap = OpenLayers.Class(Fusion.Widget, {
+    uiClass: Jx.Button,
+    activate: function() {
+        this.getMap().redraw();
     }
 });

Modified: sandbox/jx2/widgets/SaveMap.js
===================================================================
--- sandbox/jx2/widgets/SaveMap.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/SaveMap.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -38,18 +38,14 @@
  *    </Extension>
  * **********************************************************************/
 
-Fusion.Widget.SaveMap = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase,
-{
+Fusion.Widget.SaveMap = OpenLayers.Class(Fusion.Widget, {
+    uiClass: Jx.Button,
     iframe : null,
     printLayout : null,
     printScale : null,
     imageWidth : null,
     imageHeight : null,
-    initialize : function(widgetTag) {
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
         this.format = (json.Format && json.Format[0] != '')?
                        json.Format[0] : 'png';

Modified: sandbox/jx2/widgets/Scalebar.js
===================================================================
--- sandbox/jx2/widgets/Scalebar.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/Scalebar.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -37,8 +37,7 @@
     Fusion.require('widgets/scalebar/scalebartool.js');
 }
 
-Fusion.Widget.Scalebar = OpenLayers.Class(Fusion.Widget,
-{
+Fusion.Widget.Scalebar = OpenLayers.Class(Fusion.Widget, {
     style: 'thin',
     displaySystem: 'metric',
     minWidth: 100,
@@ -48,11 +47,7 @@
     showMinorMeasures: true,
     abbreviateLabel: true,
     singleLine: false,
-    initialize : function(widgetTag) {
-        //console.log('Scalebar.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
-
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
         this.style = json.Style ? json.Style[0].toLowerCase() : this.style;
         if (this.style != 'fancy' && 

Modified: sandbox/jx2/widgets/ScalebarDual.js
===================================================================
--- sandbox/jx2/widgets/ScalebarDual.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/ScalebarDual.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -31,8 +31,7 @@
  * **********************************************************************/
 
 Fusion.Widget.ScalebarDual = OpenLayers.Class(Fusion.Widget, {
-    initialize : function(widgetTag) {
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag]);
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
         var maxWidth = json.MaxWidth ? parseInt(json.MaxWidth[0]) : 300;
         var topInUnits = json.TopInUnits ? json.TopInUnits[0] : 'ft';

Modified: sandbox/jx2/widgets/Search.js
===================================================================
--- sandbox/jx2/widgets/Search.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/Search.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -33,16 +33,10 @@
  * (http://mapserver.commenspace.org/tools/scalebar/
  * **********************************************************************/
 
-Fusion.Widget.Search = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase,
-{
+Fusion.Widget.Search = OpenLayers.Class(Fusion.Widget, {
     sFeatures : 'menubar=no,location=no,status=no,scrollbars=yes',
 
-    initialize : function(widgetTag) {
-        //console.log('Search.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
         this.sTarget = json.Target ? json.Target[0] : "SearchWindow";
         this.sBaseUrl = Fusion.getFusionURL() + 'widgets/Search/SearchPrompt.php';
@@ -54,7 +48,7 @@
         this.title = json.Title ? json.Title[0] : widgetTag.label;
     },
 
-    execute : function() {
+    activate: function() {
         var url = this.sBaseUrl;
         //add in other parameters to the url here
         

Modified: sandbox/jx2/widgets/Select.js
===================================================================
--- sandbox/jx2/widgets/Select.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/Select.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -31,19 +31,15 @@
  * **********************************************************************/
 
 
-Fusion.Widget.Select = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase,
-{
+Fusion.Widget.Select = OpenLayers.Class(Fusion.Widget, {
+    isExclusive: true,
+    uiClass: Jx.Button,
     selectionType: 'INTERSECTS',
     nTolerance : 3,     //default pixel tolernace for a point click
     bActiveOnly: false, //only select feature(s) on the active layer?
     maxFeatures: 0,     //deafult of 0 selects all features (i.e. no maximum)
     
-    initialize : function(widgetTag) {
-        //console.log('Select.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, true]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-
+    initializeWidget: function(widgetTag) {
         this.asCursor = ['auto'];
         
         this.enable = Fusion.Widget.Select.prototype.enable;

Modified: sandbox/jx2/widgets/SelectPolygon.js
===================================================================
--- sandbox/jx2/widgets/SelectPolygon.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/SelectPolygon.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -30,17 +30,13 @@
  * 
  * **********************************************************************/
 
-
-Fusion.Widget.SelectPolygon = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase, Fusion.Tool.ButtonBase, Fusion.Tool.Canvas,
-{
+Fusion.Widget.SelectPolygon = OpenLayers.Class(Fusion.Widget, Fusion.Tool.Canvas, {
+    isExclusive: true,
+    uiClass: Jx.Button,
     selectionType: 'INTERSECTS',
     nTolerance : 3, //default pixel tolernace for a point click
-    initialize : function(widgetTag) {
-        //console.log('Select.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, true]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-        Fusion.Tool.Canvas.prototype.initialize.apply(this, []);
+    initializeWidget: function(widgetTag) {
+        this.initializeCanvas();
         
         this.asCursor = ['auto'];
 
@@ -62,8 +58,7 @@
      * This function should be defined for all functions that register
      * as a widget in the map
      */
-    activate : function()
-    {
+    activate : function() {
         this.activateCanvas();
         this.getMap().setCursor(this.asCursor);
         /*icon button*/
@@ -91,7 +86,7 @@
      */
     mouseDown: function(e) {
         //console.log('SelectRadius.mouseDown');
-        if (Event.isLeftClick(e)) {
+        if (OpenLayers.Event.isLeftClick(e)) {
             var p = this.getMap().getEventPosition(e);
 
             if (!this.isDigitizing) {

Modified: sandbox/jx2/widgets/SelectRadius.js
===================================================================
--- sandbox/jx2/widgets/SelectRadius.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/SelectRadius.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -31,19 +31,15 @@
  * **********************************************************************/
 Fusion.Event.RADIUS_WIDGET_ACTIVATED = Fusion.Event.lastEventId++;
 
-
-Fusion.Widget.SelectRadius = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase, Fusion.Tool.Canvas,
-{
+Fusion.Widget.SelectRadius = OpenLayers.Class(Fusion.Widget, Fusion.Tool.Canvas, {
+    isExclusive: true,
+    uiClass: Jx.Button,
     selectionType: 'INTERSECTS',
     nTolerance : 3, //default pixel tolernace for a point click
     defaultRadius: 20,    //this is in map units
-    initialize : function(widgetTag) {
-        //console.log('Select.initialize');
+    initializeWidget: function(widgetTag) {
+        this.initializeCanvas();
 
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, true]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-        Fusion.Tool.Canvas.prototype.initialize.apply(this, []);
-
         this.asCursor = ['auto'];
         this.isDigitizing = false;
 
@@ -99,7 +95,7 @@
      * This function should be defined for all functions that register
      * as a widget in the map
      */
-    activate : function() {
+    activate: function() {
         this.activateCanvas();
         this.getMap().setCursor(this.asCursor);
         /*icon button*/
@@ -116,7 +112,7 @@
      * This function should be defined for all functions that register
      * as a widget in the map
      **/
-    deactivate : function() {
+    deactivate: function() {
         this.deactivateCanvas();
         this.getMap().setCursor('auto');
         /*icon button*/
@@ -132,7 +128,7 @@
      */
     mouseDown: function(e) {
         //console.log('SelectRadius.mouseDown'+this.isDigitizing);
-        if (Event.isLeftClick(e)) {
+        if (OpenLayers.Event.isLeftClick(e)) {
             var p = this.getMap().getEventPosition(e);
             var point = this.getMap().pixToGeo(p.x, p.y);
             var radius = this.defaultRadius;

Modified: sandbox/jx2/widgets/SelectRadiusValue.js
===================================================================
--- sandbox/jx2/widgets/SelectRadiusValue.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/SelectRadiusValue.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -31,16 +31,12 @@
  *
  * **********************************************************************/
 
-Fusion.Widget.SelectRadiusValue = OpenLayers.Class(Fusion.Widget, 
-{
+Fusion.Widget.SelectRadiusValue = OpenLayers.Class(Fusion.Widget, {
     radiusWidgetName: null,
     label: '',
     className: '',
     domLabel: null,
-    initialize : function(widgetTag) {
-    
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
-        
+    initializeWidget: function(widgetTag) {
         /* parse widget properties */
         var json = widgetTag.extension;
         

Modified: sandbox/jx2/widgets/SelectWithin.js
===================================================================
--- sandbox/jx2/widgets/SelectWithin.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/SelectWithin.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -31,16 +31,11 @@
  * **********************************************************************/
 
 
-Fusion.Widget.SelectWithin = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase,
-{
+Fusion.Widget.SelectWithin = OpenLayers.Class(Fusion.Widget, {
+    uiClass: Jx.Button,
     sFeatures : 'menubar=no,location=no,resizable=no,status=no',
 
-    initialize : function(widgetTag) {
-        //console.log('SelectWithin.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, true]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
         this.sTarget = json.Target ? json.Target[0] : "SelectWithinWindow";
         this.sBaseUrl = Fusion.getFusionURL() + 'widgets/SelectWithin/SelectWithinPanel.php';
@@ -90,7 +85,7 @@
         }
     },
     
-    execute : function() {
+    activate: function() {
         var url = this.sBaseUrl;
         //add in other parameters to the url here
         

Modified: sandbox/jx2/widgets/SelectionInfo.js
===================================================================
--- sandbox/jx2/widgets/SelectionInfo.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/SelectionInfo.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -43,16 +43,11 @@
  * & is &amp;
  * **********************************************************************/
 
-Fusion.Widget.SelectionInfo = OpenLayers.Class(Fusion.Widget,
-{
+Fusion.Widget.SelectionInfo = OpenLayers.Class(Fusion.Widget, {
     defaultTemplate: 'selectionInfo',
     domSpan: null,
     
-    initialize : function(widgetTag) {
-        //console.log('SelectionInfo.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, true]);
-        
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
         
         this.emptyText = json.EmptyText ? json.EmptyText[0] : this.domObj.innerHTML;

Modified: sandbox/jx2/widgets/SelectionPanel.js
===================================================================
--- sandbox/jx2/widgets/SelectionPanel.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/SelectionPanel.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -30,8 +30,7 @@
  *
  * **********************************************************************/
 
-Fusion.Widget.SelectionPanel = OpenLayers.Class(Fusion.Widget,
-{
+Fusion.Widget.SelectionPanel = OpenLayers.Class(Fusion.Widget, {
     /**
      * Property: previousIcon
      * {String} The default image for Previous page button.
@@ -44,11 +43,7 @@
      */    
     nextIcon: 'images/icon_forward.gif',
     
-    initialize : function(widgetTag) {
-        //console.log('SelectionPanel.initialize');
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
-
-
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
         if (json.PreviousImageUrl) this.previousIcon = json.PreviousImageUrl;
         if (json.NextImageUrl) this.nextIcon = json.NextImageUrl;

Modified: sandbox/jx2/widgets/TaskPane.js
===================================================================
--- sandbox/jx2/widgets/TaskPane.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/TaskPane.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -30,8 +30,7 @@
  ****************************************************************************/
 
 
-Fusion.Widget.TaskPane = OpenLayers.Class(Fusion.Widget,
-{
+Fusion.Widget.TaskPane = OpenLayers.Class(Fusion.Widget, {
     aExecutedTasks: null,   //array of URLs for tasks execcuted in the TaskPane
     nCurrentTask: 0,
     nTasks: 0,
@@ -39,12 +38,7 @@
     prevAction: null,
     nextAction: null,
     
-    initialize : function(widgetTag)
-    {
-        //console.log('TaskPane.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, true]);
-        
+    initializeWidget: function(widgetTag){
         this.aExecutedTasks = [];
         this.defHomeIcon = 'images/icon_home.png';
         this.defPrevTaskIcon = 'images/icon_back.png';
@@ -97,7 +91,7 @@
         $(this.taskMenu.button.domObj).addClass('jxButtonContentLeft');
         this.toolbar.add(this.taskMenu);
         
-        var iframeName = this.sName+'_IFRAME';
+        var iframeName = this.name+'_IFRAME';
         this.iframe = document.createElement('iframe');
         new Jx.Layout(this.iframe);
         this.iframe.setAttribute('name', iframeName);

Modified: sandbox/jx2/widgets/ViewOptions.js
===================================================================
--- sandbox/jx2/widgets/ViewOptions.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/ViewOptions.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -29,42 +29,40 @@
  * A widget to allow selection of the display units for various widgets
  ****************************************************************************/
 
-Fusion.Widget.ViewOptions = OpenLayers.Class(Fusion.Widget, Fusion.Tool.MenuBase,
-{
+Fusion.Widget.ViewOptions = OpenLayers.Class(Fusion.Widget, {
+    uiClass: Jx.Menu,
     displayUnits: false,
-    options : {
+    options: {
         'imperial': 'Miles', 
         'metric': 'Meters',
         'deg': 'Degrees'
     },
 
-    initialize : function(widgetTag) {
-        //console.log('ViewOptions.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, true]);
-        Fusion.Tool.MenuBase.prototype.initialize.apply(this, []);
-        
-        //this.enable();
-        
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
-        
+
+        this.displayUnits = json.DisplayUnits ? json.DisplayUnits[0] : false;
+        this.getMap().registerForEvent(Fusion.Event.MAP_LOADED, OpenLayers.Function.bind(this.setMapUnits, this));
+    },
+    
+    setUiObject: function(uiObj) {
+        Fusion.Widget.prototype.setUiObject.apply(this, [uiObj]);
+        var buttonSet = new Jx.ButtonSet();
         //set up the root menu
-        
         for (var key in this.options) {
             var menuItem = new Jx.Menu.Item({
                 label: OpenLayers.i18n(key),
-                onClick: OpenLayers.Function.bind(this.setViewOptions, this, this.options[key])
+                toggle: true,
+                onDown: OpenLayers.Function.bind(this.setViewOptions, this, this.options[key])
             });
-            this.oMenu.add(menuItem);
-        }
-
-        this.displayUnits = json.DisplayUnits ? json.DisplayUnits[0] : false;
-        this.getMap().registerForEvent(Fusion.Event.MAP_LOADED, OpenLayers.Function.bind(this.setMapUnits, this));
+            buttonSet.add(menuItem);
+            this.uiObj.add(menuItem);
+        }        
     },
     
     //action to perform when the button is clicked
-    activateTool: function(e) {
-        this.oMenu.show(e);
+    activate: function(e) {
+        //this.oMenu.show(e);
     },
 
     setViewOptions: function(units) {

Modified: sandbox/jx2/widgets/ViewSize.js
===================================================================
--- sandbox/jx2/widgets/ViewSize.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/ViewSize.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -28,19 +28,14 @@
  *
  * Display the size of the current view in user-definable units
  ****************************************************************************/
-
-
-Fusion.Widget.ViewSize = OpenLayers.Class(Fusion.Widget,
-{
+Fusion.Widget.ViewSize = OpenLayers.Class(Fusion.Widget, {
     defaultTemplate: 'x: {x}, y: {y}',
     domSpan: null,
     
     /* the units to display distances in */
     units: Fusion.UNKNOWN,
 
-    initialize : function(widgetTag) {
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, true]);
-             
+    initializeWidget: function(widgetTag) {
         this.emptyText = this.domObj.innerHTML;
         
         var json = widgetTag.extension;

Modified: sandbox/jx2/widgets/Zoom.js
===================================================================
--- sandbox/jx2/widgets/Zoom.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/Zoom.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -30,28 +30,24 @@
  * 
  * **********************************************************************/
 
-
-Fusion.Widget.Zoom = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase,
-{
-    nTolerance : 5,
-    nFactor : 2,
+Fusion.Widget.Zoom = OpenLayers.Class(Fusion.Widget, {
+    isExclusive: true,
+    tolerance : 5,
+    factor : 2,
     zoomIn: true,
+    uiClass: Jx.Button,
     
-    initialize : function(widgetTag)
-    {
-        //console.log('Zoom.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, true]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-        
+    initializeWidget: function(widgetTag){
         this.asCursor = ["url('images/zoomin.cur'),auto",'-moz-zoom-in', 'auto'];
-        var json = widgetTag.extension;
-        this.nTolerance = json.Tolerance ? json.Tolerance[0] : this.nTolerance;
-        this.nFactor = json.Factor ? json.Factor[0] : this.nFactor;
-        this.zoomIn = (json.Direction && json.Direction[0] == 'out') ? false : true;
         this.zoomInCursor = ["url('images/zoomin.cur'),auto",'-moz-zoom-in', 'auto'];
         this.zoomOutCursor = ["url('images/zoomout.cur'),auto",'-moz-zoom-out', 'auto'];
         
+        var json = widgetTag.extension;
+        this.tolerance = json.Tolerance ? json.Tolerance[0] : this.tolerance;
+        this.factor = json.Factor ? json.Factor[0] : this.factor;
+        this.zoomIn = (json.Direction && json.Direction[0] == 'out') ? false : true;
+        
+        
         this.keypressWatcher = OpenLayers.Function.bind(this.keypressHandler, this);
         
         this.map = this.getMap().oMapOL;
@@ -126,38 +122,37 @@
         } else { // it's a pixel
             var center = this.map.getLonLatFromPixel(position);
             var factor;
-            if(!zoomIn && this.nFactor > 1) {
-                factor = 1/this.nFactor;
+            if(!zoomIn && this.factor > 1) {
+                factor = 1/this.factor;
             } else {
-                factor = this.nFactor;
+                factor = this.factor;
             }
             this.getMap().zoom(center.lon, center.lat, factor);
         }
     },
 
     /**
-        * handler for zooming when the shift key is pressed.  This changes it from in to out or vice versa
-        *
-        * Parameters:
-        * position - {<OpenLayers.Bounds>} or {<OpenLayers.Pixel>}
-        */
+     * handler for zooming when the shift key is pressed.  This changes it
+     * from in to out or vice versa
+     *
+     * Parameters:
+     * position - {<OpenLayers.Bounds>} or {<OpenLayers.Pixel>}
+     */
     altZoom: function(position) {
         this.execute(position, true);
     },
     
     /**
-        * allows run-time setting of widget parameters 
-        *
-        * Parameters:
-        * param - the widget parameter name to set; for the Zoom widget these may be:
-        *               'Factgor'
-        * value - the value to use for the parameter
-        */
-    setParameter : function(param, value)
-    {
-        if (param == "Factor" && value > 0)
-        {
-            this.nFactor = value;
+     * allows run-time setting of widget parameters 
+     *
+     * Parameters:
+     * param - the widget parameter name to set; for the Zoom widget these may be:
+     *               'Factor'
+     * value - the value to use for the parameter
+     */
+    setParameter : function(param, value) {
+        if (param == "Factor" && value > 0) {
+            this.factor = value;
         }
     },
     

Modified: sandbox/jx2/widgets/ZoomOnClick.js
===================================================================
--- sandbox/jx2/widgets/ZoomOnClick.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/ZoomOnClick.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -29,37 +29,26 @@
  * Zoom the map by a fixed amount when a button is clicked
  * 
  * **********************************************************************/
-
-
-Fusion.Widget.ZoomOnClick = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase,
-{
-    nFactor: 4,
-    initialize : function(widgetTag)
-    {
-        //console.log('ZoomOnClick.initialize');
-
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-                
+Fusion.Widget.ZoomOnClick = OpenLayers.Class(Fusion.Widget, {
+    uiClass: Jx.Button,
+    factor: 4,
+    
+    initializeWidget: function(widgetTag) {
         var json = widgetTag.extension;
-        this.nFactor = parseFloat(json.Factor ? json.Factor[0] : this.nFactor);
+        this.factor = parseFloat(json.Factor ? json.Factor[0] : this.factor);
     },
 
     /**
      * called when the button is clicked by the Fusion.Tool.ButtonBase widget
      */
-    execute : function()
-    {
-        //console.log('ZoomOnClick.activateTool');
+    activate: function() {
         var center = this.getMap().getCurrentCenter();
-        this.getMap().zoom(center.x, center.y, this.nFactor);
+        this.getMap().zoom(center.x, center.y, this.factor);
     },
 
-    setParameter : function(param, value)
-    {
-        if (param == "Factor" && value > 0)
-        {
-            this.nFactor = value;
+    setParameter: function(param, value) {
+        if (param == "Factor" && value > 0) {
+            this.factor = value;
         }
     }
 });

Modified: sandbox/jx2/widgets/ZoomToSelection.js
===================================================================
--- sandbox/jx2/widgets/ZoomToSelection.js	2008-09-03 18:09:02 UTC (rev 1492)
+++ sandbox/jx2/widgets/ZoomToSelection.js	2008-09-04 17:18:46 UTC (rev 1493)
@@ -30,14 +30,11 @@
  *
  * **********************************************************************/
 
-Fusion.Widget.ZoomToSelection = OpenLayers.Class(Fusion.Widget, Fusion.Tool.ButtonBase,
-{
-    initialize : function(widgetTag) {
-        //console.log('ZoomToSelection.initialize');
+Fusion.Widget.ZoomToSelection = OpenLayers.Class(Fusion.Widget, {
+    uiClass: Jx.Button,
+    
+    initializeWidget: function(widgetTag) {
 
-        Fusion.Widget.prototype.initialize.apply(this, [widgetTag, false]);
-        Fusion.Tool.ButtonBase.prototype.initialize.apply(this, []);
-
         var json = widgetTag.extension;
         this.maxDimension = json.MaximumZoomDimension ? json.MaximumZoomDimension[0] : -1;
         this.zoomFactor = json.ZoomFactor ? json.ZoomFactor[0] : 2;
@@ -52,7 +49,7 @@
      * get the selection from the map (which may not be loaded yet).
      * zoomToSelection is called when the selection is ready.
      */
-    execute : function() {
+    activate: function() {
         this.getMap().getSelection(OpenLayers.Function.bind(this.zoomToSelection, this));
     },
 



More information about the fusion-commits mailing list