[fusion-commits] r1707 - in trunk: lib templates/mapguide/standard/themes/crispin templates/mapguide/standard/themes/crispin/images templates/mapguide/standard/themes/delicious templates/mapguide/standard/themes/delicious/images templates/mapserver/standard/themes/crispin templates/mapserver/standard/themes/crispin/images templates/mapserver/standard/themes/delicious templates/mapserver/standard/themes/delicious/images widgets

svn_fusion at osgeo.org svn_fusion at osgeo.org
Wed Dec 10 15:34:09 EST 2008


Author: pagameba
Date: 2008-12-10 15:34:08 -0500 (Wed, 10 Dec 2008)
New Revision: 1707

Modified:
   trunk/lib/jxlib.uncompressed.js
   trunk/templates/mapguide/standard/themes/crispin/ie6.css
   trunk/templates/mapguide/standard/themes/crispin/ie7.css
   trunk/templates/mapguide/standard/themes/crispin/images/button.png
   trunk/templates/mapguide/standard/themes/crispin/images/button_combo.png
   trunk/templates/mapguide/standard/themes/crispin/images/button_multi.png
   trunk/templates/mapguide/standard/themes/crispin/images/button_multi_disclose.png
   trunk/templates/mapguide/standard/themes/crispin/images/dialog_chrome.png
   trunk/templates/mapguide/standard/themes/crispin/images/flyout_chrome.png
   trunk/templates/mapguide/standard/themes/crispin/images/menu_hover.png
   trunk/templates/mapguide/standard/themes/crispin/images/tab_bottom.png
   trunk/templates/mapguide/standard/themes/crispin/images/tab_left.png
   trunk/templates/mapguide/standard/themes/crispin/images/tab_right.png
   trunk/templates/mapguide/standard/themes/crispin/images/tab_top.png
   trunk/templates/mapguide/standard/themes/crispin/images/tree.png
   trunk/templates/mapguide/standard/themes/crispin/images/tree_hover.png
   trunk/templates/mapguide/standard/themes/delicious/ie6.css
   trunk/templates/mapguide/standard/themes/delicious/ie7.css
   trunk/templates/mapguide/standard/themes/delicious/images/button.png
   trunk/templates/mapguide/standard/themes/delicious/images/button_combo.png
   trunk/templates/mapguide/standard/themes/delicious/images/button_multi.png
   trunk/templates/mapguide/standard/themes/delicious/images/button_multi_disclose.png
   trunk/templates/mapguide/standard/themes/delicious/images/dialog_chrome.png
   trunk/templates/mapguide/standard/themes/delicious/images/flyout_chrome.png
   trunk/templates/mapguide/standard/themes/delicious/images/menu_hover.png
   trunk/templates/mapguide/standard/themes/delicious/images/tab_bottom.png
   trunk/templates/mapguide/standard/themes/delicious/images/tab_left.png
   trunk/templates/mapguide/standard/themes/delicious/images/tab_right.png
   trunk/templates/mapguide/standard/themes/delicious/images/tab_top.png
   trunk/templates/mapguide/standard/themes/delicious/images/tree.png
   trunk/templates/mapguide/standard/themes/delicious/images/tree_hover.png
   trunk/templates/mapguide/standard/themes/delicious/images/tree_vert_line.png
   trunk/templates/mapserver/standard/themes/crispin/ie6.css
   trunk/templates/mapserver/standard/themes/crispin/ie7.css
   trunk/templates/mapserver/standard/themes/crispin/images/button.png
   trunk/templates/mapserver/standard/themes/crispin/images/button_combo.png
   trunk/templates/mapserver/standard/themes/crispin/images/button_multi.png
   trunk/templates/mapserver/standard/themes/crispin/images/button_multi_disclose.png
   trunk/templates/mapserver/standard/themes/crispin/images/dialog_chrome.png
   trunk/templates/mapserver/standard/themes/crispin/images/flyout_chrome.png
   trunk/templates/mapserver/standard/themes/crispin/images/menu_hover.png
   trunk/templates/mapserver/standard/themes/crispin/images/tab_bottom.png
   trunk/templates/mapserver/standard/themes/crispin/images/tab_left.png
   trunk/templates/mapserver/standard/themes/crispin/images/tab_right.png
   trunk/templates/mapserver/standard/themes/crispin/images/tab_top.png
   trunk/templates/mapserver/standard/themes/crispin/images/tree.png
   trunk/templates/mapserver/standard/themes/crispin/images/tree_hover.png
   trunk/templates/mapserver/standard/themes/delicious/ie6.css
   trunk/templates/mapserver/standard/themes/delicious/ie7.css
   trunk/templates/mapserver/standard/themes/delicious/images/button.png
   trunk/templates/mapserver/standard/themes/delicious/images/button_combo.png
   trunk/templates/mapserver/standard/themes/delicious/images/button_multi.png
   trunk/templates/mapserver/standard/themes/delicious/images/button_multi_disclose.png
   trunk/templates/mapserver/standard/themes/delicious/images/dialog_chrome.png
   trunk/templates/mapserver/standard/themes/delicious/images/flyout_chrome.png
   trunk/templates/mapserver/standard/themes/delicious/images/menu_hover.png
   trunk/templates/mapserver/standard/themes/delicious/images/tab_bottom.png
   trunk/templates/mapserver/standard/themes/delicious/images/tab_left.png
   trunk/templates/mapserver/standard/themes/delicious/images/tab_right.png
   trunk/templates/mapserver/standard/themes/delicious/images/tab_top.png
   trunk/templates/mapserver/standard/themes/delicious/images/tree.png
   trunk/templates/mapserver/standard/themes/delicious/images/tree_hover.png
   trunk/templates/mapserver/standard/themes/delicious/images/tree_vert_line.png
   trunk/widgets/OverviewMap.js
Log:
re #175, update to the latest version of jxlib.

Modified: trunk/lib/jxlib.uncompressed.js
===================================================================
--- trunk/lib/jxlib.uncompressed.js	2008-12-04 15:43:03 UTC (rev 1706)
+++ trunk/lib/jxlib.uncompressed.js	2008-12-10 20:34:08 UTC (rev 1707)
@@ -5436,7 +5436,36 @@
 		return this.start(obj);
 	}
 
-});// $Id: common.js 1154 2008-09-25 18:56:07Z pspencer $
+});/******************************************************************************
+ * MooTools 1.2.1
+ * Copyright (c) 2006-2007 [Valerio Proietti](http://mad4milk.net/).
+ * MooTools is distributed under an MIT-style license.
+ ******************************************************************************
+ * reset.css - Copyright (c) 2006, Yahoo! Inc. All rights reserved.
+ * Code licensed under the BSD License: http://developer.yahoo.net/yui/license.txt
+ ******************************************************************************
+ * Jx UI Library, 2.0-beta-6
+ * Copyright (c) 2006-2008, DM Solutions Group Inc. All rights reserved.
+ *
+ * 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.
+ *****************************************************************************/
+// $Id: common.js 241 2008-12-10 15:11:05Z pagameba $
 /**
  * Class: Jx
  * Jx is a global singleton object that contains the entire Jx library
@@ -5463,7 +5492,7 @@
         }
     }
 });
-/* inspired by extjs, removes css image flicker and related problems in IE 6 */
+/* inspired by extjs, apparently removes css image flicker and related problems in IE 6 */
 (function() {
     var ua = navigator.userAgent.toLowerCase();
     var isIE = ua.indexOf("msie") > -1,
@@ -5528,9 +5557,11 @@
  * be executed as part of a CSS style rule - this ensures that the hack only
  * gets applied on IE browsers.
  *
+ * The CSS that triggers this hack is only in the ie6.css files of the various
+ * themes.
+ *
  * Parameters:
- *
- *   object {Object} the object (img) to which the filter needs to be applied.
+ * object {Object} the object (img) to which the filter needs to be applied.
  */
 Jx.applyPNGFilter = function(o)  {
    var t=Jx.aPixel.src;
@@ -5547,8 +5578,7 @@
 
 /**
  * Method: addToImgQueue
- *
- * request that an image be set to a DOM IMG element src attribute.  This puts 
+ * Request that an image be set to a DOM IMG element src attribute.  This puts 
  * the image into a queue and there are private methods to manage that queue
  * and limit image loading to 2 at a time.
  *
@@ -5601,6 +5631,9 @@
  * Creates a new iframe element that is intended to fill a container
  * to mask out other operating system controls (scrollbars, inputs, 
  * buttons, etc) when HTML elements are supposed to be above them.
+ *
+ * Returns:
+ * an HTML iframe element that can be inserted into the DOM.
  */
 Jx.createIframeShim = function() {
     return new Element('iframe', {
@@ -5615,17 +5648,21 @@
  *
  * Element is a global object provided by the mootools library.  The
  * functions documented here are extensions to the Element object provided
- * by Jx to make cross-browser compatibility easier to achieve.
+ * by Jx to make cross-browser compatibility easier to achieve.  Most of the
+ * methods are measurement related.
+ *
+ * While the code in these methods has been converted to use MooTools methods,
+ * there may be better MooTools methods to use to accomplish these things.
+ * Ultimately, it would be nice to eliminate most or all of these and find the
+ * MooTools equivalent or convince MooTools to add them.
  */
 Element.implement({
     /**
      * Method: getBoxSizing
-     *
      * return the box sizing of an element, one of 'content-box' or 
      *'border-box'.
      *
      * Parameters: 
-     *
      * elem - {Object} the element to get the box sizing of.
      *
      * Returns:
@@ -5641,7 +5678,7 @@
               result = 'content-box'; 
         }
       } else {
-          if (arguments.length == 0) {
+          if (arguments.length === 0) {
               node = document.documentElement; 
           }
           var sizing = this.getStyle("-moz-box-sizing");
@@ -5654,12 +5691,10 @@
     },
     /**
      * Method: getContentBoxSize
-     *
      * return the size of the content area of an element.  This is the size of
      * the element less margins, padding, and borders.
      *
      * Parameters: 
-     *
      * elem - {Object} the element to get the content size of.
      *
      * Returns:
@@ -5677,12 +5712,10 @@
     },
     /**
      * Method: getBorderBoxSize
-     *
      * return the size of the border area of an element.  This is the size of
      * the element less margins.
      *
      * Parameters: 
-     *
      * elem - {Object} the element to get the border sizing of.
      *
      * Returns:
@@ -5697,12 +5730,10 @@
     
     /**
      * Method: getMarginBoxSize
-     *
      * return the size of the margin area of an element.  This is the size of
      * the element plus margins.
      *
      * Parameters: 
-     *
      * elem - {Object} the element to get the margin sizing of.
      *
      * Returns:
@@ -5718,7 +5749,6 @@
     
     /**
      * Method: setContentBoxSize
-     *
      * set either or both of the width and height of an element to
      * the provided size.  This function ensures that the content
      * area of the element is the requested size and the resulting
@@ -5726,9 +5756,7 @@
      * borders.
      *
      * Parameters: 
-     *
      * elem - {Object} the element to set the content area of.
-     *
      * size - {Object} an object with a width and/or height property that is the size to set
      * the content area of the element to.
      */
@@ -5761,7 +5789,6 @@
     },
     /**
      * Method: setBorderBoxSize
-     *
      * set either or both of the width and height of an element to
      * the provided size.  This function ensures that the border
      * size of the element is the requested size and the resulting
@@ -5769,9 +5796,7 @@
      * borders.
      *
      * Parameters: 
-     *
      * elem - {Object} the element to set the border size of.
-     *
      * size - {Object} an object with a width and/or height property that is the size to set
      * the content area of the element to.
      */
@@ -5805,11 +5830,9 @@
     },
     /**
      * Method: getPaddingSize
-     *
      * returns the padding for each edge of an element
      *
      * Parameters: 
-     *
      * elem - {Object} The element to get the padding for.
      *
      * Returns:
@@ -5825,11 +5848,9 @@
     },
     /**
      * Method: getBorderSize
-     *
      * returns the border size for each edge of an element
      *
      * Parameters: 
-     *
      * elem - {Object} The element to get the borders for.
      *
      * Returns:
@@ -5845,11 +5866,9 @@
     },
     /**
      * Method: getMarginSize
-     *
      * returns the margin size for each edge of an element
      *
      * Parameters: 
-     *
      * elem - {Object} The element to get the margins for.
      *
      * Returns:
@@ -5865,24 +5884,21 @@
     },
     /**
      * Method: getNumber
-     *
      * safely parse a number and return its integer value.  A NaN value 
      * returns 0.  CSS size values are also parsed correctly.
      *
      * Parameters: 
-     *
      * n - {Mixed} the string or object to parse.
      *
      * Returns:
      * {Integer} the integer value that the parameter represents
      */
     getNumber: function(n) {
-      var result = n==null||isNaN(parseInt(n))?0:parseInt(n);
+      var result = n===null||isNaN(parseInt(n,10))?0:parseInt(n,10);
       return result;
     },
     /**
      * Method: getPageDimensions
-     *
      * return the dimensions of the browser client area.
      *
      * Returns:
@@ -5893,23 +5909,43 @@
         return {width: window.getWidth(), height: window.getHeight()};
     },
     
+    /**
+     * Method: descendantOf
+     * determines if the element is a descendent of the reference node.
+     *
+     * Parameters:
+     * node - {HTMLElement} the reference node
+     *
+     * Returns:
+     * {Boolean} true if the element is a descendent, false otherwise.
+     */
     descendantOf: function(node) {
         var parent = $(this.parentNode);
         while (parent != node && parent && parent.parentNode && parent.parentNode != parent) {
             parent = $(parent.parentNode);
         }
         return parent == node;
-
     },
     
+    /**
+     * Method: findElement
+     * search the parentage of the element to find an element of the given
+     * tag name.
+     *
+     * Parameters:
+     * type - {String} the tag name of the element type to search for
+     *
+     * Returns:
+     * {HTMLElement} the first node (this one or first parent) with the
+     * requested tag name or false if none are found.
+     */
     findElement: function(type) {
         var o = this;
         var tagName = o.tagName;
         while (o.tagName != type && o && o.parentNode && o.parentNode != o) {
             o = $(o.parentNode);
         }
-        return o.tagName == type;
-
+        return o.tagName == type ? o : false;
     }
 } );
 
@@ -5927,6 +5963,9 @@
  * o using an HTML string
  *
  * o using a URL to get the content remotely
+ *
+ * Use the Implements syntax in your Class to add Jx.ContentLoader
+ * to your class.
  */
 Jx.ContentLoader = new Class ({
     /**
@@ -5973,7 +6012,11 @@
                 c = $(this.options.content);
             }
             if (c) {
-                element.appendChild(c);
+                if (this.options.content.addTo) {
+                    this.options.content.addTo(element);
+                } else {
+                    element.appendChild(c);                    
+                }
                 this.contentIsLoaded = true;                
             } else {
                 element.innerHTML = this.options.content;
@@ -6037,17 +6080,57 @@
     /**
      * Method: position
      * positions an element relative to another element
-     * based on the provided options
+     * based on the provided options.  Positioning rules are
+     * a string with two space-separated values.  The first value
+     * references the parent element and the second value references
+     * the thing being positioned.  In general, multiple rules can be
+     * considered by passing an array of rules to the horizontal and
+     * vertical options.  The position method will attempt to position
+     * the element in relation to the relative element using the rules
+     * specified in the options.  If the element does not fit in the
+     * viewport using the rule, then the next rule is attempted.  If
+     * all rules fail, the last rule is used and element may extend
+     * outside the viewport.  Horizontal and vertical rules are
+     * processed independently.
      *
+     * Horizontal Positioning:
+     * Horizontal values are 'left', 'center', 'right', and numeric values.
+     * Some common rules are:
+     * o 'left left' is interpreted as aligning the left
+     * edge of the element to be positioned with the left edge of the
+     * reference element.  
+     * o 'right right' aligns the two right edges.  
+     * o 'right left' aligns the left edge of the element to the right of
+     * the reference element.  
+     * o 'left right' aligns the right edge of the element to the left
+     * edge of the reference element.
+     *
+     * Vertical Positioning:
+     * Vertical values are 'top', 'center', 'bottom', and numeric values.
+     * Some common rules are:
+     * o 'top top' is interpreted as aligning the top
+     * edge of the element to be positioned with the top edge of the
+     * reference element.  
+     * o 'bottom bottom' aligns the two bottom edges.  
+     * o 'bottom top' aligns the top edge of the element to the bottom of
+     * the reference element.  
+     * o 'top bottom' aligns the bottom edge of the element to the top
+     * edge of the reference element.
+     * 
      * Parameters:
      * element - the element to position
      * relative - the element to position relative to
      * options - the positioning options, see list below.
      *
      * Options:
-     * horizontal
-     * vertical
-     * offsets
+     * horizontal - the horizontal positioning rule to use to position the 
+     *    element.  Valid values are 'left', 'center', 'right', and a numeric
+     *    value.  The default value is 'center center'.
+     * vertical - the vertical positioning rule to use to position the 
+     *    element.  Valid values are 'top', 'center', 'bottom', and a numeric
+     *    value.  The default value is 'center center'.
+     * offsets - an object containing numeric pixel offset values for the object
+     *    being positioned as top, right, bottom and left properties.
      */
     position: function(element, relative, options) {
         element = $(element);
@@ -6071,13 +6154,14 @@
         var right;
         var top;
         var bottom;
+        var n;
         if (!hor.some(function(opt) {
             var parts = opt.split(' ');
             if (parts.length != 2) {
                 return false;
             }
-            if (!isNaN(parseInt(parts[0]))) {
-                var n = parseInt(parts[0]);
+            if (!isNaN(parseInt(parts[0],10))) {
+                n = parseInt(parts[0],10);
                 if (n>=0) {
                     left = n;                    
                 } else {
@@ -6094,10 +6178,11 @@
                     case 'left':
                     default:
                         left = coords.left;
+                        break;
                 }                
             }
-            if (!isNaN(parseInt(parts[1]))) {
-                var n = parseInt(parts[1]);
+            if (!isNaN(parseInt(parts[1],10))) {
+                n = parseInt(parts[1],10);
                 if (n<0) {
                     right = left + n;
                     left = right - size.width;
@@ -6105,7 +6190,7 @@
                     left += n;
                     right = left + size.width;
                 }
-                right = coords.left + coords.width + parseInt(parts[1]);
+                right = coords.left + coords.width + parseInt(parts[1],10);
                 left = right - size.width;
             } else {
                 switch(parts[1]) {
@@ -6122,6 +6207,7 @@
                     default:
                         left = left - Math.round(size.width/2);
                         right = left + size.width;
+                        break;
                 }                
             }
             return (left >= scroll.x && right <= scroll.x + page.width);
@@ -6143,8 +6229,8 @@
                 if (parts.length != 2) {
                     return false;
                 }
-                if (!isNaN(parseInt(parts[0]))) {
-                    top = parseInt(parts[0]);
+                if (!isNaN(parseInt(parts[0],10))) {
+                    top = parseInt(parts[0],10);
                 } else {
                     switch(parts[0]) {
                         case 'bottom':
@@ -6156,10 +6242,11 @@
                         case 'top':
                         default:
                             top = coords.top;
+                            break;
                     }
                 }
-                if (!isNaN(parseInt(parts[1]))) {
-                    var n = parseInt(parts[1]);
+                if (!isNaN(parseInt(parts[1],10))) {
+                    var n = parseInt(parts[1],10);
                     if (n>=0) {
                         top += n;
                         bottom = top + size.height;
@@ -6182,6 +6269,7 @@
                         default:
                             top = top - Math.round(size.height/2);
                             bottom = top + size.height;
+                            break;
                     }                    
                 }
                 return (top >= scroll.y && bottom <= scroll.y + page.height);
@@ -6256,7 +6344,7 @@
         
         /* get the chrome image from the background image of the element */
         var src = c.getStyle('backgroundImage');
-        if (!src.contains('http://')) {
+        if (!(src.contains('http://') || src.contains('https://') || src.contains('file://'))) {
             src = null;
         } else {
             src = src.slice(4,-1);
@@ -6339,33 +6427,27 @@
     addable: null,
     /**
      * Method: addTo
-     * adds the object to a DOM element using appendChild if sibling
-     * is not specified or sibling's parent is not the specified parent,
-     * otherwise uses insertBefore.    
+     * adds the object to the DOM relative to another element.  If you use
+     * 'top' or 'bottom' then the element is added to the relative
+     * element (becomes a child node).  If you use 'before' or 'after'
+     * then the element is inserted adjacent to the reference node. 
      *
      * Parameters:
-     * parent - {Object} the DOM element or id of a DOM element
-     * to append the object to
-     * sibling - {Object} the DOM element or id of a DOM element
-     * to insert the object before.  If not specified, then the
-     * object is appended to the parent.
+     * reference - {Object} the DOM element or id of a DOM element
+     * to append the object relative to
+     * where - {String} where to append the element in relation to the
+     * reference node.  Can be 'top', 'bottom', 'before' or 'after'.
+     * The default is 'bottom'.
      *
      * Returns:
      * the object itself, which is useful for chaining calls together
      */
-    addTo: function(parent, sibling) {
-        var what = this.addable || this.domObj;
-        parent = $(parent);
-        sibling = sibling ? $(sibling) : null;
-        if (sibling && sibling.parentNode == parent) {
-            parent.insertBefore(what, sibling);
-        } else {
-            parent.appendChild(what);            
-        }
-        this.fireEvent('addTo', this);
+    addTo: function(reference, where) {
+        $(this.addable || this.domObj).inject(reference,where);
+        this.fireEvent('addTo',this);
         return this;
     }
-});// $Id: button.js 1094 2008-09-23 22:04:34Z pspencer $
+});// $Id: button.js 242 2008-12-10 15:19:21Z pagameba $
 /**
  * Class: Jx.Button
  * Jx.Button creates a clickable element that can be added to a web page.
@@ -6401,13 +6483,6 @@
  * </div>
  * (end)
  *
- * Visually, a Jx.Button consists of an <A> tag that may contain either
- * an image, a label, or both (the label appears to the right of the button
- * if both are present).  The default styles for Jx.Button expect the
- * image to be 16 x 16 pixels, with a padding of 4px and a border of 1px
- * which results in an element that is 26 pixels high.  The width of the
- * button automatically accomodates the image and label as required.
- *
  * When you construct a new instance of Jx.Button, the button does not
  * automatically get inserted into the web page.  Typically a button
  * is used as part of building another capability such as a Jx.Toolbar.
@@ -6415,12 +6490,12 @@
  * you may use the addTo method to append or insert the button into the 
  * page.  
  *
- * There are two types of buttons, normal and toggle.  A toggle button
+ * There are two modes for a button, normal and toggle.  A toggle button
  * has an active state analogous to a checkbox.  A toggle button generates
  * different events (down and up) from a normal button (click).  To create
- * a toggle button, pass type: 'toggle' to the Jx.Button constructor.
+ * a toggle button, pass toggle: true to the Jx.Button constructor.
  *
- * To use a Jx.Button in an application, you need to register for the 'click'
+ * To use a Jx.Button in an application, you should to register for the 'click'
  * event.  You can pass a function in the 'onClick' option when constructing
  * a button or you can call the addEvent('click', myFunction) method.  The
  * addEvent method can be called several times, allowing more than one function
@@ -6457,10 +6532,7 @@
  * down - the button is down (only if type is 'toggle')
  * up - the button is up (only if the type is 'toggle').
  *
- * Implements:
- * Options - from MooTools Class.Extras
- * Events - from MooTools Class.Extras
- *
+ 
  * License: 
  * Copyright (c) 2008, DM Solutions Group Inc.
  * 
@@ -6468,6 +6540,12 @@
  */
  
 Jx.Button = new Class({
+    /**
+     * Implements:
+     * * Options
+     * * Events
+     * * <Jx.Addable>
+     */
     Implements: [Options,Events,Jx.Addable],
     
     /**
@@ -6478,10 +6556,6 @@
      */
     domObj: null,
     
-    /**
-     * Property: {Object} options
-     * default options for a button.
-     */
     options: {
         id: '',
         type: 'Button',
@@ -6506,28 +6580,32 @@
      *
      * Options:
      * id - optional.  A string value to use as the ID of the button
-     *     container.
+     *    container.
      * type - optional.  A string value that indicates what type of button
-     *     this is.  The default value is Button.  The type is used to form
-     *     the CSS class names used for various HTML elements within the
-     *     button.
+     *    this is.  The default value is Button.  The type is used to form
+     *    the CSS class names used for various HTML elements within the
+     *    button.
      * image - optional.  A string value that is the url to load the image to
-     *     display in this button.  The default styles size this image to
-     *     16 x 16.
-     *     If not provided, then the button will have no icon.
+     *    display in this button.  The default styles size this image to
+     *    16 x 16.
+     *    If not provided, then the button will have no icon.
      * tooltip - optional.  A string value to use as the alt/title attribute
-     *     of the <A> tag that wraps the button, resulting in a tooltip that
-     *     appears when the user hovers the mouse over a button in most 
-     *     browsers.  If not provided, the button will have no tooltip.
+     *    of the <A> tag that wraps the button, resulting in a tooltip that
+     *    appears when the user hovers the mouse over a button in most 
+     *    browsers.  If not provided, the button will have no tooltip.
      * label - {String} optional, default is no label.  A string value
-     *     that is used as a label on the button.
-     * enabled - {Boolean} whether the button is enabled or not.
+     *    that is used as a label on the button.
+     * toggle - {Boolean} default true, whether the button is a toggle button
+     *    or not.
+     * toggleClass - {String} defaults to Toggle, this is class is added to
+     *    buttons with the option toggle: true
      * halign - {String} horizontal alignment of the button label, 'center' by
      *     default.  Other values are 'left' and 'right'.
      * valign - {String} vertical alignment of the button label, 'middle' by
      *     default.  Other values are 'top' and 'bottom'.
      * active - {Boolean} optional, default false.  Controls the initial
      *     state of toggle buttons.
+     * enabled - {Boolean} whether the button is enabled or not.
      * container - {String} the tag name of the HTML element that should be
      *     created to contain the button, by default this is 'div'.
      */
@@ -6540,17 +6618,53 @@
             d.addClass('jx'+this.options.type+this.options.toggleClass);
         }
         // the clickable part of the button
+        var hasFocus;
+        var mouseDown;
         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)
+                click: this.clicked.bindWithEvent(this),
+                drag: (function(e) {e.stop();}).bindWithEvent(this),
+                mousedown: (function(e) {
+                    this.domA.addClass('jx'+this.options.type+'Pressed');
+                    hasFocus = true;
+                    mouseDown = true;
+                    this.focus();
+                }).bindWithEvent(this),
+                mouseup: (function(e) {
+                    this.domA.removeClass('jx'+this.options.type+'Pressed');
+                    mouseDown = false;
+                }).bindWithEvent(this),
+                mouseleave: (function(e) {
+                    this.domA.removeClass('jx'+this.options.type+'Pressed');
+                }).bindWithEvent(this),
+                mouseenter: (function(e) {
+                    if (hasFocus && mouseDown) {
+                        this.domA.addClass('jx'+this.options.type+'Pressed');
+                    }
+                }).bindWithEvent(this),
+                keydown: (function(e) {
+                    if (e.key == 'enter') {
+                        this.domA.addClass('jx'+this.options.type+'Pressed');
+                    }
+                }).bindWithEvent(this),
+                keyup: (function(e) {
+                    if (e.key == 'enter') {
+                        this.domA.removeClass('jx'+this.options.type+'Pressed');
+                    }
+                }).bindWithEvent(this),
+                blur: function() { hasFocus = false; }
             }
         });
         d.adopt(a);
         
+        new Drag(a, {
+            onStart: function() {this.stop();}
+        });
+        
         var s = new Element('span', {'class': 'jx'+this.options.type+'Content'});
         a.adopt(s);
         
@@ -6746,8 +6860,22 @@
                 'alt':tooltip
             });
         }
+    },
+    /**
+     * Method: focus
+     * capture the keyboard focus on this button
+     */
+    focus: function() {
+        this.domA.focus();
+    },
+    /**
+     * Method: blur
+     * remove the keyboard focus from this button
+     */
+    blur: function() {
+        this.domA.blur();
     }
-});// $Id: button.flyout.js 1149 2008-09-25 12:43:46Z pspencer $
+});// $Id: button.flyout.js 247 2008-12-10 19:21:02Z fred.warnock $
 /**
  * Class: Jx.Button.Flyout
  * Flyout buttons expose a panel when the user clicks the button.  The
@@ -6762,26 +6890,16 @@
  * clicking anywhere outside the panel and other buttons, or by pressing the
  * 'esc' key.
  *
- * A flyout is structure the same way as a normal <Jx.Button> except that an
- * extra div is appended to the jxButtonContainer element and given a class
- * of jxFlyout.
- *
  * Flyout buttons implement <Jx.ContentLoader> which provides the hooks to
- * insert content into the jxFlyout element.  Note that the jxFlyout element
- * is not appended to the DOM until the first time it is opened.
+ * insert content into the Flyout element.  Note that the Flyout element
+ * is not appended to the DOM until the first time it is opened, and it is
+ * removed from the DOM when closed.
  *
  * It is generally best to specify a width and height for your flyout content
  * area through CSS to ensure that it works correctly across all browsers.
- * To do this, make sure to provide a unique 'id' in the options when
- * constructing your button and then provide some CSS:
+ * You can do this for all flyouts using the .jxFlyout CSS selector, or you
+ * can apply specific styles to your content elements.
  *
- * (code)
- * #myFlyout .jxFlyout {
- *   width: 200px;
- *   height: 100px;
- * }
- * (end)
- *
  * A flyout closes other flyouts when it is opened.  It is possible to embed
  * flyout buttons inside the content area of another flyout button.  In this
  * case, opening the inner flyout will not close the outer flyout but it will
@@ -6805,20 +6923,23 @@
  * open - this event is triggered when the flyout is opened.
  * close - this event is triggered when the flyout is closed.
  *
- * Extends:
- * <Jx.Button>
- * 
- * Implements:
- * <Jx.ContentLoader>
- * <Jx.AutoPosition>
- *
  * License: 
  * Copyright (c) 2008, DM Solutions Group Inc.
  * 
  * This file is licensed under an MIT style license
  */
 Jx.Button.Flyout = new Class({
+    /**
+     * Extends:
+     * <Jx.Button>
+     */
     Extends: Jx.Button,
+    /**
+     * Implements:
+     * * <Jx.ContentLoader>
+     * * <Jx.AutoPosition>
+     * * <Jx.Chrome>
+     */
     Implements: [Jx.ContentLoader, Jx.AutoPosition, Jx.Chrome],
     
     /**
@@ -6828,14 +6949,14 @@
     content: null,
     /**
      * Constructor: initialize
-     *
      * construct a new instance of a flyout button.  The single options
-     * argument takes the same parameters as <Jx.Button::initialize> plus
-     * content loading options as per <Jx.ContentLoader>.
+     * argument takes a combination of options that apply to <Jx.Button>,
+     * <Jx.ContentLoader>, and <Jx.AutoPosition>.
      *
      * Parameters: {Object} options
-     *
-     * an options object used to initialize the button
+     * an options object used to initialize the button, see 
+     * <Jx.Button::initialize>, <Jx.ContentLoader>, and <Jx.AutoPosition>
+     * for details.
      */
     initialize: function(options) {
         if (!Jx.Button.Flyout.Stack) {
@@ -6944,7 +7065,7 @@
         
         this.contentContainer.setStyle('visibility','');
 
-        window.addEvent('keypress', this.keypressWatcher);
+        document.addEvent('keydown', this.keypressWatcher);
         document.addEvent('click', this.hideWatcher);
         this.fireEvent('open', this);
     },
@@ -6959,7 +7080,7 @@
         Jx.Button.Flyout.Stack.pop();
         this.setActive(false);
         this.contentContainer.dispose();
-        window.removeEvent('keypress', this.keypressWatcher);    
+        document.removeEvent('keydown', this.keypressWatcher);    
         document.removeEvent('click', this.hideWatcher);
         this.fireEvent('close', this);
     },
@@ -6980,7 +7101,7 @@
             Jx.Button.Flyout.Stack[Jx.Button.Flyout.Stack.length - 1].hide();
         }
     }
-});// $Id: button.multi.js 1015 2008-09-19 19:21:04Z pspencer $
+});// $Id: button.multi.js 246 2008-12-10 19:09:41Z fred.warnock $
 /**
  * Class: Jx.Button.Multi
  * Multi buttons are used to contain multiple buttons in a drop down list
@@ -7033,8 +7154,11 @@
  * This file is licensed under an MIT style license
  */
 Jx.Button.Multi = new Class({
+    /**
+     * Extends: 
+     * <Jx.Button>
+     */
     Extends: Jx.Button,
-    Implements: [Options],
     /**
      * Property: {<Jx.Button>} activeButton
      * the currently selected button
@@ -7066,12 +7190,19 @@
             'class': 'jxButtonDisclose',
             'href': 'javascript:void(0)'
         });
+        var button = this;
+        var hasFocus;
+        
         a.addEvents({
             'click': (function(e) {
-                if (this.items.length ==0) {
+                if (this.items.length === 0) {
                     return;
                 }
+                if (!button.options.enabled) {
+                    return;
+                }
                 this.contentContainer.setStyle('visibility','hidden');
+                this.contentContainer.setStyle('display','block');
                 $(document.body).adopt(this.contentContainer);            
                 /* we have to size the container for IE to render the chrome correctly
                  * but just in the menu/sub menu case - there is some horrible peekaboo
@@ -7101,11 +7232,39 @@
             }).bindWithEvent(this.menu),
             'mouseenter':(function(){
                 $(this.domObj.firstChild).addClass('jxButtonHover');
+                if (hasFocus) {
+                    a.addClass('jx'+this.options.type+'Pressed');
+                }
             }).bind(this),
             'mouseleave':(function(){
                 $(this.domObj.firstChild).removeClass('jxButtonHover');
-            }).bind(this)
+                a.removeClass('jx'+this.options.type+'Pressed');
+            }).bind(this),
+            mousedown: (function(e) {
+                a.addClass('jx'+this.options.type+'Pressed');
+                hasFocus = true;
+                this.focus();
+            }).bindWithEvent(this),
+            mouseup: (function(e) {
+                a.removeClass('jx'+this.options.type+'Pressed');                  
+            }).bindWithEvent(this),
+            keydown: (function(e) {
+                if (e.key == 'enter') {
+                    a.addClass('jx'+this.options.type+'Pressed');
+                }
+            }).bindWithEvent(this),
+            keyup: (function(e) {
+                if (e.key == 'enter') {
+                    a.removeClass('jx'+this.options.type+'Pressed');
+                }
+            }).bindWithEvent(this),
+            blur: function() { hasFocus = false; }
+            
         });
+        new Drag(a, {
+            onStart: function() {this.stop();}
+        });
+        
         this.menu.addEvents({
             'show': (function() {
                 this.domA.addClass('jxButtonActive');                    
@@ -7189,7 +7348,7 @@
                     }
                 }, this)) {
                     this.setActiveButton(null);
-                };
+                }
             }
             this.buttons.erase(button);
         }
@@ -7229,20 +7388,19 @@
         this.setActiveButton(button);
         button.clicked();
     }
-});// $Id: colorpalette.js 1094 2008-09-23 22:04:34Z pspencer $
+});// $Id: colorpalette.js 241 2008-12-10 15:11:05Z pagameba $
 /**
  * Class: Jx.ColorPalette
  * A Jx.ColorPalette presents a user interface for selecting colors.  Currently,
  * the user can either enter a HEX colour value or select from a palette of
  * web-safe colours.  The user can also enter an opacity value.
  *
- * A Jx.ColorPalette can be embedded anywhere in a web page by appending its
- * <Jx.ColorPalette.domObj> property to an HTML element.  However, a
- * a <Jx.Button> subclass  is provided ( <Jx.Button.Color> ) that embeds a
- * colour panel inside a button for easy use in toolbars.
+ * A Jx.ColorPalette can be embedded anywhere in a web page using its addTo
+ * method.  However, a <Jx.Button> subclass is provided (<Jx.Button.Color>)
+ * that embeds a colour panel inside a button for easy use in toolbars.
  *
- * Colour changes are propogated via a changed event.  To
- * be notified of changes in a Jx.ColorPalette, use the addEvent method.
+ * Colour changes are propogated via a change event.  To be notified 
+ * of changes in a Jx.ColorPalette, use the addEvent method.
  *
  * Example:
  * (code)
@@ -7252,9 +7410,6 @@
  * change - triggered when the color changes.
  * click - the user clicked on a color swatch (emitted after a change event)
  *
- * Implements:
- * Options - MooTools Class.Extras
- * Events - MooTools Class.Extras
  *
  * License: 
  * Copyright (c) 2008, DM Solutions Group Inc.
@@ -7263,6 +7418,12 @@
  */
 
 Jx.ColorPalette = new Class({
+    /**
+     * Implements:
+     * * Options
+     * * Events
+     * * <Jx.Addable>
+     */
     Implements: [Options, Events, Jx.Addable],
     /**
      * Property: {HTMLElement} domObj
@@ -7272,14 +7433,11 @@
     options: {
         parent: null,
         color: '#000000',
-        alpha: 1
+        alpha: 1,
+        hexColors: ['00', '33', '66', '99', 'CC', 'FF']
     },
     /**
-     * Property: {Array} hexColors
-     * an array of valid hex values that are used to build a web-safe
-     * palette
      */
-    hexColors: ['00', '33', '66', '99', 'CC', 'FF'],
     /**
      * Constructor: Jx.ColorPalette
      * initialize a new instance of Jx.ColorPalette
@@ -7291,9 +7449,12 @@
      * Options:
      * parent - an html element to add the color palette to if provided.
      * color - a colour to initialize the panel with, defaults to #000000
-     *         (black) if not specified.
+     *    (black) if not specified.
      * alpha - an alpha value to initialize the panel with, defaults to 1
-     *         (opaque) if not specified.
+     *    (opaque) if not specified.
+     * hexColors - an array of hexidecimal values to use for creating entries, the default
+     *    values create a web safe palette and shouldn't be changed unless you understand
+     *    what the code is doing
      */
     initialize: function(options) {
         this.setOptions(options);
@@ -7392,7 +7553,7 @@
                     g = j%6;
                     b = i%6;
                 }
-                var bgColor = '#'+this.hexColors[r]+this.hexColors[g]+this.hexColors[b];
+                var bgColor = '#'+this.options.hexColors[r]+this.options.hexColors[g]+this.options.hexColors[b];
 
                 var td = new Element('td');
                 if (!bSkip) {
@@ -7531,7 +7692,7 @@
     }
 });
 
-// $Id: button.color.js 929 2008-09-16 14:06:10Z pspencer $ 
+// $Id: button.color.js 241 2008-12-10 15:11:05Z pagameba $ 
 /**
  * Class: Jx.Button.Color
  * A <Jx.ColorPalette> wrapped up in a Jx.Button.  The button includes a
@@ -7553,20 +7714,17 @@
  * Events:
  * change - fired when the color is changed.
  *
- * Extends:
- * <Jx.Button.Flyout>
- *
  * License: 
  * Copyright (c) 2008, DM Solutions Group Inc.
  * 
  * This file is licensed under an MIT style license
  */
 Jx.Button.Color = new Class({
-    Extends: Jx.Button.Flyout,
     /**
-     * Property: {HTMLElement} swatch
-     * a div used to represent the current colour in the button.
+     * Extends:
+     * <Jx.Button.Flyout>
      */
+    Extends: Jx.Button.Flyout,
     swatch: null,
     options: {
         color: '#000000',
@@ -7708,11 +7866,12 @@
         this.selectedSwatch.setStyles(styles);
     }
 });
-// $Id: $
+// $Id: buttonset.js 241 2008-12-10 15:11:05Z pagameba $
 /**
  * Class: Jx.ButtonSet
  * A ButtonSet manages a set of <Jx.Button> instances by ensuring that only one
- * of the buttons is active.
+ * of the buttons is active.  All the buttons need to have been created with
+ * the toggle option set to true for this to work.
  *
  * Example:
  * (code)
@@ -7730,16 +7889,17 @@
  * Events:
  * change - the current button has changed
  *
- * Implements:
- * Events - MooTools Class.Extras
- * Options - MooTools Class.Extras
- *
  * License: 
  * Copyright (c) 2008, DM Solutions Group Inc.
  * 
  * This file is licensed under an MIT style license
  */
 Jx.ButtonSet = new Class({
+    /**
+     * Implements:
+     * * Events
+     * * Options
+     */
     Implements: [Options,Events],
     /**
      * Property: buttons
@@ -7838,7 +7998,7 @@
 
 
 
-// $Id: grid.js 1116 2008-09-24 16:29:47Z pspencer $
+// $Id: grid.js 241 2008-12-10 15:11:05Z pagameba $
 /**
  * Class: Jx.Grid
  * A tabular control that has fixed scrolling headers on the rows and columns
@@ -7856,82 +8016,7 @@
  * Jx.Grid renders data that comes from an external source.  This external 
  * source, called the model, must implement the following interface.
  *
- * Jx.Grid Model Interface:
  *
- * addGridListener(l) - mandatory
- * mandatory.  This function accepts one argument, l, which is the listener
- * to add.  The model can then call the gridChanged() method on the grid
- * listener object when something in the model changes.
- * 
- * removeGridListener(l) - mandatory
- * mandatory.  This function accepts one argument, l, which is the listener
- * to remove.  The listener should have been previously added using
- * addGridListener.
- * 
- * getColumnCount() - mandatory
- * mandatory.  This function returns the number of columns of data in the 
- * model as an integer value.
- * 
- * getColumnHeaderHTML(column) - mandatory
- * mandatory. This function returns an HTML string to be placed in the
- * column header for the given column index.
- * 
- * getColumnHeaderHeight() - mandatory
- * mandatory.  This function returns an integer which is the height of the
- * column header row in pixels.
- * 
- * getColumnWidth(column) - mandatory
- * mandatory.  This function returns an integer which is the width of the
- * given column in pixels.
- * 
- * getRowHeaderHTML(row) - mandatory
- * mandatory.  This function returns an HTML string to be placed in the row
- * header for the given row index
- * 
- * getRowHeaderWidth() - mandatory
- * mandatory.  This function returns an integer which is the width of the row
- * header column in pixels.
- * 
- * getRowHeight(row) - mandatory
- * mandatory.  This function returns an integer which is the height of the
- * given row in pixels.
- * 
- * getRowCount() - mandatory
- * mandatory.  This function returns the number of rows of data in the model
- * as an integer value.
- * 
- * getValueAt(row, column) - mandatory
- * mandatory.  This function returns an HTML string which is the text to place
- * in the cell at the given row and column.
- * 
- * isCellEditable(row, column) - mandatory
- * mandatory.  This function returns a boolean value to indicate if a given
- * cell is editable by the user.
- *
- * *Optional Functions*
- *  
- * setColumnWidth(column, width) - optional
- * optional.  This function is called with a column index and width in pixels
- * when a column is resized.  This function is only required if the grid
- * allows resizeable columns.
- * 
- * setValueAt(row, column, value) - optional
- * optional.  This function is called with the row and column of a cell and a
- * new value for the cell.  It is mandatory to provide this function if any of
- * the cells in the model are editable.
- * 
- * rowSelected(row) - optional
- * optional.  This function is called by the grid to indicate that the user
- * has selected a row by clicking on the row header.
- * 
- * columnSelected(column) - optional
- * optional.  This function is called by the grid to indicate that the user
- * has selected a column by clicking on the column header.
- * 
- * cellSelected(row, column) - optional
- * optional.  This function is called by the grid to indicate that the user
- * has selected a cell by clicking on the cell in the grid.
- *
  * Example:
  * (code)
  * (end)
@@ -8103,15 +8188,11 @@
      * model - {Object} the model to use for this grid
      */
     setModel: function(model) {
-        if (this.model) {
-            this.model.removeGridListener(this);
-        }
         this.model = model;
         if (this.model) {
             if (this.domObj.resize) {
                 this.domObj.resize();
             }
-            this.model.addGridListener(this);
             this.createGrid();
             this.resize();
         } else {
@@ -8766,7 +8847,134 @@
         }
         return {row:row,column:col};
     }
-});// $Id: layout.js 1154 2008-09-25 18:56:07Z pspencer $
+});/**
+ * Class: Jx.Grid.Model
+ * A Jx.Grid.Model is the source of data for a <Jx.Grid> instance.  The
+ * default implementation of the grid model works with two-dimensional
+ * arrays of data and acts as a convenient base class for custom models
+ * based on other sources of data.
+ *
+ * License: 
+ * Copyright (c) 2008, DM Solutions Group Inc.
+ * 
+ * This file is licensed under an MIT style license
+ */
+/** 
+ * Method: getColumnCount
+ * This function returns the number of columns of data in the 
+ * model as an integer value.
+ * 
+ * Method: getColumnHeaderHTML
+ * This function returns an HTML string to be placed in the
+ * column header for the given column index.
+ * 
+ * Method: getColumnHeaderHeight
+ * This function returns an integer which is the height of the
+ * column header row in pixels.
+ * 
+ * Method: getColumnWidth
+ * This function returns an integer which is the width of the
+ * given column in pixels.
+ * 
+ * Method: getRowHeaderHTML
+ * This function returns an HTML string to be placed in the row
+ * header for the given row index
+ * 
+ * Method: getRowHeaderWidth
+ * This function returns an integer which is the width of the row
+ * header column in pixels.
+ * 
+ * Method: getRowHeight
+ * This function returns an integer which is the height of the
+ * given row in pixels.
+ * 
+ * Method: getRowCount
+ * This function returns the number of rows of data in the model
+ * as an integer value.
+ * 
+ * Method: getValueAt
+ * This function returns an HTML string which is the text to place
+ * in the cell at the given row and column.
+ * 
+ * Method: isCellEditable
+ * This function returns a boolean value to indicate if a given
+ * cell is editable by the user.
+ *
+ * Method: setColumnWidth
+ * This function is called with a column index and width in pixels
+ * when a column is resized.  This function is only required if the grid
+ * allows resizeable columns.
+ * 
+ * Method: setValueAt
+ * This function is called with the row and column of a cell and a
+ * new value for the cell.  It is mandatory to provide this function if any of
+ * the cells in the model are editable.
+ * 
+ * Method: rowSelected
+ * This function is called by the grid to indicate that the user
+ * has selected a row by clicking on the row header.
+ * 
+ * Method: columnSelected
+ * This function is called by the grid to indicate that the user
+ * has selected a column by clicking on the column header.
+ * 
+ * Method: cellSelected
+ * This function is called by the grid to indicate that the user
+ * has selected a cell by clicking on the cell in the grid.
+ */
+Jx.Grid.Model = new Class({
+    Implements: [Events, Options],
+    options: {
+        colHeaderHeight: 28,
+        rowHeaderWidth: 28,
+        colWidth: 50,
+        rowHeight: 20,
+        rowHeaders: null,
+        columnHeaders: null
+    },
+    data: null,
+    initialize: function(data, options) {
+        this.data = data || [];
+        this.setOptions(options);
+    },
+    getColumnCount: function() { return (this.data && this.data[0]) ? this.data[0].length : 0; },
+    getColumnHeaderHTML: function(col) { 
+        return this.options.columnHeaders?this.options.columnHeaders[col]:col+1;
+     },
+    getColumnHeaderHeight: function() { return this.options.colHeaderHeight; },
+    getColumnWidth: function(col) { return this.options.colWidth; },
+    getRowHeaderHTML: function(row) { 
+        return this.options.rowHeaders?this.options.rowHeaders[row]:row+1; 
+    },
+    getRowHeaderWidth: function() { return this.options.rowHeaderWidth; },
+    getRowHeight: function(row) { return this.options.rowHeight; },
+    getRowCount: function() { return this.data.length },
+    getValueAt: function(row, col) { return (this.data && $chk(this.data[row])) ? this.data[row][col] : ''; },
+    isCellEditable: function() { return false },
+    setValueAt: function(row, col, value) {},
+    rowSelected: function(grid, row) {
+        if (this.selectedRow != null) {
+            grid.selectRow(this.selectedRow, false);
+        }
+        this.selectedRow = row;
+        grid.selectRow(row, true);
+        this.fireEvent('select-row', row);
+    },
+    columnSelected: function(grid, col) {
+        if (this.selectedCol != null) {
+            grid.selectColumn(this.selectedCol, false);
+        }
+        this.selectedCol = col;
+        grid.selectColumn(col, true);
+        this.fireEvent('select-column', col);
+    },
+    cellSelected: function(grid, row,col) { 
+        grid.selectCell(row, col);
+        this.fireEvent('select-cell', [row, col]);
+    
+    }
+});
+// $Id: layout.js 241 2008-12-10 15:11:05Z pagameba $
 /**
  * Class: Jx.Layout
  * Jx.Layout is used to provide more flexible layout options for applications
@@ -8786,10 +8994,6 @@
  * Events:
  * sizeChange - fired when the size of the container changes
  *
- * Implements:
- * Options - MooTools Class.Extras
- * Events - MooTools Class.Extras
- *
  * License: 
  * Copyright (c) 2008, DM Solutions Group Inc.
  * 
@@ -8797,6 +9001,11 @@
  */
  
 Jx.Layout = new Class({
+    /** 
+     * Implements:
+     * * Options
+     * * Events
+     */
     Implements: [Options,Events],
     
     options: {
@@ -9159,14 +9368,14 @@
             var o = {forceResize: options ? options.forceResize : false};
             $A(this.domObj.childNodes).each(function(child){
                 if (child.resize && child.getStyle('display') != 'none') {
-                    child.resize.delay(0,child,o);
+                    child.resize.delay(0,child,o);                
                 }
             });
         }
 
         this.fireEvent('sizeChange',this);
     }
-});// $Id: menu.js 1094 2008-09-23 22:04:34Z pspencer $
+});// $Id: menu.js 244 2008-12-10 15:32:49Z pagameba $
 /**
  * Class: Jx.Menu
  * A main menu as opposed to a sub menu that lives inside the menu.
@@ -9185,6 +9394,14 @@
  * This file is licensed under an MIT style license
  */
 Jx.Menu = new Class({
+    /**
+     * Implements:
+     * * Options
+     * * Events
+     * * <Jx.AutoPosition>
+     * * <Jx.Chrome>
+     * * <Jx.Addable>
+     */
     Implements: [Options, Events, Jx.AutoPosition, Jx.Chrome, Jx.Addable],
     /**
      * Property: domObj
@@ -9219,7 +9436,6 @@
      */
     initialize : function(options) {
         this.setOptions(options);
-        /* */
         if (!Jx.Menu.Menus) {
             Jx.Menu.Menus = [];
         }
@@ -9234,7 +9450,7 @@
         this.subDomObj = new Element('ul',{
             'class':'jxMenu'
         });
-        this.subDomObj.store('jxMenu', this);
+        
         this.contentContainer.adopt(this.subDomObj);
         
         /* if options are passed, make a button inside an LI so the
@@ -9266,7 +9482,7 @@
      * can be added by passing multiple arguments to this function.
      */
     add : function() {
-        $A(arguments).each(function(item){
+        $A(arguments).flatten().each(function(item){
             this.items.push(item);
             item.setOwner(this);
             this.subDomObj.adopt(item.domObj);
@@ -9292,6 +9508,18 @@
         }
     },
     
+    /**
+     * Method: eventInMenu
+     * determine if an event happened inside this menu or a sub menu
+     * of this menu.
+     *
+     * Parameters:
+     * e - {Event} the mouse event
+     *
+     * Returns:
+     * {Boolean} true if the event happened in the menu or
+     * a sub menu of this menu, false otherwise
+     */
     eventInMenu: function(e) {
         var target = $(e.target);
         if (target.descendantOf(this.domObj) ||
@@ -9334,10 +9562,10 @@
         if (this.button && this.button.domA) {
             this.button.domA.removeClass('jx'+this.button.options.type+'Active');            
         }
-        this.items.each(function(item){item.hide.delay(0,item,e);});
+        this.items.each(function(item){item.hide(e);});
         document.removeEvent('mousedown', this.hideWatcher);
-        document.removeEvent('keyup', this.keypressWatcher);
-        this.contentContainer.dispose();
+        document.removeEvent('keydown', this.keypressWatcher);
+        this.contentContainer.setStyle('display','none');
         this.fireEvent('hide', this); 
     },
     /**
@@ -9349,15 +9577,21 @@
      */
     show : function(o) {
         var e = o.event;
-        if (Jx.Menu.Menus[0] && Jx.Menu.Menus[0] != this) {
-            Jx.Menu.Menus[0].hide(e);
-        }
-        if (this.items.length ==0) {
+        if (Jx.Menu.Menus[0]) {
+            if (Jx.Menu.Menus[0] != this) {
+                Jx.Menu.Menus[0].hide(e);
+            } else {
+                this.hide();
+                return;
+            }  
+        } 
+        if (this.items.length === 0) {
             return;
         }
         Jx.Menu.Menus[0] = this;
         
         this.contentContainer.setStyle('visibility','hidden');
+        this.contentContainer.setStyle('display','block');
         $(document.body).adopt(this.contentContainer);            
         /* we have to size the container for IE to render the chrome correctly
          * but just in the menu/sub menu case - there is some horrible peekaboo
@@ -9382,7 +9616,7 @@
         }
         /* fix bug in IE that closes the menu as it opens because of bubbling */
         document.addEvent('mousedown', this.hideWatcher);
-        document.addEvent('keyup', this.keypressWatcher);
+        document.addEvent('keydown', this.keypressWatcher);
         this.fireEvent('show', this); 
     },
     /**
@@ -9411,7 +9645,7 @@
     }
 });
 
-// $Id: menu.item.js 999 2008-09-19 17:31:11Z pspencer $
+// $Id: menu.item.js 242 2008-12-10 15:19:21Z pagameba $
 /**
  * Class: Jx.Menu.Item
  * A menu item is a single entry in a menu.  It is typically composed of
@@ -9428,17 +9662,16 @@
  * Events:
  * click - fired when the menu item is clicked.
  *
- * Implements:
- * Options - MooTools Class.Extras
- * Events - MooTools Class.Extras
- *
  * License: 
  * Copyright (c) 2008, DM Solutions Group Inc.
  * 
  * This file is licensed under an MIT style license
  */
 Jx.Menu.Item = new Class({
-    Implements: [Options, Events],
+    /**
+     * Extends: 
+     * <Jx.Button>
+     */
     Extends: Jx.Button,
     /**
      * Property: owner
@@ -9456,12 +9689,7 @@
      * Create a new instance of Jx.Menu.Item
      *
      * Parameters:
-     * options - {Object} an object containing options as below.
-     * 
-     * Options:
-     * enabled - {Boolean} whether the menu item starts enabled or not (default true)
-     *
-     * See <Jx.Button> for other options
+     * options - {Object} an object containing options for <Jx.Button::initialize>
      */
     initialize: function(options) {
         this.parent($merge(
@@ -9491,20 +9719,29 @@
      * Method: hide
      * Hide the menu item.
      */
-    hide: $empty,
+    hide: function() {this.blur();},
     /**
      * Method: show
      * Show the menu item
      */
     show: $empty,
-    clicked: function(o) {
+    /**
+     * Method: clicked
+     * Handle the user clicking on the menu item, overriding the <Jx.Button::clicked>
+     * method to facilitate menu tracking
+     *
+     * Parameters:
+     * obj - {Object} an object containing an event property that was the user
+     * event.
+     */
+    clicked: function(obj) {
         if (this.options.enabled) {
             if (this.options.toggle) {
                 this.setActive(!this.options.active);
             }
             this.fireEvent('click', this);
             if (this.owner && this.owner.deactivate) {
-                this.owner.deactivate(o.event);
+                this.owner.deactivate(obj.event);
             }
         }
     },
@@ -9523,7 +9760,7 @@
     }
 });
 
-// $Id: menu.separator.js 711 2008-08-13 20:38:33Z pspencer $
+// $Id: menu.separator.js 241 2008-12-10 15:11:05Z pagameba $
 /**
  * Class: Jx.Menu.Separator
  * A convenience class to create a visual separator in a menu.
@@ -9578,7 +9815,7 @@
      * Show the menu item
      */
     show: $empty
-});// $Id: menu.submenu.js 1093 2008-09-23 20:44:15Z pspencer $
+});// $Id: menu.submenu.js 244 2008-12-10 15:32:49Z pagameba $
 /**
  * Class: Jx.Menu.SubMenu
  * A sub menu contains menu items within a main menu or another
@@ -9591,20 +9828,24 @@
  * (code)
  * (end)
  *
- * Extends:
- * <Jx.Menu.Item>
- *
- * Implements:
- * Options - MooTools Class.Extra
- * Events - MooTools Class.Extra
- *
  * License: 
  * Copyright (c) 2008, DM Solutions Group Inc.
  * 
  * This file is licensed under an MIT style license
  */
 Jx.Menu.SubMenu = new Class({
+    /**
+     * Extends:
+     * <Jx.Menu.Item>
+     */
     Extends: Jx.Menu.Item,
+    /**
+     * Implements:
+     * * Options
+     * * Events
+     * * <Jx.AutoPosition>
+     * * <Jx.Chrome>
+     */
     Implements: [Options, Events, Jx.AutoPosition, Jx.Chrome],
     /**
      * Property: subDomObj
@@ -9646,7 +9887,6 @@
         this.subDomObj = new Element('ul', {
             'class':'jxSubMenu'
         });
-        this.subDomObj.store('jxSubMenu', this);
         this.contentContainer.adopt(this.subDomObj);
     },
     /**
@@ -9669,6 +9909,7 @@
         }
         
         this.contentContainer.setStyle('visibility','hidden');
+        this.contentContainer.setStyle('display','block');
         $(document.body).adopt(this.contentContainer);            
         /* we have to size the container for IE to render the chrome correctly
          * but just in the menu/sub menu case - there is some horrible peekaboo
@@ -9709,8 +9950,8 @@
             return;
         }
         this.open = false;
-        this.items.each(function(item){item.hide.delay(0,item);});
-        this.contentContainer.dispose();
+        this.items.each(function(item){item.hide();});
+        this.contentContainer.setStyle('display','none');
         this.visibleItem = null;
     },
     /**
@@ -9825,7 +10066,7 @@
             this.visibleItem.show();
         }
     }
-});// $Id: menu.context.js 933 2008-09-16 15:29:20Z pspencer $
+});// $Id: menu.context.js 241 2008-12-10 15:11:05Z pagameba $
 /**
  * Class: Jx.Menu.Context
  * A <Jx.Menu> that has no button but can be opened at a specific 
@@ -9838,15 +10079,15 @@
  * Events:
  * TODO - add open/close events?
  *
- * Extends:
- * <Jx.Menu>
- *
  * License: 
  * Copyright (c) 2008, DM Solutions Group Inc.
  * 
  * This file is licensed under an MIT style license
  */
 Jx.Menu.Context = new Class({
+    /** Extends:
+     * <Jx.Menu>
+     */
     Extends: Jx.Menu,
     /**
      * Constructor: Jx.ContextMenu
@@ -9898,7 +10139,7 @@
 
         e.stop();
     }    
-});// $Id: panel.js 1154 2008-09-25 18:56:07Z pspencer $
+});// $Id: panel.js 241 2008-12-10 15:11:05Z pagameba $
 /**
  * Class: Jx.Panel
  * A panel is a fundamental container object that has a content
@@ -9916,17 +10157,18 @@
  * collapse - fired when the panel is collapsed
  * expand - fired when the panel is opened
  *
- * Implements:
- * * <Jx.ContentLoader>
- * * Options
- * * Events
- *
  * License: 
  * Copyright (c) 2008, DM Solutions Group Inc.
  * 
  * This file is licensed under an MIT style license
  */
 Jx.Panel = new Class({
+    /**
+     * Implements:
+     * * <Jx.ContentLoader>
+     * * Options
+     * * Events
+     */
     Implements: [Options, Events, Jx.ContentLoader, Jx.Addable],
     
     toolbarContainers: {
@@ -9983,9 +10225,6 @@
      *     controlled object).  If you specify a height then the panel will
      *     occupy only that much space vertically and will fill the 
      *     container's width (using the relative option in <Jx.Layout>).
-     *
-     * Inherits From:
-     * <Jx.UniqueId>, <Jx.ContentLoader>
      */
     initialize : function(options){
         this.toolbars = options ? options.toolbars || [] : [];
@@ -10165,6 +10404,13 @@
         }
     },
     
+    /**
+     * Method: layoutContent
+     * the sizeChange event of the <Jx.Layout> that manages the outer container
+     * is intercepted and passed through this method to handle resizing of the
+     * panel contents because we need to do some calculations if the panel
+     * is collapsed and if there are toolbars to put around the content area.
+     */
     layoutContent: function() {
         var titleHeight = 0;
         var top = 0;
@@ -10400,7 +10646,7 @@
         this.fireEvent('close', this);
     }
     
-});// $Id: dialog.js 1154 2008-09-25 18:56:07Z pspencer $
+});// $Id: dialog.js 232 2008-12-02 12:42:14Z pagameba $
 /**
  * Class: Jx.Dialog
  * A Jx.Dialog implements a floating dialog.  Dialogs represent a useful way
@@ -10431,19 +10677,22 @@
  * change - triggered when the value of an input in the dialog is changed
  * resize - triggered when the dialog is resized
  *
- * Extends:
- * <Jx.Panel>
- *
- * Implements:
- * <Jx.AutoPosition>
- *
  * License: 
  * Copyright (c) 2008, DM Solutions Group Inc.
  * 
  * This file is licensed under an MIT style license
  */
 Jx.Dialog = new Class({
+    /**
+     * Extends:
+     * <Jx.Panel>
+     */
     Extends: Jx.Panel,
+    /**
+     * Implements:
+     * - <Jx.AutoPosition>
+     * - <Jx.Chrome>
+     */
     Implements: [Jx.AutoPosition, Jx.Chrome],
     
     /**
@@ -10506,14 +10755,6 @@
      *    moveable by the user or not.  Default is true.
      */
     initialize: function(options) {
-        /* initialize class-wide singleton that holds the current z-order
-         * of all dialogs
-         */
-        if (!Jx.Dialog.Stack) {
-            Jx.Dialog.Stack = [];
-            Jx.Dialog.ZIndex = [];
-        }
-        
         this.isOpening = false;
         this.firstShow = true;
         
@@ -10545,9 +10786,16 @@
                     zIndex: -1
                 }
             });
-        
+            this.blanket.resize = (function() {
+                var ss = $(document.body).getScrollSize();
+                this.setStyles({
+                    width: ss.x,
+                    height: ss.y
+                });
+            }).bind(this.blanket);
             this.options.parent.adopt(this.blanket);
-            (new Jx.Layout(this.blanket)).resize();
+            window.addEvent('resize', this.blanket.resize);
+            
         }
 
         this.domObj.setStyle('display','none');
@@ -10559,11 +10807,7 @@
             new Drag(this.domObj, {
                 handle: this.title,
                 onBeforeStart: (function(){
-                    Jx.Dialog.Stack.erase(this).push(this);
-                    var baseZIndex = Jx.Dialog.Stack[0].domObj.style.zIndex;
-                    Jx.Dialog.Stack.each(function(d, i) {
-                        d.domObj.setStyle('zIndex',baseZIndex+i);
-                    });
+                    Jx.Dialog.orderDialogs(this);
                 }).bind(this),
                 onStart: (function() {
                     this.contentContainer.setStyle('visibility','hidden');
@@ -10572,13 +10816,13 @@
                 onComplete: (function() {
                     this.chrome.removeClass('jxChromeDrag');
                     this.contentContainer.setStyle('visibility','');
-                    var left = Math.max(this.chromeOffsets.left, parseInt(this.domObj.style.left));
-                    var top = Math.max(this.chromeOffsets.top, parseInt(this.domObj.style.top));
+                    var left = Math.max(this.chromeOffsets.left, parseInt(this.domObj.style.left,10));
+                    var top = Math.max(this.chromeOffsets.top, parseInt(this.domObj.style.top,10));
                     this.options.horizontal = left + ' left';
                     this.options.vertical = top + ' top';
                     this.position(this.domObj, this.options.parent, this.options);
-                    this.options.left = parseInt(this.domObj.style.left);
-                    this.options.top = parseInt(this.domObj.style.top);
+                    this.options.left = parseInt(this.domObj.style.left,10);
+                    this.options.top = parseInt(this.domObj.style.top,10);
                     if (!this.options.closed) {
                         this.domObj.resize(this.options);                        
                     }
@@ -10624,19 +10868,15 @@
                 }).bind(this)
             });
         }
-        /* this adjusts the z-index of the dialogs when activated */
+        /* this adjusts the zIndex of the dialogs when activated */
         this.domObj.addEvent('mousedown', (function(){
-            Jx.Dialog.Stack.erase(this).push(this);
-            var baseZIndex = Jx.Dialog.Stack[0].domObj.style.zIndex;
-            Jx.Dialog.Stack.each(function(d, i) {
-                d.domObj.setStyle('zIndex',baseZIndex+i);
-            });
+            Jx.Dialog.orderDialogs(this);
         }).bind(this));
     },
     
     /**
      * Method: sizeChanged
-     * overload panel
+     * overload panel's sizeChanged method
      */
     sizeChanged: function() {
         if (!this.options.closed) {
@@ -10703,28 +10943,30 @@
 
     /**
      * Method: show
-     * show the dialog
+     * show the dialog, external code should use the <Jx.Dialog::open> method
+     * to make the dialog visible.
      */
     show : function( ) {
-        /* get the z-index right */
-        Jx.Dialog.Stack.push(this);
-        if (Jx.Dialog.ZIndex.length == 0) {
-            Jx.Dialog.ZIndex[0] = this.domObj.getStyle('z-index');
+        /* prepare the dialog for display */
+        this.domObj.setStyles({
+            'display': 'block',
+            'visibility': 'hidden'
+        });
+        
+        if (this.blanket) {
+            this.blanket.resize();            
         }
+
+        Jx.Dialog.orderDialogs(this);
+        
         /* do the modal thing */
-        if (this.options.modal) {
+        if (this.blanket) {
             this.blanket.setStyles({
-                zIndex: Jx.Dialog.ZIndex[0]++,
                 visibility: 'visible',
                 display: 'block'
             });
         }
-        /* display the dialog */
-        this.domObj.setStyles({
-            'display': 'block',
-            'visibility': 'hidden',
-            'z-index': Jx.Dialog.ZIndex[0]++
-        });
+        
         if (this.options.closed) {
             var margin = this.domObj.getMarginSize();
             var size = this.title.getMarginBoxSize();
@@ -10753,15 +10995,16 @@
     },
     /**
      * Method: hide
-     * hide the dialog
+     * hide the dialog, external code should use the <Jx.Dialog::close>
+     * method to hide the dialog.
      */
     hide : function() {
         Jx.Dialog.Stack.erase(this);
-        Jx.Dialog.ZIndex[0]--;
+        Jx.Dialog.ZIndex--;
         this.domObj.setStyle('display','none');
-        if (this.options.modal) {
+        if (this.blanket) {
             this.blanket.setStyle('visibility', 'hidden');
-            Jx.Dialog.ZIndex[0]--;
+            Jx.Dialog.ZIndex--;
         }
         
     },
@@ -10805,7 +11048,24 @@
         }
     }
 });
-// $Id: panelset.js 1113 2008-09-24 16:00:54Z pspencer $
+
+Jx.Dialog.Stack = [];
+Jx.Dialog.BaseZIndex = null;
+Jx.Dialog.orderDialogs = function(d) {
+    Jx.Dialog.Stack.erase(d).push(d);
+    if (Jx.Dialog.BaseZIndex === null) {
+        Jx.Dialog.BaseZIndex = Math.max(Jx.Dialog.Stack[0].domObj.getStyle('zIndex').toInt(), 1);
+    }
+    Jx.Dialog.Stack.each(function(d, i) {
+        var z = Jx.Dialog.BaseZIndex+i;
+        if (d.blanket) {
+            d.blanket.setStyle('zIndex',z);
+        }
+        d.domObj.setStyle('zIndex',z);
+    });
+    
+};
+// $Id: panelset.js 241 2008-12-10 15:11:05Z pagameba $
 /**
  * Class: Jx.PanelSet
  *
@@ -10836,6 +11096,12 @@
  * This file is licensed under an MIT style license
  */
 Jx.PanelSet = new Class({
+    /**
+     * Implements:
+     * * Options
+     * * Events
+     * * <Jx.Addable>
+     */
     Implements: [Options, Events, Jx.Addable],
     
     options: {
@@ -10915,6 +11181,7 @@
             }).bind(this)
         });
         this.addEvent('addTo', function() {
+            $(this.domObj.parentNode).setStyle('overflow', 'hidden');
             this.domObj.resize();
         });
         if (this.options.parent) {
@@ -11028,41 +11295,48 @@
         }
         panel.domObj.resize({top: top, height:panelSize, bottom: null});
     }
-});// $Id: button.combo.js 1013 2008-09-19 19:11:46Z pspencer $
+});// $Id: button.combo.js 241 2008-12-10 15:11:05Z pagameba $
 /**
  * Class: Jx.Button.Combo
- * A drop down list of selectable items that can be any HTML.
+ * A drop down list of selectable items.  Items can be either a string, an image or both.
  *
  * Example:
  * (code)
+ * new Jx.Button.Combo({
+ *     label: 'Choose a symbol',
+ *     items: [
+ *         {label: 'Star', image: 'images/swatches.png', imageClass: 'comboStar'},
+ *         {label: 'Square', image: 'images/swatches.png', imageClass: 'comboSquare'},
+ *         {label: 'Triangle', image: 'images/swatches.png', imageClass: 'comboTriangle'},
+ *         {label: 'Circle', image: 'images/swatches.png', imageClass: 'comboCircle'},
+ *         {label: 'Plus', image: 'images/swatches.png', imageClass: 'comboPlus'},
+ *         {label: 'Cross', image: 'images/swatches.png', imageClass: 'comboCross'}
+ *     ],
+ *     onChange: function(combo) { alert('you selected ' + combo.getValue()) }
+ * })
  * (end)
  *
  * Events:
- * change - the main item has changed
+ * change - triggered when the user selects a new item from the list
  *
- * Implements:
- * * Options
- * * Events
- * * <Jx.AutoPosition>
- *
  * License: 
  * Copyright (c) 2008, DM Solutions Group Inc.
  * 
  * This file is licensed under an MIT style license
  */
 Jx.Button.Combo = new Class({
+    /**
+     * Extends:
+     * <Jx.Button.Multi>
+     */
     Extends: Jx.Button.Multi,
-    Implements: [Options,Events,Jx.AutoPosition, Jx.Chrome],
-    /** 
-     * Property: domObj
-     * {HTMLElement} the div that contains the control, 
-     * used to show/hide the control 
+    /**
+     * Implements:
+     * * <Jx.AutoPosition>
+     * * <Jx.Chrome>
      */
+    Implements: [Jx.AutoPosition, Jx.Chrome],
     domObj : null,
-    /** 
-     * Property: ul
-     * {HTMLElement} the ul that contains the selectable items 
-     */
     ul : null,
     /**
      * Property: currentSelection
@@ -11171,9 +11445,12 @@
         }
     },
     
-    
+    /**
+     * Method: valueChanged
+     * invoked when the current value is changed
+     */
     valueChanged: function() {
-        
+        //TODO: should we do anything here?
     },
     
     /**
@@ -11197,7 +11474,7 @@
      * Parameters:
      * options - {Object} object with properties suitable to be passed to
      * a {Jx.Menu.Item} object.  More than one options object can be passed,
-     * comma separated.
+     * comma separated or in an array.
      */
     add: function() {
         $A(arguments).flatten().each(function(opt) {
@@ -11252,7 +11529,7 @@
         }
         return value;
     }
-});// $Id: splitter.js 1130 2008-09-24 19:12:35Z pspencer $
+});// $Id: splitter.js 241 2008-12-10 15:11:05Z pagameba $
 /**
  * Class: Jx.Splitter
  * a Jx.Splitter creates two or more containers within a parent container
@@ -11274,6 +11551,10 @@
  */
  
 Jx.Splitter = new Class({
+    /**
+     * Implements:
+     * * Options
+     */
     Implements: [Options],
     /**
      * Property: domObj
@@ -11933,7 +12214,7 @@
              }
          }
     }
-});// $Id: splitter.snap.js 1130 2008-09-24 19:12:35Z pspencer $
+});// $Id: splitter.snap.js 241 2008-12-10 15:11:05Z pagameba $
 /**
  * Class: Jx.Splitter.Snap
  * A helper class to create an element that can snap a split panel open or
@@ -12053,7 +12334,7 @@
             }
         }
     }
-});// $Id: tabset.js 1154 2008-09-25 18:56:07Z pspencer $
+});// $Id: tabset.js 241 2008-12-10 15:11:05Z pagameba $
 /**
  * Class: Jx.TabSet
  * A TabSet manages a set of <Jx.Button.Tab> content areas by ensuring that only one
@@ -12120,7 +12401,7 @@
         if (!this.domObj.hasClass('jxTabSetContainer')) {
             this.domObj.addClass('jxTabSetContainer');
         }
-        this.selectionChangedFn = this.selectionChanged.bind(this);
+        this.setActiveTabFn = this.setActiveTab.bind(this);
     },
     /**
      * Method: resizeTabBox
@@ -12144,7 +12425,7 @@
     add: function() {
         $A(arguments).each(function(tab) {
             if (tab instanceof Jx.Button.Tab) {
-                tab.addEvent('down',this.selectionChangedFn);
+                tab.addEvent('down',this.setActiveTabFn);
                 tab.tabSet = this;
                 this.domObj.appendChild(tab.content);
                 this.tabs.push(tab);
@@ -12172,7 +12453,7 @@
                     this.tabs[0].setActive(true);
                 }
             }
-            tab.removeEvent('down',this.selectionChangedFn);
+            tab.removeEvent('down',this.setActiveTabFn);
             tab.content.dispose();
         }
     },
@@ -12191,24 +12472,13 @@
         if (this.activeTab.content.resize) {
           this.activeTab.content.resize({forceResize: true});
         }
-    },
-    /**
-     * Method: selectionChanged
-     * Handle selection changing on the tabs themselves and activate the
-     * appropriate tab in response.
-     *
-     * Parameters:
-     * tab - {<Jx.Button.Tab>} the tab to make active.
-     */
-    selectionChanged: function(tab) {
-        this.setActiveTab(tab);
-        this.fireEvent('tabChange', this, tab);
+        this.fireEvent('tabChange', [this, tab]);
     }
 });
 
 
 
-// $Id: tabbox.js 1154 2008-09-25 18:56:07Z pspencer $
+// $Id: tabbox.js 241 2008-12-10 15:11:05Z pagameba $
 /**
  * Class: Jx.TabBox
  * A convenience class to handle the common case of a single toolbar
@@ -12233,6 +12503,12 @@
  * This file is licensed under an MIT style license
  */
 Jx.TabBox = new Class({
+    /**
+     * Implements:
+     * * Options
+     * * Events
+     * * <Jx.Addable>
+     */
     Implements: [Options, Events, Jx.Addable],
     options: {
         parent: null,
@@ -12253,6 +12529,7 @@
     tabSet: null,
     /**
      * Constructor: Jx.TabBox
+     * Create a new instance of a TabBox.
      */
     initialize : function(options) {
         this.setOptions(options);
@@ -12268,6 +12545,9 @@
         });
         this.panel.domObj.addClass('jxTabBox');
         this.tabSet = new Jx.TabSet(this.panel.content);
+        this.tabSet.addEvent('tabChange', function(tabSet, tab) {
+            this.showItem(tab);
+        }.bind(this.tabBar));
         this.domObj = this.panel.domObj;
         /* when the panel changes size, the tab set needs to update 
          * the content areas.
@@ -12307,10 +12587,12 @@
         this.tabBar.add.apply(this.tabBar, arguments); 
         this.tabSet.add.apply(this.tabSet, arguments);
         $A(arguments).flatten().each(function(tab){
-            tab.addEvent('close', (function(){
-                this.tabBar.remove(tab);
-                this.tabSet.remove(tab);
-            }).bind(this));
+            tab.addEvents({
+                close: (function(){
+                    this.tabBar.remove(tab);
+                    this.tabSet.remove(tab);
+                }).bind(this)
+            });
         }, this);
         return this;
     },
@@ -12326,7 +12608,7 @@
         this.tabSet.remove(tab);
     }
 });
-// $Id: button.tab.js 1105 2008-09-24 14:37:57Z pspencer $
+// $Id: button.tab.js 241 2008-12-10 15:11:05Z pagameba $
 /**
  * Class: Jx.Button.Tab
  * A single tab in a tab set.  A tab has a label (displayed in the tab) and a
@@ -12359,13 +12641,7 @@
  * });
  * (end)
  *
- * Extends:
- * <Jx.Button>
  * 
- * Implements:
- * Options - MooTools Class.Extras
- * Events - MooTools Class.Extras
- * <Jx.ContentLoader> - for loading content into a tab
  *
  * License: 
  * Copyright (c) 2008, DM Solutions Group Inc.
@@ -12373,16 +12649,25 @@
  * This file is licensed under an MIT style license
  */
 Jx.Button.Tab = new Class({
+    /**
+     * Extends:
+     * <Jx.Button>
+     */
     Extends: Jx.Button,
-    Implements: [Options, Events, Jx.ContentLoader],
     /**
+     * Implements:
+     * * <Jx.ContentLoader>
+     */
+    Implements: [Jx.ContentLoader],
+    /**
      * Property: content
      * {HTMLElement} The content area that is displayed when the tab is active.
      */
     content: null,
     /**
      * Constructor: Jx.Button.Tab
-     * Create a new instance of Jx.Button.Tab.
+     * Create a new instance of Jx.Button.Tab.  Any layout options passed are used
+     * to create a <Jx.Layout> for the tab content area.
      *
      * Parameters:
      * options - {Object} an object containing options that are used
@@ -12429,7 +12714,7 @@
             this.setActive(true);            
         }
     }
-});// $Id: toolbar.js 1103 2008-09-24 14:14:23Z pspencer $
+});// $Id: toolbar.js 241 2008-12-10 15:11:05Z pagameba $
 /**
  * Class: Jx.Toolbar
  * A toolbar is a container object that contains other objects such as
@@ -12653,9 +12938,12 @@
         if (this.isActive()) {
             this.visibleItem.show();
         }
+    },
+    showItem: function(item) {
+        this.fireEvent('show', item);
     }
 });
-// $Id: toolbar.item.js 711 2008-08-13 20:38:33Z pspencer $
+// $Id: toolbar.item.js 241 2008-12-10 15:11:05Z pagameba $
 /**
  * Class: Jx.Toolbar.Item
  * A helper class to provide a container for something to go into 
@@ -12701,7 +12989,7 @@
             }
         }
     }
-});// $Id: toolbar.separator.js 711 2008-08-13 20:38:33Z pspencer $
+});// $Id: toolbar.separator.js 241 2008-12-10 15:11:05Z pagameba $
 /**
  * Class: Jx.Toolbar.Separator
  * A helper class that represents a visual separator in a <Jx.Toolbar>
@@ -12731,7 +13019,7 @@
         this.domObj.appendChild(this.domSpan);
     }
 });
-// $Id: $
+// $Id: toolbar.container.js 241 2008-12-10 15:11:05Z pagameba $
 /**
  * Class: Jx.Toolbar.Container
  * A toolbar container contains toolbars.  A single toolbar container fills the
@@ -12807,11 +13095,12 @@
             // make sure we update our size when we get added to the DOM
             this.addEvent('addTo', this.update.bind(this));
             
-            var scrollFx = new Fx.Tween(this.scroller);
+            this.scrollFx = scrollFx = new Fx.Tween(this.scroller, {
+                link: 'chain'
+            });
             this.scrollLeft = new Jx.Button({
                 image: Jx.aPixel.src
             }).addTo(this.domObj);
-
             this.scrollLeft.domObj.addClass('jxBarScrollLeft');
             this.scrollLeft.addEvents({
                click: (function(){
@@ -12819,13 +13108,13 @@
                    if (isNaN(from)) { from = 0; }
                    var to = Math.min(from+100, 0);
                    if (to >= 0) {
-                       this.scrollLeft.domObj.setStyle('display', 'none');
+                       this.scrollLeft.domObj.setStyle('visibility', 'hidden');
                    }
-                   this.scrollRight.domObj.setStyle('display', 'block');
-                   scrollFx.start('left', from, to);
+                   this.scrollRight.domObj.setStyle('visibility', '');
+                   this.scrollFx.start('left', from, to);
                }).bind(this)
             });
-    
+            
             this.scrollRight = new Jx.Button({
                 image: Jx.aPixel.src
             }).addTo(this.domObj);
@@ -12836,19 +13125,20 @@
                    if (isNaN(from)) { from = 0; }
                    var to = Math.max(from - 100, this.scrollWidth);
                    if (to == this.scrollWidth) {
-                       this.scrollRight.domObj.setStyle('display', 'none');
+                       this.scrollRight.domObj.setStyle('visibility', 'hidden');
                    }
-                   this.scrollLeft.domObj.setStyle('display', 'block');
-                   scrollFx.start('left', from, to);
+                   this.scrollLeft.domObj.setStyle('visibility', '');
+                   this.scrollFx.start('left', from, to);
                }).bind(this)
-            });            
+            });         
+            
         } else {
             this.options.scroll = false;
         }
 
         if (this.options.toolbars) {
             this.add(this.options.toolbars);
-        } 
+        }
     },
     
     update: function() {
@@ -12873,6 +13163,11 @@
     },
     
     measure: function() {
+        
+        if ((!this.scrollLeftSize || !this.scrollLeftSize.x) && this.domObj.parentNode) {
+            this.scrollLeftSize = this.scrollLeft.domObj.getSize();
+            this.scrollRightSize = this.scrollRight.domObj.getSize();
+        }
         /* decide if we need to show the scroller buttons and
          * do some calculations that will make it faster
          */
@@ -12881,20 +13176,32 @@
             this.scrollWidth -= child.getSize().x;
         }, this);
         if (this.scrollWidth < 0) {
+            /* we need to show scrollers on at least one side */
             var l = this.scroller.getStyle('left').toInt();
             if (l < 0) {
-                this.scrollLeft.domObj.setStyle('display','block');
+                this.scrollLeft.domObj.setStyle('visibility','');
             } else {
-                this.scrollLeft.domObj.setStyle('display','none');
+                this.scrollLeft.domObj.setStyle('visibility','hidden');
             }
-            if (l == this.scrollWidth) {
-                this.scrollRight.domObj.setStyle('display', 'none');
+            if (l <= this.scrollWidth) {
+                this.scrollRight.domObj.setStyle('visibility', 'hidden');
+                if (l < this.scrollWidth) {
+                    this.scrollFx.start('left', l, this.scrollWidth);
+                }
             } else {
-                this.scrollRight.domObj.setStyle('display', 'block');                
+                this.scrollRight.domObj.setStyle('visibility', '');                
             }
+            
         } else {
-            this.scrollLeft.domObj.setStyle('display','none');
-            this.scrollRight.domObj.setStyle('display','none');
+            /* don't need any scrollers but we might need to scroll
+             * the toolbar into view
+             */
+            this.scrollLeft.domObj.setStyle('visibility','hidden');
+            this.scrollRight.domObj.setStyle('visibility','hidden');
+            var from = this.scroller.getStyle('left').toInt();
+            if (!isNaN(from) && from !== 0) {
+                this.scrollFx.start('left', 0);                
+            }
         }            
     },
     
@@ -12914,6 +13221,7 @@
                  */
                 thing.addEvent('add', this.update.bind(this));
                 thing.addEvent('remove', this.update.bind(this));                
+                thing.addEvent('show', this.scrollIntoView.bind(this));                
             }
             if (this.scroller) {
                 this.scroller.adopt(thing.domObj);
@@ -12944,9 +13252,55 @@
      */
     remove: function(item) {
         
+    },
+    /**
+     * Method: scrollIntoView
+     * scrolls an item in one of the toolbars into the currently visible
+     * area of the container if it is not already fully visible
+     *
+     * Parameters:
+     * item - the item to scroll.
+     */
+    scrollIntoView: function(item) {
+        var width = this.domObj.getSize().x;
+        var coords = item.domObj.getCoordinates(this.scroller);
+        var l = this.scroller.getStyle('left').toInt();
+        
+        var slSize = this.scrollLeftSize ? this.scrollLeftSize.x : 0;
+        var srSize = this.scrollRightSize ? this.scrollRightSize.x : 0;
+        
+        var left = l;
+        if (l < -coords.left + slSize) {
+            /* the left edge of the item is not visible */
+            left = -coords.left + slSize;
+            if (left >= 0) {
+                left = 0;
+            }
+        } else if (width - coords.right - srSize< l) {
+            /* the right edge of the item is not visible */
+            left =  width - coords.right - srSize;
+            if (left < this.scrollWidth) {
+                left = this.scrollWidth;
+            }
+        }
+                
+        if (left < 0) {
+            this.scrollLeft.domObj.setStyle('visibility','');                
+        } else {
+            this.scrollLeft.domObj.setStyle('visibility','hidden');
+        }
+        if (left <= this.scrollWidth) {
+            this.scrollRight.domObj.setStyle('visibility', 'hidden');
+        } else {
+            this.scrollRight.domObj.setStyle('visibility', '');                
+        }
+        
+        if (left != l) {
+            this.scrollFx.start('left', left);
+        }
     }
 });
-// $Id: treeitem.js 803 2008-09-02 18:02:13Z pspencer $
+// $Id: treeitem.js 239 2008-12-10 14:53:58Z pagameba $
 /**
  * Class: Jx.TreeItem 
  * An item in a tree.  An item is a leaf node that has no children.
@@ -13041,16 +13395,53 @@
         if (this.options.imageClass) {
             domImg.addClass(this.options.imageClass);
         }
+        // the clickable part of the button
+        var hasFocus;
+        var mouseDown;
+        
         var domA = new Element('a',{
             href:'javascript:void(0)',
-            html: this.options.label,
-            events: {
-                click: this.selected.bind(this),
-                dblclick: this.selected.bind(this),
-                contextmenu: this.showMenu.bind(this)
-            }
+            html: this.options.label
         });
+        domA.addEvents({
+            click: this.selected.bind(this),
+            dblclick: this.selected.bind(this),
+            contextmenu: this.showMenu.bind(this),
+            drag: function(e) {e.stop();},
+            mousedown: function(e) {
+                domA.addClass('jxTreeItemPressed');
+                hasFocus = true;
+                mouseDown = true;
+                domA.focus();
+            },
+            mouseup: function(e) {
+                domA.removeClass('jxTreeItemPressed');
+                mouseDown = false;
+            },
+            mouseleave: function(e) {
+                domA.removeClass('jxTreeItemPressed');
+            },
+            mouseenter: function(e) {
+                if (hasFocus && mouseDown) {
+                    domA.addClass('jxTreeItemPressed');
+                }
+            },
+            keydown: function(e) {
+                if (e.key == 'enter') {
+                    domA.addClass('jxTreeItemPressed');
+                }
+            },
+            keyup: function(e) {
+                if (e.key == 'enter') {
+                    domA.removeClass('jxTreeItemPressed');
+                }
+            },
+            blur: function() { hasFocus = false; }
+        });
         domA.appendChild(domImg);
+        new Drag(domA, {
+            onStart: function() {this.stop();}
+        });
         return domA;
     },
     /**
@@ -13123,7 +13514,6 @@
      */
     showMenu: function(e) {
         this.lastEvent = new Event(e);
-        //this.fireEvent('click',this);
         if (this.contextMenu) {
             this.contextMenu.show(this.lastEvent);
         }
@@ -13153,7 +13543,7 @@
             this.domObj.addClass('jxDisabled');
         }
     }
-});// $Id: treefolder.js 1093 2008-09-23 20:44:15Z pspencer $
+});// $Id: treefolder.js 240 2008-12-10 15:04:11Z pagameba $
 /**
  * Class: Jx.TreeFolder
  * A Jx.TreeFolder is an item in a tree that can contain other items.  It is
@@ -13487,7 +13877,7 @@
         }
         return null;
     }
-});// $Id: tree.js 1097 2008-09-23 22:40:51Z pspencer $
+});// $Id: tree.js 241 2008-12-10 15:11:05Z pagameba $
 /**
  * Class: Jx.Tree
  * Jx.Tree displays hierarchical data in a tree structure of folders and nodes.

Modified: trunk/templates/mapguide/standard/themes/crispin/ie6.css
===================================================================
--- trunk/templates/mapguide/standard/themes/crispin/ie6.css	2008-12-04 15:43:03 UTC (rev 1706)
+++ trunk/templates/mapguide/standard/themes/crispin/ie6.css	2008-12-10 20:34:08 UTC (rev 1707)
@@ -1,6 +1,6 @@
 /**
  * @project         Jx
- * @revision        $Id: button.css 1153 2008-09-25 16:18:42Z fwarnock $
+ * @revision        $Id: ie6.css 243 2008-12-10 15:21:19Z fred.warnock $
  * @author          Fred Warnock (fwarnock at dmsolutions.ca)
  * @copyright       (c) 2006 DM Solutions Group Inc.
  */
@@ -10,27 +10,169 @@
 /* ============= */
 
 /* 24 bit images do not appear correctly in IE versions below 7. Applying a 
-   filter through the class below will make them appear correctly.*/
+ * filter through the class below will make them appear correctly.
+ */
 .png24{filter:expression(Jx.applyPNGFilter(this))}
 
 /* Opacity needs to be set in IE6 and below using the following filters.
-   Please note that IE8 changed how filters are written. */
+ * Please note that IE8 changed how filters are written. 
+ */
 .jxChromeDrag {filter: Alpha(opacity=50);}
 .jxDialogModal {filter: Alpha(opacity=20);}
 .jxDisabled {filter:Alpha(opacity=40);}
 iframe.jxIframeShim {filter:Alpha(opacity:0);}
 
 /* List items do not render properly under several conditions.  
-   Applying a height to the LI forces it to render properly.
-   Content that is taller than the li simply forces the li to be taller */
+ * Applying a height to the LI forces it to render properly.
+ * Content that is taller than the li simply forces the li to be taller 
+ */
 .jxTree li,
 .jxTreeRoot li {
   height: 20px;
 }
 
+/* tree item focus style */
+.jxTree a:active,
+.jxTreeRoot a:active {
+  border-left: 1px dotted #75ADFF;
+  border-right: 1px dotted #75ADFF;
+  margin: 0px 0px 0px 14px;
+  background-position: left -72px;
+  outline: expression(hideFocus='true');
+}
+
+/* IE versions 7 and below do not recognize the focus pseudo-class, but instead
+ * use the active pseudo-class.  Other browsers use the active-pseudo-class
+ * while something is being pressed so IE specific definitions are needed. */
+/* focus button */
+ul.jxToolbar a.jxButton:active,
+a.jxButton:active {
+  background-position: left -96px;
+}
+
+a.jxButton:active span.jxButtonContent {
+  background-position: right -96px;
+}
+
+/* focus active button */
+ul.jxToolbar a.jxButtonActive:active,
+a.jxButtonActive:active {
+  background-position: left -144px;
+}
+
+a.jxButtonActive:active span.jxButtonContent {
+  background-position: right -144px;
+}
+
+/* clicking normal button */
+ul.jxToolbar a.jxButtonPressed:active,
+a.jxButtonPressed:active {
+  background-position: left -120px;
+}
+
+a.jxButtonPressed:active span.jxButtonContent {
+  background-position: right -120px;
+}
+
+a.jxButtonDisclose:active {
+  background-position: right -96px;
+}
+
+/* HORIZONTALTAB BAR - TOP and BOTTOM TABS */
+
+/* Focus tab */
+.jxBarTop a.jxTab:active,
+.jxBarBottom a.jxTab:active {
+  background-position: left -96px; 
+}
+
+.jxBarTop a.jxTab:active span.jxTabContent,
+.jxBarBottom a.jxTab:active span.jxTabContent {
+  background-position: right -96px; 
+}
+
+/* Focus Active tab */
+.jxBarTop a.jxTabActive:active,
+.jxBarBottom a.jxTabActive:active {
+  background-position: left -144px; 
+}
+
+.jxBarTop a.jxTabActive:active span.jxTabContent,
+.jxBarBottom a.jxTabActive:active span.jxTabContent {
+  background-position: right -144px; 
+}
+
+/* Click Focused Tab */
+.jxBarTop a.jxTabPressed:active,
+.jxBarBottom a.jxTabPressed:active {
+  background-position: left -120px; 
+}
+
+.jxBarTop a.jxTabPressed:active span.jxTabContent,
+.jxBarBottom a.jxTabPressed:active span.jxTabContent {
+  background-position: right -120px; 
+}
+
+/* VERTICAL TAB BAR - LEFT and RIGHT */
+
+/* Focus tab */
+.jxBarLeft a.jxTab:active,
+.jxBarRight a.jxTab:active {
+  background-position: -96px top; 
+}
+
+.jxBarLeft a.jxTab:active span.jxTabContent,
+.jxBarRight a.jxTab:active span.jxTabContent {
+  background-position: -96px bottom; 
+}
+
+/* Focus Active tab */
+.jxBarLeft a.jxTabActive:active,
+.jxBarRight a.jxTabActive:active {
+  background-position: -144px top; 
+}
+
+.jxBarLeft a.jxTabActive:active span.jxTabContent,
+.jxBarRight a.jxTabActive:active span.jxTabContent {
+  background-position: -144px bottom; 
+}
+
+/* Click Focused Tab */
+.jxBarLeft a.jxTabPressed:active,
+.jxBarRight a.jxTabPressed:active {
+  background-position: -120px top; 
+}
+
+.jxBarLeft a.jxTabPressed:active span.jxTabContent,
+.jxBarRight a.jxTabPressed:active span.jxTabContent {
+  background-position: -120px bottom; 
+}
+
+
+/* Menu Item focus style */
+a.jxMenuItem:active {
+  border: 1px dotted #75ADFF;
+}
+
+/* Icons line up according to the outermost parent not the immediate parent
+ * applying a top overide to accomodate this
+ */
+img.jxMenuItemIcon {
+  top: 2px;
+  left: 0px;
+}
+
+a.jxMenuItemActive img.jxMenuItemIcon {
+  top: 0px;
+  left: -2px;
+  padding: 1px;
+  border: 1px solid #C5E0FF;
+}
+ 
 /* chrome in dialogs doesn't resize properly when collapsing a dialog before
  * moving or resizing it in IE 6 only, hiding overflow seems to do the trick
  */
 .jxChrome {
   overflow: hidden;
 }
+

Modified: trunk/templates/mapguide/standard/themes/crispin/ie7.css
===================================================================
--- trunk/templates/mapguide/standard/themes/crispin/ie7.css	2008-12-04 15:43:03 UTC (rev 1706)
+++ trunk/templates/mapguide/standard/themes/crispin/ie7.css	2008-12-10 20:34:08 UTC (rev 1707)
@@ -1,6 +1,6 @@
 /**
  * @project         Jx
- * @revision        $Id: button.css 1153 2008-09-25 16:18:42Z fwarnock $
+ * @revision        $Id: ie7.css 243 2008-12-10 15:21:19Z fred.warnock $
  * @author          Fred Warnock (fwarnock at dmsolutions.ca)
  * @copyright       (c) 2006 DM Solutions Group Inc.
  */
@@ -10,8 +10,138 @@
 /* =========== */
 
 /* Opacity needs to be set in IE6 and below using the following filters.
-   Please note that IE8 changed how filters are written. */
+ * Please note that IE8 changed how filters are written. 
+ */
 .jxChromeDrag {filter: Alpha(opacity=50);}
 .jxDialogModal {filter: Alpha(opacity=20);}
 .jxDisabled {filter:Alpha(opacity=40);}
 iframe.jxIframeShim {filter:Alpha(opacity:0);}
+
+/* tree item focus style */
+.jxTree a:active,
+.jxTreeRoot a:active {
+  border-left: 1px dotted #75ADFF;
+  border-right: 1px dotted #75ADFF;
+  margin: 0px 0px 0px 14px;
+  background-position: left -72px;
+  outline: expression(hideFocus='true');
+}
+
+/* IE versions 7 and below do not recognize the focus pseudo-class, but instead
+ * use the active pseudo-class.  Other browsers use the active-pseudo-class
+ * while something is being pressed so IE specific definitions are needed. */
+/* focus button */
+ul.jxToolbar a.jxButton:active,
+a.jxButton:active {
+  background-position: left -96px;
+  outline: expression(hideFocus='true');
+}
+
+a.jxButton:active span.jxButtonContent {
+  background-position: right -96px;
+}
+
+/* focus active button */
+ul.jxToolbar a.jxButtonActive:active,
+a.jxButtonActive:active {
+  background-position: left -144px;
+}
+
+a.jxButtonActive:active span.jxButtonContent {
+  background-position: right -144px;
+}
+
+/* clicking focused button */
+ul.jxToolbar a.jxButtonPressed:active,
+a.jxButtonPressed:active {
+  background-position: left -120px;
+}
+
+a.jxButtonPressed:active span.jxButtonContent {
+  background-position: right -120px;
+}
+
+a.jxButtonDisclose:active {
+  background-position: right -96px;
+  outline: expression(hideFocus='true');
+}
+
+/* HORIZONTALTAB BAR - TOP and BOTTOM TABS */
+
+/* Focus tab */
+.jxBarTop a.jxTab:active,
+.jxBarBottom a.jxTab:active {
+  background-position: left -96px; 
+  outline: expression(hideFocus='true');
+}
+
+.jxBarTop a.jxTab:active span.jxTabContent,
+.jxBarBottom a.jxTab:active span.jxTabContent {
+  background-position: right -96px; 
+}
+
+/* Focus Active tab */
+.jxBarTop a.jxTabActive:active,
+.jxBarBottom a.jxTabActive:active {
+  background-position: left -144px; 
+}
+
+.jxBarTop a.jxTabActive:active span.jxTabContent,
+.jxBarBottom a.jxTabActive:active span.jxTabContent {
+  background-position: right -144px; 
+}
+
+/* Click Focused Tab */
+.jxBarTop a.jxTabPressed:active,
+.jxBarBottom a.jxTabPressed:active {
+  background-position: left -120px; 
+}
+
+.jxBarTop a.jxTabPressed:active span.jxTabContent,
+.jxBarBottom a.jxTabPressed:active span.jxTabContent {
+  background-position: right -120px; 
+}
+
+/* VERTICAL TAB BAR - LEFT and RIGHT */
+
+/* Focus tab */
+.jxBarLeft a.jxTab:active,
+.jxBarRight a.jxTab:active {
+  background-position: -96px top; 
+  outline: expression(hideFocus='true');
+}
+
+.jxBarLeft a.jxTab:active span.jxTabContent,
+.jxBarRight a.jxTab:active span.jxTabContent {
+  background-position: -96px bottom; 
+}
+
+/* Focus Active tab */
+.jxBarLeft a.jxTabActive:active,
+.jxBarRight a.jxTabActive:active {
+  background-position: -144px top; 
+}
+
+.jxBarLeft a.jxTabActive:active span.jxTabContent,
+.jxBarRight a.jxTabActive:active span.jxTabContent {
+  background-position: -144px bottom; 
+}
+
+/* Click Focused Tab */
+.jxBarLeft a.jxTabPressed:active,
+.jxBarRight a.jxTabPressed:active {
+  background-position: -120px top; 
+}
+
+.jxBarLeft a.jxTabPressed:active span.jxTabContent,
+.jxBarRight a.jxTabPressed:active span.jxTabContent {
+  background-position: -120px bottom; 
+}
+
+/* Menu Item focus style */
+a.jxMenuItem:active {
+  border: 1px dotted #75ADFF;
+  outline: expression(hideFocus='true');
+}
+
+

Modified: trunk/templates/mapguide/standard/themes/crispin/images/button.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/crispin/images/button_combo.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/crispin/images/button_multi.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/crispin/images/button_multi_disclose.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/crispin/images/dialog_chrome.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/crispin/images/flyout_chrome.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/crispin/images/menu_hover.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/crispin/images/tab_bottom.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/crispin/images/tab_left.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/crispin/images/tab_right.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/crispin/images/tab_top.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/crispin/images/tree.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/crispin/images/tree_hover.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/delicious/ie6.css
===================================================================
--- trunk/templates/mapguide/standard/themes/delicious/ie6.css	2008-12-04 15:43:03 UTC (rev 1706)
+++ trunk/templates/mapguide/standard/themes/delicious/ie6.css	2008-12-10 20:34:08 UTC (rev 1707)
@@ -1,6 +1,6 @@
 /**
  * @project         Jx
- * @revision        $Id: button.css 1153 2008-09-25 16:18:42Z fwarnock $
+ * @revision        $Id: ie6.css 243 2008-12-10 15:21:19Z fred.warnock $
  * @author          Fred Warnock (fwarnock at dmsolutions.ca)
  * @copyright       (c) 2006 DM Solutions Group Inc.
  */
@@ -10,24 +10,169 @@
 /* ============= */
 
 /* 24 bit images do not appear correctly in IE versions below 7. Applying a 
-   filter through the class below will make them appear correctly.*/
+ * filter through the class below will make them appear correctly.
+ */
 .png24{filter:expression(Jx.applyPNGFilter(this))}
 
 /* Opacity needs to be set in IE6 and below using the following filters.
-   Please note that IE8 changed how filters are written. */
+ * Please note that IE8 changed how filters are written. 
+ */
 .jxChromeDrag {filter: Alpha(opacity=50);}
 .jxDialogModal {filter: Alpha(opacity=20);}
 .jxDisabled {filter:Alpha(opacity=40);}
 iframe.jxIframeShim {filter:Alpha(opacity:0);}
 
 /* List items do not render properly under several conditions.  
-   Applying a height to the LI forces it to render properly.
-   Content that is taller than the li simply forces the li to be taller */
+ * Applying a height to the LI forces it to render properly.
+ * Content that is taller than the li simply forces the li to be taller 
+ */
 .jxTree li,
 .jxTreeRoot li {
   height: 20px;
 }
 
+/* tree item focus style */
+.jxTree a:active,
+.jxTreeRoot a:active {
+  border-left: 1px dotted #75ADFF;
+  border-right: 1px dotted #75ADFF;
+  margin: 0px 0px 0px 14px;
+  background-position: left -72px;
+  outline: expression(hideFocus='true');
+}
+
+/* IE versions 7 and below do not recognize the focus pseudo-class, but instead
+ * use the active pseudo-class.  Other browsers use the active-pseudo-class
+ * while something is being pressed so IE specific definitions are needed. */
+/* focus button */
+ul.jxToolbar a.jxButton:active,
+a.jxButton:active {
+  background-position: left -96px;
+  outline: expression(hideFocus='true');
+}
+
+a.jxButton:active span.jxButtonContent {
+  background-position: right -96px;
+}
+
+/* focus active button */
+ul.jxToolbar a.jxButtonActive:active,
+a.jxButtonActive:active {
+  background-position: left -144px;
+}
+
+a.jxButtonActive:active span.jxButtonContent {
+  background-position: right -144px;
+}
+
+/* clicking normal button */
+ul.jxToolbar a.jxButtonPressed:active,
+a.jxButtonPressed:active {
+  background-position: left -120px;
+}
+
+a.jxButtonPressed:active span.jxButtonContent {
+  background-position: right -120px;
+}
+
+a.jxButtonDisclose:active {
+  background-position: right -96px;
+}
+
+/* HORIZONTALTAB BAR - TOP and BOTTOM TABS */
+
+/* Focus tab */
+.jxBarTop a.jxTab:active,
+.jxBarBottom a.jxTab:active {
+  background-position: left -96px; 
+  outline: expression(hideFocus='true');
+}
+
+.jxBarTop a.jxTab:active span.jxTabContent,
+.jxBarBottom a.jxTab:active span.jxTabContent {
+  background-position: right -96px; 
+}
+
+/* Focus Active tab */
+.jxBarTop a.jxTabActive:active,
+.jxBarBottom a.jxTabActive:active {
+  background-position: left -144px; 
+}
+
+.jxBarTop a.jxTabActive:active span.jxTabContent,
+.jxBarBottom a.jxTabActive:active span.jxTabContent {
+  background-position: right -144px; 
+}
+
+/* Click Focused Tab */
+.jxBarTop a.jxTabPressed:active,
+.jxBarBottom a.jxTabPressed:active {
+  background-position: left -120px; 
+}
+
+.jxBarTop a.jxTabPressed:active span.jxTabContent,
+.jxBarBottom a.jxTabPressed:active span.jxTabContent {
+  background-position: right -120px; 
+}
+
+/* VERTICAL TAB BAR - LEFT and RIGHT */
+
+/* Focus tab */
+.jxBarLeft a.jxTab:active,
+.jxBarRight a.jxTab:active {
+  background-position: -96px top; 
+  outline: expression(hideFocus='true');
+}
+
+.jxBarLeft a.jxTab:active span.jxTabContent,
+.jxBarRight a.jxTab:active span.jxTabContent {
+  background-position: -96px bottom; 
+}
+
+/* Focus Active tab */
+.jxBarLeft a.jxTabActive:active,
+.jxBarRight a.jxTabActive:active {
+  background-position: -144px top; 
+}
+
+.jxBarLeft a.jxTabActive:active span.jxTabContent,
+.jxBarRight a.jxTabActive:active span.jxTabContent {
+  background-position: -144px bottom; 
+}
+
+/* Click Focused Tab */
+.jxBarLeft a.jxTabPressed:active,
+.jxBarRight a.jxTabPressed:active {
+  background-position: -120px top; 
+}
+
+.jxBarLeft a.jxTabPressed:active span.jxTabContent,
+.jxBarRight a.jxTabPressed:active span.jxTabContent {
+  background-position: -120px bottom; 
+}
+
+
+/* Menu Item focus style */
+a.jxMenuItem:active {
+  border: 1px dotted #75ADFF;
+  outline: expression(hideFocus='true');
+}
+
+/* Icons line up according to the outermost parent not the immediate parent
+ * applying a top overide to accomodate this
+ */
+img.jxMenuItemIcon {
+  top: 2px;
+  left: 0px;
+}
+
+a.jxMenuItemActive img.jxMenuItemIcon {
+  top: 0px;
+  left: -2px;
+  padding: 1px;
+  border: 1px solid #C5E0FF;
+}
+ 
 /* chrome in dialogs doesn't resize properly when collapsing a dialog before
  * moving or resizing it in IE 6 only, hiding overflow seems to do the trick
  */
@@ -35,4 +180,3 @@
   overflow: hidden;
 }
 
-

Modified: trunk/templates/mapguide/standard/themes/delicious/ie7.css
===================================================================
--- trunk/templates/mapguide/standard/themes/delicious/ie7.css	2008-12-04 15:43:03 UTC (rev 1706)
+++ trunk/templates/mapguide/standard/themes/delicious/ie7.css	2008-12-10 20:34:08 UTC (rev 1707)
@@ -1,6 +1,6 @@
 /**
  * @project         Jx
- * @revision        $Id: button.css 1153 2008-09-25 16:18:42Z fwarnock $
+ * @revision        $Id: ie7.css 243 2008-12-10 15:21:19Z fred.warnock $
  * @author          Fred Warnock (fwarnock at dmsolutions.ca)
  * @copyright       (c) 2006 DM Solutions Group Inc.
  */
@@ -10,8 +10,138 @@
 /* =========== */
 
 /* Opacity needs to be set in IE6 and below using the following filters.
-   Please note that IE8 changed how filters are written. */
+ * Please note that IE8 changed how filters are written. 
+ */
 .jxChromeDrag {filter: Alpha(opacity=50);}
 .jxDialogModal {filter: Alpha(opacity=20);}
 .jxDisabled {filter:Alpha(opacity=40);}
 iframe.jxIframeShim {filter:Alpha(opacity:0);}
+
+/* tree item focus style */
+.jxTree a:active,
+.jxTreeRoot a:active {
+  border-left: 1px dotted #75ADFF;
+  border-right: 1px dotted #75ADFF;
+  margin: 0px 0px 0px 14px;
+  background-position: left -72px;
+  outline: expression(hideFocus='true');
+}
+
+/* IE versions 7 and below do not recognize the focus pseudo-class, but instead
+ * use the active pseudo-class.  Other browsers use the active-pseudo-class
+ * while something is being pressed so IE specific definitions are needed. */
+/* focus button */
+ul.jxToolbar a.jxButton:active,
+a.jxButton:active {
+  background-position: left -96px;
+  outline: expression(hideFocus='true');
+}
+
+a.jxButton:active span.jxButtonContent {
+  background-position: right -96px;
+}
+
+/* focus active button */
+ul.jxToolbar a.jxButtonActive:active,
+a.jxButtonActive:active {
+  background-position: left -144px;
+}
+
+a.jxButtonActive:active span.jxButtonContent {
+  background-position: right -144px;
+}
+
+/* clicking focused button */
+ul.jxToolbar a.jxButtonPressed:active,
+a.jxButtonPressed:active {
+  background-position: left -120px;
+}
+
+a.jxButtonPressed:active span.jxButtonContent {
+  background-position: right -120px;
+}
+
+a.jxButtonDisclose:active {
+  background-position: right -96px;
+  outline: expression(hideFocus='true');
+}
+
+/* HORIZONTALTAB BAR - TOP and BOTTOM TABS */
+
+/* Focus tab */
+.jxBarTop a.jxTab:active,
+.jxBarBottom a.jxTab:active {
+  background-position: left -96px; 
+  outline: expression(hideFocus='true');
+}
+
+.jxBarTop a.jxTab:active span.jxTabContent,
+.jxBarBottom a.jxTab:active span.jxTabContent {
+  background-position: right -96px; 
+}
+
+/* Focus Active tab */
+.jxBarTop a.jxTabActive:active,
+.jxBarBottom a.jxTabActive:active {
+  background-position: left -144px; 
+}
+
+.jxBarTop a.jxTabActive:active span.jxTabContent,
+.jxBarBottom a.jxTabActive:active span.jxTabContent {
+  background-position: right -144px; 
+}
+
+/* Click Focused Tab */
+.jxBarTop a.jxTabPressed:active,
+.jxBarBottom a.jxTabPressed:active {
+  background-position: left -120px; 
+}
+
+.jxBarTop a.jxTabPressed:active span.jxTabContent,
+.jxBarBottom a.jxTabPressed:active span.jxTabContent {
+  background-position: right -120px; 
+}
+
+/* VERTICAL TAB BAR - LEFT and RIGHT */
+
+/* Focus tab */
+.jxBarLeft a.jxTab:active,
+.jxBarRight a.jxTab:active {
+  background-position: -96px top; 
+  outline: expression(hideFocus='true');
+}
+
+.jxBarLeft a.jxTab:active span.jxTabContent,
+.jxBarRight a.jxTab:active span.jxTabContent {
+  background-position: -96px bottom; 
+}
+
+/* Focus Active tab */
+.jxBarLeft a.jxTabActive:active,
+.jxBarRight a.jxTabActive:active {
+  background-position: -144px top; 
+}
+
+.jxBarLeft a.jxTabActive:active span.jxTabContent,
+.jxBarRight a.jxTabActive:active span.jxTabContent {
+  background-position: -144px bottom; 
+}
+
+/* Click Focused Tab */
+.jxBarLeft a.jxTabPressed:active,
+.jxBarRight a.jxTabPressed:active {
+  background-position: -120px top; 
+}
+
+.jxBarLeft a.jxTabPressed:active span.jxTabContent,
+.jxBarRight a.jxTabPressed:active span.jxTabContent {
+  background-position: -120px bottom; 
+}
+
+/* Menu Item focus style */
+a.jxMenuItem:active {
+  border: 1px dotted #75ADFF;
+  outline: expression(hideFocus='true');
+}
+
+

Modified: trunk/templates/mapguide/standard/themes/delicious/images/button.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/delicious/images/button_combo.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/delicious/images/button_multi.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/delicious/images/button_multi_disclose.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/delicious/images/dialog_chrome.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/delicious/images/flyout_chrome.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/delicious/images/menu_hover.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/delicious/images/tab_bottom.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/delicious/images/tab_left.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/delicious/images/tab_right.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/delicious/images/tab_top.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/delicious/images/tree.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/delicious/images/tree_hover.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapguide/standard/themes/delicious/images/tree_vert_line.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/crispin/ie6.css
===================================================================
--- trunk/templates/mapserver/standard/themes/crispin/ie6.css	2008-12-04 15:43:03 UTC (rev 1706)
+++ trunk/templates/mapserver/standard/themes/crispin/ie6.css	2008-12-10 20:34:08 UTC (rev 1707)
@@ -1,6 +1,6 @@
 /**
  * @project         Jx
- * @revision        $Id: button.css 1153 2008-09-25 16:18:42Z fwarnock $
+ * @revision        $Id: ie6.css 243 2008-12-10 15:21:19Z fred.warnock $
  * @author          Fred Warnock (fwarnock at dmsolutions.ca)
  * @copyright       (c) 2006 DM Solutions Group Inc.
  */
@@ -10,27 +10,169 @@
 /* ============= */
 
 /* 24 bit images do not appear correctly in IE versions below 7. Applying a 
-   filter through the class below will make them appear correctly.*/
+ * filter through the class below will make them appear correctly.
+ */
 .png24{filter:expression(Jx.applyPNGFilter(this))}
 
 /* Opacity needs to be set in IE6 and below using the following filters.
-   Please note that IE8 changed how filters are written. */
+ * Please note that IE8 changed how filters are written. 
+ */
 .jxChromeDrag {filter: Alpha(opacity=50);}
 .jxDialogModal {filter: Alpha(opacity=20);}
 .jxDisabled {filter:Alpha(opacity=40);}
 iframe.jxIframeShim {filter:Alpha(opacity:0);}
 
 /* List items do not render properly under several conditions.  
-   Applying a height to the LI forces it to render properly.
-   Content that is taller than the li simply forces the li to be taller */
+ * Applying a height to the LI forces it to render properly.
+ * Content that is taller than the li simply forces the li to be taller 
+ */
 .jxTree li,
 .jxTreeRoot li {
   height: 20px;
 }
 
+/* tree item focus style */
+.jxTree a:active,
+.jxTreeRoot a:active {
+  border-left: 1px dotted #75ADFF;
+  border-right: 1px dotted #75ADFF;
+  margin: 0px 0px 0px 14px;
+  background-position: left -72px;
+  outline: expression(hideFocus='true');
+}
+
+/* IE versions 7 and below do not recognize the focus pseudo-class, but instead
+ * use the active pseudo-class.  Other browsers use the active-pseudo-class
+ * while something is being pressed so IE specific definitions are needed. */
+/* focus button */
+ul.jxToolbar a.jxButton:active,
+a.jxButton:active {
+  background-position: left -96px;
+}
+
+a.jxButton:active span.jxButtonContent {
+  background-position: right -96px;
+}
+
+/* focus active button */
+ul.jxToolbar a.jxButtonActive:active,
+a.jxButtonActive:active {
+  background-position: left -144px;
+}
+
+a.jxButtonActive:active span.jxButtonContent {
+  background-position: right -144px;
+}
+
+/* clicking normal button */
+ul.jxToolbar a.jxButtonPressed:active,
+a.jxButtonPressed:active {
+  background-position: left -120px;
+}
+
+a.jxButtonPressed:active span.jxButtonContent {
+  background-position: right -120px;
+}
+
+a.jxButtonDisclose:active {
+  background-position: right -96px;
+}
+
+/* HORIZONTALTAB BAR - TOP and BOTTOM TABS */
+
+/* Focus tab */
+.jxBarTop a.jxTab:active,
+.jxBarBottom a.jxTab:active {
+  background-position: left -96px; 
+}
+
+.jxBarTop a.jxTab:active span.jxTabContent,
+.jxBarBottom a.jxTab:active span.jxTabContent {
+  background-position: right -96px; 
+}
+
+/* Focus Active tab */
+.jxBarTop a.jxTabActive:active,
+.jxBarBottom a.jxTabActive:active {
+  background-position: left -144px; 
+}
+
+.jxBarTop a.jxTabActive:active span.jxTabContent,
+.jxBarBottom a.jxTabActive:active span.jxTabContent {
+  background-position: right -144px; 
+}
+
+/* Click Focused Tab */
+.jxBarTop a.jxTabPressed:active,
+.jxBarBottom a.jxTabPressed:active {
+  background-position: left -120px; 
+}
+
+.jxBarTop a.jxTabPressed:active span.jxTabContent,
+.jxBarBottom a.jxTabPressed:active span.jxTabContent {
+  background-position: right -120px; 
+}
+
+/* VERTICAL TAB BAR - LEFT and RIGHT */
+
+/* Focus tab */
+.jxBarLeft a.jxTab:active,
+.jxBarRight a.jxTab:active {
+  background-position: -96px top; 
+}
+
+.jxBarLeft a.jxTab:active span.jxTabContent,
+.jxBarRight a.jxTab:active span.jxTabContent {
+  background-position: -96px bottom; 
+}
+
+/* Focus Active tab */
+.jxBarLeft a.jxTabActive:active,
+.jxBarRight a.jxTabActive:active {
+  background-position: -144px top; 
+}
+
+.jxBarLeft a.jxTabActive:active span.jxTabContent,
+.jxBarRight a.jxTabActive:active span.jxTabContent {
+  background-position: -144px bottom; 
+}
+
+/* Click Focused Tab */
+.jxBarLeft a.jxTabPressed:active,
+.jxBarRight a.jxTabPressed:active {
+  background-position: -120px top; 
+}
+
+.jxBarLeft a.jxTabPressed:active span.jxTabContent,
+.jxBarRight a.jxTabPressed:active span.jxTabContent {
+  background-position: -120px bottom; 
+}
+
+
+/* Menu Item focus style */
+a.jxMenuItem:active {
+  border: 1px dotted #75ADFF;
+}
+
+/* Icons line up according to the outermost parent not the immediate parent
+ * applying a top overide to accomodate this
+ */
+img.jxMenuItemIcon {
+  top: 2px;
+  left: 0px;
+}
+
+a.jxMenuItemActive img.jxMenuItemIcon {
+  top: 0px;
+  left: -2px;
+  padding: 1px;
+  border: 1px solid #C5E0FF;
+}
+ 
 /* chrome in dialogs doesn't resize properly when collapsing a dialog before
  * moving or resizing it in IE 6 only, hiding overflow seems to do the trick
  */
 .jxChrome {
   overflow: hidden;
 }
+

Modified: trunk/templates/mapserver/standard/themes/crispin/ie7.css
===================================================================
--- trunk/templates/mapserver/standard/themes/crispin/ie7.css	2008-12-04 15:43:03 UTC (rev 1706)
+++ trunk/templates/mapserver/standard/themes/crispin/ie7.css	2008-12-10 20:34:08 UTC (rev 1707)
@@ -1,6 +1,6 @@
 /**
  * @project         Jx
- * @revision        $Id: button.css 1153 2008-09-25 16:18:42Z fwarnock $
+ * @revision        $Id: ie7.css 243 2008-12-10 15:21:19Z fred.warnock $
  * @author          Fred Warnock (fwarnock at dmsolutions.ca)
  * @copyright       (c) 2006 DM Solutions Group Inc.
  */
@@ -10,8 +10,138 @@
 /* =========== */
 
 /* Opacity needs to be set in IE6 and below using the following filters.
-   Please note that IE8 changed how filters are written. */
+ * Please note that IE8 changed how filters are written. 
+ */
 .jxChromeDrag {filter: Alpha(opacity=50);}
 .jxDialogModal {filter: Alpha(opacity=20);}
 .jxDisabled {filter:Alpha(opacity=40);}
 iframe.jxIframeShim {filter:Alpha(opacity:0);}
+
+/* tree item focus style */
+.jxTree a:active,
+.jxTreeRoot a:active {
+  border-left: 1px dotted #75ADFF;
+  border-right: 1px dotted #75ADFF;
+  margin: 0px 0px 0px 14px;
+  background-position: left -72px;
+  outline: expression(hideFocus='true');
+}
+
+/* IE versions 7 and below do not recognize the focus pseudo-class, but instead
+ * use the active pseudo-class.  Other browsers use the active-pseudo-class
+ * while something is being pressed so IE specific definitions are needed. */
+/* focus button */
+ul.jxToolbar a.jxButton:active,
+a.jxButton:active {
+  background-position: left -96px;
+  outline: expression(hideFocus='true');
+}
+
+a.jxButton:active span.jxButtonContent {
+  background-position: right -96px;
+}
+
+/* focus active button */
+ul.jxToolbar a.jxButtonActive:active,
+a.jxButtonActive:active {
+  background-position: left -144px;
+}
+
+a.jxButtonActive:active span.jxButtonContent {
+  background-position: right -144px;
+}
+
+/* clicking focused button */
+ul.jxToolbar a.jxButtonPressed:active,
+a.jxButtonPressed:active {
+  background-position: left -120px;
+}
+
+a.jxButtonPressed:active span.jxButtonContent {
+  background-position: right -120px;
+}
+
+a.jxButtonDisclose:active {
+  background-position: right -96px;
+  outline: expression(hideFocus='true');
+}
+
+/* HORIZONTALTAB BAR - TOP and BOTTOM TABS */
+
+/* Focus tab */
+.jxBarTop a.jxTab:active,
+.jxBarBottom a.jxTab:active {
+  background-position: left -96px; 
+  outline: expression(hideFocus='true');
+}
+
+.jxBarTop a.jxTab:active span.jxTabContent,
+.jxBarBottom a.jxTab:active span.jxTabContent {
+  background-position: right -96px; 
+}
+
+/* Focus Active tab */
+.jxBarTop a.jxTabActive:active,
+.jxBarBottom a.jxTabActive:active {
+  background-position: left -144px; 
+}
+
+.jxBarTop a.jxTabActive:active span.jxTabContent,
+.jxBarBottom a.jxTabActive:active span.jxTabContent {
+  background-position: right -144px; 
+}
+
+/* Click Focused Tab */
+.jxBarTop a.jxTabPressed:active,
+.jxBarBottom a.jxTabPressed:active {
+  background-position: left -120px; 
+}
+
+.jxBarTop a.jxTabPressed:active span.jxTabContent,
+.jxBarBottom a.jxTabPressed:active span.jxTabContent {
+  background-position: right -120px; 
+}
+
+/* VERTICAL TAB BAR - LEFT and RIGHT */
+
+/* Focus tab */
+.jxBarLeft a.jxTab:active,
+.jxBarRight a.jxTab:active {
+  background-position: -96px top; 
+  outline: expression(hideFocus='true');
+}
+
+.jxBarLeft a.jxTab:active span.jxTabContent,
+.jxBarRight a.jxTab:active span.jxTabContent {
+  background-position: -96px bottom; 
+}
+
+/* Focus Active tab */
+.jxBarLeft a.jxTabActive:active,
+.jxBarRight a.jxTabActive:active {
+  background-position: -144px top; 
+}
+
+.jxBarLeft a.jxTabActive:active span.jxTabContent,
+.jxBarRight a.jxTabActive:active span.jxTabContent {
+  background-position: -144px bottom; 
+}
+
+/* Click Focused Tab */
+.jxBarLeft a.jxTabPressed:active,
+.jxBarRight a.jxTabPressed:active {
+  background-position: -120px top; 
+}
+
+.jxBarLeft a.jxTabPressed:active span.jxTabContent,
+.jxBarRight a.jxTabPressed:active span.jxTabContent {
+  background-position: -120px bottom; 
+}
+
+/* Menu Item focus style */
+a.jxMenuItem:active {
+  border: 1px dotted #75ADFF;
+  outline: expression(hideFocus='true');
+}
+
+

Modified: trunk/templates/mapserver/standard/themes/crispin/images/button.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/crispin/images/button_combo.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/crispin/images/button_multi.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/crispin/images/button_multi_disclose.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/crispin/images/dialog_chrome.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/crispin/images/flyout_chrome.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/crispin/images/menu_hover.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/crispin/images/tab_bottom.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/crispin/images/tab_left.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/crispin/images/tab_right.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/crispin/images/tab_top.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/crispin/images/tree.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/crispin/images/tree_hover.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/delicious/ie6.css
===================================================================
--- trunk/templates/mapserver/standard/themes/delicious/ie6.css	2008-12-04 15:43:03 UTC (rev 1706)
+++ trunk/templates/mapserver/standard/themes/delicious/ie6.css	2008-12-10 20:34:08 UTC (rev 1707)
@@ -1,6 +1,6 @@
 /**
  * @project         Jx
- * @revision        $Id: button.css 1153 2008-09-25 16:18:42Z fwarnock $
+ * @revision        $Id: ie6.css 243 2008-12-10 15:21:19Z fred.warnock $
  * @author          Fred Warnock (fwarnock at dmsolutions.ca)
  * @copyright       (c) 2006 DM Solutions Group Inc.
  */
@@ -10,24 +10,169 @@
 /* ============= */
 
 /* 24 bit images do not appear correctly in IE versions below 7. Applying a 
-   filter through the class below will make them appear correctly.*/
+ * filter through the class below will make them appear correctly.
+ */
 .png24{filter:expression(Jx.applyPNGFilter(this))}
 
 /* Opacity needs to be set in IE6 and below using the following filters.
-   Please note that IE8 changed how filters are written. */
+ * Please note that IE8 changed how filters are written. 
+ */
 .jxChromeDrag {filter: Alpha(opacity=50);}
 .jxDialogModal {filter: Alpha(opacity=20);}
 .jxDisabled {filter:Alpha(opacity=40);}
 iframe.jxIframeShim {filter:Alpha(opacity:0);}
 
 /* List items do not render properly under several conditions.  
-   Applying a height to the LI forces it to render properly.
-   Content that is taller than the li simply forces the li to be taller */
+ * Applying a height to the LI forces it to render properly.
+ * Content that is taller than the li simply forces the li to be taller 
+ */
 .jxTree li,
 .jxTreeRoot li {
   height: 20px;
 }
 
+/* tree item focus style */
+.jxTree a:active,
+.jxTreeRoot a:active {
+  border-left: 1px dotted #75ADFF;
+  border-right: 1px dotted #75ADFF;
+  margin: 0px 0px 0px 14px;
+  background-position: left -72px;
+  outline: expression(hideFocus='true');
+}
+
+/* IE versions 7 and below do not recognize the focus pseudo-class, but instead
+ * use the active pseudo-class.  Other browsers use the active-pseudo-class
+ * while something is being pressed so IE specific definitions are needed. */
+/* focus button */
+ul.jxToolbar a.jxButton:active,
+a.jxButton:active {
+  background-position: left -96px;
+  outline: expression(hideFocus='true');
+}
+
+a.jxButton:active span.jxButtonContent {
+  background-position: right -96px;
+}
+
+/* focus active button */
+ul.jxToolbar a.jxButtonActive:active,
+a.jxButtonActive:active {
+  background-position: left -144px;
+}
+
+a.jxButtonActive:active span.jxButtonContent {
+  background-position: right -144px;
+}
+
+/* clicking normal button */
+ul.jxToolbar a.jxButtonPressed:active,
+a.jxButtonPressed:active {
+  background-position: left -120px;
+}
+
+a.jxButtonPressed:active span.jxButtonContent {
+  background-position: right -120px;
+}
+
+a.jxButtonDisclose:active {
+  background-position: right -96px;
+}
+
+/* HORIZONTALTAB BAR - TOP and BOTTOM TABS */
+
+/* Focus tab */
+.jxBarTop a.jxTab:active,
+.jxBarBottom a.jxTab:active {
+  background-position: left -96px; 
+  outline: expression(hideFocus='true');
+}
+
+.jxBarTop a.jxTab:active span.jxTabContent,
+.jxBarBottom a.jxTab:active span.jxTabContent {
+  background-position: right -96px; 
+}
+
+/* Focus Active tab */
+.jxBarTop a.jxTabActive:active,
+.jxBarBottom a.jxTabActive:active {
+  background-position: left -144px; 
+}
+
+.jxBarTop a.jxTabActive:active span.jxTabContent,
+.jxBarBottom a.jxTabActive:active span.jxTabContent {
+  background-position: right -144px; 
+}
+
+/* Click Focused Tab */
+.jxBarTop a.jxTabPressed:active,
+.jxBarBottom a.jxTabPressed:active {
+  background-position: left -120px; 
+}
+
+.jxBarTop a.jxTabPressed:active span.jxTabContent,
+.jxBarBottom a.jxTabPressed:active span.jxTabContent {
+  background-position: right -120px; 
+}
+
+/* VERTICAL TAB BAR - LEFT and RIGHT */
+
+/* Focus tab */
+.jxBarLeft a.jxTab:active,
+.jxBarRight a.jxTab:active {
+  background-position: -96px top; 
+  outline: expression(hideFocus='true');
+}
+
+.jxBarLeft a.jxTab:active span.jxTabContent,
+.jxBarRight a.jxTab:active span.jxTabContent {
+  background-position: -96px bottom; 
+}
+
+/* Focus Active tab */
+.jxBarLeft a.jxTabActive:active,
+.jxBarRight a.jxTabActive:active {
+  background-position: -144px top; 
+}
+
+.jxBarLeft a.jxTabActive:active span.jxTabContent,
+.jxBarRight a.jxTabActive:active span.jxTabContent {
+  background-position: -144px bottom; 
+}
+
+/* Click Focused Tab */
+.jxBarLeft a.jxTabPressed:active,
+.jxBarRight a.jxTabPressed:active {
+  background-position: -120px top; 
+}
+
+.jxBarLeft a.jxTabPressed:active span.jxTabContent,
+.jxBarRight a.jxTabPressed:active span.jxTabContent {
+  background-position: -120px bottom; 
+}
+
+
+/* Menu Item focus style */
+a.jxMenuItem:active {
+  border: 1px dotted #75ADFF;
+  outline: expression(hideFocus='true');
+}
+
+/* Icons line up according to the outermost parent not the immediate parent
+ * applying a top overide to accomodate this
+ */
+img.jxMenuItemIcon {
+  top: 2px;
+  left: 0px;
+}
+
+a.jxMenuItemActive img.jxMenuItemIcon {
+  top: 0px;
+  left: -2px;
+  padding: 1px;
+  border: 1px solid #C5E0FF;
+}
+ 
 /* chrome in dialogs doesn't resize properly when collapsing a dialog before
  * moving or resizing it in IE 6 only, hiding overflow seems to do the trick
  */
@@ -35,4 +180,3 @@
   overflow: hidden;
 }
 
-

Modified: trunk/templates/mapserver/standard/themes/delicious/ie7.css
===================================================================
--- trunk/templates/mapserver/standard/themes/delicious/ie7.css	2008-12-04 15:43:03 UTC (rev 1706)
+++ trunk/templates/mapserver/standard/themes/delicious/ie7.css	2008-12-10 20:34:08 UTC (rev 1707)
@@ -1,6 +1,6 @@
 /**
  * @project         Jx
- * @revision        $Id: button.css 1153 2008-09-25 16:18:42Z fwarnock $
+ * @revision        $Id: ie7.css 243 2008-12-10 15:21:19Z fred.warnock $
  * @author          Fred Warnock (fwarnock at dmsolutions.ca)
  * @copyright       (c) 2006 DM Solutions Group Inc.
  */
@@ -10,8 +10,138 @@
 /* =========== */
 
 /* Opacity needs to be set in IE6 and below using the following filters.
-   Please note that IE8 changed how filters are written. */
+ * Please note that IE8 changed how filters are written. 
+ */
 .jxChromeDrag {filter: Alpha(opacity=50);}
 .jxDialogModal {filter: Alpha(opacity=20);}
 .jxDisabled {filter:Alpha(opacity=40);}
 iframe.jxIframeShim {filter:Alpha(opacity:0);}
+
+/* tree item focus style */
+.jxTree a:active,
+.jxTreeRoot a:active {
+  border-left: 1px dotted #75ADFF;
+  border-right: 1px dotted #75ADFF;
+  margin: 0px 0px 0px 14px;
+  background-position: left -72px;
+  outline: expression(hideFocus='true');
+}
+
+/* IE versions 7 and below do not recognize the focus pseudo-class, but instead
+ * use the active pseudo-class.  Other browsers use the active-pseudo-class
+ * while something is being pressed so IE specific definitions are needed. */
+/* focus button */
+ul.jxToolbar a.jxButton:active,
+a.jxButton:active {
+  background-position: left -96px;
+  outline: expression(hideFocus='true');
+}
+
+a.jxButton:active span.jxButtonContent {
+  background-position: right -96px;
+}
+
+/* focus active button */
+ul.jxToolbar a.jxButtonActive:active,
+a.jxButtonActive:active {
+  background-position: left -144px;
+}
+
+a.jxButtonActive:active span.jxButtonContent {
+  background-position: right -144px;
+}
+
+/* clicking focused button */
+ul.jxToolbar a.jxButtonPressed:active,
+a.jxButtonPressed:active {
+  background-position: left -120px;
+}
+
+a.jxButtonPressed:active span.jxButtonContent {
+  background-position: right -120px;
+}
+
+a.jxButtonDisclose:active {
+  background-position: right -96px;
+  outline: expression(hideFocus='true');
+}
+
+/* HORIZONTALTAB BAR - TOP and BOTTOM TABS */
+
+/* Focus tab */
+.jxBarTop a.jxTab:active,
+.jxBarBottom a.jxTab:active {
+  background-position: left -96px; 
+  outline: expression(hideFocus='true');
+}
+
+.jxBarTop a.jxTab:active span.jxTabContent,
+.jxBarBottom a.jxTab:active span.jxTabContent {
+  background-position: right -96px; 
+}
+
+/* Focus Active tab */
+.jxBarTop a.jxTabActive:active,
+.jxBarBottom a.jxTabActive:active {
+  background-position: left -144px; 
+}
+
+.jxBarTop a.jxTabActive:active span.jxTabContent,
+.jxBarBottom a.jxTabActive:active span.jxTabContent {
+  background-position: right -144px; 
+}
+
+/* Click Focused Tab */
+.jxBarTop a.jxTabPressed:active,
+.jxBarBottom a.jxTabPressed:active {
+  background-position: left -120px; 
+}
+
+.jxBarTop a.jxTabPressed:active span.jxTabContent,
+.jxBarBottom a.jxTabPressed:active span.jxTabContent {
+  background-position: right -120px; 
+}
+
+/* VERTICAL TAB BAR - LEFT and RIGHT */
+
+/* Focus tab */
+.jxBarLeft a.jxTab:active,
+.jxBarRight a.jxTab:active {
+  background-position: -96px top; 
+  outline: expression(hideFocus='true');
+}
+
+.jxBarLeft a.jxTab:active span.jxTabContent,
+.jxBarRight a.jxTab:active span.jxTabContent {
+  background-position: -96px bottom; 
+}
+
+/* Focus Active tab */
+.jxBarLeft a.jxTabActive:active,
+.jxBarRight a.jxTabActive:active {
+  background-position: -144px top; 
+}
+
+.jxBarLeft a.jxTabActive:active span.jxTabContent,
+.jxBarRight a.jxTabActive:active span.jxTabContent {
+  background-position: -144px bottom; 
+}
+
+/* Click Focused Tab */
+.jxBarLeft a.jxTabPressed:active,
+.jxBarRight a.jxTabPressed:active {
+  background-position: -120px top; 
+}
+
+.jxBarLeft a.jxTabPressed:active span.jxTabContent,
+.jxBarRight a.jxTabPressed:active span.jxTabContent {
+  background-position: -120px bottom; 
+}
+
+/* Menu Item focus style */
+a.jxMenuItem:active {
+  border: 1px dotted #75ADFF;
+  outline: expression(hideFocus='true');
+}
+
+

Modified: trunk/templates/mapserver/standard/themes/delicious/images/button.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/delicious/images/button_combo.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/delicious/images/button_multi.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/delicious/images/button_multi_disclose.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/delicious/images/dialog_chrome.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/delicious/images/flyout_chrome.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/delicious/images/menu_hover.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/delicious/images/tab_bottom.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/delicious/images/tab_left.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/delicious/images/tab_right.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/delicious/images/tab_top.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/delicious/images/tree.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/delicious/images/tree_hover.png
===================================================================
(Binary files differ)

Modified: trunk/templates/mapserver/standard/themes/delicious/images/tree_vert_line.png
===================================================================
(Binary files differ)

Modified: trunk/widgets/OverviewMap.js
===================================================================
--- trunk/widgets/OverviewMap.js	2008-12-04 15:43:03 UTC (rev 1706)
+++ trunk/widgets/OverviewMap.js	2008-12-10 20:34:08 UTC (rev 1707)
@@ -71,10 +71,7 @@
             jxl.addEvent('sizeChange', OpenLayers.Function.bind(this.sizeChanged, this));
         }
         
-        Fusion.addWidgetStyleSheet(widgetTag.location + 'OverviewMap/OverviewMap.css');
-        this.oMapOptions = {
-            theme: null
-        };  //TODO: allow setting some mapOptions in AppDef
+        this.oMapOptions = {};  //TODO: allow setting some mapOptions in AppDef
 
         //this.getMap().registerForEvent(Fusion.Event.MAP_LOADED, OpenLayers.Function.bind(this.mapWidgetLoaded, this));
     },



More information about the fusion-commits mailing list