[fusion-commits] r1988 - in sandbox/jxlib-3.0: lib templates/mapguide/standard/themes/crispin templates/mapguide/standard/themes/delicious templates/mapserver/standard/themes/crispin templates/mapserver/standard/themes/delicious

svn_fusion at osgeo.org svn_fusion at osgeo.org
Tue Nov 24 15:11:07 EST 2009


Author: pagameba
Date: 2009-11-24 15:11:06 -0500 (Tue, 24 Nov 2009)
New Revision: 1988

Modified:
   sandbox/jxlib-3.0/lib/jxlib.uncompressed.js
   sandbox/jxlib-3.0/templates/mapguide/standard/themes/crispin/jxtheme.css
   sandbox/jxlib-3.0/templates/mapguide/standard/themes/crispin/jxtheme.uncompressed.css
   sandbox/jxlib-3.0/templates/mapguide/standard/themes/delicious/jxtheme.css
   sandbox/jxlib-3.0/templates/mapguide/standard/themes/delicious/jxtheme.uncompressed.css
   sandbox/jxlib-3.0/templates/mapserver/standard/themes/crispin/jxtheme.css
   sandbox/jxlib-3.0/templates/mapserver/standard/themes/crispin/jxtheme.uncompressed.css
   sandbox/jxlib-3.0/templates/mapserver/standard/themes/delicious/jxtheme.css
   sandbox/jxlib-3.0/templates/mapserver/standard/themes/delicious/jxtheme.uncompressed.css
Log:
updating jxlib to the latest build

Modified: sandbox/jxlib-3.0/lib/jxlib.uncompressed.js
===================================================================
--- sandbox/jxlib-3.0/lib/jxlib.uncompressed.js	2009-11-24 20:05:41 UTC (rev 1987)
+++ sandbox/jxlib-3.0/lib/jxlib.uncompressed.js	2009-11-24 20:11:06 UTC (rev 1988)
@@ -13842,7 +13842,7 @@
 	startMonth: 'Välj en start månad',
 	sameMonth: 'Dessa två datum måste vara i samma månad - du måste ändra det ena eller det andra.'
 
-});// $Id: common.js 602 2009-11-10 19:41:36Z pagameba $
+});// $Id: common.js 625 2009-11-20 13:19:50Z pagameba $
 /**
  * Class: Jx
  * Jx is a global singleton object that contains the entire Jx library
@@ -13856,10 +13856,11 @@
  * 
  * This file is licensed under an MIT style license
  */
- 
+
 /* firebug console supressor for IE/Safari/Opera */
-window.addEvent('load', function() {
-    if (!("console" in window) || !("firebug" in window.console)) {
+window.addEvent('load',
+function() {
+    if (! ("console" in window) || !("firebug" in window.console)) {
         var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
         "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
 
@@ -13869,48 +13870,40 @@
         }
     }
 });
-/* inspired by extjs, apparently removes css image flicker and related problems in IE 6 */
-/* This is already done in mootools Source/Core/Browser.js  KASI*/
-/*
-(function() {
-    var ua = navigator.userAgent.toLowerCase();
-    var isIE = ua.indexOf("msie") > -1,
-        isIE7 = ua.indexOf("msie 7") > -1;
-    if(isIE && !isIE7) {
-        try {
-            document.execCommand("BackgroundImageCache", false, true);
-        } catch(e) {}
-    }    
-})();
-*/
 
-Class.Mutators.Family = function(self,name) {
-    if ($defined(name)){
+// add mutator that sets jxFamily when creating a class so we can check
+// its type
+Class.Mutators.Family = function(self, name) {
+    if ($defined(name)) {
         self.jxFamily = name;
         return self;
     }
-    else {   
-        this.implement({'jxFamily':self});
+    else if(!$defined(this.prototype.jxFamily)) {
+        this.implement({
+            'jxFamily': self
+        });
     }
 };
-function $unlink(object){
-    if (object && object.jxFamily){
+
+function $unlink(object) {
+    if (object && object.jxFamily) {
         return object;
-    }    
+    }
     var unlinked;
-    switch ($type(object)){
-        case 'object':
-            unlinked = {};
-            for (var p in object) unlinked[p] = $unlink(object[p]);
+    switch ($type(object)) {
+    case 'object':
+        unlinked = {};
+        for (var p in object) unlinked[p] = $unlink(object[p]);
         break;
-        case 'hash':
-            unlinked = new Hash(object);
+    case 'hash':
+        unlinked = new Hash(object);
         break;
-        case 'array':
-            unlinked = [];
-            for (var i = 0, l = object.length; i < l; i++) unlinked[i] = $unlink(object[i]);
+    case 'array':
+        unlinked = [];
+        for (var i = 0, l = object.length; i < l; i++) unlinked[i] = $unlink(object[i]);
         break;
-        default: return object;
+    default:
+        return object;
     }
     return unlinked;
 }
@@ -13923,12 +13916,12 @@
     var Jx = {};
     (function() {
         var aScripts = document.getElementsByTagName('SCRIPT');
-        for (var i=0; i<aScripts.length; i++) {
+        for (var i = 0; i < aScripts.length; i++) {
             var s = aScripts[i].src;
             var matches = /(.*[jx|js|lib])\/jxlib(.*)/.exec(s);
             if (matches && matches[0]) {
                 /**
-                 * Property: {String} baseURL
+                 * APIProperty: {String} baseURL
                  * This is the URL that Jx was loaded from, it is 
                  * automatically calculated from the script tag
                  * src property that included Jx.
@@ -13946,34 +13939,37 @@
                  *    baseURL: 'some/path'
                  * }
                  * (end)
-                 */ 
-                 Jx.aPixel = document.createElement('img', {alt:'',title:''});
-                 Jx.aPixel.src = matches[1]+'/a_pixel.png';
-                 Jx.baseURL = Jx.aPixel.src.substring(0,
-                     Jx.aPixel.src.indexOf('a_pixel.png'));
-                
+                 */
+                Jx.aPixel = document.createElement('img', {
+                    alt: '',
+                    title: ''
+                });
+                Jx.aPixel.src = matches[1] + '/a_pixel.png';
+                Jx.baseURL = Jx.aPixel.src.substring(0,
+                Jx.aPixel.src.indexOf('a_pixel.png'));
+
             }
         }
-       
+
     })();
-} 
+}
 
-(function(){
-	/**
-     * Determine if we're running in Adobe AIR. Run this regardless of whether the above runs
-     * or not.
+ (function() {
+    /**
+     * Determine if we're running in Adobe AIR. Run this regardless of whether
+     * the above runs or not.
      */
     var aScripts = document.getElementsByTagName('SCRIPT');
     var src = aScripts[0].src;
-    if (src.contains('app:')){
-    	Jx.isAir = true;
+    if (src.contains('app:')) {
+        Jx.isAir = true;
     } else {
         Jx.isAir = false;
     }
 })();
 
 /**
- * Method: applyPNGFilter
+ * APIMethod: applyPNGFilter
  *
  * Static method that applies the PNG Filter Hack for IE browsers
  * when showing 24bit PNG's.  Used automatically for img tags with
@@ -13989,25 +13985,27 @@
  * Parameters:
  * object {Object} the object (img) to which the filter needs to be applied.
  */
-Jx.applyPNGFilter = function(o)  {
-   var t=Jx.aPixel.src;
-   if( o.src != t ) {
-       var s=o.src;
-       o.src = t;
-       o.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+s+"',sizingMethod='scale')";
-   }
+Jx.applyPNGFilter = function(o) {
+    var t = Jx.aPixel.src;
+    if (o.src != t) {
+        var s = o.src;
+        o.src = t;
+        o.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + s + "',sizingMethod='scale')";
+    }
 };
 
 /**
  * NOTE: We should consider moving the image loading code into a separate
  * class. Perhaps as Jx.Preloader which could extend Jx.Object
  */
-Jx.imgQueue = [];   //The queue of images to be loaded
-Jx.imgLoaded = {};  //a hash table of images that have been loaded and cached
-Jx.imagesLoading = 0; //counter for number of concurrent image loads 
-
+Jx.imgQueue = [];
+//The queue of images to be loaded
+Jx.imgLoaded = {};
+//a hash table of images that have been loaded and cached
+Jx.imagesLoading = 0;
+//counter for number of concurrent image loads
 /**
- * Method: addToImgQueue
+ * APIMethod: addToImgQueue
  * 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.
@@ -14031,9 +14029,10 @@
 };
 
 /**
- * Method: checkImgQueue
+ * APIMethod: checkImgQueue
  *
- * An internal method that ensures no more than 2 images are loading at a time.
+ * An internal method that ensures no more than 2 images are loading at a
+ * time.
  */
 Jx.checkImgQueue = function() {
     while (Jx.imagesLoading < 2 && Jx.imgQueue.length > 0) {
@@ -14050,14 +14049,18 @@
     var obj = Jx.imgQueue.shift();
     if (obj) {
         ++Jx.imagesLoading;
-        obj.element.onload = function(){--Jx.imagesLoading; Jx.checkImgQueue();};
-        obj.element.onerror = function(){--Jx.imagesLoading; Jx.checkImgQueue();};
+        obj.element.onload = function() {--Jx.imagesLoading;
+            Jx.checkImgQueue();
+        };
+        obj.element.onerror = function() {--Jx.imagesLoading;
+            Jx.checkImgQueue();
+        };
         obj.element.src = obj.src;
     }
 };
 
 /**
- * Method: createIframeShim
+ * APIMethod: createIframeShim
  * 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.
@@ -14070,14 +14073,14 @@
  */
 Jx.createIframeShim = function() {
     return new Element('iframe', {
-        'class':'jxIframeShim',
-        'scrolling':'no',
-        'frameborder':0,
-        'src': Jx.baseURL+'/empty.html'
+        'class': 'jxIframeShim',
+        'scrolling': 'no',
+        'frameborder': 0,
+        'src': Jx.baseURL + '/empty.html'
     });
 };
 /**
- * Method: getNumber
+ * APIMethod: getNumber
  * safely parse a number and return its integer value.  A NaN value 
  * returns 0.  CSS size values are also parsed correctly.
  *
@@ -14088,12 +14091,12 @@
  * {Integer} the integer value that the parameter represents
  */
 Jx.getNumber = function(n, def) {
-  var result = n===null||isNaN(parseInt(n,10))?(def||0):parseInt(n,10);
-  return result;
+    var result = n === null || isNaN(parseInt(n, 10)) ? (def || 0) : parseInt(n, 10);
+    return result;
 };
 
 /**
- * Method: getPageDimensions
+ * APIMethod: getPageDimensions
  * return the dimensions of the browser client area.
  *
  * Returns:
@@ -14101,14 +14104,25 @@
  * that represent the width and height of the browser client area.
  */
 Jx.getPageDimensions = function() {
-    return {width: window.getWidth(), height: window.getHeight()};
+    return {
+        width: window.getWidth(),
+        height: window.getHeight()
+    };
 };
 
-Jx.type = function(obj){
-    if (typeof obj == 'undefined'){
+/**
+ * APIMethod: Jx.type
+ * safely return the type of an object using the mootools type system
+ *
+ * Returns:
+ * {Object} an object containing a width and height property 
+ * that represent the width and height of the browser client area.
+ */
+Jx.type = function(obj) {
+    if (typeof obj == 'undefined') {
         return false;
     }
-    return obj.jxFamily ? obj.jxFamily : $type(obj);
+    return obj.jxFamily || $type(obj);
 };
 
 /**
@@ -14127,277 +14141,288 @@
  * NOTE: Many of these methods can be replaced with mootools-more's 
  * Element.Measure
  */
- 
- 
-;(function($){ // Wrapper for document.id
 
-    
-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:
-     * {String} the box sizing of the element.
-     */
-    getBoxSizing : function() {
-      var result = 'content-box';
-      if (Browser.Engine.trident || Browser.Engine.presto) { 
-          var cm = document["compatMode"];
-          if (cm == "BackCompat" || cm == "QuirksMode") { 
-              result = 'border-box'; 
-          } else {
-              result = 'content-box'; 
-        }
-      } else {
-          if (arguments.length === 0) {
-              node = document.documentElement; 
-          }
-          var sizing = this.getStyle("-moz-box-sizing");
-          if (!sizing) { 
-              sizing = this.getStyle("box-sizing"); 
-          }
-          result = (sizing ? sizing : 'content-box');
-      }
-      return result;
-    },
-    /**
-     * 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:
-     * {Object} an object with two properties, width and height, that
-     * are the size of the content area of the measured element.
-     */
-    getContentBoxSize : function() {
-        var w = this.offsetWidth;
-        var h = this.offsetHeight;
-        var s = this.getSizes(['padding','border']);
-        w = w - s.padding.left - s.padding.right - s.border.left - s.border.right;
-        h = h - s.padding.bottom - s.padding.top - s.border.bottom - s.border.top;
-        return {width: w, height: h};
-    },
-    /**
-     * 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:
-     * {Object} an object with two properties, width and height, that
-     * are the size of the border area of the measured element.
-     */
-    getBorderBoxSize: function() {
-        var w = this.offsetWidth;
-        var h = this.offsetHeight;
-        return {width: w, height: h}; 
-    },
-    
-    /**
-     * 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:
-     * {Object} an object with two properties, width and height, that
-     * are the size of the margin area of the measured element.
-     */
-    getMarginBoxSize: function() {
-        var s = this.getSizes(['margin']);
-        var w = this.offsetWidth + s.margin.left + s.margin.right;
-        var h = this.offsetHeight + s.margin.top + s.margin.bottom;
-        return {width: w, height: h};
-    },
-    /**
-     * Method: getSizes
-     * measure the size of various styles on various edges and return
-     * the values.
-     *
-     * Parameters:
-     * styles - array, the styles to compute.  By default, this is ['padding',
-     *     'border','margin'].  If you don't need all the styles, just request
-     *     the ones you need to minimize compute time required.
-     * edges - array, the edges to compute styles for.  By default,  this is
-     *     ['top','right','bottom','left'].  If you don't need all the edges,
-     *     then request the ones you need to minimize compute time.
-     *
-     * Returns:
-     * {Object} an object with one member for each requested style.  Each
-     * style member is an object containing members for each requested edge.
-     * Values are the computed style for each edge in pixels.
-     */
-    getSizes: function(which, edges) {
-      which = which || ['padding','border','margin'];
-      edges = edges || ['left','top','right','bottom'];
-      var result={};
-      which.each(function(style) {
-        result[style]={};
-        edges.each(function(edge) {
-            var e = (style == 'border') ? edge + '-width' : edge;
-            var n = this.getStyle(style+'-'+e);
-            result[style][edge] = n===null||isNaN(parseInt(n,10))?0:parseInt(n,10);
-        }, this);
-      }, this);
-      return result;
-    },    
-    /**
-     * 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
-     * size of the element may be larger depending on padding and
-     * 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.
-     */
-    setContentBoxSize : function(size) {
-        if (this.getBoxSizing() == 'border-box') {
-            var m = this.measure(function() {
-                return this.getSizes(['padding','border']);
-            });
-            if ($defined(size.width)) {
-                var width = size.width + m.padding.left + m.padding.right + m.border.left + m.border.right;
-                if (width < 0) {
-                    width = 0;
+
+(function($) {
+    // Wrapper for document.id
+
+    Element.implement({
+        /**
+         * APIMethod: 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:
+         * {String} the box sizing of the element.
+         */
+        getBoxSizing: function() {
+            var result = 'content-box';
+            if (Browser.Engine.trident || Browser.Engine.presto) {
+                var cm = document["compatMode"];
+                if (cm == "BackCompat" || cm == "QuirksMode") {
+                    result = 'border-box';
+                } else {
+                    result = 'content-box';
                 }
-                this.style.width = width + 'px';
+            } else {
+                if (arguments.length === 0) {
+                    node = document.documentElement;
+                }
+                var sizing = this.getStyle("-moz-box-sizing");
+                if (!sizing) {
+                    sizing = this.getStyle("box-sizing");
+                }
+                result = (sizing ? sizing: 'content-box');
             }
-            if ($defined(size.height)) {
-                var height = size.height + m.padding.top + m.padding.bottom + m.border.top + m.border.bottom;
-                if (height < 0) {
-                    height = 0;
+            return result;
+        },
+        /**
+         * APIMethod: 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:
+         * {Object} an object with two properties, width and height, that
+         * are the size of the content area of the measured element.
+         */
+        getContentBoxSize: function() {
+            var w = this.offsetWidth;
+            var h = this.offsetHeight;
+            var s = this.getSizes(['padding', 'border']);
+            w = w - s.padding.left - s.padding.right - s.border.left - s.border.right;
+            h = h - s.padding.bottom - s.padding.top - s.border.bottom - s.border.top;
+            return {
+                width: w,
+                height: h
+            };
+        },
+        /**
+         * APIMethod: 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:
+         * {Object} an object with two properties, width and height, that
+         * are the size of the border area of the measured element.
+         */
+        getBorderBoxSize: function() {
+            var w = this.offsetWidth;
+            var h = this.offsetHeight;
+            return {
+                width: w,
+                height: h
+            };
+        },
+
+        /**
+         * APIMethod: 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:
+         * {Object} an object with two properties, width and height, that
+         * are the size of the margin area of the measured element.
+         */
+        getMarginBoxSize: function() {
+            var s = this.getSizes(['margin']);
+            var w = this.offsetWidth + s.margin.left + s.margin.right;
+            var h = this.offsetHeight + s.margin.top + s.margin.bottom;
+            return {
+                width: w,
+                height: h
+            };
+        },
+        /**
+         * APIMethod: getSizes
+         * measure the size of various styles on various edges and return
+         * the values.
+         *
+         * Parameters:
+         * styles - array, the styles to compute.  By default, this is
+         * ['padding', 'border','margin'].  If you don't need all the styles,
+         * just request the ones you need to minimize compute time required.
+         * edges - array, the edges to compute styles for.  By default,  this
+         * is ['top','right','bottom','left'].  If you don't need all the
+         * edges, then request the ones you need to minimize compute time.
+         *
+         * Returns:
+         * {Object} an object with one member for each requested style.  Each
+         * style member is an object containing members for each requested
+         * edge. Values are the computed style for each edge in pixels.
+         */
+        getSizes: function(which, edges) {
+            which = which || ['padding', 'border', 'margin'];
+            edges = edges || ['left', 'top', 'right', 'bottom'];
+            var result = {};
+            which.each(function(style) {
+                result[style] = {};
+                edges.each(function(edge) {
+                    var e = (style == 'border') ? edge + '-width': edge;
+                    var n = this.getStyle(style + '-' + e);
+                    result[style][edge] = n === null || isNaN(parseInt(n, 10)) ? 0: parseInt(n, 10);
+                },
+                this);
+            },
+            this);
+            return result;
+        },
+        /**
+         * APIMethod: 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
+         * size of the element may be larger depending on padding and
+         * 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.
+         */
+        setContentBoxSize: function(size) {
+            if (this.getBoxSizing() == 'border-box') {
+                var m = this.measure(function() {
+                    return this.getSizes(['padding', 'border']);
+                });
+                if ($defined(size.width)) {
+                    var width = size.width + m.padding.left + m.padding.right + m.border.left + m.border.right;
+                    if (width < 0) {
+                        width = 0;
+                    }
+                    this.style.width = width + 'px';
                 }
-                this.style.height = height + 'px';
+                if ($defined(size.height)) {
+                    var height = size.height + m.padding.top + m.padding.bottom + m.border.top + m.border.bottom;
+                    if (height < 0) {
+                        height = 0;
+                    }
+                    this.style.height = height + 'px';
+                }
+            } else {
+                if ($defined(size.width) && size.width >= 0) {
+                    this.style.width = size.width + 'px';
+                }
+                if ($defined(size.height) && size.height >= 0) {
+                    this.style.height = size.height + 'px';
+                }
             }
-        } else {
-            if ($defined(size.width) && size.width >= 0) {
-                this.style.width = size.width + 'px';
+        },
+        /**
+         * APIMethod: 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
+         * content areaof the element may be larger depending on padding and
+         * 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.
+         */
+        setBorderBoxSize: function(size) {
+            if (this.getBoxSizing() == 'content-box') {
+                var m = this.measure(function() {
+                    return this.getSizes();
+                });
+
+                if ($defined(size.width)) {
+                    var width = size.width - m.padding.left - m.padding.right - m.border.left - m.border.right - m.margin.left - m.margin.right;
+                    if (width < 0) {
+                        width = 0;
+                    }
+                    this.style.width = width + 'px';
+                }
+                if ($defined(size.height)) {
+                    var height = size.height - m.padding.top - m.padding.bottom - m.border.top - m.border.bottom - m.margin.top - m.margin.bottom;
+                    if (height < 0) {
+                        height = 0;
+                    }
+                    this.style.height = height + 'px';
+                }
+            } else {
+                if ($defined(size.width) && size.width >= 0) {
+                    this.style.width = size.width + 'px';
+                }
+                if ($defined(size.height) && size.height >= 0) {
+                    this.style.height = size.height + 'px';
+                }
             }
-            if ($defined(size.height) && size.height >= 0) {
-                this.style.height = size.height + 'px';
+        },
+
+        /**
+         * APIMethod: 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 = document.id(this.parentNode);
+            while (parent != node && parent && parent.parentNode && parent.parentNode != parent) {
+                parent = document.id(parent.parentNode);
             }
+            return parent == node;
+        },
+
+        /**
+         * APIMethod: 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 = document.id(o.parentNode);
+            }
+            return o.tagName == type ? o: false;
         }
-    },
-    /**
-     * 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
-     * content areaof the element may be larger depending on padding and
-     * 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.
-     */
-    setBorderBoxSize : function(size) {
-      if (this.getBoxSizing() == 'content-box') {
-          var m = this.measure(function() {
-              return this.getSizes();
-          });
-          
-        if ($defined(size.width)) {
-          var width = size.width - m.padding.left - m.padding.right - m.border.left - m.border.right - m.margin.left - m.margin.right;
-          if (width < 0) {
-            width = 0;
-          }
-          this.style.width = width + 'px';
+    });
+
+    Array.implement({
+
+        /**
+         * APIMethod: swap
+         * swaps 2 elements of an array
+         * 
+         * Parameters:
+         * a - the first position to swap
+         * b - the second position to swap
+         */
+        'swap': function(a, b) {
+            var temp;
+            temp = this[a];
+            this[a] = this[b];
+            this[b] = temp;
         }
-        if ($defined(size.height)) {
-          var height = size.height - m.padding.top - m.padding.bottom - m.border.top - m.border.bottom - m.margin.top - m.margin.bottom;
-          if (height < 0) {
-            height = 0;
-          }
-          this.style.height = height + 'px';
-        }
-      } else {
-        if ($defined(size.width) && size.width >= 0) {
-          this.style.width = size.width + 'px';
-        }
-        if ($defined(size.height) && size.height >= 0) {
-          this.style.height = size.height + 'px';
-        }
-      }
-    },
-    
-    /**
-     * 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 = document.id(this.parentNode);
-        while (parent != node && parent && parent.parentNode && parent.parentNode != parent) {
-            parent = document.id(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 = document.id(o.parentNode);
-        }
-        return o.tagName == type ? o : false;
-    }
-} );
 
-Array.implement({
-    
-    /**
-     * Method: swap
-     * swaps 2 elements of an array
-     * 
-     * Parameters:
-     * a - the first position to swap
-     * b - the second position to swap
-     */
-    'swap': function(a,b){
-        var temp;
-        temp = this[a];
-        this[a] = this[b];
-        this[b] = temp;
-    }
-    
-});
+    });
 
-})(document.id || $); // End Wrapper for document.id 
-
+})(document.id || $);
+// End Wrapper for document.id
 /**
  * Class: Jx.Styles
  * Dynamic stylesheet class. Used for creating and manipulating dynamic 
@@ -14560,38 +14585,33 @@
  * Class: Jx.Object
  * Base class for all other object in the JxLib framework. This class
  * implements both mootools mixins Events and Options so the rest of the
- * classes don't need to. 
- * 
+ * classes don't need to.
+ *
  * Example:
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Object = new Class({
-	
+    Family: "Jx.Object",
     Implements: [Options, Events],
-	
-    Family: "Jx.Object",
-    
     plugins: new Hash(),
-    
     pluginNamespace: 'Other',
-    
     parameters: ['options'],
-	
-	initialize: function(){
+
+    initialize: function(){
         //normalize arguments
         var numArgs = arguments.length;
         var options = {};
-        
+
         if (numArgs > 0) {
-            if (numArgs === 1 
-                    && (Jx.type(arguments[0])==='object' || Jx.type(arguments[0])==='Hash') 
-                    && this.parameters.length === 1 
+            if (numArgs === 1
+                    && (Jx.type(arguments[0])==='object' || Jx.type(arguments[0])==='Hash')
+                    && this.parameters.length === 1
                     && this.parameters[0] === 'options') {
                 options = arguments[0];
             } else {
@@ -14612,7 +14632,7 @@
                 }
             }
         }
-        
+
         this.setOptions(options);
         this.fireEvent('preInit');
         this.init();
@@ -14622,7 +14642,7 @@
         this.fireEvent('postPluginInit');
         this.fireEvent('initializeDone');
     },
-    
+
     initPlugins: function () {
         //pluginNamespace must be defined in order to pass plugins to the object
         if ($defined(this.pluginNamespace)) {
@@ -14644,13 +14664,13 @@
             }
         }
     },
-    
+
     destroy: function () {
         this.fireEvent('preDestroy');
         this.cleanup();
         this.fireEvent('postDestroy');
     },
-    
+
     cleanup: function () {
         //detach plugins
         if (this.plugins.getLength > 0) {
@@ -14660,31 +14680,31 @@
             }, this);
         }
     },
-    
+
     init: $empty,
-    
+
     registerPlugin: function (plugin) {
         if (!this.plugins.has(plugin.name)) {
             this.plugins.set(plugin.name,  plugin);
         }
     },
-    
+
     deregisterPlugin: function (plugin) {
         if (this.plugins.has(plugin.name)) {
             this.plugins.erase(plugin.name);
-        } 
+        }
     }
 
 });
- // $Id: $
+// $Id: $
 /**
  * Class: Jx.Widget
- * Base class for all widgets (visual classes) in the JxLib Framework. This 
- * class extends <Jx.Object> and adds the Chrome, ContentLoader, Addable, and 
+ * Base class for all widgets (visual classes) in the JxLib Framework. This
+ * class extends <Jx.Object> and adds the Chrome, ContentLoader, Addable, and
  * AutoPosition mixins from the original framework.
- * 
+ *
  * ContentLoader:
- * 
+ *
  * ContentLoader functionality provides a consistent
  * mechanism for descendants of Jx.Widget to load content in one of
  * four different ways:
@@ -14698,7 +14718,7 @@
  * o using a URL to get the content remotely
  *
  * Chrome:
- * 
+ *
  * Chrome is the extraneous visual element that provides the look and feel to some elements
  * i.e. dialogs.  Chrome is added inside the element specified but may
  * bleed outside the element to provide drop shadows etc.  This is done by
@@ -14711,85 +14731,85 @@
  * the jxChrome class creates four images inside the chrome container that
  * are positioned in the top-left, top-right, bottom-left and bottom-right
  * corners of the chrome container and are sized to fill 50% of the width
- * and height.  The images are positioned and clipped such that the 
+ * and height.  The images are positioned and clipped such that the
  * appropriate corners of the chrome image are displayed in those locations.
  *
  *
  */
 Jx.Widget = new Class({
-	
-	Extends: Jx.Object,
-	
-	options: {
+    Family: "Jx.Widget",
+    Extends: Jx.Object,
+
+    options: {
         /**
          * Option: content
          * content may be an HTML element reference, the id of an HTML element
          *      already in the DOM, or an HTML string that becomes the inner HTML of
          *      the element.
          */
-		content: null,
-		/**
-		 * Option: contentURL
-		 * the URL to load content from
-		 */
-		contentURL: null,
-		template: '<div class="jxWidget"></div>'
-	},
-	
-	classes: new Hash({
-	    domObj: 'jxWidget'
-	}),
-	
-	/**
-	 * Property: domObj
-	 * The HTMLElement that represents this widget.
-	 */
-	domObj: null,
-	
-	/**
+        content: null,
+        /**
+         * Option: contentURL
+         * the URL to load content from
+         */
+        contentURL: null,
+        template: '<div class="jxWidget"></div>'
+    },
+
+    classes: new Hash({
+        domObj: 'jxWidget'
+    }),
+
+    /**
+     * Property: domObj
+     * The HTMLElement that represents this widget.
+     */
+    domObj: null,
+
+    /**
      * Property: contentIsLoaded
      *
      * tracks the load state of the content, specifically useful
      * in the case of remote content.
-     */ 
+     */
     contentIsLoaded: false,
-    
+
     /**
      * Property: chrome
      * the DOM element that contains the chrome
      */
     chrome: null,
-    
-    
+
+
     /**
      * APIMethod: init
-     * sets up the base widget code and runs the render function. 
+     * sets up the base widget code and runs the render function.
      */
     init: function(){
-		if (!this.options.deferRender) {
-		    this.fireEvent('preRender');
-		    this.render();
-		    this.fireEvent('postRender');
-		} else {
-		    this.fireEvent('deferRender');
-		}
-	},
-    
-    
+        if (!this.options.deferRender) {
+            this.fireEvent('preRender');
+            this.render();
+            this.fireEvent('postRender');
+        } else {
+            this.fireEvent('deferRender');
+        }
+    },
+
+
     /**
      * Method: loadContent
      *
      * triggers loading of content based on options set for the current
      * object.
      *
-     * Parameters: 
+     * Parameters:
      * element - {Object} the element to insert the content into
      *
      * Events:
      *
      * ContentLoader adds the following events to an object.  You can
      * register for these events using the addEvent method or by providing
-     * callback functions via the on{EventName} properties in the options 
+     * callback functions via the on{EventName} properties in the options
      * object
      *
      * contentLoaded - called when the content has been loaded.  If the
@@ -14797,7 +14817,7 @@
      *     returns.
      * contentLoadFailed - called if the content fails to load, primarily
      *     useful when using the contentURL method of loading content.
-     */     
+     */
     loadContent: function(element) {
         element = document.id(element);
         if (this.options.content) {
@@ -14811,9 +14831,9 @@
                 if (this.options.content.addTo) {
                     this.options.content.addTo(element);
                 } else {
-                    element.appendChild(c);                    
+                    element.appendChild(c);
                 }
-                this.contentIsLoaded = true;                
+                this.contentIsLoaded = true;
             } else {
                 element.innerHTML = this.options.content;
                 this.contentIsLoaded = true;
@@ -14821,7 +14841,7 @@
         } else if (this.options.contentURL) {
             this.contentIsLoaded = false;
             this.req = new Request({
-                url: this.options.contentURL, 
+                url: this.options.contentURL,
                 method:'get',
                 evalScripts:true,
                 onSuccess:(function(html) {
@@ -14831,7 +14851,7 @@
                         $clear(this.reqTimeout);
                     }
                     this.fireEvent('contentLoaded', this);
-                }).bind(this), 
+                }).bind(this),
                 onFailure: (function(){
                     this.contentIsLoaded = true;
                     this.fireEvent('contentLoadFailed', this);
@@ -14853,7 +14873,7 @@
             this.fireEvent('contentLoaded', this);
         }
     },
-    
+
     processContent: function(element) {
         $A(element.childNodes).each(function(node){
             if (node.tagName == 'INPUT' || node.tagName == 'SELECT' || node.tagName == 'TEXTAREA') {
@@ -14873,7 +14893,7 @@
             }
         }, this);
     },
-    
+
     /**
      * Method: position
      * positions an element relative to another element
@@ -14895,10 +14915,10 @@
      * 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.  
+     * 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.  
+     * the reference element.
      * o 'left right' aligns the right edge of the element to the left
      * edge of the reference element.
      *
@@ -14907,23 +14927,23 @@
      * 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.  
+     * 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.  
+     * 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 - the horizontal positioning rule to use to position the 
+     * 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 
+     * 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
@@ -14935,7 +14955,7 @@
         var hor = $splat(options.horizontal || ['center center']);
         var ver = $splat(options.vertical || ['center center']);
         var offsets = $merge({top:0,right:0,bottom:0,left:0}, options.offsets || {});
-        
+
         var coords = relative.getCoordinates(); //top, left, width, height
         var page;
         var scroll;
@@ -14950,7 +14970,7 @@
             // adjust coords for the scroll offsets to make the object
             // appear in the right part of the page.
             coords.left += scroll.x;
-            coords.top += scroll.y;            
+            coords.top += scroll.y;
         } else if (element.parentNode == relative) {
             // if the element is opening *inside* its relative, we want
             // it to position correctly within it so top/left becomes
@@ -14972,7 +14992,7 @@
             if (!isNaN(parseInt(parts[0],10))) {
                 n = parseInt(parts[0],10);
                 if (n>=0) {
-                    left = n;                    
+                    left = n;
                 } else {
                     left = coords.left + coords.width + n;
                 }
@@ -14988,7 +15008,7 @@
                     default:
                         left = coords.left;
                         break;
-                }                
+                }
             }
             if (!isNaN(parseInt(parts[1],10))) {
                 n = parseInt(parts[1],10);
@@ -15017,7 +15037,7 @@
                         left = left - Math.round(size.width/2);
                         right = left + size.width;
                         break;
-                }                
+                }
             }
             return (left >= scroll.x && right <= scroll.x + page.width);
         })) {
@@ -15032,7 +15052,7 @@
             }
         }
         element.setStyle('left', left);
-        
+
         if (!ver.some(function(opt) {
                 var parts = opt.split(' ');
                 if (parts.length != 2) {
@@ -15061,7 +15081,7 @@
                         bottom = top + size.height;
                     } else {
                         bottom = top + n;
-                        top = bottom - size.height; 
+                        top = bottom - size.height;
                     }
                 } else {
                     switch(parts[1]) {
@@ -15079,7 +15099,7 @@
                             top = top - Math.round(size.height/2);
                             bottom = top + size.height;
                             break;
-                    }                    
+                    }
                 }
                 return (top >= scroll.y && bottom <= scroll.y + page.height);
             })) {
@@ -15094,7 +15114,7 @@
                 }
             }
             element.setStyle('top', top);
-            
+
             /* update the jx layout if necessary */
             var jxl = element.retrieve('jxLayout');
             if (jxl) {
@@ -15102,7 +15122,7 @@
                 jxl.options.top = top;
             }
     },
-    
+
     /**
      * Method: makeChrome
      * create chrome on an element.
@@ -15115,12 +15135,12 @@
             'class':'jxChrome',
             events: {
                 contextmenu: function(e) { e.stop(); }
-            }      
+            }
         });
-        
+
         /* add to element so we can get the background image style */
         element.adopt(c);
-        
+
         /* pick up any offset because of chrome, set
          * through padding on the chrome object.  Other code can then
          * make use of these offset values to fix positioning.
@@ -15129,7 +15149,7 @@
             return this.getSizes(['padding']).padding;
         });
         c.setStyle('padding', 0);
-        
+
         /* get the chrome image from the background image of the element */
         /* the app: protocol check is for adobe air support */
         var src = c.getStyle('backgroundImage');
@@ -15164,12 +15184,12 @@
         if (!window.opera) {
             c.adopt(Jx.createIframeShim());
         }
-        
+
         /* remove from DOM so the other resizing logic works as expected */
-        c.dispose();    
+        c.dispose();
         this.chrome = c;
     },
-    
+
     /**
      * Method: showChrome
      * show the chrome on an element.  This creates the chrome if necessary.
@@ -15183,16 +15203,19 @@
      * element - {HTMLElement} the element to show the chrome on.
      */
     showChrome: function(element) {
-        element = document.id(element);
-        if (!this.chrome) {
-            this.makeChrome(element);
+        element = document.id(element) || document.id(this);
+        if (element) {
+            if (!this.chrome) {
+                this.makeChrome(element);
+                element.addClass('jxHasChrome');
+            }
+            this.resizeChrome(element);
+            if (element && this.chrome.parentNode !== element) {
+                element.adopt(this.chrome);
+            }
         }
-        this.resizeChrome(element);
-        if (element && this.chrome.parentNode !== element) {
-            element.adopt(this.chrome);
-        }
     },
-    
+
     /**
      * Method: hideChrome
      * removes the chrome from the DOM.  If you do this, you can't
@@ -15200,22 +15223,23 @@
      */
     hideChrome: function() {
         if (this.chrome) {
+            this.chrome.parentNode.removeClass('jxHasChrome');
             this.chrome.dispose();
         }
     },
-    
+
     resizeChrome: function(o) {
         if (this.chrome && Browser.Engine.trident4) {
             this.chrome.setContentBoxSize(document.id(o).getBorderBoxSize());
         }
     },
-    
+
     /**
      * Method: addTo
      * 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. 
+     * then the element is inserted adjacent to the reference node.
      *
      * Parameters:
      * reference - {Object} the DOM element or id of a DOM element
@@ -15236,25 +15260,25 @@
         }
         return this;
     },
-    
+
     toElement: function() {
         return this.domObj;
     },
-    
+
     /**
      * APIMethod: processTemplate
      * This function pulls the needed elements from a provided template
-     * 
+     *
      * Parameters:
      * template - the template to use in grabbing elements
      * classes - an array of class names to use in grabbing elements
      * container - the container to add the template into
-     * 
+     *
      * Returns:
      * a hash object containing the requested Elements keyed by the class names
      */
     processTemplate: function(template,classes,container){
-        
+
         var h = new Hash();
         var element;
         if ($defined(container)){
@@ -15268,11 +15292,11 @@
                 h.set(klass,el);
             }
         });
-        
+
         return h;
-        
+
     },
-    
+
     /**
      * Method: generateId
      * Used to generate a unique ID for Jx Widgets.
@@ -15283,14 +15307,14 @@
         delete this.uid;
         return prefix + uid;
     },
-    
+
     remove: function(){
         var el = document.id(this.addable) || document.id(this.domObj);
         if (el) {
             el.dispose();
         }
     },
-    
+
     cleanup: function(){
         if ($defined(this.domObj)) {
             this.domObj.destroy();
@@ -15303,14 +15327,14 @@
         }
         this.parent();
     },
-    
+
     render: function() {
         this.elements = this.processElements(this.options.template,
             this.classes);
     },
-    
+
     elements: null,
-    
+
     processElements: function(template, classes) {
         var keys = classes.getValues();
         elements = this.processTemplate(template, keys);
@@ -15325,10 +15349,10 @@
 
 
 /**
- * It seems AIR never returns an XHR that "fails" by not finding the 
+ * It seems AIR never returns an XHR that "fails" by not finding the
  * appropriate file when run in the application sandbox and retrieving a local
- * file. This affects Jx.ContentLoader in that a "failed" event is never fired. 
- * 
+ * file. This affects Jx.ContentLoader in that a "failed" event is never fired.
+ *
  * To fix this, I've added a timeout that waits about 10 seconds or so in the code above
  * for the XHR to return, if it hasn't returned at the end of the timeout, we cancel the
  * XHR and fire the failure event.
@@ -15356,10 +15380,8 @@
 }
 
 Jx.Selection = new Class({
-    
+    Family: 'Jx.Selection',
     Extends: Jx.Object,
-    Family: 'Jx.Selection',
-    
     options: {
         /**
          * Option: eventToFire
@@ -15499,7 +15521,7 @@
     selection: null,
     options: {
         /**
-         * APIProperty: items
+         * Option: items
          * an array of items to add to the list right away
          */
         items: null,
@@ -15511,7 +15533,7 @@
          */
         hover: false,
         /**
-         * APIProperty: hoverClass
+         * Option: hoverClass
          * the CSS class name to add to the wrapper element when the mouse is
          * over an item
          */
@@ -15525,7 +15547,7 @@
          */
         press: false,
         /**
-         * APIProperty: pressedClass
+         * Option: pressedClass
          * the CSS class name to add to the wrapper element when the mouse is
          * down on an item
          */
@@ -15541,6 +15563,10 @@
         select: false
     },
     
+    /**
+     * Method: init
+     * internal method to initialize this object
+     */
     init: function() {
         this.container = document.id(this.options.container);
         this.container.store('jxList', this);
@@ -15623,6 +15649,10 @@
         }
     },
     
+    /**
+     * Method: cleanup
+     * destroy the list and release anything it references
+     */
     cleanup: function() {
         this.container.getChildren().each(function(item){
             this.remove(item);
@@ -15642,7 +15672,8 @@
      * be provided.  All items are inserted sequentially at the indicated
      * position.
      * position - {mixed} optional, the position to add the element, either
-     * an integer position in the list or another item to place this item after
+     * an integer position in the list or another item to place this item
+     * after
      */
     add: function(item, position) {
         if (Jx.type(item) == 'array') {
@@ -15694,12 +15725,12 @@
         }
     },
     /**
-     * Method: remove
+     * APIMethod: remove
      * remove an item from the list of items
      *
      * Parameters:
-     * item - {mixed} the item to remove or the index of the item to remove.  An
-     * array of items may also be provided.
+     * item - {mixed} the item to remove or the index of the item to remove. 
+     * An array of items may also be provided.
      *
      * Returns:
      * {mixed} the item that was removed or null if the item is not a member
@@ -15718,7 +15749,7 @@
         return null;
     },
     /**
-     * Method: replace
+     * APIMethod: replace
      * replace one item with another
      *
      * Parameters:
@@ -15823,6 +15854,14 @@
             this.remove(item);
         }, this);
     },
+    /**
+     * APIMethod: setSelection
+     * sets the <Jx.Selection> object that this list will use for selection
+     * events.
+     *
+     * Parameters:
+     * {<Jx.Selection>} the selection object, or null to remove it.
+     */
     setSelection: function(selection) {
         if (this.selection) {
             this.selection.removeEvents(this.bound);
@@ -15843,274 +15882,222 @@
 
 });// $Id: $
 /**
- * Class: Jx.Compare
+ * Class: Jx.record
  * 
  * Extends: <Jx.Object>
  * 
- * Class that holds functions for doing comparison operations.
- * This class requires the clientside Date() extensions (deps/date.js).
- * 
- * notes:
- * Each function that does a comparison returns
- * 
- * 0 - if equal.
- * 1 - if the first value is greater that the second.
- * -1 - if the first value is less than the second.
- * 
- * Example:
- * (code)
- * (end)
+ * This class is used as a representation (or container) for a single row
+ * of data in a <Jx.Store>. It is not usually directly instantiated by the 
+ * developer but rather by the store itself.
  *
  * License: 
  * Copyright (c) 2009, Jon Bomgardner.
  * 
  * This file is licensed under an MIT style license
  */
-
-Jx.Compare = new Class({
+Jx.Record = new Class({
+    
     Extends: Jx.Object,
-	
-    options: { separator: '.' },
-	
+    Family: 'Jx.Record',
+    
+    options: {
+        /**
+         * Option: separator
+         * The separator to pass to the comparator
+         * constructor (<Jx.Compare>) - defaults to '.'
+         */
+        separator : '.',
+        
+        primaryKey: null
+    },
     /**
-     * APIMethod: alphanumeric
-     * Compare alphanumeric variables. This is case sensitive
+     * Property: data
+     * The data for this record
+     */
+    data: null,
+    /**
+     * Property: state
+     * used to determine the state of this record. When not null (meaning no 
+     * changes were made) this should be one of
      * 
-     * Parameters:
-     * a - a value
-     * b - another value
+     * - Jx.Store.Record.UPDATE
+     * - Jx.Store.Record.DELETE
+     * - Jx.Store.Record.INSERT
      */
-    alphanumeric: function (a, b) {
-        return (a === b) ? 0 :(a < b) ? -1 : 1;
-    },
-	
+    state: null,
     /**
-     * APIMethod: numeric
-     * Compares numbers
-     *
-     * Parameters:
-     * a - a number
-     * b - another number
+     * Property: columns
+     * Holds a reference to the columns for this record. These are usually
+     * passed to the record from the store. This should be an array of objects
+     * where the objects represent the columns. The object should take the form:
+     * 
+     * (code)
+     * {
+     *     name: <column name>,
+     *     type: <column type>,
+     *     ..additional options required by the record implementation...
+     * }
+     * (end)
+     * 
+     * The type of the column should be one of alphanumeric, numeric, date, 
+     * boolean, or currency.
      */
-    numeric: function (a, b) {
-        return this.alphanumeric(this.convert(a), this.convert(b));
+    columns: null,
+    
+    parameters: ['store', 'columns', 'data', 'options'],
+    
+    init: function () {
+        this.parent();
+        if ($defined(this.options.columns)) {
+            this.columns = this.options.columns;
+        }
+        
+        if ($defined(this.options.data)) {
+            this.processData(this.options.data);
+        } else {
+            this.data = new Hash();
+        }
+        
+        if ($defined(this.options.store)) {
+            this.store = this.options.store;
+        }
+            
     },
-	
     /**
-     * Method: _convert
-     * Normalizes numbers relative to the separator.
+     * APIMethod: get
+     * returns the value of the requested column. Can be programmed to handle
+     * pseudo-columns (such as the primaryKey column implemented in this base
+     * record).
      * 
      * Parameters:
-     * val - the number to normalize
-     * 
-     * Returns:
-     * the normalized value
+     * column - the string, index, or object of the requested column
      */
-    convert: function (val) {
-        if (Jx.type(val) === 'string') {
-            val = parseFloat(val.replace(/^[^\d\.]*([\d., ]+).*/g, "$1").replace(new RegExp("[^\\\d" + this.options.separator + "]", "g"), '').replace(/,/, '.')) || 0;
+    get: function (column) {
+        var type = Jx.type(column);
+        if (type !== 'object') {
+            if (column === 'primaryKey') {
+                column = this.resolveCol(this.options.primaryKey);
+            } else {
+                column = this.resolveCol(column);
+            }
         }
-        return val || 0;
+        if (this.data.has(column.name)) {
+            return this.data.get(column.name);
+        } else {
+            return null;
+        }
     },
-	
     /**
-     * APIMethod: ignorecase
-     * Compares to alphanumeric strings without regard to case.
+     * APIMethod: set
+     * Sets a given value into the requested column. 
      * 
-     * Parameters:
-     * a - a value
-     * b - another value
+     *  Parameters:
+     *  column - the object, index, or string name of the target column
+     *  data - the data to add to the column
      */
-    ignorecase: function (a, b) {
-        return this.alphanumeric(("" + a).toLowerCase(), ("" + b).toLowerCase());
+    set: function (column, data) {
+        var type = Jx.type(column);
+        if (type !== 'object') {
+            column = this.resolveCol(column);
+        }
+        
+        if (!$defined(this.data)) {
+            this.data = new Hash();
+        }
+        
+        var oldValue = this.get(column);
+        this.data.set(column.name, data);
+        this.state = Jx.Record.UPDATE;
+        this.store.fireEvent('storeColumnChanged', [this, column.name, oldValue, data]);
+            
     },
-	
     /**
-     * APIMethod: currency
-     * Compares to currency values.
+     * APIMethod: equals
+     * Compares the value of a particular column with a given value
      * 
      * Parameters:
-     * a - a currency value without the $
-     * b - another currency value without the $
+     * column - the column to compare with (either column name or index)
+     * value - the value to compare to.
+     * 
+     * Returns:
+     * True | False depending on the outcome of the comparison.
      */
-    currency: function (a, b) {
-        return this.numeric(a, b);
+    equals: function (column, value) {
+        var column = this.resolveCol(column);
+        if (!this.data.has(column.name)) {
+            return null;
+        } else {
+            if (!$defined(this.comparator)) {
+                this.comparator = new Jx.Compare({
+                    separator : this.options.separator
+                });
+            }
+            var fn = this.comparator[column.type].bind(this.comparator);
+            return (fn(this.get(column), value) === 0);
+        }
     },
-	
     /**
-     * APIMethod: date
-     * Compares 2 date values (either a string or an object)
+     * Method: processData
+     * This method takes the data passed in and puts it into the form the 
+     * record needs it in. This default implementation does nothing but
+     * assign the data to the data property but it can be overridden in
+     * subclasses to massge the data in any way needed.
      * 
      * Parameters:
-     * a - a date value 
-     * b - another date value
+     * data - the data to process
      */
-    date: function (a, b) {
-        var x = new Date().parse(a);
-        var y = new Date().parse(b);
-        return (x < y) ? -1 : (x > y) ? 1 : 0;
+    processData: function (data) {
+        this.data = $H(data);
     },
+    
     /**
-     * APIMethod: boolean
-     * Compares 2 bolean values 
+     * Method: resolveCol 
+     * Determines which column is being asked for and returns it.
      * 
-     * Parameters:
-     * a - a boolean value 
-     * b - another boolean value
+     * Parameters: 
+     * col - a number referencing a column in the store
+     * 
+     * Returns: 
+     * the column object referred to
      */
-    'boolean': function (a, b) {
-        return (a === true && b === false) ? -1 : (a === b) ? 0 : 1;
+    resolveCol : function (col) {
+        var t = Jx.type(col);
+        if (t === 'number') {
+            col = this.columns[col];
+        } else if (t === 'string') {
+            this.columns.each(function (column) {
+                if (column.name === col) {
+                    col = column;
+                }
+            }, this);
+        }
+        return col;
+    },
+    /**
+     * APIMethod: asHash
+     * Returns the data for this record as a Hash
+     */
+    asHash: function() {
+        return this.data;
     }
-	
-});// $Id: $
-/**
- * Class: Jx.Sort Base class for all of the sorting algorithm classes.
- * 
- * Extends: <Jx.Object>
- * 
- * Events: 
- * onStart() - called when the sort starts 
- * onEnd() - called when the sort stops
- * 
- * Example:
- * (code)
- * (end)
- *
- * License: 
- * Copyright (c) 2009, Jon Bomgardner.
- * 
- * This file is licensed under an MIT style license
- */
-Jx.Sort = new Class({
-
-    Family : 'Jx.Sort',
-
-    Extends : Jx.Object,
-
-    options : {
-        /**
-         * Option: timeIt
-         * whether to time the sort
-         */
-        timeIt : false,
-        /**
-         * Event: onStart
-         */
-        onStart : $empty,
-        /**
-         * Event: onEnd
-         */
-        onEnd : $empty
-    },
-    
-    /**
-     * Property: timer
-     * holds the timer instance
-     */
-    timer : null,
-    /**
-     * Property: data
-     * The data to sort
-     */
-    data : null,
-    /**
-     * Property: Comparator
-     * The comparator to use in sorting
-     */
-    comparator : $empty,
-    /**
-     * Property: col
-     * The column to sort by
-     */
-    col : null,
-    
-    parameters: ['data','fn','col','options'],
-
-    /**
-     * APIMethod: init
-     */
-    init : function () {
-        this.parent();
-        if (this.options.timeIt) {
-            this.addEvent('start', this.startTimer.bind(this));
-            this.addEvent('stop', this.stopTimer.bind(this));
-        }
-        this.data = this.options.data;
-        this.comparator = this.options.fn;
-        this.col = this.options.col;
-    },
-
-    /**
-     * APIMethod: sort 
-     * Actually does the sorting. Must be overridden by subclasses.
-     */
-    sort : $empty,
-
-    /**
-     * Method: startTimer 
-     * Saves the starting time of the sort
-     */
-    startTimer : function () {
-        this.timer = new Date();
-    },
-
-    /**
-     * Method: stopTimer 
-     * Determines the time the sort took.
-     */
-    stopTimer : function () {
-        this.end = new Date();
-        this.dif = this.timer.diff(this.end, 'ms');
-    },
-
-    /**
-     * APIMethod: setData 
-     * sets the data to sort
-     * 
-     * Parameters: 
-     * data - the data to sort
-     */
-    setData : function (data) {
-        if ($defined(data)) {
-            this.data = data;
-        }
-    },
-
-    /**
-     * APIMethod: setColumn 
-     * Sets the column to sort by
-     * 
-     * Parameters: 
-     * col - the column to sort by
-     */
-    setColumn : function (col) {
-        if ($defined(col)) {
-            this.col = col;
-        }
-    },
-
-    /**
-     * APIMethod: setComparator
-     * Sets the comparator to use in sorting
-     * 
-     * Parameters: 
-     * fn - the function to use as the comparator
-     */
-    setComparator : function (fn) {
-        this.comparator = fn;
-    }
-});
-// $Id: $
+});
+
+Jx.Record.UPDATE = 1;
+Jx.Record.DELETE = 2;
+Jx.Record.INSERT = 3;// $Id: $
 /**
  * Class: Jx.Store 
  * 
  * Extends: <Jx.Object>
  * 
- * This class is the base store. It keeps track of data. It
+ * This class is the  store. It keeps track of data. It
  * allows adding, deleting, iterating, sorting etc...
  * 
- * Events: onLoadFinished(store) - fired when the store finishes loading the
- * data onLoadError(store,data) - fired when there is an error loading the data
+ * For the most part the store is pretty "dumb" meaning it 
+ * starts with very limited functionality. Actually, it can't
+ * even load data by itself. Instead, it needs to have protocols,
+ * strategies, and a record class passed to it that it knows how to use
+ * and can use it.  
  * 
  * Example:
  * (code)
@@ -16121,14 +16108,12 @@
  * 
  * This file is licensed under an MIT style license
  */
-
 Jx.Store = new Class({
-
-    Extends : Jx.Object,
-
-    Family : "Jx.Store",
-
-    options : {
+    
+    Family: 'Jx.Store',
+    Extends: Jx.Object,
+    
+    options: {
         /**
          * Option: id
          * the identifier for this store
@@ -16144,62 +16129,39 @@
          */
         columns : [], 
         /**
-         * Option: defaultSort
-         * The default sorting type, currently set to merge but can be any of the
-         * sorters available
+         * Option: protocol
+         * The protocol to use for communication in this store. The store 
+         * itself doesn't actually use it but it is accessed by the strategies
+         * to do their work. This option is required and the store won't work without it.
          */
-        defaultSort : 'merge',
+        protocol: null,
         /**
-         * Option: separator
-         * The separator to pass to the comparator
-         * constructor (<Jx.Compare>) - defaults to '.'
+         * Option: strategies
+         * This is an array of instantiated strategy objects that will work
+         * on this store. They provide many services such as loading data,
+         * paging data, saving, and sorting (and anything else you may need 
+         * can be written). If none are passed in it will use the default 
+         * Jx.Store.Strategy.Full
          */
-        separator : '.',
+        strategies: null,
         /**
-         * Option: sortCols
-         * An array of columns to sort by arranged in the order you want 
-         * them sorted.
+         * Option: record
+         * This is a Jx.Store.Record instance or one of its subclasses. This is the 
+         * class that will be used to hold each individual record in the store.
+         * Don't pass in a instance of the class but rather the class name 
+         * itself. If none is passed in it will default to Jx.Store.Record
          */
-        sortCols : [], 
+        record: null,
         /**
-         * Event: onLoadFinished(store)
-         * event for a completed, successful data load
+         * Option: recordOptions
+         * Options to pass to each record as it's created.
          */
-        onLoadFinished : $empty,
-        /**
-         * Event: onLoadError(store,data)
-         * event for an unsuccessful load
-         */
-        onLoadError : $empty, 
-        /**
-         * Event: onColumnChanged
-         * event fired for changes to a column
-         */
-        onColumnChanged : $empty,
-        /**
-         * Option: paginate
-         * Set to true to enable pagination
-         */
-        paginate: false,
-        /**
-         * Option: pageSize
-         * Sets the size of each page. Only used if paginate is true.
-         */
-        pageSize: 0
-   
+        recordOptions: {
+            primaryKey: null
+        }
     },
-
+    
     /**
-     * Property: sorters
-     * an object listing the different sorters available
-     */
-    sorters : {
-        quick : "Quicksort",
-        merge : "Mergesort",
-        heap : "Heapsort",
-        'native' : "Nativesort"
-    },
-    /**
      * Property: data
      * Holds the data for this store
      */
@@ -16211,16 +16173,6 @@
      */
     index : 0,
     /**
-     * Property: pageIndex
-     * Holds the current page index
-     */
-    pageIndex: 0,
-    /**
-     * Property: dirty
-     * Tells us if the store is dirty
-     */
-    dirty : false,
-    /**
      * Property: id
      * The id of this store.
      */
@@ -16230,25 +16182,104 @@
      * Tells whether the store has been loaded or not
      */
     loaded: false,
-
     /**
-     * APIMethod: load 
-     * Loads data into the store.
-     * 
-     * Parameters: 
-     * data - the data to load
+     * Property: ready
+     * Used to determine if the store is completely initialized.
      */
-    load : function (data) {
-        if ($defined(data)) {
-            this.loaded = false;
-            this.processData(data);
-            
+    ready: false,
+    
+    init: function () {
+        this.parent();
+        
+        if ($defined(this.options.id)) {
+            this.id = this.options.id;
+        } 
+        
+        if (!$defined(this.options.protocol)) {
+            this.ready = false;
+            return;
         } else {
-            this.loaded = false;
+            this.protocol = this.options.protocol;
         }
+        
+        this.strategies = new Hash();
+        
+        if ($defined(this.options.strategies)) {
+            this.options.strategies.each(function(strategy){
+                this.addStrategy(strategy);
+            },this);
+        } else {
+            var strategy = new Jx.Store.Strategy.Full();
+            this.addStrategy(strategy);
+        }
+        
+        if ($defined(this.options.record)) {
+            this.record = this.options.record;
+        } else {
+            this.record = Jx.Record;
+        }
+        
+        
     },
-
+    
+    cleanup: function () {
+        this.strategies.each(function(strategy){
+            strategy.destroy();
+        },this);
+        this.strategies = null;
+        this.protocol.destroy();
+        this.protocol = null;
+        this.record = null;
+    },
     /**
+     * APIMethod: getStrategy
+     * returns the named strategy if it is present, null otherwise.
+     * 
+     * Parameters:
+     * name - the name of the strategy we're looking for
+     */
+    getStrategy: function (name) {
+        if (this.strategies.has(name)) {
+            return this.strategies.get(name);
+        }
+        return null;
+    },
+    /**
+     * APIMethod: addStrategy
+     * Allows the addition of strategies after store initialization. Handy to 
+     * have if some other class needs a strategy that is not present.
+     * 
+     * Parameters:
+     * strategy - the strategy to add to the store
+     */
+    addStrategy: function (strategy) {
+        this.strategies.set(strategy.name, strategy);
+        strategy.setStore(this);
+        strategy.activate();
+    },
+    /**
+     * APIMethod: load
+     * used to load the store. It simply fires an event that the strategies are
+     * listening for.
+     * 
+     * Parameters:
+     * params - a hash of parameters passed to the strategy for determining what records
+     *          to load.
+     */
+    load: function (params) {
+        this.fireEvent('storeLoad', params);
+    },
+    /**
+     * APIMethod: empty
+     * Clears the store of data
+     */
+    empty: function () {
+        if ($defined(this.data)) {
+            this.data.empty();
+        }
+    },
+    
+    /**
      * APIMethod: hasNext 
      * Determines if there are more records past the current
      * one.
@@ -16257,7 +16288,7 @@
      */
     hasNext : function () {
         if ($defined(this.data)) {
-            if (this.index < this.data[this.pageIndex].length - 1) {
+            if (this.index < this.data.length - 1) {
                 return true;
             } else {
                 return false;
@@ -16294,7 +16325,7 @@
      * Returns: true | false
      */
     valid : function () {
-        return ($defined(this.data[this.pageIndex][this.index]));
+        return ($defined(this.data[this.index]));
     },
 
     /**
@@ -16306,10 +16337,11 @@
     next : function () {
         if ($defined(this.data)) {
             this.index++;
-            if (this.index === this.data[this.pageIndex].length) {
-                this.index = this.data[this.pageIndex].length - 1;
+            if (this.index === this.data.length) {
+                this.index = this.data.length - 1;
             }
             this.fireEvent('storeMove', this);
+            return true;
         } else {
             return null;
         }
@@ -16329,6 +16361,7 @@
                 this.index = 0;
             }
             this.fireEvent('storeMove', this);
+            return true;
         } else {
             return null;
         }
@@ -16345,6 +16378,7 @@
         if ($defined(this.data)) {
             this.index = 0;
             this.fireEvent('storeMove', this);
+            return true;
         } else {
             return null;
         }
@@ -16358,8 +16392,9 @@
      */
     last : function () {
         if ($defined(this.data)) {
-            this.index = this.data[this.pageIndex].length - 1;
+            this.index = this.data.length - 1;
             this.fireEvent('storeMove', this);
+            return true;
         } else {
             return null;
         }
@@ -16374,7 +16409,7 @@
      */
     count : function () {
         if ($defined(this.data)) {
-            return this.data[this.pageIndex].length;
+            return this.data.length;
         } else {
             return null;
         }
@@ -16388,7 +16423,7 @@
      * there's an error
      */
     getPosition : function () {
-        if ($defined(this.data[this.pageIndex])) {
+        if ($defined(this.data)) {
             return this.index;
         } else {
             return null;
@@ -16405,7 +16440,7 @@
      * Returns: true - if successful false - if not successful null - on error
      */
     moveTo : function (index) {
-        if ($defined(this.data) && index >= 0 && index < this.data[this.pageIndex].length) {
+        if ($defined(this.data) && index >= 0 && index < this.data.length) {
             this.index = index;
             this.fireEvent('storeMove', this);
             return true;
@@ -16415,140 +16450,2051 @@
             return false;
         }
     },
-
     /**
-     * APIMethod: get 
-     * Retrieves the data for a specific column of the current
-     * record
+     * APIMethod: each
+     * allows iteration through the store's records.
      * 
-     * Parameters: 
-     * col - the column to get (either an integer or a string)
+     * Parameters:
+     * fn - the function to execute for each record
+     * bind - the scope of the function
+     * ignoreDeleted - flag that tells the function whether to ignore records
+     *                  marked as deleted.
+     */
+    each: function (fn, bind, ignoreDeleted) {
+        var data;
+        if (ignoreDeleted) {
+            data = this.data.filter(function (record) {
+                return record.state !== Jx.Record.DELETE;
+            }, this);
+        } else {
+            data = this.data;
+        }
+        for (var i = 0, l = data.length; i < l; i++) {
+            fn.call(bind, data[i], i, data);
+        }
+    },
+    /**
+     * APIMethod: get
+     * gets the data for the specified column
      * 
-     * Returns: the data in the column or null if the column doesn't exist
+     * Parameters:
+     * column - indicator of the column to set. Either a string (the name of 
+     *          the column) or an integer (the index of the column in the 
+     *          record).
+     * index - the index of the record in the internal array. Optional.
+     *          defaults to the current index.
      */
-    get : function (col) {
-        if ($defined(this.data)) {
-            col = this.resolveCol(col);
-            var h = this.data[this.pageIndex][this.index];
-            if (h.has(col.name)) {
-                return h.get(col.name);
-            } else {
-                return null;
+    get: function (column, index) {
+        if (!$defined(index)) {
+            index = this.index;
+        }
+        return this.data[index].get(column);
+    },
+    /**
+     * APIMethod: set
+     * Sets the passed data for a particular column on the indicated record.
+     * 
+     * Parameters:
+     * column - indicator of the column to set. Either a string (the name of 
+     *          the column) or an integer (the index of the column in the 
+     *          record).
+     * data - the data to set in the column of the record
+     * index - the index of the record in the internal array. Optional.
+     *          defaults to the current index.
+     */
+    set: function (column, data, index) {
+        if (!$defined(index)) {
+            index = this.index;
+        }
+        return this.data[index].set(column, data);
+    },
+    /**
+     * APIMethod: refresh
+     * Simply fires the storeRefresh event for strategies to listen for.
+     */
+    refresh: function () {
+        this.fireEvent('storeRefresh', this);
+    },
+    /**
+     * APIMethod: addRecord
+     * Adds given data to the end of the current store.
+     * 
+     * Parameters:
+     * data - The data to use in creating a record. This should be in whatever
+     *        form Jx.Store.Record, or the current subclass, needs it in.
+     * insert - flag whether this is an "insert"
+     */
+    addRecord: function (data, insert) {
+        if (!$defined(this.data)) {
+            this.data = [];
+        }
+        var record;
+        if (data instanceof Jx.Record) {
+            record = data;
+        } else {
+            record = new (this.record)(this, this.options.columns, data, this.options.recordOptions);
+        }
+        if (insert) {
+            record.state = Jx.Record.INSERT;
+        }
+        this.data.push(record);
+        this.fireEvent('storeRecordAdded', [record, this]);
+    },
+    /**
+     * APIMethod: addRecords
+     * Used to add multiple records to the store at one time.
+     * 
+     * Parameters:
+     * data - an array of data to add.
+     */
+    addRecords: function (data) {
+        var def = $defined(data);
+        var type = Jx.type(data);
+        if (def && type === 'array') {
+            this.fireEvent('storeBeginAddRecords', this);
+            data.each(function(d){
+                this.addRecord(d);
+            },this);
+            this.fireEvent('storeEndAddRecords', this);
+            return true;
+        }
+        return false;
+    },
+    
+    /**
+     * APIMethod: getRecord
+     * Returns the record at the given index or the current store index
+     * 
+     * Parameters:
+     * index - the index from which to return the record. Optional. Defaults to
+     *          the current store index
+     */
+    getRecord: function (index) {
+        if (!$defined(index)) {
+            index = this.index;
+        }
+        
+        if (Jx.type(index) === 'number') {        
+            if ($defined(this.data) && $defined(this.data[index])) {
+                return this.data[index];
             }
         } else {
-            return null;
+            var r;
+            this.data.each(function(record){
+                if (record === index) {
+                    r = record;
+                }
+            },this);
+            return r;
         }
+        return null;
     },
-
     /**
-     * APIMethod: set 
-     * Puts a value into a specific column of the current record and
-     * sets the dirty flag.
+     * APIMethod: replaceRecord
+     * Replaces the record at an existing index with a new record containing
+     * the passed in data.
      * 
-     * Parameters: 
-     * column - the column to put the value in value - the data to put
-     * into the column
+     * Parameters:
+     * data - the data to use in creating the new record
+     * index - the index at which to place the new record. Optional. 
+     *          defaults to the current store index.
+     */
+    replace: function(data, index) {
+        if ($defined(data)) {
+            if (!$defined(index)) {
+                index = this.index;
+            }
+            var record = new this.record(this.options.columns,data);
+            var oldRecord = this.data[index];
+            this.data[index] = record;
+            this.fireEvent('storeRecordReplaced', [oldRecord, record]);
+            return true;
+        } 
+        return false;
+    },
+    /**
+     * APIMethod: deleteRecord
+     * Marks a record for deletion and removes it from the regular array of
+     * records. It adds it to a special holding array so it can be disposed 
+     * of later.
      * 
-     * returns: nothing | null if an error
+     * Parameters:
+     * index - the index at which to place the new record. Optional. 
+     *          defaults to the current store index.
      */
-    set : function (column, value) {
-        if ($defined(this.data)) {
-            // set the column to the value and set the dirty flag
+    deleteRecord: function(index) {
+        if (!$defined(index)) {
+            index = this.index;
+        }
+        var record = this.data[index];
+        record.state = Jx.Record.DELETE;
+        // Set to Null or slice it out and compact the array???
+        this.data[index] = null;
+        if (!$defined(this.deleted)) {
+            this.deleted = [];
+        }
+        this.deleted.push(record);
+        this.fireEvent('storeRecordDeleted', [record, this]);
+    },
+    /**
+     * APIMethod: insertRecord
+     * Shortcut to addRecord which facilitates marking a record as inserted.
+     * 
+     * Paremeters:
+     * data - the data to use in creating this inserted record. Should be in
+     *          whatever form the current implementation of Jx.Record needs
+     */
+    insertRecord: function (data) {
+        this.addRecord(data, true);
+    },
+    
+    /**
+     * APIMethod: getColumns
+     * Allows retrieving the columns array
+     */
+    getColumns: function () {
+        return this.options.columns;
+    },
+    
+    /**
+     * APIMethod: findByColumn
+     * Used to find a specific record by the value in a specific column. This
+     * is particularly useful for finding records by a unique id column. The search
+     * will stop on the first instance of the value
+     * 
+     * Parameters:
+     * column - the name (or index) of the column to search by
+     * value - the value to look for
+     */
+    findByColumn: function (column, value) {
+        if (typeof StopIteration === "undefined") {
+            StopIteration = new Error("StopIteration");
+        }
 
-            if (Jx.type(column) === 'number' || Jx.type(column) === 'string') {
-                column = this.resolveCol(column);
+        var index;
+        try {
+            this.data.each(function(record, idx){
+                if (record.equals(column, value)) {
+                    index = idx;
+                    throw StopIteration;
+                }
+            },this);
+        } catch (error) {
+            if (error !== StopIteration) {
+                throw error;
             }
+            return index;
+        }
+        return null;
+    }
+});// $Id: $
+/**
+ * Class: Jx.Compare
+ *
+ * Extends: <Jx.Object>
+ *
+ * Class that holds functions for doing comparison operations.
+ * This class requires the clientside Date() extensions (deps/date.js).
+ *
+ * notes:
+ * Each function that does a comparison returns
+ *
+ * 0 - if equal.
+ * 1 - if the first value is greater that the second.
+ * -1 - if the first value is less than the second.
+ *
+ * Example:
+ * (code)
+ * (end)
+ *
+ * License:
+ * Copyright (c) 2009, Jon Bomgardner.
+ *
+ * This file is licensed under an MIT style license
+ */
 
-            var oldValue = this.data[this.pageIndex][this.index].get(column.name);
-            this.data[this.pageIndex][this.index].set(column.name, value);
-            this.data[this.pageIndex][this.index].set('dirty', true);
-            this.fireEvent('columnChanged', [ this.index, column, oldValue, value ]);
+Jx.Compare = new Class({
+    Family: 'Jx.Compare',
+    Extends: Jx.Object,
+
+    options: { separator: '.' },
+
+    /**
+     * APIMethod: alphanumeric
+     * Compare alphanumeric variables. This is case sensitive
+     *
+     * Parameters:
+     * a - a value
+     * b - another value
+     */
+    alphanumeric: function (a, b) {
+        return (a === b) ? 0 :(a < b) ? -1 : 1;
+    },
+
+    /**
+     * APIMethod: numeric
+     * Compares numbers
+     *
+     * Parameters:
+     * a - a number
+     * b - another number
+     */
+    numeric: function (a, b) {
+        return this.alphanumeric(this.convert(a), this.convert(b));
+    },
+
+    /**
+     * Method: _convert
+     * Normalizes numbers relative to the separator.
+     *
+     * Parameters:
+     * val - the number to normalize
+     *
+     * Returns:
+     * the normalized value
+     */
+    convert: function (val) {
+        if (Jx.type(val) === 'string') {
+            val = parseFloat(val.replace(/^[^\d\.]*([\d., ]+).*/g, "$1").replace(new RegExp("[^\\\d" + this.options.separator + "]", "g"), '').replace(/,/, '.')) || 0;
+        }
+        return val || 0;
+    },
+
+    /**
+     * APIMethod: ignorecase
+     * Compares to alphanumeric strings without regard to case.
+     *
+     * Parameters:
+     * a - a value
+     * b - another value
+     */
+    ignorecase: function (a, b) {
+        return this.alphanumeric(("" + a).toLowerCase(), ("" + b).toLowerCase());
+    },
+
+    /**
+     * APIMethod: currency
+     * Compares to currency values.
+     *
+     * Parameters:
+     * a - a currency value without the $
+     * b - another currency value without the $
+     */
+    currency: function (a, b) {
+        return this.numeric(a, b);
+    },
+
+    /**
+     * APIMethod: date
+     * Compares 2 date values (either a string or an object)
+     *
+     * Parameters:
+     * a - a date value
+     * b - another date value
+     */
+    date: function (a, b) {
+        var x = new Date().parse(a);
+        var y = new Date().parse(b);
+        return (x < y) ? -1 : (x > y) ? 1 : 0;
+    },
+    /**
+     * APIMethod: boolean
+     * Compares 2 bolean values
+     *
+     * Parameters:
+     * a - a boolean value
+     * b - another boolean value
+     */
+    'boolean': function (a, b) {
+        return (a === true && b === false) ? -1 : (a === b) ? 0 : 1;
+    }
+
+});// $Id: $
+/**
+ * Class: Jx.Sort Base class for all of the sorting algorithm classes.
+ *
+ * Extends: <Jx.Object>
+ *
+ * Events:
+ * onStart() - called when the sort starts
+ * onEnd() - called when the sort stops
+ *
+ * Example:
+ * (code)
+ * (end)
+ *
+ * License:
+ * Copyright (c) 2009, Jon Bomgardner.
+ *
+ * This file is licensed under an MIT style license
+ */
+Jx.Sort = new Class({
+
+    Family : 'Jx.Sort',
+
+    Extends : Jx.Object,
+
+    options : {
+        /**
+         * Option: timeIt
+         * whether to time the sort
+         */
+        timeIt : false,
+        /**
+         * Event: onStart
+         */
+        onStart : $empty,
+        /**
+         * Event: onEnd
+         */
+        onEnd : $empty
+    },
+
+    /**
+     * Property: timer
+     * holds the timer instance
+     */
+    timer : null,
+    /**
+     * Property: data
+     * The data to sort
+     */
+    data : null,
+    /**
+     * Property: Comparator
+     * The comparator to use in sorting
+     */
+    comparator : $empty,
+    /**
+     * Property: col
+     * The column to sort by
+     */
+    col : null,
+
+    parameters: ['data','fn','col','options'],
+
+    /**
+     * APIMethod: init
+     */
+    init : function () {
+        this.parent();
+        if (this.options.timeIt) {
+            this.addEvent('start', this.startTimer.bind(this));
+            this.addEvent('stop', this.stopTimer.bind(this));
+        }
+        this.data = this.options.data;
+        this.comparator = this.options.fn;
+        this.col = this.options.col;
+    },
+
+    /**
+     * APIMethod: sort
+     * Actually does the sorting. Must be overridden by subclasses.
+     */
+    sort : $empty,
+
+    /**
+     * Method: startTimer
+     * Saves the starting time of the sort
+     */
+    startTimer : function () {
+        this.timer = new Date();
+    },
+
+    /**
+     * Method: stopTimer
+     * Determines the time the sort took.
+     */
+    stopTimer : function () {
+        this.end = new Date();
+        this.dif = this.timer.diff(this.end, 'ms');
+    },
+
+    /**
+     * APIMethod: setData
+     * sets the data to sort
+     *
+     * Parameters:
+     * data - the data to sort
+     */
+    setData : function (data) {
+        if ($defined(data)) {
+            this.data = data;
+        }
+    },
+
+    /**
+     * APIMethod: setColumn
+     * Sets the column to sort by
+     *
+     * Parameters:
+     * col - the column to sort by
+     */
+    setColumn : function (col) {
+        if ($defined(col)) {
+            this.col = col;
+        }
+    },
+
+    /**
+     * APIMethod: setComparator
+     * Sets the comparator to use in sorting
+     *
+     * Parameters:
+     * fn - the function to use as the comparator
+     */
+    setComparator : function (fn) {
+        this.comparator = fn;
+    }
+});
+// $Id: $
+/**
+ * class: Jx.Sort.Mergesort
+ *
+ * Extends: <Jx.Sort>
+ *
+ * Implementation of a mergesort algorithm designed to
+ * work on <Jx.Store> data.
+ *
+ * Example:
+ * (code)
+ * (end)
+ *
+ * License:
+ * Copyright (c) 2009, Jon Bomgardner.
+ *
+ * This file is licensed under an MIT style license
+ */
+Jx.Sort.Mergesort = new Class({
+    Family: 'Jx.Sort.Mergesort',
+    Extends : Jx.Sort,
+
+    name : 'mergesort',
+
+    /**
+     * APIMethod: sort
+     * Actually runs the sort on the data
+     *
+     * returns: the sorted data
+     */
+    sort : function () {
+        this.fireEvent('start');
+        var d = this.mergeSort(this.data);
+        this.fireEvent('stop');
+        return d;
+
+    },
+
+    /**
+     * Method: mergeSort
+     * Does the physical sorting. Called
+     * recursively.
+     *
+     * Parameters:
+     * arr - the array to sort
+     *
+     * returns: the sorted array
+     */
+    mergeSort : function (arr) {
+        if (arr.length <= 1) {
+            return arr;
+        }
+
+        var middle = (arr.length) / 2;
+        var left = arr.slice(0, middle);
+        var right = arr.slice(middle);
+        left = this.mergeSort(left);
+        right = this.mergeSort(right);
+        var result = this.merge(left, right);
+        return result;
+    },
+
+    /**
+     * Method: merge
+     * Does the work of merging to arrays in order.
+     *
+     * parameters:
+     * left - the left hand array
+     * right - the right hand array
+     *
+     * returns: the merged array
+     */
+    merge : function (left, right) {
+        var result = [];
+
+        while (left.length > 0 && right.length > 0) {
+            if (this.comparator((left[0]).get(this.col), (right[0])
+                    .get(this.col)) <= 0) {
+                result.push(left[0]);
+                left = left.slice(1);
+            } else {
+                result.push(right[0]);
+                right = right.slice(1);
+            }
+        }
+        while (left.length > 0) {
+            result.push(left[0]);
+            left = left.slice(1);
+        }
+        while (right.length > 0) {
+            result.push(right[0]);
+            right = right.slice(1);
+        }
+        return result;
+    }
+
+});
+// $Id: $
+/**
+ * Class: Jx.Sort.Heapsort
+ *
+ * Extends: <Jx.Sort>
+ *
+ * Implementation of a heapsort algorithm designed to
+ * work on <Jx.Store> data.
+ *
+ *
+ * Example:
+ * (code)
+ * (end)
+ *
+ * License:
+ * Copyright (c) 2009, Jon Bomgardner.
+ *
+ * This file is licensed under an MIT style license
+ */
+Jx.Sort.Heapsort = new Class({
+    Family: 'Jx.Sort.Heapsort',
+    Extends : Jx.Sort,
+
+    name : 'heapsort',
+
+    /**
+     * APIMethod: sort
+     * Actually runs the sort on the data
+     *
+     * Returns: the sorted data
+     */
+    sort : function () {
+        this.fireEvent('start');
+
+        var count = this.data.length;
+
+        if (count === 1) {
+            return this.data;
+        }
+
+        if (count > 2) {
+            this.heapify(count);
+
+            var end = count - 1;
+            while (end > 1) {
+                this.data.swap(end, 0);
+                end = end - 1;
+                this.siftDown(0, end);
+            }
         } else {
-            return null;
+            // check then order the two we have
+            if ((this.comparator((this.data[0]).get(this.col), (this.data[1])
+                    .get(this.col)) > 0)) {
+                this.data.swap(0, 1);
+            }
         }
+
+        this.fireEvent('stop');
+        return this.data;
     },
+
+    /**
+     * Method: heapify
+     * Puts the data in Max-heap order
+     *
+     * Parameters: count - the number of records we're sorting
+     */
+    heapify : function (count) {
+        var start = Math.round((count - 2) / 2);
+
+        while (start >= 0) {
+            this.siftDown(start, count - 1);
+            start = start - 1;
+        }
+    },
+
+    /**
+     * Method: siftDown
+     *
+     * Parameters: start - the beginning of the sort range end - the end of the
+     * sort range
+     */
+    siftDown : function (start, end) {
+        var root = start;
+
+        while (root * 2 <= end) {
+            var child = root * 2;
+            if ((child + 1 < end) && (this.comparator((this.data[child]).get(this.col),
+                            (this.data[child + 1]).get(this.col)) < 0)) {
+                child = child + 1;
+            }
+            if ((this.comparator((this.data[root]).get(this.col),
+                    (this.data[child]).get(this.col)) < 0)) {
+                this.data.swap(root, child);
+                root = child;
+            } else {
+                return;
+            }
+        }
+    }
+
+});
+// $Id: $
+/**
+ * Class: Jx.Sort.Quicksort
+ *
+ * Extends: <Jx.Sort>
+ *
+ * Implementation of a quicksort algorithm designed to
+ * work on <Jx.Store> data.
+ *
+ * Example:
+ * (code)
+ * (end)
+ *
+ * License:
+ * Copyright (c) 2009, Jon Bomgardner.
+ *
+ * This file is licensed under an MIT style license
+ */
+Jx.Sort.Quicksort = new Class({
+    Family: 'Jx.Sort.Quicksort',
+    Extends : Jx.Sort,
+
+    name : 'quicksort',
+
+    /**
+     * APIMethod: sort
+     * Actually runs the sort on the data
+     *
+     * returns: the sorted data
+     */
+    sort : function (left, right) {
+        this.fireEvent('start');
+
+        if (!$defined(left)) {
+            left = 0;
+        }
+        if (!$defined(right)) {
+            right = this.data.length - 1;
+        }
+
+        this.quicksort(left, right);
+
+        this.fireEvent('stop');
+
+        return this.data;
+
+    },
+
+    /**
+     * Method: quicksort
+     * Initiates the sorting. Is
+     * called recursively
+     *
+     * Parameters:
+     * left - the left hand, or lower, bound of the sort
+     * right - the right hand, or upper, bound of the sort
+     */
+    quicksort : function (left, right) {
+        if (left >= right) {
+            return;
+        }
+
+        var index = this.partition(left, right);
+        this.quicksort(left, index - 1);
+        this.quicksort(index + 1, right);
+    },
+
+    /**
+     * Method: partition
+     *
+     * Parameters:
+     * left - the left hand, or lower, bound of the sort
+     * right - the right hand, or upper, bound of the sort
+     */
+    partition : function (left, right) {
+        this.findMedianOfMedians(left, right);
+        var pivotIndex = left;
+        var pivotValue = (this.data[pivotIndex]).get(this.col);
+        var index = left;
+        var i;
+
+        this.data.swap(pivotIndex, right);
+        for (i = left; i < right; i++) {
+            if (this.comparator((this.data[i]).get(this.col),
+                    pivotValue) < 0) {
+                this.data.swap(i, index);
+                index = index + 1;
+            }
+        }
+        this.data.swap(right, index);
+
+        return index;
+
+    },
+
+    /**
+     * Method: findMedianOfMedians
+     *
+     * Parameters: l
+     * eft - the left hand, or lower, bound of the sort
+     * right - the right hand, or upper, bound of the sort
+     */
+    findMedianOfMedians : function (left, right) {
+        if (left === right) {
+            return this.data[left];
+        }
+
+        var i;
+        var shift = 1;
+        while (shift <= (right - left)) {
+            for (i = left; i <= right; i += shift * 5) {
+                var endIndex = (i + shift * 5 - 1 < right) ? i + shift * 5 - 1 : right;
+                var medianIndex = this.findMedianIndex(i, endIndex,
+                        shift);
+
+                this.data.swap(i, medianIndex);
+            }
+            shift *= 5;
+        }
+
+        return this.data[left];
+    },
+
+    /**
+     * Method: findMedianIndex
+     *
+     * Parameters:
+     * left - the left hand, or lower, bound of the sort
+     * right - the right hand, or upper, bound of the sort
+     */
+    findMedianIndex : function (left, right, shift) {
+        var groups = Math.round((right - left) / shift + 1);
+        var k = Math.round(left + groups / 2 * shift);
+        if (k > this.data.length - 1) {
+            k = this.data.length - 1;
+        }
+        for (var i = left; i < k; i += shift) {
+            var minIndex = i;
+            var v = this.data[minIndex];
+            var minValue = v.get(this.col);
+
+            for (var j = i; j <= right; j += shift) {
+                if (this.comparator((this.data[j]).get(this.col),
+                        minValue) < 0) {
+                    minIndex = j;
+                    minValue = (this.data[minIndex]).get(this.col);
+                }
+            }
+            this.data.swap(i, minIndex);
+        }
+
+        return k;
+    }
+});
+// $Id: $
+/**
+ * Class: Jx.Sort.Nativesort
+ *
+ * Extends: <Jx.Sort>
+ *
+ * Implementation of a native sort algorithm designed to work on <Jx.Store> data.
+ *
+ *
+ * Example:
+ * (code)
+ * (end)
+ *
+ * License:
+ * Copyright (c) 2009, Jon Bomgardner.
+ *
+ * This file is licensed under an MIT style license
+ */
+Jx.Sort.Nativesort = new Class({
+    Family: 'Jx.Sort.Nativesort',
+    Extends : Jx.Sort,
+
+    name : 'nativesort',
+
+    /**
+     * Method: sort
+     * Actually runs the sort on the data
+     *
+     * Returns:
+     * the sorted data
+     */
+    sort : function () {
+        this.fireEvent('start');
+
+        var compare = function (a, b) {
+            return this.comparator((this.data[a]).get(this.col), (this.data[b])
+                    .get(this.col));
+        };
+
+        this.data.sort(compare);
+        this.fireEvent('stop');
+        return this.data;
+    }
+
+});
+// $Id: $
+/**
+ * Class: Jx.Store.Response
+ * 
+ * Extends: <Jx.Object>
+ * 
+ * This class is used by the protocol to send information back to the calling 
+ * strategy (or other caller).
+ *
+ * License: 
+ * Copyright (c) 2009, Jon Bomgardner.
+ * 
+ * This file is licensed under an MIT style license
+ */
+Jx.Store.Response = new Class({
     
+    Extends: Jx.Object,
+    
+    Family: 'Jx.Store.Response',
     /**
-     * APIMethod: refresh 
-     * Sets new data into the store
+     * Property: code
+     * This is the success/failure code
+     */
+    code: null,
+    /**
+     * Property: data
+     * The data passed received by the protocol.
+     */
+    data: null,
+    /**
+     * Property: meta
+     * The metadata received by the protocol
+     */
+    meta: null,
+    /**
+     * Property: requestType
+     * one of 'read', 'insert', 'delete', or 'update'
+     */
+    requestType: null,
+    /**
+     * Property: requestParams
+     * The parameters passed to the method that created this response
+     */
+    requestParams: null,
+    /**
+     * Property: request
+     * the mootools Request object used in this operation (if one is actually
+     * used)
+     */
+    request: null,
+    /**
+     * APIMethod: success
+     * determines if this response represents a successful response
+     */
+    success: function () {
+        return this.code > 0;
+    }
+});
+
+Jx.Store.Response.WAITING = 2;
+Jx.Store.Response.SUCCESS = 1;
+Jx.Store.Response.FAILURE = 0;
+// $Id: $
+/**
+ * Class: Jx.Store.Protocol
+ * 
+ * Extends: <Jx.Object>
+ * 
+ * Base class for all protocols. Protocols are used for communication, primarily,
+ * in Jx.Store. It may be possible to adapt them to be used in other places but
+ * that is not their intended function.
+ *
+ * License: 
+ * Copyright (c) 2009, Jon Bomgardner.
+ * 
+ * This file is licensed under an MIT style license
+ */
+Jx.Store.Protocol = new Class({
+    
+    Extends: Jx.Object,
+    Family: 'Jx.Store.Protocol',
+    
+    parser: null,
+    
+    options: {},
+    
+    init: function () {
+        this.parent();
+        
+        if ($defined(this.options.parser)) {
+            this.parser = this.options.parser;
+        }
+    },
+    
+    cleanup: function () {
+        this.parser = null;
+        this.parent();
+    },
+    
+    /**
+     * APIMethod: read
+     * Supports reading data from a location. Abstract method that subclasses
+     * should implement.
      * 
+     * Parameters:
+     * options - optional options for configuring the request
+     */
+    read: $empty,
+    /**
+     * APIMethod: insert
+     * Supports inserting data from a location. Abstract method that subclasses
+     * should implement.
+     * 
+     * Parameters:
+     * data - the data to use in creating the record in the form of one or more
+     *        Jx.Store.Record instances
+     * options - optional options for configuring the request
+     */
+    insert: $empty,
+    /**
+     * APIMethod: update
+     * Supports updating data at a location. Abstract method that subclasses
+     * should implement.
+     * 
+     * Parameters:
+     * data - the data to update (one or more Jx.Store.Record objects)
+     * options - optional options for configuring the request
+     */
+    update: $empty,
+    /**
+     * APIMethod: delete
+     * Supports deleting data from a location. Abstract method that subclasses
+     * should implement.
+     * 
+     * Parameters:
+     * data - the data to update (one or more Jx.Store.Record objects)
+     * options - optional options for configuring the request
+     */
+    "delete": $empty,
+    /**
+     * APIMethod: abort
+     * used to abort any of the above methods (where practical). Abstract method
+     * that subclasses should implement.
+     */
+    abort: $empty
+});// $Id: $
+/**
+ * Class: Jx.Store.Protocol.Local
+ * 
+ * Extends: Jx.Store.Protocol
+ * 
+ * Based on the Protocol base class, the local protocol uses data that it is handed
+ * upon instantiation to process requests.
+ * 
+ * Constructor Parameters:
+ * data - The data to use 
+ * options - any options for the base protocol class
+ * 
+ * License: 
+ * Copyright (c) 2009, Jon Bomgardner.
+ * inspired by the openlayers.org implementation of a similar system
+ * 
+ * This file is licensed under an MIT style license
+ */
+Jx.Store.Protocol.Local = new Class({
+    
+    Extends: Jx.Store.Protocol,
+    
+    parameters: ['data', 'options'],
+    /**
+     * Property: data
+     * The data passed to the protocol
+     */
+    data: null,
+    
+    init: function () {
+        this.parent();
+        
+        if ($defined(this.options.data)) {
+            this.data = this.parser.parse(this.options.data);
+        }
+    },
+    /**
+     * APIMethod: read
+     * process requests for data and sends the appropriate response via the
+     * dataLoaded event.
+     * 
      * Parameters: 
-     * data - the data to set 
-     * reset - flag as to whether to reset the index to 0
+     * options - options to use in processing the request.
+     */
+    read: function (options) {
+        var resp = new Jx.Store.Response();
+        resp.requestType = 'read';
+        resp.requestParams = arguments;
+        
+        var page = options.data.page;
+        var itemsPerPage = options.data.itemsPerPage;
+        
+        if ($defined(this.data)) {
+            if (page <= 1 && itemsPerPage === -1) {
+                //send them all
+                resp.data = this.data;
+                resp.meta = { count: this.data.length };
+            } else {
+                var start = (page - 1) * itemsPerPage;
+                var end = start + itemsPerPage;
+                resp.data = this.data.slice(start, end);
+                resp.meta = { 
+                    page: page, 
+                    itemsPerPage: itemsPerPage,
+                    totalItems: this.data.length,
+                    totalPages: Math.ceil(this.data.length/itemsPerPage)
+                };
+            }
+            resp.code = Jx.Store.Response.SUCCESS;
+            this.fireEvent('dataLoaded', resp);
+        } else {
+            resp.code = Jx.Store.Response.SUCCESS;
+            this.fireEvent('dataLoaded', resp);
+        }                        
+    }
+    
+    /**
+     * The following methods are not implemented as they make no sense for a local protocol:
+     * - create
+     * - update 
+     * - delete
+     * - commit
+     * - abort
+     */
+});// $Id: $
+/**
+ * Class: Jx.Store.Protocol.Ajax
+ * 
+ * Extends: <Jx.Store.Protocol>
+ * 
+ * This protocol is used to send and receive data via AJAX. It also has the
+ * capability to use a REST-style API.
+ *
+ * License: 
+ * Copyright (c) 2009, Jon Bomgardner.
+ * 
+ * This file is licensed under an MIT style license
+ */
+Jx.Store.Protocol.Ajax = new Class({
+    
+    Extends: Jx.Store.Protocol,
+    
+    options: {
+        /**
+         * Option: requestOptions
+         * Options to pass to the mootools Request class
+         */
+        requestOptions: {
+            method: 'get'
+        },
+        /**
+         * Option: rest
+         * Flag indicating whether this protocol is operating against a RESTful
+         * web service
+         */
+        rest: false,
+        /**
+         * Option: urls
+         * This is a hash of the urls to use for each method. If the rest 
+         * option is set to true the only one needed will be the urls.rest. These
+         * can be overridden if needed by passing an options object into the
+         * various methods with the appropriate urls.
+         */
+        urls: {
+            rest: null,
+            insert: null,
+            read: null,
+            update: null,
+            'delete': null
+        }
+    },
+    
+    init: function() {
+        this.parent();
+    },
+    /**
+     * APIMethod: read
+     * Send a read request via AJAX
      * 
-     * Returns: nothing or null if no data is passed
+     * Parameters:
+     * page - the page requested
+     * itemsPerPage - the number of items on the page
+     * options - the options to pass to the request.
      */
-    refresh : function (data, reset) {
+    read: function (options) {
+        var resp = new Jx.Store.Response();
+        resp.requestType = 'read';
+        resp.requestParams = arguments;
+        
+        var req = new Request({
+            onSuccess: this.handleResponse.bind(this, resp)
+        });
+        
+        resp.request = req;
+        var temp = {};
+        if (this.options.rest) {
+            temp.url = this.options.urls.rest;
+        } else {
+            temp.url = this.options.urls.read;
+        }
+        
+        //set up options
+        var opts = $merge(this.options.requestOptions, temp, options);
+        
+        req.send(opts);
+        
+        resp.code = Jx.Store.Response.WAITING;
+        
+        return resp;
+        
+    },
+    /**
+     * Method: handleResponse
+     * Called as an event handler for a returning request. Parses the request's
+     * response into the actual response object.
+     * 
+     * Parameters: 
+     * response - the response related to teh returning request.
+     */
+    handleResponse: function (response) {
+        var req = response.request;
+        var str = req.xhr.responseText;
+        
+        var data = this.parser.parse(str);
         if ($defined(data)) {
-            this.processData(data);
-            if (reset) {
-                this.index = 0;
+            if ($defined(data.data)) {
+                response.data = data.data;
             }
+            if ($defined(data.meta)) {
+                response.meta = data.meta;
+            }
+            response.code = Jx.Store.Response.SUCCESS;
         } else {
-            return null;
+            response.code = Jx.Store.Response.FAILURE;
         }
+        this.fireEvent('dataLoaded', response);
     },
+    /**
+     * APIMethod: insert
+     * Takes a Jx.Record instance and saves it
+     * 
+     * Parameters:
+     * record - a Jx.Store.Record or array of them
+     * options - options to pass to the request
+     */
+    insert: function (record, options) {
+        if (!this.options.rest) {
+            options = $merge({url: this.options.urls.rest},options);
+        } else {
+            options = $merge({url: this.options.urls.insert},options);
+        }
+        this.options.requestOptions.method = 'POST';
+        return this.run(record, options, "insert");
+    },
+    /**
+     * APIMethod: update
+     * Takes a Jx.Record and updates it via AJAX
+     * 
+     * Parameters:
+     * record - a Jx.Record instance
+     * options - Options to pass to the request
+     */
+    update: function (record, options) {
+        if (this.options.rest) {
+            options = $merge({url: this.options.urls.rest},options);
+            this.options.requestOptions.method = 'PUT';
+        } else {
+            options = $merge({url: this.options.urls.update},options);
+            this.options.requestOptions.method = 'POST';
+        }
+        return this.run(record, options, "update");
+    },
+    /**
+     * APIMethod: delete
+     * Takes a Jx.Record and deletes it via AJAX
+     * 
+     * Parameters:
+     * record - a Jx.Record instance
+     * options - Options to pass to the request
+     */
+    "delete": function (record, options) {
+        if (this.options.rest) {
+            options = $merge({url: this.options.urls.rest},options);
+            this.options.requestOptions.method = 'DELETE';
+        } else {
+            options = $merge({url: this.options.urls['delete']},options);
+            this.options.requestOptions.method = 'POST';
+        }
+        return this.run(record, options, "delete");
+    },
+    /**
+     * APIMethod: abort
+     * aborts the request related to the passed in response.
+     * 
+     * Parameters:
+     * response - the response with the request to abort
+     */
+    abort: function (response) {
+        response.request.cancel();
+        
+    },
+    /**
+     * Method: run
+     * called by update, delete, and insert methods that actually does the work
+     * of kicking off the request.
+     * 
+     * Parameters:
+     * record - The Jx.Record to work with
+     * options - Options to pass to the request
+     * method - The name of the method calling this function
+     */
+    run: function (record, options, method) {
+        
+        this.options.requestOptions.data = this.parser.encode(record);
+        
+        var resp = new Jx.Store.Response();
+        resp.requestType = method;
+        resp.requestParams = [record, options, method];
+        
+        var req = new Request({
+            onSuccess: this.handleResponse.bind(this, resp)
+        });
+        
+        //set up options
+        var opts = $merge(this.options.requestOptions, options);
+        
+        req.send(opts);
+        
+        resp.code = Jx.Store.Response.WAITING;
+        resp.request = req;
+        
+        return resp;
+    }
     
+});// $Id: $
+/**
+ * Class: Jx.Store.Strategy
+ * 
+ * Extends: <Jx.Object>
+ * 
+ * Base class for all Jx.Store strategies
+ *
+ * License: 
+ * Copyright (c) 2009, Jon Bomgardner.
+ * 
+ * This file is licensed under an MIT style license
+ */
+Jx.Store.Strategy = new Class({
+    
+    Extends: Jx.Object,
+    Family: 'Jx.Store.Strategy',
     /**
-     * APIMethod: isDirty 
-     * Tells us if the store is dirty and needs to be saved
+     * APIProperty: store
+     * The store this strategy is associated with
+     */
+    store: null,
+    /**
+     * APIProperty: active
+     * whether this strategy has been activated or not.
+     */
+    active: null,
+    
+    init: function () {
+        this.parent();
+        this.active = false;
+    },
+    /**
+     * APIMethod: setStore
+     * Associates this strategy with a particular store.
+     */
+    setStore: function (store) {
+        if (store instanceof Jx.Store) {
+            this.store = store;
+            return true;
+        }
+        return false;
+    },
+    
+    /**
+     * APIMethod: activate
+     * activates the strategy if it isn't already active.
+     */
+    activate: function () {
+        if (!this.active) {
+            this.active = true;
+            return true;
+        }
+        return false;
+    },
+    /**
+     * APIMethod: deactivate
+     * deactivates the strategy if it is already active.
+     */
+    deactivate: function () {
+        if (this.active) {
+            this.active = false;
+            return true;
+        }
+        return false;
+    }
+    
+    
+    
+});// $Id: $
+/**
+ * Class: Jx.Store.Strategy.Full
+ * 
+ * Extends: <Jx.Store.Strategy>
+ * 
+ * This is a strategy for loading all of the data from a source at one time.
+ *
+ * License: 
+ * Copyright (c) 2009, Jon Bomgardner.
+ * 
+ * This file is licensed under an MIT style license
+ */
+
+Jx.Store.Strategy.Full = new Class({
+    
+    Extends: Jx.Store.Strategy,
+    
+    name: 'full',
+    
+    options:{},
+    
+    init: function () {
+        this.parent();
+        this.bound = {
+            load: this.load.bind(this),
+            loadStore: this.loadStore.bind(this)
+        }
+    },
+    
+    activate: function () {
+        this.parent();
+        this.store.addEvent('storeLoad', this.bound.load);
+        
+    },
+    
+    deactivate: function () {
+        this.parent();
+        this.store.removeEvent('storeLoad', this.bound.load);
+        
+    },
+    /**
+     * Method: load
+     * Called as the eventhandler for the store load method. Can also
+     * be called independently to load data into the current store.
      * 
-     * Returns: true | false | null on error
+     * Parameters:
+     * params - a hash of parameters to use in loading the data.
      */
-    isDirty : function () {
-        if ($defined(this.data)) {
-            var dirty = false;
-            this.data.each(function (row) {
-                if (this.isRowDirty(row)) {
-                    dirty = true;
-                    return;
-                }
-            }, this);
-            return dirty;
+    load: function (params) {
+        this.store.fireEvent('storeBeginDataLoad', this.store);
+        this.store.protocol.addEvent('dataLoaded', this.bound.loadStore);
+        var opts = {}
+        if ($defined(params)) {
+            opts.data = params;
         } else {
-            return null;
+            opts.data = {};
         }
+        opts.data.page = 0;
+        opts.data.itemsPerPage = -1;
+        this.store.protocol.read(opts);
     },
+    /**
+     * Method: loadStore
+     * Called as the event hanlder for the protocol's dataLoaded event. Checks 
+     * the response for success and loads the data into the store if needed.
+     * 
+     * Parameters:
+     * resp - the response from the protocol
+     */
+    loadStore: function (resp) {
+        this.store.protocol.removeEvent('dataLoaded', this.bound.loadStore);
+        if (resp.success()) {
+            this.store.empty();
+            if ($defined(resp.meta)) {
+                this.parseMetaData(resp.meta);
+            }
+            this.store.addRecords(resp.data);
+            this.store.loaded = true;
+            this.store.fireEvent('storeDataLoaded',this.store);
+        } else {
+            this.store.loaded = false;
+            this.store.fireEvent('storeDataLoadFailed', [this.store, resp]);
+        }
+    },
+    /**
+     * Method: parseMetaData
+     * Takes the meta property of the response object and puts the data 
+     * where it belongs.
+     * 
+     * Parameters:
+     * meta - the meta data object from the response.
+     */
+    parseMetaData: function (meta) {
+        if ($defined(meta.columns)) {
+            this.store.options.columns = meta.columns;
+        }
+        if ($defined(meta.primaryKey)) {
+            this.store.options.recordOptions.primaryKey = meta.primaryKey;
+        }
+    }
+});// $Id: $
+/**
+ * Class: Jx.Store.Strategy.Paginat
+ * 
+ * Extends: <Jx.Store.Strategy>
+ * 
+ * Store strategy for paginating results in a store.
+ *
+ * License: 
+ * Copyright (c) 2009, Jon Bomgardner.
+ * 
+ * This file is licensed under an MIT style license
+ */
+Jx.Store.Strategy.Paginate = new Class({
     
+    Extends: Jx.Store.Strategy,
+    
+    name: 'paginate',
+    
+    options: {
+        /**
+         * Option: getPaginationParams
+         * a function that returns an object that holds the parameters
+         * necessary for getting paginated data from a protocol.
+         */
+        getPaginationParams: function () {
+            return {
+                page: this.page,
+                itemsPerPage: this.itemsPerPage
+            }
+        },
+        /**
+         * Option: startingItemsPerPage
+         * Used to set the intial itemsPerPage for the strategy. the pageSize 
+         * can be changed using the setPageSize() method.
+         */
+        startingItemsPerPage: 25,
+        /**
+         * Option: startingPage
+         * The page to start on. Defaults to 1 but can be set to any other 
+         * page.
+         */
+        startingPage: 1,
+        /**
+         * Option: expirationInterval
+         * The interval, in milliseconds (1000 = 1 sec), to hold a page of data
+         * before it expires. If the page is expired, the next time the page
+         * is accessed it must be retrieved again. Default is 5 minutes (1000 * 60 * 5)
+         */
+        expirationInterval: (1000 * 60 * 5),
+        /**
+         * Option: ignoreExpiration
+         * Set to TRUE to ignore the expirationInterval setting and never expire
+         * pages.
+         */
+        ignoreExpiration: false
+    },
     /**
-     * APIMethod: newRow 
-     * Adds a new row to the store. It can either be empty or made
-     * from an array of data
+     * Property: data
+     * holds the pages of data keyed by page number.
+     */
+    data: new Hash(),
+    /**
+     * property: cacheTimer
+     * holds one or more cache timer ids - one per page. Each page is set to 
+     * expire after a certain amount of time.
+     */
+    cacheTimer: new Hash(),
+    /**
+     * Property: page
+     * Tracks the page the store currently holds.
+     */
+    page: null,
+    /**
+     * Property: itemsPerPage
+     * The number of items on each page
+     */
+    itemsPerPage: null,
+    
+    init: function () {
+        this.parent();
+        //set up bindings that we need here
+        this.bound = {
+            load: this.load.bind(this),
+            loadStore: this.loadStore.bind(this)
+        };
+        this.itemsPerPage = this.options.startingItemsPerPage;
+        this.page = this.options.startingPage;
+    },
+    
+    activate: function () {
+        this.parent();
+        this.store.addEvent('storeLoad', this.bound.load);
+    },
+    
+    deactivate: function () {
+        this.parent();
+        this.store.removeEvent('storeLoad', this.bound.load);
+    },
+    /**
+     * APIMethod: load
+     * Called to load data into the store
      * 
-     * Parameters: 
-     * data - data to use in the new row (optional)
+     * Parameters:
+     * params - a Hash of parameters to use in getting data from the protocol.
      */
-    newRow : function (data) {
-        // check if array is not defined
-        if (!$defined(this.data)) {
-            // if not, then create a new array
-            this.data = [];
-            this.data[this.pageIndex] = [];
+    load: function (params) {
+        this.store.fireEvent('storeBeginDataLoad', this.store);
+        this.store.protocol.addEvent('dataLoaded', this.bound.loadStore);
+        var opts = {
+            data: $merge(params, this.options.getPaginationParams.apply(this))
+        };
+        this.store.protocol.read(opts);
+    },
+    /**
+     * MethodL loadStore
+     * Used to assist in the loading of data into the store. This is 
+     * called as a response to the protocol finishing.
+     * 
+     *  Parameters:
+     *  resp - the response object
+     */
+    loadStore: function (resp) {
+        this.store.protocol.removeEvent('dataLoaded', this.bound.loadStore);
+        if (resp.success()) {
+            if ($defined(resp.meta)) {
+                this.parseMetaData(resp.meta);
+            }
+            this.data.set(this.page,resp.data);
+            this.loadData(resp.data);
+        } else {
+            this.store.fireEvent('storeDataLoadFailed', this.store);
         }
+    },
+    /**
+     * Method: loadData
+     * This method does the actual work of loading data to the store. It is called
+     * when either the protocol finishes or setPage() has the data and it's not
+     * expired.
+     * 
+     * Parameters:
+     * data - the data to load into the store.
+     */
+    loadData: function (data) {
+        this.store.empty();
+        this.store.loaded = false;
+        if (!this.options.ignoreExpiration) {
+            var id = this.expirePage.delay(this.options.expirationInterval, this, this.page);
+            this.cacheTimer.set(this.page,id);
+        }
+        this.store.addRecords(data);
+        this.store.loaded = true;
+        this.store.fireEvent('storeDataLoaded',this.store);
+    },
+    /**
+     * Method: parseMetaData
+     * Takes the metadata returned from the protocol and places it in the appropriate
+     * places.
+     * 
+     * Parameters:
+     * meta - the meta data object returned from the protocol.
+     */
+    parseMetaData: function (meta) {
+        if ($defined(meta.columns)) {
+            this.store.options.columns = meta.columns;
+        }
+        if ($defined(meta.totalItems)) {
+            this.totalItems = meta.totalItems;
+        }
+        if ($defined(meta.totalPages)) {
+            this.totalPages = meta.totalPages;
+        }
+        if ($defined(meta.primaryKey)) {
+            this.store.options.recordOptions.primaryKey = meta.primaryKey;
+        }
+            
+    },
+    /**
+     * Method: expirePage
+     * Is called when a pages cache timer expires. Will expire the page by 
+     * erasing the page and timer. This will force a reload of the data the 
+     * next time the page is accessed.
+     * 
+     * Parameters:
+     * page - the page number to expire.
+     */
+    expirePage: function (page) {
+        this.data.erase(page);
+        this.cacheTimer.erase(page);
+    },
+    /**
+     * APIMethod: setPage
+     * Allows a caller (i.e. a paging toolbar) to move to a specific page.
+     * 
+     * Parameters:
+     * page - the page to move to. Can be any absolute page number, any number
+     *        prefaced with '-' or '+' (i.e. '-1', '+3'), 'first', 'last', 
+     *        'next', or 'previous'
+     */
+    setPage: function (page) {
+        if (Jx.type(page) === 'string') {
+            switch (page) {
+                case 'first':
+                    this.page = 1;
+                    break;
+                case 'last':
+                    this.page = this.totalPages;
+                    break;
+                case 'next':
+                    this.page++;
+                    break;
+                case 'previous':
+                    this.page--;
+                    break;
+                default:
+                    this.page = this.page + Jx.getNumber(page);
+                    break;
+            }
+        } else {
+            this.page = page;
+        }
+        if (this.cacheTimer.has(this.page)) {
+            $clear(this.cacheTimer.get(this.page));
+            this.cacheTimer.erase(this.page);
+        }
+        if (this.data.has(this.page)){
+            this.loadData(this.data.get(this.page));
+        } else {
+            this.load(this.params);
+        }
+    },
+    /**
+     * APIMethod: getPage
+     * returns the current page
+     */
+    getPage: function () {
+        return this.page;
+    },
+    /**
+     * APIMethod: getNumberOfPages
+     * returns the total number of pages.
+     */
+    getNumberOfPages: function () {
+        return this.totalPages;
+    },
+    /**
+     * APIMethod: setPageSize
+     * sets the current size of the pages. Calling this will expire every page 
+     * and force the current one to reload with the new size.
+     */
+    setPageSize: function (size) {
+        //set the page size 
+        this.itemsPerPage = size;
+        //invalidate all pages cached and reload the current one only
+        this.cacheTimer.each(function(val){
+            $clear(val);
+        },this);
+        this.cacheTimer.empty();
+        this.data.empty();
+        this.load();
+    },
+    /**
+     * APIMethod: getPageSize
+     * returns the current page size
+     */
+    getPageSize: function () {
+        return this.itemsPerPage;
+    },
+    /**
+     * APIMethod: getTotalCount
+     * returns the total number of items as received from the protocol.
+     */
+    getTotalCount: function () {
+        return this.totalItems;
+    }
+    
+    
+});// $Id: $
+/**
+ * Class: Jx.Store.Strategy.Save 
+ * 
+ * Extends: <Jx.Store.Strategy>
+ * 
+ * A Store strategy class for saving data via protocols
+ *
+ * License: 
+ * Copyright (c) 2009, Jon Bomgardner.
+ * 
+ * This file is licensed under an MIT style license
+ */
+Jx.Store.Strategy.Save = new Class({
+    
+    Extends: Jx.Store.Strategy,
+    
+    name: 'save',
+    
+    options: {
+        /**
+         * Option: autoSave
+         * Whether the strateggy should be watching the store to save changes
+         * automatically. Set to True to watch events, set it to a number of 
+         * milliseconds to have the strategy save every so many seconds
+         */
+        autoSave: false
+    },
+    /**
+     * Property: failedChanges
+     * an array holding all failed requests
+     */
+    failedChanges: [],
+    /**
+     * Property: successfulChanges
+     * an array holding all successful requests
+     */
+    successfulChanges: [],
+    /**
+     * Property: totalChanges
+     * The total number of changes being processed. Used to determine
+     * when to fire off the storeChangesCompleted event on the store
+     */
+    totalChanges: 0,
+    
+    init: function () {
+        this.parent();
+        this.bound = {
+            save: this.saveRecord.bind(this),
+            completed: this.onComplete.bind(this)
+        };
+    },
+    
+    activate: function () {
+        this.parent();
+        if (Jx.type(this.options.autoSave) === 'number') {
+            this.periodicalId = this.save.periodical(this.options.autoSave, this);
+        } else if (this.options.autoSave) {
+            this.store.addEvent('storeRecordAdded', this.bound.save);
+            this.store.addEvent('storeColumnChanged', this.bound.save);
+            this.store.addEvent('storeRecordDeleted', this.bound.save);
+        }
         
-        var d;
+    },
+    
+    deactivate: function () {
+        this.parent();
+        if ($defined(this.periodicalId)) {
+            $clear(this.periodicalId);
+        } else if (this.options.autoSave) {
+            this.store.removeEvent('storeRecordAdded', this.bound.save);
+            this.store.removeEvent('storeColumnChanged', this.bound.save);
+            this.store.removeEvent('storeRecordDeleted', this.bound.save);
+        }
         
-        if (!$defined(data)) {
-            d = new Hash();
-        } else {
-            var t = Jx.type(data);
-            switch (t) {
-            case 'hash':
-                d = data;
-                break;
-            case 'object':
-            default:
-                d = new Hash(data);
-                break;
+    },
+    
+    /**
+     * APIMethod: saveRecord
+     * Called by event handlers when store data is changed, updated, or deleted.
+     * If deleted, the record will be removed from the deleted array.
+     * 
+     * Parameters:
+     * record - The Jx.Record instance that was changed
+     * store - The instance of the store
+     */
+    saveRecord: function (record, store) {
+        //determine the status and route based on that
+        if (!this.updating && $defined(record.state)) {
+            if (this.totalChanges === 0) {
+                this.store.protocol.addEvent('dataLoaded', this.bound.completed);
             }
+            this.totalChanges++;
+            var ret;
+            switch (record.state) {
+                case Jx.Record.UPDATE:
+                    ret = this.store.protocol.update(record);
+                    break;
+                case Jx.Record.DELETE:
+                    ret = this.store.protocol['delete'](record);
+                    break;
+                case Jx.Record.INSERT:
+                    ret = this.store.protocol.insert(record);
+                    break;
+            }
+            return ret;
         }
-        d.set('dirty', true);
-        this.data[this.pageIndex][this.data[this.pageIndex].length] = d;
-        this.index = this.data[this.pageIndex].length - 1;
-        this.fireEvent('newrow', this);
     },
+    /**
+     * APIMethod: save
+     * Called manually when the developer wants to save all data changes 
+     * in one shot. It will empty the deleted array and reset all other status 
+     * flags
+     */
+    save: function () {
+        //go through all of the data and figure out what needs to be acted on
+        var records = [];
+        records[Jx.Record.UPDATE] = [];
+        records[Jx.Record.INSERT] = [];
+        
+        this.store.data.each(function (record) {
+            if ($defined(record) && $defined(record.state)) {
+                records[record.state].push(record);
+            }
+        }, this);
+        records[Jx.Record.DELETE] = this.store.deleted;
+        
+        records.flatten().each(function (record) {
+            this.saveRecord(record);
+        }, this);
+        
+    },
+    /**
+     * Method: onComplete
+     * Handles processing of the response(s) from the protocol. Each 
+     * update/insert/delete will have an individual response. If any responses 
+     * come back failed we will hold that response and send it to the caller
+     * via the fired event. This method is responsible for updating the status
+     * of each record as it returns and on inserts, it updates the primary key
+     * of the record. If it was a delete it will remove it permanently from the
+     * store's deleted array (provided it returns successful - based on the 
+     * success attribute of the meta object). When all changes have been 
+     * accounted for the method fires a finished event and passes all of the 
+     * failed responses to the caller so they can be handled appropriately.
+     * 
+     * Parameters:
+     * response - the response returned from the protocol
+     */
+    onComplete: function (response) {
+        if (!response.success() || ($defined(response.meta) && !response.meta.success)) {
+            this.failedChanges.push(response);
+        } else {
+            //process the response
+            var record = response.requestParams[0];
+            if (response.requestType === 'delete') {
+                this.store.deleted.erase(record);
+            } else { 
+                if (response.requestType === 'insert') {
+                    if ($defined(response.data)) {
+                        this.updating = true;
+                        $H(response.data).each(function (val, key) {
+                            record.set(key, val);
+                        }, this);
+                        this.updating = false;
+                    }
+                }
+                record.state = null;
+            } 
+            this.successfulChanges.push(response);
+        }
+        this.totalChanges--;
+        if (this.totalChanges === 0) {
+            this.store.protocol.removeEvent('dataLoaded', this.bound.completed);
+            this.store.fireEvent('storeChangesCompleted', {
+                successful: this.successfulChanges,
+                failed: this.failedChanges
+            });
+        }
+            
+    }
     
+});// $Id: $
+/**
+ * Class: Jx.Store.Strategy.Sort
+ * 
+ * Extends: <Jx.Store.Strategy>
+ * 
+ * Strategy used for sorting stores. It can either be called manually or it
+ * can listen for specific events from the store.
+ *
+ * License: 
+ * Copyright (c) 2009, Jon Bomgardner.
+ * 
+ * This file is licensed under an MIT style license
+ */
+Jx.Store.Strategy.Sort = new Class({
+    
+    Extends: Jx.Store.Strategy,
+    
+    name: 'sort',
+    
+    options: {
+        /**
+         * Option: sortOnStoreEvents
+         * an array of events this strategy should listen for on the store and
+         * sort when it sees them.
+         */
+        sortOnStoreEvents: ['storeColumnChanged','storeDataLoaded'],
+        /**
+         * Option: defaultSort
+         * The default sorting type, currently set to merge but can be any of the
+         * sorters available
+         */
+        defaultSort : 'merge',
+        /**
+         * Option: separator
+         * The separator to pass to the comparator
+         * constructor (<Jx.Compare>) - defaults to '.'
+         */
+        separator : '.',
+        /**
+         * Option: sortCols
+         * An array of columns to sort by arranged in the order you want 
+         * them sorted.
+         */
+        sortCols : []
+    },
+    
     /**
+     * Property: sorters
+     * an object listing the different sorters available
+     */
+    sorters : {
+        quick : "Quicksort",
+        merge : "Mergesort",
+        heap : "Heapsort",
+        'native' : "Nativesort"
+    },
+    
+    init: function () {
+        this.parent();
+        this.bound = {
+            sort: this.sort.bind(this)
+        };
+    },
+    
+    activate: function () {
+        if ($defined(this.options.sortOnStoreEvents)) {
+            this.options.sortOnStoreEvents.each(function (ev) {
+                this.store.addEvent(ev, this.bound.sort);
+            },this);
+        }
+    },
+    
+    deactivate: function () {
+        if ($defined(this.options.sortOnStoreEvents)) {
+            this.options.sortOnStoreEvents.each(function (ev) {
+                this.store.removeEvent(ev, this.bound.sort);
+            },this);
+        }
+    },
+    
+    /**
      * APIMethod: sort 
      * Runs the sorting and grouping
      * 
@@ -16560,9 +18506,9 @@
      */
     sort : function (cols, sort, dir) {
         
-        if (this.count()) {
+        if (this.store.count()) {
         
-            this.fireEvent('sortStart', this);
+            this.store.fireEvent('sortStart', this);
             
             var c;
             if ($defined(cols) && Jx.type(cols) === 'array') {
@@ -16579,17 +18525,17 @@
             
             this.sortType = sort;
             // first sort on the first array item
-            this.data[this.pageIndex] = this.doSort(c[0], sort, this.data[this.pageIndex], true);
+            this.store.data = this.doSort(c[0], sort, this.store.data, true);
         
             if (c.length > 1) {
-                this.data[this.pageIndex] = this.subSort(this.data[this.pageIndex], 0, 1);
+                this.store.data = this.subSort(this.store.data, 0, 1);
             }
         
             if ($defined(dir) && dir === 'desc') {
-                this.data[this.pageIndex].reverse();
+                this.store.data.reverse();
             }
         
-            this.fireEvent('sortFinished', this);
+            this.store.fireEvent('storeSortFinished', this);
         }
     },
     
@@ -16701,822 +18647,125 @@
             this.data = d;
         }
     },
-    
     /**
-     * Method: isRowDirty 
-     * Helps determine if a row is dirty
+     * Method: resolveCol
+     * resolves the given column identifier and resolves it to the 
+     * actual column object in the store.
      * 
-     * Parameters: 
-     * row - the row to check
-     * 
-     * Returns: true | false
+     * Parameters:
+     * col - the name or index of the required column.
      */
-    isRowDirty : function (row) {
-        if (row.has('dirty')) {
-            return row.get('dirty');
-        } else {
-            return false;
-        }
-    },
-    
-    /**
-     * Method: resolveCol 
-     * Determines which array index this column refers to
-     * 
-     * Parameters: 
-     * col - a number referencing a column in the store
-     * 
-     * Returns: the name of the column
-     */
-    resolveCol : function (col) {
+    resolveCol: function (col) {
         var t = Jx.type(col);
         if (t === 'number') {
-            col = this.options.columns[col];
+            col = this.store.options.columns[col];
         } else if (t === 'string') {
-            this.options.columns.each(function (column) {
+            this.store.options.columns.each(function (column) {
                 if (column.name === col) {
                     col = column;
                 }
             }, this);
         }
-        return col;
-    },
+        return col;   
+    }
+});// $Id: $
+/**
+ * Class: Jx.Store.Parser
+ * 
+ * Extends: <Jx.Object>
+ * 
+ * Base class for all parsers
+ *
+ * License: 
+ * Copyright (c) 2009, Jon Bomgardner.
+ * 
+ * This file is licensed under an MIT style license
+ */
+
+Jx.Store.Parser = new Class({
     
-    /**
-     * Method: processData 
-     * Processes the data passed into the function into the store.
-     * 
-     * Parameters: 
-     * data - the data to put into the store
-     */
-    processData : function (data) {
-        this.loaded = false;
-        this.fireEvent('preload', [ this, data ]);
+    Extends: Jx.Object,
+    Family: 'Jx.Store.Parser',
     
-        if (!$defined(this.data)) {
-            this.data = [];
-            this.data[this.pageIndex] = [];
-        }
-        
-        if ($defined(data)) {
-            this.data[this.pageIndex].empty();
-            var type = Jx.type(data);
-            // is this an array?
-            if (type === 'array') {
-                if (this.options.paginate) {
-                    var i = 1;
-                    var p = 0;
-                    data.each(function (item) {
-                        this.data[p].include(new Hash(item));
-                        i++;
-                        if (i === this.options.pageSize) {
-                            i = 1;
-                            p++;
-                            this.data[p] = [];
-                        }
-                    }, this);
-                } else {
-                    data.each(function (item, index) {
-                        this.data[this.pageIndex].include(new Hash(item));
-                    }, this);
-                }
-                
-                this.loaded = true;
-                this.fireEvent('loadFinished', this);
-            } else {
-                this.fireEvent('loadError', [this, data]);
-            }
-            
-        } else {
-            this.loaded = false;
-            this.fireEvent('loadError', [ this, data ]);
-        }
-    },
-    
     /**
-     * APIMethod: getColumns
-     * Allows retrieving the columns array
-     */
-    getColumns: function () {
-        return this.options.columns;
-    },
-    
-    /**
-     * APIMethod: findByColumn
-     * Used to find a specific record by the value in a specific column. This
-     * is particularly useful for finding records by a unique id column. The search
-     * will stop on the first instance of the value
+     * APIMethod: parse
+     * Reads data passed to it by a protocol and parses it into a specific
+     * format needed by the store/record.
      * 
      * Parameters:
-     * column - the name of the column to search by
-     * value - the value to look for
-     * inPage - flag telling method whether to search only in the current page.
-     *          Defaults to true.
+     * data - string of data to parse
      */
-    findByColumn: function (column, value, inPage) {
-        
-        inPage = $defined(inPage) ? inPage : true;
-        
-        if (!$defined(this.comparator)) {
-            this.comparator = new Jx.Compare({
-                separator : this.options.separator
-            });
-        }
-        
-        column = this.resolveCol(column);
-        
-        var fn = this.comparator[column.type].bind(this.comparator);
-        
-        
-        var i = 0;
-        var index = null;
-        if (inPage) {
-            this.data[this.pageIndex].each(function (record) {
-                if (fn(record.get(column.name), value) === 0) {
-                    index = i;
-                }
-                i++;
-            }, this);
-        } else {
-            this.data.each(function (page) {
-                page.each(function (record) {
-                    if (fn(record.get(column.name), value) === 0) {
-                        index = i;
-                    }
-                    i++;
-                }, this);
-            }, this);
-        }
-        return index;
-    },
-    
+    parse: $empty,
     /**
-     * APIMethod: getRowObject
-     * Allows the user to get all of the data for the current row as an object.
+     * APIMethod: encode
+     * Takes an Jx.Record object and encodes it into a format that can be transmitted 
+     * by a protocol.
      * 
+     * Parameters:
+     * object - an object to encode
      */
-    getRowObject: function () {
-        return this.data[this.pageIndex][this.index].getClean();
-    }
-});
-// $Id: $
-/**
- * Class: Jx.Store.Remote
- * 
- * Extends: <Jx.Store>
- * 
- * This class adds the ability to load/save data remotely.
- *  
- * Events:
- * onSaveSuccess() - event fired when all saving happens successfully
- * onSaveError() - event fired when the server returns an error during saving
- * 
- * Example:
- * (code)
- * (end)
- *
- * License: 
- * Copyright (c) 2009, Jon Bomgardner.
- * 
- * This file is licensed under an MIT style license
- */
-Jx.Store.Remote = new Class({
-
-    Extends : Jx.Store,
-
-    options : {
-        /**
-         * Option: dataUrl
-         * The URL to get data from
-         */
-        dataUrl : '',
-        /**
-         * Option: autoSave
-         * Whether to automatically save data changes
-         */
-        autoSave : false,
-        /**
-         * Option: saveUrl
-         * The URL to send data to to be saved
-         */
-        saveUrl : ''
-    },
-
-    saveCount : 0,
-    continueSaving : true,
-    /**
-     * APIMethod: init
-     * Creates the Remote Store.
-     */
-    init : function () {
-        this.parent();
-        this.addEvent('newrow', this.onNewRow.bind(this));
-        this.addEvent('columnChanged', this.saveRow.bind(this));
-    },
-
-    /**
-     * APIMethod: load
-     * Used to load data either locally or remote
-     * 
-     * Parameters:
-     * params - an object of params to pass to load. These will be sent in the request. 
-     */
-    load : function (params) {
-        this.params = $defined(params) ? params : {};
-        this.remoteLoad(params);
-    },
-
-    /** 
-     * APIMethod: refresh
-     * Override of base function <Jx.Store#refresh>. Allow refreshing data from the server
-     * 
-     * Parameters:
-     * params - an object of params to pass to load. These will be sent in the request. 
-     * reset - whether to reset the counter after the refresh
-     */
-    refresh : function (params, reset) {
-        //Call the load function to get the data
-        //from the server and reset the counter if requested
-        if ($defined(this.options.dataUrl)) {
-            this.params = $defined(params) ? params : this.params;
-            this.load(this.params);
-        } else {
-            return null;
-        }
-        if (reset) {
-            this.index = 0;
-        }
-    
-    },
-    
-    /** 
-     * APIMethod: save
-     * Determines if a row is dirty and needs to be saved to the server.
-     */
-    save : function () {
-        if ($defined(this.data)) {
-            //count how many rows to save
-            this.data.each(function (row, index) {
-                if (this.isRowDirty(row)) {
-                    this.saveCount++;
-                }
-            }, this);
-            //save all dirty rows
-            this.data.each(function (row, index) {
-                if (this.isRowDirty(row) && this.continueSaving) {
-                    row.erase('dirty');
-                    this.remoteSave(row);
-                }
-            }, this);
-        } else {
-            return null;
-        }
-    },
-    
-    saveRow: function (index, column, oldValue, newValue) {
-        if (this.options.autoSave) {
-            this.remoteSave(this.data[index]);
-        }
-    },
-    
-    /**
-     * Method: onNewRow
-     * Called when a new row is added (event listener). If autoSave is set, this will
-     * fire off the save method.
-     */
-    onNewRow : function () {
-        if (this.options.autoSave) {
-            this.save();
-        }
-    },
-    
-    /** 
-     * Method: remoteSave
-     * Actually does the work of sending the row to the server for saving.
-     * 
-     * Parameters:
-     * data - the row to save
-     */
-    remoteSave : function (data) {
-        //save the data passed in.
-        if (Jx.type(data) === 'hash' && this.continueSaving) {
-            // save it
-            var d = data.getClean();
-            var req = new Request.JSON({
-                data : d,
-                url : this.options.saveUrl,
-                onSuccess : this.processReturn.bind(this),
-                onFailure : this.handleSaveError.bind(this),
-                method : 'post'
-            });
-            req.send();
-        } else {
-            //don't save it
-            return false;
-        }
-    },
-    
-    /** 
-     * Method: remoteLoad
-     * Calls the server to get data
-     */
-    remoteLoad : function (params) {
-        params = $defined(params) ? params : {};
-        var req = new Request.JSON({
-            url : this.options.dataUrl,
-            data: params,
-            onSuccess : this.processGetReturn.bind(this),
-            onFailure : this.handleLoadError.bind(this),
-            method : 'get'
-        });
-        req.send();
-    },
-    
-    /**
-     * Method: processReturn
-     * processes the return from the save request
-     * 
-     * Parameters:
-     * data - decoded JSON object
-     * text - the JSON object as a string
-     */
-    processReturn : function (data, text) {
-        if ($defined(data) && $defined(data.success) && data.success === true) {
-            this.processSaveReturn(data.data);
-        } else {
-            this.handleSaveError(data, text);
-        }
-    },
-    /**
-     * Method: processGetReturn
-     * Processes returned data from the get request
-     * 
-     * Parameters:
-     * data - decoded JSON object
-     * text - the JSON object as a string
-     */
-    processGetReturn : function (data, text) {
-        if ($defined(data) && $defined(data.success) && data.success === true) {
-            this.processGetData(data.data);
-        } else {
-            this.handleLoadError(data, text);
-        }
-    },
-    /** 
-     * Method: processSaveReturn
-     * Private function. Decreases save counter and fires saveSuccess event when all rows are saved
-     * 
-     * Parameters:
-     * data - json data returned from server
-     */
-    processSaveReturn : function (data) {
-        this.saveCount--;
-        if (this.saveCount === 0) {
-            this.fireEvent('saveSuccess', this);
-        }
-    },
-    
-    /** 
-     * Method: handleSaveError
-     * Private function. Handles the case where the server returns an error (no JSON object, usually a 500 or 404 type error)
-     * Fires saveError event in this case and sets continue saving to false.
-     * 
-     * Parameters:
-     * data - the data returned from the server
-     * text - the text version of the data
-     */
-    handleSaveError : function (data, text) {
-        this.continueSaving = false;
-        this.fireEvent('saveError', [ this, data, text ]);
-    },
-    
-    /**
-     * Method: handleLoadError
-     * Private function. Handles problems with loading data by firing the loadError event.
-     * 
-     * Parameters:
-     * data - the data returned from the server
-     * text - the text version of the data
-     */
-    handleLoadError : function (data, text) {
-        this.fireEvent('loadError', [ this, data ]);
-    },
-    
-    /** 
-     * Method: processGetData
-     * Private function. Used to process data retrieved from the server
-     * 
-     * Parameters:
-     * data - the data returned from the server
-     * text - the text version of the data
-     */
-    processGetData : function (data) {
-        if ($defined(data.columns)) {
-            this.options.columns = data.columns;
-        }
-        this.processData(data.data);
-    }
-
-});
-// $Id: $
-/**
- * class: Jx.Sort.Mergesort 
- * 
- * Extends: <Jx.Sort>
- * 
- * Implementation of a mergesort algorithm designed to
- * work on <Jx.Store> data.
- * 
- * Example:
- * (code)
- * (end)
- *
- * License: 
- * Copyright (c) 2009, Jon Bomgardner.
- * 
- * This file is licensed under an MIT style license
- */
-Jx.Sort.Mergesort = new Class({
-
-    Extends : Jx.Sort,
-
-    name : 'mergesort',
-
-    /**
-     * APIMethod: sort 
-     * Actually runs the sort on the data
-     * 
-     * returns: the sorted data
-     */
-    sort : function () {
-        this.fireEvent('start');
-        var d = this.mergeSort(this.data);
-        this.fireEvent('stop');
-        return d;
-
-    },
-
-    /**
-     * Method: mergeSort 
-     * Does the physical sorting. Called
-     * recursively.
-     * 
-     * Parameters: 
-     * arr - the array to sort
-     * 
-     * returns: the sorted array
-     */
-    mergeSort : function (arr) {
-        if (arr.length <= 1) {
-            return arr;
-        }
-
-        var middle = (arr.length) / 2;
-        var left = arr.slice(0, middle);
-        var right = arr.slice(middle);
-        left = this.mergeSort(left);
-        right = this.mergeSort(right);
-        var result = this.merge(left, right);
-        return result;
-    },
-
-    /**
-     * Method: merge 
-     * Does the work of merging to arrays in order.
-     * 
-     * parameters: 
-     * left - the left hand array 
-     * right - the right hand array
-     * 
-     * returns: the merged array
-     */
-    merge : function (left, right) {
-        var result = [];
-
-        while (left.length > 0 && right.length > 0) {
-            if (this.comparator((left[0]).get(this.col), (right[0])
-                    .get(this.col)) <= 0) {
-                result.push(left[0]);
-                left = left.slice(1);
-            } else {
-                result.push(right[0]);
-                right = right.slice(1);
-            }
-        }
-        while (left.length > 0) {
-            result.push(left[0]);
-            left = left.slice(1);
-        }
-        while (right.length > 0) {
-            result.push(right[0]);
-            right = right.slice(1);
-        }
-        return result;
-    }
-
-});
-// $Id: $
-/**
- * Class: Jx.Sort.Heapsort 
- * 
- * Extends: <Jx.Sort>
- * 
- * Implementation of a heapsort algorithm designed to
- * work on <Jx.Store> data.
- * 
- * 
- * Example:
- * (code)
- * (end)
- *
- * License: 
- * Copyright (c) 2009, Jon Bomgardner.
- * 
- * This file is licensed under an MIT style license
- */
-Jx.Sort.Heapsort = new Class({
-
-    Extends : Jx.Sort,
-
-    name : 'heapsort',
-
-    /**
-     * APIMethod: sort 
-     * Actually runs the sort on the data
-     * 
-     * Returns: the sorted data
-     */
-    sort : function () {
-        this.fireEvent('start');
-
-        var count = this.data.length;
-
-        if (count === 1) {
-            return this.data;
-        }
-
-        if (count > 2) {
-            this.heapify(count);
-
-            var end = count - 1;
-            while (end > 1) {
-                this.data.swap(end, 0);
-                end = end - 1;
-                this.siftDown(0, end);
-            }
-        } else {
-            // check then order the two we have
-            if ((this.comparator((this.data[0]).get(this.col), (this.data[1])
-                    .get(this.col)) > 0)) {
-                this.data.swap(0, 1);
-            }
-        }
-
-        this.fireEvent('stop');
-        return this.data;
-    },
-
-    /**
-     * Method: heapify 
-     * Puts the data in Max-heap order
-     * 
-     * Parameters: count - the number of records we're sorting
-     */
-    heapify : function (count) {
-        var start = Math.round((count - 2) / 2);
-
-        while (start >= 0) {
-            this.siftDown(start, count - 1);
-            start = start - 1;
-        }
-    },
-
-    /**
-     * Method: siftDown 
-     * 
-     * Parameters: start - the beginning of the sort range end - the end of the
-     * sort range
-     */
-    siftDown : function (start, end) {
-        var root = start;
-
-        while (root * 2 <= end) {
-            var child = root * 2;
-            if ((child + 1 < end) && (this.comparator((this.data[child]).get(this.col),
-                            (this.data[child + 1]).get(this.col)) < 0)) {
-                child = child + 1;
-            }
-            if ((this.comparator((this.data[root]).get(this.col),
-                    (this.data[child]).get(this.col)) < 0)) {
-                this.data.swap(root, child);
-                root = child;
-            } else {
-                return;
-            }
-        }
-    }
-
-});
-// $Id: $
-/**
- * Class: Jx.Sort.Quicksort 
- * 
- * Extends: <Jx.Sort>
- * 
- * Implementation of a quicksort algorithm designed to
- * work on <Jx.Store> data.
- * 
- * Example:
- * (code)
- * (end)
- *
- * License: 
- * Copyright (c) 2009, Jon Bomgardner.
- * 
- * This file is licensed under an MIT style license
- */
-Jx.Sort.Quicksort = new Class({
-
-    Extends : Jx.Sort,
-
-    name : 'quicksort',
-
-    /**
-     * APIMethod: sort 
-     * Actually runs the sort on the data
-     * 
-     * returns: the sorted data
-     */
-    sort : function (left, right) {
-        this.fireEvent('start');
-
-        if (!$defined(left)) {
-            left = 0;
-        }
-        if (!$defined(right)) {
-            right = this.data.length - 1;
-        }
-
-        this.quicksort(left, right);
-
-        this.fireEvent('stop');
-
-        return this.data;
-
-    },
-
-    /**
-     * Method: quicksort 
-     * Initiates the sorting. Is
-     * called recursively
-     * 
-     * Parameters: 
-     * left - the left hand, or lower, bound of the sort
-     * right - the right hand, or upper, bound of the sort
-     */
-    quicksort : function (left, right) {
-        if (left >= right) {
-            return;
-        }
-
-        var index = this.partition(left, right);
-        this.quicksort(left, index - 1);
-        this.quicksort(index + 1, right);
-    },
-
-    /**
-     * Method: partition
-     * 
-     * Parameters: 
-     * left - the left hand, or lower, bound of the sort
-     * right - the right hand, or upper, bound of the sort
-     */
-    partition : function (left, right) {
-        this.findMedianOfMedians(left, right);
-        var pivotIndex = left;
-        var pivotValue = (this.data[pivotIndex]).get(this.col);
-        var index = left;
-        var i;
-
-        this.data.swap(pivotIndex, right);
-        for (i = left; i < right; i++) {
-            if (this.comparator((this.data[i]).get(this.col),
-                    pivotValue) < 0) {
-                this.data.swap(i, index);
-                index = index + 1;
-            }
-        }
-        this.data.swap(right, index);
-
-        return index;
-
-    },
-
-    /**
-     * Method: findMedianOfMedians
-     * 
-     * Parameters: l
-     * eft - the left hand, or lower, bound of the sort
-     * right - the right hand, or upper, bound of the sort
-     */
-    findMedianOfMedians : function (left, right) {
-        if (left === right) {
-            return this.data[left];
-        }
-
-        var i;
-        var shift = 1;
-        while (shift <= (right - left)) {
-            for (i = left; i <= right; i += shift * 5) {
-                var endIndex = (i + shift * 5 - 1 < right) ? i + shift * 5 - 1 : right;
-                var medianIndex = this.findMedianIndex(i, endIndex,
-                        shift);
-
-                this.data.swap(i, medianIndex);
-            }
-            shift *= 5;
-        }
-
-        return this.data[left];
-    },
-
-    /**
-     * Method: findMedianIndex 
-     * 
-     * Parameters: 
-     * left - the left hand, or lower, bound of the sort
-     * right - the right hand, or upper, bound of the sort
-     */
-    findMedianIndex : function (left, right, shift) {
-        var groups = Math.round((right - left) / shift + 1);
-        var k = Math.round(left + groups / 2 * shift);
-        if (k > this.data.length - 1) {
-            k = this.data.length - 1;
-        }
-        for (var i = left; i < k; i += shift) {
-            var minIndex = i;
-            var v = this.data[minIndex];
-            var minValue = v.get(this.col);
-
-            for (var j = i; j <= right; j += shift) {
-                if (this.comparator((this.data[j]).get(this.col),
-                        minValue) < 0) {
-                    minIndex = j;
-                    minValue = (this.data[minIndex]).get(this.col);
-                }
-            }
-            this.data.swap(i, minIndex);
-        }
-
-        return k;
-    }
-});
-// $Id: $
+    encode: $empty
+});// $Id: $
 /**
- * Class: Jx.Sort.Nativesort
+ * Class: Jx.Store.Parser.JSON
  * 
- * Extends: <Jx.Sort>
+ * Extends: <Jx.Store.Parser>
  * 
- * Implementation of a native sort algorithm designed to work on <Jx.Store> data.
- * 
- * 
- * Example:
- * (code)
- * (end)
+ * A Parser that handles encoding and decoding JSON strings
  *
  * License: 
  * Copyright (c) 2009, Jon Bomgardner.
  * 
  * This file is licensed under an MIT style license
  */
-Jx.Sort.Nativesort = new Class({
-
-    Extends : Jx.Sort,
-
-    name : 'nativesort',
-
+Jx.Store.Parser.JSON = new Class({
+    
+    Extends: Jx.Store.Parser,
+    
+    options: {
+        /**
+         * Option: secure
+         * Whether to use secure decoding. When using secure decoding the 
+         * parser will return null if any invalid JSON characters are in the
+         * passed in string. Defaults to false.
+         */
+        secure: false
+    },
     /**
-     * Method: sort
-     * Actually runs the sort on the data
+     * APIMethod: parse
+     * Turns a string into a JSON object if possible.
      * 
-     * Returns:
-     * the sorted data
+     * Parameters:
+     * data - the string representation of the data we're parsing
      */
-    sort : function () {
-        this.fireEvent('start');
-
-        var compare = function (a, b) {
-            return this.comparator((this.data[a]).get(this.col), (this.data[b])
-                    .get(this.col));
-        };
-
-        this.data.sort(compare);
-        this.fireEvent('stop');
-        return this.data;
+    parse: function (data) {
+        var type = Jx.type(data);
+        
+        if (type === 'string') {
+            return JSON.decode(data, this.options.secure);
+        }
+        //otherwise just return the data object
+        return data;
+    },
+    
+    /**
+     * APIMethod: encode
+     * Takes an object and turns it into JSON.
+     * 
+     * Parameters: 
+     * object - the object to encode
+     */
+    encode: function (object) {
+        var data;
+        if (object instanceof Jx.Record) {
+            data = object.asHash();
+        } else {
+            data = object;
+        }
+            
+        return JSON.encode(data);
     }
-
-});
-// $Id: button.js 602 2009-11-10 19:41:36Z pagameba $
+});// $Id: button.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.Button
  *
@@ -17559,8 +18808,8 @@
  * automatically get inserted into the web page.  Typically a button
  * is used as part of building another capability such as a Jx.Toolbar.
  * However, if you want to manually insert the button into your application,
- * you may use the addTo method to append or insert the button into the 
- * page.  
+ * you may use the addTo method to append or insert the button into the
+ * page.
  *
  * 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
@@ -17571,7 +18820,7 @@
  * '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 to be called when a button is clicked.  You can use the 
+ * than one function to be called when a button is clicked.  You can use the
  * removeEvent('click', myFunction) method to stop receiving click events.
  *
  * Example:
@@ -17604,22 +18853,22 @@
  * down - the button is down (only if type is 'toggle')
  * up - the button is up (only if the type is 'toggle').
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Button = new Class({
     Family: 'Jx.Button',
     Extends: Jx.Widget,
-    
+
     /**
      * the HTML element that is inserted into the DOM for this button.  You
      * may reference this object to append it to the DOM or remove it from
      * the DOM if necessary.
      */
     domObj: null,
-    
+
     options: {
         /* Option: id
          * optional.  A string value to use as the ID of the button
@@ -17648,11 +18897,11 @@
          * default true, whether the button is a toggle button or not.
          */
         toggle: false,
-        
+
         toggleClass: 'jxButtonToggle',
         pressedClass: 'jxButtonPressed',
         activeClass: 'jxButtonActive',
-        
+
         /* Option: active
          * optional, default false.  Controls the initial state of toggle
          * buttons.
@@ -17670,33 +18919,33 @@
          */
         template: '<span class="jxButtonContainer"><a class="jxButton"><span class="jxButtonContent"><img class="jxButtonIcon" src="'+Jx.aPixel.src+'"><span class="jxButtonLabel"></span></span></a></span>'
     },
-    
+
     classes: new Hash({
         domObj: 'jxButtonContainer',
         domA: 'jxButton',
         domImg: 'jxButtonIcon',
         domLabel: 'jxButtonLabel'
     }),
-    
+
     /**
      * APIMethod: render
      * create a new button.
      */
     render: function() {
         this.parent();
-        
+
         /* is the button toggle-able? */
         if (this.options.toggle) {
             this.domObj.addClass(this.options.toggleClass);
         }
-        
+
         // the clickable part of the button
         if (this.domA) {
             var hasFocus;
             var mouseDown;
             this.domA.set({
-                href: 'javascript:void(0)', 
-                title: this.options.tooltip, 
+                href: 'javascript:void(0)',
+                title: this.options.tooltip,
                 alt: this.options.tooltip
             });
             this.domA.addEvents({
@@ -17743,7 +18992,7 @@
         if (this.domImg) {
             if (this.options.image || !this.options.label) {
                 this.domImg.set({
-                    title: this.options.tooltip, 
+                    title: this.options.tooltip,
                     alt: this.options.tooltip
                 });
                 if (this.options.image && this.options.image.indexOf('a_pixel.png') == -1) {
@@ -17757,7 +19006,7 @@
                 this.domImg.setStyle('display','none');
             }
         }
-        
+
         if (this.domLabel) {
             if (this.options.label || this.domA.hasClass('jxDiscloser')) {
                 this.domLabel.set('html',this.options.label);
@@ -17766,20 +19015,20 @@
                 this.domLabel.setStyle('display','none');
             }
         }
-        
+
         if (this.options.id) {
             this.domObj.set('id', this.options.id);
         }
-        
+
         //update the enabled state
         this.setEnabled(this.options.enabled);
-        
+
         //update the active state if necessary
         if (this.options.active) {
             this.options.active = false;
             this.setActive(true);
         }
-        
+
     },
     /**
      * Method: clicked
@@ -17806,10 +19055,10 @@
      * Returns:
      * {Boolean} whether the button is enabled or not
      */
-    isEnabled: function() { 
-        return this.options.enabled; 
+    isEnabled: function() {
+        return this.options.enabled;
     },
-    
+
     /**
      * Method: setEnabled
      * enable or disable the button.
@@ -17833,8 +19082,8 @@
      * Returns:
      * {Boolean} the active state of a toggle button
      */
-    isActive: function() { 
-        return this.options.active; 
+    isActive: function() {
+        return this.options.active;
     },
     /**
      * Method: setActive
@@ -17874,10 +19123,10 @@
     },
     /**
      * Method: setLabel
-     * 
+     *
      * sets the text of the button.
      *
-     * Parameters: 
+     * Parameters:
      *
      * label - {String} the new label for the button
      */
@@ -17890,7 +19139,7 @@
     },
     /**
      * Method: getLabel
-     * 
+     *
      * returns the text of the button.
      */
     getLabel: function() {
@@ -17900,7 +19149,7 @@
      * Method: setTooltip
      * sets the tooltip displayed by the button
      *
-     * Parameters: 
+     * Parameters:
      * tooltip - {String} the new tooltip
      */
     setTooltip: function(tooltip) {
@@ -18143,12 +19392,12 @@
             Jx.Button.Flyout.Stack[Jx.Button.Flyout.Stack.length - 1].hide();
         }
     }
-});// $Id: layout.js 602 2009-11-10 19:41:36Z pagameba $
+});// $Id: layout.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.Layout
  *
  * Extends: <Jx.Object>
- * 
+ *
  * Jx.Layout is used to provide more flexible layout options for applications
  *
  * Jx.Layout wraps an existing DOM element (typically a div) and provides
@@ -18166,16 +19415,16 @@
  * Events:
  * sizeChange - fired when the size of the container changes
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
- 
+
 Jx.Layout = new Class({
     Family: 'Jx.Layout',
     Extends: Jx.Object,
-    
+
     options: {
         /* Option: propagate
          * boolean, controls propogation of resize to child nodes.
@@ -18253,14 +19502,14 @@
          */
         maxHeight: -1
     },
-    
+
     /**
      * Parameters:
      * domObj - {HTMLElement} element or id to apply the layout to
      * options - <Jx.Layout.Options>
      */
     parameters: ['domObj','options'],
-    
+
     /**
      * APIMethod: init
      * Create a new instance of Jx.Layout.
@@ -18273,11 +19522,11 @@
 
         if (document.body == this.domObj.parentNode) {
             window.addEvent('resize', this.windowResize.bindWithEvent(this));
-            window.addEvent('load', this.windowResize.bind(this));                
+            window.addEvent('load', this.windowResize.bind(this));
         }
         //this.resize();
     },
-    
+
     /**
      * Method: windowResize
      * when the window is resized, any Jx.Layout controlled elements that are
@@ -18291,7 +19540,7 @@
          }
          this.resizeTimer = this.resize.delay(50, this);
     },
-    
+
     /**
      * Method: resize
      * resize the element controlled by this Jx.Layout object.
@@ -18323,28 +19572,28 @@
         if (!document.id(this.domObj.parentNode)) {
             return;
         }
-        
+
         var parentSize;
         if (this.domObj.parentNode.tagName == 'BODY') {
             parentSize = Jx.getPageDimensions();
         } else {
             parentSize = document.id(this.domObj.parentNode).getContentBoxSize();
         }
-    
+
         if (this.lastParentSize && !needsResize) {
-            needsResize = (this.lastParentSize.width != parentSize.width || 
+            needsResize = (this.lastParentSize.width != parentSize.width ||
                           this.lastParentSize.height != parentSize.height);
         } else {
             needsResize = true;
         }
-        this.lastParentSize = parentSize;            
-        
+        this.lastParentSize = parentSize;
+
         if (!needsResize) {
             return;
         }
-        
+
         var l, t, w, h;
-        
+
         /* calculate left and width */
         if (this.options.left != null) {
             /* fixed left */
@@ -18387,7 +19636,7 @@
                     w = this.options.width;
                 }
             }
-            
+
         } else {
             if (this.options.right == null) {
                 if (this.options.width == null) {
@@ -18431,12 +19680,12 @@
                     }
                     if (this.options.maxWidth >= 0 && w > this.options.maxWidth) {
                         l = w - this.options.maxWidth - this.options.right;
-                        w = this.options.maxWidth;                        
+                        w = this.options.maxWidth;
                     }
                 }
             }
         }
-        
+
         /* calculate the top and height */
         if (this.options.top != null) {
             /* fixed top */
@@ -18475,7 +19724,7 @@
                     }
                     if (this.options.maxHeight >= 0 && h > this.options.maxHeight) {
                         h = this.options.maxHeight;
-                    }                
+                    }
                 } else {
                     /* fixed bottom, fixed height
                      * respect top and height, allow bottom to stretch
@@ -18534,10 +19783,10 @@
                 }
             }
         }
-        
+
         //TODO: check left, top, width, height against current styles
         // and only apply changes if they are not the same.
-        
+
         /* apply the new sizes */
         var sizeOpts = {width: w};
         if (this.options.position == 'absolute') {
@@ -18556,20 +19805,20 @@
             }
         }
         this.domObj.setBorderBoxSize(sizeOpts);
-        
+
         if (this.options.propagate) {
             // propogate changes to children
             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: tab.js 602 2009-11-10 19:41:36Z pagameba $
+});// $Id: tab.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.Button.Tab
  *
@@ -18583,7 +19832,7 @@
  * some flexibility in layout options.
  *
  * A tab is a <Jx.ContentLoader> and you can specify the initial content of
- * the tab using any of the methods supported by 
+ * the tab using any of the methods supported by
  * <Jx.ContentLoader::loadContent>.  You can acccess the actual DOM element
  * that contains the content (if you want to dynamically insert content
  * for instance) via the <Jx.Tab::content> property.
@@ -18594,7 +19843,7 @@
  * Example:
  * (code)
  * var tab1 = new Jx.Button.Tab({
- *     label: 'tab 1', 
+ *     label: 'tab 1',
  *     content: 'content1',
  *     onDown: function(tab) {
  *         console.log('tab became active');
@@ -18605,11 +19854,11 @@
  * });
  * (end)
  *
- * 
  *
- * License: 
+ *
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Button.Tab = new Class({
@@ -18620,13 +19869,13 @@
      * {HTMLElement} The content area that is displayed when the tab is active.
      */
     content: null,
-    
+
     options: {
         toggleClass: 'jxTabToggle',
         pressedClass: 'jxTabPressed',
         activeClass: 'jxTabActive',
         activeTabClass: 'tabContentActive',
-        template: '<span class="jxTabContainer"><a class="jxTab"><span class="jxTabContent"><img class="jxTabIcon"><span class="jxTabLabel"></span></span></a><a class="jxTabClose"><img src="'+Jx.aPixel.src+'"></a></span>',
+        template: '<span class="jxTabContainer"><a class="jxTab"><span class="jxTabContent"><img class="jxTabIcon"><span class="jxTabLabel"></span></span></a><a class="jxTabClose"></span>',
         contentTemplate: '<div class="tabContent"></div>'
     },
     classes: new Hash({
@@ -18637,7 +19886,7 @@
         domClose: 'jxTabClose',
         content: 'tabContent'
     }),
-    
+
     /**
      * APIMethod: render
      * Create a new instance of Jx.Button.Tab.  Any layout options passed are used
@@ -18656,7 +19905,7 @@
         this.addEvent('up', function(){
             this.content.removeClass(this.options.activeTabClass);
         }.bind(this));
-        
+
         //remove the close button if necessary
         if (this.domClose) {
             if (this.options.close) {
@@ -18676,10 +19925,10 @@
      */
     clicked : function(evt) {
         if (this.options.enabled) {
-            this.setActive(true);            
+            this.setActive(true);
         }
     }
-});// $Id: colorpalette.js 602 2009-11-10 19:41:36Z pagameba $
+});// $Id: colorpalette.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.ColorPalette
  *
@@ -18693,7 +19942,7 @@
  * method.  However, a <Jx.Button> suJx.Tooltipbclass is provided (<Jx.Button.Color>)
  * that embeds a colour panel inside a button for easy use in toolbars.
  *
- * Colour changes are propogated via a change event.  To be notified 
+ * Colour changes are propogated via a change event.  To be notified
  * of changes in a Jx.ColorPalette, use the addEvent method.
  *
  * Example:
@@ -18704,9 +19953,9 @@
  * change - triggered when the color changes.
  * click - the user clicked on a color swatch (emitted after a change event)
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.ColorPalette = new Class({
@@ -18757,7 +20006,7 @@
         this.previewSwatch = new Element('div', {'class':'jxColorHover'});
         d.adopt(this.selectedSwatch);
         d.adopt(this.previewSwatch);
-        
+
         top.adopt(d);
 
         this.colorInputLabel = new Element('label', {'class':'jxColorLabel', html:'#'});
@@ -18978,7 +20227,7 @@
     }
 });
 
-// $Id: color.js 602 2009-11-10 19:41:36Z pagameba $ 
+// $Id: color.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.Button.Color
  *
@@ -19007,17 +20256,17 @@
  * Events:
  * change - fired when the color is changed.
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Button.Color = new Class({
     Family: 'Jx.Button.Color',
     Extends: Jx.Button.Flyout,
-    
+
     swatch: null,
-     
+
     options: {
         /**
          * Option: color
@@ -19051,14 +20300,14 @@
             Jx.Button.Color.ColorPalette = new Jx.ColorPalette(this.options);
         }
 
-        /* we need to have an image to replace, but if a label is 
+        /* we need to have an image to replace, but if a label is
            requested, there wouldn't normally be an image. */
         this.options.image = Jx.aPixel.src;
 
         /* now we can safely initialize */
         this.parent();
         this.updateSwatch();
-        
+
         this.bound = {
             changed: this.changed.bind(this),
             hide: this.hide.bind(this)
@@ -19083,7 +20332,7 @@
          * a second color button when another one is open - the color
          * wasn't updating properly
          */
-         
+
         Jx.Button.Color.ColorPalette.options.color = this.options.color;
         Jx.Button.Color.ColorPalette.options.alpha = this.options.alpha/100;
         Jx.Button.Color.ColorPalette.updateSelected();
@@ -19158,7 +20407,7 @@
         if (this.options.alpha < 100) {
             styles.filter = 'Alpha(opacity='+(this.options.alpha)+')';
             styles.opacity = this.options.alpha / 100;
-            
+
         } else {
             styles.opacity = '';
             styles.filter = '';
@@ -19166,7 +20415,7 @@
         this.swatch.setStyles(styles);
     }
 });
-// $Id: menu.js 606 2009-11-11 15:22:37Z pagameba $
+// $Id: menu.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.Menu
  *
@@ -19182,9 +20431,9 @@
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Menu = new Class({
@@ -19207,9 +20456,9 @@
      * {<Jx.List>} the list of items in the menu
      */
     list: null,
-    
+
     parameters: ['buttonOptions', 'options'],
-    
+
     options: {
         template: "<div class='jxMenuContainer'><ul class='jxMenu'></ul></div>",
         buttonTemplate: '<span class="jxButtonContainer"><a class="jxButton jxButtonMenu jxDiscloser"><span class="jxButtonContent"><img class="jxButtonIcon" src="'+Jx.aPixel.src+'"><span class="jxButtonLabel"></span></span></a></span>',
@@ -19218,12 +20467,12 @@
             vertical: ['bottom top', 'top bottom']
         }
     },
-    
+
     classes: new Hash({
         contentContainer: 'jxMenuContainer',
         subDomObj: 'jxMenu'
     }),
-    
+
     /**
      * APIMethod: render
      * Create a new instance of Jx.Menu.
@@ -19235,7 +20484,7 @@
         }
 
         this.contentContainer.addEvent('onContextmenu', function(e){e.stop();});
-        
+
         this.list = new Jx.List(this.subDomObj, {
             onRemove: function(item) {
                 item.setOwner(null);
@@ -19251,30 +20500,30 @@
             }));
 
             this.button.domA.addEvent('mouseover', this.onMouseOver.bindWithEvent(this));
-            
+
             this.domObj = this.button.domObj;
             this.domObj.store('jxMenu', this);
         }
-        
+
         /* pre-bind the hide function for efficiency */
         this.bound = {
             mousedown: this.hide.bindWithEvent(this),
             keypress: this.keypressHandler.bindWithEvent(this)
         };
-        
+
         if (this.options.parent) {
             this.addTo(this.options.parent);
         }
     },
     /**
-     * Method: add
+     * APIMethod: add
      * Add menu items to the sub menu.
      *
      * Parameters:
      * item - {<Jx.MenuItem>} the menu item to add.  Multiple menu items
      * can be added by passing multiple arguments to this function.
      * position -
-     * owner - 
+     * owner -
      */
     add: function(item, position, owner) {
         if (Jx.type(item) == 'array') {
@@ -19288,7 +20537,7 @@
         return this;
     },
     /**
-     * Method: remove
+     * APIMethod: remove
      * Remove a menu item from the menu
      *
      * Parameters:
@@ -19299,7 +20548,7 @@
         return this;
     },
     /**
-     * Method: replace
+     * APIMethod: replace
      * Replace a menu item with another menu item
      *
      * Parameters:
@@ -19328,7 +20577,7 @@
             this.show({event:e});
         }
     },
-    
+
     /**
      * Method: eventInMenu
      * determine if an event happened inside this menu or a sub menu
@@ -19365,20 +20614,20 @@
             }
             return false;
         }
-        
+
         /*
         this.list.items().some(
             function(item) {
                 var menuItem = item.retrieve('jxMenuItem');
-                return menuItem instanceof Jx.Menu.SubMenu && 
+                return menuItem instanceof Jx.Menu.SubMenu &&
                        menuItem.eventInMenu(e);
             }
         );
         */
     },
-    
+
     /**
-     * Method: hide
+     * APIMethod: hide
      * Hide the menu.
      *
      * Parameters:
@@ -19398,17 +20647,17 @@
             Jx.Menu.Menus[0] = null;
         }
         if (this.button && this.button.domA) {
-            this.button.domA.removeClass(this.button.options.activeClass);            
+            this.button.domA.removeClass(this.button.options.activeClass);
         }
         this.list.each(function(item){item.retrieve('jxMenuItem').hide(e);});
         document.removeEvent('mousedown', this.bound.mousedown);
         document.removeEvent('keydown', this.bound.keypress);
         this.contentContainer.dispose();
         this.visibleItem = null;
-        this.fireEvent('hide', this); 
+        this.fireEvent('hide', this);
     },
     /**
-     * Method: show
+     * APIMethod: show
      * Show the menu
      */
     show : function() {
@@ -19420,34 +20669,34 @@
                 } else {
                     this.hide();
                     return;
-                }  
-            } 
+                }
+            }
             Jx.Menu.Menus[0] = this;
             this.button.focus();
             if (this.list.count() == 0) {
                 return;
-            } 
+            }
         }
         this.contentContainer.setStyle('display','none');
-        document.id(document.body).adopt(this.contentContainer);            
+        document.id(document.body).adopt(this.contentContainer);
         this.contentContainer.setStyles({
             visibility: 'hidden',
             display: 'block'
         });
-        
+
         /* 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
          * bug in IE related to ULs that we just couldn't figure out
          */
         this.contentContainer.setContentBoxSize(this.subDomObj.getMarginBoxSize());
         this.showChrome(this.contentContainer);
-        
+
         this.position(this.contentContainer, this.domObj, $merge({
             offsets: this.chromeOffsets
         }, this.options.position));
 
         this.contentContainer.setStyle('visibility','visible');
-        
+
         if (this.button && this.button.domA) {
             this.button.domA.addClass(this.button.options.activeClass);
         }
@@ -19455,10 +20704,10 @@
         /* fix bug in IE that closes the menu as it opens because of bubbling */
         document.addEvent('mousedown', this.bound.mousedown);
         document.addEvent('keydown', this.bound.keypress);
-        this.fireEvent('show', this); 
+        this.fireEvent('show', this);
     },
     /**
-     * Method: setVisibleItem
+     * APIMethod: setVisibleItem
      * Set the sub menu that is currently open
      *
      * Parameters:
@@ -19480,10 +20729,106 @@
         if (e.key == 'esc') {
             this.hide();
         }
+    },
+    /**
+     * APIMethod: isEnabled
+     * This returns true if the menu is enabled, false otherwise
+     *
+     * Returns:
+     * {Boolean} whether the menu is enabled or not
+     */
+    isEnabled: function() {
+        return this.button.isEnabled;
+    },
+
+    /**
+     * APIMethod: setEnabled
+     * enable or disable the menu.
+     *
+     * Parameters:
+     * enabled - {Boolean} the new enabled state of the menu
+     */
+    setEnabled: function(enabled) {
+        return this.button.setEnabled(enabled);
+    },
+    /**
+     * APIMethod: isActive
+     * returns true if the menu is open.
+     *
+     * Returns:
+     * {Boolean} the active state of the menu
+     */
+    isActive: function() {
+        return this.button.isActive();
+    },
+    /**
+     * APIMethod: setActive
+     * Set the active state of the menu
+     *
+     * Parameters:
+     * active - {Boolean} the new active state of the menu
+     */
+    setActive: function(active) {
+        this.button.setActive(active);
+    },
+    /**
+     * APIMethod: setImage
+     * set the image of this menu to a new image URL
+     *
+     * Parameters:
+     * path - {String} the new url to use as the image for this menu
+     */
+    setImage: function(path) {
+        this.button.setImage(path);
+    },
+    /**
+     * APIMethod: setLabel
+     *
+     * sets the text of the menu.
+     *
+     * Parameters:
+     *
+     * label - {String} the new label for the menu
+     */
+    setLabel: function(label) {
+        this.button.setLabel(label);
+    },
+    /**
+     * APIMethod: getLabel
+     *
+     * returns the text of the menu.
+     */
+    getLabel: function() {
+        return this.button.getLabel();
+    },
+    /**
+     * APIMethod: setTooltip
+     * sets the tooltip displayed by the menu
+     *
+     * Parameters:
+     * tooltip - {String} the new tooltip
+     */
+    setTooltip: function(tooltip) {
+        this.button.setTooltip(tooltip);
+    },
+    /**
+     * APIMethod: focus
+     * capture the keyboard focus on this menu
+     */
+    focus: function() {
+        this.button.focus();
+    },
+    /**
+     * APIMethod: blur
+     * remove the keyboard focus from this menu
+     */
+    blur: function() {
+        this.button.blur();
     }
+
 });
 
-// $Id: set.js 602 2009-11-10 19:41:36Z pagameba $
+// $Id: set.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.ButtonSet
  *
@@ -19497,21 +20842,21 @@
  * (code)
  * var toolbar = new Jx.Toolbar('bar');
  * var buttonSet = new Jx.ButtonSet();
- * 
+ *
  * var tab1 = new Jx.Button({label: 'b1', toggle:true, contentID: 'content1'});
  * var tab2 = new Jx.Button({label: 'b2', toggle:true, contentID: 'content2'});
  * var tab3 = new Jx.Button({label: 'b3', toggle:true, contentID: 'content3'});
  * var tab4 = new Jx.Button({label: 'b4', toggle:true, contentURL: 'test_content.html'});
- * 
+ *
  * buttonSet.add(b1,b2,b3,b4);
  * (end)
  *
  * Events:
  * change - the current button has changed
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.ButtonSet = new Class({
@@ -19530,7 +20875,7 @@
         this.buttons = [];
         this.buttonChangedHandler = this.buttonChanged.bind(this);
     },
-    
+
     /**
      * Method: add
      * Add one or more <Jx.Button>s to the ButtonSet.
@@ -19543,7 +20888,7 @@
         $A(arguments).each(function(button) {
             if (button.domObj.hasClass(button.options.toggleClass)) {
                 button.domObj.removeClass(button.options.toggleClass);
-                button.domObj.addClass(button.options.toggleClass+'Set');                
+                button.domObj.addClass(button.options.toggleClass+'Set');
             }
             button.addEvent('down',this.buttonChangedHandler);
             button.setActive = function(active) {
@@ -19604,7 +20949,7 @@
         this.setActiveButton(button);
         this.fireEvent('change', this);
     }
-});// $Id: multi.js 602 2009-11-10 19:41:36Z pagameba $
+});// $Id: multi.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.Button.Multi
  *
@@ -19686,8 +21031,8 @@
         domLabel: 'jxButtonLabel',
         domDisclose: 'jxButtonDisclose'
     }),
-    
 
+
     /**
      * APIMethod: render
      * construct a new instance of Jx.Button.Multi.
@@ -19901,7 +21246,7 @@
         this.setActiveButton(button);
         button.clicked();
     }
-});// $Id: menu.item.js 605 2009-11-10 21:45:28Z pagameba $
+});// $Id: menu.item.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.Menu.Item
  *
@@ -19921,9 +21266,9 @@
  * Events:
  * click - fired when the menu item is clicked.
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Menu.Item = new Class({
@@ -20021,7 +21366,7 @@
     }
 });
 
-// $Id: combo.js 602 2009-11-10 19:41:36Z pagameba $
+// $Id: combo.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.Button.Combo
  *
@@ -20048,9 +21393,9 @@
  * Events:
  * change - triggered when the user selects a new item from the list
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Button.Combo = new Class({
@@ -20059,10 +21404,10 @@
     ul : null,
     /**
      * Property: currentSelection
-     * {Object} current selection in the list 
+     * {Object} current selection in the list
      */
     currentSelection : null,
-    
+
     options: {
         /* Option: label
          * string, default ''.  The label to display next to the combo.
@@ -20072,8 +21417,8 @@
          */
          template: '<span class="jxButtonContainer"><a class="jxButton jxButtonCombo jxDiscloser"><span class="jxButtonContent"><img class="jxButtonIcon" src="'+Jx.aPixel.src+'"><span class="jxButtonLabel"></span></span></a></span>'
      },
-        
-    /** 
+
+    /**
      * APIMethod: render
      * create a new instance of Jx.Combo
      */
@@ -20086,7 +21431,7 @@
 
         this.buttonSet = new Jx.ButtonSet({
             onChange: (function(set) {
-                var button = set.activeButton;            
+                var button = set.activeButton;
                 var l = button.options.label;
                 if (l == '&nbsp;') {
                     l = '';
@@ -20120,7 +21465,7 @@
             }
             this.contentContainer.setStyle('visibility','hidden');
             this.contentContainer.setStyle('display','block');
-            $(document.body).adopt(this.contentContainer);            
+            $(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
              * bug in IE related to ULs that we just couldn't figure out
@@ -20139,10 +21484,10 @@
 
             document.addEvent('mousedown', this.hideWatcher);
             document.addEvent('keyup', this.keypressWatcher);
-            
+
             this.fireEvent('show', this);
         }).bindWithEvent(this.menu));
-        
+
         this.menu.addEvents({
             'show': (function() {
                 this.setActive(true);
@@ -20151,9 +21496,9 @@
                 this.setActive(false);
             }).bind(this)
         });
-        
+
     },
-    
+
     /**
      * Method: valueChanged
      * invoked when the current value is changed
@@ -20161,7 +21506,7 @@
     valueChanged: function() {
         this.fireEvent('change', this);
     },
-    
+
     /**
      * Method: getValue
      * returns the currently selected value
@@ -20169,11 +21514,11 @@
     getValue: function() {
         return this.options.label;
     },
-    
+
     setValue: function() {
-        
+
     },
-    
+
     /**
      * Method: onKeyPress
      * Handle the user pressing a key by looking for an ENTER key to set the
@@ -20187,7 +21532,7 @@
             this.valueChanged();
         }
     },
-    
+
     /**
      * Method: add
      * add a new item to the pick list
@@ -20206,7 +21551,7 @@
             this.buttonSet.add(button);
         }, this);
     },
-    
+
     /**
      * Method: remove
      * Remove the item at the given index.  Not implemented.
@@ -20217,7 +21562,7 @@
     remove: function(idx) {
         //TODO: implement remove?
     }
-});// $Id: toolbar.js 602 2009-11-10 19:41:36Z pagameba $
+});// $Id: toolbar.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.Toolbar
  *
@@ -20238,7 +21583,7 @@
  * purpose for menus by providing some infrastructure so that menus can behave
  * properly.
  *
- * In general, almost anything can be placed in a Toolbar, and mixed with 
+ * In general, almost anything can be placed in a Toolbar, and mixed with
  * anything else.
  *
  * Example:
@@ -20249,7 +21594,7 @@
  * //myToolbarContainer is the id of a <div> in the HTML page.
  * function myFunction() {}
  * var myToolbar = new Jx.Toolbar('myToolbarContainer');
- * 
+ *
  * var myButton = new Jx.Button(buttonOptions);
  *
  * var myElement = document.createElement('select');
@@ -20261,12 +21606,12 @@
  * add - fired when one or more buttons are added to a toolbar
  * remove - fired when on eor more buttons are removed from a toolbar
  *
- * Implements: 
+ * Implements:
  * Options
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Toolbar = new Class({
@@ -20326,7 +21671,7 @@
         if ($defined(this.options.id)) {
             this.domObj.id = this.options.id;
         }
-        
+
         this.list = new Jx.List(this.domObj, {
             onAdd: function(item) {
                 this.fireEvent('add', this);
@@ -20335,7 +21680,7 @@
                 this.fireEvent('remove', this);
             }.bind(this)
         });
-        
+
         if (this.options.parent) {
             this.addTo(this.options.parent);
         }
@@ -20344,7 +21689,7 @@
             this.add(this.options.items);
         }
     },
-    
+
     /**
      * Method: addTo
      * add this toolbar to a DOM element automatically creating a toolbar
@@ -20357,8 +21702,8 @@
         var tbc = document.id(parent).retrieve('jxBarContainer');
         if (!tbc) {
             tbc = new Jx.Toolbar.Container({
-                parent: parent, 
-                position: this.options.position, 
+                parent: parent,
+                position: this.options.position,
                 autoSize: this.options.autoSize,
                 scroll: this.options.scroll
             });
@@ -20366,7 +21711,7 @@
         tbc.add(this);
         return this;
     },
-    
+
     /**
      * Method: add
      * Add an item to the toolbar.  If the item being added is a Jx component
@@ -20384,14 +21729,14 @@
             if (item.domObj) {
                 item = item.domObj;
             }
-            
+
             if (item.tagName == 'LI') {
                 if (!item.hasClass('jxToolItem')) {
                     item.addClass('jxToolItem');
                 }
             } else {
                 item = new Jx.Toolbar.Item(thing);
-            }            
+            }
             this.list.add(item);
         }, this);
         return this;
@@ -20435,17 +21780,17 @@
      * Returns:
      * {Boolean}
      */
-    isActive: function() { 
-        return this.isActive; 
+    isActive: function() {
+        return this.isActive;
     },
     /**
      * Method: setActive
      * Set the active state of the toolbar (for menus)
      *
-     * Parameters: 
+     * Parameters:
      * b - {Boolean} the new state
      */
-    setActive: function(b) { 
+    setActive: function(b) {
         this.isActive = b;
         if (this.isActive) {
             document.addEvent('click', this.deactivateWatcher);
@@ -20473,7 +21818,7 @@
         this.fireEvent('show', item);
     }
 });
-// $Id: container.js 602 2009-11-10 19:41:36Z pagameba $
+// $Id: container.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.Toolbar.Container
  *
@@ -20487,14 +21832,14 @@
  * add - fired when one or more toolbars are added to a container
  * remove - fired when one or more toolbars are removed from a container
  *
- * Implements: 
+ * Implements:
  * Options
  * Events
  * {<Jx.Addable>}
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Toolbar.Container = new Class({
@@ -20522,7 +21867,7 @@
         autoSize: false,
         /* Option: scroll
          * Control whether the user can scroll of the content of the
-         * container if the content exceeds the size of the container.  
+         * container if the content exceeds the size of the container.
          * Default is true.
          */
         scroll: true,
@@ -20548,7 +21893,7 @@
             this.domObj.addClass('jxBarContainer');
             this.domObj.adopt(this.scroller);
         }
-        
+
         if (this.options.scroll) {
             this.processElements(this.options.scrollerTemplate, this.classes);
             this.domObj.adopt(this.scroller);
@@ -20559,10 +21904,10 @@
          * to the toolbar container
          */
         this.domObj.store('jxBarContainer', this);
-        
+
         if (['top','right','bottom','left'].contains(this.options.position)) {
             this.domObj.addClass('jxBar' +
-                           this.options.position.capitalize());            
+                           this.options.position.capitalize());
         } else {
             this.domObj.addClass('jxBarTop');
             this.options.position = 'top';
@@ -20571,7 +21916,7 @@
         if (this.options.scroll && ['top','bottom'].contains(this.options.position)) {
             // make sure we update our size when we get added to the DOM
             this.addEvent('addTo', this.update.bind(this));
-            
+
             //making Fx.Tween optional
             if (typeof Fx != 'undefined' && typeof Fx.Tween != 'undefined'){
                 this.scrollFx = scrollFx = new Fx.Tween(this.scroller, {
@@ -20599,7 +21944,7 @@
                    }
                }).bind(this)
             });
-            
+
             this.scrollRight = new Jx.Button({
                 image: Jx.aPixel.src
             }).addTo(this.domObj);
@@ -20619,8 +21964,8 @@
                        this.scroller.setStyle('left',to);
                    }
                }).bind(this)
-            });         
-            
+            });
+
         } else {
             this.options.scroll = false;
         }
@@ -20629,7 +21974,7 @@
             this.add(this.options.toolbars);
         }
     },
-    
+
     update: function() {
         if (this.options.autoSize) {
             /* delay the size update a very small amount so it happens
@@ -20650,10 +21995,10 @@
             this.measure();
         }
     },
-    
+
     measure: function() {
         if (!this.options.scroll) { return; }
-        
+
         if ((!this.scrollLeftSize || !this.scrollLeftSize.x) && this.domObj.parentNode) {
             this.scrollLeftSize = this.scrollLeft.domObj.getSize();
             this.scrollRightSize = this.scrollRight.domObj.getSize();
@@ -20683,9 +22028,9 @@
                     }
                 }
             } else {
-                this.scrollRight.domObj.setStyle('visibility', '');                
+                this.scrollRight.domObj.setStyle('visibility', '');
             }
-            
+
         } else {
             /* don't need any scrollers but we might need to scroll
              * the toolbar into view
@@ -20700,9 +22045,9 @@
                     this.scroller.setStyle('left',0);
                 }
             }
-        }            
+        }
     },
-    
+
     /**
      * Method: add
      * Add a toolbar to the container.
@@ -20718,8 +22063,8 @@
                  * when the toolbar contents change
                  */
                 thing.addEvent('add', this.update.bind(this));
-                thing.addEvent('remove', this.update.bind(this));                
-                thing.addEvent('show', this.scrollIntoView.bind(this));                
+                thing.addEvent('remove', this.update.bind(this));
+                thing.addEvent('show', this.scrollIntoView.bind(this));
             }
             if (this.scroller) {
                 this.scroller.adopt(thing.domObj);
@@ -20729,7 +22074,7 @@
             this.domObj.addClass('jxBar'+this.options.position.capitalize());
         }, this);
         if (this.options.scroll) {
-            this.update();            
+            this.update();
         }
         if (arguments.length > 0) {
             this.fireEvent('add', this);
@@ -20749,7 +22094,7 @@
      * removed.
      */
     remove: function(item) {
-        
+
     },
     /**
      * Method: scrollIntoView
@@ -20762,15 +22107,15 @@
     scrollIntoView: function(item) {
         var width = this.domObj.getSize().x;
         var coords = item.domObj.getCoordinates(this.scroller);
-        
-        //left may be set to auto or even a zero length string. 
+
+        //left may be set to auto or even a zero length string.
         //In the previous version, in air, this would evaluate to
-        //NaN which would cause the right hand scroller to show when 
+        //NaN which would cause the right hand scroller to show when
         //the component was first created.
-        
+
         //So, get the left value first
         var l = this.scroller.getStyle('left');
-        //then check to see if it's auto or a zero length string 
+        //then check to see if it's auto or a zero length string
         if (l === 'auto' || l.length <= 0) {
             //If so, set to 0.
             l = 0;
@@ -20780,7 +22125,7 @@
         }
         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 */
@@ -20795,16 +22140,16 @@
                 left = this.scrollWidth;
             }
         }
-                
+
         if (left < 0) {
-            this.scrollLeft.domObj.setStyle('visibility','');                
+            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', '');                
+            this.scrollRight.domObj.setStyle('visibility', '');
         }
         if (left != l) {
             if ($defined(this.scrollFx)) {
@@ -20815,20 +22160,20 @@
         }
     }
 });
-// $Id: toolbar.item.js 602 2009-11-10 19:41:36Z pagameba $
+// $Id: toolbar.item.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.Toolbar.Item
- * 
+ *
  * Extends: Object
  *
  * Implements: Options
  *
- * A helper class to provide a container for something to go into 
+ * A helper class to provide a container for something to go into
  * a <Jx.Toolbar>.
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Toolbar.Item = new Class( {
@@ -20844,9 +22189,9 @@
     classes: new Hash({
         domObj: 'jxToolItem'
     }),
-    
+
     parameters: ['jxThing'],
-    
+
     /**
      * APIMethod: render
      * Create a new instance of Jx.Toolbar.Item.
@@ -20858,7 +22203,7 @@
             this.domObj.adopt(el);
         }
     }
-});// $Id: panel.js 602 2009-11-10 19:41:36Z pagameba $
+});// $Id: panel.js 633 2009-11-20 17:54:21Z zak4ms $
 /**
  * Class: Jx.Panel
  *
@@ -20879,22 +22224,22 @@
  * collapse - fired when the panel is collapsed
  * expand - fired when the panel is opened
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Panel = new Class({
     Family: 'Jx.Panel',
     Extends: Jx.Widget,
-    
+
     toolbarContainers: {
         top: null,
         right: null,
         bottom: null,
         left: null
     },
-    
+
      options: {
         position: null,
         collapsedClass: 'jxPanelMin',
@@ -20902,7 +22247,7 @@
         menuClass: 'jxPanelMenu',
         maximizeClass: 'jxPanelMaximize',
         closeClass: 'jxPanelClose',
-        
+
         /* Option: id
          * String, an id to assign to the panel's container
          */
@@ -20983,16 +22328,16 @@
         contentContainer: 'jxPanelContentContainer',
         content: 'jxPanelContent'
     }),
-    
-    /** 
+
+    /**
      * APIMethod: render
      * Initialize a new Jx.Panel instance
      */
     render : function(){
         this.parent();
-        
+
         this.toolbars = this.options ? this.options.toolbars || [] : [];
-        
+
         this.options.position = ($defined(this.options.height) && !$defined(this.options.position)) ? 'relative' : 'absolute';
 
         if (this.options.image && this.domImg) {
@@ -21001,13 +22346,13 @@
         if (this.options.label && this.domLabel) {
             this.domLabel.set('html',this.options.label);
         }
-        
+
         var tbDiv = new Element('div');
         this.domControls.adopt(tbDiv);
         this.toolbar = new Jx.Toolbar({parent:tbDiv, scroll: false});
-        
+
         var that = this;
-        
+
         if (this.options.menu) {
             this.menu = new Jx.Menu({
                 image: Jx.aPixel.src
@@ -21016,7 +22361,7 @@
             this.menu.domObj.addClass('jxButtonContentLeft');
             this.toolbar.add(this.menu);
         }
-        
+
         var b, item;
         if (this.options.collapse) {
             b = new Jx.Button({
@@ -21044,7 +22389,7 @@
                 this.menu.add(item);
             }
         }
-        
+
         if (this.options.maximize) {
             b = new Jx.Button({
                 image: Jx.aPixel.src,
@@ -21063,7 +22408,7 @@
                 this.menu.add(item);
             }
         }
-        
+
         if (this.options.close) {
             b = new Jx.Button({
                 image: Jx.aPixel.src,
@@ -21083,24 +22428,24 @@
                 });
                 this.menu.add(item);
             }
-            
+
         }
-        
+
         this.title.addEvent('dblclick', function() {
             that.toggleCollapse();
         });
-        
+
         if (this.options.id) {
             this.domObj.id = this.options.id;
         }
         var jxl = new Jx.Layout(this.domObj, $merge(this.options, {propagate:false}));
         var layoutHandler = this.layoutContent.bind(this);
         jxl.addEvent('sizeChange', layoutHandler);
-        
+
         if (this.options.hideTitle) {
             this.title.dispose();
         }
-        
+
         if (Jx.type(this.options.toolbars) == 'array') {
             this.options.toolbars.each(function(tb){
                 var position = tb.options.position;
@@ -21114,14 +22459,14 @@
                 tb.addTo(tbc);
             }, this);
         }
-        
+
         new Jx.Layout(this.contentContainer);
         new Jx.Layout(this.content);
-        
+
         this.loadContent(this.content);
 
         this.toggleCollapse(this.options.closed);
-        
+
         this.addEvent('addTo', function() {
             this.domObj.resize();
         });
@@ -21129,7 +22474,7 @@
             this.addTo(this.options.parent);
         }
     },
-    
+
     /**
      * Method: layoutContent
      * the sizeChange event of the <Jx.Layout> that manages the outer container
@@ -21154,8 +22499,8 @@
             this.contentContainer.setStyle('display','block');
             this.options.closed = false;
             this.contentContainer.resize({
-                top: titleHeight, 
-                height: null, 
+                top: titleHeight,
+                height: null,
                 bottom: 0
             });
             ['left','right'].each(function(position){
@@ -21165,22 +22510,22 @@
             }, this);
             ['top','bottom'].each(function(position){
                 if (this.toolbarContainers[position]) {
-                    this.toolbarContainers[position].style.height = '';                
+                    this.toolbarContainers[position].style.height = '';
                 }
             }, this);
             if (Jx.type(this.options.toolbars) == 'array') {
                 this.options.toolbars.each(function(tb){
                     position = tb.options.position;
                     tbc = this.toolbarContainers[position];
-                    // IE 6 doesn't seem to want to measure the width of 
+                    // IE 6 doesn't seem to want to measure the width of
                     // things correctly
                     if (Browser.Engine.trident4) {
                         var oldParent = document.id(tbc.parentNode);
                         tbc.style.visibility = 'hidden';
-                        document.id(document.body).adopt(tbc);                    
+                        document.id(document.body).adopt(tbc);
                     }
                     var size = tbc.getBorderBoxSize();
-                    // put it back into its real parent now we are done 
+                    // put it back into its real parent now we are done
                     // measuring
                     if (Browser.Engine.trident4) {
                         oldParent.adopt(tbc);
@@ -21200,7 +22545,7 @@
                         default:
                             top = size.height;
                             break;
-                    }                    
+                    }
                 },this);
             }
             tbc = this.toolbarContainers['top'];
@@ -21226,7 +22571,7 @@
         }
         this.fireEvent('sizeChange', this);
     },
-    
+
     /**
      * Method: setLabel
      * Set the label in the title bar of this panel
@@ -21235,17 +22580,17 @@
      * s - {String} the new label
      */
     setLabel: function(s) {
-        this.labelObj.innerHTML = s;
+        this.domLabel.set('html',s);
     },
     /**
      * Method: getLabel
      * Get the label of the title bar of this panel
      *
-     * Returns: 
+     * Returns:
      * {String} the label
      */
     getLabel: function() {
-        return this.labelObj.innerHTML;
+        return this.domLabel.get('html');
     },
     /**
      * Method: finalize
@@ -21301,7 +22646,7 @@
     },
     /**
      * Method: panelContentLoaded
-     * When the content of the panel is loaded from a remote URL, this 
+     * When the content of the panel is loaded from a remote URL, this
      * method is called when the ajax request returns.
      *
      * Parameters:
@@ -21329,15 +22674,15 @@
             this.loadingObj.img.style.visibility = (this.busyCount>0)?'visible':'hidden';
         }
     },
-    
+
     /**
      * Method: toggleCollapse
      * sets or toggles the collapsed state of the panel.  If a
      * new state is passed, it is used, otherwise the current
-     * state is toggled.    
+     * state is toggled.
      *
      * Parameters:
-     * state - optional, if passed then the state is used, 
+     * state - optional, if passed then the state is used,
      * otherwise the state is toggled.
      */
     toggleCollapse: function(state) {
@@ -21364,12 +22709,12 @@
             if (this.domObj.hasClass(this.options.collapsedClass)) {
                 this.domObj.removeClass(this.options.collapsedClass);
                 this.contentContainer.setStyle('display','block');
-                this.domObj.resize({height: this.options.height});            
+                this.domObj.resize({height: this.options.height});
                 this.fireEvent('expand', this);
             }
         }
     },
-    
+
     /**
      * Method: close
      * Closes the panel (completely hiding it).
@@ -21378,8 +22723,8 @@
         this.domObj.dispose();
         this.fireEvent('close', this);
     }
-    
-});// $Id: dialog.js 602 2009-11-10 19:41:36Z pagameba $
+
+});// $Id: dialog.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.Dialog
  *
@@ -21390,7 +22735,7 @@
  * Jx.Dialog is designed to provide the same types of features as traditional
  * operating system dialog boxes, including:
  *
- * - dialogs may be modal (user must dismiss the dialog to continue) or 
+ * - dialogs may be modal (user must dismiss the dialog to continue) or
  * non-modal
  *
  * - dialogs are movable (user can drag the title bar to move the dialog
@@ -21416,16 +22761,16 @@
  * Extends:
  * Jx.Dialog extends <Jx.Panel>, please go there for more details.
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Dialog = new Class({
     Family: 'Jx.Dialog',
     Extends: Jx.Panel,
     //Implements: [Jx.AutoPosition, Jx.Chrome],
-    
+
     /**
      * Property: {HTMLElement} blanket
      * modal dialogs prevent interaction with the rest of the application
@@ -21433,7 +22778,7 @@
      * dialog to prevent the user from clicking anything.
      */
     blanket: null,
-    
+
     options: {
         /* Option: modal
          * (optional) {Boolean} controls whether the dialog will be modal
@@ -21448,7 +22793,7 @@
          */
         width: 250,
         /* Option: height
-         * (optional) {Integer} the initial height in pixels of the 
+         * (optional) {Integer} the initial height in pixels of the
          * dialog. The default value is 250 if not specified.
          */
         height: 250,
@@ -21504,7 +22849,7 @@
         menuClass: 'jxDialogMenu',
         maximizeClass: 'jxDialogMaximize',
         closeClass: 'jxDialogClose',
-        
+
         template: '<div class="jxDialog"><div class="jxDialogTitle"><img class="jxDialogIcon" src="'+Jx.aPixel.src+'" alt="" title=""/><span class="jxDialogLabel"></span><div class="jxDialogControls"></div></div><div class="jxDialogContentContainer"><div class="jxDialogContent"></div></div></div>'
     },
     classes: new Hash({
@@ -21523,18 +22868,18 @@
     render: function() {
         this.isOpening = false;
         this.firstShow = true;
-        
+
         this.options = $merge(
             {parent:document.body}, // these are defaults that can be overridden
             this.options,
             {position: 'absolute'} // these override anything passed to the options
         );
-        
+
         /* initialize the panel overriding the type and position */
         this.parent();
         this.openOnLoaded = this.open.bind(this);
         this.options.parent = document.id(this.options.parent);
-        
+
         if (this.options.modal) {
             this.blanket = new Element('div',{
                 'class':'jxDialogModal',
@@ -21552,12 +22897,12 @@
             }).bind(this.blanket);
             this.options.parent.adopt(this.blanket);
             window.addEvent('resize', this.blanket.resize);
-            
+
         }
 
         this.domObj.setStyle('display','none');
         this.options.parent.adopt(this.domObj);
-        
+
         /* the dialog is moveable by its title bar */
         if (this.options.move && typeof Drag != 'undefined') {
             this.title.addClass('jxDialogMoveable');
@@ -21581,12 +22926,12 @@
                     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);                        
+                        this.domObj.resize(this.options);
                     }
                 }).bind(this)
-            });            
+            });
         }
-        
+
         /* the dialog is resizeable */
         if (this.options.resize && typeof Drag != 'undefined') {
             this.resizeHandle = new Element('div', {
@@ -21598,7 +22943,7 @@
             });
             this.domObj.appendChild(this.resizeHandle);
 
-            this.resizeHandleSize = this.resizeHandle.getSize(); 
+            this.resizeHandleSize = this.resizeHandle.getSize();
             this.resizeHandle.setStyles({
                 bottom: this.resizeHandleSize.height,
                 right: this.resizeHandleSize.width
@@ -21622,7 +22967,7 @@
                     this.contentContainer.setStyle('visibility','');
                     this.fireEvent('resize');
                     this.resizeChrome(this.domObj);
-                    
+
                 }).bind(this)
             });
         }
@@ -21631,7 +22976,7 @@
             Jx.Dialog.orderDialogs(this);
         }).bind(this));
     },
-    
+
     /**
      * Method: resize
      * resize the dialog.  This can be called when the dialog is closed
@@ -21653,13 +22998,13 @@
             this.fireEvent('resize');
             this.resizeChrome(this.domObj);
             if (autoPosition) {
-                this.position(this.domObj, this.options.parent, this.options);                
+                this.position(this.domObj, this.options.parent, this.options);
             }
         } else {
             this.firstShow = false;
         }
     },
-    
+
     /**
      * Method: sizeChanged
      * overload panel's sizeChanged method
@@ -21669,15 +23014,15 @@
             this.layoutContent();
         }
     },
-    
+
     /**
      * Method: toggleCollapse
      * sets or toggles the collapsed state of the panel.  If a
      * new state is passed, it is used, otherwise the current
-     * state is toggled.    
+     * state is toggled.
      *
      * Parameters:
-     * state - optional, if passed then the state is used, 
+     * state - optional, if passed then the state is used,
      * otherwise the state is toggled.
      */
     toggleCollapse: function(state) {
@@ -21703,7 +23048,7 @@
                 this.resizeHandle.setStyle('display','block');
             }
         }
-        
+
         if (this.options.closed) {
             var m = this.domObj.measure(function(){
                 return this.getSizes(['margin'],['top','bottom']).margin;
@@ -21717,7 +23062,7 @@
         }
         this.showChrome(this.domObj);
     },
-    
+
     /**
      * Method: show
      * show the dialog, external code should use the <Jx.Dialog::open> method
@@ -21729,13 +23074,13 @@
             'display': 'block',
             'visibility': 'hidden'
         });
-        
+
         if (this.blanket) {
-            this.blanket.resize();            
+            this.blanket.resize();
         }
 
         Jx.Dialog.orderDialogs(this);
-        
+
         /* do the modal thing */
         if (this.blanket) {
             this.blanket.setStyles({
@@ -21743,7 +23088,7 @@
                 display: 'block'
             });
         }
-        
+
         if (this.options.closed) {
             var m = this.domObj.measure(function(){
                 return this.getSizes(['margin'],['top','bottom']).margin;
@@ -21751,7 +23096,7 @@
             var size = this.title.getMarginBoxSize();
             this.domObj.resize({height: m.top + size.height + m.bottom});
         } else {
-            this.domObj.resize(this.options);            
+            this.domObj.resize(this.options);
         }
         if (this.firstShow) {
             this.contentContainer.resize({forceResize: true});
@@ -21785,7 +23130,7 @@
             this.blanket.setStyle('visibility', 'hidden');
             Jx.Dialog.ZIndex--;
         }
-        
+
     },
     /**
      * Method: openURL
@@ -21800,16 +23145,16 @@
             this.options.contentURL = url;
             this.options.content = null;  //force Url loading
             this.loadContent(this.content);
-            this.addEvent('contentLoaded', this.openOnLoaded); 
+            this.addEvent('contentLoaded', this.openOnLoaded);
         }
         else {
             this.open();
         }
     },
-    
+
     /**
      * Method: open
-     * open the dialog.  This may be delayed depending on the 
+     * open the dialog.  This may be delayed depending on the
      * asynchronous loading of dialog content.  The onOpen
      * callback function is called when the dialog actually
      * opens
@@ -21837,7 +23182,7 @@
         this.hide();
         this.fireEvent('close');
     },
-    
+
     cleanup: function() {
         this.blanket.destroy();
     }
@@ -21857,9 +23202,9 @@
         }
         d.domObj.setStyle('zIndex',z);
     });
-    
+
 };
-// $Id: splitter.js 602 2009-11-10 19:41:36Z pagameba $
+// $Id: splitter.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.Splitter
  *
@@ -21868,7 +23213,7 @@
  * a Jx.Splitter creates two or more containers within a parent container
  * and provides user control over the size of the containers.  The split
  * can be made horizontally or vertically.
- * 
+ *
  * A horizontal split creates containers that divide the space horizontally
  * with vertical bars between the containers.  A vertical split divides
  * the space vertically and creates horizontal bars between the containers.
@@ -21877,12 +23222,12 @@
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
- 
+
 Jx.Splitter = new Class({
     Family: 'Jx.Splitter',
     Extends: Jx.Object,
@@ -21893,7 +23238,7 @@
     domObj: null,
     /**
      * Property: elements
-     * {Array} an array of elements that are displayed in each of the split 
+     * {Array} an array of elements that are displayed in each of the split
      * areas
      */
     elements: null,
@@ -21956,7 +23301,7 @@
          */
         snaps: [],
         /* Option: barTooltip
-         * the tooltip to display when the mouse hovers over a split bar, 
+         * the tooltip to display when the mouse hovers over a split bar,
          * used for i18n.
          */
         barTooltip: 'drag this bar to resize',
@@ -21969,9 +23314,9 @@
          */
         onFinish: null
     },
-    
+
     parameters: ['domObj','options'],
-    
+
     /**
      * APIMethod: init
      * Create a new instance of Jx.Splitter
@@ -21983,7 +23328,7 @@
         if (jxLayout) {
             jxLayout.addEvent('sizeChange', this.sizeChanged.bind(this));
         }
-       
+
         this.elements = [];
         this.bars = [];
         var i;
@@ -21992,8 +23337,8 @@
             this.elements = this.domObj.getChildren();
             nSplits = this.elements.length;
         } else {
-            nSplits = this.options.elements ? 
-                            this.options.elements.length : 
+            nSplits = this.options.elements ?
+                            this.options.elements.length :
                             this.options.splitInto;
             for (i=0; i<nSplits; i++) {
                 var el;
@@ -22001,7 +23346,7 @@
                     if (this.options.elements[i].domObj) {
                         el = this.options.elements[i].domObj;
                     } else {
-                        el = document.id(this.options.elements[i]);                        
+                        el = document.id(this.options.elements[i]);
                     }
                     if (!el) {
                         el = this.prepareElement();
@@ -22028,13 +23373,13 @@
                 }
             }
         }
-        
+
         for (i=1; i<nSplits; i++) {
             var bar;
             if (this.options.prepareBar) {
-                bar = this.options.prepareBar(i-1);                
+                bar = this.options.prepareBar(i-1);
             } else {
-                bar = this.prepareBar();                
+                bar = this.prepareBar();
             }
             bar.store('splitterObj', this);
             bar.store('leftSide',this.elements[i-1]);
@@ -22044,12 +23389,12 @@
             this.domObj.adopt(bar);
             this.bars[i-1] = bar;
         }
-        
+
         //making dragging dependent on mootools Drag class
         if ($defined(Drag)) {
-        	this.establishConstraints();
+            this.establishConstraints();
         }
-        
+
         for (i=0; i<this.options.barOptions.length; i++) {
             if (!this.bars[i]) {
                 continue;
@@ -22066,24 +23411,24 @@
                 var snapEvents;
                 if (opt.snapElement) {
                     snap = opt.snapElement;
-                    snapEvents = opt.snapEvents || ['click', 'dblclick'];                    
+                    snapEvents = opt.snapEvents || ['click', 'dblclick'];
                 } else {
                     snap = this.bars[i];
                     snapEvents = opt.snapEvents || ['dblclick'];
                 }
                 if (!snap.parentNode) {
-                    this.bars[i].adopt(snap);             
+                    this.bars[i].adopt(snap);
                 }
                 new Jx.Splitter.Snap(snap, element, this, snapEvents);
             }
         }
-        
+
         for (i=0; i<this.options.snaps.length; i++) {
             if (this.options.snaps[i]) {
                 new Jx.Splitter.Snap(this.options.snaps[i], this.elements[i], this);
             }
         }
-        
+
         this.sizeChanged();
     },
     /**
@@ -22097,7 +23442,7 @@
         var o = new Element('div', {styles:{position:'absolute'}});
         return o;
     },
-    
+
     /**
      * Method: prepareBar
      * Prepare a new, empty bar to go into between split areas.
@@ -22112,7 +23457,7 @@
         });
         return o;
     },
-    
+
     /**
      * Method: establishConstraints
      * Setup the initial set of constraints that set the behaviour of the
@@ -22139,7 +23484,7 @@
                         this.fireEvent('snap',[obj]);
                     }).bind(this),
                     onCancel: (function(obj){
-                        mask.destroy();  
+                        mask.destroy();
                         this.fireEvent('cancel',[obj]);
                     }).bind(this),
                     onDrag: (function(obj, event){
@@ -22163,10 +23508,10 @@
                         this.fireEvent('start',[obj, event]);
                     }).bind(this)
                 });
-            }, this);            
+            }, this);
         }
     },
-    
+
     /**
      * Method: dragHorizontal
      * In a horizontally split container, handle a bar being dragged left or
@@ -22181,24 +23526,24 @@
         var rightSide = obj.retrieve('rightSide');
         var leftJxl = leftSide.retrieve('jxLayout');
         var rightJxl = rightSide.retrieve('jxLayout');
-        
+
         var paddingLeft = this.domObj.measure(function(){
             var m = this.getSizes(['padding'], ['left']);
             return m.padding.left;
         });
-        
+
         /* process right side first */
         var rsLeft, rsWidth, rsRight;
-        
+
         var size = obj.retrieve('size');
         if (!size) {
             size = obj.getBorderBoxSize();
             obj.store('size',size);
         }
         rsLeft = leftEdge + size.width - paddingLeft;
-        
+
         var parentSize = this.domObj.getContentBoxSize();
-        
+
         if (rightJxl.options.width != null) {
             rsWidth = rightJxl.options.width + rightJxl.options.left - rsLeft;
             rsRight = parentSize.width - rsLeft - rsWidth;
@@ -22206,27 +23551,27 @@
             rsWidth = parentSize.width - rightJxl.options.right - rsLeft;
             rsRight = rightJxl.options.right;
         }
-        
+
         /* enforce constraints on right side */
         if (rsWidth < 0) {
             rsWidth = 0;
         }
-        
+
         if (rsWidth < rightJxl.options.minWidth) {
             rsWidth = rightJxl.options.minWidth;
         }
         if (rightJxl.options.maxWidth >= 0 && rsWidth > rightJxl.options.maxWidth) {
             rsWidth = rightJxl.options.maxWidth;
         }
-                
+
         rsLeft = parentSize.width - rsRight - rsWidth;
         leftEdge = rsLeft - size.width;
-        
+
         /* process left side */
         var lsLeft, lsWidth;
         lsLeft = leftJxl.options.left;
         lsWidth = leftEdge - lsLeft;
-        
+
         /* enforce constraints on left */
         if (lsWidth < 0) {
             lsWidth = 0;
@@ -22234,11 +23579,11 @@
         if (lsWidth < leftJxl.options.minWidth) {
             lsWidth = leftJxl.options.minWidth;
         }
-        if (leftJxl.options.maxWidth >= 0 && 
+        if (leftJxl.options.maxWidth >= 0 &&
             lsWidth > leftJxl.options.maxWidth) {
             lsWidth = leftJxl.options.maxWidth;
         }
-        
+
         /* update the leftEdge to accomodate constraints */
         if (lsLeft + lsWidth != leftEdge) {
             /* need to update right side, ignoring constraints because left side
@@ -22247,12 +23592,12 @@
             leftEdge = lsLeft + lsWidth;
             var delta = leftEdge + size.width - rsLeft;
             rsLeft += delta;
-            rsWidth -= delta; 
+            rsWidth -= delta;
         }
-        
+
         /* put bar in its final location based on constraints */
         obj.style.left = paddingLeft + leftEdge + 'px';
-        
+
         /* update leftSide positions */
         if (leftJxl.options.width == null) {
             parentSize = this.domObj.getContentBoxSize();
@@ -22260,7 +23605,7 @@
         } else {
             leftSide.resize({width: lsWidth});
         }
-        
+
         /* update rightSide position */
         if (rightJxl.options.width == null) {
             rightSide.resize({left:rsLeft});
@@ -22268,7 +23613,7 @@
             rightSide.resize({left: rsLeft, width: rsWidth});
         }
     },
-    
+
     /**
      * Method: dragVertical
      * In a vertically split container, handle a bar being dragged up or
@@ -22280,19 +23625,19 @@
     dragVertical: function(obj) {
         /* top edge of the bar */
         var topEdge = parseInt(obj.style.top,10);
-        
+
         /* the containers on either side of the bar */
         var topSide = obj.retrieve('leftSide');
         var bottomSide = obj.retrieve('rightSide');
         var topJxl = topSide.retrieve('jxLayout');
         var bottomJxl = bottomSide.retrieve('jxLayout');
-        
+
         var paddingTop = this.domObj.measure(function(){
             var m = this.getSizes(['padding'], ['top']);
             return m.padding.top;
         });
-        
-        
+
+
         /* measure the bar and parent container for later use */
         var size = obj.retrieve('size');
         if (!size) {
@@ -22303,10 +23648,10 @@
 
         /* process top side first */
         var bsTop, bsHeight, bsBottom;
-        
+
         /* top edge of bottom side is the top edge of bar plus the height of the bar */
         bsTop = topEdge + size.height - paddingTop;
-        
+
         if (bottomJxl.options.height != null) {
             /* bottom side height is fixed */
             bsHeight = bottomJxl.options.height + bottomJxl.options.top - bsTop;
@@ -22316,31 +23661,31 @@
             bsHeight = parentSize.height - bottomJxl.options.bottom - bsTop;
             bsBottom = bottomJxl.options.bottom;
         }
-        
+
         /* enforce constraints on bottom side */
         if (bsHeight < 0) {
             bsHeight = 0;
         }
-        
+
         if (bsHeight < bottomJxl.options.minHeight) {
             bsHeight = bottomJxl.options.minHeight;
         }
-        
+
         if (bottomJxl.options.maxHeight >= 0 && bsHeight > bottomJxl.options.maxHeight) {
             bsHeight = bottomJxl.options.maxHeight;
         }
-        
+
         /* recalculate the top of the bottom side in case it changed
            due to a constraint.  The bar may have moved also.
          */
         bsTop = parentSize.height - bsBottom - bsHeight;
         topEdge = bsTop - size.height;
-                
+
         /* process left side */
         var tsTop, tsHeight;
         tsTop = topJxl.options.top;
         tsHeight = topEdge - tsTop;
-                        
+
         /* enforce constraints on left */
         if (tsHeight < 0) {
             tsHeight = 0;
@@ -22348,11 +23693,11 @@
         if (tsHeight < topJxl.options.minHeight) {
             tsHeight = topJxl.options.minHeight;
         }
-        if (topJxl.options.maxHeight >= 0 && 
+        if (topJxl.options.maxHeight >= 0 &&
             tsHeight > topJxl.options.maxHeight) {
             tsHeight = topJxl.options.maxHeight;
         }
-        
+
         /* update the topEdge to accomodate constraints */
         if (tsTop + tsHeight != topEdge) {
             /* need to update right side, ignoring constraints because left side
@@ -22361,19 +23706,19 @@
             topEdge = tsTop + tsHeight;
             var delta = topEdge + size.height - bsTop;
             bsTop += delta;
-            bsHeight -= delta; 
+            bsHeight -= delta;
         }
-        
+
         /* put bar in its final location based on constraints */
         obj.style.top = paddingTop + topEdge + 'px';
-        
+
         /* update topSide positions */
         if (topJxl.options.height == null) {
             topSide.resize({bottom: parentSize.height - tsTop-tsHeight});
         } else {
             topSide.resize({height: tsHeight});
         }
-        
+
         /* update bottomSide position */
         if (bottomJxl.options.height == null) {
             bottomSide.resize({top:bsTop});
@@ -22381,7 +23726,7 @@
             bottomSide.resize({top: bsTop, height: bsHeight});
         }
     },
-    
+
     /**
      * Method: sizeChanged
      * handle the size of the container being changed.
@@ -22393,7 +23738,7 @@
             this.verticalResize();
         }
     },
-    
+
     /**
      * Method: horizontalResize
      * Resize a horizontally layed-out container
@@ -22420,11 +23765,11 @@
                 availableSpace -= parseInt(jxo.width,10);
             } else {
                 w = 0;
-                if (jxo.right != 0 || 
+                if (jxo.right != 0 ||
                     jxo.left != 0) {
                     w = e.getBorderBoxSize().width;
                 }
-                
+
                 availableSpace -= w;
                 nVariable++;
             }
@@ -22440,7 +23785,7 @@
         var amount = parseInt(availableSpace / nVariable,10);
         /* account for rounding errors */
         var remainder = availableSpace % nVariable;
-        
+
         var leftPadding = this.domObj.measure(function(){
             var m = this.getSizes(['padding'], ['left']);
             return m.padding.left;
@@ -22461,13 +23806,13 @@
                      a += remainder;
                  }
                  nVariable--;
-                 
+
                  if (jxo.right != 0 || jxo.left != 0) {
                      w = e.getBorderBoxSize().width + a;
                  } else {
                      w = a;
                  }
-                 
+
                  if (w < 0) {
                      if (nVariable > 0) {
                          amount = amount + w/nVariable;
@@ -22486,7 +23831,7 @@
                      }
                      w = e.options.maxWidth;
                  }
-                 
+
                  var r = overallWidth - currentPosition - w;
                  jxl.resize({left: currentPosition, right: r});
                  currentPosition += w;
@@ -22498,12 +23843,12 @@
              }
          }
     },
-    
+
     /**
      * Method: verticalResize
      * Resize a vertically layed out container.
      */
-    verticalResize: function() { 
+    verticalResize: function() {
         var availableSpace = this.domObj.getContentBoxSize().height;
         var overallHeight = availableSpace;
         var i,e,jxo;
@@ -22527,7 +23872,7 @@
                 if (jxo.bottom != 0 || jxo.top != 0) {
                     h = e.getBorderBoxSize().height;
                 }
-                
+
                 availableSpace -= h;
                 nVariable++;
             }
@@ -22548,7 +23893,7 @@
             var m = this.getSizes(['padding'], ['top']);
             return m.padding.top;
         });
-        
+
         var currentPosition = 0;
 
         for (i=0; i<this.elements.length; i++) {
@@ -22564,14 +23909,14 @@
                      a += remainder;
                  }
                  nVariable--;
-                 
+
                  h = 0;
                  if (jxo.bottom != 0 || jxo.top != 0) {
                      h = e.getBorderBoxSize().height + a;
                  } else {
                      h = a;
                  }
-                 
+
                  if (h < 0) {
                      if (nVariable > 0) {
                          amount = amount + h/nVariable;
@@ -22590,7 +23935,7 @@
                      }
                      h = jxo.maxHeight;
                  }
-                 
+
                  var r = overallHeight - currentPosition - h;
                  jxl.resize({top: currentPosition, bottom: r});
                  currentPosition += h;
@@ -22602,7 +23947,7 @@
              }
          }
     }
-});// $Id: panelset.js 602 2009-11-10 19:41:36Z pagameba $
+});// $Id: panelset.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.PanelSet
  *
@@ -22629,15 +23974,15 @@
  * var panelSet = new Jx.PanelSet('panels', [p1,p2,p3]);
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.PanelSet = new Class({
     Family: 'Jx.PanelSet',
     Extends: Jx.Widget,
-    
+
     options: {
         /* Option: parent
          * the object to add the panel set to
@@ -22652,7 +23997,7 @@
          */
         barTooltip: 'drag this bar to resize'
     },
-    
+
     /**
      * Property: panels
      * {Array} the panels being managed by the set
@@ -22679,7 +24024,7 @@
         }
         this.domObj = new Element('div');
         new Jx.Layout(this.domObj);
-        
+
         //make a fake panel so we get the right number of splitters
         var d = new Element('div', {styles:{position:'absolute'}});
         new Jx.Layout(d, {minHeight:0,maxHeight:0,height:0});
@@ -22692,7 +24037,7 @@
             panel.domObj.store('Jx.Panel', panel);
             panel.manager = this;
         }, this);
-        
+
         this.splitter = new Jx.Splitter(this.domObj, {
             splitInto: this.panels.length+1,
             layout: 'vertical',
@@ -22702,17 +24047,17 @@
                     'class': 'jxPanelBar',
                     'title': this.options.barTooltip
                 });
-                
+
                 var panel = this.panels[i];
                 panel.title.setStyle('visibility', 'hidden');
                 document.id(document.body).adopt(panel.title);
                 var size = panel.title.getBorderBoxSize();
                 bar.adopt(panel.title);
                 panel.title.setStyle('visibility','');
-                
+
                 bar.setStyle('height', size.height);
                 bar.store('size', size);
-                
+
                 return bar;
             }).bind(this)
         });
@@ -22724,7 +24069,7 @@
             this.addTo(this.options.parent);
         }
     },
-    
+
     /**
      * Method: maximizePanel
      * Maximize a panel, taking up all available space (taking into
@@ -22793,7 +24138,7 @@
                 break;
             }
         }
-        
+
         /* now work from the bottom up */
         var bottom = domHeight;
         for (i=this.splitter.elements.length - 1; i > 0; i--) {
@@ -22819,11 +24164,11 @@
                     }
                 } else {
                     bottom -= o.minHeight;
-                    p.resize({top: bottom, height: o.minHeight, bottom: null});                    
+                    p.resize({top: bottom, height: o.minHeight, bottom: null});
                 }
                 bottom -= p.retrieve('leftBar').getBorderBoxSize().height;
                 p.retrieve('leftBar').style.top = bottom + 'px';
-                
+
             } else {
                 break;
             }
@@ -22839,15 +24184,15 @@
  * Jx.Dialog.Confirm is an extension of Jx.Dialog that allows the developer
  * to display a message to the user. It only presents an OK button.
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jonathan Bomgardner
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Dialog.Message = new Class({
-    
+
     Extends: Jx.Dialog,
-    
+
     options: {
         /**
          * Option: message
@@ -22896,8 +24241,8 @@
     onClick: function (value) {
         this.close();
     }
-    
-    
+
+
 });
 // $Id:$
 /**
@@ -22908,18 +24253,18 @@
  * Jx.Dialog.Confirm is an extension of Jx.Dialog that allows the developer
  * to prompt their user with e yes/no question.
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jonathan Bomgardner
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Dialog.Confirm = new Class({
-    
+
     Extends: Jx.Dialog,
-    
+
     options: {
         /**
-         * Option: question 
+         * Option: question
          * The question to ask the user
          */
         question: '',
@@ -22933,7 +24278,7 @@
          * The text to use for the negative button. Defaults to 'No'.
          */
         negativeLabel: 'No',
-        
+
         /**
          * Jx.Dialog option defaults
          */
@@ -22983,32 +24328,32 @@
         this.hide();
         this.fireEvent('close', [this, value]);
     }
-    
-    
+
+
 });// $Id: $
 /**
  * Class: Jx.Panel.DataView
  *
  * Extends: <Jx.Panel>
  *
- * This panel extension takes a standard Jx.Store (or subclass) and displays 
+ * This panel extension takes a standard Jx.Store (or subclass) and displays
  * each record as an item using a provided template. It sorts the store as requested
- * before doing so. The class only creates the HTML and has no default CSS display. All 
+ * before doing so. The class only creates the HTML and has no default CSS display. All
  * styling must be done by the developer using the control.
  *
  *
  * Events:
  * renderDone - fires when the panel completes creating all of the items.
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jonathan Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Panel.DataView = new Class({
 
     Extends: Jx.Panel,
-    
+
     options: {
         /**
          * Option: data
@@ -23027,7 +24372,7 @@
         itemTemplate: null,
         /**
          * Option: emptyTemplate
-         * the template that is displayed when there are no records in the 
+         * the template that is displayed when there are no records in the
          * store.
          */
         emptyTemplate: null,
@@ -23051,13 +24396,13 @@
             hover: true
         }
     },
-    
+
     /**
      * Property: bound
      * hold bound functions
      */
     bound: {},
-    
+
     init: function () {
         this.domA = new Element('div');
         this.list = this.createList(this.domA, this.options.listOptions);
@@ -23073,29 +24418,29 @@
             //we can't do anything without data
             return;
         }
-        
+
         this.options.content = this.domA;
-        
+
         //pass to parent
         this.parent();
-        
+
         this.domA.addClass(this.options.containerClass);
-        
+
         //parse templates so we know what values are needed in each
         this.itemCols = this.parseTemplate(this.options.itemTemplate);
-        
+
         this.bound.update = this.update.bind(this);
         //listen for data updates
         this.options.data.addEvent('loadFinished', this.bound.update);
         this.options.data.addEvent('sortFinished', this.bound.update);
         this.options.data.addEvent('loadError', this.bound.update);
-        
+
         if (this.options.data.loaded) {
             this.update();
         }
-        
+
     },
-    
+
     /**
      * Method: draw
      * begins the process of creating the items
@@ -23105,7 +24450,7 @@
         if ($defined(n) && n > 0) {
             for (var i = 0; i < n; i++) {
                 this.options.data.moveTo(i);
-                
+
                 var item = this.createItem();
                 this.list.add(item);
             }
@@ -23149,15 +24494,15 @@
     },
     /**
      * Method: parseTemplate
-     * parses the provided template to determine which store columns are 
+     * parses the provided template to determine which store columns are
      * required to complete it.
-     * 
+     *
      * Parameters:
      * template - the template to parse
      */
     parseTemplate: function (template) {
-        //we parse the template based on the columns in the data store looking 
-        //for the pattern {column-name}. If it's in there we add it to the 
+        //we parse the template based on the columns in the data store looking
+        //for the pattern {column-name}. If it's in there we add it to the
         //array of ones to look for
         var columns = this.options.data.getColumns();
         var arr = [];
@@ -23172,8 +24517,8 @@
     /**
      * Method: enterItem
      * Fires mouseenter event
-     * 
-     * Parameters: 
+     *
+     * Parameters:
      * item - the item that is the target of the event
      * list - the list this item is in.
      */
@@ -23183,8 +24528,8 @@
     /**
      * Method: leaveItem
      * Fires mouseleave event
-     * 
-     * Parameters: 
+     *
+     * Parameters:
      * item - the item that is the target of the event
      * list - the list this item is in.
      */
@@ -23194,8 +24539,8 @@
     /**
      * Method: selectItem
      * Fires select event
-     * 
-     * Parameters: 
+     *
+     * Parameters:
      * item - the item that is the target of the event
      * list - the list this item is in.
      */
@@ -23205,8 +24550,8 @@
     /**
      * Method: unselectItem
      * Fires unselect event
-     * 
-     * Parameters: 
+     *
+     * Parameters:
      * item - the item that is the target of the event
      * list - the list this item is in.
      */
@@ -23216,8 +24561,8 @@
     /**
      * Method: addItem
      * Fires add event
-     * 
-     * Parameters: 
+     *
+     * Parameters:
      * item - the item that is the target of the event
      * list - the list this item is in.
      */
@@ -23227,8 +24572,8 @@
     /**
      * Method: removeItem
      * Fires remove event
-     * 
-     * Parameters: 
+     *
+     * Parameters:
      * item - the item that is the target of the event
      * list - the list this item is in.
      */
@@ -23238,7 +24583,7 @@
     /**
      * Method: createList
      * Creates the list object
-     * 
+     *
      * Parameters:
      * container - the container to use in the list
      * options - the options for the list
@@ -23261,21 +24606,21 @@
  * Extends: <Jx.Panel.DataView>
  *
  * This extension of Jx.Panel.DataView that provides for grouping the items
- * by a particular column. 
+ * by a particular column.
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jonathan Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Panel.DataView.Group = new Class({
-    
+
     Extends: Jx.Panel.DataView,
-    
+
     options: {
         /**
          * Option: groupTemplate
-         * The template used to render the group heading 
+         * The template used to render the group heading
          */
         groupTemplate: null,
         /**
@@ -23291,7 +24636,7 @@
         groupHeaderClass: null,
         /**
          * Option: listOption
-         * Options to pass to the main list 
+         * Options to pass to the main list
          */
         listOptions: {
             select: false,
@@ -23308,25 +24653,25 @@
             selectClass: 'jxItemSelect'
         }
     },
-    
+
     init: function() {
         this.groupCols = this.parseTemplate(this.options.groupTemplate);
         this.itemManager = new Jx.Selection({
-            eventToFire: { 
+            eventToFire: {
                 select: 'itemselect',
                 unselect: 'itemunselect'
             },
             selectClass: 'jxItemSelected'
         });
         this.groupManager = new Jx.Selection({
-            eventToFire: { 
+            eventToFire: {
                 select: 'groupselect',
                 unselect: 'groupunselect'
             },
             selectClass: 'jxGroupSelected'
         });
         this.parent();
-        
+
     },
     /**
      * APIMethod: render
@@ -23335,7 +24680,7 @@
     render: function () {
         this.list = this.createList(this.domA, this.listOptions, this.groupManager);
         this.parent();
-        
+
     },
     /**
      * Method: draw
@@ -23344,18 +24689,18 @@
     draw: function () {
         var d = this.options.data;
         var n = d.count();
-        
+
         if ($defined(n) && n > 0) {
             var currentGroup = '';
             var itemList = null;
-            
+
             for (var i = 0; i < n; i++) {
                 d.moveTo(i);
                 var group = d.get(this.options.sortColumns[0]);
-                
+
                 if (group !== currentGroup) {
                     //we have a new grouping
-                    
+
                     //group container
                     var container =  new Element('div', {
                         'class': this.options.groupContainerClass
@@ -23365,7 +24710,7 @@
                         hover: false
                     });
                     this.list.add(l.container);
-                    
+
                     //group header
                     currentGroup = group;
                     var obj = {};
@@ -23379,7 +24724,7 @@
                         id: 'group-' + group.replace(" ","-","g")
                     });
                     l.add(g);
-                    
+
                     //items container
                     var currentItemContainer = new Element('div', {
                         'class': this.options.containerClass
@@ -23387,7 +24732,7 @@
                     itemList = this.createList(currentItemContainer, this.options.itemOptions, this.itemManager);
                     l.add(itemList.container);
                 }
-                
+
                 var item = this.createItem();
                 itemList.add(item);
             }
@@ -23397,11 +24742,11 @@
         }
         this.fireEvent('renderDone', this);
     },
-    
+
     /**
      * Method: createList
      * Creates the list object
-     * 
+     *
      * Parameters:
      * container - the container to use in the list
      * options - the options for the list
@@ -23415,7 +24760,7 @@
             onRemove: this.removeItem.bind(this)
         }, options), manager);
     }
-    
+
 });
 // $Id: $
 /**
@@ -23434,13 +24779,13 @@
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Tooltip = new Class({
-
+    Family: 'Jx.Widget',
     Extends : Jx.Widget,
 
     options : {
@@ -23466,7 +24811,7 @@
          */
         cssClass : null
     },
-    
+
     /**
      * Parameters:
      * target - The DOM element that triggers the toltip when moused over.
@@ -23479,8 +24824,8 @@
     /**
      * APIMethod: render
      * Creates the tooltip
-     * 
-     
+     *
+
      */
     render : function () {
         this.parent();
@@ -23500,31 +24845,31 @@
                 'visibility' : 'hidden'
             }
         }).inject(document.body);
-    
+
         if (Jx.type(this.options.tip) === 'string') {
             this.domObj.set('html', this.options.tip);
         } else {
             this.domObj.grab(this.options.tip);
         }
-    
+
         this.domObj.addClass('jxTooltip');
         if ($defined(this.options.cssClass)) {
             this.domObj.addClass(this.options.cssClass);
         }
-    
+
         this.options.target.store('Tip', this);
-    
+
         //add events
         this.options.target.addEvent('mouseenter', this.enter.bindWithEvent(this));
         this.options.target.addEvent('mouseleave', this.leave.bindWithEvent(this));
         this.options.target.addEvent('mousemove', this.move.bindWithEvent(this));
-    
+
     },
-    
+
     /**
      * Method: enter
      * Method run when the cursor passes over an element with a tip
-     * 
+     *
      * Parameters:
      * event - the event object
      * element - the element the cursor passed over
@@ -23539,7 +24884,7 @@
     /**
      * Method: leave
      * Executed when the mouse moves out of an element with a tip
-     * 
+     *
      * Parameters:
      * event - the event object
      * element - the element the cursor passed over
@@ -23553,7 +24898,7 @@
     /**
      * Method: move
      * Called when the mouse moves over an element with a tip.
-     * 
+     *
      * Parameters:
      * event - the event object
      */
@@ -23563,7 +24908,7 @@
     /**
      * Method: position
      * Called to position the tooltip.
-     * 
+     *
      * Parameters:
      * event - the event object
      */
@@ -23574,19 +24919,19 @@
             x : this.domObj.offsetWidth,
             y : this.domObj.offsetHeight
         };
-        var tipPlacement = { 
-            x: event.page.x + this.options.offsets.x, 
-            y: event.page.y + this.options.offsets.y 
+        var tipPlacement = {
+            x: event.page.x + this.options.offsets.x,
+            y: event.page.y + this.options.offsets.y
         };
-        
+
         if (event.page.y + this.options.offsets.y + tip.y + tipSize.height - scroll.y > size.y) {
             tipPlacement.y = event.page.y - this.options.offsets.y - tipSize.height - scroll.y;
         }
-        
+
         if (event.page.x + this.options.offsets.x + tip.x + tipSize.width - scroll.x > size.x) {
             tipPlacement.x = event.page.x - this.options.offsets.x - tipSize.width - scroll.x;
         }
-        
+
         this.domObj.setStyle('top', tipPlacement.y);
         this.domObj.setStyle('left', tipPlacement.x);
     },
@@ -23601,29 +24946,29 @@
 });
 // $Id: $
 /**
- * Class: Jx.Field 
+ * Class: Jx.Field
  *
  * Extends: <Jx.Widget>
- * 
+ *
  * This class is the base class for all form fields.
  * The class will also allow for displaying error messages generated by
  * form validation.
- * 
- * 
+ *
+ *
  * Example:
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Field = new Class({
-
+    Family: 'Jx.Field',
     Extends : Jx.Widget,
     pluginNamespace: 'Field',
-    
+
     options : {
         /**
          * Option: id
@@ -23633,35 +24978,35 @@
         /**
          * Option: name
          * The name of the field (used when submitting to the server). Will also be used for the
-         * name attribute of the field. 
+         * name attribute of the field.
          */
         name : null,
         /**
          * Option: label
-         * The text that goes next to the field. 
+         * The text that goes next to the field.
          */
         label : null,
         /**
          * Option: labelSeparator
-         * A character to use as the separator between the label and the input. 
-         * Make it an empty string for no separator. 
+         * A character to use as the separator between the label and the input.
+         * Make it an empty string for no separator.
          */
         labelSeparator : ":",
         /**
          * Option: value
-         * A default value to populate the field with. 
+         * A default value to populate the field with.
          */
         value : null,
         /**
          * Option: tag
          * a string to use as the HTML of the tag element (default is a
-         * <span> element). 
+         * <span> element).
          */
         tag : null,
         /**
          * Option: tip
-         * A string that will eventually serve as a tooltip for an input field. 
-         * Currently only implemented as OverText for text fields. 
+         * A string that will eventually serve as a tooltip for an input field.
+         * Currently only implemented as OverText for text fields.
          */
         tip : null,
         /**
@@ -23671,12 +25016,12 @@
         template : null,
         /**
          * Option: containerClass
-         * a CSS class that will be added to the containing element. 
+         * a CSS class that will be added to the containing element.
          */
         containerClass : null,
         /**
          * Option: labelClass
-         * a CSS to add to the label 
+         * a CSS to add to the label
          */
         labelClass : null,
         /**
@@ -23686,14 +25031,14 @@
         fieldClass : null,
         /**
          * Option: tagClass
-         * a CSS class to add to the tag field 
+         * a CSS class to add to the tag field
          */
         tagClass : null,
         /**
          * Option: required
          * Whether the field is required. Setting this to true will trigger
          * the addition of a "required" validator class and the form
-         * will not submit until it is filled in and validates. 
+         * will not submit until it is filled in and validates.
          */
         required : false,
         /**
@@ -23714,7 +25059,7 @@
         disabled : false
 
     },
-    
+
     /**
      * Property: overtextOptions
      * The default options Jx uses for mootools-more's OverText
@@ -23725,37 +25070,37 @@
     },
 
     /**
-     * Property: field 
+     * Property: field
      * An element representing the input field itself.
      */
     field : null,
     /**
-     * Property: label 
+     * Property: label
      * A reference to the label element for this field
      */
     label : null,
     /**
-     * Property: tag 
+     * Property: tag
      * A reference to the "tag" field of this input if available
      */
     tag : null,
     /**
-     * Property: id 
+     * Property: id
      * The name of this field.
      */
     id : null,
     /**
-     * Property: overText 
+     * Property: overText
      * The overText instance for this field.
      */
     overText : null,
     /**
-     * Property: type 
+     * Property: type
      * Indicates that this is a field type
      */
     type : 'field',
     /**
-     * Property: classes 
+     * Property: classes
      * The classes to search for in the template. Not
      * required, but we look for them.
      */
@@ -23764,7 +25109,7 @@
         label: 'jxInputLabel',
         tag: 'jxInputTag'
     }),
-    
+
     /**
      * APIMethod: render
      */
@@ -23777,11 +25122,11 @@
         this.id = ($defined(this.options.id)) ? this.options.id : this
                 .generateId();
         this.name = this.options.name;
-        
+
         if ($defined(this.type)) {
             this.domObj.addClass('jxInputContainer'+this.type);
         }
-        
+
         if ($defined(this.options.containerClass)) {
             this.domObj.addClass(this.options.containerClass);
         }
@@ -23803,9 +25148,9 @@
                 this.label.set('html', this.options.label
                         + this.options.labelSeparator);
             }
-            
+
             this.label.set('for', this.id);
-            
+
             if (this.options.required) {
                 var em = new Element('em', {
                     'html' : this.options.requiredText,
@@ -23830,13 +25175,13 @@
             if ($defined(this.options.readonly)
                     && this.options.readonly) {
                 this.field.set("readonly", "readonly");
-                this.field.addClass('jxFieldReadonly'); 
+                this.field.addClass('jxFieldReadonly');
             }
 
             if ($defined(this.options.disabled)
                     && this.options.disabled) {
                 this.field.set("disabled", "disabled");
-                this.field.addClass('jxFieldDisabled'); 
+                this.field.addClass('jxFieldDisabled');
             }
 
             // add validator classes
@@ -23866,8 +25211,8 @@
     },
     /**
      * APIMethod: setValue Sets the value property of the field
-     * 
-     * Parameters: 
+     *
+     * Parameters:
      * v - The value to set the field to.
      */
     setValue : function (v) {
@@ -23875,7 +25220,7 @@
     },
 
     /**
-     * APIMethod: getValue 
+     * APIMethod: getValue
      * Returns the current value of the field.
      */
     getValue : function () {
@@ -23883,7 +25228,7 @@
     },
 
     /**
-     * APIMethod: reset 
+     * APIMethod: reset
      * Sets the field back to the value passed in the
      * original options
      */
@@ -23912,28 +25257,28 @@
 // $Id: $
 /**
  * Class: Jx.Field.Text
- * 
+ *
  * Extends: <Jx.Field>
- * 
+ *
  * This class represents a text input field.
- * 
+ *
  * Example:
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Field.Text = new Class({
-    
+
     Extends: Jx.Field,
-    
+
     options: {
         /**
          * Option: overText
-         * an object holding options for mootools-more's OverText class. Leave it null to 
+         * an object holding options for mootools-more's OverText class. Leave it null to
          * not enable it, make it an object to enable.
          */
         overText: null,
@@ -23948,14 +25293,14 @@
      * The type of this field
      */
     type: 'Text',
-    
+
     /**
      * APIMethod: render
      * Creates a text input field.
      */
     render: function () {
         this.parent();
-        
+
         //create the overText instance if needed
         if ($defined(this.options.overText)) {
             var opts = $extend({}, this.options.overText);
@@ -23963,30 +25308,30 @@
             this.overText = new OverText(this.field, opts);
             this.overText.show();
         }
-        
+
     }
-    
+
 });// $Id: $
 /**
  * Class: Jx.Field.Hidden
- * 
+ *
  * Extends: <Jx.Field>
- * 
+ *
  * This class represents a hidden input field.
- *  
+ *
  * Example:
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Field.Hidden = new Class({
-    
+
     Extends: Jx.Field,
-    
+
     options: {
         /**
          * Option: template
@@ -23999,7 +25344,7 @@
      * The type of this field
      */
     type: 'Hidden'
-    
+
 });
 
 
@@ -24008,59 +25353,59 @@
 // $Id: $
 /**
  * Class: Jx.Form
- * 
+ *
  * Extends: <Jx.Widget>
- * 
- * A class that represents an HTML form. You add fields using either Jx.Form.add() 
- * or by using the field's .addTo() method. You can get all form values or set them 
- * using this class. It also handles validation of fields. 
- *    
+ *
+ * A class that represents an HTML form. You add fields using either Jx.Form.add()
+ * or by using the field's .addTo() method. You can get all form values or set them
+ * using this class. It also handles validation of fields.
+ *
  * Example:
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Form = new Class({
-	
-	Extends: Jx.Widget,
-	
-	options: {
+    Family: 'Jx.Form',
+    Extends: Jx.Widget,
+
+    options: {
         /**
          * Option: method
          * the method used to submit the form
          */
-		method: 'post',
-		/**
+        method: 'post',
+        /**
          * Option: action
          * where to submit it to
          */
-		action: '',
-		/**
+        action: '',
+        /**
          * Option: fileUpload
-         * whether this form handles file uploads or not. 
+         * whether this form handles file uploads or not.
          */
-		fileUpload: false,
-		/**
+        fileUpload: false,
+        /**
          * Option: id
          * the id of this form
          */
-		id: null,
-		/**
+        id: null,
+        /**
          * Option: formClass
          */
-		formClass: null,
-		/**
+        formClass: null,
+        /**
          * Option: name
          * the name property for the form
          */
-		name: ''
-	},
+        name: ''
+    },
 
-	/**
+    /**
      * Property: fields
      * An array of all of the single fields (not contained in a fieldset) for this form
      */
@@ -24084,7 +25429,7 @@
             'class' : 'jxForm',
             'name' : this.options.name
         });
-        
+
         if (this.options.fileUpload) {
             this.domObj.set('enctype', 'multipart/form-data');
         }
@@ -24099,7 +25444,7 @@
     /**
      * APIMethod: addField
      * Adds a <Jx.Field> subclass to this form's fields hash
-     * 
+     *
      * Parameters:
      * field - <Jx.Field> to add
      */
@@ -24107,11 +25452,11 @@
         this.fields.set(field.id, field);
     },
 
-    
+
     /**
      * Method: isValid
      * Determines if the form passes validation
-     * 
+     *
      * Parameters:
      * evt - the Mootools event object
      */
@@ -24121,13 +25466,13 @@
 
     /**
      * APIMethod: getValues
-     * Gets the values of all the fields in the form as a Hash object. This 
-     * uses the mootools function Element.toQueryString to get the values and 
-     * will either return the values as a querystring or as an object (using 
+     * Gets the values of all the fields in the form as a Hash object. This
+     * uses the mootools function Element.toQueryString to get the values and
+     * will either return the values as a querystring or as an object (using
      * mootools-more's String.parseQueryString method).
-     * 
+     *
      * Parameters:
-     * asQueryString - {boolean} indicates whether to return the value as a 
+     * asQueryString - {boolean} indicates whether to return the value as a
      *                  query string or an object.
      */
     getValues : function (asQueryString) {
@@ -24141,7 +25486,7 @@
     /**
      * APIMethod: setValues
      * Used to set values on the form
-     * 
+     *
      * Parameters:
      * values - A Hash of values to set keyed by field name.
      */
@@ -24157,7 +25502,7 @@
 
     /**
      * APIMethod: add
-     * 
+     *
      * Parameters:
      * Pass as many parameters as you like. However, they should all be
      * <Jx.Field> objects.
@@ -24175,10 +25520,10 @@
         }
         return this;
     },
-    
+
     /**
      * APIMethod: reset
-     * 
+     *
      */
     reset : function () {
         this.fields.each(function (field, name) {
@@ -24186,7 +25531,7 @@
         }, this);
         this.fireEvent('reset',this);
     },
-    
+
     getFieldsByName: function (name) {
         var fields = [];
         this.fields.each(function(val, id){
@@ -24199,30 +25544,30 @@
 });
 /**
  * Class: Jx.Field.File
- * 
+ *
  * Extends: <Jx.Field>
- * 
+ *
  * This class is designed to work with an iFrame and APC upload progress.
  * APC is a php specific technology but any server side implementation that
- * works in the same manner should work. You can then wire this class to the 
+ * works in the same manner should work. You can then wire this class to the
  * progress bar class to show progress.
- * 
- * The other option is to not use progress tracking and just use the base 
+ *
+ * The other option is to not use progress tracking and just use the base
  * upload which works through a hidden iFrame. In order to use this with Jx.Form
- * you'll need to add it normally but keep a reference to it. When you call 
- * Jx.Form.getValues() it will not return any file information. You can then 
+ * you'll need to add it normally but keep a reference to it. When you call
+ * Jx.Form.getValues() it will not return any file information. You can then
  * call the Jx.Field.File.upload() method for each file input directly and
  * then submit the rest of the form via ajax.
- * 
- * License: 
+ *
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Field.File = new Class({
-    
+
     Extends: Jx.Field,
-    
+
     options: {
         /**
          * Option: template
@@ -24248,14 +25593,14 @@
         /**
          * Option: progressName
          * The name to give the field that holds the generated progress ID retrieved
-         * from the server. Defaults to 'APC_UPLOAD_PROGRESS' which is the default 
+         * from the server. Defaults to 'APC_UPLOAD_PROGRESS' which is the default
          * for APC.
          */
         progressName: 'APC_UPLOAD_PROGRESS',
         /**
          * Option: progressId
-         * The id to give the form element that holds the generated progress ID 
-         * retrieved from the server. Defaults to 'progress_key'. 
+         * The id to give the form element that holds the generated progress ID
+         * retrieved from the server. Defaults to 'progress_key'.
          */
         progressId: 'progress_key',
         /**
@@ -24283,7 +25628,7 @@
         onUploadProgress: $empty,
         onUploadError: $empty,
         onFileSelected: $empty
-        
+
     },
     /**
      * Property: type
@@ -24296,14 +25641,14 @@
      */
     render: function () {
         this.parent();
-        
+
         //add a unique ID if no id is defined
         if (!$defined(this.options.id)) {
             this.field.set('id', this.generateId());
         }
-        
+
         //now, create the fake inputs
-        
+
         this.fake = new Element('div', {
             'class' : 'jxFileFake'
         });
@@ -24313,18 +25658,18 @@
         this.browseButton = new Jx.Button({
             label : 'Browse...'
         });
-        
-        
+
+
         this.fake.adopt(this.text, this.browseButton);
         this.field.grab(this.fake, 'after');
-        
+
         this.field.addEvents({
             change : this.copyValue.bind(this),
             mouseout : this.copyValue.bind(this),
             mouseenter : this.mouseEnter.bind(this),
             mouseleave : this.mouseLeave.bind(this)
         });
-        
+
     },
     /**
      * Method: copyValue
@@ -24339,7 +25684,7 @@
     },
     /**
      * Method: mouseEnter
-     * Called when the mouse enters the actual file input to make the 
+     * Called when the mouse enters the actual file input to make the
      * fake button highlight.
      */
     mouseEnter: function () {
@@ -24364,25 +25709,25 @@
             styles: {
                 display: 'none'
             },
-            
-            name : this.generateId() 
+
+            name : this.generateId()
         });
         this.iframe.inject(document.body);
-            
+
         //load in the form
         this.form = new Jx.Form({
             action : this.options.handlerUrl,
             name : 'jxUploadForm',
             fileUpload: true
         });
-        
+
         //iframeBody.grab(this.form);
         $(this.form).set('target', this.iframe.get('name')).setStyles({
             visibility: 'hidden',
             display: 'none'
         }).inject(document.body);
-        
-        
+
+
         //move the form input into it (cloneNode)
         $(this.form).grab(this.field.cloneNode(true));
         //if polling the server we need an APC_UPLOAD_PROGRESS id.
@@ -24402,9 +25747,9 @@
      * Method: submitUpload
      * Called either after upload() or as a result of a successful call
      * to get a progress ID.
-     * 
+     *
      * Parameters:
-     * data - Optional. The data returned from the call for a progress ID. 
+     * data - Optional. The data returned from the call for a progress ID.
      */
     submitUpload: function (data) {
         //check for ID in data
@@ -24419,8 +25764,8 @@
             id.addTo(this.form, 'top');
         }
         this.iframe.addEvent('load', this.processIFrameUpload.bind(this));
-        
-        
+
+
         //submit the form
         $(this.form).submit();
         //begin polling if needed
@@ -24443,11 +25788,11 @@
         });
         r.send();
     },
-    
+
     /**
      * Method: processProgress
      * process the data returned from the request
-     * 
+     *
      * Parameters:
      * data - The data from the request as an object.
      */
@@ -24482,7 +25827,7 @@
         //the body text should be a JSON structure
         //get the body
         var iframeBody = this.iframe.contentDocument.defaultView.document.body.innerHTML;
-        
+
         var data = JSON.decode(iframeBody);
         if ($defined(data.success) && data.success) {
             this.done = true;
@@ -24497,7 +25842,7 @@
     },
     /**
      * Method: uploadCleanUp
-     * Cleans up the hidden form and IFrame after a completed upload. Set 
+     * Cleans up the hidden form and IFrame after a completed upload. Set
      * this.options.debug to true to keep this from happening
      */
     uploadCleanUp: function () {
@@ -24551,7 +25896,7 @@
  * 
  */
 Jx.Progressbar = new Class({
-    
+    Family: 'Jx.Progressbar',
     Extends: Jx.Widget,
     
     options: {
@@ -24724,21 +26069,21 @@
 });
 /**
  * Class: Jx.Panel.FileUpload
- * 
+ *
  * Extends: <Jx.Panel>
- * 
+ *
  * This class extends Jx.Panel to provide a consistent interface for uploading
- * files in an application. 
- * 
- * License: 
+ * files in an application.
+ *
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Panel.FileUpload = new Class({
-    
+
     Extends: Jx.Panel,
-    
+
     options: {
         /**
          * Option: file
@@ -24763,7 +26108,7 @@
         onComplete: $empty,
         /**
          * Option: prompt
-         * The prompt to display at the top of the panel - before the 
+         * The prompt to display at the top of the panel - before the
          * file input
          */
         prompt: null,
@@ -24796,8 +26141,8 @@
     render: function () {
         //first create panel content
         this.domObjA = new Element('div', {'class' : 'jxFileUploadPanel'});
-        
-        
+
+
         if ($defined(this.options.prompt)) {
             var desc;
             if (Jx.type(this.options.prompt === 'string')) {
@@ -24809,20 +26154,24 @@
             }
             desc.inject(this.domObjA);
         }
-        
+
         //add the file field
         this.fileOpt = this.options.file;
         this.fileOpt.template = '<div class="jxInputContainer jxFileInputs"><input class="jxInputFile" type="file" name={name} /></div>';
-        
+
         this.currentFile = new Jx.Field.File(this.fileOpt);
         this.currentFile.addEvent('fileSelected', this.moveToQueue.bind(this));
         this.currentFile.addTo(this.domObjA);
-        
+
         //now the 'queue' listing with delete button
-        
+
         this.queueDiv = new Element('div', {
             'class': 'jxUploadQueue'
         });
+        //make the queueDiv a list
+        this.list = new Jx.List(this.queueDiv, {
+            hover: true
+        });
         this.queueDiv.inject(this.domObjA);
         this.uploadBtn = new Jx.Button({
             label : this.options.buttonText,
@@ -24830,28 +26179,28 @@
         });
         var tlb = new Jx.Toolbar({position: 'bottom'}).add(this.uploadBtn);
         this.uploadBtn.setEnabled(false);
-        this.options.toolbars = [tlb]; 
-        //then pass it on to the Panel constructor 
+        this.options.toolbars = [tlb];
+        //then pass it on to the Panel constructor
         this.options.content = this.domObjA;
         this.parent(this.options);
     },
     /**
      * Method: moveToQueue
-     * Called by Jx.Field.File's fileSelected event. Moves the selected file into the 
+     * Called by Jx.Field.File's fileSelected event. Moves the selected file into the
      * upload queue.
      */
     moveToQueue: function (file) {
         var cf = this.currentFile;
         var name = cf.getFileName();
-        
+
         this.fileQueue.push(this.currentFile);
-        
+
         this.currentFile = new Jx.Field.File(this.fileOpt);
         this.currentFile.addEvent('fileSelected', this.moveToQueue.bind(this));
         $(this.currentFile).replaces($(cf));
-        
+
         //add to queue div
-                
+
         cf.queuedDiv = new Element('div', {id : name});
         var s = new Element('span', {
             html : name,
@@ -24861,14 +26210,15 @@
             'class' : 'jxUploadFileDelete',
             title : 'Remove from queue'
         });
-        
+
         del.addEvent('click', this.removeFromQueue.bind(this, cf));
         cf.queuedDiv.adopt(s, del);
-        cf.queuedDiv.inject(this.queueDiv);
+        this.list.add(cf.queuedDiv);
+        //cf.queuedDiv.inject(this.queueDiv);
         if (!this.uploadBtn.isEnabled()) {
             this.uploadBtn.setEnabled(true);
         }
-        
+
     },
     /**
      * Method: upload
@@ -24878,7 +26228,7 @@
         var file = this.fileQueue.shift();
         file.addEvent('uploadComplete', this.fileUploadComplete.bind(this));
         file.addEvent('uploadError', this.fileUploadError.bind(this));
-        
+
         if (this.options.file.progress) {
             file.addEvent('uploadProgress', this.fileUploadProgress.bind(this));
             //progressbar
@@ -24904,9 +26254,9 @@
     },
     /**
      * Method: fileUploadComplete
-     * Called when a single file is uploaded completely (called by 
-     * Jx.Field.File's uploadComplete event). 
-     * 
+     * Called when a single file is uploaded completely (called by
+     * Jx.Field.File's uploadComplete event).
+     *
      * Parameters:
      * data - the data returned from the event
      * file - the file we're tracking
@@ -24921,13 +26271,13 @@
     /**
      * Method: fileUploadError
      * Called when there is an error uploading a file.
-     * 
+     *
      * Parameters:
      * data - the data passed back from the server, if any.
      * file - the file we're tracking
      */
     fileUploadError: function (data, file) {
-        var icon = file.queuedDiv.getLast(); 
+        var icon = file.queuedDiv.getLast();
         icon.erase('title');
         if (icon.hasClass('jxUploadFileProgress')) {
             icon.removeClass('jxUploadFileProgress').addClass('jxUploadFileError');
@@ -24936,7 +26286,7 @@
             file.queuedDiv.replaces(file.pb);
             icon.removeClass('jxUploadFileDelete').addClass('jxUploadFileError');
         }
-        if ($defined(data.error.message)) {
+        if ($defined(data.error) && $defined(data.error.message)) {
             var tt = new Jx.Tooltip(icon, data.error.message, {
                 cssClass : 'jxUploadFileErrorTip'
             });
@@ -24945,17 +26295,18 @@
     /**
      * Method: removeUploadedFile
      * Removes the passed file from the upload queue upon it's completion.
-     * 
+     *
      * Parameters:
      * file - the file we're tracking
      */
     removeUploadedFile: function (file) {
-        
+
         if (this.options.removeOnComplete) {
             if ($defined(file.pb)) {
                 file.pb.destroy();
             }
-            file.queuedDiv.dispose();
+            this.list.remove(file.queuedDiv);
+            //file.queuedDiv.dispose();
             var name = file.getFileName();
             this.fileQueue.erase(name);
         } else {
@@ -24970,7 +26321,7 @@
                 l.removeClass('jxUploadFileProgress').addClass('jxUploadFileComplete');
             }
         }
-        
+
         this.fireEvent('fileComplete', file);
         if (this.fileQueue.length > 0) {
             this.upload();
@@ -24980,7 +26331,7 @@
     },
     /**
      * Method: fileUploadProgress
-     * Function to pass progress information to the progressbar instance 
+     * Function to pass progress information to the progressbar instance
      * in the file. Only used if we're tracking progress.
      */
     fileUploadProgress: function (data, file) {
@@ -24988,17 +26339,18 @@
     },
     /**
      * Method: removeFromQueue
-     * Called when the delete icon is clicked for an individual file. It 
-     * removes the file from the queue, disposes of it, and does NOT upload 
+     * Called when the delete icon is clicked for an individual file. It
+     * removes the file from the queue, disposes of it, and does NOT upload
      * the file to the server.
-     * 
+     *
      * Pparameters:
      * file - the file we're getting rid of.
      */
     removeFromQueue: function (file) {
         var name = file.getFileName();
         //TODO: Should prompt the user to be sure - use Jx.Dialog.Confirm?
-        $(name).destroy();
+        this.list.remove(file.queuedDiv);
+        //$(name).destroy();
         this.fileQueue = this.fileQueue.erase(file);
         if (this.fileQueue.length === 0) {
             this.uploadBtn.setEnabled(false);
@@ -25013,36 +26365,37 @@
  *
  * Events:
  *
- * License: 
+ * License:
  * Copyright (c) 2009, DM Solutions Group.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.ListItem = new Class({
+    Family: 'Jx.ListItem',
+    Extends: Jx.Widget,
 
-    Extends: Jx.Widget,
-    
     options: {
         enabled: true,
         template: '<li class="jxListItemContainer jxListItem"></li>'
     },
-    
+
     classes: new Hash({
         domObj: 'jxListItemContainer',
         domContent: 'jxListItem'
     }),
-    
+
     /**
      * APIMethod: render
      */
     render: function () {
         this.parent();
+        this.domContent.store('jxListItem', this);
         this.domObj.store('jxListTarget', this.domContent);
         this.loadContent(this.domContent);
     },
-    
+
     enable: function(state) {
-        
+
     }
 });// $Id: $
 /**
@@ -25052,17 +26405,17 @@
  *
  * Events:
  *
- * License: 
+ * License:
  * Copyright (c) 2009, DM Solutions Group.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.ListView = new Class({
+    Family: 'Jx.Widget',
+    Extends: Jx.Widget,
 
-    Extends: Jx.Widget,
-    
     options: {
-        template: '<ul class="jxListView"></ul>',
+        template: '<ul class="jxListView jxList"></ul>',
         /**
          * Option: listOptions
          * control the behaviour of the list, see <Jx.List>
@@ -25073,45 +26426,46 @@
             select: true
         }
     },
-    
+
     classes: new Hash({
-        domObj: 'jxListView'
+        domObj: 'jxListView',
+        listObj: 'jxList'
     }),
-    
+
     /**
      * APIMethod: render
      */
     render: function () {
         this.parent();
-        
+
         if (this.options.selection) {
             this.selection = this.options.selection;
         } else if (this.options.select) {
             this.selection = new Jx.Selection(this.options);
             this.ownsSelection = true;
         }
-        
-        this.list = new Jx.List(this.domObj, this.options.listOptions, this.selection);
-        
+
+        this.list = new Jx.List(this.listObj, this.options.listOptions, this.selection);
+
     },
-    
+
     cleanup: function() {
         if (this.ownsSelection) {
             this.selection.destroy();
         }
         this.list.destroy();
     },
-    
+
     add: function(item, where) {
         this.list.add(item, where);
         return this;
     },
-    
+
     remove: function(item) {
         this.list.remove(item);
         return this;
     },
-    
+
     replace: function(item, withItem) {
         this.list.replace(item, withItem);
         return this;
@@ -25119,18 +26473,18 @@
 });// $Id: $
 /**
  * Class: Jx.Column
- * 
+ *
  * Extends: <Jx.Object>
- * 
+ *
  * The class used for defining columns for grids.
  *
  * Example:
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Column = new Class({
@@ -25177,12 +26531,12 @@
         isHidden: false,
         /**
          * Option: formatter
-         * an instance of <Jx.Formatter> or one of its subclasses which 
-         * will be used to format the data in this column. It can also be 
-         * an object containing the name (This should be the part after 
-         * Jx.Formatter in the class name. For instance, to get a currency 
-         * formatter, specify 'Currency' as the name.) and options for the 
-         * needed formatter (see individual formatters for options). 
+         * an instance of <Jx.Formatter> or one of its subclasses which
+         * will be used to format the data in this column. It can also be
+         * an object containing the name (This should be the part after
+         * Jx.Formatter in the class name. For instance, to get a currency
+         * formatter, specify 'Currency' as the name.) and options for the
+         * needed formatter (see individual formatters for options).
          * (code)
          * {
          *    name: 'formatter name',
@@ -25198,15 +26552,15 @@
         name: '',
         /**
          * Option: dataType
-         * The type of the data in this column, used for sorting. Can be 
+         * The type of the data in this column, used for sorting. Can be
          * alphanumeric, numeric, currency, boolean, or date
          */
         dataType: 'alphanumeric',
         /**
          * Option: templates
-         * objects used to determine the type of tag and css class to 
-         * assign to a header cell and a regular cell. The css class can 
-         * also be a function that returns a string to assign as the css 
+         * objects used to determine the type of tag and css class to
+         * assign to a header cell and a regular cell. The css class can
+         * also be a function that returns a string to assign as the css
          * class. The function will be passed the text to be formatted.
          */
         templates: {
@@ -25219,16 +26573,16 @@
                 cssClass: null
             }
         }
-    
+
     },
     /**
      * Property: model
      * holds a reference to the model (an instance of <Jx.Store> or subclass)
      */
     model: null,
-    
+
     parameters: ['options','grid'],
-    
+
     /**
      * Constructor: Jx.Column
      * initializes the column object
@@ -25251,7 +26605,7 @@
     },
     /**
      * APIMethod: getHeaderHTML
-     * Returns the header text wrapped in the tag specified in 
+     * Returns the header text wrapped in the tag specified in
      * options.templates.hedaer.tag
      */
     getHeaderHTML : function () {
@@ -25272,7 +26626,7 @@
         this.header = el;
         return el;
     },
-    
+
     setWidth: function(newWidth) {
         if (this.rule && parseInt(newWidth,10) >= 0) {
             this.width = parseInt(newWidth,10);
@@ -25281,11 +26635,11 @@
     },
     /**
      * APIMethod: getWidth
-     * returns the width of the column. 
-     * 
+     * returns the width of the column.
+     *
      * Parameters:
-     * recalculate - {boolean} determines if the width should be recalculated 
-     *          if the column is set to autocalculate. Has no effect if the width is 
+     * recalculate - {boolean} determines if the width should be recalculated
+     *          if the column is set to autocalculate. Has no effect if the width is
      *          preset
      * rowHeader - flag to tell us if this calculation is for the row header
      */
@@ -25306,7 +26660,7 @@
                 model.first();
                 while (model.valid()) {
                     //check size by placing text into a TD and measuring it.
-                    //TODO: this should add .jxGridRowHead/.jxGridColHead if 
+                    //TODO: this should add .jxGridRowHead/.jxGridColHead if
                     //      this is a header to get the correct measurement.
                     var text = model.get(this.options.modelField);
                     var klass = 'jxGridCell';
@@ -25325,7 +26679,7 @@
                         break;
                     }
                 }
-    
+
                 //check the column header as well (unless this is the row header)
                 if (!(this.grid.row.useHeaders() && this.options.modelField === this.grid.row
                         .getRowHeaderField())) {
@@ -25359,10 +26713,10 @@
     /**
      * Method: measure
      * This method does the dirty work of actually measuring a cell
-     * 
+     *
      * Parameters:
      * text - the text to measure
-     * klass - a string indicating and extra classes to add so that 
+     * klass - a string indicating and extra classes to add so that
      *          css classes can be taken into account.
      */
     measure : function (text, klass, rowHeader) {
@@ -25495,9 +26849,9 @@
      * an array holding the actual instantiated column objects
      */
     columns : [],
-    
+
     parameters: ['options','grid'],
-    
+
     /**
      * APIMethod: init
      * Creates the class.
@@ -25593,7 +26947,7 @@
         var parts = hClasses[0].split('-');
         return this.getByName(parts[1]);
     },
-    
+
     /**
      * APIMethod: getHeaders
      * Returns a row with the headers in it.
@@ -25678,7 +27032,7 @@
         if (col.isSortable()) {
             td.addClass('jxColSortable');
         }
-        
+
         td.store('jxCellData',{
             col: col,
             index: idx,
@@ -25717,7 +27071,7 @@
         headers.each(function (h) {
             i++;
             var hClasses = h.get('class').split(' ').filter(function (cls) {
-                return cls.test('jxColHead-'); 
+                return cls.test('jxColHead-');
             });
             hClasses.each(function (cls) {
                 if (cls.test(name)) {
@@ -25732,21 +27086,20 @@
 // $Id: $
 /**
  * Class: Jx.Row
- * 
+ *
  * Extends: <Jx.Object>
- * 
+ *
  * A class defining a grid row.
- * 
+ *
  * Inspired by code in the original Jx.Grid class
- * 
- * License: 
+ *
+ * License:
  * Original Copyright (c) 2008, DM Solutions Group Inc.
  * This version Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
-Jx.Row = new Class(
-{
+Jx.Row = new Class({
 
     Extends : Jx.Object,
 
@@ -25789,9 +27142,9 @@
         headerField : 'id',
         /**
          * Option: templates
-         * objects used to determine the type of tag and css class to 
-         * assign to a header cell. The css class can 
-         * also be a function that returns a string to assign as the css 
+         * objects used to determine the type of tag and css class to
+         * assign to a header cell. The css class can
+         * also be a function that returns a string to assign as the css
          * class. The function will be passed the text to be formatted.
          */
         templates: {
@@ -25800,16 +27153,16 @@
                 cssClass: null
             }
         }
-        
+
     },
     /**
      * Property: grid
      * A reference to the grid that this row model belongs to
      */
     grid : null,
-    
+
     parameters: ['options','grid'],
-    
+
     /**
      * APIMethod: init
      * Creates the row model object.
@@ -25847,7 +27200,7 @@
         var th = new Element('td', {
             'class' : 'jxGridRowHead'
         });
-        
+
         var text = model.get(this.options.headerField);
         var ht = this.options.templates.header;
         var el = new Element(ht.tag, {
@@ -25861,9 +27214,9 @@
                 el.addClass(ht.cssClass);
             }
         }
-        
+
         return th;
-        
+
     },
     /**
      * APIMethod: getRowHeaderWidth
@@ -25875,7 +27228,7 @@
         var col = this.grid.columns.getByField(this.options.headerField);
         return col.getWidth(true, true);
     },
-    
+
     /**
      * APIMethod: getHeight
      * determines and returns the height of a row
@@ -25896,8 +27249,8 @@
     /**
      * APIMethod: getRowHeader
      * creates and returns the header for the current row
-     * 
-     * Parameters: 
+     *
+     * Parameters:
      * list - Jx.List instance to add the header to
      */
     getRowHeader : function (list) {
@@ -25923,58 +27276,58 @@
 // $Id: $
 /**
  * Class: Jx.Grid.Plugin
- * 
+ *
  * Extend: <Jx.Object>
- * 
- * Base class for all plugins. In order for a plugin to be used it must 
+ *
+ * Base class for all plugins. In order for a plugin to be used it must
  * extend from this class.
- * 
+ *
  * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Plugin = new Class({
-    
+
+    Family: "Jx.Plugin",
+
     Extends: Jx.Object,
-    
-    Family: "Jx.Plugin",
-    
+
     options: {},
-    
+
     /**
      * APIMethod: attach
-     * Empty method that must be overridden by subclasses. It is 
+     * Empty method that must be overridden by subclasses. It is
      * called by the user of the plugin to setup the plugin for use.
      */
     attach: function(obj){
         obj.registerPlugin(this);
     },
-    
+
     /**
      * APIMethod: detach
-     * Empty method that must be overridden by subclasses. It is 
+     * Empty method that must be overridden by subclasses. It is
      * called by the user of the plugin to remove the plugin.
      */
     detach: function(obj){
         obj.deregisterPlugin(this);
     }
-    
+
 });// $Id: $
 /**
  * Class: Jx.Plugin.Grid
  * Grid plugin namespace
- * 
- * 
- * License: 
+ *
+ *
+ * License:
  * This version Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
-Jx.Plugin.Grid = {};// $Id: grid.js 602 2009-11-10 19:41:36Z pagameba $
+Jx.Plugin.Grid = {};// $Id: grid.js 637 2009-11-21 06:50:06Z jonlb at comcast.net $
 /**
  * Class: Jx.Grid
- * 
+ *
  * Extends: <Jx.Widget>
  *
  * A tabular control that has fixed, optional, scrolling headers on the rows and
@@ -25989,26 +27342,27 @@
  * When creating a new Jx.Grid, you can specify a number of options for the grid
  * that control its appearance and functionality. You can also specify plugins
  * to load for additional functionality. Currently Jx provides the following
- * plugins 
- * 
- * Prelighter - prelights rows, columns, and cells 
+ * plugins
+ *
+ * Prelighter - prelights rows, columns, and cells
  * Selector - selects rows, columns, and cells
  * Sorter - sorts rows by specific column
  *
- * Jx.Grid renders data that comes from an external source.  This external 
- * source, called the model, must be a Jx.Store or extended from it (such as 
+ * Jx.Grid renders data that comes from an external source.  This external
+ * source, called the model, must be a Jx.Store or extended from it (such as
  * Jx.Store.Remote).
- * 
- * Events: 
+ *
+ * Events:
  * gridCellEnter(cell, list) - called when the mouse enters a cell
  * gridCellLeave(cell, list) - called when the mouse leaves a cell
  * gridCellSelect(cell) - called when a cell is clicked
+ * gridMouseLeave() - called when the mouse leaves the grid at any point.
  *
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
  * This version Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Grid = new Class({
@@ -26027,7 +27381,7 @@
         /**
          * Options: columns
          * an object consisting of a columns array that defines the individuals
-         * columns as well as containing any options for Jx.Grid.Columns or 
+         * columns as well as containing any options for Jx.Grid.Columns or
          * a Jx.Grid.Columns object itself.
          */
         columns : {
@@ -26043,7 +27397,7 @@
 
         /**
          * Option: plugins
-         * an array containing Jx.Grid.Plugin subclasses or an object 
+         * an array containing Jx.Grid.Plugin subclasses or an object
          * that indicates the name of a predefined plugin and its options.
          */
         plugins : [],
@@ -26053,7 +27407,7 @@
          * An instance of Jx.Store or one of its descendants
          */
         model : null,
-        
+
         deferRender: true
 
     },
@@ -26104,9 +27458,9 @@
         if ($defined(this.options.model)
                 && this.options.model instanceof Jx.Store) {
             this.model = this.options.model;
-            this.model.addEvent('columnChanged', this.modelChanged
+            this.model.addEvent('storeColumnChanged', this.modelChanged
                     .bind(this));
-            this.model.addEvent('sortFinished', this.render.bind(this));
+            this.model.addEvent('storeSortFinished', this.render.bind(this));
         }
 
         if ($defined(this.options.columns)) {
@@ -26131,14 +27485,19 @@
         } else {
             this.row = new Jx.Row({grid: this});
         }
-        
-        
 
+
+
         //initialize the grid
         this.domObj = new Element('div', {'class':this.uniqueId});
         var l = new Jx.Layout(this.domObj, {
             onSizeChange : this.resize.bind(this)
         });
+        
+        //we need to know if the mouse leaves the grid so we can turn off prelighters and the such
+        this.domObj.addEvent('mouseleave',function(){
+            this.fireEvent('gridMouseLeave');
+        }.bind(this));
 
         if (this.options.parent) {
             this.addTo(this.options.parent);
@@ -26184,7 +27543,7 @@
         this.gridTableBody = new Element('tbody');
         this.gridTable.appendChild(this.gridTableBody);
         this.gridObj.appendChild(this.gridTable);
-        
+
         var target = this;
 
         this.domObj.appendChild(this.rowColObj);
@@ -26193,7 +27552,7 @@
         this.domObj.appendChild(this.gridObj);
 
         this.gridObj.addEvent('scroll', this.onScroll.bind(this));
-        
+
         //bind events
         this.bound = {
             select: this.onSelect.bind(this),
@@ -26201,7 +27560,7 @@
             mouseenter: this.onMouseEnter.bind(this),
             mouseleave: this.onMouseLeave.bind(this)
         };
-        
+
         //setup the selection
         this.selection = new Jx.Selection();
         this.selection.addEvents({
@@ -26209,7 +27568,7 @@
             unselect: this.bound.unselect
         });
         this.parent();
-        
+
         this.domObj.store('grid', this);
     },
 
@@ -26222,7 +27581,7 @@
         this.rowObj.scrollTop = this.gridObj.scrollTop;
     },
 
-    
+
     /**
      * APIMethod: resize
      * resize the grid to fit inside its container.  This involves knowing something
@@ -26282,9 +27641,9 @@
     /**
      * APIMethod: setModel
      * set the model for the grid to display.  If a model is attached to the grid
-     * it is removed and the new model is displayed. However, It needs to have 
+     * it is removed and the new model is displayed. However, It needs to have
      * the same columns
-     * 
+     *
      * Parameters:
      * model - {Object} the model to use for this grid
      */
@@ -26335,12 +27694,12 @@
 
         this.fireEvent('beginCreateGrid', this);
 
-        if (this.model) {
+        if (this.model && this.model.loaded) {
             var model = this.model;
             var nColumns = this.columns.getColumnCount();
             var nRows = model.count();
             var th;
-            
+
             /* create header if necessary */
             if (this.columns.useHeaders()) {
                 this.colTableBody.setStyle('visibility', 'visible');
@@ -26351,7 +27710,7 @@
                     }
                 });
                 this.colTableBody.appendChild(trBody);
-                
+
                 var headerList = this.makeList(trBody);
 
                 this.columns.getHeaders(headerList);
@@ -26372,14 +27731,14 @@
                 //hide the headers
                 this.colTableBody.setStyle('visibility', 'hidden');
             }
-            
+
             if (this.row.useHeaders()) {
                 this.rowTableHead.setStyle('visibility', 'visible');
-                
+
                 var rowHeight = this.row.getHeight();
-                
-                
-                
+
+
+
                 //loop through all rows and add header
                 this.model.first();
                 while (this.model.valid()) {
@@ -26410,39 +27769,42 @@
                 //hide row headers
                 this.rowTableHead.setStyle('visibility', 'hidden');
             }
-            
+
             colHeight = this.columns.getHeaderHeight();
-            
-            
+
+
             //This section actually adds the rows
             this.model.first();
             while (this.model.valid()) {
                 tr = this.row.getGridRowElement();
                 tr.store('jxRowData', {row: this.model.getPosition()});
-                
-                
+
+
                 var rl = this.makeList(tr);
                 this.gridTableBody.appendChild(tr);
                 //this.rowList.add(rl.container);
-                
-                //Actually add the columns 
+
+                //Actually add the columns
                 this.columns.getColumnCells(rl);
-        
+
                 if (this.model.hasNext()) {
                     this.model.next();
                 } else {
                     break;
                 }
-        
+
             }
-            
+
             Jx.Styles.enableStyleSheet(this.styleSheet);
             this.columns.createRules(this.styleSheet, "."+this.uniqueId);
+            this.domObj.resize();
+            this.fireEvent('doneCreateGrid', this);
+        } else {
+            this.model.load();
         }
-        this.domObj.resize();
-        this.fireEvent('doneCreateGrid', this);
+        
     },
-    
+
     /**
      * Method: modelChanged
      * Event listener that is fired when the model changes in some way
@@ -26461,12 +27823,12 @@
         list.replace(td, newTD);
         //newTD.replaces(td);
 
-        this.model.moveTo(currentRow);    
+        this.model.moveTo(currentRow);
     },
     /**
      * Method: makeList
      * utility method used to make row lists
-     * 
+     *
      * Parameters:
      * container - the row to use as the Jx.List container
      */
@@ -26483,19 +27845,19 @@
         this.lists.push(l);
         return l;
     },
-    
+
     onSelect: function (cell, select) {
         this.fireEvent('gridCellSelect', [cell,select,this]);
     },
-    
+
     onUnselect: function (cell, select) {
         this.fireEvent('gridCellUnselect', [cell,select,this]);
     },
-    
+
     onMouseEnter: function (cell, list) {
         this.fireEvent('gridCellEnter', [cell,list,this]);
     },
-    
+
     onMouseLeave: function (cell, list) {
         this.fireEvent('gridCellLeave', [cell,list,this]);
     }
@@ -26504,17 +27866,17 @@
 // $Id: $
 /**
  * Class: Jx.Plugin.Selector
- * 
+ *
  * Extends: <Jx.Plugin>
- * 
+ *
  * Grid plugin to select rows, columns, and/or cells.
- * 
+ *
  * Original selection code from Jx.Grid's original class
- * 
- * License: 
+ *
+ * License:
  * Original Copyright (c) 2008, DM Solutions Group Inc.
  * This version Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Plugin.Grid.Selector = new Class({
@@ -26554,9 +27916,9 @@
     },
     /**
      * APIMethod: attach
-     * Sets up the plugin and attaches the plugin to the grid events it 
+     * Sets up the plugin and attaches the plugin to the grid events it
      * will be monitoring
-     * 
+     *
      * Parameters:
      * grid - The instance of Jx.Grid to attach to
      */
@@ -26584,25 +27946,70 @@
         this.grid = null;
     },
     /**
+     * APIMethod: activate
+     * Allows programatic access to turning selections on.
+     * 
+     * Parameters:
+     * opt - the option to turn on. One of 'cell', 'column', or 'row'
+     */
+    activate: function (opt) {
+        this.options[opt] = true;
+        if (opt === 'cell') {
+            this.oldSelectionClass = this.grid.selection.options.selectedClass;
+            this.grid.selection.options.selectClass = "jxGridCellSelected";
+        }
+    },
+    /**
+     * APIMethod: deactivate
+     * Allows programatic access to turning selections off.
+     * 
+     * Parameters:
+     * opt - the option to turn off. One of 'cell', 'column', or 'row'
+     */
+    deactivate: function (opt) {
+        this.options[opt] = false;
+        if (opt === 'cell') {
+            this.grid.selection.selected().each(function(cell){
+                this.grid.selection.unselect(cell);
+            },this);
+            this.grid.selection.options.selectClass = this.oldSelectionClass;
+            
+        } else if (opt === 'row') {
+            this.selectedRow.removeClass('jxGridRowSelected');
+            this.selectedRow = null;
+            this.selectedRowHead.removeClass('jxGridRowHeaderSelected');
+            this.selectedRowHead = null;
+        } else {
+            if ($defined(this.selectedCol)) {
+                for (var i = 0; i < this.grid.gridTable.rows.length; i++) {
+                    this.grid.gridTable.rows[i].cells[this.selectedCol].removeClass('jxGridColumnSelected');
+                }
+            }
+            this.selectedColHead.removeClass('jxGridColumnHeaderSelected');
+            this.selectedColHead = null;
+            this.selectedCol = null;
+        }
+    },
+    /**
      * Method: select
      * dispatches the grid click to the various selection methods
      */
     select : function (cell) {
-        
+
         console.log('select method');
         var data = cell.retrieve('jxCellData');
         console.log(data);
-        
+
         if (this.options.row) {
             this.selectRow(data.row);
         }
-        
+
         if (this.options.column) {
             this.selectColumn(data.index - 1);
         }
-        
+
     },
-    /** 
+    /**
      * Method: selectRow
      * Select a row and apply the jxGridRowSelected style to it.
      *
@@ -26611,13 +28018,13 @@
      */
     selectRow: function (row) {
         if (!this.options.row) { return; }
-        
+
         var tr = (row >= 0 && row < this.grid.gridTableBody.rows.length) ? this.grid.gridTableBody.rows[row] : null;
-        
+
         if (tr.hasClass('jxGridRowSelected')) {
             this.selectedRow.removeClass('jxGridRowSelected');
             this.selectedRow = null;
-        } else { 
+        } else {
             if (this.selectedRow) {
                 this.selectedRow.removeClass('jxGridRowSelected');
             }
@@ -26625,9 +28032,9 @@
             this.selectedRow.addClass('jxGridRowSelected');
         }
         this.selectRowHeader(row);
-        
+
     },
-    /** 
+    /**
      * Method: selectRowHeader
      * Apply the jxGridRowHea}derSelected style to the row header cell of a
      * selected row.
@@ -26640,7 +28047,7 @@
             return;
         }
         var cell = (row >= 0 && row < this.grid.rowTableHead.rows.length) ? this.grid.rowTableHead.rows[row].cells[0] : null;
-        
+
         if (!cell) {
             return;
         }
@@ -26654,7 +28061,7 @@
             this.selectedRowHead = null;
         }
     },
-    /** 
+    /**
      * Method: selectColumn
      * Select a column.
      * This deselects a previously selected column.
@@ -26680,7 +28087,7 @@
             this.selectColumnHeader(col);
         }
     },
-    /** 
+    /**
      * method: selectColumnHeader
      * Apply the jxGridColumnHeaderSelected style to the column header cell of a
      * selected column.
@@ -26694,7 +28101,7 @@
             return;
         }
 
-        
+
         var cell = (col >= 0 && col < this.grid.colTableBody.rows[0].cells.length) ? this.grid.colTableBody.rows[0].cells[col]
                                                                                                                           : null;
         if (cell === null) {
@@ -26704,29 +28111,29 @@
         if (this.selectedColHead) {
             this.selectedColHead.removeClass('jxGridColumnHeaderSelected');
         }
-        if (this.selectedColHead !== cell) {   
+        if (this.selectedColHead !== cell) {
             this.selectedColHead = $(cell);
             cell.addClass('jxGridColumnHeaderSelected');
         } else {
             this.selectedColHead = null;
         }
-    
+
     }
 });
 // $Id: $
 /**
  * Class: Jx.Plugin.Prelighter
- * 
+ *
  * Extends: <Jx.Plugin>
- * 
+ *
  * Grid plugin to prelight rows, columns, and cells
- * 
+ *
  * Inspired by the original code in Jx.Grid
- * 
- * License: 
+ *
+ * License:
  * Original Copyright (c) 2008, DM Solutions Group Inc.
  * This version Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Plugin.Grid.Prelighter = new Class({
@@ -26779,6 +28186,7 @@
         this.parent();
         this.bound.lighton = this.lighton.bind(this);
         this.bound.lightoff = this.lightoff.bind(this);
+        this.bound.mouseleave = this.mouseleave.bind(this);
     },
     /**
      * APIMethod: attach
@@ -26791,6 +28199,7 @@
         this.grid = grid;
         this.grid.addEvent('gridCellEnter', this.bound.lighton);
         this.grid.addEvent('gridCellLeave', this.bound.lightoff);
+        this.grid.addEvent('gridMouseLeave', this.bound.mouseleave);
     },
     /**
      * APIMethod: detach
@@ -26799,22 +28208,43 @@
         if (this.grid) {
             this.grid.removeEvent('gridCellEnter', this.bound.lighton);
             this.grid.removeEvent('gridCellLeave', this.bound.lightoff);
+            this.grid.removeEvent('gridMouseLeave', this.bound.mouseleave);
         }
         this.grid = null;
     },
     /**
+     * APIMethod: activate
+     * Allows programatic access to turning prelighting on.
+     * 
+     * Parameters:
+     * opt - the option to turn on. One of 'cell', 'row', 'rowHeader', 'column', or 'columnHeader'
+     */
+    activate: function (opt) {
+        this.options[opt] = true;
+    },
+    /**
+     * APIMethod: deactivate
+     * Allows programatic access to turning prelighting off.
+     * 
+     * Parameters:
+     * opt - the option to turn off. One of 'cell', 'row', 'rowHeader', 'column', or 'columnHeader'
+     */
+    deactivate: function (opt) {
+        this.options[opt] = false;
+    },
+    /**
      * Method: lighton
      */
     lighton : function (cell, list, grid) {
         this.light(cell, list, grid, true);
-       
+
     },
     /**
      * Method: lightoff
      */
     lightoff : function (cell, list, grid) {
         this.light(cell, list, grid, false);
-       
+
     },
     /**
      * Method: light
@@ -26822,7 +28252,7 @@
      */
     light: function (cell, list, grid, on) {
         var data = cell.retrieve('jxCellData');
-        
+
         if (this.options.cell) {
             this.prelightCell(cell, on);
         }
@@ -26839,12 +28269,12 @@
             this.prelightColumnHeader(data.index - 1, on);
         }
     },
-    
-    /** 
+
+    /**
      * Method: prelightRowHeader
      * apply the jxGridRowHeaderPrelight style to the header cell of a row.
      * This removes the style from the previously pre-lit row header.
-     * 
+     *
      * Parameters:
      * row - {Integer} the row to pre-light the header cell of
      */
@@ -26858,11 +28288,11 @@
             }
         }
     },
-    /** 
+    /**
      * Method: prelightColumnHeader
      * apply the jxGridColumnHeaderPrelight style to the header cell of a column.
      * This removes the style from the previously pre-lit column header.
-     * 
+     *
      * Parameters:
      * col - {Integer} the column to pre-light the header cell of
      * on - flag to tell if we're lighting on or off
@@ -26880,13 +28310,13 @@
                 this.prelitColumnHeader.addClass('jxGridColumnHeaderPrelight');
             }
         }
-       
+
     },
-    /** 
+    /**
      * Method: prelightRow
      * apply the jxGridRowPrelight style to row.
      * This removes the style from the previously pre-lit row.
-     * 
+     *
      * Parameters:
      * row - {Integer} the row to pre-light
      * on - flag to tell if we're lighting on or off
@@ -26902,11 +28332,11 @@
         }
         this.prelightRowHeader(row, on);
     },
-    /** 
+    /**
      * Method: prelightColumn
      * apply the jxGridColumnPrelight style to a column.
      * This removes the style from the previously pre-lit column.
-     * 
+     *
      * Parameters:
      * col - {Integer} the column to pre-light
      * on - flag to tell if we're lighting on or off
@@ -26926,7 +28356,7 @@
             this.prelightColumnHeader(col, on);
         }
     },
-    /** 
+    /**
      * Method: prelightCell
      * apply the jxGridCellPrelight style to a cell.
      * This removes the style from the previously pre-lit cell.
@@ -26944,21 +28374,42 @@
                 this.prelitCell.addClass('jxGridCellPrelight');
             }
         }
+    },
+    
+    mouseleave: function() {
+        //turn off all prelights when the mouse leaves the grid
+        if ($defined(this.prelitCell)) {
+            this.prelitCell.removeClass('jxGridCellPrelight');
+        }
+        if ($defined(this.prelitColumn)) {
+            for (var i = 0; i < this.grid.gridTable.rows.length; i++) {
+                this.grid.gridTable.rows[i].cells[this.prelitColumn].removeClass('jxGridColumnPrelight');
+            }
+        }
+        if ($defined(this.prelitRow)) {
+            this.prelitRow.removeClass('jxGridRowPrelight');
+        }
+        if ($defined(this.prelitColumnHeader)) {
+            this.prelitColumnHeader.removeClass('jxGridColumnHeaderPrelight');
+        }
+        if ($defined(this.prelitRowHeader)) {
+            this.prelitRowHeader.removeClass('jxGridRowHeaderPrelight');
+        }
     }
 });
 // $Id: $
 /**
  * Class: Jx.Plugin.Sorter
- * 
+ *
  * Extends: <Jx.Plugin>
- * 
+ *
  * Grid plugin to sort the grid by a single column.
- * 
+ *
  * Original selection code from Jx.Grid's original class
- * 
- * License: 
+ *
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Plugin.Grid.Sorter = new Class({
@@ -26998,7 +28449,7 @@
     },
     /**
      * APIMethod: attach
-     * Sets up the plugin and attaches the plugin to the grid events it 
+     * Sets up the plugin and attaches the plugin to the grid events it
      * will be monitoring
      */
     attach: function (grid) {
@@ -27023,7 +28474,7 @@
     /**
      * Method: sort
      * called when a grid header is clicked.
-     * 
+     *
      * Parameters:
      * cell - The cell clicked
      */
@@ -27045,20 +28496,20 @@
                 //we will listen for the grid's doneCreateGrid event to add the header
                 this.grid.addEvent('doneCreateGrid', this.bound.addHeaderClass);
                 //sort the store
-                var model = this.grid.getModel();
-                model.sort(this.current.name, null, this.direction);
+                var strategy = this.grid.getModel().getStrategy('sort');
+                strategy.sort(this.current.name, null, this.direction);
             }
-    
+
         }
     },
     /**
      * Method: addHeaderClass
      * Event listener that adds the proper sorted column class to the
-     * column we sorted by so that the sort arrow shows 
+     * column we sorted by so that the sort arrow shows
      */
     addHeaderClass : function () {
         this.grid.removeEvent('doneCreateGrid', this.bound.addHeaderClass);
-        
+
         //get header TD
         var th = this.grid.colTable.rows[0].cells[this.currentGridIndex];
         th.addClass('jxGridColumnSorted' + this.direction.capitalize());
@@ -27067,21 +28518,21 @@
 // $Id: $
 /**
  * Class: Jx.Plugin.Resize
- * 
+ *
  * Extends: <Jx.Plugin>
- * 
+ *
  * Grid plugin to enable dynamic resizing of column width and row height
  *
- * 
- * License: 
+ *
+ * License:
  * Copyright (c) 2009, DM Solutions Group.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Plugin.Grid.Resize = new Class({
 
     Extends : Jx.Plugin,
-    
+
     options: {
         /**
          * Option: columns
@@ -27105,13 +28556,13 @@
      * the DOM elements by which the rows/columns are resized.
      */
     els: [],
-    
+
     /**
      * Property: drags
      * the Drag instances
      */
     drags: [],
-    
+
     /**
      * Property: bound
      * storage for bound methods useful for working with events
@@ -27150,14 +28601,14 @@
         }
         this.grid = null;
     },
-    
+
     removeResizeHandles: function() {
         this.els.each(function(el) { el.dispose(); } );
         this.els = [];
         this.drags.each(function(drag){ drag.detach(); });
         this.drags = [];
     },
-    
+
     createResizeHandles: function() {
         if (this.options.columns && this.grid.columns.useHeaders()) {
             this.grid.columns.columns.each(function(col, idx) {
@@ -27183,9 +28634,9 @@
                 }
             }, this);
         }
-        
+
         // if (this.options.rows && this.grid.row.useHeaders()) {
-        //     
+        //
         // }
     }
 });
@@ -27197,14 +28648,14 @@
 /**
  * Class: Jx.Slide
  * Hides and shows an element without depending on a fixed width or height
- * 
+ *
  * Copyright 2009 by Jonathan Bomgardner
  * License: MIT-style
  */
 Jx.Slide = new Class({
-    
+    Family: 'Jx.Slide',
     Implements: Jx.Object,
-    
+
     options: {
         /**
          * Option: target
@@ -27230,7 +28681,7 @@
          * Option: onSlideOut
          * function called when the target is revealed.
          */
-        onSlideOut: $empty, 
+        onSlideOut: $empty,
         /**
          * Option: onSlideIn
          * function called when a panel is hidden.
@@ -27242,16 +28693,16 @@
      * sets up the slide
      */
     init: function () {
-        
+
         this.target = $(this.options.target);
-        
+
         this.target.set('tween', {onComplete: this.setDisplay.bind(this)});
-        
+
         if ($defined(this.options.trigger)) {
             this.trigger = $(this.options.trigger);
             this.trigger.addEvent('click', this.handleClick.bindWithEvent(this));
         }
-        
+
         this.target.store('slider', this);
 
     },
@@ -27283,12 +28734,12 @@
                 this.target.setStyle(this.options.type, this.options.setOpenTo);
             }
             this.fireEvent('slideIn', this.target);
-        }   
+        }
     },
     /**
      * APIMethod: slide
      * Actually determines how to slide and initiates the animation.
-     * 
+     *
      * Parameters:
      * dir - the direction to slide (either "in" or "out")
      */
@@ -27301,7 +28752,7 @@
                 'display': 'block'
             });
             this.target.setStyle(this.options.type, 0);
-            this.target.tween(this.options.type, h);    
+            this.target.tween(this.options.type, h);
         } else {
             if (this.options.type === 'height') {
                 h = this.target.getMarginBoxSize().height;
@@ -27312,26 +28763,26 @@
             this.target.setStyle('overflow', 'hidden');
             this.target.setStyle(this.options.type, h);
             this.target.tween(this.options.type, 0);
-        }       
+        }
     }
 });
 /**
  * Class: Jx.Plugin.DataView.GroupFolder
- * 
+ *
  * Extends: <Jx.Plugin>
- * 
- * Plugin for DataView - allows folding/unfolding of the groups in the 
+ *
+ * Plugin for DataView - allows folding/unfolding of the groups in the
  * grouped dataview
- * 
- * License: 
+ *
+ * License:
  * Copyright (c) 2009, Jonathan Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Plugin.DataView.GroupFolder = new Class({
-    
+
     Extends: Jx.Plugin,
-    
+
     options: {
         /**
          * Option: headerClass
@@ -27353,20 +28804,20 @@
         if (!$defined(dataView) && !(dataview instanceof Jx.Panel.DataView)) {
             return;
         }
-        
+
         this.dv = dataView;
         this.dv.addEvent('renderDone', this.setHeaders.bind(this));
     },
     /**
      * Method: setHeaders
      * Called after the dataview is rendered. Sets up the Jx.Slide instance
-     * for each header. It also sets the initial state of each header so that 
-     * if the dataview is redrawn for some reason the open/closed state is 
+     * for each header. It also sets the initial state of each header so that
+     * if the dataview is redrawn for some reason the open/closed state is
      * preserved.
      */
     setHeaders: function () {
         var headers = this.dv.domA.getElements('.' + this.dv.options.groupHeaderClass);
-        
+
         headers.each(function (header) {
             var id = header.get('id');
             var s = new Jx.Slide({
@@ -27375,7 +28826,7 @@
                 onSlideOut: this.onSlideOut.bind(this, header),
                 onSlideIn: this.onSlideIn.bind(this, header)
             });
-            
+
             if (this.headerState.has(id)) {
                 var state = this.headerState.get(id);
                 if (state === 'open') {
@@ -27388,11 +28839,11 @@
             }
         }, this);
     },
-    
+
     /**
      * Method: onSlideIn
      * Called when a group opens.
-     * 
+     *
      * Parameters:
      * header - the header that was clicked.
      */
@@ -27406,7 +28857,7 @@
     /**
      * Method: onSlideOut
      * Called when a group closes.
-     * 
+     *
      * Parameters:
      * header - the header that was clicked.
      */
@@ -27422,41 +28873,41 @@
 /**
  * Class: Jx.Plugin.Field
  * Field plugin namespace
- * 
- * 
- * License: 
+ *
+ *
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Plugin.Field = {};// $Id: $
 /**
  * Class: Jx.Plugin.Field.Validator
- * 
+ *
  * Extends: <Jx.Plugin>
- * 
+ *
  * Field plugin for enforcing validation when a field is not used in a form.
  *
- * 
- * License: 
+ *
+ * License:
  * Copyright (c) 2009, Jonathan Bomgardner.
  * Parts inspired by mootools-more's Form.Validator class
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Plugin.Field.Validator = new Class({
 
     Extends : Jx.Plugin,
     name: 'Field.Validator',
-    
+
     options: {
         /**
          * Option: validators
          * An array that contains either a string that names the predefined
          * validator to use with its needed options or an object that defines
-         * the options of an InputValidator (also with needed options) defined 
+         * the options of an InputValidator (also with needed options) defined
          * like so:
-         * 
+         *
          * (code)
          * {
          *     validatorClass: 'name:with options',    //gets applied to the field
@@ -27473,14 +28924,14 @@
         validators: [],
         /**
          * Option: validateOnBlur
-         * Determines whether the plugin will validate the field on blur. 
-         * Defaults to true. 
+         * Determines whether the plugin will validate the field on blur.
+         * Defaults to true.
          */
         validateOnBlur: true,
         /**
          * Option: validateOnChange
-         * Determines whether the plugin will validate the field on change. 
-         * Defaults to true. 
+         * Determines whether the plugin will validate the field on change.
+         * Defaults to true.
          */
         validateOnChange: true
     },
@@ -27520,7 +28971,7 @@
         this.field = field;
         if (this.field.options.required && !this.options.validators.contains('required')) {
             //would have used unshift() but reading tells me it may not work in IE.
-            this.options.validators.reverse().push('required');     
+            this.options.validators.reverse().push('required');
             this.options.validators.reverse();
         }
         //add validation classes
@@ -27553,12 +29004,12 @@
         this.field = null;
         this.validators = null;
     },
-    
+
     validate: function () {
         $clear(this.timer);
         this.timer = this.validateField.delay(50, this);
     },
-    
+
     validateField: function () {
         //loop through the validators
         this.valid = true;
@@ -27570,26 +29021,26 @@
                     this.valid = false;
                     this.errors.push(val.getError(this.field.field));
                 }
-            }          
+            }
         }, this);
         if (!this.valid) {
-            this.field.domObj.removeClass('jxFieldValidated').addClass('jxFieldInvalid');
+            this.field.domObj.removeClass('jxFieldSuccess').addClass('jxFieldError');
             this.fireEvent('fieldValidationFailed', [this.field, this]);
         } else {
-            this.field.domObj.removeClass('jxFieldInvalid').addClass('jxFieldValidated');
-            this.fireEvent('fieldValidationPassed', [this.field, this]);  
+            this.field.domObj.removeClass('jxFieldError').addClass('jxFieldSuccess');
+            this.fireEvent('fieldValidationPassed', [this.field, this]);
         }
         return this.valid;
     },
-    
+
     isValid: function () {
         return this.validateField();
     },
-    
+
     reset: function () {
         this.valid = null;
         this.errors = [];
-        this.field.field.removeClass('jxFieldInvalid').removeClass('jxFieldValidated');
+        this.field.field.removeClass('jxFieldError').removeClass('jxFieldSuccess');
     },
     /**
      * APIMethod: getErrors
@@ -27598,39 +29049,39 @@
     getErrors: function () {
         return this.errors;
     }
-    
-   
+
+
 });
 // $Id: $
 /**
  * Class: Jx.Plugin.Form
  * Form plugin namespace
- * 
- * 
- * License: 
+ *
+ *
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Plugin.Form = {};// $Id: $
 /**
  * Class: Jx.Plugin.Form.Validator
- * 
+ *
  * Extends: <Jx.Plugin>
- * 
+ *
  * Form plugin for enforcing validation on the fields in a form.
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jonathan Bomgardner.
  * Parts inspired by mootools-more's Form.Validator class
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Plugin.Form.Validator = new Class({
 
     Extends : Jx.Plugin,
     name: 'Form.Validator',
-    
+
     options: {
         /**
          * Option: fields
@@ -27644,14 +29095,14 @@
          * }
          */
         fields: null,
-        
+
         fieldDefaults: {
             validateOnBlur: true,
             validateOnChange: true
         },
-        
+
         validateOnSubmit: true,
-        
+
         suspendSubmit: false
     },
     /**
@@ -27689,7 +29140,7 @@
         this.form.isValid = function () {
             return plugin.isValid();
         };
-        
+
         if (this.options.validateOnSubmit && !this.options.suspendSubmit) {
             document.id(this.form).addEvent('submit', this.bound.validate);
         } else if (this.options.suspendSubmit) {
@@ -27697,9 +29148,9 @@
                 ev.stop();
             });
         }
-        
+
         this.plugins = $H();
-        
+
         //setup the fields
         $H(this.options.fields).each(function (val, key) {
             var opts = $merge(this.options.fieldDefaults, val);
@@ -27709,9 +29160,9 @@
             plugin.attach(field);
             plugin.addEvent('fieldValidationFailed', this.bound.failed);
             plugin.addEvent('fieldValidationPassed', this.bound.passed);
-            
+
         }, this);
-       
+
     },
     /**
      * APIMethod: detach
@@ -27756,14 +29207,14 @@
     },
     /**
      * Method: fieldFailed
-     * Refires the fieldValidationFailed event from the field validators it contains 
+     * Refires the fieldValidationFailed event from the field validators it contains
      */
     fieldFailed: function (field, validator) {
         this.fireEvent('fieldValidationFailed', [field, validator]);
     },
     /**
      * Method: fielPassed
-     * Refires the fieldValidationPassed event from the field validators it contains 
+     * Refires the fieldValidationPassed event from the field validators it contains
      */
     fieldPassed: function (field, validator) {
         this.fireEvent('fieldValidationPassed', [field, validator]);
@@ -27774,20 +29225,20 @@
      */
     getErrors: function () {
         if (!$defined(this.errors)) {
-           this.validate(); 
+           this.validate();
         }
         return this.errors;
     }
-    
-   
+
+
 });
-// $Id: context.js 582 2009-10-30 22:03:58Z pagameba $
+// $Id: context.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.Menu.Context
  *
  * Extends: Jx.Menu
  *
- * A <Jx.Menu> that has no button but can be opened at a specific 
+ * A <Jx.Menu> that has no button but can be opened at a specific
  * browser location to implement context menus (for instance).
  *
  * Example:
@@ -27797,20 +29248,17 @@
  * Events:
  * TODO - add open/close events?
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Menu.Context = new Class({
     Family: 'Jx.Menu.Context',
-    /** Extends:
-     * <Jx.Menu>
-     */
     Extends: Jx.Menu,
-    
+
     parameters: ['id'],
-    
+
     /**
      * APIMethod: render
      * create a new context menu
@@ -27833,16 +29281,16 @@
         if (this.list.count() ==0) {
             return;
         }
-        
+
         this.contentContainer.setStyle('visibility','hidden');
         this.contentContainer.setStyle('display','block');
-        document.id(document.body).adopt(this.contentContainer);            
+        document.id(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
          * bug in IE related to ULs that we just couldn't figure out
          */
         this.contentContainer.setContentBoxSize(this.subDomObj.getMarginBoxSize());
-        
+
         this.position(this.contentContainer, document.body, {
             horizontal: [e.page.x + ' left'],
             vertical: [e.page.y + ' top', e.page.y + ' bottom'],
@@ -27851,13 +29299,13 @@
 
         this.contentContainer.setStyle('visibility','');
         this.showChrome(this.contentContainer);
-                
+
         document.addEvent('mousedown', this.hideWatcher);
         document.addEvent('keyup', this.keypressWatcher);
 
         e.stop();
-    }    
-});// $Id: menu.separator.js 602 2009-11-10 19:41:36Z pagameba $
+    }
+});// $Id: menu.separator.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.Menu.Separator
  *
@@ -27869,9 +29317,9 @@
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Menu.Separator = new Class({
@@ -27922,7 +29370,7 @@
      * Show the menu item
      */
     show: $empty
-});// $Id: submenu.js 602 2009-11-10 19:41:36Z pagameba $
+});// $Id: submenu.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.Menu.SubMenu
  *
@@ -27940,9 +29388,9 @@
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Menu.SubMenu = new Class({
@@ -27976,15 +29424,15 @@
             vertical: ['top top']
         }
     },
-    
+
     /**
      * APIMethod: render
      * Create a new instance of Jx.SubMenu
      */
-    render: function() { 
+    render: function() {
         this.parent();
         this.open = false;
-        
+
         this.menu = new Jx.Menu(null, {
             position: this.options.position
         });
@@ -28012,17 +29460,17 @@
         this.open = true;
         this.setActive(true);
     },
-    
+
     eventInMenu: function(e) {
-        if (this.visibleItem && 
-            this.visibleItem.eventInMenu && 
+        if (this.visibleItem &&
+            this.visibleItem.eventInMenu &&
             this.visibleItem.eventInMenu(e)) {
             return true;
         }
         return document.id(e.target).descendantOf(this.domObj) ||
                this.menu.eventInMenu(e);
     },
-    
+
     /**
      * Method: hide
      * Hide the sub menu
@@ -28080,7 +29528,7 @@
      */
     deactivate: function(e) {
         if (this.owner) {
-            this.owner.deactivate(e);            
+            this.owner.deactivate(e);
         }
     },
     /**
@@ -28091,7 +29539,7 @@
      * {Boolean} true if the <Jx.Menu> that ultimately contains
      * this sub menu is active, false otherwise.
      */
-    isActive: function() { 
+    isActive: function() {
         if (this.owner) {
             return this.owner.isActive();
         } else {
@@ -28105,7 +29553,7 @@
      * Parameters:
      * isActive - {Boolean} the new active state
      */
-    setActive: function(isActive) { 
+    setActive: function(isActive) {
         if (this.owner && this.owner.setActive) {
             this.owner.setActive(isActive);
         }
@@ -28115,7 +29563,7 @@
      * Set a sub menu of this menu to be visible and hide the previously
      * visible one.
      *
-     * Parameters: 
+     * Parameters:
      * obj - {<Jx.SubMenu>} the sub menu that should be visible
      */
     setVisibleItem: function(obj) {
@@ -28127,7 +29575,7 @@
             this.visibleItem.show();
         }
     }
-});// $Id: snap.js 524 2009-09-18 05:40:16Z jonlb at comcast.net $
+});// $Id: snap.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.Splitter.Snap
  *
@@ -28140,9 +29588,9 @@
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Splitter.Snap = new Class({
@@ -28178,7 +29626,7 @@
      * splitter - {<Jx.Splitter>} the splitter that this all happens inside of.
      */
     parameters: ['snap','element','splitter','events'],
-    
+
     /**
      * APIMethod: init
      * Create a new Jx.Splitter.Snap
@@ -28190,7 +29638,7 @@
         this.events = this.options.events;
         var jxl = this.element.retrieve('jxLayout');
         jxl.addEvent('sizeChange', this.sizeChange.bind(this));
-        this.layout = this.splitter.options.layout; 
+        this.layout = this.splitter.options.layout;
         var jxo = jxl.options;
         var size = this.element.getContentBoxSize();
         if (this.layout == 'vertical') {
@@ -28204,7 +29652,7 @@
             this.snap.addEvent(eventName, this.toggleElement.bind(this));
         }, this);
     },
-    
+
     /**
      * Method: toggleElement
      * Snap the element open or closed.
@@ -28230,7 +29678,7 @@
         this.element.resize(newSize);
         this.splitter.sizeChanged();
     },
-    
+
     /**
      * Method: sizeChanged
      * Handle the size of the element changing to see if the
@@ -28256,7 +29704,7 @@
             }
         }
     }
-});// $Id: tabset.js 524 2009-09-18 05:40:16Z jonlb at comcast.net $
+});// $Id: tabset.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.TabSet
  *
@@ -28273,12 +29721,12 @@
  * (code)
  * var tabBar = new Jx.Toolbar('tabBar');
  * var tabSet = new Jx.TabSet('tabArea');
- * 
+ *
  * var tab1 = new Jx.Button.Tab('tab 1', {contentID: 'content1'});
  * var tab2 = new Jx.Button.Tab('tab 2', {contentID: 'content2'});
  * var tab3 = new Jx.Button.Tab('tab 3', {contentID: 'content3'});
  * var tab4 = new Jx.Button.Tab('tab 4', {contentURL: 'test_content.html'});
- * 
+ *
  * tabSet.add(t1, t2, t3, t4);
  * tabBar.add(t1, t2, t3, t4);
  * (end)
@@ -28286,9 +29734,9 @@
  * Events:
  * tabChange - the current tab has changed
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.TabSet = new Class({
@@ -28313,7 +29761,7 @@
      * as options at this time.
      */
     parameters: ['domObj','options'],
-    
+
     /**
      * APIMethod: init
      * Create a new instance of <Jx.TabSet> within a specific element of
@@ -28337,7 +29785,7 @@
             this.activeTab.content.resize({forceResize: true});
         }
     },
-    
+
     /**
      * Method: add
      * Add one or more <Jx.Button.Tab>s to the TabSet.
@@ -28402,10 +29850,10 @@
 
 
 
-// $Id: tabbox.js 602 2009-11-10 19:41:36Z pagameba $
+// $Id: tabbox.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.TabBox
- * 
+ *
  * Extends: <Jx.Widget>
  *
  * A convenience class to handle the common case of a single toolbar
@@ -28417,16 +29865,16 @@
  * Example:
  * (code)
  * var tabBox = new Jx.TabBox('subTabArea', 'top');
- * 
+ *
  * var tab1 = new Jx.Button.Tab('Tab 1', {contentID: 'content4'});
  * var tab2 = new Jx.Button.Tab('Tab 2', {contentID: 'content5'});
- * 
+ *
  * tabBox.add(tab1, tab2);
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.TabBox = new Class({
@@ -28458,7 +29906,7 @@
          */
         scroll:true
     },
-    
+
     /**
      * Property: tabBar
      * {<Jx.Toolbar>} the toolbar for this tab box.
@@ -28491,7 +29939,7 @@
             this.showItem(tab);
         }.bind(this.tabBar));
         this.domObj = this.panel.domObj;
-        /* when the panel changes size, the tab set needs to update 
+        /* when the panel changes size, the tab set needs to update
          * the content areas.
          */
          this.panel.addEvent('sizeChange', (function() {
@@ -28525,11 +29973,11 @@
      * Parameters:
      * tab - {<Jx.Tab>} an instance of <Jx.Tab> to add to the tab box.  More
      * than one tab can be added by passing extra parameters to this method.
-     * Unlike <Jx.TabSet>, tabs do not have to be added to a separate 
+     * Unlike <Jx.TabSet>, tabs do not have to be added to a separate
      * <Jx.Toolbar>.
      */
-    add : function() { 
-        this.tabBar.add.apply(this.tabBar, arguments); 
+    add : function() {
+        this.tabBar.add.apply(this.tabBar, arguments);
         this.tabSet.add.apply(this.tabSet, arguments);
         $A(arguments).flatten().each(function(tab){
             tab.addEvents({
@@ -28553,7 +30001,7 @@
         this.tabSet.remove(tab);
     }
 });
-// $Id: toolbar.separator.js 524 2009-09-18 05:40:16Z jonlb at comcast.net $
+// $Id: toolbar.separator.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.Toolbar.Separator
  *
@@ -28565,9 +30013,9 @@
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Toolbar.Separator = new Class({
@@ -28583,12 +30031,10 @@
         this.domObj.appendChild(this.domSpan);
     }
 });
-// $Id: tree.js 602 2009-11-10 19:41:36Z pagameba $
+// $Id: tree.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.Tree
  *
- * Extends: Jx.TreeFolder
- *
  * Jx.Tree displays hierarchical data in a tree structure of folders and nodes.
  *
  * Example:
@@ -28597,9 +30043,9 @@
  *
  * Extends: <Jx.Widget>
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Tree = new Class({
@@ -28638,12 +30084,17 @@
          * for other options relating to selections that can be set here.
          */
         select: true,
+        /**
+         * Option: template
+         * the default HTML template for a tree can be overridden
+         */
         template: '<ul class="jxTreeRoot"></ul>'
     },
     /**
      * APIProperty: classes
      * {Hash} a hash of property to CSS class names for extracting references
-     * to DOM elements from the supplied templates.
+     * to DOM elements from the supplied templates.  Requires
+     * domObj element, anything else is optional.
      */
     classes: new Hash({domObj: 'jxTreeRoot'}),
     /**
@@ -28652,18 +30103,18 @@
      */
     render: function() {
         this.parent();
-        if ($defined(this.options.container) && 
+        if ($defined(this.options.container) &&
             document.id(this.options.container)) {
             this.domObj = this.options.container;
         }
-        
+
         if (this.options.selection) {
             this.selection = this.options.selection;
         } else if (this.options.select) {
             this.selection = new Jx.Selection(this.options);
             this.ownsSelection = true;
         }
-        
+
         this.bound = {
             select: function(item) {
                 this.fireEvent('select', item.retrieve('jxTreeItem'));
@@ -28679,7 +30130,7 @@
                 unselect: this.bound.unselect
             });
         }
-        
+
         this.list = new Jx.List(this.domObj, {
                 hover: true,
                 press: true,
@@ -28691,7 +30142,7 @@
             this.addTo(this.options.parent);
         }
     },
-    
+
     /**
      * APIMethod: add
      * add one or more items to the tree at a particular position in the tree
@@ -28758,7 +30209,7 @@
         item.setSelection(null);
         return this;
     },
-    
+
     /**
      * Method: cleanup
      * Clean up a Jx.Tree instance
@@ -28779,7 +30230,7 @@
      * shouldDescend - {Boolean} propagate changes to child nodes?
      */
     update: function(shouldDescend, isLast) {
-        
+
         if ($defined(isLast)) {
             if (isLast) {
                 this.domObj.removeClass('jxTreeNest');
@@ -28798,7 +30249,7 @@
             }
         });
     },
-    
+
     /**
      * APIMethod: items
      * return an array of tree item instances contained in this tree.
@@ -28824,11 +30275,11 @@
             }
         }, this);
     },
-    
+
     /**
      * APIMethod: findChild
      * Get a reference to a child node by recursively searching the tree
-     * 
+     *
      * Parameters:
      * path - {Array} an array of labels of nodes to search for
      *
@@ -28840,7 +30291,7 @@
         if (path.length == 0) {
             return false;
         }
-        //path has more than one thing in it, find a folder and descend into it    
+        //path has more than one thing in it, find a folder and descend into it
         var name = path.shift();
         var result = false;
         this.list.items().some(function(item) {
@@ -28860,13 +30311,16 @@
         return result;
     },
     /**
-     * Method: setSelection
+     * APIMethod: setSelection
      * sets the <Jx.Selection> object to be used by this tree.  Used primarily
      * by <Jx.TreeFolder> to propogate a single selection object throughout a
      * tree.
      *
      * Parameters:
      * selection - {<Jx.Selection>} the new selection object to use
+     *
+     * Returns:
+     * {<Jx.Tree>} a reference to this object for chaining
      */
     setSelection: function(selection) {
         if (this.selection && this.ownsSelection) {
@@ -28879,10 +30333,11 @@
         this.list.each(function(item) {
             item.retrieve('jxTreeItem').setSelection(selection);
         });
+        return this;
     }
 });
 
-// $Id: treeitem.js 602 2009-11-10 19:41:36Z pagameba $
+// $Id: treeitem.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.TreeItem
  *
@@ -28955,13 +30410,13 @@
         template: '<li class="jxTreeContainer jxTreeLeaf"><img class="jxTreeImage" src="'+Jx.aPixel.src+'" alt="" title=""><a class="jxTreeItem" href="javascript:void(0);"><img class="jxTreeIcon" src="'+Jx.aPixel.src+'" alt="" title=""><span class="jxTreeLabel"></span></a></li>'
     },
     classes: new Hash({
-        domObj: 'jxTreeContainer', 
-        domA: 'jxTreeItem', 
-        domImg: 'jxTreeImage', 
+        domObj: 'jxTreeContainer',
+        domA: 'jxTreeItem',
+        domImg: 'jxTreeImage',
         domIcon: 'jxTreeIcon',
         domLabel: 'jxTreeLabel'
     }),
-    
+
     /**
      * APIMethod: render
      * Create a new instance of Jx.TreeItem with the associated options
@@ -28975,11 +30430,11 @@
 
         /* the target for jxPressed, jxSelected, jxHover classes */
         this.domObj.store('jxListTarget', this.domA);
-        
+
         if (!this.options.selectable) {
             this.domObj.addClass('jxUnselectable');
         }
-        
+
         if (this.domObj) {
             if (this.options.id) {
                 this.domObj.id = this.options.id;
@@ -28995,7 +30450,7 @@
             if (this.options.imageClass) {
                 this.domIcon.addClass(this.options.imageClass);
             }
-            
+
         }
 
         if (this.options.label && this.domLabel) {
@@ -29015,7 +30470,7 @@
                 });
             }
         }
-        
+
         if ($defined(this.options.enabled)) {
             this.enable(this.options.enabled, true);
         }
@@ -29072,7 +30527,7 @@
             this.selection.select(document.id(this));
         }
     },
-    
+
     /**
      * Method: getLabel
      * Get the label associated with a TreeItem
@@ -29083,7 +30538,7 @@
     getLabel: function() {
         return this.options.label;
     },
-    
+
     /**
      * Method: setLabel
      * set the label of a tree item
@@ -29094,7 +30549,7 @@
             this.domLabel.set('html',label);
         }
     },
-    
+
     setImage: function(url, imageClass) {
         if (this.domIcon && $defined(url)) {
             this.options.image = url;
@@ -29121,7 +30576,7 @@
             }
         }
     },
-    
+
     /**
      * Method: propertyChanged
      * A property of an object has changed, synchronize the state of the
@@ -29142,11 +30597,9 @@
         this.selection = selection;
     }
 });
-// $Id: treefolder.js 602 2009-11-10 19:41:36Z pagameba $
+// $Id: treefolder.js 626 2009-11-20 13:22:22Z pagameba $
 /**
  * Class: Jx.TreeFolder
- * 
- * Extends: <Jx.TreeItem>
  *
  * A Jx.TreeFolder is an item in a tree that can contain other items.  It is
  * expandable and collapsible.
@@ -29158,9 +30611,9 @@
  * Extends:
  * <Jx.TreeItem>
  *
- * License: 
+ * License:
  * Copyright (c) 2008, DM Solutions Group Inc.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.TreeFolder = new Class({
@@ -29178,13 +30631,13 @@
          */
         open: false,
         /* folders will share a selection with the tree they are in */
-        select: false, 
+        select: false,
         template: '<li class="jxTreeContainer jxTreeBranch"><img class="jxTreeImage" src="'+Jx.aPixel.src+'" alt="" title=""><a class="jxTreeItem" href="javascript:void(0);"><img class="jxTreeIcon" src="'+Jx.aPixel.src+'" alt="" title=""><span class="jxTreeLabel"></span></a><ul class="jxTree"></ul></li>'
     },
     classes: new Hash({
-        domObj: 'jxTreeContainer', 
-        domA: 'jxTreeItem', 
-        domImg: 'jxTreeImage', 
+        domObj: 'jxTreeContainer',
+        domA: 'jxTreeItem',
+        domImg: 'jxTreeImage',
         domIcon: 'jxTreeIcon',
         domLabel: 'jxTreeLabel',
         domTree: 'jxTree'
@@ -29196,20 +30649,20 @@
     render : function() {
         this.parent();
         this.domObj.store('jxTreeFolder', this);
-        
+
         this.bound = {
             toggle: this.toggle.bind(this)
         };
-        
+
         this.addEvents({
             click: this.bound.toggle,
             dblclick: this.bound.toggle
         });
-        
+
         if (this.domImg) {
             this.domImg.addEvent('click', this.bound.toggle);
         }
-                
+
         this.tree = new Jx.Tree({
             template: this.options.template,
             onAdd: function(item) {
@@ -29226,20 +30679,54 @@
         } else {
             this.collapse();
         }
-        
+
         this.addEvent('postDestroy',function() {
             this.tree.destroy();
         }.bind(this));
     },
-    
+    /**
+     * APIMethod: add
+     * add one or more items to the folder at a particular position in the
+     * folder
+     *
+     * Parameters:
+     * item - {<Jx.TreeItem>} or an array of items to be added
+     * position - {mixed} optional location to add the items.  By default,
+     * this is 'bottom' meaning the items are added at the end of the list.
+     * See <Jx.List::add> for options
+     *
+     * Returns:
+     * {<Jx.TreeFolder>} a reference to this object for chaining calls
+     */
     add: function(item, position) {
         this.tree.add(item, position);
         return this;
     },
+    /**
+     * APIMethod: remove
+     * remove an item from the folder
+     *
+     * Parameters:
+     * item - {<Jx.TreeItem>} the folder item to remove
+     *
+     * Returns:
+     * {<Jx.Tree>} a reference to this object for chaining calls
+     */
     remove: function(item) {
         this.tree.remove(item);
         return this;
     },
+    /**
+     * APIMethod: replace
+     * replaces one item with another
+     *
+     * Parameters:
+     * item - {<Jx.TreeItem>} the tree item to remove
+     * withItem - {<Jx.TreeItem>} the tree item to insert
+     *
+     * Returns:
+     * {<Jx.Tree>} a reference to this object for chaining calls
+     */
     replace: function(item, withItem) {
         this.tree.replace(item, withItem);
         return this;
@@ -29253,6 +30740,10 @@
     items: function() {
         return this.tree.items();
     },
+    /**
+     * APIMethod: empty
+     * recursively empty this folder and any folders in it
+     */
     empty: function() {
         this.tree.empty();
     },
@@ -29264,11 +30755,14 @@
      * Parameters:
      * shouldDescend - {Boolean} propagate changes to child nodes?
      * isLast - {Boolean} is this the last item in the list?
+     *
+     * Returns:
+     * {<Jx.TreeFolder>} a reference to this for chaining
      */
     update: function(shouldDescend,isLast) {
         /* avoid update if not attached to tree yet */
         if (!this.domObj.parentNode) return;
-        
+
         if (!$defined(isLast)) {
             isLast = this.domObj.hasClass('jxTreeBranchLastOpen') ||
                      this.domObj.hasClass('jxTreeBranchLastClosed');
@@ -29285,6 +30779,13 @@
 
         this.tree.update(shouldDescend, isLast);
     },
+    /**
+     * APIMethod: toggle
+     * toggle the state of the folder between open and closed
+     *
+     * Returns:
+     * {<Jx.TreeFolder>} a reference to this for chaining
+     */
     toggle: function() {
         if (this.options.enabled) {
             if (this.options.open) {
@@ -29293,27 +30794,46 @@
                 this.expand();
             }
         }
+        return this;
     },
     /**
-     * Method: expand
+     * APIMethod: expand
      * Expands the folder
+     *
+     * Returns:
+     * {<Jx.TreeFolder>} a reference to this for chaining
      */
     expand : function() {
         this.options.open = true;
         document.id(this.tree).setStyle('display', 'block');
         this.update(true);
-        this.fireEvent('disclosed', this);    
+        this.fireEvent('disclosed', this);
+        return this;
     },
     /**
-     * Method: collapse
+     * APIMethod: collapse
      * Collapses the folder
+     *
+     * Returns:
+     * {<Jx.TreeFolder>} a reference to this for chaining
      */
     collapse : function() {
         this.options.open = false;
         document.id(this.tree).setStyle('display', 'none');
         this.update(true);
         this.fireEvent('disclosed', this);
+        return this;
     },
+    /**
+     * APIMethod: findChild
+     * Get a reference to a child node by recursively searching the tree
+     *
+     * Parameters:
+     * path - {Array} an array of labels of nodes to search for
+     *
+     * Returns:
+     * {Object} the node or null if the path was not found
+     */
     findChild : function(path) {
         //path is empty - we are asking for this node
         if (path.length == 0) {
@@ -29322,21 +30842,33 @@
             return this.tree.findChild(path);
         }
     },
+    /**
+     * Method: setSelection
+     * sets the <Jx.Selection> object to be used by this folder.  Used
+     * to propogate a single selection object throughout a tree.
+     *
+     * Parameters:
+     * selection - {<Jx.Selection>} the new selection object to use
+     *
+     * Returns:
+     * {<Jx.TreeFolder>} a reference to this for chaining
+     */
     setSelection: function(selection) {
         this.tree.setSelection(selection);
+        return this;
     }
 });
 /**
  * Class: Jx.Slider
  * This class wraps the mootools-more slider class to make it more Jx.Slider
- *  
+ *
  * Copyright 2009 by Jonathan Bomgardner
  * License: MIT-style
  */
 Jx.Slider = new Class({
-    
+    Family: 'Jx.Slider',
     Extends: Jx.Widget,
-    
+
     options: {
         /**
          * Option: template
@@ -29355,9 +30887,9 @@
         min: 0,
         /**
          * Option: step
-         * The distance between adjacent steps. For example, the default (1) 
-         * with min of 0 and max of 100, provides 100 steps between the min 
-         * and max values  
+         * The distance between adjacent steps. For example, the default (1)
+         * with min of 0 and max of 100, provides 100 steps between the min
+         * and max values
          */
         step: 1,
         /**
@@ -29382,7 +30914,7 @@
         startAt: 0,
         /**
          * Option: offset
-         * 
+         *
          */
         offset: 0,
         onChange: $empty,
@@ -29397,16 +30929,16 @@
     sliderOpts: null,
     /**
      * APIMethod: render
-     * Create the slider but does not start it up due to issues with it 
+     * Create the slider but does not start it up due to issues with it
      * having to be visible before it will work properly.
      */
     render: function () {
         this.parent();
-        
+
         if (this.domObj) {
             return;
         }
-        
+
         this.sliderOpts = {
             range: [this.options.min, this.options.max],
             snap: this.options.snap,
@@ -29417,7 +30949,7 @@
             onChange: this.change.bind(this),
             onComplete: this.complete.bind(this)
         };
-        
+
     },
     /**
      * Method: change
@@ -29436,7 +30968,7 @@
     /**
      * APIMethod: start
      * Call this method after the slider has been rendered in the DOM to start
-     * it up and position the slider at the startAt poisition. 
+     * it up and position the slider at the startAt poisition.
      */
     start: function () {
         if (!$defined(this.slider)) {
@@ -29444,422 +30976,232 @@
         }
         this.slider.set(this.options.startAt);
     }
+});// $Id: $
+/**
+ * Class: Jx.Notice
+ *
+ * Extends: <Jx.ListItem>
+ *
+ * Events:
+ *
+ * License:
+ * Copyright (c) 2009, DM Solutions Group.
+ *
+ * This file is licensed under an MIT style license
+ */
+Jx.Notice = new Class({
+
+    Family: 'Jx.Notice',
+    Extends: Jx.ListItem,
+
+    options: {
+        fx: 'fade',
+        chrome: false,
+        enabled: true,
+        template: '<li class="jxNoticeItemContainer"><div class="jxNoticeItem"><span class="jxNotice"></span><a class="jxNoticeClose" href="javascript:void(0);" title="close this notice"></a></div></li>',
+        klass: ''
+    },
+
+    classes: new Hash({
+        domObj: 'jxNoticeItemContainer',
+        domItem: 'jxNoticeItem',
+        domContent: 'jxNotice',
+        domClose: 'jxNoticeClose'
+    }),
+
+    /**
+     * APIMethod: render
+     */
+    render: function () {
+        this.parent();
+        
+        if (this.options.klass) {
+            this.domObj.addClass(this.options.klass);
+        }
+        if (this.domClose) {
+            this.domClose.addEvent('click', this.close.bind(this));
+        }
+    },
+
+    close: function() {
+        this.fireEvent('close', this);
+    },
+    
+    show: function(el, onComplete) {
+        if (this.options.chrome) {
+            this.showChrome();
+        }
+        if (this.options.fx) {
+            document.id(el).adopt(this);
+            if (onComplete) onComplete();
+        } else {
+            document.id(el).adopt(this);
+            if (onComplete) onComplete();
+        }
+    },
+    
+    hide: function(onComplete) {
+        if (this.options.chrome) {
+            this.hideChrome();
+        }
+        if (this.options.fx) {
+            document.id(this).dispose();
+            if (onComplete) onComplete();
+        } else {
+            document.id(this).dispose();
+            if (onComplete) onComplete();
+        }
+    }
 });
 
+Jx.Notice.Information = new Class({
+    Extends: Jx.Notice,
+    options: {
+        template: '<li class="jxNoticeItemContainer"><div class="jxNoticeItem"><img class="jxNoticeIcon" src="'+Jx.aPixel.src+'" title="Success"><span class="jxNotice"></span><a class="jxNoticeClose" href="javascript:void(0);" title="close this notice"></a></div></li>',
+        klass: 'jxNoticeInformation'
+    }
+});
+Jx.Notice.Success = new Class({
+    Extends: Jx.Notice,
+    options: {
+        template: '<li class="jxNoticeItemContainer"><div class="jxNoticeItem"><img class="jxNoticeIcon" src="'+Jx.aPixel.src+'" title="Success"><span class="jxNotice"></span><a class="jxNoticeClose" href="javascript:void(0);" title="close this notice"></a></div></li>',
+        klass: 'jxNoticeSuccess'
+    }
+});
+Jx.Notice.Warning = new Class({
+    Extends: Jx.Notice,
+    options: {
+        template: '<li class="jxNoticeItemContainer"><div class="jxNoticeItem"><img class="jxNoticeIcon" src="'+Jx.aPixel.src+'" title="Warning"><span class="jxNotice"></span><a class="jxNoticeClose" href="javascript:void(0);" title="close this notice"></a></div></li>',
+        klass: 'jxNoticeWarning'
+    }
+});
+Jx.Notice.Error = new Class({
+    Extends: Jx.Notice,
+    options: {
+        template: '<li class="jxNoticeItemContainer"><div class="jxNoticeItem"><img class="jxNoticeIcon" src="'+Jx.aPixel.src+'" title="Error"><span class="jxNotice"></span><a class="jxNoticeClose" href="javascript:void(0);" title="close this notice"></a></div></li>',
+        klass: 'jxNoticeError'
+    }
+});
 
-Jx.Notification = new Class({
+
+
+Jx.Notifier = new Class({
     
-    Extends: Jx.Widget,
-    Family: 'Jx.Notification',
+    Family: 'Jx.Notifier',
+    Extends: Jx.ListView,
     
     options: {
         /**
          * Option: parent
-         * The parent this notification is inside. If left undefined it is 
-         * either document.body (for 'anchor' style) or window (for 'float'
-         * style).
+         * The parent this notifier is to be placed in. If not specified, it
+         * will be placed in the body of the document.
          */
         parent: null,
         /**
-         * Option: items
-         * An initial list of notices to add. Pass them as an array of 
-         * either strings, Elements, or Jx.Widget instances (anything that 
-         * works with document.id() for grabbing gan element will work).
-         */
-        items: [],
-        
-        /**
-         * Option: style
-         * Determines if this is anchored to a side of a parent or
-         * floated in the viewport. Possible options are 'anchor' or 
-         * 'float'
-         */
-        style: 'anchor',
-        /**
-         * Option: position
-         * This option could have 2 different meanings. If style is set to
-         * "anchor" then this should be a string that indicates the side of 
-         * the parent to anchor the notification container to. If style is 
-         * "float" then position should be an object that defines the horizontal
-         * and vertical options for the widget's position method
-         */
-        position: 'top',
-        /**
-         * Option: sizes
-         * An object with members to indicate the size of the notification 
-         * container in different states. When 'anchor' is the style the valid
-         * options are 'open' and 'minimized'. When 'float' is the style the 
-         * only valid option is 'width'.
-         */
-        sizes: {
-            open: 60,
-            minimized: 20
-        },
-        /**
-         * Option: fx
-         * An instance of Fx.Tween (or an object containing options for it) 
-         * to be used in animating the container when in an anchored state. If
-         * not set a default sliding animation will be used.
-         */
-        fx: null,
-        /**
          * Option: template
          * This is the template for the notification container itself, not the
          * actual notice. The actual notice is below in the class property 
          * noticeTemplate.
          */
-        template: '<div class="jxNotificationContainer"><span class="jxNotificationMinimize"></span><span class="jxNoticeContainer"></span></div>',
+        template: '<div class="jxNoticeListContainer"><ul class="jxNoticeList"></ul></div>',
         /**
          * Option: listOptions
          * An object holding custom options for the internal Jx.List instance.
          */
-        listOptions: {
-            hover: true
-        },
-        /**
-         * Option: floatChrome
-         * Determines whether a floated notification uses chrome. Defaults to
-         * true.
-         */
-        floatChrome: true
+        listOptions: { }
     },
 
-    list: null,
-    
-    containerFx: null,
-    
-    noticeTemplate: '<span class="jxNotice"><span class="jxNoticeClose"></span></span>',
-    
     classes: new Hash({
-        domObj: 'jxNotificationContainer',
-        elements: 'jxNotificationMinimize',
-        elements: 'jxNoticeContainer'
+        domObj: 'jxNoticeListContainer',
+        listObj: 'jxNoticeList'
     }),
     
-    noticeClasses: ['jxNotice','jxNoticeClose'],
-    
-    bound: {},
-    
     init: function () {
-        this.bound.closeNotice = this.closeNotice.bind(this);
         this.parent();
     },
     
     render: function () {
         this.parent();
-        this.list = new Jx.List(this.elements.get('jxNoticeContainer'), this.options.listOptions);
-        this.containerFx = $defined(this.options.fx) ? this.options.fx : {};
         
         if (!$defined(this.options.parent)) {
             this.options.parent = document.body;
         }
+        document.id(this.options.parent).adopt(this.domObj);
         
-        //add any initial notices
-        if (this.options.items.length > 0) {
-            this.options.items.each(function(item){
-                this.add(item);
-            },this);
-        }
-                
-        if (this.options.style === 'anchor') {
-            this.setAnchors();
-        } else {
-            this.setFloat();
-        }
-        
-        
+        this.addEvent('postRender', function() {
+            if (Jx.type(this.options.items) == 'array') {
+                this.options.items.each(function(item){
+                    this.add(item);
+                },this);
+            }
+        }.bind(this));
     },
     
-    add: function (item, klass) {
-        var els = this.processTemplate(this.noticeTemplate,this.noticeClasses);
-        var notice = els.get('jxNotice');
-        if (Jx.type(item) === 'string') {
-            var n = new Element('span',{
-                html: item
-            });
-            n.inject(notice);
-        } else {
-            document.id(item).inject(notice);
+    add: function (notice) {
+        if (!(notice instanceof Jx.Notice)) {
+            notice = new Jx.Notice({content: notice});
         }
-        if ($defined(klass)) {
-            notice.addClass('jxNotice'+klass);
-        }
-        this.list.add(notice);
-        
-        els.get('jxNoticeClose').addEvent('click', this.closeNotice.bind(this, notice));
-        
-        this.fireEvent('add', item);
-        return notice;
+        notice.addEvent('close', this.remove.bind(this));
+        notice.show(this.listObj);
     },
     
     remove: function (notice) {
-        this.list.remove(notice);
-        this.fireEvent('remove',notice);
-    },
+        notice.removeEvents('close');
+        notice.hide();
+    }
+});Jx.Notifier.Float = new Class({
     
-    setAnchors: function () {
-        
-        this.domObj.addClass('jxNotification'+this.options.postion.capitalize());
-        
-        //first grab everything in the parent
-        var els = document.id(this.options.parent).getChildren();
-        //put those all into a div
-        this.originalDiv = new Element('div');
-        this.originalDiv.adopt(els);
-        
-        //now, determine if there were initial notices added
-        //as that changes the initial layout
-        var opts;
-        if (this.list.count() > 0) {
-            opts = this.getOpenAnchorOpts('open');
-        } else {
-            opts = {
-                opts: {
-                    height: 0
-                },
-                odOpts: {}
-            };
-        }
-        
-        //inject children into parent
-        this.options.parent.adopt(this.domObj, this.originalDiv);
-        
-        //check to see if parent already has layout
-        var pLayout = this.options.parent.get('jxLayout');
-        if (!$defined(pLayout)){
-            new Jx.Layout(this.options.parent);
-        }
-        
-        //give the two siblings layout
-        new Jx.Layout(this.originalDiv, opts.odOpts);
-        new Jx.Layout(this.domObj, opts.opts);
-        
-        //force the layout to resize
-        this.options.parent.resize();
-        
-        //addEvents
-        this.bound = {
-            revealAnchor: this.revealAnchor.bind(this),
-            checkAnchor: this.checkAnchor.bind(this),
-            minimizeAnchor: this.minimizeAnchor.bind(this)
-        };
-        this.addEvent('add', this.bound.revealAnchor);
-        this.addEvent('remove', this.bound.checkAnchor);
-        this.elements.get('jxNotificationMinimize').addEvent('click', this.bound.minimizeAnchor);
-        
-        if (this.list.count() > 0) {
-            this.revealAnchor();
-        }
-    },
+    Family: 'Jx.Notifier.Float',
+    Extends: Jx.Notifier,
     
-    getOpenAnchorOpts: function (state) {
-        var ret = {};
-        switch (this.options.position) {
-            case 'bottom':
-                ret.opts = {
-                    top: null,
-                    height: this.options.sizes[state]
-                };
-                ret.odOpts = {};
-                break;
-            case 'left':
-                ret.opts = {
-                    width: this.options.sizes[state]
-                };
-                ret.odOpts = {
-                    left : opts.width
-                };
-                break;
-            case  'right':
-                ret.opts = {
-                    left: null,
-                    width: this.options.sizes[state]
-                };
-                ret.odOpts = {};
-                break;
-            case 'top':
-            default:
-                ret.opts = {
-                    height: this.options.sizes[state]
-                };
-                ret.odOpts = {
-                    top : opts.height
-                };
-                break;
-        }  
-        return ret;
-    },
-    
-    setFloat: function () {
-        
-        this.domObj.setStyles({
-            visibility: 'hidden',
-            display: 'block',
-            opacity: 0,
-            width: this.options.sizes.width,
-            position: 'absolute'
-        });
-        this.positionOpts = {
-            element: this.domObj,
-            relative: this.options.parent
-        };
-        if (Jx.type(this.options.position) === "object") {
-            this.positionOpts.options = this.options.position;
-        } else {
-            this.positionOpts.options = {
-                horizontal: 'right right',
-                vertical: 'bottom bottom',
-                offsets: {
-                    bottom: 10,
-                    right: 10
-                }
-            };
+    options: {
+        chrome: true,
+        fx: null,
+        width: 250,
+        position: {
+            horizontal: 'center center',
+            vertical: 'top top'
         }
-        
-        this.elements.get('jxNotificationMinimize').addEvent('click', this.hideFloat.bind(this));
-        this.bound.revealFloat = this.revealFloat.bind(this);
-        this.bound.checkFloat = this.checkFloat.bind(this);
-        this.addEvent('add',this.bound.revealFloat);
-        this.addEvent('remove', this.bound.checkFloat);
-        
-        if (this.list.count() > 0) {
-            this.revealFloat();
-        }
     },
-    
-    revealFloat: function () {
-        if (!this.showing) {
-            //inject domObj into parent 
-            this.domObj.inject(this.options.parent);
-            if (this.options.floatChrome) {
-                this.showChrome(this.domObj);
-            }
-            this.position(this.positionOpts.element, this.positionOpts.relative, this.positionOpts.options);
-            this.domObj.fade('in');
-            this.showing = true;
+
+    render: function () {
+        this.parent();
+        this.domObj.setStyle('position','absolute');
+        if ($defined(this.options.width)) {
+            this.domObj.setStyle('width',this.options.width);
         }
+        this.position(this.domObj, this.options.parent, this.options.position);
     },
     
-    hideFloat: function () {
-        if (this.showing) {
-            this.domObj.fade('out');
-            this.showing = false;
+    add: function(notice) {
+        if (!(notice instanceof Jx.Notice)) {
+            notice = new Jx.Notice({content: notice});
         }
-    },
-    
-    checkFloat: function () {
-        if (this.list.count() === 0) {
-            //list is empty so close the float
-            this.hideFloat();
-        }
-    },
-    
-    revealAnchor: function () {
-        if (!this.showing) {
-            var prop;
-            if (['top','bottom'].contains(this.options.position)) {
-                prop = 'height';
-            } else {
-                prop = 'width';
-            }
-            //animate the panel opening
-            this.domObj.get('tween',{
-                property: prop,
-                onComplete: function () {
-                    //then call resize with new options on both windows
-                    var opts = this.getOpenAnchorOpts('open');
-                    this.domObj.get('jxLayout').resize(opts.opts);
-                    this.originalDiv.get('jxLayout').resize(opts.odOpts);
-                    this.showing = true;
-                }.bind(this)
-            }).start(this.options.sizes.open);
-        }
-    },
-    
-    checkAnchor: function () {
-        if (this.list.count() === 0) {
-            //list is empty so close the float
-            this.hideAnchor();
-        } 
-    },
-    
-    hideAnchor: function () {
-        if (this.showing) {
-            var prop;
-            if (['top','bottom'].contains(this.options.position)) {
-                prop = 'height';
-            } else {
-                prop = 'width';
-            }
-            //animate the panel opening
-            this.domObj.get('tween',{
-                property: prop,
-                onComplete: function () {
-                    //then call resize with new options on both windows
-                    var opts = {
-                        opts: {
-                            height: 0
-                        },
-                        odOpts: {}
-                    };
-                    this.domObj.get('jxLayout').resize(opts.opts);
-                    this.originalDiv.get('jxLayout').resize(opts.odOpts);
-                    this.showing = false;
-                }.bind(this)
-            }).start(0);
-            
-        }
-    },
-    
-    minimizeAnchor: function () {
-        if (!this.showing) {
-            var prop;
-            if (['top','bottom'].contains(this.options.position)) {
-                prop = 'height';
-            } else {
-                prop = 'width';
-            }
-            //animate the panel opening
-            this.domObj.get('tween',{
-                property: prop,
-                onComplete: function () {
-                    //then call resize with new options on both windows
-                    var opts = this.getOpenAnchorOpts('minimized');
-                    this.domObj.get('jxLayout').resize(opts.opts);
-                    this.originalDiv.get('jxLayout').resize(opts.odOpts);
-                    this.showing = false;
-                }.bind(this)
-            }).start(this.options.sizes.open);
-        }
-    },
-    
-    closeNotice: function (notice) {
-        notice.get('tween',{
-            property: 'opacity',
-            onComplete: this.remove.bind(this,notice)
-        }).start(0);
+        notice.options.chrome = this.options.chrome;
+        this.parent(notice);
     }
-}); // $Id: $
+});
+ // $Id: $
 /**
  * Class: Jx.Formatter
- * 
+ *
  * Extends: <Jx.Object>
- * 
+ *
  * Base class used for specific implementations to coerce data into specific formats
- * 
+ *
  * Example:
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Formatter = new Class({
-    
+    Family: 'Jx.Formatter',
     Extends: Jx.Object,
-    
+
     /**
      * APIMethod: format
      * Empty method that must be overridden by subclasses to provide
@@ -29869,11 +31211,11 @@
 });// $Id: $
 /**
  * Class: Jx.Formatter.Number
- * 
+ *
  * Extends: <Jx.Formatter>
- * 
+ *
  * This class formats numbers. You can have it do the following
- * 
+ *
  * o replace the decimal separator
  * o use/add a thousands separator
  * o change the precision (number of decimal places)
@@ -29883,15 +31225,15 @@
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Formatter.Number = new Class({
-    
+
     Extends: Jx.Formatter,
-    
+
     options: {
         /**
          * Option: decimalSeparator
@@ -29922,7 +31264,7 @@
     /**
      * APIMethod: format
      * Formats the provided number
-     * 
+     *
      * Parameters:
      * value - the raw number to format
      */
@@ -29935,7 +31277,7 @@
             value = value.toFloat();
         }
         value = value.toFixed(this.options.precision);
-        
+
         //split on the decimalSeparator
         var parts = value.split('.');
         var dec = true;
@@ -29952,7 +31294,7 @@
         } else {
             main = parts[0];
         }
-    
+
         if (this.options.useThousands) {
             var l = main.length;
             var left = l % 3;
@@ -29968,12 +31310,12 @@
                         j = 0;
                     }
                 }
-    
+
             }
         } else {
             ret = parts[0];
         }
-    
+
         if (dec) {
             ret = ret + this.options.decimalSeparator + parts[1];
         }
@@ -29982,32 +31324,32 @@
         } else if (neg && !this.options.useParens) {
             ret = "-" + ret;
         }
-    
+
         return ret;
     }
 });// $Id: $
 /**
  * Class: Jx.Formatter.Currency
- * 
+ *
  * Extends: <Jx.Formatter.Number>
- * 
+ *
  * This class formats numbers as US currency. It actually
- * runs the value through Jx.Formatter.Number first and then 
+ * runs the value through Jx.Formatter.Number first and then
  * updates the returned value as currency.
  *
  * Example:
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Formatter.Currency = new Class({
-    
+
     Extends: Jx.Formatter.Number,
-    
+
     options: {
         /**
          * Option: sign
@@ -30019,7 +31361,7 @@
     /**
      * APIMethod: format
      * Takes a number and formats it as currency.
-     * 
+     *
      * Parameters:
      * value - the number to format
      */
@@ -30034,23 +31376,23 @@
         if (value.contains('(') || value.contains('-')) {
             neg = true;
         }
-    
+
         var ret;
         if (neg && !this.options.useParens) {
             ret = "-" + this.options.sign + value.substring(1, value.length);
         } else {
             ret = this.options.sign + value;
         }
-    
+
         return ret;
     }
 });// $Id: $
 /**
  * Class: Jx.Formatter.Date
- * 
+ *
  * Extends: <Jx.Formatter>
- * 
- * This class formats dates using the mootools-more's 
+ *
+ * This class formats dates using the mootools-more's
  * Date extensions. See the -more docs for details of
  * supported formats for parsing and formatting.
  *
@@ -30058,20 +31400,20 @@
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Formatter.Date = new Class({
-    
+
     Extends: Jx.Formatter,
-    
+
     options: {
         /**
          * Option: format
          * The format to use. See the mootools-more Date
-         * extension documentation for details on supported 
+         * extension documentation for details on supported
          * formats
          */
         format: '%B %d, %Y'
@@ -30079,7 +31421,7 @@
     /**
      * APIMethod: format
      * Does the work of formatting dates
-     * 
+     *
      * Parameters:
      * value - the text to format
      */
@@ -30090,9 +31432,9 @@
 });// $Id: $
 /**
  * Class: Jx.Formatter.Boolean
- * 
+ *
  * Extends: <Jx.Formatter>
- * 
+ *
  * This class formats boolean values. You supply the
  * text values for true and false in the options.
  *
@@ -30100,15 +31442,15 @@
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Formatter.Boolean = new Class({
-    
+
     Extends: Jx.Formatter,
-    
+
     options: {
         /**
          * Option: true
@@ -30123,9 +31465,9 @@
     },
     /**
      * APIMethod: format
-     * Takes a value, determines boolean equivalent and 
+     * Takes a value, determines boolean equivalent and
      * displays the appropriate text value.
-     * 
+     *
      * Parameters:
      * value - the text to format
      */
@@ -30151,29 +31493,29 @@
         }
         return b ? this.options['true'] : this.options['false'];
     }
-    
+
 });// $Id: $
 /**
  * Class: Jx.Formatter.Phone
- * 
+ *
  * Extends: <Jx.Formatter>
- * 
+ *
  * Formats data as phone numbers. Currently only US-style phone numbers
- * are supported. 
+ * are supported.
  *
  * Example:
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Formatter.Phone = new Class({
-    
+
     Extends: Jx.Formatter,
-    
+
     options: {
         /**
          * Option: useParens
@@ -30183,7 +31525,7 @@
         useParens: true,
         /**
          * Option: separator
-         * The character to use as a separator in the phone number. 
+         * The character to use as a separator in the phone number.
          * Defaults to a dash '-'.
          */
         separator: "-"
@@ -30192,7 +31534,7 @@
      * APIMethod: format
      * Format the input as a phone number. This will strip all non-numeric
      * characters and apply the current default formatting
-     * 
+     *
      * Parameters:
      * value - the text to format
      */
@@ -30201,7 +31543,7 @@
         var sep = this.options.separator;
         var v = '' + value;
         v = v.replace(/[^0-9]/g, '');
-    
+
         //now check the length. For right now, we only do US phone numbers
         var ret = '';
         if (v.length === 11) {
@@ -30225,23 +31567,23 @@
 });// $Id: $
 /**
  * Class: Jx.Fieldset
- * 
+ *
  * Extends: <Jx.Widget>
- * 
+ *
  * This class represents a fieldset. It can be used to group fields together.
- * 
+ *
  * Example:
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
- * 
+ *
  */
 Jx.Fieldset = new Class({
-	
+    Family: 'Jx.Fieldset',
     Extends : Jx.Widget,
 
     options : {
@@ -30258,13 +31600,13 @@
         id : null,
         /**
          * Option: fieldsetClass
-         * A CSS class to assign to the fieldset. Useful for custom styling of 
+         * A CSS class to assign to the fieldset. Useful for custom styling of
          * the element
          */
         fieldsetClass : null,
         /**
          * Option: legendClass
-         * A CSS class to assign to the legend. Useful for custom styling of 
+         * A CSS class to assign to the legend. Useful for custom styling of
          * the element
          */
         legendClass : null,
@@ -30279,32 +31621,32 @@
          */
         form : null
     },
-    
+
     classes: new Hash({
         domObj: 'jxFieldset',
         legend: 'jxFieldsetLegend'
     }),
-    
+
     /**
      * Property: legend
      * a holder for the legend Element
      */
     legend : null,
-    
+
     /**
      * APIMethod: render
      * Creates a fieldset.
      */
     render : function () {
         this.parent();
-    
+
         this.id = this.options.id;
-    
+
         if ($defined(this.options.form)
                 && this.options.form instanceof Jx.Form) {
             this.form = this.options.form;
         }
-    
+
         //FIELDSET
         if (this.domObj) {
             if ($defined(this.options.id)) {
@@ -30314,7 +31656,7 @@
                 this.domObj.addClass(this.options.fieldsetClass);
             }
         }
-    
+
         if (this.legend) {
             if ($defined(this.options.legend)) {
                 this.legend.set('html', this.options.legend);
@@ -30329,9 +31671,9 @@
     /**
      * APIMethod: add
      * Adds fields to this fieldset
-     * 
+     *
      * Parameters:
-     * pass as many fields to this method as you like. They should be 
+     * pass as many fields to this method as you like. They should be
      * <Jx.Field> objects
      */
     add : function () {
@@ -30351,23 +31693,23 @@
 // $Id: $
 /**
  * Class: Jx.Field.Check
- * 
+ *
  * Extends: <Jx.Field>
- * 
+ *
  * This class represents a radio input field.
- * 
+ *
  * Example:
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
- * 
+ *
  */
 Jx.Field.Checkbox = new Class({
-    
+
     Extends : Jx.Field,
 
     options : {
@@ -30381,7 +31723,7 @@
          * Whether this field is checked or not
          */
         checked : false,
-        
+
         labelSeparator: ''
     },
     /**
@@ -30389,14 +31731,14 @@
      * The type of this field
      */
     type : 'Check',
-    
+
     /**
-     * APIMethod: render 
+     * APIMethod: render
      * Creates a checkbox input field.
     */
     render : function () {
         this.parent();
-    
+
         if ($defined(this.options.checked) && this.options.checked) {
             if (Browser.Engine.trident) {
                 var parent = this.field.getParent();
@@ -30421,12 +31763,12 @@
             }
         }
     },
-    
+
     /**
-     * APIMethod: setValue 
+     * APIMethod: setValue
      * Sets the value property of the field
-     * 
-     * Parameters: 
+     *
+     * Parameters:
      * v - The value to set the field to, "checked" if it should be checked.
      */
     setValue : function (v) {
@@ -30436,9 +31778,9 @@
             this.field.erase('checked');
         }
     },
-    
+
     /**
-     * APIMethod: getValue 
+     * APIMethod: getValue
      * Returns the current value of the field. The field must be
      * "checked" in order to return a value. Otherwise it returns null.
      */
@@ -30449,7 +31791,7 @@
             return null;
         }
     },
-    
+
     /**
      * APIMethod: reset
      * Sets the field back to the value passed in the original
@@ -30463,29 +31805,29 @@
             this.field.erase('checked');
         }
     }
-    
+
 });
 // $Id: $
 /**
  * Class: Jx.Field.Radio
- * 
+ *
  * Extends: <Jx.Field>
- * 
+ *
  * This class represents a radio input field.
- * 
+ *
  * Example:
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Field.Radio = new Class({
-    
+
     Extends: Jx.Field,
-    
+
     options: {
         /**
          * Option: template
@@ -30505,14 +31847,14 @@
      * What kind of field this is
      */
     type: 'Radio',
-    
+
     /**
      * APIMethod: render
      * Creates a radiobutton input field.
      */
     render: function () {
         this.parent();
-        
+
         if ($defined(this.options.checked) && this.options.checked) {
             if (Browser.Engine.trident) {
                 var parent = this.field.getParent();
@@ -30541,7 +31883,7 @@
     /**
      * APIMethod: setValue
      * Sets the value property of the field
-     * 
+     *
      * Parameters:
      * v - The value to set the field to, "checked" it should be checked.
      */
@@ -30550,12 +31892,12 @@
             this.field.set('checked', "checked");
         } else {
             this.field.erase('checked');
-        } 
+        }
     },
-    
+
     /**
      * APIMethod: getValue
-     * Returns the current value of the field. The field must be "checked" 
+     * Returns the current value of the field. The field must be "checked"
      * in order to return a value. Otherwise it returns null.
      */
     getValue: function () {
@@ -30565,7 +31907,7 @@
             return null;
         }
     },
-    
+
     /**
      * Method: reset
      * Sets the field back to the value passed in the original
@@ -30578,7 +31920,7 @@
             this.field.erase('checked');
         }
     }
-    
+
 });
 
 
@@ -30587,13 +31929,13 @@
 // $Id: $
 /**
  * Class: Jx.Field.Select
- * 
+ *
  * Extends: <Jx.Field>
- * 
+ *
  * This class represents a form select field.
- * 
+ *
  * These fields are rendered as below.
- * 
+ *
  * (code)
  * <div id='' class=''>
  *    <label for=''>A label for the field</label>
@@ -30602,26 +31944,26 @@
  *    </select>
  * </div>
  * (end)
- * 
+ *
  * Example:
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
- * 
+ *
  */
 
 Jx.Field.Select = new Class({
-    
+
     Extends: Jx.Field,
-    
+
     options: {
         /**
          * Option: comboOpts
-         * Optional, defaults to null. if not null, this should be an array of objects 
+         * Optional, defaults to null. if not null, this should be an array of objects
          * formated like [{value:'', selected: true|false, text:''},...]
          */
         comboOpts: null,
@@ -30630,7 +31972,7 @@
          * Optional, defaults to null. if not null this should be an array of objects
          * defining option groups for this select. The comboOpts and optGroups options
          * are mutually exclusive. optGroups will always be shown if defined.
-         * 
+         *
          * define them like [{name: '', options: [{value:'', selected: '', text: ''}...]},...]
          */
         optGroups: null,
@@ -30645,14 +31987,14 @@
      * Indictes this type of field.
      */
     type: 'Select',
-    
+
     /**
      * APIMethod: render
      * Creates a select field.
      */
     render: function () {
         this.parent();
-        
+        this.field.addEvent('change', function() {this.fireEvent('change', this);}.bind(this));
         if ($defined(this.options.optGroups)) {
             this.options.optGroups.each(function(group){
                 var gr = new Element('optGroup');
@@ -30671,22 +32013,57 @@
             },this);
         } else if ($defined(this.options.comboOpts)) {
             this.options.comboOpts.each(function (item) {
-                var opt = new Element('option', {
-                    'value': item.value,
-                    'html': item.text
-                });
-                if ($defined(item.selected) && item.selected) {
-                    opt.set("selected", "selected");
-                }
-                this.field.grab(opt);
+                this.addOption(item);
             }, this);
         }
     },
-    
+
     /**
+     * Method: addOption
+     * add an option to the select list
+     *
+     * Parameters:
+     * item - The option to add.
+     * position (optional) - an integer index or the string 'top'.
+     *                     - default is to add at the bottom.
+     */
+    addOption: function (item, position) {
+        var opt = new Element('option', {
+            'value': item.value,
+            'html': item.text
+        });
+        if ($defined(item.selected) && item.selected) {
+            opt.set("selected", "selected");
+        }
+        var where = 'bottom';
+        var field = this.field;
+        if ($defined(position)) {
+            if (Jx.type(position) == 'integer' &&
+                (position >= 0  && position < field.options.length)) {
+                field = this.field.options[position];
+                where = 'before';
+            } else if (position == 'top') {
+                where = 'top';
+            }
+
+        }
+        opt.inject(field, where);
+    },
+
+    /**
+     * Method: removeOption
+     * removes an option from the select list
+     *
+     * Parameters:
+     *  item - The option to remove.
+     */
+    removeOption: function (item) {
+        //TBD
+    },
+    /**
      * Method: setValue
      * Sets the value property of the field
-     * 
+     *
      * Parameters:
      * v - The value to set the field to.
      */
@@ -30698,7 +32075,7 @@
             }
         }, this);
     },
-    
+
     /**
      * Method: getValue
      * Returns the current value of the field.
@@ -30715,13 +32092,13 @@
 });// $Id: $
 /**
  * Class: Jx.Field.Textarea
- * 
+ *
  * Extends: <Jx.Field>
- * 
+ *
  * This class represents a textarea field.
- * 
+ *
  * These fields are rendered as below.
- * 
+ *
  * (code)
  * <div id='' class=''>
  *    <label for=''>A label for the field</label>
@@ -30730,21 +32107,21 @@
  *    </textarea>
  * </div>
  * (end)
- * 
+ *
  * Example:
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
- * 
+ *
  */
 Jx.Field.Textarea = new Class({
-    
+
     Extends: Jx.Field,
-    
+
     options: {
         /**
          * Option: rows
@@ -30772,44 +32149,44 @@
      * The class applied to error elements
      */
     errorClass: 'jxFormErrorTextarea',
-    
+
     /**
      * APIMethod: render
      * Creates the input.
     */
     render: function () {
         this.parent();
-                
+
         if ($defined(this.options.rows)) {
             this.field.set('rows', this.options.rows);
         }
         if ($defined(this.options.columns)) {
             this.field.set('cols', this.options.columns);
         }
-        
+
         //TODO: Do we need to use OverText here as well??
-        
+
     }
 });/**
  * Class: Jx.Field.Button
- * 
+ *
  * Extends: <Jx.Field>
- * 
+ *
  * This class represents a button.
- * 
+ *
  * Example:
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2009, DM Solutions Group
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Field.Button = new Class({
-    
+
     Extends: Jx.Field,
-    
+
     options: {
         /**
          * Option: buttonOptions
@@ -30826,7 +32203,7 @@
      * The type of this field
      */
     type: 'Button',
-    
+
     processTemplate: function(template, classes, container) {
         var h = this.parent(template, classes, container);
         var b = new Jx.Button(this.options.buttonOptions);
@@ -30836,31 +32213,31 @@
         }
         return h;
     }
-    
+
 });// $Id: $
 /**
  * Class: Jx.Field.Password
- * 
+ *
  * Extends: <Jx.Field.Text>
- * 
+ *
  * This class represents a password input field.
- * 
+ *
  * Example:
  * (code)
  * (end)
  *
- * License: 
+ * License:
  * Copyright (c) 2009, Jon Bomgardner.
- * 
+ *
  * This file is licensed under an MIT style license
  */
 Jx.Field.Password = new Class({
-    
+
     Extends: Jx.Field,
-    
+
     options: {
         template: '<span class="jxInputContainer"><label class="jxInputLabel" ></label><input class="jxInputPassword" type="password" name="{name}"/><span class="jxInputTag"></span></span>'
     },
-    
+
     type: 'Password'
 });
\ No newline at end of file

Modified: sandbox/jxlib-3.0/templates/mapguide/standard/themes/crispin/jxtheme.css
===================================================================
--- sandbox/jxlib-3.0/templates/mapguide/standard/themes/crispin/jxtheme.css	2009-11-24 20:05:41 UTC (rev 1987)
+++ sandbox/jxlib-3.0/templates/mapguide/standard/themes/crispin/jxtheme.css	2009-11-24 20:11:06 UTC (rev 1988)
@@ -21,4 +21,4 @@
  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  * DEALINGS IN THE SOFTWARE.
- */body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';}.jxButtonContainer{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:2px;border:none;}.jxButton{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:0 0 0 4px;border:none;background-image:url(images/button.png);background-position:left -24px;background-repeat:no-repeat;text-decoration:none;outline:none;}a.jxButton{cursor:pointer;user-select:none;-moz-user-select:none;-khtml-user-select:none;}ul.jxToolbar .jxButton{background-position:left top;}span.jxButtonContent{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:4px 4px 4px 0;border:none;background-image:url(images/button.png);background-position:right -24px;background-repeat:no-repeat;}ul.jxToolbar span.jxButtonContent{background-position:right top;}ul.jxToolbar .jxButtonActive,.jxButtonActive{background-position:left -72px;}ul.jxToolbar .jxButtonActive span.jxButtonContent,.jxButtonActive span.jxButtonContent{background-position:right -72px;}ul.jxToolbar .jxButton:focus,.jxButton:focus{background-position:left -96px;}ul.jxToolbar .jxButton:focus span.jxButtonContent,.jxButton:focus span.jxButtonContent{background-position:right -96px;}ul.jxToolbar .jxButtonActive:focus,.jxButtonActive:focus{background-position:left -144px;}ul.jxToolbar .jxButtonActive:focus span.jxButtonContent,.jxButtonActive:focus span.jxButtonContent{background-position:right -144px;}ul.jxToolbar .jxButton:hover,ul.jxToolbar .jxButtonActive:hover,.jxButton:hover,.jxButtonActive:hover{background-position:left -48px;}ul.jxToolbar .jxButton:hover span.jxButtonContent,ul.jxToolbar .jxButtonActive:hover span.jxButtonContent,.jxButton:hover span.jxButtonContent,.jxButtonActive:hover span.jxButtonContent{background-position:right -48px;}ul.jxToolbar .jxButtonPressed,ul.jxToolbar .jxButtonPressed:focus,.jxButtonPressed,.jxButtonPressed:focus{background-position:left -120px;}ul.jxToolbar .jxButtonPressed span.jxButtonContent,ul.jxToolbar .jxButtonPressed:focus span.jxButtonContent,.jxButtonPressed span.jxButtonContent,.jxButtonPressed:focus span.jxButtonContent{background-position:right -120px;}.jxDisabled .jxButton,.jxDisabled span.jxButtonContent span{cursor:default;}ul.jxToolbar .jxDisabled .jxButton:focus,ul.jxToolbar .jxDisabled .jxButton:active,ul.jxToolbar .jxDisabled .jxButton:hover,ul.jxToolbar .jxDisabled .jxButtonPressed{background-position:left top;}.jxDisabled .jxButton:focus,.jxDisabled .jxButton:active,.jxDisabled .jxButton:hover,.jxDisabled .jxButtonPressed{background-position:left -24px;}ul.jxToolbar .jxDisabled .jxButton:focus span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButton:active span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButton:hover span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonPressed span.jxButtonContent{background-position:right top;}.jxDisabled .jxButton:focus span.jxButtonContent,.jxDisabled .jxButton:active span.jxButtonContent,.jxDisabled .jxButton:hover span.jxButtonContent,.jxDisabled .jxButtonPressed span.jxButtonContent{background-position:right -24px;}ul.jxToolbar .jxDisabled .jxButtonActive:focus,ul.jxToolbar .jxDisabled .jxButtonActive:active,ul.jxToolbar .jxDisabled .jxButtonActive:hover,.jxDisabled .jxButtonActive:focus,.jxDisabled .jxButtonActive:active,.jxDisabled .jxButtonActive:hover{background-position:left -72px;}ul.jxToolbar .jxDisabled .jxButtonActive:focus span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonActive:active span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonActive:hover span.jxButtonContent,.jxDisabled .jxButtonActive:focus span.jxButtonContent,.jxDisabled .jxButtonActive:active span.jxButtonContent,.jxDisabled .jxButtonActive:hover span.jxButtonContent{background-position:right -72px;}img.jxButtonIcon{display:-moz-inline-box;display:inline-block;position:relative;vertical-align:middle;width:16px;height:16px;background-position:center center;background-repeat:no-repeat;}span.jxButtonContent span{display:-moz-inline-box;display:inline-block;position:relative;vertical-align:middle;cursor:pointer;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:16px;height:16px;white-space:nowrap;}span.jxButtonContent span.jxButtonLabel{margin:0;padding:0 4px 0 4px;color:#000;font-size:11px;}.jxButtonMenu span.jxButtonContent,.jxButtonMulti span.jxButtonContent,.jxButtonFlyout span.jxButtonContent,.jxButtonCombo span.jxButtonContent,.jxButtonEditCombo span.jxButtonContent{padding-right:0;}.jxButtonMenu span.jxButtonContent span,.jxButtonFlyout span.jxButtonContent span,.jxButtonMulti span.jxButtonContent span,.jxButtonCombo span.jxButtonContent span,.jxButtonEditCombo span.jxButtonContent span{padding-right:16px;background-image:url(images/emblems.png);background-position:right -16px;background-repeat:no-repeat;}a.jxButtonDisclose{position:absolute;display:-moz-inline-box;display:inline-block;padding:4px 0;font-size:0;line-height:0;right:2px;top:2px;background-image:url(images/button_multi_disclose.png);background-position:right 0;background-repeat:no-repeat;outline:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;}a.jxButtonDisclose img{width:16px;height:16px;margin:0;padding:0;border:0;background-image:url(images/emblems.png);background-position:right -16px;background-repeat:no-repeat;}a.jxButtonDisclose:focus,a.jxButtonDisclose:active{background-position:right -96px;}a.jxButtonDisclose:hover{background-position:right -48px;}a.jxButtonDisclosePressed{background-position:right -120px;}.jxDisabled a.jxButtonDisclose,.jxDisabled a.jxButtonDisclose:focus,.jxDisabled a.jxButtonDisclose:active,.jxDisabled a.jxButtonDisclose:hover,.jxDisabled a.jxButtonDisclosePressed{cursor:default;background-position:right 0;}ul.jxToolbar .jxButtonHover{background-position:left -24px!important;}ul.jxToolbar .jxButtonHover span.jxButtonContent{background-position:right -24px!important;}.jxFlyout .jxChrome{background-image:url(images/flyout_chrome.png);padding:5px 5px 7px 6px;}.jxFlyout{position:absolute;display:block;z-index:100;margin:0;padding:0;}.jxFlyoutContent{position:relative;display:block;overflow:auto;margin:6px 6px 8px 7px;background-color:#fff;border:1px solid #999;}.jxButtonMulti,.jxButtonMulti span.jxButtonContent{background-image:url(images/button_multi.png);}.jxButtonEditCombo,.jxButtonEditCombo span.jxButtonContent{background-image:url(images/button_combo.png);}.jxButtonMulti span.jxButtonContent span{padding-right:21px;}.jxButtonEditCombo span.jxButtonContent span{font-size:0;}.jxButtonComboDefault span.jxButtonContent span,.jxButtonComboDefault input{font-style:italic;color:#999;}.jxButtonEditCombo input{float:left;line-height:16px;height:16px;padding:0 4px;margin:0;border:none;font-size:11px;font-family:Arial,Helvetica,sans-serif;background-color:transparent;}.jxChrome{position:absolute;display:block;font-size:0;line-height:0;z-index:-1;width:100%;height:100%;top:0;left:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxChromeDrag{opacity:.5;-ms-filter:"Alpha(opacity=50)";}.jxChromeTL{position:absolute;overflow:hidden;left:0;top:0;width:50%;height:50%;}.jxChromeTR{position:absolute;overflow:hidden;left:50%;top:0;width:50%;height:50%;}.jxChromeBL{position:absolute;overflow:hidden;left:0;top:50%;width:50%;height:50%;}.jxChromeBR{position:absolute;overflow:hidden;left:50%;top:50%;width:50%;height:50%;}.jxChromeTL img{position:absolute;top:0;left:0;width:1000px;height:600px;}.jxChromeTR img{position:absolute;top:0;right:0;width:1000px;height:600px;}.jxChromeBL img{position:absolute;bottom:0;left:0;width:1000px;height:600px;}.jxChromeBR img{position:absolute;bottom:0;right:0;width:1000px;height:600px;}.jxColorBar{position:relative;overflow:hidden;}table.jxColorGrid{position:relative;border-collapse:collapse;empty-cells:show;clear:both;padding:0;margin:0;}.jxColorGrid tr{padding:0;margin:0;}.jxColorGrid td{border:1px solid #000;padding:0;margin:0;}.jxColorGrid td.emptyCell{border:0 solid #000;}.jxColorGrid td.emptyCell span{display:block;width:7px;height:7px;line-height:0;font-size:0;border:0 solid #000;padding:1px;margin:0;}.jxColorGrid a.colorSwatch{display:block;width:7px;height:7px;line-height:0;font-size:0;border:0 solid #000;margin:0;padding:1px;}.jxColorGrid a.borderWhite:hover{border:1px solid #fff;padding:0;}.jxColorGrid a.borderBlack:hover{border:1px solid #000;padding:0;}input.jxHexInput{width:55px;vertical-align:middle;}input.jxAlphaInput{width:30px;vertical-align:middle;}div.jxColorPreview{float:left;position:relative;width:20px;height:20px;border:1px solid #000;margin:2px;vertical-align:middle;background-image:url('images/grid.png');overflow:hidden;}.jxButtonFlyout span.jxButtonContent span.jxButtonSwatch{display:block;float:left;width:14px;height:14px;border:1px solid #000;background-image:url('images/grid.png');background-position:0 0;background-repeat:repeat;padding-right:0!important;}.jxButtonFlyout span.jxButtonContent span.jxButtonSwatch span{display:block;width:14px;height:14px;position:absolute;padding-right:0;background:none;}div.jxColorPreview img{position:absolute;z-index:0;}div.jxColorPreview div{width:20px;height:10px;position:absolute;display:block;left:0;z-index:1;font-size:10px;line-height:0;}div.jxColorPreview div.jxColorSelected{top:0;}div.jxColorPreview div.jxColorHover{bottom:0;}label.jxColorLabel,label.jxAlphaLabel{width:auto;font-family:Arial,sans-serif;font-size:11px;line-height:24px;padding:2px;vertical-align:middle;}a.jxColorClose{position:absolute;top:0;right:0;width:16px;height:16px;}a.jxColorClose img{width:16px;height:16px;}.jxClearer{display:block;position:relative;float:none;clear:both;font-size:0;line-height:0;width:0;height:0;margin:0;padding:0;}.jxDisabled{opacity:.4;-ms-filter:"Alpha(opacity=40)";}.jxDisabled *{-ms-filter:"Alpha(opacity=40)";}iframe.jxIframeShim{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;-ms-filter:"Alpha(opacity=0)";z-index:-1;}.jxConfirmQuestion{text-align:center;padding:10px;margin-top:10px;}.jxDialog .jxChrome{background-image:url(images/dialog_chrome.png);}.jxDialog{display:block;z-index:1000;overflow:hidden;}.jxDialogContentContainer{z-index:1;margin:0 11px 13px 12px;border:1px solid #b7b7b7;background-color:#f0f0f0;}.jxDialogModal{position:absolute;display:block;top:0;left:0;width:100%;height:100%;background-color:#000;opacity:.2;-ms-filter:"Alpha(opacity=20)";}.jxDialogContent{display:block;position:relative;overflow:auto;padding:0;z-index:1;}.jxDialogTitle{display:block;position:relative;background-image:url(images/a_pixel.png);text-align:center;height:24px;line-height:24px;z-index:1;margin:6px 6px 0 7px;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxDialogMin .jxDialogTitle{margin-bottom:8px;}.jxDialogMoveable,.jxDialogMoveable .jxDialogLabel{cursor:move;}.jxDialogIcon{position:absolute;left:2px;top:3px;width:16px;height:16px;border:none;padding:0;margin:0;}.jxDialogLabel{font-family:Arial,Helvetica,sans-serif;font-size:11px;font-weight:bold;line-height:21px;color:#000;white-space:nowrap;cursor:default;}.jxDialogResize{position:absolute;bottom:7px;right:6px;width:16px;height:16px;z-index:2;border:0;cursor:se-resize;background-image:url(images/dialog_resize.png);}.jxDialogControls{position:absolute;top:3px;right:2px;height:16px;width:80px;}.jxDialogControls img{background-image:url('images/panel_controls.png');background-repeat:no-repeat;border:0;margin:0;width:16px;height:16px;}.jxDialogClose img{background-position:0 -32px;}.jxDialogMenu img{background-position:0 -48px;}.jxDialogHelp img{background-position:0 -64px;}.jxDialogCollapse img{background-position:0 -16px;}.jxDialogMin .jxDialogCollapse img{background-position:0 0;}.jxDialogMax .jxDialogCollapse img{background-position:0 -16px;}.jxDialogLoading img{border:0;margin:0;width:16px;height:16px;visibility:hidden;position:absolute;top:1px;left:2px;}.jxDialogControls .jxButtonContainer,.jxDialogControls span.jxButtonContent,.jxDialogControls .jxButton:hover span.jxButtonContent,.jxDialogControls .jxButton:active span.jxButtonContent,.jxDialogControls .jxButtonActive span.jxButtonContent,.jxDialogControls .jxButtonActive:hover span.jxButtonContent,.jxDialogControls .jxButtonActive:active span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton:hover span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton:active span.jxButtonContent,.jxDialogControls .jxButton,.jxDialogControls .jxButton:hover,.jxDialogControls .jxButton:active,.jxDialogControls .jxButtonActive,.jxDialogControls .jxButtonActive:hover,.jxDialogControls .jxButtonActive:active,.jxDialogControls .jxDisabled .jxButton,.jxDialogControls .jxDisabled .jxButton:hover,.jxDialogControls .jxDisabled .jxButton:active{padding:0;margin:0;border:none;background-color:transparent;background-image:none;}.jxDialogControls .jxButtonMenu span.jxButtonContent,.jxDialogControls .jxButtonFlyout span.jxButtonContent{background-image:none;}.jxDialogControls .jxButtonMenu span.jxButtonContent span,.jxDialogControls .jxButtonFlyout span.jxButtonContent span{padding-right:0;}.jxDialogControls .jxBarContainer{position:absolute;right:0;background-image:none;background-color:transparent;margin:0;padding:0;border:none;height:16px;}.jxDialogControls .jxBarScroller{left:auto;right:0;}.jxDialogControls ul.jxToolbar{float:right;}.jxDialogControls ul.jxToolbar,.jxDialogControls li.jxToolItem{background-image:none;background-color:transparent;margin:0;padding:0;border:none;}div.jxFileInputs{position:relative;}div.jxFileFake{position:absolute;top:0;left:0;z-index:1;}div.jxFileFake span{float:left;display:block;}div.jxFileFake .jxInputContainer{width:150px;}div.jxFileFake .jxInputText{width:135px;}div.jxFileFake .jxButtonContainer{margin-top:2px;float:left;}.jxInputFile{position:relative;text-align:right;-moz-opacity:0;filter:alpha(opacity:0);opacity:0;z-index:2;margin-top:-5px;height:35px;}.jxForm{display:block;position:relative;overflow:hidden;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxFieldset{display:block;position:relative;overflow:hidden;border:1px solid #ccc;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;-khtml-border-radius:10px;margin:10px;padding:5px;}.jxFieldsetLegend,.jxFieldset legend{position:relative;margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:26px;color:#000;}.jxInputContainer{display:block;position:relative;padding:0;margin:2px;border:none;}.jxInputLabel,.jxInputTag{display:-moz-inline-box;display:inline-block;margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:26px;color:#000;}.jxInputLabel{vertical-align:top;}.jxInputTag{vertical-align:bottom;}.jxInputText,.jxInputPassword,.jxInputTextarea{margin:0 4px;padding:4px;border:1px solid #bbb;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputSelect{margin:0 4px;padding:3px 4px 3px 1px;border:1px solid #bbb;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputText:focus,.jxInputPassword:focus,.jxInputTextarea:focus,.jxInputSelect:focus{border:1px solid #000;}.jxInputRadio,.jxInputCheck{margin:5px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputContainer .jxButtonContainer{padding:0;margin:0 4px;}.jxInputGroup{border:none;padding:0;margin:2px;}.jxInputGroup legend{font-size:0;line-height:0;padding:0;margin:0;border:none;}.jxInputGroup .jxFieldsetLegend{font-size:12px;}.jxInputGroup .jxInputLabel{width:auto;}.jxFieldInvalid .jxInputText,.jxFieldInvalid .jxInputPassword,.jxFieldInvalid .jxInputTextarea,.jxFieldInvalid .jxInputSelect{background-color:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;}.jxFieldValidated .jxInputText,.jxFieldValidated .jxInputPassword,.jxFieldValidated .jxInputTextarea,.jxFieldValidated .jxInputSelect{background-color:#E6EFC2;color:#264409;border-color:#C6D880;}.jxFieldInvalid .jxInputText:focus,.jxFieldInvalid .jxInputPassword:focus,.jxFieldInvalid .jxInputTextarea:focus,.jxFieldInvalid .jxInputSelect:focus{border-color:#8a1f11;}.jxFieldValidated .jxInputText:focus,.jxFieldValidated .jxInputPassword:focus,.jxFieldValidated .jxInputTextarea:focus,.jxFieldValidated .jxInputSelect:focus{border-color:#264409;}.jxFieldInvalid .jxInputLabel,.jxFieldInvalid .jxInputTag{color:#8a1f11;}.jxFieldValidated .jxInputLabel,.jxFieldValidated .jxInputTag{color:#264409;}.jxFormInline .jxInputContainer,form .jxFormInline .jxInputContainer,form .jxFieldset span.jxFormInline,form.jxForm span.jxFormInline{display:inline;}.jxFormInline .jxInputLabel,form .jxFormInline .jxInputLabel,form span.jxFormInline .jxInputLabel{display:inline;width:auto;}.jxFormInline .jxInputTag,form .jxFormInline .jxInputTag,form span.jxFormInline .jxInputTag{display:inline;}.jxFormInline .jxInputGroup,form .jxFormInline .jxInputGroup{padding-left:0;}.jxFormInline .jxInputGroup .jxFieldsetLegend,form .jxFormInline .jxInputGroup .jxFieldsetLegend{position:relative;left:auto;}.jxFormInline .jxInputGroup .jxInputLabel,form .jxFormInline .jxInputGroup .jxInputLabel{display:inline;width:auto;}.jxFormBlock .jxInputContainer,form .jxFormBlock .jxInputContainer,form .jxFieldset span.jxFormBlock,form.jxform span.jxFormBlock{display:block;}.jxFormBlock .jxInputLabel,form .jxFormBlock .jxInputLabel,form span.jxFormBlock .jxInputLabel{display:block;width:auto;margin-left:4px;}.jxFormBlock .jxInputContainerCheck .jxInputLabel,.jxFormBlock .jxInputContainerRadio .jxInputLabel,form .jxFormBlock .jxInputContainerCheck .jxInputLabel,form .jxFormBlock .jxInputContainerRadio .jxInputLabel,form span.jxFormBlock .jxInputContainerCheck .jxInputLabel,form span.jxFormBlock .jxInputContainerRadio .jxInputLabel{display:-moz-inline-box;display:inline-block;}.jxFormBlock .jxInputGroup,form .jxFormBlock .jxInputGroup{padding-left:0;}.jxFormBlock .jxInputGroup .jxFieldsetLegend,form .jxFormBlock .jxInputGroup .jxFieldsetLegend{position:relative;left:auto;}.jxFormBlock .jxInputGroup .jxInputLabel,form .jxFormBlock .jxInputGroup .jxInputLabel{display:-moz-inline-box;display:inline-block;width:auto;}.jxFormInlineblock .jxInputContainer,form .jxFormInlineblock .jxInputContainer,form .jxFieldset span.jxFormInlineblock,form.jxForm span.jxFormInlineblock{display:block;}.jxFormInlineblock .jxInputLabel,form .jxFormInlineblock .jxInputLabel,form span.jxFormInlineblock .jxInputLabel{display:-moz-inline-box;display:inline-block;width:200px;}.jxFormInlineblock .jxInputGroup,form .jxFormInlineblock .jxInputGroup{padding-left:200px;}.jxFormInlineblock .jxInputGroup .jxFieldsetLegend,form .jxFormInlineblock .jxInputGroup .jxFieldsetLegend{position:absolute;left:-200px;width:200px;}.jxFormInlineblock .jxInputGroup .jxInputLabel,form .jxFormInlineblock .jxInputGroup .jxInputLabel{display:-moz-inline-box;display:inline-block;width:auto;}.jxGridContainer{position:absolute;top:0;left:0;border-left:0 solid #d8d8d8;border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;overflow:hidden;}.jxGridTable{position:relative;table-layout:fixed;border-collapse:collapse;border-style:none;cursor:default;font-family:Arial,Verdana,sans-serif;font-size:11px;font-weight:normal;}.jxGridHeader{width:100%;}.jxGridTableBody{position:relative;table-layout:fixed;border-collapse:collapse;border-style:none;cursor:default;font-family:Arial,Verdana,sans-serif;font-size:11px;font-weight:normal;}.jxGridColHeadHide{height:0;line-height:0;font-size:0;background-color:#fff;white-space:normal;}.jxGridColHeadHide p,.jxGridRowHeadHide p{font-size:0;line-height:0;height:0;margin:0;padding:0;}.jxGridRowHeadHide{width:0;white-space:normal;}.jxGridCell{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;overflow:hidden;}.jxGridCellContent{position:relative;display:-moz-inline-box;display:inline-block;overflow:hidden;padding-left:3px;padding-right:3px;overflow:hidden;white-space:nowrap;cursor:cell;text-overflow:ellipsis;}.jxGridColHead{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;background-color:#f2f2f2;background-image:url('images/table_col.png');background-position:0 0;background-repeat:repeat-x;text-align:center;font-weight:bold;color:#333;cursor:default;padding-left:3px;padding-right:3px;white-space:nowrap;}.jxGridRowHead{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;background-color:#f2f2f2;background-image:url('images/table_row.png');background-position:0 0;background-repeat:repeat-y;text-align:center;font-weight:bold;color:#333;cursor:default;overflow:hidden;white-space:nowrap;}.jxGridRowAll{background-color:#fff;}.jxGridColumnHeaderSelected{background-color:#e1e1e1;background-position:0 -200px;}.jxGridRowHeaderSelected{background-color:#e1e1e1;background-position:-400px 0;}.jxGridColumnSelected{background-color:#f7f7f7;}.jxGridRowSelected td{background-color:#f7f7f7;}td.jxGridCellSelected{background-color:#ebebeb;}.jxGridColumnHeaderPrelight{background-color:#cee5ff;background-position:0 -300px;}.jxGridRowHeaderPrelight{background-color:#cee5ff;background-position:-600px 0;}.jxGridColumnPrelight{background-color:#e5f1ff;}.jxGridRowPrelight td{background-color:#e5f1ff;}td.jxGridCellPrelight{background-color:#cce3ff;}.jxColSortable{padding-right:20px;}.jxGridCell.jxColSortable{padding-right:0;}.jxColSortable span{background-image:url('images/emblems.png');padding-right:20px;background-repeat:no-repeat;background-position:right top;}.jxGridColumnSortedAsc span{background-position:right -160px;}.jxGridColumnSortedDesc span{background-position:right -16px;}.jxGridColumnResize,.jxGridRowResize{display:block;position:absolute;background-image:url(images/a_pixel.png);z-index:1;}.jxGridColumnResize{right:0;top:0;height:100%;width:4px;cursor:col-resize;}.jxGridRowResize{left:0;bottom:0;height:4px;width:100%;cursor:row-resize;}.jxListView .jxListItemContainer{position:relative;display:block;outline:none;overflow:hidden;border:none;margin:0 1px;padding:0;}.jxListItem{position:relative;display:block;cursor:pointer;outline:none;overflow:hidden;border:none;margin:0 1px;padding:0;z-index:0;font-family:Arial,Helvetica,sans-serif;font-size:11px;color:#000;text-decoration:none;line-height:20px;height:20px;}.jxListView .jxHover{margin:0;border-left:1px solid #C5E0FF;border-right:1px solid #C5E0FF;background-image:url(images/listitem.png);background-repeat:repeat-x;background-color:#CDE5FF;background-position:left -24px;}.jxListItem:focus{margin:0;border-left:1px dotted #75ADFF;border-right:1px dotted #75ADFF;background-image:url(images/listitem.png);background-repeat:repeat-x;background-position:left -72px;}.jxListView .jxPressed{margin:0;border-left:1px solid #C5E0FF;border-right:1px solid #C5E0FF;background-color:#CDE5FF;background-image:url(images/listitem.png);background-repeat:repeat-x;background-position:left -48px;}.jxListView .jxSelected{margin:0;border-left:1px solid #C5E0FF;border-right:1px solid #C5E0FF;background-color:#CDE5FF;background-image:url(images/listitem.png);background-repeat:repeat-x;background-position:left -48px;}.jxMenuContainer .jxChrome{background-image:url(images/flyout_chrome.png);padding:5px 5px 7px 6px;}.jxButtonMenu span.jxMenuItemSpan{padding-right:16px;}.jxMenuContainer{position:absolute;top:0;left:-10000px;display:none;z-index:2000;padding:0;}ul.jxMenu{display:block;position:relative;list-style-type:none;padding:1px;margin:6px 6px 8px 7px;background-color:#fff;border:1px solid #999;}li.jxMenuItemContainer{display:block;position:relative;font-size:0;line-height:0;margin:0;padding:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}a.jxMenuItem{display:block;position:relative;overflow:hidden;text-decoration:none;cursor:pointer;outline:none;border:1px solid #fff;background-image:url(images/menuitem.png);background-repeat:no-repeat;background-position:left top;font-family:Arial,Helvetica,sans-serif;font-size:11px;text-decoration:none;margin:0;padding:0;color:#000;}a.jxMenuItemActive{background-position:left -98px;}a.jxMenuItem:focus{background-position:left -74px;}a.jxMenuItem:focus span.jxMenuItemContent{border-right:1px dotted #75ADFF;}a.jxMenuItemActive:focus{background-position:left -170px;}a.jxMenuItem:hover{background-color:#CDE5FF;background-position:left -26px;}a.jxMenuItem:hover span.jxMenuItemContent{border-right:1px solid #C5E0FF;}a.jxMenuItemActive:hover{background-position:left -122px;}a.jxMenuItemPressed,a.jxMenuItemPressed:hover{background-color:#CDE5FF;background-position:left -50px;}.jxDisabled a.jxMenuItem,.jxDisabled span.jxMenuItemContent span{cursor:default;}.jxDisabled a.jxMenuItem:focus,.jxDisabled a.jxMenuItemPressed,.jxDisabled a.jxMenuItemPressed:hover,.jxDisabled a.jxMenuItem:hover{background-color:#fff;background-position:left top;border-right:1px solid #fff;}.jxDisabled a.jxMenuItem:hover span.jxMenuItemContent{border-right:1px solid #fff;}span.jxMenuItemContent{display:block;position:relative;font-family:Arial,Helvetica,sans-serif;font-size:0;line-height:0;white-space:nowrap;padding:0 20px 0 0;margin:0;border-right:1px solid #fff;}.jxButtonSubMenu span.jxMenuItemContent,.jxButtonSubMenu:hover span.jxMenuItemContent{background-image:url(images/emblems.png);background-position:right -30px;background-repeat:no-repeat;}img.jxMenuItemIcon{position:absolute;top:2px;left:2px;width:16px;height:16px;background-position:left center;background-repeat:no-repeat;}span.jxMenuItemContent span{display:block;position:relative;cursor:pointer;margin:0;padding:2px 0 2px 22px;font-size:16px;line-height:16px;color:#000;}span.jxMenuItemContent span.jxMenuItemLabel{color:#000;font-size:11px;}.jxMenuItemToggle img.jxMenuItemIcon,.jxMenuItemSet img.jxMenuItemIcon{background-image:url(images/emblems.png);background-position:2px 0;background-repeat:no-repeat;}.jxMenuItemToggle a.jxMenuItemActive img.jxMenuItemIcon{background-position:2px -48px;}.jxMenuItemSet a.jxMenuItemActive img.jxMenuItemIcon{background-position:2px -64px;}ul.jxMenu span.jxMenuSeparator{display:block;font-size:10px;line-height:10px;background-image:url(images/toolbar_separator_v.png);background-repeat:repeat-x;background-position:left center;}.jxMessage{text-align:center;padding:10px;margin-top:10px;}.jxPanel{display:block;position:relative;}.jxPanelContentContainer{overflow:hidden;background-color:#f0f0f0;}.jxPanelContent{position:relative;display:block;overflow:auto;background-color:#fff;margin:0;padding:0;}.jxPanelTitle{display:block;position:relative;background-image:url(images/panelbar.png);background-repeat:repeat-x;background-position:left top;height:22px;margin:0;padding:0;text-align:center;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxPanelBar{position:absolute;line-height:1px;width:100%;height:5px;cursor:row-resize;background-color:#f0f0f0;z-index:2;}.jxPanelIcon{position:absolute;left:2px;top:3px;width:16px;height:16px;border:none;padding:0;margin:0;}.jxPanelLabel{padding-left:25px;font-family:Arial,Helvetica,sans-serif;font-size:11px;font-weight:bold;line-height:21px;color:#000;white-space:nowrap;}.jxPanelControls{position:absolute;top:3px;right:2px;height:16px;width:80px;overflow:hidden;}.jxPanelControls img{background-image:url('images/panel_controls.png');background-repeat:no-repeat;border:0;margin:0;width:16px;height:16px;}.jxPanelClose img{background-position:0 -32px;}.jxPanelMenu img{background-position:0 -48px;}.jxPanelHelp img{background-position:0 -64px;}.jxPanelCollapse img{background-position:0 -16px;}.jxPanelMin .jxPanelCollapse img{background-position:0 0;}.jxPanelMax .jxPanelCollapse img{background-position:0 -16px;}.jxPanelMaximize img{background-position:0 0;}.jxPanelLoading img{border:0;margin:0;width:16px;height:16px;visibility:hidden;position:absolute;top:1px;left:2px;}.jxPanelControls .jxButtonContainer,.jxPanelControls span.jxButtonContent,.jxPanelControls .jxButton:hover span.jxButtonContent,.jxPanelControls .jxButton:active span.jxButtonContent,.jxPanelControls .jxButtonActive span.jxButtonContent,.jxPanelControls .jxButtonActive:hover span.jxButtonContent,.jxPanelControls .jxButtonActive:active span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton:hover span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton:active span.jxButtonContent,.jxPanelControls .jxButton,.jxPanelControls .jxButton:hover,.jxPanelControls .jxButton:active,.jxPanelControls .jxButtonActive,.jxPanelControls .jxButtonActive:hover,.jxPanelControls .jxButtonActive:active,.jxPanelControls .jxDisabled .jxButton,.jxPanelControls .jxDisabled .jxButton:hover,.jxPanelControls .jxDisabled .jxButton:active{padding:0;margin:0;border:none;background-color:transparent;background-image:none;}.jxPanelControls .jxButtonMenu span.jxButtonContent,.jxPanelControls .jxButtonFlyout span.jxButtonContent{background-image:none;}.jxPanelControls .jxButtonMenu span.jxButtonContent span,.jxPanelControls .jxButtonFlyout span.jxButtonContent span{padding-right:0;}.jxPanelControls div.jxBarTop{position:absolute;right:0;background-image:none;background-color:transparent;margin:0;padding:0;border:none;height:16px;}.jxPanelControls .jxBarScroller{left:auto;right:0;}.jxPanelControls ul.jxToolbar{float:right;}.jxPanelControls ul.jxToolbar,.jxPanelControls li.jxToolItem{background-image:none;background-color:transparent;margin:0;padding:0;border:none;}.jxProgressBar-container{width:100%;display:block;clear:both;}.jxProgressBar-message{color:black;}.jxProgressBar-container .jxProgressBar{width:100%;clear:both;border-top:none;}.jxProgressBar-container .jxProgressBar .jxProgressBar-outline{border:1px solid #360;position:absolute;top:0;left:0;z-index:10;}.jxProgressBar-container .jxProgressBar .jxProgressBar-fill{background-color:#9c6;position:absolute;top:1px;left:1px;z-index:20;}.jxProgressBar-container .jxProgressBar .jxProgressBar-text{color:#360;margin:0;padding:2px;position:absolute;top:1px;left:1px;width:auto;z-index:30;border:none;}.jxSliderContainer{width:100%;height:10px;border:1px solid black;}.jxSliderKnob{width:10px;height:10px;background-color:black;cursor:pointer;}.jxSplitterMask{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;background-image:url(images/a_pixel.png);z-index:1;}.jxSplitBarHorizontal{display:block;position:absolute;font-size:0;line-height:0;margin:0;padding:0;border:none;width:5px;height:100%;cursor:col-resize;background-color:#f0f0f0;z-index:2;}.jxSplitBarVertical{display:block;position:absolute;font-size:0;line-height:0;margin:0;padding:0;border:none;width:100%;height:5px;cursor:row-resize;background-color:#f0f0f0;z-index:2;}.jxSplitContainer{display:block;position:relative;margin:0;padding:0;border:none;overflow:hidden;}.jxSplitArea{display:block;position:absolute;margin:0;padding:0;border:none;z-index:0;}.jxSplitBarDrag{background-color:#eee;}.jxSnapHorizontalBefore{width:5px;height:5px;position:absolute;top:0;left:0;background-color:#aaa;}.jxSnapHorizontalAfter{width:5px;height:5px;position:absolute;top:0;left:0;background-color:#aaa;}.jxTabSetContainer{position:relative;display:block;overflow:hidden;width:200px;height:200px;margin:0;padding:0;background-color:#fff;}.jxTabSetContainer .jxToolbarContainer{z-index:auto;}.tabContent{display:none;position:relative;width:100%;height:100%;overflow:auto;}.tabContentActive{display:block;}div.jxTabContainer{display:block;position:relative;margin:0;padding:2px;border:none;}a.jxTab{display:block;position:relative;cursor:pointer;user-select:none;-moz-user-select:none;-khtml-user-select:none;margin:0;padding:0;border:none;background-repeat:no-repeat;text-decoration:none;outline:none;}span.jxTabContent{display:block;font-size:0;line-height:0;margin:0;padding:0;border:none;background-repeat:no-repeat;}img.jxTabIcon{position:relative;width:16px;height:16px;background-position:center center;background-repeat:no-repeat;}span.jxTabLabel{display:block;position:relative;cursor:pointer;margin:0;padding:0;color:#000;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:16px;}a.jxTabClose{display:block;position:absolute;cursor:pointer;outline:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;}a.jxTabClose img{width:16px;height:16px;background-image:url(images/tab_close.png);}.jxDisabled a.jxTab,.jxDisabled span.jxTabContent span,.jxDisabled a.jxTabClose{cursor:default;}.jxBarTop div.jxTabContainer,.jxBarBottom div.jxTabContainer{float:left;}.jxBarTop a.jxTab,.jxBarTop span.jxTabContent{background-image:url(images/tab_top.png);}.jxBarBottom a.jxTab,.jxBarBottom span.jxTabContent{background-image:url(images/tab_bottom.png);}.jxBarTop a.jxTabClose,.jxBarBottom a.jxTabClose{top:3px;right:3px;}.jxBarTop .jxTabClose span.jxTabContent,.jxBarBottom .jxTabClose span.jxTabContent{padding-right:16px;}.jxBarTop a.jxTab,.jxBarBottom a.jxTab{float:left;padding-left:4px;background-position:left -24px;}.jxBarTop span.jxTabContent,.jxBarBottom span.jxTabContent{float:left;padding:4px 4px 4px 0;background-position:right -24px;}.jxBarTop a.jxTabActive,.jxBarBottom a.jxTabActive{background-position:left -72px;}.jxBarTop a.jxTabActive span.jxTabContent,.jxBarBottom a.jxTabActive span.jxTabContent{background-position:right -72px;}.jxBarTop a.jxTab:focus,.jxBarBottom a.jxTab:focus{background-position:left -96px;}.jxBarTop a.jxTab:focus span.jxTabContent,.jxBarBottom a.jxTab:focus span.jxTabContent{background-position:right -96px;}.jxBarTop a.jxTabActive:focus,.jxBarBottom a.jxTabActive:focus{background-position:left -144px;}.jxBarTop a.jxTabActive:focus span.jxTabContent,.jxBarBottom a.jxTabActive:focus span.jxTabContent{background-position:right -144px;}.jxBarTop a.jxTab:hover,.jxBarTop a.jxTabActive:hover,.jxBarBottom a.jxTab:hover,.jxBarBottom a.jxTabActive:hover{background-position:left -48px;}.jxBarTop a.jxTab:hover span.jxTabContent,.jxBarTop a.jxTabActive:hover span.jxTabContent,.jxBarBottom a.jxTab:hover span.jxTabContent,.jxBarBottom a.jxTabActive:hover span.jxTabContent{background-position:right -48px;}.jxBarTop a.jxTabPressed,.jxBarTop a.jxTabPressed:focus,.jxBarBottom a.jxTabPressed,.jxBarBottom a.jxTabPressed:focus{background-position:left -120px;}.jxBarTop a.jxTabPressed span.jxTabContent,.jxBarTop a.jxTabPressed:focus span.jxTabContent,.jxBarBottom a.jxTabPressed span.jxTabContent,.jxBarBottom a.jxTabPressed:focus span.jxTabContent{background-position:right -120px;}.jxBarTop .jxDisabled a.jxTab:focus,.jxBarTop .jxDisabled a.jxTab:active,.jxBarTop .jxDisabled a.jxTab:hover,.jxBarTop .jxDisabled a.jxTabPressed,.jxBarBottom .jxDisabled a.jxTab:focus,.jxBarBottom .jxDisabled a.jxTab:active,.jxBarBottom .jxDisabled a.jxTab:hover,.jxBarBottom .jxDisabled a.jxTabPressed{background-position:left -24px;}.jxBarTop .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarTop .jxDisabled a.jxTab:active span.jxTabContent,.jxBarTop .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarTop .jxDisabled a.jxTabPressed span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:active span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabPressed span.jxTabContent{background-position:right -24px;}.jxBarTop .jxDisabled a.jxTabActive:focus,.jxBarTop .jxDisabled a.jxTabActive:active,.jxBarTop .jxDisabled a.jxTabActive:hover,.jxBarBottom .jxDisabled a.jxTabActive:focus,.jxBarBottom .jxDisabled a.jxTabActive:active,.jxBarBottom .jxDisabled a.jxTabActive:hover{background-position:left -72px;}.jxBarTop .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarTop .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarTop .jxDisabled a.jxTabActive:hover span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:hover span.jxTabContent{background-position:right -72px;}.jxBarTop img.jxTabIcon,.jxBarBottom img.jxTabIcon{float:left;}.jxBarTop span.jxTabLabel,.jxBarBottom span.jxTabLabel{float:left;height:16px;padding:0 4px 0 4px;}.jxBarLeft a.jxTab,.jxBarLeft span.jxTabContent{background-image:url(images/tab_left.png);}.jxBarRight a.jxTab,.jxBarRight span.jxTabContent{background-image:url(images/tab_right.png);}.jxBarLeft a.jxTabClose,.jxBarRight a.jxTabClose{top:3px;left:3px;}.jxBarLeft .jxTabClose span.jxTabContent,.jxBarRight .jxTabClose span.jxTabContent{padding-top:16px;}.jxBarLeft a.jxTab,.jxBarRight a.jxTab{padding-top:4px;background-position:-24px top;}.jxBarLeft span.jxTabContent,.jxBarRight span.jxTabContent{padding:0 4px 4px 4px;background-position:-24px bottom;}.jxBarLeft a.jxTabActive,.jxBarRight a.jxTabActive{background-position:-72px top;}.jxBarLeft a.jxTabActive span.jxTabContent,.jxBarRight a.jxTabActive span.jxTabContent{background-position:-72px bottom;}.jxBarLeft a.jxTab:focus,.jxBarRight a.jxTab:focus{background-position:-96px top;}.jxBarLeft a.jxTab:focus span.jxTabContent,.jxBarRight a.jxTab:focus span.jxTabContent{background-position:-96px bottom;}.jxBarLeft a.jxTabActive:focus,.jxBarRight a.jxTabActive:focus{background-position:-144px top;}.jxBarLeft a.jxTabActive:focus span.jxTabContent,.jxBarRight a.jxTabActive:focus span.jxTabContent{background-position:-144px bottom;}.jxBarLeft a.jxTab:hover,.jxBarLeft a.jxTabActive:hover,.jxBarRight a.jxTab:hover,.jxBarRight a.jxTabActive:hover{background-position:-48px top;}.jxBarLeft a.jxTab:hover span.jxTabContent,.jxBarLeft a.jxTabActive:hover span.jxTabContent,.jxBarRight a.jxTab:hover span.jxTabContent,.jxBarRight a.jxTabActive:hover span.jxTabContent{background-position:-48px bottom;}.jxBarLeft a.jxTabPressed,.jxBarLeft a.jxTabPressed:focus,.jxBarRight a.jxTabPressed,.jxBarRight a.jxTabPressed:focus{background-position:-120px top;}.jxBarLeft a.jxTabPressed span.jxTabContent,.jxBarLeft a.jxTabPressed:focus span.jxTabContent,.jxBarRight a.jxTabPressed span.jxTabContent,.jxBarRight a.jxTabPressed:focus span.jxTabContent{background-position:-120px bottom;}.jxBarLeft .jxDisabled a.jxTab:focus,.jxBarLeft .jxDisabled a.jxTab:active,.jxBarLeft .jxDisabled a.jxTab:hover,.jxBarLeft .jxDisabled a.jxTabPressed,.jxBarRight .jxDisabled a.jxTab:focus,.jxBarRight .jxDisabled a.jxTab:active,.jxBarRight .jxDisabled a.jxTab:hover,.jxBarRight .jxDisabled a.jxTabPressed{background-position:-24px top;}.jxBarLeft .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarLeft .jxDisabled a.jxTab:active span.jxTabContent,.jxBarLeft .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabPressed span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:active span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarRight .jxDisabled a.jxTabPressed span.jxTabContent{background-position:-24px bottom;}.jxBarLeft .jxDisabled a.jxTabActive:focus,.jxBarLeft .jxDisabled a.jxTabActive:active,.jxBarLeft .jxDisabled a.jxTabActive:hover,.jxBarRight .jxDisabled a.jxTabActive:focus,.jxBarRight .jxDisabled a.jxTabActive:active,.jxBarRight .jxDisabled a.jxTabActive:hover{background-position:-72px top;}.jxBarLeft .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabActive:hover span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:hover span.jxTabContent{background-position:-72px bottom;}.jxBarLeft span.jxTabLabel,.jxBarRight span.jxTabLabel{padding:4px 0 4px 0;}.jxBarContainer{display:block;position:relative;z-index:1;overflow:hidden;margin:0;padding:0;border:0;background-color:#f0f0f0;}.jxBarTop,.jxBarBottom{width:100%;height:28px;background-image:url(images/toolbar.png);background-repeat:repeat-x;background-position:0 0;overflow:hidden;}.jxTabBox .jxTabBarTop{background-image:url(images/tabbar.png);background-position:0 bottom;}.jxTabBox .jxTabBarBottom{background-image:url(images/tabbar_bottom.png);background-position:0 top;}.jxBarLeft,.jxBarRight{width:auto;height:100%;background-image:url(images/toolbar.png);background-repeat:repeat-x;background-position:0 0;float:left;overflow:hidden;}.jxTabBox .jxTabBarLeft{background-image:url(images/tabbar_left.png);background-repeat:repeat-y;background-position:right 0;}.jxTabBox .jxTabBarRight{background-image:url(images/tabbar_right.png);background-repeat:repeat-y;background-position:left 0;}.jxBarTop .jxBarScroller,.jxBarBottom .jxBarScroller{position:absolute;width:10000%;overflow:hidden;}.jxBarTop .jxBarScrollLeft,.jxBarBottom .jxBarScrollLeft{position:absolute;top:0;left:0;}.jxBarTop .jxBarScrollRight,.jxBarBottom .jxBarScrollRight{position:absolute;top:0;right:0;}.jxBarTop .jxBarScrollLeft img.jxButtonIcon,.jxBarBottom .jxBarScrollLeft img.jxButtonIcon{background-image:url(images/emblems.png);background-position:0 -80px;}.jxBarTop .jxBarScrollRight img.jxButtonIcon,.jxBarBottom .jxBarScrollRight img.jxButtonIcon{background-image:url(images/emblems.png);background-position:0 -96px;}ul.jxToolbar,ul.jxTabBar{display:block;position:relative;float:left;list-style-type:none;margin:0;padding:0;border:none;}li.jxToolItem{display:block;position:relative;float:left;font-size:0;line-height:0;padding:0;margin:0;border:none;}li.jxToolItem span.jxBarSeparator{display:block;position:relative;float:left;font-size:0;line-height:0;border:0;margin:0;padding:4px;background-repeat:no-repeat;background-position:center center;}.jxBarTop li.jxToolItem span.jxBarSeparator,.jxBarBottom li.jxToolItem span.jxBarSeparator{width:8px;height:20px;background-image:url(images/toolbar_separator_h.png);}.jxBarLeft li.jxToolItem span.jxBarSeparator,.jxBarRight li.jxToolItem span.jxBarSeparator{width:20px;height:8px;background-image:url(images/toolbar_separator_v.png);}.jxBarLeft ul.jxToolbar,.jxBarLeft ul.jxTabBar,.jxBarLeft li.jxToolItem,.jxBarRight ul.jxToolbar,.jxBarRight ul.jxTabBar,.jxBarRight li.jxToolItem{clear:both;}.jxTooltip{width:auto;height:auto;background-color:black;color:white;padding:5px;z-index:65536;}.jxTree,.jxTreeRoot{position:relative;display:block;list-style:none;margin:0;padding:0;}.jxTreeNest{list-style:none;margin:0;padding:0;background-repeat:repeat-y;background-position:left top;}li.jxTreeContainer{position:relative;display:block;margin:0;padding:0;background-repeat:no-repeat;background-position:left top;white-space:nowrap;font-size:0;line-height:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxTree li.jxTreeContainer{margin-left:16px;}a.jxTreeItem{position:relative;display:block;cursor:pointer;outline:none;overflow:hidden;background-image:url(images/tree_hover.png);background-repeat:repeat-x;background-position:left top;border:none;margin:0 1px 0 15px;padding:0 0 0 20px;z-index:0;font-family:Arial,Helvetica,sans-serif;font-size:11px;color:#000;text-decoration:none;line-height:20px;height:20px;}a.jxTreeItem:focus{border-left:1px dotted #75ADFF;border-right:1px dotted #75ADFF;margin:0 0 0 14px;background-position:left -72px;}a.jxTreeItem:hover{border-left:1px solid #C5E0FF;border-right:1px solid #C5E0FF;margin:0 0 0 14px;background-color:#CDE5FF;background-position:left -24px;}a.jxTreeItemPressed,a.jxTreeItemPressed:hover{border-left:1px solid #C5E0FF;border-right:1px solid #C5E0FF;margin:0 0 0 14px;background-color:#CDE5FF;background-position:left -48px;}.jxDisabled a.jxTreeItem,.jxDisabled a.jxTreeItem{cursor:default;}.jxDisabled a.jxTreeItem:focus,.jxDisabled a.jxTreeItemPressed,.jxDisabled a.jxTreeItemPressed:hover,.jxDisabled a.jxTreeItem:hover{background-position:left top;border:none;margin:0 1px 0 15px;}.jxTreeNest{background-image:url(images/tree_vert_line.png);}img.jxTreeImage,img.jxTreeIcon{position:absolute;display:inline;left:0;top:0;width:16px;height:20px;z-index:1;background-image:url(images/tree.png);background-repeat:no-repeat;border:0;margin:0;}img.jxTreeIcon{height:16px;top:1px;left:1px;}.jxTreeBranchOpen .jxTreeIcon,.jxTreeBranchLastOpen .jxTreeIcon{background-position:left -40px;}.jxTreeBranchOpen .jxTreeImage{background-position:left -100px;}.jxTreeBranchLastOpen .jxTreeImage{background-position:left -160px;}.jxTreeBranchClosed .jxTreeIcon,.jxTreeBranchLastClosed .jxTreeIcon{background-position:left -20px;}.jxTreeBranchClosed .jxTreeImage{background-position:left -80px;}.jxTreeBranchLastClosed .jxTreeImage{background-position:left -140px;}.jxTreeLeaf .jxTreeIcon,.jxTreeLeafLast .jxTreeIcon{background-position:left 0;}.jxTreeLeaf .jxTreeImage{background-position:left -60px;}.jxTreeLeafLast .jxTreeImage{background-position:left -120px;}.jxTreeItemSelected{background-color:#AFD4FA;font-weight:bold;}a.jxTreeItem,img.jxTreeImage,img.jxTreeIcon,span.jxTreeLabel,.jxTreeItemContainer input{vertical-align:middle;}.jxFileUploadPanel{padding:5px;}.jxFileUploadPanel .jxInputContainer{width:300px;}.jxUploadQueue{width:100%;margin-top:10px;}.jxUploadQueue div{position:relative;width:95%;clear:both;border-top:1px solid black;padding:2px;}.jxUploadQueue div span{display:block;}.jxUploadQueue div span.jxUploadFileName{float:left;font-size:16px;}.jxUploadQueue div span.jxUploadFileDelete,.jxUploadQueue div span.jxUploadFileProgress,.jxUploadQueue div span.jxUploadFileComplete,.jxUploadQueue div span.jxUploadFileError{float:right;width:16px;height:16px;background-repeat:no-repeat;background-position:top left;cursor:pointer;}.jxUploadQueue div span.jxUploadFileDelete{background-image:url('images/delete.gif');}.jxUploadQueue div span.jxUploadFileProgress{background-image:url('images/loading.gif');}.jxUploadQueue div span.jxUploadFileComplete{background-image:url('images/green_tick.png');}.jxUploadQueue div span.jxUploadFileError{background-image:url('images/error.png');}.jxUploadFileErrorTip{padding:4px 4px 4px 20px;border:2px solid #ddd;background:url("images/error.png") no-repeat left top;color:black;width:100px;}
\ No newline at end of file
+ */body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';}.jxButtonContainer{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:2px;border:none;}.jxButton{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:0 0 0 4px;border:none;background-image:url(images/button.png);background-position:left -24px;background-repeat:no-repeat;text-decoration:none;outline:none;}a.jxButton{cursor:pointer;user-select:none;-moz-user-select:none;-khtml-user-select:none;}ul.jxToolbar .jxButton{background-position:left top;}span.jxButtonContent{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:4px 4px 4px 0;border:none;background-image:url(images/button.png);background-position:right -24px;background-repeat:no-repeat;}ul.jxToolbar span.jxButtonContent{background-position:right top;}ul.jxToolbar .jxButtonActive,.jxButtonActive{background-position:left -72px;}ul.jxToolbar .jxButtonActive span.jxButtonContent,.jxButtonActive span.jxButtonContent{background-position:right -72px;}ul.jxToolbar .jxButton:focus,.jxButton:focus{background-position:left -96px;}ul.jxToolbar .jxButton:focus span.jxButtonContent,.jxButton:focus span.jxButtonContent{background-position:right -96px;}ul.jxToolbar .jxButtonActive:focus,.jxButtonActive:focus{background-position:left -144px;}ul.jxToolbar .jxButtonActive:focus span.jxButtonContent,.jxButtonActive:focus span.jxButtonContent{background-position:right -144px;}ul.jxToolbar .jxButton:hover,ul.jxToolbar .jxButtonActive:hover,.jxButton:hover,.jxButtonActive:hover{background-position:left -48px;}ul.jxToolbar .jxButton:hover span.jxButtonContent,ul.jxToolbar .jxButtonActive:hover span.jxButtonContent,.jxButton:hover span.jxButtonContent,.jxButtonActive:hover span.jxButtonContent{background-position:right -48px;}ul.jxToolbar .jxButtonPressed,ul.jxToolbar .jxButtonPressed:focus,.jxButtonPressed,.jxButtonPressed:focus{background-position:left -120px;}ul.jxToolbar .jxButtonPressed span.jxButtonContent,ul.jxToolbar .jxButtonPressed:focus span.jxButtonContent,.jxButtonPressed span.jxButtonContent,.jxButtonPressed:focus span.jxButtonContent{background-position:right -120px;}.jxDisabled .jxButton,.jxDisabled span.jxButtonContent span{cursor:default;}ul.jxToolbar .jxDisabled .jxButton:focus,ul.jxToolbar .jxDisabled .jxButton:active,ul.jxToolbar .jxDisabled .jxButton:hover,ul.jxToolbar .jxDisabled .jxButtonPressed{background-position:left top;}.jxDisabled .jxButton:focus,.jxDisabled .jxButton:active,.jxDisabled .jxButton:hover,.jxDisabled .jxButtonPressed{background-position:left -24px;}ul.jxToolbar .jxDisabled .jxButton:focus span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButton:active span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButton:hover span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonPressed span.jxButtonContent{background-position:right top;}.jxDisabled .jxButton:focus span.jxButtonContent,.jxDisabled .jxButton:active span.jxButtonContent,.jxDisabled .jxButton:hover span.jxButtonContent,.jxDisabled .jxButtonPressed span.jxButtonContent{background-position:right -24px;}ul.jxToolbar .jxDisabled .jxButtonActive:focus,ul.jxToolbar .jxDisabled .jxButtonActive:active,ul.jxToolbar .jxDisabled .jxButtonActive:hover,.jxDisabled .jxButtonActive:focus,.jxDisabled .jxButtonActive:active,.jxDisabled .jxButtonActive:hover{background-position:left -72px;}ul.jxToolbar .jxDisabled .jxButtonActive:focus span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonActive:active span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonActive:hover span.jxButtonContent,.jxDisabled .jxButtonActive:focus span.jxButtonContent,.jxDisabled .jxButtonActive:active span.jxButtonContent,.jxDisabled .jxButtonActive:hover span.jxButtonContent{background-position:right -72px;}img.jxButtonIcon{display:-moz-inline-box;display:inline-block;position:relative;vertical-align:middle;width:16px;height:16px;background-position:center center;background-repeat:no-repeat;}span.jxButtonContent span{display:-moz-inline-box;display:inline-block;position:relative;vertical-align:middle;cursor:pointer;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:16px;height:16px;white-space:nowrap;}span.jxButtonContent span.jxButtonLabel{margin:0;padding:0 4px 0 4px;color:#000;font-size:11px;}.jxDiscloser span.jxButtonContent{padding-right:0;}.jxDiscloser span.jxButtonContent span{padding-right:16px;background-image:url(images/emblems.png);background-position:right -16px;background-repeat:no-repeat;}a.jxButtonDisclose{position:absolute;display:-moz-inline-box;display:inline-block;padding:4px 0;font-size:0;line-height:0;right:2px;top:2px;background-image:url(images/button_multi_disclose.png);background-position:right 0;background-repeat:no-repeat;outline:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;}a.jxButtonDisclose img{width:16px;height:16px;margin:0;padding:0;border:0;background-image:url(images/emblems.png);background-position:right -16px;background-repeat:no-repeat;}a.jxButtonDisclose:focus,a.jxButtonDisclose:active{background-position:right -96px;}a.jxButtonDisclose:hover{background-position:right -48px;}a.jxButtonDisclosePressed{background-position:right -120px;}.jxDisabled a.jxButtonDisclose,.jxDisabled a.jxButtonDisclose:focus,.jxDisabled a.jxButtonDisclose:active,.jxDisabled a.jxButtonDisclose:hover,.jxDisabled a.jxButtonDisclosePressed{cursor:default;background-position:right 0;}ul.jxToolbar .jxButtonHover{background-position:left -24px!important;}ul.jxToolbar .jxButtonHover span.jxButtonContent{background-position:right -24px!important;}.jxFlyout .jxChrome{background-image:url(images/flyout_chrome.png);padding:5px 5px 7px 6px;}.jxFlyout{position:absolute;display:block;z-index:100;margin:0;padding:0;}.jxFlyoutContent{position:relative;display:block;overflow:auto;margin:6px 6px 8px 7px;background-color:#fff;border:1px solid #999;}.jxButtonMulti,.jxButtonMulti span.jxButtonContent{background-image:url(images/button_multi.png);}.jxButtonEditCombo,.jxButtonEditCombo span.jxButtonContent{background-image:url(images/button_combo.png);}.jxButtonMulti span.jxButtonContent span{padding-right:21px;}.jxButtonEditCombo span.jxButtonContent span{font-size:0;}.jxButtonComboDefault span.jxButtonContent span,.jxButtonComboDefault input{font-style:italic;color:#999;}.jxButtonEditCombo input{float:left;line-height:16px;height:16px;padding:0 4px;margin:0;border:none;font-size:11px;font-family:Arial,Helvetica,sans-serif;background-color:transparent;}.jxChrome{position:absolute;display:block;font-size:0;line-height:0;z-index:-1;width:100%;height:100%;top:0;left:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxChromeDrag{opacity:.5;-ms-filter:"Alpha(opacity=50)";}.jxChromeTL{position:absolute;overflow:hidden;left:0;top:0;width:50%;height:50%;}.jxChromeTR{position:absolute;overflow:hidden;left:50%;top:0;width:50%;height:50%;}.jxChromeBL{position:absolute;overflow:hidden;left:0;top:50%;width:50%;height:50%;}.jxChromeBR{position:absolute;overflow:hidden;left:50%;top:50%;width:50%;height:50%;}.jxChromeTL img{position:absolute;top:0;left:0;width:1000px;height:600px;}.jxChromeTR img{position:absolute;top:0;right:0;width:1000px;height:600px;}.jxChromeBL img{position:absolute;bottom:0;left:0;width:1000px;height:600px;}.jxChromeBR img{position:absolute;bottom:0;right:0;width:1000px;height:600px;}.jxColorBar{position:relative;overflow:hidden;}table.jxColorGrid{position:relative;border-collapse:collapse;empty-cells:show;clear:both;padding:0;margin:0;}.jxColorGrid tr{padding:0;margin:0;}.jxColorGrid td{border:1px solid #000;padding:0;margin:0;}.jxColorGrid td.emptyCell{border:0 solid #000;}.jxColorGrid td.emptyCell span{display:block;width:7px;height:7px;line-height:0;font-size:0;border:0 solid #000;padding:1px;margin:0;}.jxColorGrid a.colorSwatch{display:block;width:7px;height:7px;line-height:0;font-size:0;border:0 solid #000;margin:0;padding:1px;}.jxColorGrid a.borderWhite:hover{border:1px solid #fff;padding:0;}.jxColorGrid a.borderBlack:hover{border:1px solid #000;padding:0;}input.jxHexInput{width:55px;vertical-align:middle;}input.jxAlphaInput{width:30px;vertical-align:middle;}div.jxColorPreview{float:left;position:relative;width:20px;height:20px;border:1px solid #000;margin:2px;vertical-align:middle;background-image:url('images/grid.png');overflow:hidden;}.jxButtonFlyout span.jxButtonContent span.jxButtonSwatch{display:block;float:left;width:14px;height:14px;border:1px solid #000;background-image:url('images/grid.png');background-position:0 0;background-repeat:repeat;padding-right:0!important;}.jxButtonFlyout span.jxButtonContent span.jxButtonSwatch span{display:block;width:14px;height:14px;position:absolute;padding-right:0;background:none;}div.jxColorPreview img{position:absolute;z-index:0;}div.jxColorPreview div{width:20px;height:10px;position:absolute;display:block;left:0;z-index:1;font-size:10px;line-height:0;}div.jxColorPreview div.jxColorSelected{top:0;}div.jxColorPreview div.jxColorHover{bottom:0;}label.jxColorLabel,label.jxAlphaLabel{width:auto;font-family:Arial,sans-serif;font-size:11px;line-height:24px;padding:2px;vertical-align:middle;}a.jxColorClose{position:absolute;top:0;right:0;width:16px;height:16px;}a.jxColorClose img{width:16px;height:16px;}.jxClearer{display:block;position:relative;float:none;clear:both;font-size:0;line-height:0;width:0;height:0;margin:0;padding:0;}.jxDisabled{opacity:.4;-ms-filter:"Alpha(opacity=40)";}.jxDisabled *{-ms-filter:"Alpha(opacity=40)";}iframe.jxIframeShim{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;-ms-filter:"Alpha(opacity=0)";z-index:-1;}.jxConfirmQuestion{text-align:center;padding:10px;margin-top:10px;}.jxDialog .jxChrome{background-image:url(images/dialog_chrome.png);}.jxDialog{display:block;z-index:1000;overflow:hidden;}.jxDialogContentContainer{z-index:1;margin:0 11px 13px 12px;border:1px solid #b7b7b7;background-color:#f0f0f0;}.jxDialogModal{position:absolute;display:block;top:0;left:0;width:100%;height:100%;background-color:#000;opacity:.2;-ms-filter:"Alpha(opacity=20)";}.jxDialogContent{display:block;position:relative;overflow:auto;padding:0;z-index:1;}.jxDialogTitle{display:block;position:relative;background-image:url(images/a_pixel.png);text-align:center;height:24px;line-height:24px;z-index:1;margin:6px 6px 0 7px;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxDialogMin .jxDialogTitle{margin-bottom:8px;}.jxDialogMoveable,.jxDialogMoveable .jxDialogLabel{cursor:move;}.jxDialogIcon{position:absolute;left:2px;top:3px;width:16px;height:16px;border:none;padding:0;margin:0;}.jxDialogLabel{font-family:Arial,Helvetica,sans-serif;font-size:11px;font-weight:bold;line-height:21px;color:#000;white-space:nowrap;cursor:default;}.jxDialogResize{position:absolute;bottom:7px;right:6px;width:16px;height:16px;z-index:2;border:0;cursor:se-resize;background-image:url(images/dialog_resize.png);}.jxDialogControls{position:absolute;top:3px;right:2px;height:16px;width:80px;}.jxDialogControls img{background-image:url('images/panel_controls.png');background-repeat:no-repeat;border:0;margin:0;width:16px;height:16px;}.jxDialogClose img{background-position:0 -32px;}.jxDialogMenu img{background-position:0 -48px;}.jxDialogHelp img{background-position:0 -64px;}.jxDialogCollapse img{background-position:0 -16px;}.jxDialogMin .jxDialogCollapse img{background-position:0 0;}.jxDialogMax .jxDialogCollapse img{background-position:0 -16px;}.jxDialogLoading img{border:0;margin:0;width:16px;height:16px;visibility:hidden;position:absolute;top:1px;left:2px;}.jxDialogControls .jxButtonContainer,.jxDialogControls span.jxButtonContent,.jxDialogControls .jxButton:hover span.jxButtonContent,.jxDialogControls .jxButton:active span.jxButtonContent,.jxDialogControls .jxButtonActive span.jxButtonContent,.jxDialogControls .jxButtonActive:hover span.jxButtonContent,.jxDialogControls .jxButtonActive:active span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton:hover span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton:active span.jxButtonContent,.jxDialogControls .jxButton,.jxDialogControls .jxButton:hover,.jxDialogControls .jxButton:active,.jxDialogControls .jxButtonActive,.jxDialogControls .jxButtonActive:hover,.jxDialogControls .jxButtonActive:active,.jxDialogControls .jxDisabled .jxButton,.jxDialogControls .jxDisabled .jxButton:hover,.jxDialogControls .jxDisabled .jxButton:active{padding:0;margin:0;border:none;background-color:transparent;background-image:none;}.jxDialogControls .jxButtonMenu span.jxButtonContent,.jxDialogControls .jxButtonFlyout span.jxButtonContent{background-image:none;}.jxDialogControls .jxButtonMenu span.jxButtonContent span,.jxDialogControls .jxButtonFlyout span.jxButtonContent span{padding-right:0;}.jxDialogControls .jxBarContainer{position:absolute;right:0;background-image:none;background-color:transparent;margin:0;padding:0;border:none;height:16px;}.jxDialogControls .jxBarScroller{left:auto;right:0;}.jxDialogControls ul.jxToolbar{float:right;}.jxDialogControls ul.jxToolbar,.jxDialogControls li.jxToolItem{background-image:none;background-color:transparent;margin:0;padding:0;border:none;}div.jxFileInputs{position:relative;}div.jxFileFake{position:absolute;top:0;left:0;z-index:1;}div.jxFileFake span{float:left;display:block;}div.jxFileFake .jxInputContainer{width:150px;}div.jxFileFake .jxInputText{width:135px;}div.jxFileFake .jxButtonContainer{margin-top:2px;float:left;}.jxInputFile{position:relative;text-align:right;-moz-opacity:0;filter:alpha(opacity:0);opacity:0;z-index:2;margin-top:-5px;height:35px;}.jxForm{display:block;position:relative;overflow:hidden;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxFieldset{display:block;position:relative;overflow:hidden;border:1px solid #ccc;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;-khtml-border-radius:10px;margin:10px;padding:5px;}.jxFieldsetLegend,.jxFieldset legend{position:relative;margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:26px;color:#000;}.jxInputContainer{display:block;position:relative;padding:0;margin:2px;border:none;}.jxInputLabel,.jxInputTag{display:-moz-inline-box;display:inline-block;margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:26px;color:#000;}.jxInputLabel{vertical-align:top;}.jxInputTag{vertical-align:bottom;}.jxInputText,.jxInputPassword,.jxInputTextarea{margin:0 4px;padding:4px;border:1px solid #bbb;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputSelect{margin:0 4px;padding:3px 4px 3px 1px;border:1px solid #bbb;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputText:focus,.jxInputPassword:focus,.jxInputTextarea:focus,.jxInputSelect:focus{border:1px solid #000;}.jxInputRadio,.jxInputCheck{margin:5px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputContainer .jxButtonContainer{padding:0;margin:0 4px;}.jxInputGroup{border:none;padding:0;margin:2px;}.jxInputGroup legend{font-size:0;line-height:0;padding:0;margin:0;border:none;}.jxInputGroup .jxFieldsetLegend{font-size:12px;}.jxInputGroup .jxInputLabel{width:auto;}.jxFieldError .jxInputText,.jxFieldError .jxInputPassword,.jxFieldError .jxInputTextarea,.jxFieldError .jxInputSelect{background-color:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;}.jxFieldSuccess .jxInputText,.jxFieldSuccess .jxInputPassword,.jxFieldSuccess .jxInputTextarea,.jxFieldSuccess .jxInputSelect{background-color:#E6EFC2;color:#264409;border-color:#C6D880;}.jxFieldError .jxInputText:focus,.jxFieldError .jxInputPassword:focus,.jxFieldError .jxInputTextarea:focus,.jxFieldError .jxInputSelect:focus{border-color:#8a1f11;}.jxFieldSuccess .jxInputText:focus,.jxFieldSuccess .jxInputPassword:focus,.jxFieldSuccess .jxInputTextarea:focus,.jxFieldSuccess .jxInputSelect:focus{border-color:#264409;}.jxFieldError .jxInputLabel,.jxFieldError .jxInputTag{color:#8a1f11;}.jxFieldSuccess .jxInputLabel,.jxFieldSuccess .jxInputTag{color:#264409;}.jxFormInline .jxInputContainer,form .jxFormInline .jxInputContainer,form .jxFieldset span.jxFormInline,form.jxForm span.jxFormInline{display:inline;}.jxFormInline .jxInputLabel,form .jxFormInline .jxInputLabel,form span.jxFormInline .jxInputLabel{display:inline;width:auto;}.jxFormInline .jxInputTag,form .jxFormInline .jxInputTag,form span.jxFormInline .jxInputTag{display:inline;}.jxFormInline .jxInputGroup,form .jxFormInline .jxInputGroup{padding-left:0;}.jxFormInline .jxInputGroup .jxFieldsetLegend,form .jxFormInline .jxInputGroup .jxFieldsetLegend{position:relative;left:auto;}.jxFormInline .jxInputGroup .jxInputLabel,form .jxFormInline .jxInputGroup .jxInputLabel{display:inline;width:auto;}.jxFormBlock .jxInputContainer,form .jxFormBlock .jxInputContainer,form .jxFieldset span.jxFormBlock,form.jxform span.jxFormBlock{display:block;}.jxFormBlock .jxInputLabel,form .jxFormBlock .jxInputLabel,form span.jxFormBlock .jxInputLabel{display:block;width:auto;margin-left:4px;}.jxFormBlock .jxInputContainerCheck .jxInputLabel,.jxFormBlock .jxInputContainerRadio .jxInputLabel,form .jxFormBlock .jxInputContainerCheck .jxInputLabel,form .jxFormBlock .jxInputContainerRadio .jxInputLabel,form span.jxFormBlock .jxInputContainerCheck .jxInputLabel,form span.jxFormBlock .jxInputContainerRadio .jxInputLabel{display:-moz-inline-box;display:inline-block;}.jxFormBlock .jxInputGroup,form .jxFormBlock .jxInputGroup{padding-left:0;}.jxFormBlock .jxInputGroup .jxFieldsetLegend,form .jxFormBlock .jxInputGroup .jxFieldsetLegend{position:relative;left:auto;}.jxFormBlock .jxInputGroup .jxInputLabel,form .jxFormBlock .jxInputGroup .jxInputLabel{display:-moz-inline-box;display:inline-block;width:auto;}.jxFormInlineblock .jxInputContainer,form .jxFormInlineblock .jxInputContainer,form .jxFieldset span.jxFormInlineblock,form.jxForm span.jxFormInlineblock{display:block;}.jxFormInlineblock .jxInputLabel,form .jxFormInlineblock .jxInputLabel,form span.jxFormInlineblock .jxInputLabel{display:-moz-inline-box;display:inline-block;width:200px;}.jxFormInlineblock .jxInputGroup,form .jxFormInlineblock .jxInputGroup{padding-left:200px;}.jxFormInlineblock .jxInputGroup .jxFieldsetLegend,form .jxFormInlineblock .jxInputGroup .jxFieldsetLegend{position:absolute;left:-200px;width:200px;}.jxFormInlineblock .jxInputGroup .jxInputLabel,form .jxFormInlineblock .jxInputGroup .jxInputLabel{display:-moz-inline-box;display:inline-block;width:auto;}.jxGridContainer{position:absolute;top:0;left:0;border-left:0 solid #d8d8d8;border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;overflow:hidden;}.jxGridTable{position:relative;table-layout:fixed;border-collapse:collapse;border-style:none;cursor:default;font-family:Arial,Verdana,sans-serif;font-size:11px;font-weight:normal;}.jxGridHeader{width:100%;}.jxGridTableBody{position:relative;table-layout:fixed;border-collapse:collapse;border-style:none;cursor:default;font-family:Arial,Verdana,sans-serif;font-size:11px;font-weight:normal;}.jxGridColHeadHide{height:0;line-height:0;font-size:0;background-color:#fff;white-space:normal;}.jxGridColHeadHide p,.jxGridRowHeadHide p{font-size:0;line-height:0;height:0;margin:0;padding:0;}.jxGridRowHeadHide{width:0;white-space:normal;}.jxGridCell{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;overflow:hidden;}.jxGridCellContent{position:relative;display:-moz-inline-box;display:inline-block;overflow:hidden;padding-left:3px;padding-right:3px;overflow:hidden;white-space:nowrap;cursor:cell;text-overflow:ellipsis;}.jxGridColHead{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;background-color:#f2f2f2;background-image:url('images/table_col.png');background-position:0 0;background-repeat:repeat-x;text-align:center;font-weight:bold;color:#333;cursor:default;padding-left:3px;padding-right:3px;white-space:nowrap;}.jxGridRowHead{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;background-color:#f2f2f2;background-image:url('images/table_row.png');background-position:0 0;background-repeat:repeat-y;text-align:center;font-weight:bold;color:#333;cursor:default;overflow:hidden;white-space:nowrap;}.jxGridRowAll{background-color:#fff;}.jxGridColumnHeaderSelected{background-color:#e1e1e1;background-position:0 -200px;}.jxGridRowHeaderSelected{background-color:#e1e1e1;background-position:-400px 0;}.jxGridColumnSelected{background-color:#f7f7f7;}.jxGridRowSelected td{background-color:#f7f7f7;}td.jxGridCellSelected{background-color:#ebebeb;}.jxGridColumnHeaderPrelight{background-color:#cee5ff;background-position:0 -300px;}.jxGridRowHeaderPrelight{background-color:#cee5ff;background-position:-600px 0;}.jxGridColumnPrelight{background-color:#e5f1ff;}.jxGridRowPrelight td{background-color:#e5f1ff;}td.jxGridCellPrelight{background-color:#cce3ff;}.jxColSortable{padding-right:20px;}.jxGridCell.jxColSortable{padding-right:0;}.jxColSortable span{background-image:url('images/emblems.png');padding-right:20px;background-repeat:no-repeat;background-position:right top;}.jxGridColumnSortedAsc span{background-position:right -160px;}.jxGridColumnSortedDesc span{background-position:right -16px;}.jxGridColumnResize,.jxGridRowResize{display:block;position:absolute;background-image:url(images/a_pixel.png);z-index:1;}.jxGridColumnResize{right:0;top:0;height:100%;width:4px;cursor:col-resize;}.jxGridRowResize{left:0;bottom:0;height:4px;width:100%;cursor:row-resize;}.jxListView .jxListItemContainer{position:relative;display:block;outline:none;overflow:hidden;border:none;margin:0 1px;padding:0;}.jxListItem{position:relative;display:block;cursor:pointer;outline:none;overflow:hidden;border:none;margin:0 1px;padding:0;z-index:0;font-family:Arial,Helvetica,sans-serif;font-size:11px;color:#000;text-decoration:none;line-height:20px;height:20px;}.jxListView .jxHover{margin:0;border-left:1px solid #CDDFFD;border-right:1px solid #CDDFFD;background-image:url(images/listitem.png);background-repeat:repeat-x;background-color:#CDE5FF;background-position:left -24px;}.jxListItem:focus{margin:0;border-left:1px dotted #75ADFF;border-right:1px dotted #75ADFF;background-image:url(images/listitem.png);background-repeat:repeat-x;background-position:left -72px;}.jxListView .jxPressed,.jxListView .jxSelected{margin:0;border-left:1px solid #8AABFB;border-right:1px solid #8AABFB;background-color:#CDE5FF;background-image:url(images/listitem.png);background-repeat:repeat-x;background-position:left -48px;}.jxMenuContainer .jxChrome{background-image:url(images/flyout_chrome.png);padding:5px 5px 7px 6px;}.jxButtonMenu span.jxMenuItemSpan{padding-right:16px;}.jxMenuContainer{position:absolute;top:0;left:-10000px;display:none;z-index:2000;padding:0;}ul.jxMenu{display:block;position:relative;list-style-type:none;padding:1px;margin:6px 6px 8px 7px;background-color:#fff;border:1px solid #999;}li.jxMenuItemContainer{display:block;position:relative;font-size:0;line-height:0;margin:0;padding:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}a.jxMenuItem{display:block;position:relative;overflow:hidden;text-decoration:none;cursor:pointer;outline:none;border:1px solid #fff;background-image:url(images/menuitem.png);background-repeat:no-repeat;background-position:left top;font-family:Arial,Helvetica,sans-serif;font-size:11px;text-decoration:none;margin:0;padding:0;color:#000;}a.jxMenuItemActive{background-position:left -98px;}a.jxMenuItem:focus{background-position:left -74px;}a.jxMenuItem:focus span.jxMenuItemContent{border-right:1px dotted #75ADFF;}a.jxMenuItemActive:focus{background-position:left -170px;}a.jxMenuItem:hover{background-color:#CDE5FF;background-position:left -26px;}a.jxMenuItem:hover span.jxMenuItemContent{border-right:1px solid #C5E0FF;}a.jxMenuItemActive:hover{background-position:left -122px;}a.jxMenuItemPressed,a.jxMenuItemPressed:hover{background-color:#CDE5FF;background-position:left -50px;}.jxDisabled a.jxMenuItem,.jxDisabled span.jxMenuItemContent span{cursor:default;}.jxDisabled a.jxMenuItem:focus,.jxDisabled a.jxMenuItemPressed,.jxDisabled a.jxMenuItemPressed:hover,.jxDisabled a.jxMenuItem:hover{background-color:#fff;background-position:left top;border-right:1px solid #fff;}.jxDisabled a.jxMenuItem:hover span.jxMenuItemContent{border-right:1px solid #fff;}span.jxMenuItemContent{display:block;position:relative;font-family:Arial,Helvetica,sans-serif;font-size:0;line-height:0;white-space:nowrap;padding:0 20px 0 0;margin:0;border-right:1px solid #fff;}.jxButtonSubMenu span.jxMenuItemContent,.jxButtonSubMenu:hover span.jxMenuItemContent{background-image:url(images/emblems.png);background-position:right -30px;background-repeat:no-repeat;}img.jxMenuItemIcon{position:absolute;top:2px;left:2px;width:16px;height:16px;background-position:left center;background-repeat:no-repeat;}span.jxMenuItemContent span{display:block;position:relative;cursor:pointer;margin:0;padding:2px 0 2px 22px;font-size:16px;line-height:16px;color:#000;}span.jxMenuItemContent span.jxMenuItemLabel{color:#000;font-size:11px;}.jxMenuItemToggle img.jxMenuItemIcon,.jxMenuItemToggleSet img.jxMenuItemIcon{background-image:url(images/emblems.png);background-position:2px 0;background-repeat:no-repeat;}.jxMenuItemToggle a.jxMenuItemActive img.jxMenuItemIcon{background-position:2px -48px;}.jxMenuItemToggleSet a.jxMenuItemActive img.jxMenuItemIcon{background-position:2px -64px;}ul.jxMenu span.jxMenuSeparator{display:block;font-size:10px;line-height:10px;background-image:url(images/toolbar_separator_v.png);background-repeat:repeat-x;background-position:left center;}.jxMessage{text-align:center;padding:10px;margin-top:10px;}.jxNoticeListContainer{border:none;padding:0;margin:0;font-size:0;line-height:0;z-index:500;}.jxNoticeList{position:relative;}.jxNoticeItemContainer{position:relative;overflow:hidden;}.jxNoticeItemContainer .jxChrome{background-image:url(images/flyout_chrome.png);padding:5px 5px 7px 6px;}.jxHasChrome .jxNoticeItem{margin:6px 6px 8px 7px;}.jxNoticeItem{position:relative;border:2px solid #ccc;margin:0;padding:0;background-color:#f8f8f8;background-image:url(images/notice.png);background-repeat:repeat-x;background-position:left bottom;}.jxNoticeIcon{position:absolute;top:0;left:0;margin:6px;width:16px;height:16px;background-image:url(images/icons.png);background-repeat:no-repeat;background-position:0 0;}.jxNotice{display:block;position:relative;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;color:#666;margin:0;border:none;padding:6px 26px 6px 10px;}.jxNoticeError .jxNoticeItem{background-color:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;background-image:url(images/notice_error.png);}.jxNoticeWarning .jxNoticeItem{background-color:#FFF6BF;color:#514721;border-color:#FFD324;background-image:url(images/notice_warning.png);}.jxNoticeSuccess .jxNoticeItem{background-color:#E6EFC2;color:#264409;border-color:#C6D880;background-image:url(images/notice_success.png);}.jxNoticeError .jxNotice{color:#8a1f11;padding-left:28px;}.jxNoticeWarning .jxNotice{color:#514721;padding-left:28px;}.jxNoticeSuccess .jxNotice{color:#264409;padding-left:28px;}.jxNoticeInfo .jxNotice{padding-left:28px;}.jxNoticeError .jxNoticeIcon{background-position:0 -32px;}.jxNoticeWarning .jxNoticeIcon{background-position:0 -16px;}.jxNoticeSuccess .jxNoticeIcon{background-position:0 -48px;}.jxNoticeInfo .jxNoticeIcon{background-position:0 -64px;}.jxNoticeClose{position:absolute;top:0;right:0;margin:6px;width:16px;height:16px;background-image:url(images/tab_close.png);background-position:0 0;background-repeat:no-repeat;}.jxPanel{display:block;position:relative;}.jxPanelContentContainer{overflow:hidden;background-color:#f0f0f0;}.jxPanelContent{position:relative;display:block;overflow:auto;background-color:#fff;margin:0;padding:0;}.jxPanelTitle{display:block;position:relative;background-image:url(images/panelbar.png);background-repeat:repeat-x;background-position:left top;height:22px;margin:0;padding:0;text-align:center;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxPanelBar{position:absolute;line-height:1px;width:100%;height:5px;cursor:row-resize;background-color:#f0f0f0;z-index:2;}.jxPanelIcon{position:absolute;left:2px;top:3px;width:16px;height:16px;border:none;padding:0;margin:0;}.jxPanelLabel{padding-left:25px;font-family:Arial,Helvetica,sans-serif;font-size:11px;font-weight:bold;line-height:21px;color:#000;white-space:nowrap;}.jxPanelControls{position:absolute;top:3px;right:2px;height:16px;width:80px;overflow:hidden;}.jxPanelControls img{background-image:url('images/panel_controls.png');background-repeat:no-repeat;border:0;margin:0;width:16px;height:16px;}.jxPanelClose img{background-position:0 -32px;}.jxPanelMenu img{background-position:0 -48px;}.jxPanelHelp img{background-position:0 -64px;}.jxPanelCollapse img{background-position:0 -16px;}.jxPanelMin .jxPanelCollapse img{background-position:0 0;}.jxPanelMax .jxPanelCollapse img{background-position:0 -16px;}.jxPanelMaximize img{background-position:0 0;}.jxPanelLoading img{border:0;margin:0;width:16px;height:16px;visibility:hidden;position:absolute;top:1px;left:2px;}.jxPanelControls .jxButtonContainer,.jxPanelControls span.jxButtonContent,.jxPanelControls .jxButton:hover span.jxButtonContent,.jxPanelControls .jxButton:active span.jxButtonContent,.jxPanelControls .jxButtonActive span.jxButtonContent,.jxPanelControls .jxButtonActive:hover span.jxButtonContent,.jxPanelControls .jxButtonActive:active span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton:hover span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton:active span.jxButtonContent,.jxPanelControls .jxButton,.jxPanelControls .jxButton:hover,.jxPanelControls .jxButton:active,.jxPanelControls .jxButtonActive,.jxPanelControls .jxButtonActive:hover,.jxPanelControls .jxButtonActive:active,.jxPanelControls .jxDisabled .jxButton,.jxPanelControls .jxDisabled .jxButton:hover,.jxPanelControls .jxDisabled .jxButton:active{padding:0;margin:0;border:none;background-color:transparent;background-image:none;}.jxPanelControls .jxButtonMenu span.jxButtonContent,.jxPanelControls .jxButtonFlyout span.jxButtonContent{background-image:none;}.jxPanelControls .jxButtonMenu span.jxButtonContent span,.jxPanelControls .jxButtonFlyout span.jxButtonContent span{padding-right:0;}.jxPanelControls div.jxBarTop{position:absolute;right:0;background-image:none;background-color:transparent;margin:0;padding:0;border:none;height:16px;}.jxPanelControls .jxBarScroller{left:auto;right:0;}.jxPanelControls ul.jxToolbar{float:right;}.jxPanelControls ul.jxToolbar,.jxPanelControls li.jxToolItem{background-image:none;background-color:transparent;margin:0;padding:0;border:none;}.jxProgressBar-container{width:100%;display:block;clear:both;}.jxProgressBar-message{color:black;}.jxProgressBar-container .jxProgressBar{width:100%;clear:both;border-top:none;}.jxProgressBar-container .jxProgressBar .jxProgressBar-outline{border:1px solid #360;position:absolute;top:0;left:0;z-index:10;}.jxProgressBar-container .jxProgressBar .jxProgressBar-fill{background-color:#9c6;position:absolute;top:1px;left:1px;z-index:20;}.jxProgressBar-container .jxProgressBar .jxProgressBar-text{color:#360;margin:0;padding:2px;position:absolute;top:1px;left:1px;width:auto;z-index:30;border:none;}.jxSliderContainer{width:100%;height:10px;border:1px solid black;}.jxSliderKnob{width:10px;height:10px;background-color:black;cursor:pointer;}.jxSplitterMask{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;background-image:url(images/a_pixel.png);z-index:1;}.jxSplitBarHorizontal{display:block;position:absolute;font-size:0;line-height:0;margin:0;padding:0;border:none;width:5px;height:100%;cursor:col-resize;background-color:#f0f0f0;z-index:2;}.jxSplitBarVertical{display:block;position:absolute;font-size:0;line-height:0;margin:0;padding:0;border:none;width:100%;height:5px;cursor:row-resize;background-color:#f0f0f0;z-index:2;}.jxSplitContainer{display:block;position:relative;margin:0;padding:0;border:none;overflow:hidden;}.jxSplitArea{display:block;position:absolute;margin:0;padding:0;border:none;z-index:0;}.jxSplitBarDrag{background-color:#eee;}.jxSnapHorizontalBefore{width:5px;height:5px;position:absolute;top:0;left:0;background-color:#aaa;}.jxSnapHorizontalAfter{width:5px;height:5px;position:absolute;top:0;left:0;background-color:#aaa;}.jxTabSetContainer{position:relative;display:-moz-inline-box;display:inline-block;overflow:hidden;width:200px;height:200px;margin:0;padding:0;background-color:#fff;}.jxTabSetContainer .jxToolbarContainer{z-index:auto;}.tabContent{display:none;position:relative;width:100%;height:100%;overflow:auto;}.tabContentActive{display:block;}span.jxTabContainer{display:block;position:relative;margin:0;padding:2px;border:none;}a.jxTab{display:-moz-inline-box;display:inline-block;position:relative;cursor:pointer;user-select:none;-moz-user-select:none;-khtml-user-select:none;margin:0;padding:0;border:none;background-repeat:no-repeat;text-decoration:none;outline:none;}span.jxTabContent{display:-moz-inline-box;display:inline-block;font-size:0;line-height:0;margin:0;padding:0;border:none;background-repeat:no-repeat;}img.jxTabIcon{display:-moz-inline-box;display:inline-block;position:relative;width:16px;height:16px;background-position:center center;background-repeat:no-repeat;}span.jxTabLabel{display:-moz-inline-box;display:inline-block;position:relative;cursor:pointer;margin:0;padding:0;color:#000;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:16px;}a.jxTabClose{display:block;position:absolute;cursor:pointer;outline:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;width:16px;height:16px;background-image:url(images/tab_close.png);background-position:0 0;background-repeat:no-repeat;}.jxDisabled a.jxTab,.jxDisabled span.jxTabContent span,.jxDisabled a.jxTabClose{cursor:default;}.jxBarTop a.jxTab,.jxBarTop span.jxTabContent{background-image:url(images/tab_top.png);}.jxBarBottom a.jxTab,.jxBarBottom span.jxTabContent{background-image:url(images/tab_bottom.png);}.jxBarTop a.jxTabClose,.jxBarBottom a.jxTabClose{top:5px;right:5px;}.jxBarTop .jxTabClose span.jxTabContent,.jxBarBottom .jxTabClose span.jxTabContent{padding-right:16px;}.jxBarTop a.jxTab,.jxBarBottom a.jxTab{padding-left:4px;background-position:left -24px;}.jxBarTop span.jxTabContent,.jxBarBottom span.jxTabContent{padding:4px 4px 4px 0;background-position:right -24px;}.jxBarTop a.jxTabActive,.jxBarBottom a.jxTabActive{background-position:left -72px;}.jxBarTop a.jxTabActive span.jxTabContent,.jxBarBottom a.jxTabActive span.jxTabContent{background-position:right -72px;}.jxBarTop a.jxTab:focus,.jxBarBottom a.jxTab:focus{background-position:left -96px;}.jxBarTop a.jxTab:focus span.jxTabContent,.jxBarBottom a.jxTab:focus span.jxTabContent{background-position:right -96px;}.jxBarTop a.jxTabActive:focus,.jxBarBottom a.jxTabActive:focus{background-position:left -144px;}.jxBarTop a.jxTabActive:focus span.jxTabContent,.jxBarBottom a.jxTabActive:focus span.jxTabContent{background-position:right -144px;}.jxBarTop a.jxTab:hover,.jxBarTop a.jxTabActive:hover,.jxBarBottom a.jxTab:hover,.jxBarBottom a.jxTabActive:hover{background-position:left -48px;}.jxBarTop a.jxTab:hover span.jxTabContent,.jxBarTop a.jxTabActive:hover span.jxTabContent,.jxBarBottom a.jxTab:hover span.jxTabContent,.jxBarBottom a.jxTabActive:hover span.jxTabContent{background-position:right -48px;}.jxBarTop a.jxTabPressed,.jxBarTop a.jxTabPressed:focus,.jxBarBottom a.jxTabPressed,.jxBarBottom a.jxTabPressed:focus{background-position:left -120px;}.jxBarTop a.jxTabPressed span.jxTabContent,.jxBarTop a.jxTabPressed:focus span.jxTabContent,.jxBarBottom a.jxTabPressed span.jxTabContent,.jxBarBottom a.jxTabPressed:focus span.jxTabContent{background-position:right -120px;}.jxBarTop .jxDisabled a.jxTab:focus,.jxBarTop .jxDisabled a.jxTab:active,.jxBarTop .jxDisabled a.jxTab:hover,.jxBarTop .jxDisabled a.jxTabPressed,.jxBarBottom .jxDisabled a.jxTab:focus,.jxBarBottom .jxDisabled a.jxTab:active,.jxBarBottom .jxDisabled a.jxTab:hover,.jxBarBottom .jxDisabled a.jxTabPressed{background-position:left -24px;}.jxBarTop .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarTop .jxDisabled a.jxTab:active span.jxTabContent,.jxBarTop .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarTop .jxDisabled a.jxTabPressed span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:active span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabPressed span.jxTabContent{background-position:right -24px;}.jxBarTop .jxDisabled a.jxTabActive:focus,.jxBarTop .jxDisabled a.jxTabActive:active,.jxBarTop .jxDisabled a.jxTabActive:hover,.jxBarBottom .jxDisabled a.jxTabActive:focus,.jxBarBottom .jxDisabled a.jxTabActive:active,.jxBarBottom .jxDisabled a.jxTabActive:hover{background-position:left -72px;}.jxBarTop .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarTop .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarTop .jxDisabled a.jxTabActive:hover span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:hover span.jxTabContent{background-position:right -72px;}.jxBarTop img.jxTabIcon,.jxBarBottom img.jxTabIcon{vertical-align:middle;}.jxBarTop span.jxTabLabel,.jxBarBottom span.jxTabLabel{vertical-align:middle;height:16px;padding:0 4px 0 4px;}.jxBarLeft a.jxTab,.jxBarLeft span.jxTabContent{background-image:url(images/tab_left.png);}.jxBarRight a.jxTab,.jxBarRight span.jxTabContent{background-image:url(images/tab_right.png);}.jxBarLeft a.jxTabClose,.jxBarRight a.jxTabClose{top:5px;left:5px;}.jxBarLeft .jxTabClose span.jxTabContent,.jxBarRight .jxTabClose span.jxTabContent{padding-top:16px;}.jxBarLeft a.jxTab,.jxBarRight a.jxTab{padding-top:4px;background-position:-24px top;}.jxBarLeft span.jxTabContent,.jxBarRight span.jxTabContent{padding:0 4px 4px 4px;background-position:-24px bottom;}.jxBarLeft a.jxTabActive,.jxBarRight a.jxTabActive{background-position:-72px top;}.jxBarLeft a.jxTabActive span.jxTabContent,.jxBarRight a.jxTabActive span.jxTabContent{background-position:-72px bottom;}.jxBarLeft a.jxTab:focus,.jxBarRight a.jxTab:focus{background-position:-96px top;}.jxBarLeft a.jxTab:focus span.jxTabContent,.jxBarRight a.jxTab:focus span.jxTabContent{background-position:-96px bottom;}.jxBarLeft a.jxTabActive:focus,.jxBarRight a.jxTabActive:focus{background-position:-144px top;}.jxBarLeft a.jxTabActive:focus span.jxTabContent,.jxBarRight a.jxTabActive:focus span.jxTabContent{background-position:-144px bottom;}.jxBarLeft a.jxTab:hover,.jxBarLeft a.jxTabActive:hover,.jxBarRight a.jxTab:hover,.jxBarRight a.jxTabActive:hover{background-position:-48px top;}.jxBarLeft a.jxTab:hover span.jxTabContent,.jxBarLeft a.jxTabActive:hover span.jxTabContent,.jxBarRight a.jxTab:hover span.jxTabContent,.jxBarRight a.jxTabActive:hover span.jxTabContent{background-position:-48px bottom;}.jxBarLeft a.jxTabPressed,.jxBarLeft a.jxTabPressed:focus,.jxBarRight a.jxTabPressed,.jxBarRight a.jxTabPressed:focus{background-position:-120px top;}.jxBarLeft a.jxTabPressed span.jxTabContent,.jxBarLeft a.jxTabPressed:focus span.jxTabContent,.jxBarRight a.jxTabPressed span.jxTabContent,.jxBarRight a.jxTabPressed:focus span.jxTabContent{background-position:-120px bottom;}.jxBarLeft .jxDisabled a.jxTab:focus,.jxBarLeft .jxDisabled a.jxTab:active,.jxBarLeft .jxDisabled a.jxTab:hover,.jxBarLeft .jxDisabled a.jxTabPressed,.jxBarRight .jxDisabled a.jxTab:focus,.jxBarRight .jxDisabled a.jxTab:active,.jxBarRight .jxDisabled a.jxTab:hover,.jxBarRight .jxDisabled a.jxTabPressed{background-position:-24px top;}.jxBarLeft .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarLeft .jxDisabled a.jxTab:active span.jxTabContent,.jxBarLeft .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabPressed span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:active span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarRight .jxDisabled a.jxTabPressed span.jxTabContent{background-position:-24px bottom;}.jxBarLeft .jxDisabled a.jxTabActive:focus,.jxBarLeft .jxDisabled a.jxTabActive:active,.jxBarLeft .jxDisabled a.jxTabActive:hover,.jxBarRight .jxDisabled a.jxTabActive:focus,.jxBarRight .jxDisabled a.jxTabActive:active,.jxBarRight .jxDisabled a.jxTabActive:hover{background-position:-72px top;}.jxBarLeft .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabActive:hover span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:hover span.jxTabContent{background-position:-72px bottom;}.jxBarLeft span.jxTabLabel,.jxBarRight span.jxTabLabel{padding:4px 0 4px 0;}.jxBarContainer{display:block;position:relative;z-index:1;overflow:hidden;margin:0;padding:0;border:0;background-color:#f0f0f0;}.jxBarTop,.jxBarBottom{width:100%;height:28px;background-image:url(images/toolbar.png);background-repeat:repeat-x;background-position:0 0;overflow:hidden;}.jxTabBox .jxTabBarTop{background-image:url(images/tabbar.png);background-position:0 bottom;}.jxTabBox .jxTabBarBottom{background-image:url(images/tabbar_bottom.png);background-position:0 top;}.jxBarLeft,.jxBarRight{width:auto;height:100%;background-image:url(images/toolbar.png);background-repeat:repeat-x;background-position:0 0;float:left;overflow:hidden;}.jxTabBox .jxTabBarLeft{background-image:url(images/tabbar_left.png);background-repeat:repeat-y;background-position:right 0;}.jxTabBox .jxTabBarRight{background-image:url(images/tabbar_right.png);background-repeat:repeat-y;background-position:left 0;}.jxBarTop .jxBarScroller,.jxBarBottom .jxBarScroller{position:absolute;width:10000%;overflow:hidden;}.jxBarTop .jxBarScrollLeft,.jxBarBottom .jxBarScrollLeft{position:absolute;top:0;left:0;}.jxBarTop .jxBarScrollRight,.jxBarBottom .jxBarScrollRight{position:absolute;top:0;right:0;}.jxBarTop .jxBarScrollLeft img.jxButtonIcon,.jxBarBottom .jxBarScrollLeft img.jxButtonIcon{background-image:url(images/emblems.png);background-position:0 -80px;}.jxBarTop .jxBarScrollRight img.jxButtonIcon,.jxBarBottom .jxBarScrollRight img.jxButtonIcon{background-image:url(images/emblems.png);background-position:0 -96px;}ul.jxToolbar,ul.jxTabBar{display:block;position:relative;float:left;list-style-type:none;margin:0;padding:0;border:none;}li.jxToolItem{display:block;position:relative;float:left;font-size:0;line-height:0;padding:0;margin:0;border:none;}li.jxToolItem span.jxBarSeparator{display:block;position:relative;float:left;font-size:0;line-height:0;border:0;margin:0;padding:4px;background-repeat:no-repeat;background-position:center center;}.jxBarTop li.jxToolItem span.jxBarSeparator,.jxBarBottom li.jxToolItem span.jxBarSeparator{width:8px;height:20px;background-image:url(images/toolbar_separator_h.png);}.jxBarLeft li.jxToolItem span.jxBarSeparator,.jxBarRight li.jxToolItem span.jxBarSeparator{width:20px;height:8px;background-image:url(images/toolbar_separator_v.png);}.jxBarLeft ul.jxToolbar,.jxBarLeft ul.jxTabBar,.jxBarLeft li.jxToolItem,.jxBarRight ul.jxToolbar,.jxBarRight ul.jxTabBar,.jxBarRight li.jxToolItem{clear:both;}.jxTooltip{width:auto;height:auto;background-color:black;color:white;padding:5px;z-index:65536;}.jxTree,.jxTreeRoot{position:relative;display:block;list-style:none;margin:0;padding:0;}.jxTreeNest{list-style:none;margin:0;padding:0;background-repeat:repeat-y;background-position:left top;}li.jxTreeContainer{position:relative;display:block;margin:0;padding:0;background-repeat:no-repeat;background-position:left top;white-space:nowrap;font-size:0;line-height:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxTree li.jxTreeContainer{margin-left:16px;}a.jxTreeItem{position:relative;display:block;cursor:pointer;outline:none;overflow:hidden;background-image:url(images/tree_hover.png);background-repeat:repeat-x;background-position:left top;border:none;margin:0 1px 0 17px;padding:0 0 0 20px;z-index:0;font-family:Arial,Helvetica,sans-serif;font-size:11px;color:#000;text-decoration:none;line-height:20px;height:20px;}a.jxTreeItem:focus{border-left:1px dotted #75ADFF;border-right:1px dotted #75ADFF;margin:0 0 0 16px;background-position:left -72px;}a.jxTreeItem:hover,li.jxTreeContainer a.jxHover{border-left:1px solid #CDDFFD;border-right:1px solid #CDDFFD;margin:0 0 0 16px;background-color:#CDE5FF;background-position:left -24px;}li.jxTreeContainer a.jxSelected,li.jxTreeContainer a.jxSelected:hover,li.jxTreeContainer a.jxPressed,li.jxTreeContainer a.jxPressed:hover{border-left:1px solid #8AABFB;border-right:1px solid #8AABFB;margin:0 0 0 16px;background-color:#CDE5FF;background-position:left -48px;}li.jxDisabled a.jxTreeItem{cursor:default;}li.jxDisabled a.jxTreeItem:focus,li.jxDisabled a.jxTreeItem:hover{background-position:left top;background-color:transparent;border:none;margin:0 1px 0 17px;}.jxTreeNest{background-image:url(images/tree_vert_line.png);}img.jxTreeImage,img.jxTreeIcon{position:absolute;display:inline;left:0;top:0;width:16px;height:20px;z-index:1;background-image:url(images/tree.png);background-repeat:no-repeat;border:0;margin:0;}img.jxTreeIcon{height:16px;top:2px;left:1px;}.jxTreeBranchOpen .jxTreeIcon,.jxTreeBranchLastOpen .jxTreeIcon{background-position:left -40px;}.jxTreeBranchOpen .jxTreeImage{background-position:left -100px;}.jxTreeBranchLastOpen .jxTreeImage{background-position:left -160px;}.jxTreeBranchClosed .jxTreeIcon,.jxTreeBranchLastClosed .jxTreeIcon{background-position:left -20px;}.jxTreeBranchClosed .jxTreeImage{background-position:left -80px;}.jxTreeBranchLastClosed .jxTreeImage{background-position:left -140px;}.jxTreeLeaf .jxTreeIcon,.jxTreeLeafLast .jxTreeIcon{background-position:left 0;}.jxTreeLeaf .jxTreeImage{background-position:left -60px;}.jxTreeLeafLast .jxTreeImage{background-position:left -120px;}a.jxTreeItem,img.jxTreeImage,img.jxTreeIcon,span.jxTreeLabel,.jxTreeItemContainer input{vertical-align:middle;}.jxFileUploadPanel{padding:5px;}.jxFileUploadPanel .jxInputContainer{width:300px;}.jxUploadQueue{width:100%;margin-top:10px;}.jxUploadQueue div{position:relative;width:95%;clear:both;border-top:1px solid black;padding:2px;}.jxUploadQueue div span{display:block;}.jxUploadQueue div span.jxUploadFileName{float:left;font-size:16px;}.jxUploadQueue div span.jxUploadFileDelete,.jxUploadQueue div span.jxUploadFileProgress,.jxUploadQueue div span.jxUploadFileComplete,.jxUploadQueue div span.jxUploadFileError{float:right;width:16px;height:16px;background-repeat:no-repeat;background-position:top left;cursor:pointer;}.jxUploadQueue div span.jxUploadFileDelete{background-image:url('images/delete.gif');}.jxUploadQueue div span.jxUploadFileProgress{background-image:url('images/loading.gif');}.jxUploadQueue div span.jxUploadFileComplete{background-image:url('images/green_tick.png');}.jxUploadQueue div span.jxUploadFileError{background-image:url('images/error.png');}.jxUploadFileErrorTip{padding:4px 4px 4px 20px;border:2px solid #ddd;background:url("images/error.png") no-repeat left top;color:black;width:100px;}
\ No newline at end of file

Modified: sandbox/jxlib-3.0/templates/mapguide/standard/themes/crispin/jxtheme.uncompressed.css
===================================================================
--- sandbox/jxlib-3.0/templates/mapguide/standard/themes/crispin/jxtheme.uncompressed.css	2009-11-24 20:05:41 UTC (rev 1987)
+++ sandbox/jxlib-3.0/templates/mapguide/standard/themes/crispin/jxtheme.uncompressed.css	2009-11-24 20:11:06 UTC (rev 1988)
@@ -13,7 +13,7 @@
 h1,h2,h3,h4,h5,h6{font-size:100%;}
 q:before,q:after{content:'';}/**
  * @project         Jx
- * @revision        $Id: button.css 507 2009-08-06 19:19:14Z fred.warnock $
+ * @revision        $Id: button.css 593 2009-11-09 20:29:54Z fred.warnock $
  * @author          Fred Warnock (fwarnock at dmsolutions.ca)
  * @copyright       (c) 2006 DM Solutions Group Inc.
  */
@@ -253,19 +253,11 @@
 /* JX BUTTON EXTENSION STYLES */
 /* ========================== */
 
-.jxButtonMenu span.jxButtonContent,
-.jxButtonMulti span.jxButtonContent,
-.jxButtonFlyout span.jxButtonContent,
-.jxButtonCombo span.jxButtonContent,
-.jxButtonEditCombo span.jxButtonContent {
+.jxDiscloser span.jxButtonContent {
   padding-right: 0px;
 }
 
-.jxButtonMenu span.jxButtonContent span,
-.jxButtonFlyout span.jxButtonContent span,
-.jxButtonMulti span.jxButtonContent span,
-.jxButtonCombo span.jxButtonContent span,
-.jxButtonEditCombo span.jxButtonContent span {
+.jxDiscloser span.jxButtonContent span {
   padding-right: 16px;
   background-image: url(images/emblems.png);
   background-position: right -16px;
@@ -992,7 +984,7 @@
     height: 35px;
 }/**
  * @project         Jx
- * @revision        $Id: form.css 570 2009-10-28 15:32:02Z fred.warnock $
+ * @revision        $Id: form.css 615 2009-11-19 22:01:38Z fred.warnock $
  * @author          Fred Warnock (fwarnock at dmsolutions.ca)
  * @copyright       (c) 2006 DM Solutions Group Inc.
  */
@@ -1150,45 +1142,45 @@
 
 /* Field Validation */
 
-.jxFieldInvalid .jxInputText,
-.jxFieldInvalid .jxInputPassword,
-.jxFieldInvalid .jxInputTextarea,
-.jxFieldInvalid .jxInputSelect {
+.jxFieldError .jxInputText,
+.jxFieldError .jxInputPassword,
+.jxFieldError .jxInputTextarea,
+.jxFieldError .jxInputSelect {
   background-color: #FBE3E4; 
   color: #8a1f11; 
   border-color: #FBC2C4;
 }
 
-.jxFieldValidated .jxInputText,
-.jxFieldValidated .jxInputPassword,
-.jxFieldValidated .jxInputTextarea,
-.jxFieldValidated .jxInputSelect {
+.jxFieldSuccess .jxInputText,
+.jxFieldSuccess .jxInputPassword,
+.jxFieldSuccess .jxInputTextarea,
+.jxFieldSuccess .jxInputSelect {
   background-color: #E6EFC2; 
   color: #264409; 
   border-color: #C6D880;
 }
 
-.jxFieldInvalid .jxInputText:focus,
-.jxFieldInvalid .jxInputPassword:focus,
-.jxFieldInvalid .jxInputTextarea:focus,
-.jxFieldInvalid .jxInputSelect:focus {
+.jxFieldError .jxInputText:focus,
+.jxFieldError .jxInputPassword:focus,
+.jxFieldError .jxInputTextarea:focus,
+.jxFieldError .jxInputSelect:focus {
   border-color: #8a1f11;
 }
 
-.jxFieldValidated .jxInputText:focus,
-.jxFieldValidated .jxInputPassword:focus,
-.jxFieldValidated .jxInputTextarea:focus,
-.jxFieldValidated .jxInputSelect:focus {
+.jxFieldSuccess .jxInputText:focus,
+.jxFieldSuccess .jxInputPassword:focus,
+.jxFieldSuccess .jxInputTextarea:focus,
+.jxFieldSuccess .jxInputSelect:focus {
   border-color: #264409;
 }
 
-.jxFieldInvalid .jxInputLabel,
-.jxFieldInvalid .jxInputTag {
+.jxFieldError .jxInputLabel,
+.jxFieldError .jxInputTag {
   color: #8a1f11; 
 }
 
-.jxFieldValidated .jxInputLabel,
-.jxFieldValidated .jxInputTag {
+.jxFieldSuccess .jxInputLabel,
+.jxFieldSuccess .jxInputTag {
   color: #264409; 
 }
 
@@ -1622,8 +1614,8 @@
 
 .jxListView .jxHover {
     margin: 0px;
-    border-left: 1px solid #C5E0FF;
-    border-right: 1px solid #C5E0FF;
+    border-left: 1px solid #CDDFFD;
+    border-right: 1px solid #CDDFFD;
     background-image: url(images/listitem.png);
     background-repeat: repeat-x;
     background-color: #CDE5FF;
@@ -1640,28 +1632,19 @@
     background-position: left -72px;
 }
 
-.jxListView .jxPressed {
+.jxListView .jxPressed,
+.jxListView .jxSelected {
   margin: 0px;
-  border-left: 1px solid #C5E0FF;
-  border-right: 1px solid #C5E0FF;
+  border-left: 1px solid #8AABFB;
+  border-right: 1px solid #8AABFB;
   background-color: #CDE5FF;
   background-image: url(images/listitem.png);
   background-repeat: repeat-x;
   background-position: left -48px;
 }
-
-
-.jxListView .jxSelected {
-    margin: 0px;
-    border-left: 1px solid #C5E0FF;
-    border-right: 1px solid #C5E0FF;
-    background-color: #CDE5FF;
-    background-image: url(images/listitem.png);
-    background-repeat: repeat-x;
-    background-position: left -48px;
-}/**
+/**
  * @project         Jx
- * @revision        $Id: menu.css 321 2009-04-06 18:23:39Z fred.warnock $
+ * @revision        $Id: menu.css 601 2009-11-10 18:44:35Z fred.warnock $
  * @author          Fred Warnock (fwarnock at dmsolutions.ca)
  * @copyright       (c) 2006 DM Solutions Group Inc.
  */
@@ -1855,7 +1838,7 @@
 }
 
 .jxMenuItemToggle img.jxMenuItemIcon,
-.jxMenuItemSet img.jxMenuItemIcon {
+.jxMenuItemToggleSet img.jxMenuItemIcon {
   background-image: url(images/emblems.png);
   background-position: 2px 0px;
   background-repeat: no-repeat;
@@ -1865,7 +1848,7 @@
   background-position: 2px -48px;
 }
 
-.jxMenuItemSet a.jxMenuItemActive img.jxMenuItemIcon {
+.jxMenuItemToggleSet a.jxMenuItemActive img.jxMenuItemIcon {
   background-position: 2px -64px;
 }
 
@@ -1886,6 +1869,105 @@
     text-align: center;
     padding: 10px;
     margin-top: 10px;
+}/* For Reference
+   Success, notice and error boxes from Blueprint */
+
+/* 
+.error      { background: #FBE3E4; color: #8a1f11; border-color: #FBC2C4; }
+.notice     { background: #FFF6BF; color: #514721; border-color: #FFD324; }
+.success    { background: #E6EFC2; color: #264409; border-color: #C6D880; }
+.error a    { color: #8a1f11; }
+.notice a   { color: #514721; }
+.success a  { color: #264409; }
+*/
+
+
+.jxNoticeListContainer {
+  border: none;
+  padding: 0px;
+  margin: 0px;
+  font-size: 0px;
+  line-height: 0px;
+  z-index: 500;
+}
+
+.jxNoticeList {
+    position: relative;
+}
+
+.jxNoticeItemContainer {
+    position: relative;
+    overflow: hidden;
+}
+
+.jxNoticeItemContainer .jxChrome {
+  background-image: url(images/flyout_chrome.png);
+  padding: 5px 5px 7px 6px;
+}
+
+.jxHasChrome .jxNoticeItem  {
+  margin: 6px 6px 8px 7px;
+}
+
+.jxNoticeItem {
+    position: relative;
+    border: 2px solid #ccc;
+    margin: 0px;
+    padding: 0px;
+    background-color: #f8f8f8;
+    background-image: url(images/notice.png);
+    background-repeat: repeat-x;
+    background-position: left bottom;
+}
+
+.jxNoticeIcon {
+  position: absolute;
+  top: 0px;
+  left: 0px;
+  margin: 6px;
+  width: 16px;
+  height: 16px;
+  background-image: url(images/icons.png);
+  background-repeat: no-repeat;
+  background-position: 0px 0px;
+}
+
+.jxNotice {
+    display: block;
+    position: relative;
+    font-family: Arial, Helvetica, sans-serif;
+    font-size: 12px;
+    line-height: 18px;
+    color: #666;
+    margin: 0px;
+    border: none;
+    padding: 6px 26px 6px 10px; 
+}                          
+
+.jxNoticeError .jxNoticeItem {   background-color: #FBE3E4; color: #8a1f11; border-color: #FBC2C4; background-image: url(images/notice_error.png);}
+.jxNoticeWarning .jxNoticeItem { background-color: #FFF6BF; color: #514721; border-color: #FFD324; background-image: url(images/notice_warning.png);}
+.jxNoticeSuccess .jxNoticeItem { background-color: #E6EFC2; color: #264409; border-color: #C6D880; background-image: url(images/notice_success.png);}
+
+.jxNoticeError .jxNotice {   color: #8a1f11; padding-left: 28px; }
+.jxNoticeWarning .jxNotice { color: #514721; padding-left: 28px; }
+.jxNoticeSuccess .jxNotice { color: #264409; padding-left: 28px; }
+.jxNoticeInfo .jxNotice { padding-left: 28px; }
+
+.jxNoticeError .jxNoticeIcon {   background-position: 0px -32px; }
+.jxNoticeWarning .jxNoticeIcon { background-position: 0px -16px; }
+.jxNoticeSuccess .jxNoticeIcon { background-position: 0px -48px; }            
+.jxNoticeInfo .jxNoticeIcon {    background-position: 0px -64px; }
+
+.jxNoticeClose {
+    position: absolute;
+    top: 0px;
+    right: 0px;
+    margin: 6px;
+    width: 16px;
+    height: 16px;
+    background-image: url(images/tab_close.png);
+    background-position: 0px 0px;
+    background-repeat: no-repeat;
 }/**
  * @project         Jx
  * @revision        $Id: panel.css 302 2009-04-02 18:42:56Z fred.warnock $
@@ -2275,7 +2357,7 @@
   background-color: #aaa;
 }/**
  * @project         Jx
- * @revision        $Id: tab.css 241 2008-12-10 15:11:05Z pagameba $
+ * @revision        $Id: tab.css 615 2009-11-19 22:01:38Z fred.warnock $
  * @author          Fred Warnock (fwarnock at dmsolutions.ca)
  * @copyright       (c) 2006 DM Solutions Group Inc.
  */
@@ -2293,7 +2375,8 @@
      the position need to be explicitly set, as well as the width and height. */
   /* Base setup */
   position: relative;
-  display: block;
+  display: -moz-inline-box;
+  display: inline-block;
   overflow: hidden;
 
   width: 200px;
@@ -2329,7 +2412,7 @@
 /* BASE TAB (BUTTON) STYLES */
 /* ======================== */
 
-div.jxTabContainer {
+span.jxTabContainer {
   /* Base setup */
   display: block;
   position: relative;
@@ -2341,7 +2424,8 @@
 
 a.jxTab {
   /* Base setup */
-  display: block;
+  display: -moz-inline-box;
+  display: inline-block;
   position: relative;
   cursor: pointer;
   user-select: none;
@@ -2359,7 +2443,8 @@
 
 span.jxTabContent {
   /* Base setup */
-  display: block;
+  display: -moz-inline-box;
+  display: inline-block;
   font-size: 0px;
   line-height: 0px;
 
@@ -2373,6 +2458,8 @@
 
 img.jxTabIcon {
   /* Base setup */
+  display: -moz-inline-box;
+  display: inline-block;
   position: relative;
 
   width: 16px;
@@ -2383,7 +2470,8 @@
 
 span.jxTabLabel {
   /* Base setup */
-  display: block;
+  display: -moz-inline-box;
+  display: inline-block;
   position: relative;
   cursor: pointer;
 
@@ -2404,12 +2492,11 @@
   user-select: none;
   -moz-user-select: none;
   -khtml-user-select: none;
-}
-
-a.jxTabClose img {
   width: 16px;
   height: 16px;
-  background-image: url(images/tab_close.png);  
+  background-image: url(images/tab_close.png);
+  background-position: 0px 0px;
+  background-repeat: no-repeat;
 }
 
 .jxDisabled a.jxTab,
@@ -2428,7 +2515,6 @@
 .jxBarTop div.jxTabContainer,
 .jxBarBottom div.jxTabContainer {
   /* Base setup */
-  float: left;
 }
 
 .jxBarTop a.jxTab,
@@ -2444,8 +2530,8 @@
 /* Closeable Tab */
 .jxBarTop a.jxTabClose,
 .jxBarBottom a.jxTabClose {
-  top: 3px;
-  right: 3px;
+  top: 5px;
+  right: 5px;
 }
 
 .jxBarTop .jxTabClose span.jxTabContent,
@@ -2457,7 +2543,6 @@
 .jxBarTop a.jxTab,
 .jxBarBottom a.jxTab {
   /* Base setup */
-  float: left;
 
   padding-left: 4px; /* makes room for the left of the tab bg */
   background-position: left -24px; 
@@ -2466,7 +2551,6 @@
 .jxBarTop span.jxTabContent,
 .jxBarBottom span.jxTabContent {
   /* Base setup */
-  float: left;
 
   padding: 4px 4px 4px 0px; /* makes space around the label */
   background-position: right -24px; 
@@ -2581,14 +2665,14 @@
 
 .jxBarTop img.jxTabIcon,
 .jxBarBottom img.jxTabIcon {
+  vertical-align: middle;
   /* Base setup */
-  float: left;
 }
 
 .jxBarTop span.jxTabLabel,
 .jxBarBottom span.jxTabLabel {
   /* Base setup */
-  float: left;
+  vertical-align: middle;
   height: 16px;
 
   padding: 0px 4px 0px 4px;
@@ -2599,8 +2683,8 @@
 /* VERTICAL TAB BAR - LEFT and RIGHT */
 /* ================================= */
 
-.jxBarLeft div.jxTabContainer,
-.jxBarRight div.jxTabContainer {
+.jxBarLeft span.jxTabContainer,
+.jxBarRight span.jxTabContainer {
   /* Base setup */
 }
 
@@ -2617,8 +2701,8 @@
 /* Closeable Tab */
 .jxBarLeft a.jxTabClose,
 .jxBarRight a.jxTabClose {
-  top: 3px;
-  left: 3px;
+  top: 5px;
+  left: 5px;
 }
 
 .jxBarLeft .jxTabClose span.jxTabContent,
@@ -2968,7 +3052,7 @@
 
 /**
  * @project         Jx
- * @revision        $Id: tree.css 535 2009-09-28 18:47:18Z fred.warnock $
+ * @revision        $Id: tree.css 602 2009-11-10 19:41:36Z pagameba $
  * @author          Fred Warnock (fwarnock at dmsolutions.ca)
  * @copyright       (c) 2006 DM Solutions Group Inc.
  */
@@ -3036,7 +3120,7 @@
   background-position: left top;
   border: none;
 
-  margin: 0px 1px 0px 15px;
+  margin: 0px 1px 0px 17px;
   padding: 0px 0px 0px 20px;
   z-index: 0;
   font-family: Arial, Helvetica, sans-serif;
@@ -3052,40 +3136,41 @@
 a.jxTreeItem:focus {
   border-left: 1px dotted #75ADFF;
   border-right: 1px dotted #75ADFF;
-  margin: 0px 0px 0px 14px;
+  margin: 0px 0px 0px 16px;
   background-position: left -72px;
 }
 
-a.jxTreeItem:hover {
+a.jxTreeItem:hover,
+li.jxTreeContainer a.jxHover {
   /*border: 1px solid #C5E0FF;*/
-  border-left: 1px solid #C5E0FF;
-  border-right: 1px solid #C5E0FF;
-  margin: 0px 0px 0px 14px;
+  border-left: 1px solid #CDDFFD;
+  border-right: 1px solid #CDDFFD;
+  margin: 0px 0px 0px 16px;
   background-color: #CDE5FF;
   background-position: left -24px;
 }
 
-a.jxTreeItemPressed,
-a.jxTreeItemPressed:hover {
-  border-left: 1px solid #C5E0FF;
-  border-right: 1px solid #C5E0FF;
-  margin: 0px 0px 0px 14px;
+li.jxTreeContainer a.jxSelected,
+li.jxTreeContainer a.jxSelected:hover,
+li.jxTreeContainer a.jxPressed,
+li.jxTreeContainer a.jxPressed:hover {
+  border-left: 1px solid #8AABFB;
+  border-right: 1px solid #8AABFB;
+  margin: 0px 0px 0px 16px;
   background-color: #CDE5FF;
   background-position: left -48px;
 }
 
-.jxDisabled a.jxTreeItem,
-.jxDisabled a.jxTreeItem {
+li.jxDisabled a.jxTreeItem {
   cursor: default;
 }
             
-.jxDisabled a.jxTreeItem:focus,
-.jxDisabled a.jxTreeItemPressed,
-.jxDisabled a.jxTreeItemPressed:hover,
-.jxDisabled a.jxTreeItem:hover {
+li.jxDisabled a.jxTreeItem:focus,
+li.jxDisabled a.jxTreeItem:hover {
   background-position: left top;
+  background-color: transparent;
   border: none;
-  margin: 0px 1px 0px 15px;
+  margin: 0px 1px 0px 17px;
 }
 
 .jxTreeNest {
@@ -3113,7 +3198,7 @@
 
 img.jxTreeIcon { 
   height: 16px;
-  top: 1px;
+  top: 2px;
   left: 1px;
 }
 
@@ -3158,10 +3243,6 @@
   background-position: left -120px; /* last node image */
 }
 
-.jxTreeItemSelected {
-  background-color: #AFD4FA;
-  font-weight:bold;
-}
 
 a.jxTreeItem,
 img.jxTreeImage,

Modified: sandbox/jxlib-3.0/templates/mapguide/standard/themes/delicious/jxtheme.css
===================================================================
--- sandbox/jxlib-3.0/templates/mapguide/standard/themes/delicious/jxtheme.css	2009-11-24 20:05:41 UTC (rev 1987)
+++ sandbox/jxlib-3.0/templates/mapguide/standard/themes/delicious/jxtheme.css	2009-11-24 20:11:06 UTC (rev 1988)
@@ -21,4 +21,4 @@
  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  * DEALINGS IN THE SOFTWARE.
- */body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';}.jxButtonContainer{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:2px;border:none;}.jxButton{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:0 0 0 4px;border:none;background-image:url(images/button.png);background-position:left -24px;background-repeat:no-repeat;text-decoration:none;outline:none;}a.jxButton{cursor:pointer;user-select:none;-moz-user-select:none;-khtml-user-select:none;}ul.jxToolbar .jxButton{background-position:left top;}span.jxButtonContent{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:4px 4px 4px 0;border:none;background-image:url(images/button.png);background-position:right -24px;background-repeat:no-repeat;}ul.jxToolbar span.jxButtonContent{background-position:right top;}ul.jxToolbar .jxButtonActive,.jxButtonActive{background-position:left -72px;}ul.jxToolbar .jxButtonActive span.jxButtonContent,.jxButtonActive span.jxButtonContent{background-position:right -72px;}ul.jxToolbar .jxButton:focus,.jxButton:focus{background-position:left -96px;}ul.jxToolbar .jxButton:focus span.jxButtonContent,.jxButton:focus span.jxButtonContent{background-position:right -96px;}ul.jxToolbar .jxButtonActive:focus,.jxButtonActive:focus{background-position:left -144px;}ul.jxToolbar .jxButtonActive:focus span.jxButtonContent,.jxButtonActive:focus span.jxButtonContent{background-position:right -144px;}ul.jxToolbar .jxButton:hover,ul.jxToolbar .jxButtonActive:hover,.jxButton:hover,.jxButtonActive:hover{background-position:left -48px;}ul.jxToolbar .jxButton:hover span.jxButtonContent,ul.jxToolbar .jxButtonActive:hover span.jxButtonContent,.jxButton:hover span.jxButtonContent,.jxButtonActive:hover span.jxButtonContent{background-position:right -48px;}ul.jxToolbar .jxButtonPressed,ul.jxToolbar .jxButtonPressed:focus,.jxButtonPressed,.jxButtonPressed:focus{background-position:left -120px;}ul.jxToolbar .jxButtonPressed span.jxButtonContent,ul.jxToolbar .jxButtonPressed:focus span.jxButtonContent,.jxButtonPressed span.jxButtonContent,.jxButtonPressed:focus span.jxButtonContent{background-position:right -120px;}.jxDisabled .jxButton,.jxDisabled span.jxButtonContent span{cursor:default;}ul.jxToolbar .jxDisabled .jxButton:focus,ul.jxToolbar .jxDisabled .jxButton:active,ul.jxToolbar .jxDisabled .jxButton:hover,ul.jxToolbar .jxDisabled .jxButtonPressed{background-position:left top;}.jxDisabled .jxButton:focus,.jxDisabled .jxButton:active,.jxDisabled .jxButton:hover,.jxDisabled .jxButtonPressed{background-position:left -24px;}ul.jxToolbar .jxDisabled .jxButton:focus span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButton:active span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButton:hover span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonPressed span.jxButtonContent{background-position:right top;}.jxDisabled .jxButton:focus span.jxButtonContent,.jxDisabled .jxButton:active span.jxButtonContent,.jxDisabled .jxButton:hover span.jxButtonContent,.jxDisabled .jxButtonPressed span.jxButtonContent{background-position:right -24px;}ul.jxToolbar .jxDisabled .jxButtonActive:focus,ul.jxToolbar .jxDisabled .jxButtonActive:active,ul.jxToolbar .jxDisabled .jxButtonActive:hover,.jxDisabled .jxButtonActive:focus,.jxDisabled .jxButtonActive:active,.jxDisabled .jxButtonActive:hover{background-position:left -72px;}ul.jxToolbar .jxDisabled .jxButtonActive:focus span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonActive:active span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonActive:hover span.jxButtonContent,.jxDisabled .jxButtonActive:focus span.jxButtonContent,.jxDisabled .jxButtonActive:active span.jxButtonContent,.jxDisabled .jxButtonActive:hover span.jxButtonContent{background-position:right -72px;}img.jxButtonIcon{display:-moz-inline-box;display:inline-block;position:relative;vertical-align:middle;width:16px;height:16px;background-position:center center;background-repeat:no-repeat;}span.jxButtonContent span{display:-moz-inline-box;display:inline-block;position:relative;vertical-align:middle;cursor:pointer;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:16px;height:16px;white-space:nowrap;}span.jxButtonContent span.jxButtonLabel{margin:0;padding:0 4px 0 4px;color:#000;font-size:11px;}.jxButtonMenu span.jxButtonContent,.jxButtonMulti span.jxButtonContent,.jxButtonFlyout span.jxButtonContent,.jxButtonCombo span.jxButtonContent,.jxButtonEditCombo span.jxButtonContent{padding-right:0;}.jxButtonMenu span.jxButtonContent span,.jxButtonFlyout span.jxButtonContent span,.jxButtonMulti span.jxButtonContent span,.jxButtonCombo span.jxButtonContent span,.jxButtonEditCombo span.jxButtonContent span{padding-right:16px;background-image:url(images/emblems.png);background-position:right -16px;background-repeat:no-repeat;}a.jxButtonDisclose{position:absolute;display:-moz-inline-box;display:inline-block;padding:4px 0;font-size:0;line-height:0;right:2px;top:2px;background-image:url(images/button_multi_disclose.png);background-position:right 0;background-repeat:no-repeat;outline:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;}a.jxButtonDisclose img{width:16px;height:16px;margin:0;padding:0;border:0;background-image:url(images/emblems.png);background-position:right -16px;background-repeat:no-repeat;}a.jxButtonDisclose:focus,a.jxButtonDisclose:active{background-position:right -96px;}a.jxButtonDisclose:hover{background-position:right -48px;}a.jxButtonDisclosePressed{background-position:right -120px;}.jxDisabled a.jxButtonDisclose,.jxDisabled a.jxButtonDisclose:focus,.jxDisabled a.jxButtonDisclose:active,.jxDisabled a.jxButtonDisclose:hover,.jxDisabled a.jxButtonDisclosePressed{cursor:default;background-position:right 0;}ul.jxToolbar .jxButtonHover{background-position:left -24px!important;}ul.jxToolbar .jxButtonHover span.jxButtonContent{background-position:right -24px!important;}.jxFlyout .jxChrome{background-image:url(images/flyout_chrome.png);padding:5px 5px 7px 6px;}.jxFlyout{position:absolute;display:block;z-index:100;margin:0;padding:0;}.jxFlyoutContent{position:relative;display:block;overflow:auto;margin:6px 6px 8px 7px;background-color:#fff;border:1px solid #999;}.jxButtonMulti,.jxButtonMulti span.jxButtonContent{background-image:url(images/button_multi.png);}.jxButtonEditCombo,.jxButtonEditCombo span.jxButtonContent{background-image:url(images/button_combo.png);}.jxButtonMulti span.jxButtonContent span{padding-right:21px;}.jxButtonEditCombo span.jxButtonContent span{font-size:0;}.jxButtonComboDefault span.jxButtonContent span,.jxButtonComboDefault input{font-style:italic;color:#999;}.jxButtonEditCombo input{float:left;line-height:16px;height:16px;padding:0 4px;margin:0;border:none;font-size:11px;font-family:Arial,Helvetica,sans-serif;background-color:transparent;}.jxChrome{position:absolute;display:block;font-size:0;line-height:0;z-index:-1;width:100%;height:100%;top:0;left:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxChromeDrag{opacity:.5;-ms-filter:"Alpha(opacity=50)";}.jxChromeTL{position:absolute;overflow:hidden;left:0;top:0;width:50%;height:50%;}.jxChromeTR{position:absolute;overflow:hidden;left:50%;top:0;width:50%;height:50%;}.jxChromeBL{position:absolute;overflow:hidden;left:0;top:50%;width:50%;height:50%;}.jxChromeBR{position:absolute;overflow:hidden;left:50%;top:50%;width:50%;height:50%;}.jxChromeTL img{position:absolute;top:0;left:0;width:1000px;height:600px;}.jxChromeTR img{position:absolute;top:0;right:0;width:1000px;height:600px;}.jxChromeBL img{position:absolute;bottom:0;left:0;width:1000px;height:600px;}.jxChromeBR img{position:absolute;bottom:0;right:0;width:1000px;height:600px;}.jxColorBar{position:relative;overflow:hidden;}table.jxColorGrid{position:relative;border-collapse:collapse;empty-cells:show;clear:both;padding:0;margin:0;}.jxColorGrid tr{padding:0;margin:0;}.jxColorGrid td{border:1px solid #000;padding:0;margin:0;}.jxColorGrid td.emptyCell{border:0 solid #000;}.jxColorGrid td.emptyCell span{display:block;width:7px;height:7px;line-height:0;font-size:0;border:0 solid #000;padding:1px;margin:0;}.jxColorGrid a.colorSwatch{display:block;width:7px;height:7px;line-height:0;font-size:0;border:0 solid #000;margin:0;padding:1px;}.jxColorGrid a.borderWhite:hover{border:1px solid #fff;padding:0;}.jxColorGrid a.borderBlack:hover{border:1px solid #000;padding:0;}input.jxHexInput{width:55px;vertical-align:middle;}input.jxAlphaInput{width:30px;vertical-align:middle;}div.jxColorPreview{float:left;position:relative;width:20px;height:20px;border:1px solid #000;margin:2px;vertical-align:middle;background-image:url('images/grid.png');overflow:hidden;}.jxButtonFlyout span.jxButtonContent span.jxButtonSwatch{display:block;float:left;width:14px;height:14px;border:1px solid #000;background-image:url('images/grid.png');background-position:0 0;background-repeat:repeat;padding-right:0!important;}.jxButtonFlyout span.jxButtonContent span.jxButtonSwatch span{display:block;width:14px;height:14px;position:absolute;padding-right:0;background:none;}div.jxColorPreview img{position:absolute;z-index:0;}div.jxColorPreview div{width:20px;height:10px;position:absolute;display:block;left:0;z-index:1;font-size:10px;line-height:0;}div.jxColorPreview div.jxColorSelected{top:0;}div.jxColorPreview div.jxColorHover{bottom:0;}label.jxColorLabel,label.jxAlphaLabel{width:auto;font-family:Arial,sans-serif;font-size:11px;line-height:24px;padding:2px;vertical-align:middle;}a.jxColorClose{position:absolute;top:0;right:0;width:16px;height:16px;}a.jxColorClose img{width:16px;height:16px;}.jxClearer{display:block;position:relative;float:none;clear:both;font-size:0;line-height:0;width:0;height:0;margin:0;padding:0;}.jxDisabled{opacity:.4;-ms-filter:"Alpha(opacity=40)";}.jxDisabled *{-ms-filter:"Alpha(opacity=40)";}iframe.jxIframeShim{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;-ms-filter:"Alpha(opacity=0)";z-index:-1;}@CHARSET "ISO-8859-1";.jxConfirmQuestion{text-align:center;padding:10px;margin-top:10px;}.jxDialog .jxChrome{background-image:url(images/dialog_chrome.png);}.jxDialog{display:block;z-index:1000;overflow:hidden;}.jxDialogContentContainer{z-index:1;margin:0 11px 13px 12px;border:1px solid #b7b7b7;background-color:#f0f0f0;}.jxDialogModal{position:absolute;display:block;top:0;left:0;width:100%;height:100%;background-color:#000;opacity:.2;-ms-filter:"Alpha(opacity=20)";}.jxDialogContent{display:block;position:relative;overflow:auto;padding:0;z-index:1;}.jxDialogTitle{display:block;position:relative;background-image:url(images/a_pixel.png);text-align:center;height:24px;line-height:24px;z-index:1;margin:6px 6px 0 7px;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxDialogMin .jxDialogTitle{margin-bottom:8px;}.jxDialogMoveable,.jxDialogMoveable .jxDialogLabel{cursor:move;}.jxDialogIcon{position:absolute;left:2px;top:3px;width:16px;height:16px;border:none;padding:0;margin:0;}.jxDialogLabel{font-family:Arial,Helvetica,sans-serif;font-size:11px;font-weight:bold;line-height:21px;color:#000;white-space:nowrap;cursor:default;}.jxDialogResize{position:absolute;bottom:7px;right:6px;width:16px;height:16px;z-index:2;border:0;cursor:se-resize;background-image:url(images/dialog_resize.png);}.jxDialogControls{position:absolute;top:3px;right:2px;height:16px;width:80px;}.jxDialogControls img{background-image:url('images/panel_controls.png');background-repeat:no-repeat;border:0;margin:0;width:16px;height:16px;}.jxDialogClose img{background-position:0 -32px;}.jxDialogMenu img{background-position:0 -48px;}.jxDialogHelp img{background-position:0 -64px;}.jxDialogCollapse img{background-position:0 -16px;}.jxDialogMin .jxDialogCollapse img{background-position:0 0;}.jxDialogMax .jxDialogCollapse img{background-position:0 -16px;}.jxDialogLoading img{border:0;margin:0;width:16px;height:16px;visibility:hidden;position:absolute;top:1px;left:2px;}.jxDialogControls .jxButtonContainer,.jxDialogControls span.jxButtonContent,.jxDialogControls .jxButton:hover span.jxButtonContent,.jxDialogControls .jxButton:active span.jxButtonContent,.jxDialogControls .jxButtonActive span.jxButtonContent,.jxDialogControls .jxButtonActive:hover span.jxButtonContent,.jxDialogControls .jxButtonActive:active span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton:hover span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton:active span.jxButtonContent,.jxDialogControls .jxButton,.jxDialogControls .jxButton:hover,.jxDialogControls .jxButton:active,.jxDialogControls .jxButtonActive,.jxDialogControls .jxButtonActive:hover,.jxDialogControls .jxButtonActive:active,.jxDialogControls .jxDisabled .jxButton,.jxDialogControls .jxDisabled .jxButton:hover,.jxDialogControls .jxDisabled .jxButton:active{padding:0;margin:0;border:none;background-color:transparent;background-image:none;}.jxDialogControls .jxButtonMenu span.jxButtonContent,.jxDialogControls .jxButtonFlyout span.jxButtonContent{background-image:none;}.jxDialogControls .jxButtonMenu span.jxButtonContent span,.jxDialogControls .jxButtonFlyout span.jxButtonContent span{padding-right:0;}.jxDialogControls .jxBarContainer{position:absolute;right:0;background-image:none;background-color:transparent;margin:0;padding:0;border:none;height:16px;}.jxDialogControls .jxBarScroller{left:auto;right:0;}.jxDialogControls ul.jxToolbar{float:right;}.jxDialogControls ul.jxToolbar,.jxDialogControls li.jxToolItem{background-image:none;background-color:transparent;margin:0;padding:0;border:none;}div.jxFileInputs{position:relative;}div.jxFileFake{position:absolute;top:0;left:0;z-index:1;}div.jxFileFake span{float:left;display:block;}div.jxFileFake .jxInputContainer{width:150px;}div.jxFileFake .jxInputText{width:135px;}div.jxFileFake .jxButtonContainer{margin-top:6px;float:left;}.jxInputFile{position:relative;text-align:right;-moz-opacity:0;filter:alpha(opacity:0);opacity:0;z-index:2;margin-top:3px;height:35px;width:100%;}.jxForm{display:block;position:relative;overflow:hidden;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxFieldset{display:block;position:relative;overflow:hidden;border:1px solid #ccc;margin:10px;padding:5px;}.jxFieldsetLegend,.jxFieldset legend{position:relative;margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:26px;color:#000;}.jxInputContainer{display:block;position:relative;padding:0;margin:2px;border:none;}.jxInputLabel,.jxInputTag{display:-moz-inline-box;display:inline-block;margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:26px;color:#000;}.jxInputLabel{vertical-align:top;}.jxInputTag{vertical-align:bottom;}.jxInputText,.jxInputPassword,.jxInputTextarea{margin:0 4px;padding:4px;border:1px solid #bbb;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputSelect{margin:0 4px;padding:3px 4px 3px 1px;border:1px solid #bbb;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputText:focus,.jxInputPassword:focus,.jxInputTextarea:focus,.jxInputSelect:focus{border:1px solid #000;}.jxInputRadio,.jxInputCheck{margin:5px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputContainer .jxButtonContainer{padding:0;margin:0 4px;}.jxInputGroup{border:none;padding:0;margin:2px;}.jxInputGroup legend{font-size:0;line-height:0;padding:0;margin:0;border:none;}.jxInputGroup .jxFieldsetLegend{font-size:12px;}.jxInputGroup .jxInputLabel{width:auto;}.jxFieldInvalid .jxInputText,.jxFieldInvalid .jxInputPassword,.jxFieldInvalid .jxInputTextarea,.jxFieldInvalid .jxInputSelect{background-color:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;}.jxFieldValidated .jxInputText,.jxFieldValidated .jxInputPassword,.jxFieldValidated .jxInputTextarea,.jxFieldValidated .jxInputSelect{background-color:#E6EFC2;color:#264409;border-color:#C6D880;}.jxFieldInvalid .jxInputText:focus,.jxFieldInvalid .jxInputPassword:focus,.jxFieldInvalid .jxInputTextarea:focus,.jxFieldInvalid .jxInputSelect:focus{border-color:#8a1f11;}.jxFieldValidated .jxInputText:focus,.jxFieldValidated .jxInputPassword:focus,.jxFieldValidated .jxInputTextarea:focus,.jxFieldValidated .jxInputSelect:focus{border-color:#264409;}.jxFieldInvalid .jxInputLabel,.jxFieldInvalid .jxInputTag{color:#8a1f11;}.jxFieldValidated .jxInputLabel,.jxFieldValidated .jxInputTag{color:#264409;}.jxFormInline .jxInputContainer,form .jxFormInline .jxInputContainer,form .jxFieldset span.jxFormInline,form.jxForm span.jxFormInline{display:inline;}.jxFormInline .jxInputLabel,form .jxFormInline .jxInputLabel,form span.jxFormInline .jxInputLabel{display:inline;width:auto;}.jxFormInline .jxInputTag,form .jxFormInline .jxInputTag,form span.jxFormInline .jxInputTag{display:inline;}.jxFormInline .jxInputGroup,form .jxFormInline .jxInputGroup{padding-left:0;}.jxFormInline .jxInputGroup .jxFieldsetLegend,form .jxFormInline .jxInputGroup .jxFieldsetLegend{position:relative;left:auto;}.jxFormInline .jxInputGroup .jxInputLabel,form .jxFormInline .jxInputGroup .jxInputLabel{display:inline;width:auto;}.jxFormBlock .jxInputContainer,form .jxFormBlock .jxInputContainer,form .jxFieldset span.jxFormBlock,form.jxform span.jxFormBlock{display:block;}.jxFormBlock .jxInputLabel,form .jxFormBlock .jxInputLabel,form span.jxFormBlock .jxInputLabel{display:block;width:auto;margin-left:4px;}.jxFormBlock .jxInputContainerCheck .jxInputLabel,.jxFormBlock .jxInputContainerRadio .jxInputLabel,form .jxFormBlock .jxInputContainerCheck .jxInputLabel,form .jxFormBlock .jxInputContainerRadio .jxInputLabel,form span.jxFormBlock .jxInputContainerCheck .jxInputLabel,form span.jxFormBlock .jxInputContainerRadio .jxInputLabel{display:-moz-inline-box;display:inline-block;}.jxFormBlock .jxInputGroup,form .jxFormBlock .jxInputGroup{padding-left:0;}.jxFormBlock .jxInputGroup .jxFieldsetLegend,form .jxFormBlock .jxInputGroup .jxFieldsetLegend{position:relative;left:auto;}.jxFormBlock .jxInputGroup .jxInputLabel,form .jxFormBlock .jxInputGroup .jxInputLabel{display:-moz-inline-box;display:inline-block;width:auto;}.jxFormInlineblock .jxInputContainer,form .jxFormInlineblock .jxInputContainer,form .jxFieldset span.jxFormInlineblock,form.jxForm span.jxFormInlineblock{display:block;}.jxFormInlineblock .jxInputLabel,form .jxFormInlineblock .jxInputLabel,form span.jxFormInlineblock .jxInputLabel{display:-moz-inline-box;display:inline-block;width:200px;}.jxFormInlineblock .jxInputGroup,form .jxFormInlineblock .jxInputGroup{padding-left:200px;}.jxFormInlineblock .jxInputGroup .jxFieldsetLegend,form .jxFormInlineblock .jxInputGroup .jxFieldsetLegend{position:absolute;left:-200px;width:200px;}.jxFormInlineblock .jxInputGroup .jxInputLabel,form .jxFormInlineblock .jxInputGroup .jxInputLabel{display:-moz-inline-box;display:inline-block;width:auto;}.jxGridContainer{position:absolute;top:0;left:0;border-left:0 solid #d8d8d8;border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;overflow:hidden;}.jxGridTable{position:relative;table-layout:fixed;border-collapse:collapse;border-style:none;cursor:default;font-family:Arial,Verdana,sans-serif;font-size:11px;font-weight:normal;}.jxGridHeader{width:100%;}.jxGridTableBody{position:relative;table-layout:fixed;border-collapse:collapse;border-style:none;cursor:default;font-family:Arial,Verdana,sans-serif;font-size:11px;font-weight:normal;}.jxGridColHeadHide{height:0;line-height:0;font-size:0;background-color:#fff;white-space:normal;}.jxGridColHeadHide p,.jxGridRowHeadHide p{font-size:0;line-height:0;height:0;margin:0;padding:0;}.jxGridRowHeadHide{width:0;white-space:normal;}.jxGridCell{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;overflow:hidden;}.jxGridCellContent{position:relative;display:-moz-inline-box;display:inline-block;overflow:hidden;padding-left:3px;padding-right:3px;overflow:hidden;white-space:nowrap;cursor:cell;text-overflow:ellipsis;}.jxGridColHead{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;background-color:#f2f2f2;background-image:url('images/table_col.png');background-position:0 0;background-repeat:repeat-x;text-align:center;font-weight:bold;color:#333;cursor:default;padding-left:3px;padding-right:3px;white-space:nowrap;}.jxGridRowHead{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;background-color:#f2f2f2;background-image:url('images/table_row.png');background-position:0 0;background-repeat:repeat-y;text-align:center;font-weight:bold;color:#333;cursor:default;overflow:hidden;white-space:nowrap;}.jxGridRowAll{background-color:#fff;}.jxGridColumnHeaderSelected{background-color:#e1e1e1;background-position:0 -200px;}.jxGridRowHeaderSelected{background-color:#e1e1e1;background-position:-400px 0;}.jxGridColumnSelected{background-color:#f7f7f7;}.jxGridRowSelected td{background-color:#f7f7f7;}td.jxGridCellSelected{background-color:#ebebeb;}.jxGridColumnHeaderPrelight{background-color:#cee5ff;background-position:0 -300px;}.jxGridRowHeaderPrelight{background-color:#cee5ff;background-position:-600px 0;}.jxGridColumnPrelight{background-color:#e5f1ff;}.jxGridRowPrelight td{background-color:#e5f1ff;}td.jxGridCellPrelight{background-color:#cce3ff;}.jxColSortable{padding-right:20px;}.jxGridCell.jxColSortable{padding-right:0;}.jxColSortable span{background-image:url('images/emblems.png');padding-right:20px;background-repeat:no-repeat;background-position:right top;}.jxGridColumnSortedAsc span{background-position:right -160px;}.jxGridColumnSortedDesc span{background-position:right -16px;}.jxGridColumnResize,.jxGridRowResize{display:block;position:absolute;background-image:url(images/a_pixel.png);z-index:1;}.jxGridColumnResize{right:0;top:0;height:100%;width:4px;cursor:col-resize;}.jxGridRowResize{left:0;bottom:0;height:4px;width:100%;cursor:row-resize;}.jxListView .jxListItemContainer{position:relative;display:block;outline:none;overflow:hidden;border:none;margin:0 1px;padding:0;}.jxListItem{position:relative;display:block;cursor:pointer;outline:none;overflow:hidden;border:none;margin:0 1px;padding:0;z-index:0;font-family:Arial,Helvetica,sans-serif;font-size:11px;color:#000;text-decoration:none;line-height:20px;height:20px;}.jxListView .jxHover{margin:0;border-left:1px solid #C5E0FF;border-right:1px solid #C5E0FF;background-image:url(images/listitem.png);background-repeat:repeat-x;background-color:#CDE5FF;background-position:left -24px;}.jxListItem:focus{margin:0;border-left:1px dotted #75ADFF;border-right:1px dotted #75ADFF;background-image:url(images/listitem.png);background-repeat:repeat-x;background-position:left -72px;}.jxListView .jxPressed{margin:0;border-left:1px solid #C5E0FF;border-right:1px solid #C5E0FF;background-color:#CDE5FF;background-image:url(images/listitem.png);background-repeat:repeat-x;background-position:left -48px;}.jxListView .jxSelected{margin:0;border-left:1px solid #C5E0FF;border-right:1px solid #C5E0FF;background-color:#CDE5FF;background-image:url(images/listitem.png);background-repeat:repeat-x;background-position:left -48px;}.jxMenuContainer .jxChrome{background-image:url(images/flyout_chrome.png);padding:5px 5px 7px 6px;}.jxButtonMenu span.jxMenuItemSpan{padding-right:16px;}.jxMenuContainer{position:absolute;top:0;left:-10000px;display:none;z-index:2000;padding:0;}ul.jxMenu{display:block;position:relative;list-style-type:none;padding:1px;margin:6px 6px 8px 7px;background-color:#fff;border:1px solid #999;}li.jxMenuItemContainer{display:block;position:relative;font-size:0;line-height:0;margin:0;padding:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}a.jxMenuItem{display:block;position:relative;overflow:hidden;text-decoration:none;cursor:pointer;outline:none;border:1px solid #fff;background-image:url(images/menuitem.png);background-repeat:no-repeat;background-position:left top;font-family:Arial,Helvetica,sans-serif;font-size:11px;text-decoration:none;margin:0;padding:0;color:#000;}a.jxMenuItemActive{background-position:left -98px;}a.jxMenuItem:focus{background-position:left -74px;}a.jxMenuItem:focus span.jxMenuItemContent{border-right:1px dotted #75ADFF;}a.jxMenuItemActive:focus{background-position:left -170px;}a.jxMenuItem:hover{background-color:#CDE5FF;background-position:left -26px;}a.jxMenuItem:hover span.jxMenuItemContent{border-right:1px solid #C5E0FF;}a.jxMenuItemActive:hover{background-position:left -122px;}a.jxMenuItemPressed,a.jxMenuItemPressed:hover{background-color:#CDE5FF;background-position:left -50px;}.jxDisabled a.jxMenuItem,.jxDisabled span.jxMenuItemContent span{cursor:default;}.jxDisabled a.jxMenuItem:focus,.jxDisabled a.jxMenuItemPressed,.jxDisabled a.jxMenuItemPressed:hover,.jxDisabled a.jxMenuItem:hover{background-color:#fff;background-position:left top;border-right:1px solid #fff;}.jxDisabled a.jxMenuItem:hover span.jxMenuItemContent{border-right:1px solid #fff;}span.jxMenuItemContent{display:block;position:relative;font-family:Arial,Helvetica,sans-serif;font-size:0;line-height:0;white-space:nowrap;padding:0 20px 0 0;margin:0;border-right:1px solid #fff;}.jxButtonSubMenu span.jxMenuItemContent,.jxButtonSubMenu:hover span.jxMenuItemContent{background-image:url(images/emblems.png);background-position:right -30px;background-repeat:no-repeat;}img.jxMenuItemIcon{position:absolute;top:2px;left:2px;width:16px;height:16px;background-position:left center;background-repeat:no-repeat;}span.jxMenuItemContent span{display:block;position:relative;cursor:pointer;margin:0;padding:2px 0 2px 22px;font-size:16px;line-height:16px;color:#000;}span.jxMenuItemContent span.jxMenuItemLabel{color:#000;font-size:11px;}.jxMenuItemToggle img.jxMenuItemIcon,.jxMenuItemSet img.jxMenuItemIcon{background-image:url(images/emblems.png);background-position:2px 0;background-repeat:no-repeat;}.jxMenuItemToggle a.jxMenuItemActive img.jxMenuItemIcon{background-position:2px -48px;}.jxMenuItemSet a.jxMenuItemActive img.jxMenuItemIcon{background-position:2px -64px;}ul.jxMenu span.jxMenuSeparator{display:block;font-size:10px;line-height:10px;background-image:url(images/toolbar_separator_v.png);background-repeat:repeat-x;background-position:left center;}@CHARSET "ISO-8859-1";.jxMessage{text-align:center;padding:10px;margin-top:10px;}.jxPanel{display:block;position:relative;}.jxPanelContentContainer{overflow:hidden;background-color:#f0f0f0;}.jxPanelContent{position:relative;display:block;overflow:auto;background-color:#fff;margin:0;padding:0;}.jxPanelTitle{display:block;position:relative;background-image:url(images/panelbar.png);background-repeat:repeat-x;background-position:left top;height:22px;margin:0;padding:0;text-align:center;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxPanelBar{position:absolute;line-height:1px;width:100%;height:5px;cursor:row-resize;background-color:#f0f0f0;z-index:2;}.jxPanelIcon{position:absolute;left:2px;top:3px;width:16px;height:16px;border:none;padding:0;margin:0;}.jxPanelLabel{padding-left:25px;font-family:Arial,Helvetica,sans-serif;font-size:11px;font-weight:bold;line-height:21px;color:#000;white-space:nowrap;}.jxPanelControls{position:absolute;top:3px;right:2px;height:16px;width:80px;overflow:hidden;}.jxPanelControls img{background-image:url('images/panel_controls.png');background-repeat:no-repeat;border:0;margin:0;width:16px;height:16px;}.jxPanelClose img{background-position:0 -32px;}.jxPanelMenu img{background-position:0 -48px;}.jxPanelHelp img{background-position:0 -64px;}.jxPanelCollapse img{background-position:0 -16px;}.jxPanelMin .jxPanelCollapse img{background-position:0 0;}.jxPanelMax .jxPanelCollapse img{background-position:0 -16px;}.jxPanelMaximize img{background-position:0 0;}.jxPanelLoading img{border:0;margin:0;width:16px;height:16px;visibility:hidden;position:absolute;top:1px;left:2px;}.jxPanelControls .jxButtonContainer,.jxPanelControls span.jxButtonContent,.jxPanelControls .jxButton:hover span.jxButtonContent,.jxPanelControls .jxButton:active span.jxButtonContent,.jxPanelControls .jxButtonActive span.jxButtonContent,.jxPanelControls .jxButtonActive:hover span.jxButtonContent,.jxPanelControls .jxButtonActive:active span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton:hover span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton:active span.jxButtonContent,.jxPanelControls .jxButton,.jxPanelControls .jxButton:hover,.jxPanelControls .jxButton:active,.jxPanelControls .jxButtonActive,.jxPanelControls .jxButtonActive:hover,.jxPanelControls .jxButtonActive:active,.jxPanelControls .jxDisabled .jxButton,.jxPanelControls .jxDisabled .jxButton:hover,.jxPanelControls .jxDisabled .jxButton:active{padding:0;margin:0;border:none;background-color:transparent;background-image:none;}.jxPanelControls .jxButtonMenu span.jxButtonContent,.jxPanelControls .jxButtonFlyout span.jxButtonContent{background-image:none;}.jxPanelControls .jxButtonMenu span.jxButtonContent span,.jxPanelControls .jxButtonFlyout span.jxButtonContent span{padding-right:0;}.jxPanelControls div.jxBarTop{position:absolute;right:0;background-image:none;background-color:transparent;margin:0;padding:0;border:none;height:16px;}.jxPanelControls .jxBarScroller{left:auto;right:0;}.jxPanelControls ul.jxToolbar{float:right;}.jxPanelControls ul.jxToolbar,.jxPanelControls li.jxToolItem{background-image:none;background-color:transparent;margin:0;padding:0;border:none;}@CHARSET "ISO-8859-1";.jxProgressBar-container{width:100%;display:block;clear:both;}.jxProgressBar-message{color:black;}.jxProgressBar-container .jxProgressBar{width:100%;clear:both;border-top:none;}.jxProgressBar-container .jxProgressBar .jxProgressBar-outline{border:1px solid #360;position:absolute;top:0;left:0;z-index:10;}.jxProgressBar-container .jxProgressBar .jxProgressBar-fill{background-color:#9c6;position:absolute;top:1px;left:1px;z-index:20;}.jxProgressBar-container .jxProgressBar .jxProgressBar-text{color:#360;margin:0;padding:2px;position:absolute;top:1px;left:1px;width:auto;z-index:30;border:none;}@CHARSET "ISO-8859-1";.jxSliderContainer{width:100%;height:10px;border:1px solid black;}.jxSliderKnob{width:10px;height:10px;background-color:black;cursor:pointer;}.jxSplitterMask{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;background-image:url(images/a_pixel.png);z-index:1;}.jxSplitBarHorizontal{display:block;position:absolute;font-size:0;line-height:0;margin:0;padding:0;border:none;width:5px;height:100%;cursor:col-resize;background-color:#f0f0f0;z-index:2;}.jxSplitBarVertical{display:block;position:absolute;font-size:0;line-height:0;margin:0;padding:0;border:none;width:100%;height:5px;cursor:row-resize;background-color:#f0f0f0;z-index:2;}.jxSplitContainer{display:block;position:relative;margin:0;padding:0;border:none;overflow:hidden;}.jxSplitArea{display:block;position:absolute;margin:0;padding:0;border:none;z-index:0;}.jxSplitBarDrag{background-color:#eee;}.jxSnapHorizontalBefore{width:5px;height:5px;position:absolute;top:0;left:0;background-color:#aaa;}.jxSnapHorizontalAfter{width:5px;height:5px;position:absolute;top:0;left:0;background-color:#aaa;}.jxTabSetContainer{position:relative;display:block;overflow:hidden;width:200px;height:200px;margin:0;padding:0;background-color:#fff;}.jxTabSetContainer .jxToolbarContainer{z-index:auto;}.tabContent{display:none;position:relative;width:100%;height:100%;overflow:auto;}.tabContentActive{display:block;}div.jxTabContainer{display:block;position:relative;margin:0;padding:2px;border:none;}a.jxTab{display:block;position:relative;cursor:pointer;user-select:none;-moz-user-select:none;-khtml-user-select:none;margin:0;padding:0;border:none;background-repeat:no-repeat;text-decoration:none;outline:none;}span.jxTabContent{display:block;font-size:0;line-height:0;margin:0;padding:0;border:none;background-repeat:no-repeat;}img.jxTabIcon{position:relative;width:16px;height:16px;background-position:center center;background-repeat:no-repeat;}span.jxTabLabel{display:block;position:relative;cursor:pointer;margin:0;padding:0;color:#000;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:16px;}a.jxTabClose{display:block;position:absolute;cursor:pointer;outline:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;}a.jxTabClose img{width:16px;height:16px;background-image:url(images/tab_close.png);}.jxDisabled a.jxTab,.jxDisabled span.jxTabContent span,.jxDisabled a.jxTabClose{cursor:default;}.jxBarTop div.jxTabContainer,.jxBarBottom div.jxTabContainer{float:left;}.jxBarTop a.jxTab,.jxBarTop span.jxTabContent{background-image:url(images/tab_top.png);}.jxBarBottom a.jxTab,.jxBarBottom span.jxTabContent{background-image:url(images/tab_bottom.png);}.jxBarTop a.jxTabClose,.jxBarBottom a.jxTabClose{top:3px;right:3px;}.jxBarTop .jxTabClose span.jxTabContent,.jxBarBottom .jxTabClose span.jxTabContent{padding-right:16px;}.jxBarTop a.jxTab,.jxBarBottom a.jxTab{float:left;padding-left:4px;background-position:left -24px;}.jxBarTop span.jxTabContent,.jxBarBottom span.jxTabContent{float:left;padding:4px 4px 4px 0;background-position:right -24px;}.jxBarTop a.jxTabActive,.jxBarBottom a.jxTabActive{background-position:left -72px;}.jxBarTop a.jxTabActive span.jxTabContent,.jxBarBottom a.jxTabActive span.jxTabContent{background-position:right -72px;}.jxBarTop a.jxTab:focus,.jxBarBottom a.jxTab:focus{background-position:left -96px;}.jxBarTop a.jxTab:focus span.jxTabContent,.jxBarBottom a.jxTab:focus span.jxTabContent{background-position:right -96px;}.jxBarTop a.jxTabActive:focus,.jxBarBottom a.jxTabActive:focus{background-position:left -144px;}.jxBarTop a.jxTabActive:focus span.jxTabContent,.jxBarBottom a.jxTabActive:focus span.jxTabContent{background-position:right -144px;}.jxBarTop a.jxTab:hover,.jxBarTop a.jxTabActive:hover,.jxBarBottom a.jxTab:hover,.jxBarBottom a.jxTabActive:hover{background-position:left -48px;}.jxBarTop a.jxTab:hover span.jxTabContent,.jxBarTop a.jxTabActive:hover span.jxTabContent,.jxBarBottom a.jxTab:hover span.jxTabContent,.jxBarBottom a.jxTabActive:hover span.jxTabContent{background-position:right -48px;}.jxBarTop a.jxTabPressed,.jxBarTop a.jxTabPressed:focus,.jxBarBottom a.jxTabPressed,.jxBarBottom a.jxTabPressed:focus{background-position:left -120px;}.jxBarTop a.jxTabPressed span.jxTabContent,.jxBarTop a.jxTabPressed:focus span.jxTabContent,.jxBarBottom a.jxTabPressed span.jxTabContent,.jxBarBottom a.jxTabPressed:focus span.jxTabContent{background-position:right -120px;}.jxBarTop .jxDisabled a.jxTab:focus,.jxBarTop .jxDisabled a.jxTab:active,.jxBarTop .jxDisabled a.jxTab:hover,.jxBarTop .jxDisabled a.jxTabPressed,.jxBarBottom .jxDisabled a.jxTab:focus,.jxBarBottom .jxDisabled a.jxTab:active,.jxBarBottom .jxDisabled a.jxTab:hover,.jxBarBottom .jxDisabled a.jxTabPressed{background-position:left -24px;}.jxBarTop .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarTop .jxDisabled a.jxTab:active span.jxTabContent,.jxBarTop .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarTop .jxDisabled a.jxTabPressed span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:active span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabPressed span.jxTabContent{background-position:right -24px;}.jxBarTop .jxDisabled a.jxTabActive:focus,.jxBarTop .jxDisabled a.jxTabActive:active,.jxBarTop .jxDisabled a.jxTabActive:hover,.jxBarBottom .jxDisabled a.jxTabActive:focus,.jxBarBottom .jxDisabled a.jxTabActive:active,.jxBarBottom .jxDisabled a.jxTabActive:hover{background-position:left -72px;}.jxBarTop .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarTop .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarTop .jxDisabled a.jxTabActive:hover span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:hover span.jxTabContent{background-position:right -72px;}.jxBarTop img.jxTabIcon,.jxBarBottom img.jxTabIcon{float:left;}.jxBarTop span.jxTabLabel,.jxBarBottom span.jxTabLabel{float:left;height:16px;padding:0 4px 0 4px;}.jxBarLeft a.jxTab,.jxBarLeft span.jxTabContent{background-image:url(images/tab_left.png);}.jxBarRight a.jxTab,.jxBarRight span.jxTabContent{background-image:url(images/tab_right.png);}.jxBarLeft a.jxTabClose,.jxBarRight a.jxTabClose{top:3px;left:3px;}.jxBarLeft .jxTabClose span.jxTabContent,.jxBarRight .jxTabClose span.jxTabContent{padding-top:16px;}.jxBarLeft a.jxTab,.jxBarRight a.jxTab{padding-top:4px;background-position:-24px top;}.jxBarLeft span.jxTabContent,.jxBarRight span.jxTabContent{padding:0 4px 4px 4px;background-position:-24px bottom;}.jxBarLeft a.jxTabActive,.jxBarRight a.jxTabActive{background-position:-72px top;}.jxBarLeft a.jxTabActive span.jxTabContent,.jxBarRight a.jxTabActive span.jxTabContent{background-position:-72px bottom;}.jxBarLeft a.jxTab:focus,.jxBarRight a.jxTab:focus{background-position:-96px top;}.jxBarLeft a.jxTab:focus span.jxTabContent,.jxBarRight a.jxTab:focus span.jxTabContent{background-position:-96px bottom;}.jxBarLeft a.jxTabActive:focus,.jxBarRight a.jxTabActive:focus{background-position:-144px top;}.jxBarLeft a.jxTabActive:focus span.jxTabContent,.jxBarRight a.jxTabActive:focus span.jxTabContent{background-position:-144px bottom;}.jxBarLeft a.jxTab:hover,.jxBarLeft a.jxTabActive:hover,.jxBarRight a.jxTab:hover,.jxBarRight a.jxTabActive:hover{background-position:-48px top;}.jxBarLeft a.jxTab:hover span.jxTabContent,.jxBarLeft a.jxTabActive:hover span.jxTabContent,.jxBarRight a.jxTab:hover span.jxTabContent,.jxBarRight a.jxTabActive:hover span.jxTabContent{background-position:-48px bottom;}.jxBarLeft a.jxTabPressed,.jxBarLeft a.jxTabPressed:focus,.jxBarRight a.jxTabPressed,.jxBarRight a.jxTabPressed:focus{background-position:-120px top;}.jxBarLeft a.jxTabPressed span.jxTabContent,.jxBarLeft a.jxTabPressed:focus span.jxTabContent,.jxBarRight a.jxTabPressed span.jxTabContent,.jxBarRight a.jxTabPressed:focus span.jxTabContent{background-position:-120px bottom;}.jxBarLeft .jxDisabled a.jxTab:focus,.jxBarLeft .jxDisabled a.jxTab:active,.jxBarLeft .jxDisabled a.jxTab:hover,.jxBarLeft .jxDisabled a.jxTabPressed,.jxBarRight .jxDisabled a.jxTab:focus,.jxBarRight .jxDisabled a.jxTab:active,.jxBarRight .jxDisabled a.jxTab:hover,.jxBarRight .jxDisabled a.jxTabPressed{background-position:-24px top;}.jxBarLeft .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarLeft .jxDisabled a.jxTab:active span.jxTabContent,.jxBarLeft .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabPressed span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:active span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarRight .jxDisabled a.jxTabPressed span.jxTabContent{background-position:-24px bottom;}.jxBarLeft .jxDisabled a.jxTabActive:focus,.jxBarLeft .jxDisabled a.jxTabActive:active,.jxBarLeft .jxDisabled a.jxTabActive:hover,.jxBarRight .jxDisabled a.jxTabActive:focus,.jxBarRight .jxDisabled a.jxTabActive:active,.jxBarRight .jxDisabled a.jxTabActive:hover{background-position:-72px top;}.jxBarLeft .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabActive:hover span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:hover span.jxTabContent{background-position:-72px bottom;}.jxBarLeft span.jxTabLabel,.jxBarRight span.jxTabLabel{padding:4px 0 4px 0;}.jxBarContainer{display:block;position:relative;z-index:1;overflow:hidden;margin:0;padding:0;border:0;background-color:#f0f0f0;}.jxBarTop,.jxBarBottom{width:100%;height:28px;background-image:url(images/toolbar.png);background-repeat:repeat-x;background-position:0 0;overflow:hidden;}.jxTabBox .jxTabBarTop{background-image:url(images/tabbar.png);background-position:0 bottom;}.jxTabBox .jxTabBarBottom{background-image:url(images/tabbar_bottom.png);background-position:0 top;}.jxBarLeft,.jxBarRight{width:auto;height:100%;background-image:url(images/toolbar.png);background-repeat:repeat-x;background-position:0 0;float:left;overflow:hidden;}.jxTabBox .jxTabBarLeft{background-image:url(images/tabbar_left.png);background-repeat:repeat-y;background-position:right 0;}.jxTabBox .jxTabBarRight{background-image:url(images/tabbar_right.png);background-repeat:repeat-y;background-position:left 0;}.jxBarTop .jxBarScroller,.jxBarBottom .jxBarScroller{position:absolute;width:10000%;overflow:hidden;}.jxBarTop .jxBarScrollLeft,.jxBarBottom .jxBarScrollLeft{position:absolute;top:0;left:0;}.jxBarTop .jxBarScrollRight,.jxBarBottom .jxBarScrollRight{position:absolute;top:0;right:0;}.jxBarTop .jxBarScrollLeft img.jxButtonIcon,.jxBarBottom .jxBarScrollLeft img.jxButtonIcon{background-image:url(images/emblems.png);background-position:0 -80px;}.jxBarTop .jxBarScrollRight img.jxButtonIcon,.jxBarBottom .jxBarScrollRight img.jxButtonIcon{background-image:url(images/emblems.png);background-position:0 -96px;}ul.jxToolbar,ul.jxTabBar{display:block;position:relative;float:left;list-style-type:none;margin:0;padding:0;border:none;}li.jxToolItem{display:block;position:relative;float:left;font-size:0;line-height:0;padding:0;margin:0;border:none;}li.jxToolItem span.jxBarSeparator{display:block;position:relative;float:left;font-size:0;line-height:0;border:0;margin:0;padding:4px;background-repeat:no-repeat;background-position:center center;}.jxBarTop li.jxToolItem span.jxBarSeparator,.jxBarBottom li.jxToolItem span.jxBarSeparator{width:8px;height:20px;background-image:url(images/toolbar_separator_h.png);}.jxBarLeft li.jxToolItem span.jxBarSeparator,.jxBarRight li.jxToolItem span.jxBarSeparator{width:20px;height:8px;background-image:url(images/toolbar_separator_v.png);}.jxBarLeft ul.jxToolbar,.jxBarLeft ul.jxTabBar,.jxBarLeft li.jxToolItem,.jxBarRight ul.jxToolbar,.jxBarRight ul.jxTabBar,.jxBarRight li.jxToolItem{clear:both;}.jxTooltip{width:auto;height:auto;background-color:black;color:white;padding:5px;z-index:65536;}.jxTree,.jxTreeRoot{position:relative;display:block;list-style:none;margin:0;padding:0;}.jxTreeNest{list-style:none;margin:0;padding:0;background-repeat:repeat-y;background-position:left top;}li.jxTreeContainer{position:relative;display:block;margin:0;padding:0;background-repeat:no-repeat;background-position:left top;white-space:nowrap;font-size:0;line-height:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxTree li.jxTreeContainer{margin-left:16px;}a.jxTreeItem{position:relative;display:block;cursor:pointer;outline:none;overflow:hidden;background-image:url(images/tree_hover.png);background-repeat:repeat-x;background-position:left top;border:none;margin:0 1px 0 15px;padding:0 0 0 20px;z-index:0;font-family:Arial,Helvetica,sans-serif;font-size:11px;color:#000;text-decoration:none;line-height:20px;height:20px;}a.jxTreeItem:focus{border-left:1px dotted #75ADFF;border-right:1px dotted #75ADFF;margin:0 0 0 14px;background-position:left -72px;}a.jxTreeItem:hover{border-left:1px solid #C5E0FF;border-right:1px solid #C5E0FF;margin:0 0 0 14px;background-color:#CDE5FF;background-position:left -24px;}a.jxTreeItemPressed,a.jxTreeItemPressed:hover{border-left:1px solid #C5E0FF;border-right:1px solid #C5E0FF;margin:0 0 0 14px;background-color:#CDE5FF;background-position:left -48px;}.jxDisabled a.jxTreeItem,.jxDisabled a.jxTreeItem{cursor:default;}.jxDisabled a.jxTreeItem:focus,.jxDisabled a.jxTreeItemPressed,.jxDisabled a.jxTreeItemPressed:hover,.jxDisabled a.jxTreeItem:hover{background-position:left top;border:none;margin:0 1px 0 15px;}.jxTreeNest{background-image:url(images/tree_vert_line.png);}img.jxTreeImage,img.jxTreeIcon{position:absolute;display:inline;left:0;top:0;width:16px;height:20px;z-index:1;background-image:url(images/tree.png);background-repeat:no-repeat;border:0;margin:0;}img.jxTreeIcon{height:16px;top:1px;left:1px;}.jxTreeBranchOpen .jxTreeIcon,.jxTreeBranchLastOpen .jxTreeIcon{background-position:left -40px;}.jxTreeBranchOpen .jxTreeImage{background-position:left -100px;}.jxTreeBranchLastOpen .jxTreeImage{background-position:left -160px;}.jxTreeBranchClosed .jxTreeIcon,.jxTreeBranchLastClosed .jxTreeIcon{background-position:left -20px;}.jxTreeBranchClosed .jxTreeImage{background-position:left -80px;}.jxTreeBranchLastClosed .jxTreeImage{background-position:left -140px;}.jxTreeLeaf .jxTreeIcon,.jxTreeLeafLast .jxTreeIcon{background-position:left 0;}.jxTreeLeaf .jxTreeImage{background-position:left -60px;}.jxTreeLeafLast .jxTreeImage{background-position:left -120px;}.jxTreeItemSelected{background-color:#AFD4FA;font-weight:bold;}a.jxTreeItem,img.jxTreeImage,img.jxTreeIcon,span.jxTreeLabel,.jxTreeItemContainer input{vertical-align:middle;}.jxFileUploadPanel{padding:5px;}.jxFileUploadPanel .jxInputContainer{width:300px;}.jxUploadQueue{width:100%;margin-top:10px;}.jxUploadQueue div{position:relative;width:95%;clear:both;border-top:1px solid black;padding:2px;}.jxUploadQueue div span{display:block;}.jxUploadQueue div span.jxUploadFileName{float:left;font-size:16px;}.jxUploadQueue div span.jxUploadFileDelete,.jxUploadQueue div span.jxUploadFileProgress,.jxUploadQueue div span.jxUploadFileComplete,.jxUploadQueue div span.jxUploadFileError{float:right;width:16px;height:16px;background-repeat:no-repeat;background-position:top left;cursor:pointer;}.jxUploadQueue div span.jxUploadFileDelete{background-image:url('images/delete.gif');}.jxUploadQueue div span.jxUploadFileProgress{background-image:url('images/loading.gif');}.jxUploadQueue div span.jxUploadFileComplete{background-image:url('images/green_tick.png');}.jxUploadQueue div span.jxUploadFileError{background-image:url('images/error.png');}.jxUploadFileErrorTip{padding:4px 4px 4px 20px;border:2px solid #ddd;background:url("images/error.png") no-repeat left top;color:black;width:100px;}
\ No newline at end of file
+ */body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';}.jxButtonContainer{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:2px;border:none;}.jxButton{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:0 0 0 4px;border:none;background-image:url(images/button.png);background-position:left -24px;background-repeat:no-repeat;text-decoration:none;outline:none;}a.jxButton{cursor:pointer;user-select:none;-moz-user-select:none;-khtml-user-select:none;}ul.jxToolbar .jxButton{background-position:left top;}span.jxButtonContent{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:4px 4px 4px 0;border:none;background-image:url(images/button.png);background-position:right -24px;background-repeat:no-repeat;}ul.jxToolbar span.jxButtonContent{background-position:right top;}ul.jxToolbar .jxButtonActive,.jxButtonActive{background-position:left -72px;}ul.jxToolbar .jxButtonActive span.jxButtonContent,.jxButtonActive span.jxButtonContent{background-position:right -72px;}ul.jxToolbar .jxButton:focus,.jxButton:focus{background-position:left -96px;}ul.jxToolbar .jxButton:focus span.jxButtonContent,.jxButton:focus span.jxButtonContent{background-position:right -96px;}ul.jxToolbar .jxButtonActive:focus,.jxButtonActive:focus{background-position:left -144px;}ul.jxToolbar .jxButtonActive:focus span.jxButtonContent,.jxButtonActive:focus span.jxButtonContent{background-position:right -144px;}ul.jxToolbar .jxButton:hover,ul.jxToolbar .jxButtonActive:hover,.jxButton:hover,.jxButtonActive:hover{background-position:left -48px;}ul.jxToolbar .jxButton:hover span.jxButtonContent,ul.jxToolbar .jxButtonActive:hover span.jxButtonContent,.jxButton:hover span.jxButtonContent,.jxButtonActive:hover span.jxButtonContent{background-position:right -48px;}ul.jxToolbar .jxButtonPressed,ul.jxToolbar .jxButtonPressed:focus,.jxButtonPressed,.jxButtonPressed:focus{background-position:left -120px;}ul.jxToolbar .jxButtonPressed span.jxButtonContent,ul.jxToolbar .jxButtonPressed:focus span.jxButtonContent,.jxButtonPressed span.jxButtonContent,.jxButtonPressed:focus span.jxButtonContent{background-position:right -120px;}.jxDisabled .jxButton,.jxDisabled span.jxButtonContent span{cursor:default;}ul.jxToolbar .jxDisabled .jxButton:focus,ul.jxToolbar .jxDisabled .jxButton:active,ul.jxToolbar .jxDisabled .jxButton:hover,ul.jxToolbar .jxDisabled .jxButtonPressed{background-position:left top;}.jxDisabled .jxButton:focus,.jxDisabled .jxButton:active,.jxDisabled .jxButton:hover,.jxDisabled .jxButtonPressed{background-position:left -24px;}ul.jxToolbar .jxDisabled .jxButton:focus span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButton:active span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButton:hover span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonPressed span.jxButtonContent{background-position:right top;}.jxDisabled .jxButton:focus span.jxButtonContent,.jxDisabled .jxButton:active span.jxButtonContent,.jxDisabled .jxButton:hover span.jxButtonContent,.jxDisabled .jxButtonPressed span.jxButtonContent{background-position:right -24px;}ul.jxToolbar .jxDisabled .jxButtonActive:focus,ul.jxToolbar .jxDisabled .jxButtonActive:active,ul.jxToolbar .jxDisabled .jxButtonActive:hover,.jxDisabled .jxButtonActive:focus,.jxDisabled .jxButtonActive:active,.jxDisabled .jxButtonActive:hover{background-position:left -72px;}ul.jxToolbar .jxDisabled .jxButtonActive:focus span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonActive:active span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonActive:hover span.jxButtonContent,.jxDisabled .jxButtonActive:focus span.jxButtonContent,.jxDisabled .jxButtonActive:active span.jxButtonContent,.jxDisabled .jxButtonActive:hover span.jxButtonContent{background-position:right -72px;}img.jxButtonIcon{display:-moz-inline-box;display:inline-block;position:relative;vertical-align:middle;width:16px;height:16px;background-position:center center;background-repeat:no-repeat;}span.jxButtonContent span{display:-moz-inline-box;display:inline-block;position:relative;vertical-align:middle;cursor:pointer;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:16px;height:16px;white-space:nowrap;}span.jxButtonContent span.jxButtonLabel{margin:0;padding:0 4px 0 4px;color:#000;font-size:11px;}.jxDiscloser span.jxButtonContent{padding-right:0;}.jxDiscloser span.jxButtonContent span{padding-right:16px;background-image:url(images/emblems.png);background-position:right -16px;background-repeat:no-repeat;}a.jxButtonDisclose{position:absolute;display:-moz-inline-box;display:inline-block;padding:4px 0;font-size:0;line-height:0;right:2px;top:2px;background-image:url(images/button_multi_disclose.png);background-position:right 0;background-repeat:no-repeat;outline:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;}a.jxButtonDisclose img{width:16px;height:16px;margin:0;padding:0;border:0;background-image:url(images/emblems.png);background-position:right -16px;background-repeat:no-repeat;}a.jxButtonDisclose:focus,a.jxButtonDisclose:active{background-position:right -96px;}a.jxButtonDisclose:hover{background-position:right -48px;}a.jxButtonDisclosePressed{background-position:right -120px;}.jxDisabled a.jxButtonDisclose,.jxDisabled a.jxButtonDisclose:focus,.jxDisabled a.jxButtonDisclose:active,.jxDisabled a.jxButtonDisclose:hover,.jxDisabled a.jxButtonDisclosePressed{cursor:default;background-position:right 0;}ul.jxToolbar .jxButtonHover{background-position:left -24px!important;}ul.jxToolbar .jxButtonHover span.jxButtonContent{background-position:right -24px!important;}.jxFlyout .jxChrome{background-image:url(images/flyout_chrome.png);padding:5px 5px 7px 6px;}.jxFlyout{position:absolute;display:block;z-index:100;margin:0;padding:0;}.jxFlyoutContent{position:relative;display:block;overflow:auto;margin:6px 6px 8px 7px;background-color:#fff;border:1px solid #999;}.jxButtonMulti,.jxButtonMulti span.jxButtonContent{background-image:url(images/button_multi.png);}.jxButtonEditCombo,.jxButtonEditCombo span.jxButtonContent{background-image:url(images/button_combo.png);}.jxButtonMulti span.jxButtonContent span{padding-right:21px;}.jxButtonEditCombo span.jxButtonContent span{font-size:0;}.jxButtonComboDefault span.jxButtonContent span,.jxButtonComboDefault input{font-style:italic;color:#999;}.jxButtonEditCombo input{float:left;line-height:16px;height:16px;padding:0 4px;margin:0;border:none;font-size:11px;font-family:Arial,Helvetica,sans-serif;background-color:transparent;}.jxChrome{position:absolute;display:block;font-size:0;line-height:0;z-index:-1;width:100%;height:100%;top:0;left:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxChromeDrag{opacity:.5;-ms-filter:"Alpha(opacity=50)";}.jxChromeTL{position:absolute;overflow:hidden;left:0;top:0;width:50%;height:50%;}.jxChromeTR{position:absolute;overflow:hidden;left:50%;top:0;width:50%;height:50%;}.jxChromeBL{position:absolute;overflow:hidden;left:0;top:50%;width:50%;height:50%;}.jxChromeBR{position:absolute;overflow:hidden;left:50%;top:50%;width:50%;height:50%;}.jxChromeTL img{position:absolute;top:0;left:0;width:1000px;height:600px;}.jxChromeTR img{position:absolute;top:0;right:0;width:1000px;height:600px;}.jxChromeBL img{position:absolute;bottom:0;left:0;width:1000px;height:600px;}.jxChromeBR img{position:absolute;bottom:0;right:0;width:1000px;height:600px;}.jxColorBar{position:relative;overflow:hidden;}table.jxColorGrid{position:relative;border-collapse:collapse;empty-cells:show;clear:both;padding:0;margin:0;}.jxColorGrid tr{padding:0;margin:0;}.jxColorGrid td{border:1px solid #000;padding:0;margin:0;}.jxColorGrid td.emptyCell{border:0 solid #000;}.jxColorGrid td.emptyCell span{display:block;width:7px;height:7px;line-height:0;font-size:0;border:0 solid #000;padding:1px;margin:0;}.jxColorGrid a.colorSwatch{display:block;width:7px;height:7px;line-height:0;font-size:0;border:0 solid #000;margin:0;padding:1px;}.jxColorGrid a.borderWhite:hover{border:1px solid #fff;padding:0;}.jxColorGrid a.borderBlack:hover{border:1px solid #000;padding:0;}input.jxHexInput{width:55px;vertical-align:middle;}input.jxAlphaInput{width:30px;vertical-align:middle;}div.jxColorPreview{float:left;position:relative;width:20px;height:20px;border:1px solid #000;margin:2px;vertical-align:middle;background-image:url('images/grid.png');overflow:hidden;}.jxButtonFlyout span.jxButtonContent span.jxButtonSwatch{display:block;float:left;width:14px;height:14px;border:1px solid #000;background-image:url('images/grid.png');background-position:0 0;background-repeat:repeat;padding-right:0!important;}.jxButtonFlyout span.jxButtonContent span.jxButtonSwatch span{display:block;width:14px;height:14px;position:absolute;padding-right:0;background:none;}div.jxColorPreview img{position:absolute;z-index:0;}div.jxColorPreview div{width:20px;height:10px;position:absolute;display:block;left:0;z-index:1;font-size:10px;line-height:0;}div.jxColorPreview div.jxColorSelected{top:0;}div.jxColorPreview div.jxColorHover{bottom:0;}label.jxColorLabel,label.jxAlphaLabel{width:auto;font-family:Arial,sans-serif;font-size:11px;line-height:24px;padding:2px;vertical-align:middle;}a.jxColorClose{position:absolute;top:0;right:0;width:16px;height:16px;}a.jxColorClose img{width:16px;height:16px;}.jxClearer{display:block;position:relative;float:none;clear:both;font-size:0;line-height:0;width:0;height:0;margin:0;padding:0;}.jxDisabled{opacity:.4;-ms-filter:"Alpha(opacity=40)";}.jxDisabled *{-ms-filter:"Alpha(opacity=40)";}iframe.jxIframeShim{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;-ms-filter:"Alpha(opacity=0)";z-index:-1;}@CHARSET "ISO-8859-1";.jxConfirmQuestion{text-align:center;padding:10px;margin-top:10px;}.jxDialog .jxChrome{background-image:url(images/dialog_chrome.png);}.jxDialog{display:block;z-index:1000;overflow:hidden;}.jxDialogContentContainer{z-index:1;margin:0 11px 13px 12px;border:1px solid #b7b7b7;background-color:#f0f0f0;}.jxDialogModal{position:absolute;display:block;top:0;left:0;width:100%;height:100%;background-color:#000;opacity:.2;-ms-filter:"Alpha(opacity=20)";}.jxDialogContent{display:block;position:relative;overflow:auto;padding:0;z-index:1;}.jxDialogTitle{display:block;position:relative;background-image:url(images/a_pixel.png);text-align:center;height:24px;line-height:24px;z-index:1;margin:6px 6px 0 7px;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxDialogMin .jxDialogTitle{margin-bottom:8px;}.jxDialogMoveable,.jxDialogMoveable .jxDialogLabel{cursor:move;}.jxDialogIcon{position:absolute;left:2px;top:3px;width:16px;height:16px;border:none;padding:0;margin:0;}.jxDialogLabel{font-family:Arial,Helvetica,sans-serif;font-size:11px;font-weight:bold;line-height:21px;color:#000;white-space:nowrap;cursor:default;}.jxDialogResize{position:absolute;bottom:7px;right:6px;width:16px;height:16px;z-index:2;border:0;cursor:se-resize;background-image:url(images/dialog_resize.png);}.jxDialogControls{position:absolute;top:3px;right:2px;height:16px;width:80px;}.jxDialogControls img{background-image:url('images/panel_controls.png');background-repeat:no-repeat;border:0;margin:0;width:16px;height:16px;}.jxDialogClose img{background-position:0 -32px;}.jxDialogMenu img{background-position:0 -48px;}.jxDialogHelp img{background-position:0 -64px;}.jxDialogCollapse img{background-position:0 -16px;}.jxDialogMin .jxDialogCollapse img{background-position:0 0;}.jxDialogMax .jxDialogCollapse img{background-position:0 -16px;}.jxDialogLoading img{border:0;margin:0;width:16px;height:16px;visibility:hidden;position:absolute;top:1px;left:2px;}.jxDialogControls .jxButtonContainer,.jxDialogControls span.jxButtonContent,.jxDialogControls .jxButton:hover span.jxButtonContent,.jxDialogControls .jxButton:active span.jxButtonContent,.jxDialogControls .jxButtonActive span.jxButtonContent,.jxDialogControls .jxButtonActive:hover span.jxButtonContent,.jxDialogControls .jxButtonActive:active span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton:hover span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton:active span.jxButtonContent,.jxDialogControls .jxButton,.jxDialogControls .jxButton:hover,.jxDialogControls .jxButton:active,.jxDialogControls .jxButtonActive,.jxDialogControls .jxButtonActive:hover,.jxDialogControls .jxButtonActive:active,.jxDialogControls .jxDisabled .jxButton,.jxDialogControls .jxDisabled .jxButton:hover,.jxDialogControls .jxDisabled .jxButton:active{padding:0;margin:0;border:none;background-color:transparent;background-image:none;}.jxDialogControls .jxButtonMenu span.jxButtonContent,.jxDialogControls .jxButtonFlyout span.jxButtonContent{background-image:none;}.jxDialogControls .jxButtonMenu span.jxButtonContent span,.jxDialogControls .jxButtonFlyout span.jxButtonContent span{padding-right:0;}.jxDialogControls .jxBarContainer{position:absolute;right:0;background-image:none;background-color:transparent;margin:0;padding:0;border:none;height:16px;}.jxDialogControls .jxBarScroller{left:auto;right:0;}.jxDialogControls ul.jxToolbar{float:right;}.jxDialogControls ul.jxToolbar,.jxDialogControls li.jxToolItem{background-image:none;background-color:transparent;margin:0;padding:0;border:none;}div.jxFileInputs{position:relative;}div.jxFileFake{position:absolute;top:0;left:0;z-index:1;}div.jxFileFake span{float:left;display:block;}div.jxFileFake .jxInputContainer{width:150px;}div.jxFileFake .jxInputText{width:135px;}div.jxFileFake .jxButtonContainer{margin-top:6px;float:left;}.jxInputFile{position:relative;text-align:right;-moz-opacity:0;filter:alpha(opacity:0);opacity:0;z-index:2;margin-top:3px;height:35px;width:100%;}.jxForm{display:block;position:relative;overflow:hidden;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxFieldset{display:block;position:relative;overflow:hidden;border:1px solid #ccc;margin:10px;padding:5px;}.jxFieldsetLegend,.jxFieldset legend{position:relative;margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:26px;color:#000;}.jxInputContainer{display:block;position:relative;padding:0;margin:2px;border:none;}.jxInputLabel,.jxInputTag{display:-moz-inline-box;display:inline-block;margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:26px;color:#000;}.jxInputLabel{vertical-align:top;}.jxInputTag{vertical-align:bottom;}.jxInputText,.jxInputPassword,.jxInputTextarea{margin:0 4px;padding:4px;border:1px solid #bbb;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputSelect{margin:0 4px;padding:3px 4px 3px 1px;border:1px solid #bbb;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputText:focus,.jxInputPassword:focus,.jxInputTextarea:focus,.jxInputSelect:focus{border:1px solid #000;}.jxInputRadio,.jxInputCheck{margin:5px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputContainer .jxButtonContainer{padding:0;margin:0 4px;}.jxInputGroup{border:none;padding:0;margin:2px;}.jxInputGroup legend{font-size:0;line-height:0;padding:0;margin:0;border:none;}.jxInputGroup .jxFieldsetLegend{font-size:12px;}.jxInputGroup .jxInputLabel{width:auto;}.jxFieldError .jxInputText,.jxFieldError .jxInputPassword,.jxFieldError .jxInputTextarea,.jxFieldError .jxInputSelect{background-color:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;}.jxFieldSuccess .jxInputText,.jxFieldSuccess .jxInputPassword,.jxFieldSuccess .jxInputTextarea,.jxFieldSuccess .jxInputSelect{background-color:#E6EFC2;color:#264409;border-color:#C6D880;}.jxFieldError .jxInputText:focus,.jxFieldError .jxInputPassword:focus,.jxFieldError .jxInputTextarea:focus,.jxFieldError .jxInputSelect:focus{border-color:#8a1f11;}.jxFieldSuccess .jxInputText:focus,.jxFieldSuccess .jxInputPassword:focus,.jxFieldSuccess .jxInputTextarea:focus,.jxFieldSuccess .jxInputSelect:focus{border-color:#264409;}.jxFieldError .jxInputLabel,.jxFieldError .jxInputTag{color:#8a1f11;}.jxFieldSuccess .jxInputLabel,.jxFieldSuccess .jxInputTag{color:#264409;}.jxFormInline .jxInputContainer,form .jxFormInline .jxInputContainer,form .jxFieldset span.jxFormInline,form.jxForm span.jxFormInline{display:inline;}.jxFormInline .jxInputLabel,form .jxFormInline .jxInputLabel,form span.jxFormInline .jxInputLabel{display:inline;width:auto;}.jxFormInline .jxInputTag,form .jxFormInline .jxInputTag,form span.jxFormInline .jxInputTag{display:inline;}.jxFormInline .jxInputGroup,form .jxFormInline .jxInputGroup{padding-left:0;}.jxFormInline .jxInputGroup .jxFieldsetLegend,form .jxFormInline .jxInputGroup .jxFieldsetLegend{position:relative;left:auto;}.jxFormInline .jxInputGroup .jxInputLabel,form .jxFormInline .jxInputGroup .jxInputLabel{display:inline;width:auto;}.jxFormBlock .jxInputContainer,form .jxFormBlock .jxInputContainer,form .jxFieldset span.jxFormBlock,form.jxform span.jxFormBlock{display:block;}.jxFormBlock .jxInputLabel,form .jxFormBlock .jxInputLabel,form span.jxFormBlock .jxInputLabel{display:block;width:auto;margin-left:4px;}.jxFormBlock .jxInputContainerCheck .jxInputLabel,.jxFormBlock .jxInputContainerRadio .jxInputLabel,form .jxFormBlock .jxInputContainerCheck .jxInputLabel,form .jxFormBlock .jxInputContainerRadio .jxInputLabel,form span.jxFormBlock .jxInputContainerCheck .jxInputLabel,form span.jxFormBlock .jxInputContainerRadio .jxInputLabel{display:-moz-inline-box;display:inline-block;}.jxFormBlock .jxInputGroup,form .jxFormBlock .jxInputGroup{padding-left:0;}.jxFormBlock .jxInputGroup .jxFieldsetLegend,form .jxFormBlock .jxInputGroup .jxFieldsetLegend{position:relative;left:auto;}.jxFormBlock .jxInputGroup .jxInputLabel,form .jxFormBlock .jxInputGroup .jxInputLabel{display:-moz-inline-box;display:inline-block;width:auto;}.jxFormInlineblock .jxInputContainer,form .jxFormInlineblock .jxInputContainer,form .jxFieldset span.jxFormInlineblock,form.jxForm span.jxFormInlineblock{display:block;}.jxFormInlineblock .jxInputLabel,form .jxFormInlineblock .jxInputLabel,form span.jxFormInlineblock .jxInputLabel{display:-moz-inline-box;display:inline-block;width:200px;}.jxFormInlineblock .jxInputGroup,form .jxFormInlineblock .jxInputGroup{padding-left:200px;}.jxFormInlineblock .jxInputGroup .jxFieldsetLegend,form .jxFormInlineblock .jxInputGroup .jxFieldsetLegend{position:absolute;left:-200px;width:200px;}.jxFormInlineblock .jxInputGroup .jxInputLabel,form .jxFormInlineblock .jxInputGroup .jxInputLabel{display:-moz-inline-box;display:inline-block;width:auto;}.jxGridContainer{position:absolute;top:0;left:0;border-left:0 solid #d8d8d8;border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;overflow:hidden;}.jxGridTable{position:relative;table-layout:fixed;border-collapse:collapse;border-style:none;cursor:default;font-family:Arial,Verdana,sans-serif;font-size:11px;font-weight:normal;}.jxGridHeader{width:100%;}.jxGridTableBody{position:relative;table-layout:fixed;border-collapse:collapse;border-style:none;cursor:default;font-family:Arial,Verdana,sans-serif;font-size:11px;font-weight:normal;}.jxGridColHeadHide{height:0;line-height:0;font-size:0;background-color:#fff;white-space:normal;}.jxGridColHeadHide p,.jxGridRowHeadHide p{font-size:0;line-height:0;height:0;margin:0;padding:0;}.jxGridRowHeadHide{width:0;white-space:normal;}.jxGridCell{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;overflow:hidden;}.jxGridCellContent{position:relative;display:-moz-inline-box;display:inline-block;overflow:hidden;padding-left:3px;padding-right:3px;overflow:hidden;white-space:nowrap;cursor:cell;text-overflow:ellipsis;}.jxGridColHead{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;background-color:#f2f2f2;background-image:url('images/table_col.png');background-position:0 0;background-repeat:repeat-x;text-align:center;font-weight:bold;color:#333;cursor:default;padding-left:3px;padding-right:3px;white-space:nowrap;}.jxGridRowHead{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;background-color:#f2f2f2;background-image:url('images/table_row.png');background-position:0 0;background-repeat:repeat-y;text-align:center;font-weight:bold;color:#333;cursor:default;overflow:hidden;white-space:nowrap;}.jxGridRowAll{background-color:#fff;}.jxGridColumnHeaderSelected{background-color:#e1e1e1;background-position:0 -200px;}.jxGridRowHeaderSelected{background-color:#e1e1e1;background-position:-400px 0;}.jxGridColumnSelected{background-color:#f7f7f7;}.jxGridRowSelected td{background-color:#f7f7f7;}td.jxGridCellSelected{background-color:#ebebeb;}.jxGridColumnHeaderPrelight{background-color:#cee5ff;background-position:0 -300px;}.jxGridRowHeaderPrelight{background-color:#cee5ff;background-position:-600px 0;}.jxGridColumnPrelight{background-color:#e5f1ff;}.jxGridRowPrelight td{background-color:#e5f1ff;}td.jxGridCellPrelight{background-color:#cce3ff;}.jxColSortable{padding-right:20px;}.jxGridCell.jxColSortable{padding-right:0;}.jxColSortable span{background-image:url('images/emblems.png');padding-right:20px;background-repeat:no-repeat;background-position:right top;}.jxGridColumnSortedAsc span{background-position:right -160px;}.jxGridColumnSortedDesc span{background-position:right -16px;}.jxGridColumnResize,.jxGridRowResize{display:block;position:absolute;background-image:url(images/a_pixel.png);z-index:1;}.jxGridColumnResize{right:0;top:0;height:100%;width:4px;cursor:col-resize;}.jxGridRowResize{left:0;bottom:0;height:4px;width:100%;cursor:row-resize;}.jxListView .jxListItemContainer{position:relative;display:block;outline:none;overflow:hidden;border:none;margin:0 1px;padding:0;}.jxListItem{position:relative;display:block;cursor:pointer;outline:none;overflow:hidden;border:none;margin:0 1px;padding:0;z-index:0;font-family:Arial,Helvetica,sans-serif;font-size:11px;color:#000;text-decoration:none;line-height:20px;height:20px;}.jxListView .jxHover{margin:0;border-left:1px solid #CDDFFD;border-right:1px solid #CDDFFD;background-image:url(images/listitem.png);background-repeat:repeat-x;background-color:#CDE5FF;background-position:left -24px;}.jxListItem:focus{margin:0;border-left:1px dotted #75ADFF;border-right:1px dotted #75ADFF;background-image:url(images/listitem.png);background-repeat:repeat-x;background-position:left -72px;}.jxListView .jxPressed,.jxListView .jxSelected{margin:0;border-left:1px solid #8AABFB;border-right:1px solid #8AABFB;background-color:#CDE5FF;background-image:url(images/listitem.png);background-repeat:repeat-x;background-position:left -48px;}.jxMenuContainer .jxChrome{background-image:url(images/flyout_chrome.png);padding:5px 5px 7px 6px;}.jxButtonMenu span.jxMenuItemSpan{padding-right:16px;}.jxMenuContainer{position:absolute;top:0;left:-10000px;display:none;z-index:2000;padding:0;}ul.jxMenu{display:block;position:relative;list-style-type:none;padding:1px;margin:6px 6px 8px 7px;background-color:#fff;border:1px solid #999;}li.jxMenuItemContainer{display:block;position:relative;font-size:0;line-height:0;margin:0;padding:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}a.jxMenuItem{display:block;position:relative;overflow:hidden;text-decoration:none;cursor:pointer;outline:none;border:1px solid #fff;background-image:url(images/menuitem.png);background-repeat:no-repeat;background-position:left top;font-family:Arial,Helvetica,sans-serif;font-size:11px;text-decoration:none;margin:0;padding:0;color:#000;}a.jxMenuItemActive{background-position:left -98px;}a.jxMenuItem:focus{background-position:left -74px;}a.jxMenuItem:focus span.jxMenuItemContent{border-right:1px dotted #75ADFF;}a.jxMenuItemActive:focus{background-position:left -170px;}a.jxMenuItem:hover{background-color:#CDE5FF;background-position:left -26px;}a.jxMenuItem:hover span.jxMenuItemContent{border-right:1px solid #C5E0FF;}a.jxMenuItemActive:hover{background-position:left -122px;}a.jxMenuItemPressed,a.jxMenuItemPressed:hover{background-color:#CDE5FF;background-position:left -50px;}.jxDisabled a.jxMenuItem,.jxDisabled span.jxMenuItemContent span{cursor:default;}.jxDisabled a.jxMenuItem:focus,.jxDisabled a.jxMenuItemPressed,.jxDisabled a.jxMenuItemPressed:hover,.jxDisabled a.jxMenuItem:hover{background-color:#fff;background-position:left top;border-right:1px solid #fff;}.jxDisabled a.jxMenuItem:hover span.jxMenuItemContent{border-right:1px solid #fff;}span.jxMenuItemContent{display:block;position:relative;font-family:Arial,Helvetica,sans-serif;font-size:0;line-height:0;white-space:nowrap;padding:0 20px 0 0;margin:0;border-right:1px solid #fff;}.jxButtonSubMenu span.jxMenuItemContent,.jxButtonSubMenu:hover span.jxMenuItemContent{background-image:url(images/emblems.png);background-position:right -30px;background-repeat:no-repeat;}img.jxMenuItemIcon{position:absolute;top:2px;left:2px;width:16px;height:16px;background-position:left center;background-repeat:no-repeat;}span.jxMenuItemContent span{display:block;position:relative;cursor:pointer;margin:0;padding:2px 0 2px 22px;font-size:16px;line-height:16px;color:#000;}span.jxMenuItemContent span.jxMenuItemLabel{color:#000;font-size:11px;}.jxMenuItemToggle img.jxMenuItemIcon,.jxMenuItemToggleSet img.jxMenuItemIcon{background-image:url(images/emblems.png);background-position:2px 0;background-repeat:no-repeat;}.jxMenuItemToggle a.jxMenuItemActive img.jxMenuItemIcon{background-position:2px -48px;}.jxMenuItemToggleSet a.jxMenuItemActive img.jxMenuItemIcon{background-position:2px -64px;}ul.jxMenu span.jxMenuSeparator{display:block;font-size:10px;line-height:10px;background-image:url(images/toolbar_separator_v.png);background-repeat:repeat-x;background-position:left center;}@CHARSET "ISO-8859-1";.jxMessage{text-align:center;padding:10px;margin-top:10px;}.jxNoticeListContainer{border:none;padding:0;margin:0;font-size:0;line-height:0;z-index:500;}.jxNoticeList{position:relative;}.jxNoticeItemContainer{position:relative;overflow:hidden;}.jxNoticeItemContainer .jxChrome{background-image:url(images/flyout_chrome.png);padding:5px 5px 7px 6px;}.jxHasChrome .jxNoticeItem{margin:6px 6px 8px 7px;}.jxNoticeItem{position:relative;border:2px solid #ccc;margin:0;padding:0;background-color:#f8f8f8;background-image:url(images/notice.png);background-repeat:repeat-x;background-position:left bottom;}.jxNoticeIcon{position:absolute;top:0;left:0;margin:6px;width:16px;height:16px;background-image:url(images/icons.png);background-repeat:no-repeat;background-position:0 0;}.jxNotice{display:block;position:relative;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;color:#666;margin:0;border:none;padding:6px 26px 6px 10px;}.jxNoticeError .jxNoticeItem{background-color:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;background-image:url(images/notice_error.png);}.jxNoticeWarning .jxNoticeItem{background-color:#FFF6BF;color:#514721;border-color:#FFD324;background-image:url(images/notice_warning.png);}.jxNoticeSuccess .jxNoticeItem{background-color:#E6EFC2;color:#264409;border-color:#C6D880;background-image:url(images/notice_success.png);}.jxNoticeError .jxNotice{color:#8a1f11;padding-left:28px;}.jxNoticeWarning .jxNotice{color:#514721;padding-left:28px;}.jxNoticeSuccess .jxNotice{color:#264409;padding-left:28px;}.jxNoticeInfo .jxNotice{padding-left:28px;}.jxNoticeError .jxNoticeIcon{background-position:0 -32px;}.jxNoticeWarning .jxNoticeIcon{background-position:0 -16px;}.jxNoticeSuccess .jxNoticeIcon{background-position:0 -48px;}.jxNoticeInfo .jxNoticeIcon{background-position:0 -64px;}.jxNoticeClose{position:absolute;top:0;right:0;margin:6px;width:16px;height:16px;background-image:url(images/tab_close.png);background-position:0 0;background-repeat:no-repeat;}.jxPanel{display:block;position:relative;}.jxPanelContentContainer{overflow:hidden;background-color:#f0f0f0;}.jxPanelContent{position:relative;display:block;overflow:auto;background-color:#fff;margin:0;padding:0;}.jxPanelTitle{display:block;position:relative;background-image:url(images/panelbar.png);background-repeat:repeat-x;background-position:left top;height:22px;margin:0;padding:0;text-align:center;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxPanelBar{position:absolute;line-height:1px;width:100%;height:5px;cursor:row-resize;background-color:#f0f0f0;z-index:2;}.jxPanelIcon{position:absolute;left:2px;top:3px;width:16px;height:16px;border:none;padding:0;margin:0;}.jxPanelLabel{padding-left:25px;font-family:Arial,Helvetica,sans-serif;font-size:11px;font-weight:bold;line-height:21px;color:#000;white-space:nowrap;}.jxPanelControls{position:absolute;top:3px;right:2px;height:16px;width:80px;overflow:hidden;}.jxPanelControls img{background-image:url('images/panel_controls.png');background-repeat:no-repeat;border:0;margin:0;width:16px;height:16px;}.jxPanelClose img{background-position:0 -32px;}.jxPanelMenu img{background-position:0 -48px;}.jxPanelHelp img{background-position:0 -64px;}.jxPanelCollapse img{background-position:0 -16px;}.jxPanelMin .jxPanelCollapse img{background-position:0 0;}.jxPanelMax .jxPanelCollapse img{background-position:0 -16px;}.jxPanelMaximize img{background-position:0 0;}.jxPanelLoading img{border:0;margin:0;width:16px;height:16px;visibility:hidden;position:absolute;top:1px;left:2px;}.jxPanelControls .jxButtonContainer,.jxPanelControls span.jxButtonContent,.jxPanelControls .jxButton:hover span.jxButtonContent,.jxPanelControls .jxButton:active span.jxButtonContent,.jxPanelControls .jxButtonActive span.jxButtonContent,.jxPanelControls .jxButtonActive:hover span.jxButtonContent,.jxPanelControls .jxButtonActive:active span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton:hover span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton:active span.jxButtonContent,.jxPanelControls .jxButton,.jxPanelControls .jxButton:hover,.jxPanelControls .jxButton:active,.jxPanelControls .jxButtonActive,.jxPanelControls .jxButtonActive:hover,.jxPanelControls .jxButtonActive:active,.jxPanelControls .jxDisabled .jxButton,.jxPanelControls .jxDisabled .jxButton:hover,.jxPanelControls .jxDisabled .jxButton:active{padding:0;margin:0;border:none;background-color:transparent;background-image:none;}.jxPanelControls .jxButtonMenu span.jxButtonContent,.jxPanelControls .jxButtonFlyout span.jxButtonContent{background-image:none;}.jxPanelControls .jxButtonMenu span.jxButtonContent span,.jxPanelControls .jxButtonFlyout span.jxButtonContent span{padding-right:0;}.jxPanelControls div.jxBarTop{position:absolute;right:0;background-image:none;background-color:transparent;margin:0;padding:0;border:none;height:16px;}.jxPanelControls .jxBarScroller{left:auto;right:0;}.jxPanelControls ul.jxToolbar{float:right;}.jxPanelControls ul.jxToolbar,.jxPanelControls li.jxToolItem{background-image:none;background-color:transparent;margin:0;padding:0;border:none;}@CHARSET "ISO-8859-1";.jxProgressBar-container{width:100%;display:block;clear:both;}.jxProgressBar-message{color:black;}.jxProgressBar-container .jxProgressBar{width:100%;clear:both;border-top:none;}.jxProgressBar-container .jxProgressBar .jxProgressBar-outline{border:1px solid #360;position:absolute;top:0;left:0;z-index:10;}.jxProgressBar-container .jxProgressBar .jxProgressBar-fill{background-color:#9c6;position:absolute;top:1px;left:1px;z-index:20;}.jxProgressBar-container .jxProgressBar .jxProgressBar-text{color:#360;margin:0;padding:2px;position:absolute;top:1px;left:1px;width:auto;z-index:30;border:none;}@CHARSET "ISO-8859-1";.jxSliderContainer{width:100%;height:10px;border:1px solid black;}.jxSliderKnob{width:10px;height:10px;background-color:black;cursor:pointer;}.jxSplitterMask{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;background-image:url(images/a_pixel.png);z-index:1;}.jxSplitBarHorizontal{display:block;position:absolute;font-size:0;line-height:0;margin:0;padding:0;border:none;width:5px;height:100%;cursor:col-resize;background-color:#f0f0f0;z-index:2;}.jxSplitBarVertical{display:block;position:absolute;font-size:0;line-height:0;margin:0;padding:0;border:none;width:100%;height:5px;cursor:row-resize;background-color:#f0f0f0;z-index:2;}.jxSplitContainer{display:block;position:relative;margin:0;padding:0;border:none;overflow:hidden;}.jxSplitArea{display:block;position:absolute;margin:0;padding:0;border:none;z-index:0;}.jxSplitBarDrag{background-color:#eee;}.jxSnapHorizontalBefore{width:5px;height:5px;position:absolute;top:0;left:0;background-color:#aaa;}.jxSnapHorizontalAfter{width:5px;height:5px;position:absolute;top:0;left:0;background-color:#aaa;}.jxTabSetContainer{position:relative;display:-moz-inline-box;display:inline-block;overflow:hidden;width:200px;height:200px;margin:0;padding:0;background-color:#fff;}.jxTabSetContainer .jxToolbarContainer{z-index:auto;}.tabContent{display:none;position:relative;width:100%;height:100%;overflow:auto;}.tabContentActive{display:block;}span.jxTabContainer{display:block;position:relative;margin:0;padding:2px;border:none;}a.jxTab{display:-moz-inline-box;display:inline-block;position:relative;cursor:pointer;user-select:none;-moz-user-select:none;-khtml-user-select:none;margin:0;padding:0;border:none;background-repeat:no-repeat;text-decoration:none;outline:none;}span.jxTabContent{display:-moz-inline-box;display:inline-block;font-size:0;line-height:0;margin:0;padding:0;border:none;background-repeat:no-repeat;}img.jxTabIcon{display:-moz-inline-box;display:inline-block;position:relative;width:16px;height:16px;background-position:center center;background-repeat:no-repeat;}span.jxTabLabel{display:-moz-inline-box;display:inline-block;position:relative;cursor:pointer;margin:0;padding:0;color:#000;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:16px;}a.jxTabClose{display:block;position:absolute;cursor:pointer;outline:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;width:16px;height:16px;background-image:url(images/tab_close.png);background-position:0 0;background-repeat:no-repeat;}.jxDisabled a.jxTab,.jxDisabled span.jxTabContent span,.jxDisabled a.jxTabClose{cursor:default;}.jxBarTop a.jxTab,.jxBarTop span.jxTabContent{background-image:url(images/tab_top.png);}.jxBarBottom a.jxTab,.jxBarBottom span.jxTabContent{background-image:url(images/tab_bottom.png);}.jxBarTop a.jxTabClose,.jxBarBottom a.jxTabClose{top:5px;right:5px;}.jxBarTop .jxTabClose span.jxTabContent,.jxBarBottom .jxTabClose span.jxTabContent{padding-right:16px;}.jxBarTop a.jxTab,.jxBarBottom a.jxTab{padding-left:4px;background-position:left -24px;}.jxBarTop span.jxTabContent,.jxBarBottom span.jxTabContent{padding:4px 4px 4px 0;background-position:right -24px;}.jxBarTop a.jxTabActive,.jxBarBottom a.jxTabActive{background-position:left -72px;}.jxBarTop a.jxTabActive span.jxTabContent,.jxBarBottom a.jxTabActive span.jxTabContent{background-position:right -72px;}.jxBarTop a.jxTab:focus,.jxBarBottom a.jxTab:focus{background-position:left -96px;}.jxBarTop a.jxTab:focus span.jxTabContent,.jxBarBottom a.jxTab:focus span.jxTabContent{background-position:right -96px;}.jxBarTop a.jxTabActive:focus,.jxBarBottom a.jxTabActive:focus{background-position:left -144px;}.jxBarTop a.jxTabActive:focus span.jxTabContent,.jxBarBottom a.jxTabActive:focus span.jxTabContent{background-position:right -144px;}.jxBarTop a.jxTab:hover,.jxBarTop a.jxTabActive:hover,.jxBarBottom a.jxTab:hover,.jxBarBottom a.jxTabActive:hover{background-position:left -48px;}.jxBarTop a.jxTab:hover span.jxTabContent,.jxBarTop a.jxTabActive:hover span.jxTabContent,.jxBarBottom a.jxTab:hover span.jxTabContent,.jxBarBottom a.jxTabActive:hover span.jxTabContent{background-position:right -48px;}.jxBarTop a.jxTabPressed,.jxBarTop a.jxTabPressed:focus,.jxBarBottom a.jxTabPressed,.jxBarBottom a.jxTabPressed:focus{background-position:left -120px;}.jxBarTop a.jxTabPressed span.jxTabContent,.jxBarTop a.jxTabPressed:focus span.jxTabContent,.jxBarBottom a.jxTabPressed span.jxTabContent,.jxBarBottom a.jxTabPressed:focus span.jxTabContent{background-position:right -120px;}.jxBarTop .jxDisabled a.jxTab:focus,.jxBarTop .jxDisabled a.jxTab:active,.jxBarTop .jxDisabled a.jxTab:hover,.jxBarTop .jxDisabled a.jxTabPressed,.jxBarBottom .jxDisabled a.jxTab:focus,.jxBarBottom .jxDisabled a.jxTab:active,.jxBarBottom .jxDisabled a.jxTab:hover,.jxBarBottom .jxDisabled a.jxTabPressed{background-position:left -24px;}.jxBarTop .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarTop .jxDisabled a.jxTab:active span.jxTabContent,.jxBarTop .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarTop .jxDisabled a.jxTabPressed span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:active span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabPressed span.jxTabContent{background-position:right -24px;}.jxBarTop .jxDisabled a.jxTabActive:focus,.jxBarTop .jxDisabled a.jxTabActive:active,.jxBarTop .jxDisabled a.jxTabActive:hover,.jxBarBottom .jxDisabled a.jxTabActive:focus,.jxBarBottom .jxDisabled a.jxTabActive:active,.jxBarBottom .jxDisabled a.jxTabActive:hover{background-position:left -72px;}.jxBarTop .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarTop .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarTop .jxDisabled a.jxTabActive:hover span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:hover span.jxTabContent{background-position:right -72px;}.jxBarTop img.jxTabIcon,.jxBarBottom img.jxTabIcon{vertical-align:middle;}.jxBarTop span.jxTabLabel,.jxBarBottom span.jxTabLabel{vertical-align:middle;height:16px;padding:0 4px 0 4px;}.jxBarLeft a.jxTab,.jxBarLeft span.jxTabContent{background-image:url(images/tab_left.png);}.jxBarRight a.jxTab,.jxBarRight span.jxTabContent{background-image:url(images/tab_right.png);}.jxBarLeft a.jxTabClose,.jxBarRight a.jxTabClose{top:5px;left:5px;}.jxBarLeft .jxTabClose span.jxTabContent,.jxBarRight .jxTabClose span.jxTabContent{padding-top:16px;}.jxBarLeft a.jxTab,.jxBarRight a.jxTab{padding-top:4px;background-position:-24px top;}.jxBarLeft span.jxTabContent,.jxBarRight span.jxTabContent{padding:0 4px 4px 4px;background-position:-24px bottom;}.jxBarLeft a.jxTabActive,.jxBarRight a.jxTabActive{background-position:-72px top;}.jxBarLeft a.jxTabActive span.jxTabContent,.jxBarRight a.jxTabActive span.jxTabContent{background-position:-72px bottom;}.jxBarLeft a.jxTab:focus,.jxBarRight a.jxTab:focus{background-position:-96px top;}.jxBarLeft a.jxTab:focus span.jxTabContent,.jxBarRight a.jxTab:focus span.jxTabContent{background-position:-96px bottom;}.jxBarLeft a.jxTabActive:focus,.jxBarRight a.jxTabActive:focus{background-position:-144px top;}.jxBarLeft a.jxTabActive:focus span.jxTabContent,.jxBarRight a.jxTabActive:focus span.jxTabContent{background-position:-144px bottom;}.jxBarLeft a.jxTab:hover,.jxBarLeft a.jxTabActive:hover,.jxBarRight a.jxTab:hover,.jxBarRight a.jxTabActive:hover{background-position:-48px top;}.jxBarLeft a.jxTab:hover span.jxTabContent,.jxBarLeft a.jxTabActive:hover span.jxTabContent,.jxBarRight a.jxTab:hover span.jxTabContent,.jxBarRight a.jxTabActive:hover span.jxTabContent{background-position:-48px bottom;}.jxBarLeft a.jxTabPressed,.jxBarLeft a.jxTabPressed:focus,.jxBarRight a.jxTabPressed,.jxBarRight a.jxTabPressed:focus{background-position:-120px top;}.jxBarLeft a.jxTabPressed span.jxTabContent,.jxBarLeft a.jxTabPressed:focus span.jxTabContent,.jxBarRight a.jxTabPressed span.jxTabContent,.jxBarRight a.jxTabPressed:focus span.jxTabContent{background-position:-120px bottom;}.jxBarLeft .jxDisabled a.jxTab:focus,.jxBarLeft .jxDisabled a.jxTab:active,.jxBarLeft .jxDisabled a.jxTab:hover,.jxBarLeft .jxDisabled a.jxTabPressed,.jxBarRight .jxDisabled a.jxTab:focus,.jxBarRight .jxDisabled a.jxTab:active,.jxBarRight .jxDisabled a.jxTab:hover,.jxBarRight .jxDisabled a.jxTabPressed{background-position:-24px top;}.jxBarLeft .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarLeft .jxDisabled a.jxTab:active span.jxTabContent,.jxBarLeft .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabPressed span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:active span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarRight .jxDisabled a.jxTabPressed span.jxTabContent{background-position:-24px bottom;}.jxBarLeft .jxDisabled a.jxTabActive:focus,.jxBarLeft .jxDisabled a.jxTabActive:active,.jxBarLeft .jxDisabled a.jxTabActive:hover,.jxBarRight .jxDisabled a.jxTabActive:focus,.jxBarRight .jxDisabled a.jxTabActive:active,.jxBarRight .jxDisabled a.jxTabActive:hover{background-position:-72px top;}.jxBarLeft .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabActive:hover span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:hover span.jxTabContent{background-position:-72px bottom;}.jxBarLeft span.jxTabLabel,.jxBarRight span.jxTabLabel{padding:4px 0 4px 0;}.jxBarContainer{display:block;position:relative;z-index:1;overflow:hidden;margin:0;padding:0;border:0;background-color:#f0f0f0;}.jxBarTop,.jxBarBottom{width:100%;height:28px;background-image:url(images/toolbar.png);background-repeat:repeat-x;background-position:0 0;overflow:hidden;}.jxTabBox .jxTabBarTop{background-image:url(images/tabbar.png);background-position:0 bottom;}.jxTabBox .jxTabBarBottom{background-image:url(images/tabbar_bottom.png);background-position:0 top;}.jxBarLeft,.jxBarRight{width:auto;height:100%;background-image:url(images/toolbar.png);background-repeat:repeat-x;background-position:0 0;float:left;overflow:hidden;}.jxTabBox .jxTabBarLeft{background-image:url(images/tabbar_left.png);background-repeat:repeat-y;background-position:right 0;}.jxTabBox .jxTabBarRight{background-image:url(images/tabbar_right.png);background-repeat:repeat-y;background-position:left 0;}.jxBarTop .jxBarScroller,.jxBarBottom .jxBarScroller{position:absolute;width:10000%;overflow:hidden;}.jxBarTop .jxBarScrollLeft,.jxBarBottom .jxBarScrollLeft{position:absolute;top:0;left:0;}.jxBarTop .jxBarScrollRight,.jxBarBottom .jxBarScrollRight{position:absolute;top:0;right:0;}.jxBarTop .jxBarScrollLeft img.jxButtonIcon,.jxBarBottom .jxBarScrollLeft img.jxButtonIcon{background-image:url(images/emblems.png);background-position:0 -80px;}.jxBarTop .jxBarScrollRight img.jxButtonIcon,.jxBarBottom .jxBarScrollRight img.jxButtonIcon{background-image:url(images/emblems.png);background-position:0 -96px;}ul.jxToolbar,ul.jxTabBar{display:block;position:relative;float:left;list-style-type:none;margin:0;padding:0;border:none;}li.jxToolItem{display:block;position:relative;float:left;font-size:0;line-height:0;padding:0;margin:0;border:none;}li.jxToolItem span.jxBarSeparator{display:block;position:relative;float:left;font-size:0;line-height:0;border:0;margin:0;padding:4px;background-repeat:no-repeat;background-position:center center;}.jxBarTop li.jxToolItem span.jxBarSeparator,.jxBarBottom li.jxToolItem span.jxBarSeparator{width:8px;height:20px;background-image:url(images/toolbar_separator_h.png);}.jxBarLeft li.jxToolItem span.jxBarSeparator,.jxBarRight li.jxToolItem span.jxBarSeparator{width:20px;height:8px;background-image:url(images/toolbar_separator_v.png);}.jxBarLeft ul.jxToolbar,.jxBarLeft ul.jxTabBar,.jxBarLeft li.jxToolItem,.jxBarRight ul.jxToolbar,.jxBarRight ul.jxTabBar,.jxBarRight li.jxToolItem{clear:both;}.jxTooltip{width:auto;height:auto;background-color:black;color:white;padding:5px;z-index:65536;}.jxTree,.jxTreeRoot{position:relative;display:block;list-style:none;margin:0;padding:0;}.jxTreeNest{list-style:none;margin:0;padding:0;background-repeat:repeat-y;background-position:left top;}li.jxTreeContainer{position:relative;display:block;margin:0;padding:0;background-repeat:no-repeat;background-position:left top;white-space:nowrap;font-size:0;line-height:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxTree li.jxTreeContainer{margin-left:16px;}a.jxTreeItem{position:relative;display:block;cursor:pointer;outline:none;overflow:hidden;background-image:url(images/tree_hover.png);background-repeat:repeat-x;background-position:left top;border:none;margin:0 1px 0 17px;padding:0 0 0 20px;z-index:0;font-family:Arial,Helvetica,sans-serif;font-size:11px;color:#000;text-decoration:none;line-height:20px;height:20px;}a.jxTreeItem:focus{border-left:1px dotted #75ADFF;border-right:1px dotted #75ADFF;margin:0 0 0 16px;background-position:left -72px;}a.jxTreeItem:hover,li.jxTreeContainer a.jxHover{border-left:1px solid #CDDFFD;border-right:1px solid #CDDFFD;margin:0 0 0 16px;background-color:#CDE5FF;background-position:left -24px;}li.jxTreeContainer a.jxSelected,li.jxTreeContainer a.jxSelected:hover,li.jxTreeContainer a.jxPressed,li.jxTreeContainer a.jxPressed:hover{border-left:1px solid #8AABFB;border-right:1px solid #8AABFB;margin:0 0 0 16px;background-color:#CDE5FF;background-position:left -48px;}li.jxDisabled a.jxTreeItem{cursor:default;}li.jxDisabled a.jxTreeItem:focus,li.jxDisabled a.jxTreeItem:hover{background-position:left top;background-color:transparent;border:none;margin:0 1px 0 17px;}.jxTreeNest{background-image:url(images/tree_vert_line.png);}img.jxTreeImage,img.jxTreeIcon{position:absolute;display:inline;left:0;top:0;width:16px;height:20px;z-index:1;background-image:url(images/tree.png);background-repeat:no-repeat;border:0;margin:0;}img.jxTreeIcon{height:16px;top:2px;left:1px;}.jxTreeBranchOpen .jxTreeIcon,.jxTreeBranchLastOpen .jxTreeIcon{background-position:left -40px;}.jxTreeBranchOpen .jxTreeImage{background-position:left -100px;}.jxTreeBranchLastOpen .jxTreeImage{background-position:left -160px;}.jxTreeBranchClosed .jxTreeIcon,.jxTreeBranchLastClosed .jxTreeIcon{background-position:left -20px;}.jxTreeBranchClosed .jxTreeImage{background-position:left -80px;}.jxTreeBranchLastClosed .jxTreeImage{background-position:left -140px;}.jxTreeLeaf .jxTreeIcon,.jxTreeLeafLast .jxTreeIcon{background-position:left 0;}.jxTreeLeaf .jxTreeImage{background-position:left -60px;}.jxTreeLeafLast .jxTreeImage{background-position:left -120px;}a.jxTreeItem,img.jxTreeImage,img.jxTreeIcon,span.jxTreeLabel,.jxTreeItemContainer input{vertical-align:middle;}.jxFileUploadPanel{padding:5px;}.jxFileUploadPanel .jxInputContainer{width:300px;}.jxUploadQueue{width:100%;margin-top:10px;}.jxUploadQueue div{position:relative;width:95%;clear:both;border-top:1px solid black;padding:2px;}.jxUploadQueue div span{display:block;}.jxUploadQueue div span.jxUploadFileName{float:left;font-size:16px;}.jxUploadQueue div span.jxUploadFileDelete,.jxUploadQueue div span.jxUploadFileProgress,.jxUploadQueue div span.jxUploadFileComplete,.jxUploadQueue div span.jxUploadFileError{float:right;width:16px;height:16px;background-repeat:no-repeat;background-position:top left;cursor:pointer;}.jxUploadQueue div span.jxUploadFileDelete{background-image:url('images/delete.gif');}.jxUploadQueue div span.jxUploadFileProgress{background-image:url('images/loading.gif');}.jxUploadQueue div span.jxUploadFileComplete{background-image:url('images/green_tick.png');}.jxUploadQueue div span.jxUploadFileError{background-image:url('images/error.png');}.jxUploadFileErrorTip{padding:4px 4px 4px 20px;border:2px solid #ddd;background:url("images/error.png") no-repeat left top;color:black;width:100px;}
\ No newline at end of file

Modified: sandbox/jxlib-3.0/templates/mapguide/standard/themes/delicious/jxtheme.uncompressed.css
===================================================================
--- sandbox/jxlib-3.0/templates/mapguide/standard/themes/delicious/jxtheme.uncompressed.css	2009-11-24 20:05:41 UTC (rev 1987)
+++ sandbox/jxlib-3.0/templates/mapguide/standard/themes/delicious/jxtheme.uncompressed.css	2009-11-24 20:11:06 UTC (rev 1988)
@@ -13,7 +13,7 @@
 h1,h2,h3,h4,h5,h6{font-size:100%;}
 q:before,q:after{content:'';}/**
  * @project         Jx
- * @revision        $Id: button.css 507 2009-08-06 19:19:14Z fred.warnock $
+ * @revision        $Id: button.css 593 2009-11-09 20:29:54Z fred.warnock $
  * @author          Fred Warnock (fwarnock at dmsolutions.ca)
  * @copyright       (c) 2006 DM Solutions Group Inc.
  */
@@ -253,19 +253,11 @@
 /* JX BUTTON EXTENSION STYLES */
 /* ========================== */
 
-.jxButtonMenu span.jxButtonContent,
-.jxButtonMulti span.jxButtonContent,
-.jxButtonFlyout span.jxButtonContent,
-.jxButtonCombo span.jxButtonContent,
-.jxButtonEditCombo span.jxButtonContent {
+.jxDiscloser span.jxButtonContent {
   padding-right: 0px;
 }
 
-.jxButtonMenu span.jxButtonContent span,
-.jxButtonFlyout span.jxButtonContent span,
-.jxButtonMulti span.jxButtonContent span,
-.jxButtonCombo span.jxButtonContent span,
-.jxButtonEditCombo span.jxButtonContent span {
+.jxDiscloser span.jxButtonContent span {
   padding-right: 16px;
   background-image: url(images/emblems.png);
   background-position: right -16px;
@@ -276,7 +268,6 @@
   position: absolute;
   display: -moz-inline-box;
   display: inline-block;
-
   padding: 4px 0px;
   font-size: 0px;
   line-height: 0px;
@@ -997,7 +988,7 @@
     width: 100%;
 }/**
  * @project         Jx
- * @revision        $Id: form.css 570 2009-10-28 15:32:02Z fred.warnock $
+ * @revision        $Id: form.css 615 2009-11-19 22:01:38Z fred.warnock $
  * @author          Fred Warnock (fwarnock at dmsolutions.ca)
  * @copyright       (c) 2006 DM Solutions Group Inc.
  */
@@ -1150,45 +1141,45 @@
 
 /* Field Validation */
 
-.jxFieldInvalid .jxInputText,
-.jxFieldInvalid .jxInputPassword,
-.jxFieldInvalid .jxInputTextarea,
-.jxFieldInvalid .jxInputSelect {
+.jxFieldError .jxInputText,
+.jxFieldError .jxInputPassword,
+.jxFieldError .jxInputTextarea,
+.jxFieldError .jxInputSelect {
   background-color: #FBE3E4; 
   color: #8a1f11; 
   border-color: #FBC2C4;
 }
 
-.jxFieldValidated .jxInputText,
-.jxFieldValidated .jxInputPassword,
-.jxFieldValidated .jxInputTextarea,
-.jxFieldValidated .jxInputSelect {
+.jxFieldSuccess .jxInputText,
+.jxFieldSuccess .jxInputPassword,
+.jxFieldSuccess .jxInputTextarea,
+.jxFieldSuccess .jxInputSelect {
   background-color: #E6EFC2; 
   color: #264409; 
   border-color: #C6D880;
 }
 
-.jxFieldInvalid .jxInputText:focus,
-.jxFieldInvalid .jxInputPassword:focus,
-.jxFieldInvalid .jxInputTextarea:focus,
-.jxFieldInvalid .jxInputSelect:focus {
+.jxFieldError .jxInputText:focus,
+.jxFieldError .jxInputPassword:focus,
+.jxFieldError .jxInputTextarea:focus,
+.jxFieldError .jxInputSelect:focus {
   border-color: #8a1f11;
 }
 
-.jxFieldValidated .jxInputText:focus,
-.jxFieldValidated .jxInputPassword:focus,
-.jxFieldValidated .jxInputTextarea:focus,
-.jxFieldValidated .jxInputSelect:focus {
+.jxFieldSuccess .jxInputText:focus,
+.jxFieldSuccess .jxInputPassword:focus,
+.jxFieldSuccess .jxInputTextarea:focus,
+.jxFieldSuccess .jxInputSelect:focus {
   border-color: #264409;
 }
 
-.jxFieldInvalid .jxInputLabel,
-.jxFieldInvalid .jxInputTag {
+.jxFieldError .jxInputLabel,
+.jxFieldError .jxInputTag {
   color: #8a1f11; 
 }
 
-.jxFieldValidated .jxInputLabel,
-.jxFieldValidated .jxInputTag {
+.jxFieldSuccess .jxInputLabel,
+.jxFieldSuccess .jxInputTag {
   color: #264409; 
 }
 
@@ -1622,8 +1613,8 @@
 
 .jxListView .jxHover {
     margin: 0px;
-    border-left: 1px solid #C5E0FF;
-    border-right: 1px solid #C5E0FF;
+    border-left: 1px solid #CDDFFD;
+    border-right: 1px solid #CDDFFD;
     background-image: url(images/listitem.png);
     background-repeat: repeat-x;
     background-color: #CDE5FF;
@@ -1640,28 +1631,19 @@
     background-position: left -72px;
 }
 
-.jxListView .jxPressed {
+.jxListView .jxPressed,
+.jxListView .jxSelected {
   margin: 0px;
-  border-left: 1px solid #C5E0FF;
-  border-right: 1px solid #C5E0FF;
+  border-left: 1px solid #8AABFB;
+  border-right: 1px solid #8AABFB;
   background-color: #CDE5FF;
   background-image: url(images/listitem.png);
   background-repeat: repeat-x;
   background-position: left -48px;
 }
-
-
-.jxListView .jxSelected {
-    margin: 0px;
-    border-left: 1px solid #C5E0FF;
-    border-right: 1px solid #C5E0FF;
-    background-color: #CDE5FF;
-    background-image: url(images/listitem.png);
-    background-repeat: repeat-x;
-    background-position: left -48px;
-}/**
+/**
  * @project         Jx
- * @revision        $Id: menu.css 321 2009-04-06 18:23:39Z fred.warnock $
+ * @revision        $Id: menu.css 601 2009-11-10 18:44:35Z fred.warnock $
  * @author          Fred Warnock (fwarnock at dmsolutions.ca)
  * @copyright       (c) 2006 DM Solutions Group Inc.
  */
@@ -1855,7 +1837,7 @@
 }
 
 .jxMenuItemToggle img.jxMenuItemIcon,
-.jxMenuItemSet img.jxMenuItemIcon {
+.jxMenuItemToggleSet img.jxMenuItemIcon {
   background-image: url(images/emblems.png);
   background-position: 2px 0px;
   background-repeat: no-repeat;
@@ -1865,7 +1847,7 @@
   background-position: 2px -48px;
 }
 
-.jxMenuItemSet a.jxMenuItemActive img.jxMenuItemIcon {
+.jxMenuItemToggleSet a.jxMenuItemActive img.jxMenuItemIcon {
   background-position: 2px -64px;
 }
 
@@ -1889,6 +1871,105 @@
     text-align: center;
     padding: 10px;
     margin-top: 10px;
+}/* For Reference
+   Success, notice and error boxes from Blueprint */
+
+/* 
+.error      { background: #FBE3E4; color: #8a1f11; border-color: #FBC2C4; }
+.notice     { background: #FFF6BF; color: #514721; border-color: #FFD324; }
+.success    { background: #E6EFC2; color: #264409; border-color: #C6D880; }
+.error a    { color: #8a1f11; }
+.notice a   { color: #514721; }
+.success a  { color: #264409; }
+*/
+
+
+.jxNoticeListContainer {
+  border: none;
+  padding: 0px;
+  margin: 0px;
+  font-size: 0px;
+  line-height: 0px;
+  z-index: 500;
+}
+
+.jxNoticeList {
+    position: relative;
+}
+
+.jxNoticeItemContainer {
+    position: relative;
+    overflow: hidden;
+}
+
+.jxNoticeItemContainer .jxChrome {
+  background-image: url(images/flyout_chrome.png);
+  padding: 5px 5px 7px 6px;
+}
+
+.jxHasChrome .jxNoticeItem  {
+  margin: 6px 6px 8px 7px;
+}
+
+.jxNoticeItem {
+    position: relative;
+    border: 2px solid #ccc;
+    margin: 0px;
+    padding: 0px;
+    background-color: #f8f8f8;
+    background-image: url(images/notice.png);
+    background-repeat: repeat-x;
+    background-position: left bottom;
+}
+
+.jxNoticeIcon {
+  position: absolute;
+  top: 0px;
+  left: 0px;
+  margin: 6px;
+  width: 16px;
+  height: 16px;
+  background-image: url(images/icons.png);
+  background-repeat: no-repeat;
+  background-position: 0px 0px;
+}
+
+.jxNotice {
+    display: block;
+    position: relative;
+    font-family: Arial, Helvetica, sans-serif;
+    font-size: 12px;
+    line-height: 18px;
+    color: #666;
+    margin: 0px;
+    border: none;
+    padding: 6px 26px 6px 10px; 
+}                          
+
+.jxNoticeError .jxNoticeItem {   background-color: #FBE3E4; color: #8a1f11; border-color: #FBC2C4; background-image: url(images/notice_error.png);}
+.jxNoticeWarning .jxNoticeItem { background-color: #FFF6BF; color: #514721; border-color: #FFD324; background-image: url(images/notice_warning.png);}
+.jxNoticeSuccess .jxNoticeItem { background-color: #E6EFC2; color: #264409; border-color: #C6D880; background-image: url(images/notice_success.png);}
+
+.jxNoticeError .jxNotice {   color: #8a1f11; padding-left: 28px; }
+.jxNoticeWarning .jxNotice { color: #514721; padding-left: 28px; }
+.jxNoticeSuccess .jxNotice { color: #264409; padding-left: 28px; }
+.jxNoticeInfo .jxNotice { padding-left: 28px; }
+
+.jxNoticeError .jxNoticeIcon {   background-position: 0px -32px; }
+.jxNoticeWarning .jxNoticeIcon { background-position: 0px -16px; }
+.jxNoticeSuccess .jxNoticeIcon { background-position: 0px -48px; }            
+.jxNoticeInfo .jxNoticeIcon {    background-position: 0px -64px; }
+
+.jxNoticeClose {
+    position: absolute;
+    top: 0px;
+    right: 0px;
+    margin: 6px;
+    width: 16px;
+    height: 16px;
+    background-image: url(images/tab_close.png);
+    background-position: 0px 0px;
+    background-repeat: no-repeat;
 }/**
  * @project         Jx
  * @revision        $Id: panel.css 302 2009-04-02 18:42:56Z fred.warnock $
@@ -2283,7 +2364,7 @@
   background-color: #aaa;
 }/**
  * @project         Jx
- * @revision        $Id: tab.css 241 2008-12-10 15:11:05Z pagameba $
+ * @revision        $Id: tab.css 615 2009-11-19 22:01:38Z fred.warnock $
  * @author          Fred Warnock (fwarnock at dmsolutions.ca)
  * @copyright       (c) 2006 DM Solutions Group Inc.
  */
@@ -2301,7 +2382,8 @@
      the position need to be explicitly set, as well as the width and height. */
   /* Base setup */
   position: relative;
-  display: block;
+  display: -moz-inline-box;
+  display: inline-block;
   overflow: hidden;
 
   width: 200px;
@@ -2337,7 +2419,7 @@
 /* BASE TAB (BUTTON) STYLES */
 /* ======================== */
 
-div.jxTabContainer {
+span.jxTabContainer {
   /* Base setup */
   display: block;
   position: relative;
@@ -2349,7 +2431,8 @@
 
 a.jxTab {
   /* Base setup */
-  display: block;
+  display: -moz-inline-box;
+  display: inline-block;
   position: relative;
   cursor: pointer;
   user-select: none;
@@ -2367,7 +2450,8 @@
 
 span.jxTabContent {
   /* Base setup */
-  display: block;
+  display: -moz-inline-box;
+  display: inline-block;
   font-size: 0px;
   line-height: 0px;
 
@@ -2381,6 +2465,8 @@
 
 img.jxTabIcon {
   /* Base setup */
+  display: -moz-inline-box;
+  display: inline-block;
   position: relative;
 
   width: 16px;
@@ -2391,7 +2477,8 @@
 
 span.jxTabLabel {
   /* Base setup */
-  display: block;
+  display: -moz-inline-box;
+  display: inline-block;
   position: relative;
   cursor: pointer;
 
@@ -2412,12 +2499,11 @@
   user-select: none;
   -moz-user-select: none;
   -khtml-user-select: none;
-}
-
-a.jxTabClose img {
   width: 16px;
   height: 16px;
-  background-image: url(images/tab_close.png);  
+  background-image: url(images/tab_close.png);
+  background-position: 0px 0px;
+  background-repeat: no-repeat;
 }
 
 .jxDisabled a.jxTab,
@@ -2436,7 +2522,6 @@
 .jxBarTop div.jxTabContainer,
 .jxBarBottom div.jxTabContainer {
   /* Base setup */
-  float: left;
 }
 
 .jxBarTop a.jxTab,
@@ -2452,8 +2537,8 @@
 /* Closeable Tab */
 .jxBarTop a.jxTabClose,
 .jxBarBottom a.jxTabClose {
-  top: 3px;
-  right: 3px;
+  top: 5px;
+  right: 5px;
 }
 
 .jxBarTop .jxTabClose span.jxTabContent,
@@ -2465,7 +2550,6 @@
 .jxBarTop a.jxTab,
 .jxBarBottom a.jxTab {
   /* Base setup */
-  float: left;
 
   padding-left: 4px; /* makes room for the left of the tab bg */
   background-position: left -24px; 
@@ -2474,7 +2558,6 @@
 .jxBarTop span.jxTabContent,
 .jxBarBottom span.jxTabContent {
   /* Base setup */
-  float: left;
 
   padding: 4px 4px 4px 0px; /* makes space around the label */
   background-position: right -24px; 
@@ -2589,14 +2672,14 @@
 
 .jxBarTop img.jxTabIcon,
 .jxBarBottom img.jxTabIcon {
+  vertical-align: middle;
   /* Base setup */
-  float: left;
 }
 
 .jxBarTop span.jxTabLabel,
 .jxBarBottom span.jxTabLabel {
   /* Base setup */
-  float: left;
+  vertical-align: middle;
   height: 16px;
 
   padding: 0px 4px 0px 4px;
@@ -2607,8 +2690,8 @@
 /* VERTICAL TAB BAR - LEFT and RIGHT */
 /* ================================= */
 
-.jxBarLeft div.jxTabContainer,
-.jxBarRight div.jxTabContainer {
+.jxBarLeft span.jxTabContainer,
+.jxBarRight span.jxTabContainer {
   /* Base setup */
 }
 
@@ -2625,8 +2708,8 @@
 /* Closeable Tab */
 .jxBarLeft a.jxTabClose,
 .jxBarRight a.jxTabClose {
-  top: 3px;
-  left: 3px;
+  top: 5px;
+  left: 5px;
 }
 
 .jxBarLeft .jxTabClose span.jxTabContent,
@@ -2976,7 +3059,7 @@
 
 /**
  * @project         Jx
- * @revision        $Id: tree.css 536 2009-09-28 19:02:46Z pagameba $
+ * @revision        $Id: tree.css 602 2009-11-10 19:41:36Z pagameba $
  * @author          Fred Warnock (fwarnock at dmsolutions.ca)
  * @copyright       (c) 2006 DM Solutions Group Inc.
  */
@@ -3044,7 +3127,7 @@
   background-position: left top;
   border: none;
 
-  margin: 0px 1px 0px 15px;
+  margin: 0px 1px 0px 17px;
   padding: 0px 0px 0px 20px;
   z-index: 0;
   font-family: Arial, Helvetica, sans-serif;
@@ -3060,40 +3143,41 @@
 a.jxTreeItem:focus {
   border-left: 1px dotted #75ADFF;
   border-right: 1px dotted #75ADFF;
-  margin: 0px 0px 0px 14px;
+  margin: 0px 0px 0px 16px;
   background-position: left -72px;
 }
 
-a.jxTreeItem:hover {
+a.jxTreeItem:hover,
+li.jxTreeContainer a.jxHover {
   /*border: 1px solid #C5E0FF;*/
-  border-left: 1px solid #C5E0FF;
-  border-right: 1px solid #C5E0FF;
-  margin: 0px 0px 0px 14px;
+  border-left: 1px solid #CDDFFD;
+  border-right: 1px solid #CDDFFD;
+  margin: 0px 0px 0px 16px;
   background-color: #CDE5FF;
   background-position: left -24px;
 }
 
-a.jxTreeItemPressed,
-a.jxTreeItemPressed:hover {
-  border-left: 1px solid #C5E0FF;
-  border-right: 1px solid #C5E0FF;
-  margin: 0px 0px 0px 14px;
+li.jxTreeContainer a.jxSelected,
+li.jxTreeContainer a.jxSelected:hover,
+li.jxTreeContainer a.jxPressed,
+li.jxTreeContainer a.jxPressed:hover {
+  border-left: 1px solid #8AABFB;
+  border-right: 1px solid #8AABFB;
+  margin: 0px 0px 0px 16px;
   background-color: #CDE5FF;
   background-position: left -48px;
 }
 
-.jxDisabled a.jxTreeItem,
-.jxDisabled a.jxTreeItem {
+li.jxDisabled a.jxTreeItem {
   cursor: default;
 }
             
-.jxDisabled a.jxTreeItem:focus,
-.jxDisabled a.jxTreeItemPressed,
-.jxDisabled a.jxTreeItemPressed:hover,
-.jxDisabled a.jxTreeItem:hover {
+li.jxDisabled a.jxTreeItem:focus,
+li.jxDisabled a.jxTreeItem:hover {
   background-position: left top;
+  background-color: transparent;
   border: none;
-  margin: 0px 1px 0px 15px;
+  margin: 0px 1px 0px 17px;
 }
 
 .jxTreeNest {
@@ -3121,7 +3205,7 @@
 
 img.jxTreeIcon { 
   height: 16px;
-  top: 1px;
+  top: 2px;
   left: 1px;
 }
 
@@ -3166,10 +3250,6 @@
   background-position: left -120px; /* last node image */
 }
 
-.jxTreeItemSelected {
-  background-color: #AFD4FA;
-  font-weight:bold;
-}
 
 a.jxTreeItem,
 img.jxTreeImage,

Modified: sandbox/jxlib-3.0/templates/mapserver/standard/themes/crispin/jxtheme.css
===================================================================
--- sandbox/jxlib-3.0/templates/mapserver/standard/themes/crispin/jxtheme.css	2009-11-24 20:05:41 UTC (rev 1987)
+++ sandbox/jxlib-3.0/templates/mapserver/standard/themes/crispin/jxtheme.css	2009-11-24 20:11:06 UTC (rev 1988)
@@ -21,4 +21,4 @@
  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  * DEALINGS IN THE SOFTWARE.
- */body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';}.jxButtonContainer{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:2px;border:none;}.jxButton{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:0 0 0 4px;border:none;background-image:url(images/button.png);background-position:left -24px;background-repeat:no-repeat;text-decoration:none;outline:none;}a.jxButton{cursor:pointer;user-select:none;-moz-user-select:none;-khtml-user-select:none;}ul.jxToolbar .jxButton{background-position:left top;}span.jxButtonContent{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:4px 4px 4px 0;border:none;background-image:url(images/button.png);background-position:right -24px;background-repeat:no-repeat;}ul.jxToolbar span.jxButtonContent{background-position:right top;}ul.jxToolbar .jxButtonActive,.jxButtonActive{background-position:left -72px;}ul.jxToolbar .jxButtonActive span.jxButtonContent,.jxButtonActive span.jxButtonContent{background-position:right -72px;}ul.jxToolbar .jxButton:focus,.jxButton:focus{background-position:left -96px;}ul.jxToolbar .jxButton:focus span.jxButtonContent,.jxButton:focus span.jxButtonContent{background-position:right -96px;}ul.jxToolbar .jxButtonActive:focus,.jxButtonActive:focus{background-position:left -144px;}ul.jxToolbar .jxButtonActive:focus span.jxButtonContent,.jxButtonActive:focus span.jxButtonContent{background-position:right -144px;}ul.jxToolbar .jxButton:hover,ul.jxToolbar .jxButtonActive:hover,.jxButton:hover,.jxButtonActive:hover{background-position:left -48px;}ul.jxToolbar .jxButton:hover span.jxButtonContent,ul.jxToolbar .jxButtonActive:hover span.jxButtonContent,.jxButton:hover span.jxButtonContent,.jxButtonActive:hover span.jxButtonContent{background-position:right -48px;}ul.jxToolbar .jxButtonPressed,ul.jxToolbar .jxButtonPressed:focus,.jxButtonPressed,.jxButtonPressed:focus{background-position:left -120px;}ul.jxToolbar .jxButtonPressed span.jxButtonContent,ul.jxToolbar .jxButtonPressed:focus span.jxButtonContent,.jxButtonPressed span.jxButtonContent,.jxButtonPressed:focus span.jxButtonContent{background-position:right -120px;}.jxDisabled .jxButton,.jxDisabled span.jxButtonContent span{cursor:default;}ul.jxToolbar .jxDisabled .jxButton:focus,ul.jxToolbar .jxDisabled .jxButton:active,ul.jxToolbar .jxDisabled .jxButton:hover,ul.jxToolbar .jxDisabled .jxButtonPressed{background-position:left top;}.jxDisabled .jxButton:focus,.jxDisabled .jxButton:active,.jxDisabled .jxButton:hover,.jxDisabled .jxButtonPressed{background-position:left -24px;}ul.jxToolbar .jxDisabled .jxButton:focus span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButton:active span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButton:hover span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonPressed span.jxButtonContent{background-position:right top;}.jxDisabled .jxButton:focus span.jxButtonContent,.jxDisabled .jxButton:active span.jxButtonContent,.jxDisabled .jxButton:hover span.jxButtonContent,.jxDisabled .jxButtonPressed span.jxButtonContent{background-position:right -24px;}ul.jxToolbar .jxDisabled .jxButtonActive:focus,ul.jxToolbar .jxDisabled .jxButtonActive:active,ul.jxToolbar .jxDisabled .jxButtonActive:hover,.jxDisabled .jxButtonActive:focus,.jxDisabled .jxButtonActive:active,.jxDisabled .jxButtonActive:hover{background-position:left -72px;}ul.jxToolbar .jxDisabled .jxButtonActive:focus span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonActive:active span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonActive:hover span.jxButtonContent,.jxDisabled .jxButtonActive:focus span.jxButtonContent,.jxDisabled .jxButtonActive:active span.jxButtonContent,.jxDisabled .jxButtonActive:hover span.jxButtonContent{background-position:right -72px;}img.jxButtonIcon{display:-moz-inline-box;display:inline-block;position:relative;vertical-align:middle;width:16px;height:16px;background-position:center center;background-repeat:no-repeat;}span.jxButtonContent span{display:-moz-inline-box;display:inline-block;position:relative;vertical-align:middle;cursor:pointer;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:16px;height:16px;white-space:nowrap;}span.jxButtonContent span.jxButtonLabel{margin:0;padding:0 4px 0 4px;color:#000;font-size:11px;}.jxDiscloser span.jxButtonContent{padding-right:0;}.jxDiscloser span.jxButtonContent span{padding-right:16px;background-image:url(images/emblems.png);background-position:right -16px;background-repeat:no-repeat;}a.jxButtonDisclose{position:absolute;display:-moz-inline-box;display:inline-block;padding:4px 0;font-size:0;line-height:0;right:2px;top:2px;background-image:url(images/button_multi_disclose.png);background-position:right 0;background-repeat:no-repeat;outline:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;}a.jxButtonDisclose img{width:16px;height:16px;margin:0;padding:0;border:0;background-image:url(images/emblems.png);background-position:right -16px;background-repeat:no-repeat;}a.jxButtonDisclose:focus,a.jxButtonDisclose:active{background-position:right -96px;}a.jxButtonDisclose:hover{background-position:right -48px;}a.jxButtonDisclosePressed{background-position:right -120px;}.jxDisabled a.jxButtonDisclose,.jxDisabled a.jxButtonDisclose:focus,.jxDisabled a.jxButtonDisclose:active,.jxDisabled a.jxButtonDisclose:hover,.jxDisabled a.jxButtonDisclosePressed{cursor:default;background-position:right 0;}ul.jxToolbar .jxButtonHover{background-position:left -24px!important;}ul.jxToolbar .jxButtonHover span.jxButtonContent{background-position:right -24px!important;}.jxFlyout .jxChrome{background-image:url(images/flyout_chrome.png);padding:5px 5px 7px 6px;}.jxFlyout{position:absolute;display:block;z-index:100;margin:0;padding:0;}.jxFlyoutContent{position:relative;display:block;overflow:auto;margin:6px 6px 8px 7px;background-color:#fff;border:1px solid #999;}.jxButtonMulti,.jxButtonMulti span.jxButtonContent{background-image:url(images/button_multi.png);}.jxButtonEditCombo,.jxButtonEditCombo span.jxButtonContent{background-image:url(images/button_combo.png);}.jxButtonMulti span.jxButtonContent span{padding-right:21px;}.jxButtonEditCombo span.jxButtonContent span{font-size:0;}.jxButtonComboDefault span.jxButtonContent span,.jxButtonComboDefault input{font-style:italic;color:#999;}.jxButtonEditCombo input{float:left;line-height:16px;height:16px;padding:0 4px;margin:0;border:none;font-size:11px;font-family:Arial,Helvetica,sans-serif;background-color:transparent;}.jxChrome{position:absolute;display:block;font-size:0;line-height:0;z-index:-1;width:100%;height:100%;top:0;left:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxChromeDrag{opacity:.5;-ms-filter:"Alpha(opacity=50)";}.jxChromeTL{position:absolute;overflow:hidden;left:0;top:0;width:50%;height:50%;}.jxChromeTR{position:absolute;overflow:hidden;left:50%;top:0;width:50%;height:50%;}.jxChromeBL{position:absolute;overflow:hidden;left:0;top:50%;width:50%;height:50%;}.jxChromeBR{position:absolute;overflow:hidden;left:50%;top:50%;width:50%;height:50%;}.jxChromeTL img{position:absolute;top:0;left:0;width:1000px;height:600px;}.jxChromeTR img{position:absolute;top:0;right:0;width:1000px;height:600px;}.jxChromeBL img{position:absolute;bottom:0;left:0;width:1000px;height:600px;}.jxChromeBR img{position:absolute;bottom:0;right:0;width:1000px;height:600px;}.jxColorBar{position:relative;overflow:hidden;}table.jxColorGrid{position:relative;border-collapse:collapse;empty-cells:show;clear:both;padding:0;margin:0;}.jxColorGrid tr{padding:0;margin:0;}.jxColorGrid td{border:1px solid #000;padding:0;margin:0;}.jxColorGrid td.emptyCell{border:0 solid #000;}.jxColorGrid td.emptyCell span{display:block;width:7px;height:7px;line-height:0;font-size:0;border:0 solid #000;padding:1px;margin:0;}.jxColorGrid a.colorSwatch{display:block;width:7px;height:7px;line-height:0;font-size:0;border:0 solid #000;margin:0;padding:1px;}.jxColorGrid a.borderWhite:hover{border:1px solid #fff;padding:0;}.jxColorGrid a.borderBlack:hover{border:1px solid #000;padding:0;}input.jxHexInput{width:55px;vertical-align:middle;}input.jxAlphaInput{width:30px;vertical-align:middle;}div.jxColorPreview{float:left;position:relative;width:20px;height:20px;border:1px solid #000;margin:2px;vertical-align:middle;background-image:url('images/grid.png');overflow:hidden;}.jxButtonFlyout span.jxButtonContent span.jxButtonSwatch{display:block;float:left;width:14px;height:14px;border:1px solid #000;background-image:url('images/grid.png');background-position:0 0;background-repeat:repeat;padding-right:0!important;}.jxButtonFlyout span.jxButtonContent span.jxButtonSwatch span{display:block;width:14px;height:14px;position:absolute;padding-right:0;background:none;}div.jxColorPreview img{position:absolute;z-index:0;}div.jxColorPreview div{width:20px;height:10px;position:absolute;display:block;left:0;z-index:1;font-size:10px;line-height:0;}div.jxColorPreview div.jxColorSelected{top:0;}div.jxColorPreview div.jxColorHover{bottom:0;}label.jxColorLabel,label.jxAlphaLabel{width:auto;font-family:Arial,sans-serif;font-size:11px;line-height:24px;padding:2px;vertical-align:middle;}a.jxColorClose{position:absolute;top:0;right:0;width:16px;height:16px;}a.jxColorClose img{width:16px;height:16px;}.jxClearer{display:block;position:relative;float:none;clear:both;font-size:0;line-height:0;width:0;height:0;margin:0;padding:0;}.jxDisabled{opacity:.4;-ms-filter:"Alpha(opacity=40)";}.jxDisabled *{-ms-filter:"Alpha(opacity=40)";}iframe.jxIframeShim{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;-ms-filter:"Alpha(opacity=0)";z-index:-1;}.jxConfirmQuestion{text-align:center;padding:10px;margin-top:10px;}.jxDialog .jxChrome{background-image:url(images/dialog_chrome.png);}.jxDialog{display:block;z-index:1000;overflow:hidden;}.jxDialogContentContainer{z-index:1;margin:0 11px 13px 12px;border:1px solid #b7b7b7;background-color:#f0f0f0;}.jxDialogModal{position:absolute;display:block;top:0;left:0;width:100%;height:100%;background-color:#000;opacity:.2;-ms-filter:"Alpha(opacity=20)";}.jxDialogContent{display:block;position:relative;overflow:auto;padding:0;z-index:1;}.jxDialogTitle{display:block;position:relative;background-image:url(images/a_pixel.png);text-align:center;height:24px;line-height:24px;z-index:1;margin:6px 6px 0 7px;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxDialogMin .jxDialogTitle{margin-bottom:8px;}.jxDialogMoveable,.jxDialogMoveable .jxDialogLabel{cursor:move;}.jxDialogIcon{position:absolute;left:2px;top:3px;width:16px;height:16px;border:none;padding:0;margin:0;}.jxDialogLabel{font-family:Arial,Helvetica,sans-serif;font-size:11px;font-weight:bold;line-height:21px;color:#000;white-space:nowrap;cursor:default;}.jxDialogResize{position:absolute;bottom:7px;right:6px;width:16px;height:16px;z-index:2;border:0;cursor:se-resize;background-image:url(images/dialog_resize.png);}.jxDialogControls{position:absolute;top:3px;right:2px;height:16px;width:80px;}.jxDialogControls img{background-image:url('images/panel_controls.png');background-repeat:no-repeat;border:0;margin:0;width:16px;height:16px;}.jxDialogClose img{background-position:0 -32px;}.jxDialogMenu img{background-position:0 -48px;}.jxDialogHelp img{background-position:0 -64px;}.jxDialogCollapse img{background-position:0 -16px;}.jxDialogMin .jxDialogCollapse img{background-position:0 0;}.jxDialogMax .jxDialogCollapse img{background-position:0 -16px;}.jxDialogLoading img{border:0;margin:0;width:16px;height:16px;visibility:hidden;position:absolute;top:1px;left:2px;}.jxDialogControls .jxButtonContainer,.jxDialogControls span.jxButtonContent,.jxDialogControls .jxButton:hover span.jxButtonContent,.jxDialogControls .jxButton:active span.jxButtonContent,.jxDialogControls .jxButtonActive span.jxButtonContent,.jxDialogControls .jxButtonActive:hover span.jxButtonContent,.jxDialogControls .jxButtonActive:active span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton:hover span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton:active span.jxButtonContent,.jxDialogControls .jxButton,.jxDialogControls .jxButton:hover,.jxDialogControls .jxButton:active,.jxDialogControls .jxButtonActive,.jxDialogControls .jxButtonActive:hover,.jxDialogControls .jxButtonActive:active,.jxDialogControls .jxDisabled .jxButton,.jxDialogControls .jxDisabled .jxButton:hover,.jxDialogControls .jxDisabled .jxButton:active{padding:0;margin:0;border:none;background-color:transparent;background-image:none;}.jxDialogControls .jxButtonMenu span.jxButtonContent,.jxDialogControls .jxButtonFlyout span.jxButtonContent{background-image:none;}.jxDialogControls .jxButtonMenu span.jxButtonContent span,.jxDialogControls .jxButtonFlyout span.jxButtonContent span{padding-right:0;}.jxDialogControls .jxBarContainer{position:absolute;right:0;background-image:none;background-color:transparent;margin:0;padding:0;border:none;height:16px;}.jxDialogControls .jxBarScroller{left:auto;right:0;}.jxDialogControls ul.jxToolbar{float:right;}.jxDialogControls ul.jxToolbar,.jxDialogControls li.jxToolItem{background-image:none;background-color:transparent;margin:0;padding:0;border:none;}div.jxFileInputs{position:relative;}div.jxFileFake{position:absolute;top:0;left:0;z-index:1;}div.jxFileFake span{float:left;display:block;}div.jxFileFake .jxInputContainer{width:150px;}div.jxFileFake .jxInputText{width:135px;}div.jxFileFake .jxButtonContainer{margin-top:2px;float:left;}.jxInputFile{position:relative;text-align:right;-moz-opacity:0;filter:alpha(opacity:0);opacity:0;z-index:2;margin-top:-5px;height:35px;}.jxForm{display:block;position:relative;overflow:hidden;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxFieldset{display:block;position:relative;overflow:hidden;border:1px solid #ccc;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;-khtml-border-radius:10px;margin:10px;padding:5px;}.jxFieldsetLegend,.jxFieldset legend{position:relative;margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:26px;color:#000;}.jxInputContainer{display:block;position:relative;padding:0;margin:2px;border:none;}.jxInputLabel,.jxInputTag{display:-moz-inline-box;display:inline-block;margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:26px;color:#000;}.jxInputLabel{vertical-align:top;}.jxInputTag{vertical-align:bottom;}.jxInputText,.jxInputPassword,.jxInputTextarea{margin:0 4px;padding:4px;border:1px solid #bbb;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputSelect{margin:0 4px;padding:3px 4px 3px 1px;border:1px solid #bbb;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputText:focus,.jxInputPassword:focus,.jxInputTextarea:focus,.jxInputSelect:focus{border:1px solid #000;}.jxInputRadio,.jxInputCheck{margin:5px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputContainer .jxButtonContainer{padding:0;margin:0 4px;}.jxInputGroup{border:none;padding:0;margin:2px;}.jxInputGroup legend{font-size:0;line-height:0;padding:0;margin:0;border:none;}.jxInputGroup .jxFieldsetLegend{font-size:12px;}.jxInputGroup .jxInputLabel{width:auto;}.jxFieldInvalid .jxInputText,.jxFieldInvalid .jxInputPassword,.jxFieldInvalid .jxInputTextarea,.jxFieldInvalid .jxInputSelect{background-color:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;}.jxFieldValidated .jxInputText,.jxFieldValidated .jxInputPassword,.jxFieldValidated .jxInputTextarea,.jxFieldValidated .jxInputSelect{background-color:#E6EFC2;color:#264409;border-color:#C6D880;}.jxFieldInvalid .jxInputText:focus,.jxFieldInvalid .jxInputPassword:focus,.jxFieldInvalid .jxInputTextarea:focus,.jxFieldInvalid .jxInputSelect:focus{border-color:#8a1f11;}.jxFieldValidated .jxInputText:focus,.jxFieldValidated .jxInputPassword:focus,.jxFieldValidated .jxInputTextarea:focus,.jxFieldValidated .jxInputSelect:focus{border-color:#264409;}.jxFieldInvalid .jxInputLabel,.jxFieldInvalid .jxInputTag{color:#8a1f11;}.jxFieldValidated .jxInputLabel,.jxFieldValidated .jxInputTag{color:#264409;}.jxFormInline .jxInputContainer,form .jxFormInline .jxInputContainer,form .jxFieldset span.jxFormInline,form.jxForm span.jxFormInline{display:inline;}.jxFormInline .jxInputLabel,form .jxFormInline .jxInputLabel,form span.jxFormInline .jxInputLabel{display:inline;width:auto;}.jxFormInline .jxInputTag,form .jxFormInline .jxInputTag,form span.jxFormInline .jxInputTag{display:inline;}.jxFormInline .jxInputGroup,form .jxFormInline .jxInputGroup{padding-left:0;}.jxFormInline .jxInputGroup .jxFieldsetLegend,form .jxFormInline .jxInputGroup .jxFieldsetLegend{position:relative;left:auto;}.jxFormInline .jxInputGroup .jxInputLabel,form .jxFormInline .jxInputGroup .jxInputLabel{display:inline;width:auto;}.jxFormBlock .jxInputContainer,form .jxFormBlock .jxInputContainer,form .jxFieldset span.jxFormBlock,form.jxform span.jxFormBlock{display:block;}.jxFormBlock .jxInputLabel,form .jxFormBlock .jxInputLabel,form span.jxFormBlock .jxInputLabel{display:block;width:auto;margin-left:4px;}.jxFormBlock .jxInputContainerCheck .jxInputLabel,.jxFormBlock .jxInputContainerRadio .jxInputLabel,form .jxFormBlock .jxInputContainerCheck .jxInputLabel,form .jxFormBlock .jxInputContainerRadio .jxInputLabel,form span.jxFormBlock .jxInputContainerCheck .jxInputLabel,form span.jxFormBlock .jxInputContainerRadio .jxInputLabel{display:-moz-inline-box;display:inline-block;}.jxFormBlock .jxInputGroup,form .jxFormBlock .jxInputGroup{padding-left:0;}.jxFormBlock .jxInputGroup .jxFieldsetLegend,form .jxFormBlock .jxInputGroup .jxFieldsetLegend{position:relative;left:auto;}.jxFormBlock .jxInputGroup .jxInputLabel,form .jxFormBlock .jxInputGroup .jxInputLabel{display:-moz-inline-box;display:inline-block;width:auto;}.jxFormInlineblock .jxInputContainer,form .jxFormInlineblock .jxInputContainer,form .jxFieldset span.jxFormInlineblock,form.jxForm span.jxFormInlineblock{display:block;}.jxFormInlineblock .jxInputLabel,form .jxFormInlineblock .jxInputLabel,form span.jxFormInlineblock .jxInputLabel{display:-moz-inline-box;display:inline-block;width:200px;}.jxFormInlineblock .jxInputGroup,form .jxFormInlineblock .jxInputGroup{padding-left:200px;}.jxFormInlineblock .jxInputGroup .jxFieldsetLegend,form .jxFormInlineblock .jxInputGroup .jxFieldsetLegend{position:absolute;left:-200px;width:200px;}.jxFormInlineblock .jxInputGroup .jxInputLabel,form .jxFormInlineblock .jxInputGroup .jxInputLabel{display:-moz-inline-box;display:inline-block;width:auto;}.jxGridContainer{position:absolute;top:0;left:0;border-left:0 solid #d8d8d8;border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;overflow:hidden;}.jxGridTable{position:relative;table-layout:fixed;border-collapse:collapse;border-style:none;cursor:default;font-family:Arial,Verdana,sans-serif;font-size:11px;font-weight:normal;}.jxGridHeader{width:100%;}.jxGridTableBody{position:relative;table-layout:fixed;border-collapse:collapse;border-style:none;cursor:default;font-family:Arial,Verdana,sans-serif;font-size:11px;font-weight:normal;}.jxGridColHeadHide{height:0;line-height:0;font-size:0;background-color:#fff;white-space:normal;}.jxGridColHeadHide p,.jxGridRowHeadHide p{font-size:0;line-height:0;height:0;margin:0;padding:0;}.jxGridRowHeadHide{width:0;white-space:normal;}.jxGridCell{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;overflow:hidden;}.jxGridCellContent{position:relative;display:-moz-inline-box;display:inline-block;overflow:hidden;padding-left:3px;padding-right:3px;overflow:hidden;white-space:nowrap;cursor:cell;text-overflow:ellipsis;}.jxGridColHead{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;background-color:#f2f2f2;background-image:url('images/table_col.png');background-position:0 0;background-repeat:repeat-x;text-align:center;font-weight:bold;color:#333;cursor:default;padding-left:3px;padding-right:3px;white-space:nowrap;}.jxGridRowHead{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;background-color:#f2f2f2;background-image:url('images/table_row.png');background-position:0 0;background-repeat:repeat-y;text-align:center;font-weight:bold;color:#333;cursor:default;overflow:hidden;white-space:nowrap;}.jxGridRowAll{background-color:#fff;}.jxGridColumnHeaderSelected{background-color:#e1e1e1;background-position:0 -200px;}.jxGridRowHeaderSelected{background-color:#e1e1e1;background-position:-400px 0;}.jxGridColumnSelected{background-color:#f7f7f7;}.jxGridRowSelected td{background-color:#f7f7f7;}td.jxGridCellSelected{background-color:#ebebeb;}.jxGridColumnHeaderPrelight{background-color:#cee5ff;background-position:0 -300px;}.jxGridRowHeaderPrelight{background-color:#cee5ff;background-position:-600px 0;}.jxGridColumnPrelight{background-color:#e5f1ff;}.jxGridRowPrelight td{background-color:#e5f1ff;}td.jxGridCellPrelight{background-color:#cce3ff;}.jxColSortable{padding-right:20px;}.jxGridCell.jxColSortable{padding-right:0;}.jxColSortable span{background-image:url('images/emblems.png');padding-right:20px;background-repeat:no-repeat;background-position:right top;}.jxGridColumnSortedAsc span{background-position:right -160px;}.jxGridColumnSortedDesc span{background-position:right -16px;}.jxGridColumnResize,.jxGridRowResize{display:block;position:absolute;background-image:url(images/a_pixel.png);z-index:1;}.jxGridColumnResize{right:0;top:0;height:100%;width:4px;cursor:col-resize;}.jxGridRowResize{left:0;bottom:0;height:4px;width:100%;cursor:row-resize;}.jxListView .jxListItemContainer{position:relative;display:block;outline:none;overflow:hidden;border:none;margin:0 1px;padding:0;}.jxListItem{position:relative;display:block;cursor:pointer;outline:none;overflow:hidden;border:none;margin:0 1px;padding:0;z-index:0;font-family:Arial,Helvetica,sans-serif;font-size:11px;color:#000;text-decoration:none;line-height:20px;height:20px;}.jxListView .jxHover{margin:0;border-left:1px solid #CDDFFD;border-right:1px solid #CDDFFD;background-image:url(images/listitem.png);background-repeat:repeat-x;background-color:#CDE5FF;background-position:left -24px;}.jxListItem:focus{margin:0;border-left:1px dotted #75ADFF;border-right:1px dotted #75ADFF;background-image:url(images/listitem.png);background-repeat:repeat-x;background-position:left -72px;}.jxListView .jxPressed,.jxListView .jxSelected{margin:0;border-left:1px solid #8AABFB;border-right:1px solid #8AABFB;background-color:#CDE5FF;background-image:url(images/listitem.png);background-repeat:repeat-x;background-position:left -48px;}.jxMenuContainer .jxChrome{background-image:url(images/flyout_chrome.png);padding:5px 5px 7px 6px;}.jxButtonMenu span.jxMenuItemSpan{padding-right:16px;}.jxMenuContainer{position:absolute;top:0;left:-10000px;display:none;z-index:2000;padding:0;}ul.jxMenu{display:block;position:relative;list-style-type:none;padding:1px;margin:6px 6px 8px 7px;background-color:#fff;border:1px solid #999;}li.jxMenuItemContainer{display:block;position:relative;font-size:0;line-height:0;margin:0;padding:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}a.jxMenuItem{display:block;position:relative;overflow:hidden;text-decoration:none;cursor:pointer;outline:none;border:1px solid #fff;background-image:url(images/menuitem.png);background-repeat:no-repeat;background-position:left top;font-family:Arial,Helvetica,sans-serif;font-size:11px;text-decoration:none;margin:0;padding:0;color:#000;}a.jxMenuItemActive{background-position:left -98px;}a.jxMenuItem:focus{background-position:left -74px;}a.jxMenuItem:focus span.jxMenuItemContent{border-right:1px dotted #75ADFF;}a.jxMenuItemActive:focus{background-position:left -170px;}a.jxMenuItem:hover{background-color:#CDE5FF;background-position:left -26px;}a.jxMenuItem:hover span.jxMenuItemContent{border-right:1px solid #C5E0FF;}a.jxMenuItemActive:hover{background-position:left -122px;}a.jxMenuItemPressed,a.jxMenuItemPressed:hover{background-color:#CDE5FF;background-position:left -50px;}.jxDisabled a.jxMenuItem,.jxDisabled span.jxMenuItemContent span{cursor:default;}.jxDisabled a.jxMenuItem:focus,.jxDisabled a.jxMenuItemPressed,.jxDisabled a.jxMenuItemPressed:hover,.jxDisabled a.jxMenuItem:hover{background-color:#fff;background-position:left top;border-right:1px solid #fff;}.jxDisabled a.jxMenuItem:hover span.jxMenuItemContent{border-right:1px solid #fff;}span.jxMenuItemContent{display:block;position:relative;font-family:Arial,Helvetica,sans-serif;font-size:0;line-height:0;white-space:nowrap;padding:0 20px 0 0;margin:0;border-right:1px solid #fff;}.jxButtonSubMenu span.jxMenuItemContent,.jxButtonSubMenu:hover span.jxMenuItemContent{background-image:url(images/emblems.png);background-position:right -30px;background-repeat:no-repeat;}img.jxMenuItemIcon{position:absolute;top:2px;left:2px;width:16px;height:16px;background-position:left center;background-repeat:no-repeat;}span.jxMenuItemContent span{display:block;position:relative;cursor:pointer;margin:0;padding:2px 0 2px 22px;font-size:16px;line-height:16px;color:#000;}span.jxMenuItemContent span.jxMenuItemLabel{color:#000;font-size:11px;}.jxMenuItemToggle img.jxMenuItemIcon,.jxMenuItemToggleSet img.jxMenuItemIcon{background-image:url(images/emblems.png);background-position:2px 0;background-repeat:no-repeat;}.jxMenuItemToggle a.jxMenuItemActive img.jxMenuItemIcon{background-position:2px -48px;}.jxMenuItemToggleSet a.jxMenuItemActive img.jxMenuItemIcon{background-position:2px -64px;}ul.jxMenu span.jxMenuSeparator{display:block;font-size:10px;line-height:10px;background-image:url(images/toolbar_separator_v.png);background-repeat:repeat-x;background-position:left center;}.jxMessage{text-align:center;padding:10px;margin-top:10px;}.jxNotificationContainer{border:1px black solid;padding:2px;}.jxNotificationMinimize{width:100%;height:10px;margin:2px;background-color:blue;cursor:pointer;display:block;}.jxNotice{margin:5 auto;border:1px solid black;position:relative;display:block;}.jxNoticeClose{float:right;width:15px;height:15px;background-color:black;cursor:pointer;}.jxPanel{display:block;position:relative;}.jxPanelContentContainer{overflow:hidden;background-color:#f0f0f0;}.jxPanelContent{position:relative;display:block;overflow:auto;background-color:#fff;margin:0;padding:0;}.jxPanelTitle{display:block;position:relative;background-image:url(images/panelbar.png);background-repeat:repeat-x;background-position:left top;height:22px;margin:0;padding:0;text-align:center;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxPanelBar{position:absolute;line-height:1px;width:100%;height:5px;cursor:row-resize;background-color:#f0f0f0;z-index:2;}.jxPanelIcon{position:absolute;left:2px;top:3px;width:16px;height:16px;border:none;padding:0;margin:0;}.jxPanelLabel{padding-left:25px;font-family:Arial,Helvetica,sans-serif;font-size:11px;font-weight:bold;line-height:21px;color:#000;white-space:nowrap;}.jxPanelControls{position:absolute;top:3px;right:2px;height:16px;width:80px;overflow:hidden;}.jxPanelControls img{background-image:url('images/panel_controls.png');background-repeat:no-repeat;border:0;margin:0;width:16px;height:16px;}.jxPanelClose img{background-position:0 -32px;}.jxPanelMenu img{background-position:0 -48px;}.jxPanelHelp img{background-position:0 -64px;}.jxPanelCollapse img{background-position:0 -16px;}.jxPanelMin .jxPanelCollapse img{background-position:0 0;}.jxPanelMax .jxPanelCollapse img{background-position:0 -16px;}.jxPanelMaximize img{background-position:0 0;}.jxPanelLoading img{border:0;margin:0;width:16px;height:16px;visibility:hidden;position:absolute;top:1px;left:2px;}.jxPanelControls .jxButtonContainer,.jxPanelControls span.jxButtonContent,.jxPanelControls .jxButton:hover span.jxButtonContent,.jxPanelControls .jxButton:active span.jxButtonContent,.jxPanelControls .jxButtonActive span.jxButtonContent,.jxPanelControls .jxButtonActive:hover span.jxButtonContent,.jxPanelControls .jxButtonActive:active span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton:hover span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton:active span.jxButtonContent,.jxPanelControls .jxButton,.jxPanelControls .jxButton:hover,.jxPanelControls .jxButton:active,.jxPanelControls .jxButtonActive,.jxPanelControls .jxButtonActive:hover,.jxPanelControls .jxButtonActive:active,.jxPanelControls .jxDisabled .jxButton,.jxPanelControls .jxDisabled .jxButton:hover,.jxPanelControls .jxDisabled .jxButton:active{padding:0;margin:0;border:none;background-color:transparent;background-image:none;}.jxPanelControls .jxButtonMenu span.jxButtonContent,.jxPanelControls .jxButtonFlyout span.jxButtonContent{background-image:none;}.jxPanelControls .jxButtonMenu span.jxButtonContent span,.jxPanelControls .jxButtonFlyout span.jxButtonContent span{padding-right:0;}.jxPanelControls div.jxBarTop{position:absolute;right:0;background-image:none;background-color:transparent;margin:0;padding:0;border:none;height:16px;}.jxPanelControls .jxBarScroller{left:auto;right:0;}.jxPanelControls ul.jxToolbar{float:right;}.jxPanelControls ul.jxToolbar,.jxPanelControls li.jxToolItem{background-image:none;background-color:transparent;margin:0;padding:0;border:none;}.jxProgressBar-container{width:100%;display:block;clear:both;}.jxProgressBar-message{color:black;}.jxProgressBar-container .jxProgressBar{width:100%;clear:both;border-top:none;}.jxProgressBar-container .jxProgressBar .jxProgressBar-outline{border:1px solid #360;position:absolute;top:0;left:0;z-index:10;}.jxProgressBar-container .jxProgressBar .jxProgressBar-fill{background-color:#9c6;position:absolute;top:1px;left:1px;z-index:20;}.jxProgressBar-container .jxProgressBar .jxProgressBar-text{color:#360;margin:0;padding:2px;position:absolute;top:1px;left:1px;width:auto;z-index:30;border:none;}.jxSliderContainer{width:100%;height:10px;border:1px solid black;}.jxSliderKnob{width:10px;height:10px;background-color:black;cursor:pointer;}.jxSplitterMask{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;background-image:url(images/a_pixel.png);z-index:1;}.jxSplitBarHorizontal{display:block;position:absolute;font-size:0;line-height:0;margin:0;padding:0;border:none;width:5px;height:100%;cursor:col-resize;background-color:#f0f0f0;z-index:2;}.jxSplitBarVertical{display:block;position:absolute;font-size:0;line-height:0;margin:0;padding:0;border:none;width:100%;height:5px;cursor:row-resize;background-color:#f0f0f0;z-index:2;}.jxSplitContainer{display:block;position:relative;margin:0;padding:0;border:none;overflow:hidden;}.jxSplitArea{display:block;position:absolute;margin:0;padding:0;border:none;z-index:0;}.jxSplitBarDrag{background-color:#eee;}.jxSnapHorizontalBefore{width:5px;height:5px;position:absolute;top:0;left:0;background-color:#aaa;}.jxSnapHorizontalAfter{width:5px;height:5px;position:absolute;top:0;left:0;background-color:#aaa;}.jxTabSetContainer{position:relative;display:-moz-inline-box;display:inline-block;overflow:hidden;width:200px;height:200px;margin:0;padding:0;background-color:#fff;}.jxTabSetContainer .jxToolbarContainer{z-index:auto;}.tabContent{display:none;position:relative;width:100%;height:100%;overflow:auto;}.tabContentActive{display:block;}span.jxTabContainer{display:block;position:relative;margin:0;padding:2px;border:none;}a.jxTab{display:-moz-inline-box;display:inline-block;position:relative;cursor:pointer;user-select:none;-moz-user-select:none;-khtml-user-select:none;margin:0;padding:0;border:none;background-repeat:no-repeat;text-decoration:none;outline:none;}span.jxTabContent{display:-moz-inline-box;display:inline-block;font-size:0;line-height:0;margin:0;padding:0;border:none;background-repeat:no-repeat;}img.jxTabIcon{display:-moz-inline-box;display:inline-block;position:relative;width:16px;height:16px;background-position:center center;background-repeat:no-repeat;}span.jxTabLabel{display:-moz-inline-box;display:inline-block;position:relative;cursor:pointer;margin:0;padding:0;color:#000;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:16px;}a.jxTabClose{display:block;position:absolute;cursor:pointer;outline:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;}a.jxTabClose img{width:16px;height:16px;background-image:url(images/tab_close.png);}.jxDisabled a.jxTab,.jxDisabled span.jxTabContent span,.jxDisabled a.jxTabClose{cursor:default;}.jxBarTop a.jxTab,.jxBarTop span.jxTabContent{background-image:url(images/tab_top.png);}.jxBarBottom a.jxTab,.jxBarBottom span.jxTabContent{background-image:url(images/tab_bottom.png);}.jxBarTop a.jxTabClose,.jxBarBottom a.jxTabClose{top:5px;right:5px;}.jxBarTop .jxTabClose span.jxTabContent,.jxBarBottom .jxTabClose span.jxTabContent{padding-right:16px;}.jxBarTop a.jxTab,.jxBarBottom a.jxTab{padding-left:4px;background-position:left -24px;}.jxBarTop span.jxTabContent,.jxBarBottom span.jxTabContent{padding:4px 4px 4px 0;background-position:right -24px;}.jxBarTop a.jxTabActive,.jxBarBottom a.jxTabActive{background-position:left -72px;}.jxBarTop a.jxTabActive span.jxTabContent,.jxBarBottom a.jxTabActive span.jxTabContent{background-position:right -72px;}.jxBarTop a.jxTab:focus,.jxBarBottom a.jxTab:focus{background-position:left -96px;}.jxBarTop a.jxTab:focus span.jxTabContent,.jxBarBottom a.jxTab:focus span.jxTabContent{background-position:right -96px;}.jxBarTop a.jxTabActive:focus,.jxBarBottom a.jxTabActive:focus{background-position:left -144px;}.jxBarTop a.jxTabActive:focus span.jxTabContent,.jxBarBottom a.jxTabActive:focus span.jxTabContent{background-position:right -144px;}.jxBarTop a.jxTab:hover,.jxBarTop a.jxTabActive:hover,.jxBarBottom a.jxTab:hover,.jxBarBottom a.jxTabActive:hover{background-position:left -48px;}.jxBarTop a.jxTab:hover span.jxTabContent,.jxBarTop a.jxTabActive:hover span.jxTabContent,.jxBarBottom a.jxTab:hover span.jxTabContent,.jxBarBottom a.jxTabActive:hover span.jxTabContent{background-position:right -48px;}.jxBarTop a.jxTabPressed,.jxBarTop a.jxTabPressed:focus,.jxBarBottom a.jxTabPressed,.jxBarBottom a.jxTabPressed:focus{background-position:left -120px;}.jxBarTop a.jxTabPressed span.jxTabContent,.jxBarTop a.jxTabPressed:focus span.jxTabContent,.jxBarBottom a.jxTabPressed span.jxTabContent,.jxBarBottom a.jxTabPressed:focus span.jxTabContent{background-position:right -120px;}.jxBarTop .jxDisabled a.jxTab:focus,.jxBarTop .jxDisabled a.jxTab:active,.jxBarTop .jxDisabled a.jxTab:hover,.jxBarTop .jxDisabled a.jxTabPressed,.jxBarBottom .jxDisabled a.jxTab:focus,.jxBarBottom .jxDisabled a.jxTab:active,.jxBarBottom .jxDisabled a.jxTab:hover,.jxBarBottom .jxDisabled a.jxTabPressed{background-position:left -24px;}.jxBarTop .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarTop .jxDisabled a.jxTab:active span.jxTabContent,.jxBarTop .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarTop .jxDisabled a.jxTabPressed span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:active span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabPressed span.jxTabContent{background-position:right -24px;}.jxBarTop .jxDisabled a.jxTabActive:focus,.jxBarTop .jxDisabled a.jxTabActive:active,.jxBarTop .jxDisabled a.jxTabActive:hover,.jxBarBottom .jxDisabled a.jxTabActive:focus,.jxBarBottom .jxDisabled a.jxTabActive:active,.jxBarBottom .jxDisabled a.jxTabActive:hover{background-position:left -72px;}.jxBarTop .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarTop .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarTop .jxDisabled a.jxTabActive:hover span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:hover span.jxTabContent{background-position:right -72px;}.jxBarTop img.jxTabIcon,.jxBarBottom img.jxTabIcon{vertical-align:middle;}.jxBarTop span.jxTabLabel,.jxBarBottom span.jxTabLabel{vertical-align:middle;height:16px;padding:0 4px 0 4px;}.jxBarLeft a.jxTab,.jxBarLeft span.jxTabContent{background-image:url(images/tab_left.png);}.jxBarRight a.jxTab,.jxBarRight span.jxTabContent{background-image:url(images/tab_right.png);}.jxBarLeft a.jxTabClose,.jxBarRight a.jxTabClose{top:5px;left:5px;}.jxBarLeft .jxTabClose span.jxTabContent,.jxBarRight .jxTabClose span.jxTabContent{padding-top:16px;}.jxBarLeft a.jxTab,.jxBarRight a.jxTab{padding-top:4px;background-position:-24px top;}.jxBarLeft span.jxTabContent,.jxBarRight span.jxTabContent{padding:0 4px 4px 4px;background-position:-24px bottom;}.jxBarLeft a.jxTabActive,.jxBarRight a.jxTabActive{background-position:-72px top;}.jxBarLeft a.jxTabActive span.jxTabContent,.jxBarRight a.jxTabActive span.jxTabContent{background-position:-72px bottom;}.jxBarLeft a.jxTab:focus,.jxBarRight a.jxTab:focus{background-position:-96px top;}.jxBarLeft a.jxTab:focus span.jxTabContent,.jxBarRight a.jxTab:focus span.jxTabContent{background-position:-96px bottom;}.jxBarLeft a.jxTabActive:focus,.jxBarRight a.jxTabActive:focus{background-position:-144px top;}.jxBarLeft a.jxTabActive:focus span.jxTabContent,.jxBarRight a.jxTabActive:focus span.jxTabContent{background-position:-144px bottom;}.jxBarLeft a.jxTab:hover,.jxBarLeft a.jxTabActive:hover,.jxBarRight a.jxTab:hover,.jxBarRight a.jxTabActive:hover{background-position:-48px top;}.jxBarLeft a.jxTab:hover span.jxTabContent,.jxBarLeft a.jxTabActive:hover span.jxTabContent,.jxBarRight a.jxTab:hover span.jxTabContent,.jxBarRight a.jxTabActive:hover span.jxTabContent{background-position:-48px bottom;}.jxBarLeft a.jxTabPressed,.jxBarLeft a.jxTabPressed:focus,.jxBarRight a.jxTabPressed,.jxBarRight a.jxTabPressed:focus{background-position:-120px top;}.jxBarLeft a.jxTabPressed span.jxTabContent,.jxBarLeft a.jxTabPressed:focus span.jxTabContent,.jxBarRight a.jxTabPressed span.jxTabContent,.jxBarRight a.jxTabPressed:focus span.jxTabContent{background-position:-120px bottom;}.jxBarLeft .jxDisabled a.jxTab:focus,.jxBarLeft .jxDisabled a.jxTab:active,.jxBarLeft .jxDisabled a.jxTab:hover,.jxBarLeft .jxDisabled a.jxTabPressed,.jxBarRight .jxDisabled a.jxTab:focus,.jxBarRight .jxDisabled a.jxTab:active,.jxBarRight .jxDisabled a.jxTab:hover,.jxBarRight .jxDisabled a.jxTabPressed{background-position:-24px top;}.jxBarLeft .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarLeft .jxDisabled a.jxTab:active span.jxTabContent,.jxBarLeft .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabPressed span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:active span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarRight .jxDisabled a.jxTabPressed span.jxTabContent{background-position:-24px bottom;}.jxBarLeft .jxDisabled a.jxTabActive:focus,.jxBarLeft .jxDisabled a.jxTabActive:active,.jxBarLeft .jxDisabled a.jxTabActive:hover,.jxBarRight .jxDisabled a.jxTabActive:focus,.jxBarRight .jxDisabled a.jxTabActive:active,.jxBarRight .jxDisabled a.jxTabActive:hover{background-position:-72px top;}.jxBarLeft .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabActive:hover span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:hover span.jxTabContent{background-position:-72px bottom;}.jxBarLeft span.jxTabLabel,.jxBarRight span.jxTabLabel{padding:4px 0 4px 0;}.jxBarContainer{display:block;position:relative;z-index:1;overflow:hidden;margin:0;padding:0;border:0;background-color:#f0f0f0;}.jxBarTop,.jxBarBottom{width:100%;height:28px;background-image:url(images/toolbar.png);background-repeat:repeat-x;background-position:0 0;overflow:hidden;}.jxTabBox .jxTabBarTop{background-image:url(images/tabbar.png);background-position:0 bottom;}.jxTabBox .jxTabBarBottom{background-image:url(images/tabbar_bottom.png);background-position:0 top;}.jxBarLeft,.jxBarRight{width:auto;height:100%;background-image:url(images/toolbar.png);background-repeat:repeat-x;background-position:0 0;float:left;overflow:hidden;}.jxTabBox .jxTabBarLeft{background-image:url(images/tabbar_left.png);background-repeat:repeat-y;background-position:right 0;}.jxTabBox .jxTabBarRight{background-image:url(images/tabbar_right.png);background-repeat:repeat-y;background-position:left 0;}.jxBarTop .jxBarScroller,.jxBarBottom .jxBarScroller{position:absolute;width:10000%;overflow:hidden;}.jxBarTop .jxBarScrollLeft,.jxBarBottom .jxBarScrollLeft{position:absolute;top:0;left:0;}.jxBarTop .jxBarScrollRight,.jxBarBottom .jxBarScrollRight{position:absolute;top:0;right:0;}.jxBarTop .jxBarScrollLeft img.jxButtonIcon,.jxBarBottom .jxBarScrollLeft img.jxButtonIcon{background-image:url(images/emblems.png);background-position:0 -80px;}.jxBarTop .jxBarScrollRight img.jxButtonIcon,.jxBarBottom .jxBarScrollRight img.jxButtonIcon{background-image:url(images/emblems.png);background-position:0 -96px;}ul.jxToolbar,ul.jxTabBar{display:block;position:relative;float:left;list-style-type:none;margin:0;padding:0;border:none;}li.jxToolItem{display:block;position:relative;float:left;font-size:0;line-height:0;padding:0;margin:0;border:none;}li.jxToolItem span.jxBarSeparator{display:block;position:relative;float:left;font-size:0;line-height:0;border:0;margin:0;padding:4px;background-repeat:no-repeat;background-position:center center;}.jxBarTop li.jxToolItem span.jxBarSeparator,.jxBarBottom li.jxToolItem span.jxBarSeparator{width:8px;height:20px;background-image:url(images/toolbar_separator_h.png);}.jxBarLeft li.jxToolItem span.jxBarSeparator,.jxBarRight li.jxToolItem span.jxBarSeparator{width:20px;height:8px;background-image:url(images/toolbar_separator_v.png);}.jxBarLeft ul.jxToolbar,.jxBarLeft ul.jxTabBar,.jxBarLeft li.jxToolItem,.jxBarRight ul.jxToolbar,.jxBarRight ul.jxTabBar,.jxBarRight li.jxToolItem{clear:both;}.jxTooltip{width:auto;height:auto;background-color:black;color:white;padding:5px;z-index:65536;}.jxTree,.jxTreeRoot{position:relative;display:block;list-style:none;margin:0;padding:0;}.jxTreeNest{list-style:none;margin:0;padding:0;background-repeat:repeat-y;background-position:left top;}li.jxTreeContainer{position:relative;display:block;margin:0;padding:0;background-repeat:no-repeat;background-position:left top;white-space:nowrap;font-size:0;line-height:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxTree li.jxTreeContainer{margin-left:16px;}a.jxTreeItem{position:relative;display:block;cursor:pointer;outline:none;overflow:hidden;background-image:url(images/tree_hover.png);background-repeat:repeat-x;background-position:left top;border:none;margin:0 1px 0 17px;padding:0 0 0 20px;z-index:0;font-family:Arial,Helvetica,sans-serif;font-size:11px;color:#000;text-decoration:none;line-height:20px;height:20px;}a.jxTreeItem:focus{border-left:1px dotted #75ADFF;border-right:1px dotted #75ADFF;margin:0 0 0 16px;background-position:left -72px;}a.jxTreeItem:hover,li.jxTreeContainer a.jxHover{border-left:1px solid #CDDFFD;border-right:1px solid #CDDFFD;margin:0 0 0 16px;background-color:#CDE5FF;background-position:left -24px;}li.jxTreeContainer a.jxSelected,li.jxTreeContainer a.jxSelected:hover,li.jxTreeContainer a.jxPressed,li.jxTreeContainer a.jxPressed:hover{border-left:1px solid #8AABFB;border-right:1px solid #8AABFB;margin:0 0 0 16px;background-color:#CDE5FF;background-position:left -48px;}li.jxDisabled a.jxTreeItem{cursor:default;}li.jxDisabled a.jxTreeItem:focus,li.jxDisabled a.jxTreeItem:hover{background-position:left top;background-color:transparent;border:none;margin:0 1px 0 17px;}.jxTreeNest{background-image:url(images/tree_vert_line.png);}img.jxTreeImage,img.jxTreeIcon{position:absolute;display:inline;left:0;top:0;width:16px;height:20px;z-index:1;background-image:url(images/tree.png);background-repeat:no-repeat;border:0;margin:0;}img.jxTreeIcon{height:16px;top:2px;left:1px;}.jxTreeBranchOpen .jxTreeIcon,.jxTreeBranchLastOpen .jxTreeIcon{background-position:left -40px;}.jxTreeBranchOpen .jxTreeImage{background-position:left -100px;}.jxTreeBranchLastOpen .jxTreeImage{background-position:left -160px;}.jxTreeBranchClosed .jxTreeIcon,.jxTreeBranchLastClosed .jxTreeIcon{background-position:left -20px;}.jxTreeBranchClosed .jxTreeImage{background-position:left -80px;}.jxTreeBranchLastClosed .jxTreeImage{background-position:left -140px;}.jxTreeLeaf .jxTreeIcon,.jxTreeLeafLast .jxTreeIcon{background-position:left 0;}.jxTreeLeaf .jxTreeImage{background-position:left -60px;}.jxTreeLeafLast .jxTreeImage{background-position:left -120px;}a.jxTreeItem,img.jxTreeImage,img.jxTreeIcon,span.jxTreeLabel,.jxTreeItemContainer input{vertical-align:middle;}.jxFileUploadPanel{padding:5px;}.jxFileUploadPanel .jxInputContainer{width:300px;}.jxUploadQueue{width:100%;margin-top:10px;}.jxUploadQueue div{position:relative;width:95%;clear:both;border-top:1px solid black;padding:2px;}.jxUploadQueue div span{display:block;}.jxUploadQueue div span.jxUploadFileName{float:left;font-size:16px;}.jxUploadQueue div span.jxUploadFileDelete,.jxUploadQueue div span.jxUploadFileProgress,.jxUploadQueue div span.jxUploadFileComplete,.jxUploadQueue div span.jxUploadFileError{float:right;width:16px;height:16px;background-repeat:no-repeat;background-position:top left;cursor:pointer;}.jxUploadQueue div span.jxUploadFileDelete{background-image:url('images/delete.gif');}.jxUploadQueue div span.jxUploadFileProgress{background-image:url('images/loading.gif');}.jxUploadQueue div span.jxUploadFileComplete{background-image:url('images/green_tick.png');}.jxUploadQueue div span.jxUploadFileError{background-image:url('images/error.png');}.jxUploadFileErrorTip{padding:4px 4px 4px 20px;border:2px solid #ddd;background:url("images/error.png") no-repeat left top;color:black;width:100px;}
\ No newline at end of file
+ */body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';}.jxButtonContainer{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:2px;border:none;}.jxButton{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:0 0 0 4px;border:none;background-image:url(images/button.png);background-position:left -24px;background-repeat:no-repeat;text-decoration:none;outline:none;}a.jxButton{cursor:pointer;user-select:none;-moz-user-select:none;-khtml-user-select:none;}ul.jxToolbar .jxButton{background-position:left top;}span.jxButtonContent{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:4px 4px 4px 0;border:none;background-image:url(images/button.png);background-position:right -24px;background-repeat:no-repeat;}ul.jxToolbar span.jxButtonContent{background-position:right top;}ul.jxToolbar .jxButtonActive,.jxButtonActive{background-position:left -72px;}ul.jxToolbar .jxButtonActive span.jxButtonContent,.jxButtonActive span.jxButtonContent{background-position:right -72px;}ul.jxToolbar .jxButton:focus,.jxButton:focus{background-position:left -96px;}ul.jxToolbar .jxButton:focus span.jxButtonContent,.jxButton:focus span.jxButtonContent{background-position:right -96px;}ul.jxToolbar .jxButtonActive:focus,.jxButtonActive:focus{background-position:left -144px;}ul.jxToolbar .jxButtonActive:focus span.jxButtonContent,.jxButtonActive:focus span.jxButtonContent{background-position:right -144px;}ul.jxToolbar .jxButton:hover,ul.jxToolbar .jxButtonActive:hover,.jxButton:hover,.jxButtonActive:hover{background-position:left -48px;}ul.jxToolbar .jxButton:hover span.jxButtonContent,ul.jxToolbar .jxButtonActive:hover span.jxButtonContent,.jxButton:hover span.jxButtonContent,.jxButtonActive:hover span.jxButtonContent{background-position:right -48px;}ul.jxToolbar .jxButtonPressed,ul.jxToolbar .jxButtonPressed:focus,.jxButtonPressed,.jxButtonPressed:focus{background-position:left -120px;}ul.jxToolbar .jxButtonPressed span.jxButtonContent,ul.jxToolbar .jxButtonPressed:focus span.jxButtonContent,.jxButtonPressed span.jxButtonContent,.jxButtonPressed:focus span.jxButtonContent{background-position:right -120px;}.jxDisabled .jxButton,.jxDisabled span.jxButtonContent span{cursor:default;}ul.jxToolbar .jxDisabled .jxButton:focus,ul.jxToolbar .jxDisabled .jxButton:active,ul.jxToolbar .jxDisabled .jxButton:hover,ul.jxToolbar .jxDisabled .jxButtonPressed{background-position:left top;}.jxDisabled .jxButton:focus,.jxDisabled .jxButton:active,.jxDisabled .jxButton:hover,.jxDisabled .jxButtonPressed{background-position:left -24px;}ul.jxToolbar .jxDisabled .jxButton:focus span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButton:active span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButton:hover span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonPressed span.jxButtonContent{background-position:right top;}.jxDisabled .jxButton:focus span.jxButtonContent,.jxDisabled .jxButton:active span.jxButtonContent,.jxDisabled .jxButton:hover span.jxButtonContent,.jxDisabled .jxButtonPressed span.jxButtonContent{background-position:right -24px;}ul.jxToolbar .jxDisabled .jxButtonActive:focus,ul.jxToolbar .jxDisabled .jxButtonActive:active,ul.jxToolbar .jxDisabled .jxButtonActive:hover,.jxDisabled .jxButtonActive:focus,.jxDisabled .jxButtonActive:active,.jxDisabled .jxButtonActive:hover{background-position:left -72px;}ul.jxToolbar .jxDisabled .jxButtonActive:focus span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonActive:active span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonActive:hover span.jxButtonContent,.jxDisabled .jxButtonActive:focus span.jxButtonContent,.jxDisabled .jxButtonActive:active span.jxButtonContent,.jxDisabled .jxButtonActive:hover span.jxButtonContent{background-position:right -72px;}img.jxButtonIcon{display:-moz-inline-box;display:inline-block;position:relative;vertical-align:middle;width:16px;height:16px;background-position:center center;background-repeat:no-repeat;}span.jxButtonContent span{display:-moz-inline-box;display:inline-block;position:relative;vertical-align:middle;cursor:pointer;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:16px;height:16px;white-space:nowrap;}span.jxButtonContent span.jxButtonLabel{margin:0;padding:0 4px 0 4px;color:#000;font-size:11px;}.jxDiscloser span.jxButtonContent{padding-right:0;}.jxDiscloser span.jxButtonContent span{padding-right:16px;background-image:url(images/emblems.png);background-position:right -16px;background-repeat:no-repeat;}a.jxButtonDisclose{position:absolute;display:-moz-inline-box;display:inline-block;padding:4px 0;font-size:0;line-height:0;right:2px;top:2px;background-image:url(images/button_multi_disclose.png);background-position:right 0;background-repeat:no-repeat;outline:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;}a.jxButtonDisclose img{width:16px;height:16px;margin:0;padding:0;border:0;background-image:url(images/emblems.png);background-position:right -16px;background-repeat:no-repeat;}a.jxButtonDisclose:focus,a.jxButtonDisclose:active{background-position:right -96px;}a.jxButtonDisclose:hover{background-position:right -48px;}a.jxButtonDisclosePressed{background-position:right -120px;}.jxDisabled a.jxButtonDisclose,.jxDisabled a.jxButtonDisclose:focus,.jxDisabled a.jxButtonDisclose:active,.jxDisabled a.jxButtonDisclose:hover,.jxDisabled a.jxButtonDisclosePressed{cursor:default;background-position:right 0;}ul.jxToolbar .jxButtonHover{background-position:left -24px!important;}ul.jxToolbar .jxButtonHover span.jxButtonContent{background-position:right -24px!important;}.jxFlyout .jxChrome{background-image:url(images/flyout_chrome.png);padding:5px 5px 7px 6px;}.jxFlyout{position:absolute;display:block;z-index:100;margin:0;padding:0;}.jxFlyoutContent{position:relative;display:block;overflow:auto;margin:6px 6px 8px 7px;background-color:#fff;border:1px solid #999;}.jxButtonMulti,.jxButtonMulti span.jxButtonContent{background-image:url(images/button_multi.png);}.jxButtonEditCombo,.jxButtonEditCombo span.jxButtonContent{background-image:url(images/button_combo.png);}.jxButtonMulti span.jxButtonContent span{padding-right:21px;}.jxButtonEditCombo span.jxButtonContent span{font-size:0;}.jxButtonComboDefault span.jxButtonContent span,.jxButtonComboDefault input{font-style:italic;color:#999;}.jxButtonEditCombo input{float:left;line-height:16px;height:16px;padding:0 4px;margin:0;border:none;font-size:11px;font-family:Arial,Helvetica,sans-serif;background-color:transparent;}.jxChrome{position:absolute;display:block;font-size:0;line-height:0;z-index:-1;width:100%;height:100%;top:0;left:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxChromeDrag{opacity:.5;-ms-filter:"Alpha(opacity=50)";}.jxChromeTL{position:absolute;overflow:hidden;left:0;top:0;width:50%;height:50%;}.jxChromeTR{position:absolute;overflow:hidden;left:50%;top:0;width:50%;height:50%;}.jxChromeBL{position:absolute;overflow:hidden;left:0;top:50%;width:50%;height:50%;}.jxChromeBR{position:absolute;overflow:hidden;left:50%;top:50%;width:50%;height:50%;}.jxChromeTL img{position:absolute;top:0;left:0;width:1000px;height:600px;}.jxChromeTR img{position:absolute;top:0;right:0;width:1000px;height:600px;}.jxChromeBL img{position:absolute;bottom:0;left:0;width:1000px;height:600px;}.jxChromeBR img{position:absolute;bottom:0;right:0;width:1000px;height:600px;}.jxColorBar{position:relative;overflow:hidden;}table.jxColorGrid{position:relative;border-collapse:collapse;empty-cells:show;clear:both;padding:0;margin:0;}.jxColorGrid tr{padding:0;margin:0;}.jxColorGrid td{border:1px solid #000;padding:0;margin:0;}.jxColorGrid td.emptyCell{border:0 solid #000;}.jxColorGrid td.emptyCell span{display:block;width:7px;height:7px;line-height:0;font-size:0;border:0 solid #000;padding:1px;margin:0;}.jxColorGrid a.colorSwatch{display:block;width:7px;height:7px;line-height:0;font-size:0;border:0 solid #000;margin:0;padding:1px;}.jxColorGrid a.borderWhite:hover{border:1px solid #fff;padding:0;}.jxColorGrid a.borderBlack:hover{border:1px solid #000;padding:0;}input.jxHexInput{width:55px;vertical-align:middle;}input.jxAlphaInput{width:30px;vertical-align:middle;}div.jxColorPreview{float:left;position:relative;width:20px;height:20px;border:1px solid #000;margin:2px;vertical-align:middle;background-image:url('images/grid.png');overflow:hidden;}.jxButtonFlyout span.jxButtonContent span.jxButtonSwatch{display:block;float:left;width:14px;height:14px;border:1px solid #000;background-image:url('images/grid.png');background-position:0 0;background-repeat:repeat;padding-right:0!important;}.jxButtonFlyout span.jxButtonContent span.jxButtonSwatch span{display:block;width:14px;height:14px;position:absolute;padding-right:0;background:none;}div.jxColorPreview img{position:absolute;z-index:0;}div.jxColorPreview div{width:20px;height:10px;position:absolute;display:block;left:0;z-index:1;font-size:10px;line-height:0;}div.jxColorPreview div.jxColorSelected{top:0;}div.jxColorPreview div.jxColorHover{bottom:0;}label.jxColorLabel,label.jxAlphaLabel{width:auto;font-family:Arial,sans-serif;font-size:11px;line-height:24px;padding:2px;vertical-align:middle;}a.jxColorClose{position:absolute;top:0;right:0;width:16px;height:16px;}a.jxColorClose img{width:16px;height:16px;}.jxClearer{display:block;position:relative;float:none;clear:both;font-size:0;line-height:0;width:0;height:0;margin:0;padding:0;}.jxDisabled{opacity:.4;-ms-filter:"Alpha(opacity=40)";}.jxDisabled *{-ms-filter:"Alpha(opacity=40)";}iframe.jxIframeShim{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;-ms-filter:"Alpha(opacity=0)";z-index:-1;}.jxConfirmQuestion{text-align:center;padding:10px;margin-top:10px;}.jxDialog .jxChrome{background-image:url(images/dialog_chrome.png);}.jxDialog{display:block;z-index:1000;overflow:hidden;}.jxDialogContentContainer{z-index:1;margin:0 11px 13px 12px;border:1px solid #b7b7b7;background-color:#f0f0f0;}.jxDialogModal{position:absolute;display:block;top:0;left:0;width:100%;height:100%;background-color:#000;opacity:.2;-ms-filter:"Alpha(opacity=20)";}.jxDialogContent{display:block;position:relative;overflow:auto;padding:0;z-index:1;}.jxDialogTitle{display:block;position:relative;background-image:url(images/a_pixel.png);text-align:center;height:24px;line-height:24px;z-index:1;margin:6px 6px 0 7px;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxDialogMin .jxDialogTitle{margin-bottom:8px;}.jxDialogMoveable,.jxDialogMoveable .jxDialogLabel{cursor:move;}.jxDialogIcon{position:absolute;left:2px;top:3px;width:16px;height:16px;border:none;padding:0;margin:0;}.jxDialogLabel{font-family:Arial,Helvetica,sans-serif;font-size:11px;font-weight:bold;line-height:21px;color:#000;white-space:nowrap;cursor:default;}.jxDialogResize{position:absolute;bottom:7px;right:6px;width:16px;height:16px;z-index:2;border:0;cursor:se-resize;background-image:url(images/dialog_resize.png);}.jxDialogControls{position:absolute;top:3px;right:2px;height:16px;width:80px;}.jxDialogControls img{background-image:url('images/panel_controls.png');background-repeat:no-repeat;border:0;margin:0;width:16px;height:16px;}.jxDialogClose img{background-position:0 -32px;}.jxDialogMenu img{background-position:0 -48px;}.jxDialogHelp img{background-position:0 -64px;}.jxDialogCollapse img{background-position:0 -16px;}.jxDialogMin .jxDialogCollapse img{background-position:0 0;}.jxDialogMax .jxDialogCollapse img{background-position:0 -16px;}.jxDialogLoading img{border:0;margin:0;width:16px;height:16px;visibility:hidden;position:absolute;top:1px;left:2px;}.jxDialogControls .jxButtonContainer,.jxDialogControls span.jxButtonContent,.jxDialogControls .jxButton:hover span.jxButtonContent,.jxDialogControls .jxButton:active span.jxButtonContent,.jxDialogControls .jxButtonActive span.jxButtonContent,.jxDialogControls .jxButtonActive:hover span.jxButtonContent,.jxDialogControls .jxButtonActive:active span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton:hover span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton:active span.jxButtonContent,.jxDialogControls .jxButton,.jxDialogControls .jxButton:hover,.jxDialogControls .jxButton:active,.jxDialogControls .jxButtonActive,.jxDialogControls .jxButtonActive:hover,.jxDialogControls .jxButtonActive:active,.jxDialogControls .jxDisabled .jxButton,.jxDialogControls .jxDisabled .jxButton:hover,.jxDialogControls .jxDisabled .jxButton:active{padding:0;margin:0;border:none;background-color:transparent;background-image:none;}.jxDialogControls .jxButtonMenu span.jxButtonContent,.jxDialogControls .jxButtonFlyout span.jxButtonContent{background-image:none;}.jxDialogControls .jxButtonMenu span.jxButtonContent span,.jxDialogControls .jxButtonFlyout span.jxButtonContent span{padding-right:0;}.jxDialogControls .jxBarContainer{position:absolute;right:0;background-image:none;background-color:transparent;margin:0;padding:0;border:none;height:16px;}.jxDialogControls .jxBarScroller{left:auto;right:0;}.jxDialogControls ul.jxToolbar{float:right;}.jxDialogControls ul.jxToolbar,.jxDialogControls li.jxToolItem{background-image:none;background-color:transparent;margin:0;padding:0;border:none;}div.jxFileInputs{position:relative;}div.jxFileFake{position:absolute;top:0;left:0;z-index:1;}div.jxFileFake span{float:left;display:block;}div.jxFileFake .jxInputContainer{width:150px;}div.jxFileFake .jxInputText{width:135px;}div.jxFileFake .jxButtonContainer{margin-top:2px;float:left;}.jxInputFile{position:relative;text-align:right;-moz-opacity:0;filter:alpha(opacity:0);opacity:0;z-index:2;margin-top:-5px;height:35px;}.jxForm{display:block;position:relative;overflow:hidden;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxFieldset{display:block;position:relative;overflow:hidden;border:1px solid #ccc;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;-khtml-border-radius:10px;margin:10px;padding:5px;}.jxFieldsetLegend,.jxFieldset legend{position:relative;margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:26px;color:#000;}.jxInputContainer{display:block;position:relative;padding:0;margin:2px;border:none;}.jxInputLabel,.jxInputTag{display:-moz-inline-box;display:inline-block;margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:26px;color:#000;}.jxInputLabel{vertical-align:top;}.jxInputTag{vertical-align:bottom;}.jxInputText,.jxInputPassword,.jxInputTextarea{margin:0 4px;padding:4px;border:1px solid #bbb;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputSelect{margin:0 4px;padding:3px 4px 3px 1px;border:1px solid #bbb;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputText:focus,.jxInputPassword:focus,.jxInputTextarea:focus,.jxInputSelect:focus{border:1px solid #000;}.jxInputRadio,.jxInputCheck{margin:5px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputContainer .jxButtonContainer{padding:0;margin:0 4px;}.jxInputGroup{border:none;padding:0;margin:2px;}.jxInputGroup legend{font-size:0;line-height:0;padding:0;margin:0;border:none;}.jxInputGroup .jxFieldsetLegend{font-size:12px;}.jxInputGroup .jxInputLabel{width:auto;}.jxFieldError .jxInputText,.jxFieldError .jxInputPassword,.jxFieldError .jxInputTextarea,.jxFieldError .jxInputSelect{background-color:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;}.jxFieldSuccess .jxInputText,.jxFieldSuccess .jxInputPassword,.jxFieldSuccess .jxInputTextarea,.jxFieldSuccess .jxInputSelect{background-color:#E6EFC2;color:#264409;border-color:#C6D880;}.jxFieldError .jxInputText:focus,.jxFieldError .jxInputPassword:focus,.jxFieldError .jxInputTextarea:focus,.jxFieldError .jxInputSelect:focus{border-color:#8a1f11;}.jxFieldSuccess .jxInputText:focus,.jxFieldSuccess .jxInputPassword:focus,.jxFieldSuccess .jxInputTextarea:focus,.jxFieldSuccess .jxInputSelect:focus{border-color:#264409;}.jxFieldError .jxInputLabel,.jxFieldError .jxInputTag{color:#8a1f11;}.jxFieldSuccess .jxInputLabel,.jxFieldSuccess .jxInputTag{color:#264409;}.jxFormInline .jxInputContainer,form .jxFormInline .jxInputContainer,form .jxFieldset span.jxFormInline,form.jxForm span.jxFormInline{display:inline;}.jxFormInline .jxInputLabel,form .jxFormInline .jxInputLabel,form span.jxFormInline .jxInputLabel{display:inline;width:auto;}.jxFormInline .jxInputTag,form .jxFormInline .jxInputTag,form span.jxFormInline .jxInputTag{display:inline;}.jxFormInline .jxInputGroup,form .jxFormInline .jxInputGroup{padding-left:0;}.jxFormInline .jxInputGroup .jxFieldsetLegend,form .jxFormInline .jxInputGroup .jxFieldsetLegend{position:relative;left:auto;}.jxFormInline .jxInputGroup .jxInputLabel,form .jxFormInline .jxInputGroup .jxInputLabel{display:inline;width:auto;}.jxFormBlock .jxInputContainer,form .jxFormBlock .jxInputContainer,form .jxFieldset span.jxFormBlock,form.jxform span.jxFormBlock{display:block;}.jxFormBlock .jxInputLabel,form .jxFormBlock .jxInputLabel,form span.jxFormBlock .jxInputLabel{display:block;width:auto;margin-left:4px;}.jxFormBlock .jxInputContainerCheck .jxInputLabel,.jxFormBlock .jxInputContainerRadio .jxInputLabel,form .jxFormBlock .jxInputContainerCheck .jxInputLabel,form .jxFormBlock .jxInputContainerRadio .jxInputLabel,form span.jxFormBlock .jxInputContainerCheck .jxInputLabel,form span.jxFormBlock .jxInputContainerRadio .jxInputLabel{display:-moz-inline-box;display:inline-block;}.jxFormBlock .jxInputGroup,form .jxFormBlock .jxInputGroup{padding-left:0;}.jxFormBlock .jxInputGroup .jxFieldsetLegend,form .jxFormBlock .jxInputGroup .jxFieldsetLegend{position:relative;left:auto;}.jxFormBlock .jxInputGroup .jxInputLabel,form .jxFormBlock .jxInputGroup .jxInputLabel{display:-moz-inline-box;display:inline-block;width:auto;}.jxFormInlineblock .jxInputContainer,form .jxFormInlineblock .jxInputContainer,form .jxFieldset span.jxFormInlineblock,form.jxForm span.jxFormInlineblock{display:block;}.jxFormInlineblock .jxInputLabel,form .jxFormInlineblock .jxInputLabel,form span.jxFormInlineblock .jxInputLabel{display:-moz-inline-box;display:inline-block;width:200px;}.jxFormInlineblock .jxInputGroup,form .jxFormInlineblock .jxInputGroup{padding-left:200px;}.jxFormInlineblock .jxInputGroup .jxFieldsetLegend,form .jxFormInlineblock .jxInputGroup .jxFieldsetLegend{position:absolute;left:-200px;width:200px;}.jxFormInlineblock .jxInputGroup .jxInputLabel,form .jxFormInlineblock .jxInputGroup .jxInputLabel{display:-moz-inline-box;display:inline-block;width:auto;}.jxGridContainer{position:absolute;top:0;left:0;border-left:0 solid #d8d8d8;border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;overflow:hidden;}.jxGridTable{position:relative;table-layout:fixed;border-collapse:collapse;border-style:none;cursor:default;font-family:Arial,Verdana,sans-serif;font-size:11px;font-weight:normal;}.jxGridHeader{width:100%;}.jxGridTableBody{position:relative;table-layout:fixed;border-collapse:collapse;border-style:none;cursor:default;font-family:Arial,Verdana,sans-serif;font-size:11px;font-weight:normal;}.jxGridColHeadHide{height:0;line-height:0;font-size:0;background-color:#fff;white-space:normal;}.jxGridColHeadHide p,.jxGridRowHeadHide p{font-size:0;line-height:0;height:0;margin:0;padding:0;}.jxGridRowHeadHide{width:0;white-space:normal;}.jxGridCell{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;overflow:hidden;}.jxGridCellContent{position:relative;display:-moz-inline-box;display:inline-block;overflow:hidden;padding-left:3px;padding-right:3px;overflow:hidden;white-space:nowrap;cursor:cell;text-overflow:ellipsis;}.jxGridColHead{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;background-color:#f2f2f2;background-image:url('images/table_col.png');background-position:0 0;background-repeat:repeat-x;text-align:center;font-weight:bold;color:#333;cursor:default;padding-left:3px;padding-right:3px;white-space:nowrap;}.jxGridRowHead{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;background-color:#f2f2f2;background-image:url('images/table_row.png');background-position:0 0;background-repeat:repeat-y;text-align:center;font-weight:bold;color:#333;cursor:default;overflow:hidden;white-space:nowrap;}.jxGridRowAll{background-color:#fff;}.jxGridColumnHeaderSelected{background-color:#e1e1e1;background-position:0 -200px;}.jxGridRowHeaderSelected{background-color:#e1e1e1;background-position:-400px 0;}.jxGridColumnSelected{background-color:#f7f7f7;}.jxGridRowSelected td{background-color:#f7f7f7;}td.jxGridCellSelected{background-color:#ebebeb;}.jxGridColumnHeaderPrelight{background-color:#cee5ff;background-position:0 -300px;}.jxGridRowHeaderPrelight{background-color:#cee5ff;background-position:-600px 0;}.jxGridColumnPrelight{background-color:#e5f1ff;}.jxGridRowPrelight td{background-color:#e5f1ff;}td.jxGridCellPrelight{background-color:#cce3ff;}.jxColSortable{padding-right:20px;}.jxGridCell.jxColSortable{padding-right:0;}.jxColSortable span{background-image:url('images/emblems.png');padding-right:20px;background-repeat:no-repeat;background-position:right top;}.jxGridColumnSortedAsc span{background-position:right -160px;}.jxGridColumnSortedDesc span{background-position:right -16px;}.jxGridColumnResize,.jxGridRowResize{display:block;position:absolute;background-image:url(images/a_pixel.png);z-index:1;}.jxGridColumnResize{right:0;top:0;height:100%;width:4px;cursor:col-resize;}.jxGridRowResize{left:0;bottom:0;height:4px;width:100%;cursor:row-resize;}.jxListView .jxListItemContainer{position:relative;display:block;outline:none;overflow:hidden;border:none;margin:0 1px;padding:0;}.jxListItem{position:relative;display:block;cursor:pointer;outline:none;overflow:hidden;border:none;margin:0 1px;padding:0;z-index:0;font-family:Arial,Helvetica,sans-serif;font-size:11px;color:#000;text-decoration:none;line-height:20px;height:20px;}.jxListView .jxHover{margin:0;border-left:1px solid #CDDFFD;border-right:1px solid #CDDFFD;background-image:url(images/listitem.png);background-repeat:repeat-x;background-color:#CDE5FF;background-position:left -24px;}.jxListItem:focus{margin:0;border-left:1px dotted #75ADFF;border-right:1px dotted #75ADFF;background-image:url(images/listitem.png);background-repeat:repeat-x;background-position:left -72px;}.jxListView .jxPressed,.jxListView .jxSelected{margin:0;border-left:1px solid #8AABFB;border-right:1px solid #8AABFB;background-color:#CDE5FF;background-image:url(images/listitem.png);background-repeat:repeat-x;background-position:left -48px;}.jxMenuContainer .jxChrome{background-image:url(images/flyout_chrome.png);padding:5px 5px 7px 6px;}.jxButtonMenu span.jxMenuItemSpan{padding-right:16px;}.jxMenuContainer{position:absolute;top:0;left:-10000px;display:none;z-index:2000;padding:0;}ul.jxMenu{display:block;position:relative;list-style-type:none;padding:1px;margin:6px 6px 8px 7px;background-color:#fff;border:1px solid #999;}li.jxMenuItemContainer{display:block;position:relative;font-size:0;line-height:0;margin:0;padding:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}a.jxMenuItem{display:block;position:relative;overflow:hidden;text-decoration:none;cursor:pointer;outline:none;border:1px solid #fff;background-image:url(images/menuitem.png);background-repeat:no-repeat;background-position:left top;font-family:Arial,Helvetica,sans-serif;font-size:11px;text-decoration:none;margin:0;padding:0;color:#000;}a.jxMenuItemActive{background-position:left -98px;}a.jxMenuItem:focus{background-position:left -74px;}a.jxMenuItem:focus span.jxMenuItemContent{border-right:1px dotted #75ADFF;}a.jxMenuItemActive:focus{background-position:left -170px;}a.jxMenuItem:hover{background-color:#CDE5FF;background-position:left -26px;}a.jxMenuItem:hover span.jxMenuItemContent{border-right:1px solid #C5E0FF;}a.jxMenuItemActive:hover{background-position:left -122px;}a.jxMenuItemPressed,a.jxMenuItemPressed:hover{background-color:#CDE5FF;background-position:left -50px;}.jxDisabled a.jxMenuItem,.jxDisabled span.jxMenuItemContent span{cursor:default;}.jxDisabled a.jxMenuItem:focus,.jxDisabled a.jxMenuItemPressed,.jxDisabled a.jxMenuItemPressed:hover,.jxDisabled a.jxMenuItem:hover{background-color:#fff;background-position:left top;border-right:1px solid #fff;}.jxDisabled a.jxMenuItem:hover span.jxMenuItemContent{border-right:1px solid #fff;}span.jxMenuItemContent{display:block;position:relative;font-family:Arial,Helvetica,sans-serif;font-size:0;line-height:0;white-space:nowrap;padding:0 20px 0 0;margin:0;border-right:1px solid #fff;}.jxButtonSubMenu span.jxMenuItemContent,.jxButtonSubMenu:hover span.jxMenuItemContent{background-image:url(images/emblems.png);background-position:right -30px;background-repeat:no-repeat;}img.jxMenuItemIcon{position:absolute;top:2px;left:2px;width:16px;height:16px;background-position:left center;background-repeat:no-repeat;}span.jxMenuItemContent span{display:block;position:relative;cursor:pointer;margin:0;padding:2px 0 2px 22px;font-size:16px;line-height:16px;color:#000;}span.jxMenuItemContent span.jxMenuItemLabel{color:#000;font-size:11px;}.jxMenuItemToggle img.jxMenuItemIcon,.jxMenuItemToggleSet img.jxMenuItemIcon{background-image:url(images/emblems.png);background-position:2px 0;background-repeat:no-repeat;}.jxMenuItemToggle a.jxMenuItemActive img.jxMenuItemIcon{background-position:2px -48px;}.jxMenuItemToggleSet a.jxMenuItemActive img.jxMenuItemIcon{background-position:2px -64px;}ul.jxMenu span.jxMenuSeparator{display:block;font-size:10px;line-height:10px;background-image:url(images/toolbar_separator_v.png);background-repeat:repeat-x;background-position:left center;}.jxMessage{text-align:center;padding:10px;margin-top:10px;}.jxNoticeListContainer{border:none;padding:0;margin:0;font-size:0;line-height:0;z-index:500;}.jxNoticeList{position:relative;}.jxNoticeItemContainer{position:relative;overflow:hidden;}.jxNoticeItemContainer .jxChrome{background-image:url(images/flyout_chrome.png);padding:5px 5px 7px 6px;}.jxHasChrome .jxNoticeItem{margin:6px 6px 8px 7px;}.jxNoticeItem{position:relative;border:2px solid #ccc;margin:0;padding:0;background-color:#f8f8f8;background-image:url(images/notice.png);background-repeat:repeat-x;background-position:left bottom;}.jxNoticeIcon{position:absolute;top:0;left:0;margin:6px;width:16px;height:16px;background-image:url(images/icons.png);background-repeat:no-repeat;background-position:0 0;}.jxNotice{display:block;position:relative;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;color:#666;margin:0;border:none;padding:6px 26px 6px 10px;}.jxNoticeError .jxNoticeItem{background-color:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;background-image:url(images/notice_error.png);}.jxNoticeWarning .jxNoticeItem{background-color:#FFF6BF;color:#514721;border-color:#FFD324;background-image:url(images/notice_warning.png);}.jxNoticeSuccess .jxNoticeItem{background-color:#E6EFC2;color:#264409;border-color:#C6D880;background-image:url(images/notice_success.png);}.jxNoticeError .jxNotice{color:#8a1f11;padding-left:28px;}.jxNoticeWarning .jxNotice{color:#514721;padding-left:28px;}.jxNoticeSuccess .jxNotice{color:#264409;padding-left:28px;}.jxNoticeInfo .jxNotice{padding-left:28px;}.jxNoticeError .jxNoticeIcon{background-position:0 -32px;}.jxNoticeWarning .jxNoticeIcon{background-position:0 -16px;}.jxNoticeSuccess .jxNoticeIcon{background-position:0 -48px;}.jxNoticeInfo .jxNoticeIcon{background-position:0 -64px;}.jxNoticeClose{position:absolute;top:0;right:0;margin:6px;width:16px;height:16px;background-image:url(images/tab_close.png);background-position:0 0;background-repeat:no-repeat;}.jxPanel{display:block;position:relative;}.jxPanelContentContainer{overflow:hidden;background-color:#f0f0f0;}.jxPanelContent{position:relative;display:block;overflow:auto;background-color:#fff;margin:0;padding:0;}.jxPanelTitle{display:block;position:relative;background-image:url(images/panelbar.png);background-repeat:repeat-x;background-position:left top;height:22px;margin:0;padding:0;text-align:center;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxPanelBar{position:absolute;line-height:1px;width:100%;height:5px;cursor:row-resize;background-color:#f0f0f0;z-index:2;}.jxPanelIcon{position:absolute;left:2px;top:3px;width:16px;height:16px;border:none;padding:0;margin:0;}.jxPanelLabel{padding-left:25px;font-family:Arial,Helvetica,sans-serif;font-size:11px;font-weight:bold;line-height:21px;color:#000;white-space:nowrap;}.jxPanelControls{position:absolute;top:3px;right:2px;height:16px;width:80px;overflow:hidden;}.jxPanelControls img{background-image:url('images/panel_controls.png');background-repeat:no-repeat;border:0;margin:0;width:16px;height:16px;}.jxPanelClose img{background-position:0 -32px;}.jxPanelMenu img{background-position:0 -48px;}.jxPanelHelp img{background-position:0 -64px;}.jxPanelCollapse img{background-position:0 -16px;}.jxPanelMin .jxPanelCollapse img{background-position:0 0;}.jxPanelMax .jxPanelCollapse img{background-position:0 -16px;}.jxPanelMaximize img{background-position:0 0;}.jxPanelLoading img{border:0;margin:0;width:16px;height:16px;visibility:hidden;position:absolute;top:1px;left:2px;}.jxPanelControls .jxButtonContainer,.jxPanelControls span.jxButtonContent,.jxPanelControls .jxButton:hover span.jxButtonContent,.jxPanelControls .jxButton:active span.jxButtonContent,.jxPanelControls .jxButtonActive span.jxButtonContent,.jxPanelControls .jxButtonActive:hover span.jxButtonContent,.jxPanelControls .jxButtonActive:active span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton:hover span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton:active span.jxButtonContent,.jxPanelControls .jxButton,.jxPanelControls .jxButton:hover,.jxPanelControls .jxButton:active,.jxPanelControls .jxButtonActive,.jxPanelControls .jxButtonActive:hover,.jxPanelControls .jxButtonActive:active,.jxPanelControls .jxDisabled .jxButton,.jxPanelControls .jxDisabled .jxButton:hover,.jxPanelControls .jxDisabled .jxButton:active{padding:0;margin:0;border:none;background-color:transparent;background-image:none;}.jxPanelControls .jxButtonMenu span.jxButtonContent,.jxPanelControls .jxButtonFlyout span.jxButtonContent{background-image:none;}.jxPanelControls .jxButtonMenu span.jxButtonContent span,.jxPanelControls .jxButtonFlyout span.jxButtonContent span{padding-right:0;}.jxPanelControls div.jxBarTop{position:absolute;right:0;background-image:none;background-color:transparent;margin:0;padding:0;border:none;height:16px;}.jxPanelControls .jxBarScroller{left:auto;right:0;}.jxPanelControls ul.jxToolbar{float:right;}.jxPanelControls ul.jxToolbar,.jxPanelControls li.jxToolItem{background-image:none;background-color:transparent;margin:0;padding:0;border:none;}.jxProgressBar-container{width:100%;display:block;clear:both;}.jxProgressBar-message{color:black;}.jxProgressBar-container .jxProgressBar{width:100%;clear:both;border-top:none;}.jxProgressBar-container .jxProgressBar .jxProgressBar-outline{border:1px solid #360;position:absolute;top:0;left:0;z-index:10;}.jxProgressBar-container .jxProgressBar .jxProgressBar-fill{background-color:#9c6;position:absolute;top:1px;left:1px;z-index:20;}.jxProgressBar-container .jxProgressBar .jxProgressBar-text{color:#360;margin:0;padding:2px;position:absolute;top:1px;left:1px;width:auto;z-index:30;border:none;}.jxSliderContainer{width:100%;height:10px;border:1px solid black;}.jxSliderKnob{width:10px;height:10px;background-color:black;cursor:pointer;}.jxSplitterMask{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;background-image:url(images/a_pixel.png);z-index:1;}.jxSplitBarHorizontal{display:block;position:absolute;font-size:0;line-height:0;margin:0;padding:0;border:none;width:5px;height:100%;cursor:col-resize;background-color:#f0f0f0;z-index:2;}.jxSplitBarVertical{display:block;position:absolute;font-size:0;line-height:0;margin:0;padding:0;border:none;width:100%;height:5px;cursor:row-resize;background-color:#f0f0f0;z-index:2;}.jxSplitContainer{display:block;position:relative;margin:0;padding:0;border:none;overflow:hidden;}.jxSplitArea{display:block;position:absolute;margin:0;padding:0;border:none;z-index:0;}.jxSplitBarDrag{background-color:#eee;}.jxSnapHorizontalBefore{width:5px;height:5px;position:absolute;top:0;left:0;background-color:#aaa;}.jxSnapHorizontalAfter{width:5px;height:5px;position:absolute;top:0;left:0;background-color:#aaa;}.jxTabSetContainer{position:relative;display:-moz-inline-box;display:inline-block;overflow:hidden;width:200px;height:200px;margin:0;padding:0;background-color:#fff;}.jxTabSetContainer .jxToolbarContainer{z-index:auto;}.tabContent{display:none;position:relative;width:100%;height:100%;overflow:auto;}.tabContentActive{display:block;}span.jxTabContainer{display:block;position:relative;margin:0;padding:2px;border:none;}a.jxTab{display:-moz-inline-box;display:inline-block;position:relative;cursor:pointer;user-select:none;-moz-user-select:none;-khtml-user-select:none;margin:0;padding:0;border:none;background-repeat:no-repeat;text-decoration:none;outline:none;}span.jxTabContent{display:-moz-inline-box;display:inline-block;font-size:0;line-height:0;margin:0;padding:0;border:none;background-repeat:no-repeat;}img.jxTabIcon{display:-moz-inline-box;display:inline-block;position:relative;width:16px;height:16px;background-position:center center;background-repeat:no-repeat;}span.jxTabLabel{display:-moz-inline-box;display:inline-block;position:relative;cursor:pointer;margin:0;padding:0;color:#000;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:16px;}a.jxTabClose{display:block;position:absolute;cursor:pointer;outline:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;width:16px;height:16px;background-image:url(images/tab_close.png);background-position:0 0;background-repeat:no-repeat;}.jxDisabled a.jxTab,.jxDisabled span.jxTabContent span,.jxDisabled a.jxTabClose{cursor:default;}.jxBarTop a.jxTab,.jxBarTop span.jxTabContent{background-image:url(images/tab_top.png);}.jxBarBottom a.jxTab,.jxBarBottom span.jxTabContent{background-image:url(images/tab_bottom.png);}.jxBarTop a.jxTabClose,.jxBarBottom a.jxTabClose{top:5px;right:5px;}.jxBarTop .jxTabClose span.jxTabContent,.jxBarBottom .jxTabClose span.jxTabContent{padding-right:16px;}.jxBarTop a.jxTab,.jxBarBottom a.jxTab{padding-left:4px;background-position:left -24px;}.jxBarTop span.jxTabContent,.jxBarBottom span.jxTabContent{padding:4px 4px 4px 0;background-position:right -24px;}.jxBarTop a.jxTabActive,.jxBarBottom a.jxTabActive{background-position:left -72px;}.jxBarTop a.jxTabActive span.jxTabContent,.jxBarBottom a.jxTabActive span.jxTabContent{background-position:right -72px;}.jxBarTop a.jxTab:focus,.jxBarBottom a.jxTab:focus{background-position:left -96px;}.jxBarTop a.jxTab:focus span.jxTabContent,.jxBarBottom a.jxTab:focus span.jxTabContent{background-position:right -96px;}.jxBarTop a.jxTabActive:focus,.jxBarBottom a.jxTabActive:focus{background-position:left -144px;}.jxBarTop a.jxTabActive:focus span.jxTabContent,.jxBarBottom a.jxTabActive:focus span.jxTabContent{background-position:right -144px;}.jxBarTop a.jxTab:hover,.jxBarTop a.jxTabActive:hover,.jxBarBottom a.jxTab:hover,.jxBarBottom a.jxTabActive:hover{background-position:left -48px;}.jxBarTop a.jxTab:hover span.jxTabContent,.jxBarTop a.jxTabActive:hover span.jxTabContent,.jxBarBottom a.jxTab:hover span.jxTabContent,.jxBarBottom a.jxTabActive:hover span.jxTabContent{background-position:right -48px;}.jxBarTop a.jxTabPressed,.jxBarTop a.jxTabPressed:focus,.jxBarBottom a.jxTabPressed,.jxBarBottom a.jxTabPressed:focus{background-position:left -120px;}.jxBarTop a.jxTabPressed span.jxTabContent,.jxBarTop a.jxTabPressed:focus span.jxTabContent,.jxBarBottom a.jxTabPressed span.jxTabContent,.jxBarBottom a.jxTabPressed:focus span.jxTabContent{background-position:right -120px;}.jxBarTop .jxDisabled a.jxTab:focus,.jxBarTop .jxDisabled a.jxTab:active,.jxBarTop .jxDisabled a.jxTab:hover,.jxBarTop .jxDisabled a.jxTabPressed,.jxBarBottom .jxDisabled a.jxTab:focus,.jxBarBottom .jxDisabled a.jxTab:active,.jxBarBottom .jxDisabled a.jxTab:hover,.jxBarBottom .jxDisabled a.jxTabPressed{background-position:left -24px;}.jxBarTop .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarTop .jxDisabled a.jxTab:active span.jxTabContent,.jxBarTop .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarTop .jxDisabled a.jxTabPressed span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:active span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabPressed span.jxTabContent{background-position:right -24px;}.jxBarTop .jxDisabled a.jxTabActive:focus,.jxBarTop .jxDisabled a.jxTabActive:active,.jxBarTop .jxDisabled a.jxTabActive:hover,.jxBarBottom .jxDisabled a.jxTabActive:focus,.jxBarBottom .jxDisabled a.jxTabActive:active,.jxBarBottom .jxDisabled a.jxTabActive:hover{background-position:left -72px;}.jxBarTop .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarTop .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarTop .jxDisabled a.jxTabActive:hover span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:hover span.jxTabContent{background-position:right -72px;}.jxBarTop img.jxTabIcon,.jxBarBottom img.jxTabIcon{vertical-align:middle;}.jxBarTop span.jxTabLabel,.jxBarBottom span.jxTabLabel{vertical-align:middle;height:16px;padding:0 4px 0 4px;}.jxBarLeft a.jxTab,.jxBarLeft span.jxTabContent{background-image:url(images/tab_left.png);}.jxBarRight a.jxTab,.jxBarRight span.jxTabContent{background-image:url(images/tab_right.png);}.jxBarLeft a.jxTabClose,.jxBarRight a.jxTabClose{top:5px;left:5px;}.jxBarLeft .jxTabClose span.jxTabContent,.jxBarRight .jxTabClose span.jxTabContent{padding-top:16px;}.jxBarLeft a.jxTab,.jxBarRight a.jxTab{padding-top:4px;background-position:-24px top;}.jxBarLeft span.jxTabContent,.jxBarRight span.jxTabContent{padding:0 4px 4px 4px;background-position:-24px bottom;}.jxBarLeft a.jxTabActive,.jxBarRight a.jxTabActive{background-position:-72px top;}.jxBarLeft a.jxTabActive span.jxTabContent,.jxBarRight a.jxTabActive span.jxTabContent{background-position:-72px bottom;}.jxBarLeft a.jxTab:focus,.jxBarRight a.jxTab:focus{background-position:-96px top;}.jxBarLeft a.jxTab:focus span.jxTabContent,.jxBarRight a.jxTab:focus span.jxTabContent{background-position:-96px bottom;}.jxBarLeft a.jxTabActive:focus,.jxBarRight a.jxTabActive:focus{background-position:-144px top;}.jxBarLeft a.jxTabActive:focus span.jxTabContent,.jxBarRight a.jxTabActive:focus span.jxTabContent{background-position:-144px bottom;}.jxBarLeft a.jxTab:hover,.jxBarLeft a.jxTabActive:hover,.jxBarRight a.jxTab:hover,.jxBarRight a.jxTabActive:hover{background-position:-48px top;}.jxBarLeft a.jxTab:hover span.jxTabContent,.jxBarLeft a.jxTabActive:hover span.jxTabContent,.jxBarRight a.jxTab:hover span.jxTabContent,.jxBarRight a.jxTabActive:hover span.jxTabContent{background-position:-48px bottom;}.jxBarLeft a.jxTabPressed,.jxBarLeft a.jxTabPressed:focus,.jxBarRight a.jxTabPressed,.jxBarRight a.jxTabPressed:focus{background-position:-120px top;}.jxBarLeft a.jxTabPressed span.jxTabContent,.jxBarLeft a.jxTabPressed:focus span.jxTabContent,.jxBarRight a.jxTabPressed span.jxTabContent,.jxBarRight a.jxTabPressed:focus span.jxTabContent{background-position:-120px bottom;}.jxBarLeft .jxDisabled a.jxTab:focus,.jxBarLeft .jxDisabled a.jxTab:active,.jxBarLeft .jxDisabled a.jxTab:hover,.jxBarLeft .jxDisabled a.jxTabPressed,.jxBarRight .jxDisabled a.jxTab:focus,.jxBarRight .jxDisabled a.jxTab:active,.jxBarRight .jxDisabled a.jxTab:hover,.jxBarRight .jxDisabled a.jxTabPressed{background-position:-24px top;}.jxBarLeft .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarLeft .jxDisabled a.jxTab:active span.jxTabContent,.jxBarLeft .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabPressed span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:active span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarRight .jxDisabled a.jxTabPressed span.jxTabContent{background-position:-24px bottom;}.jxBarLeft .jxDisabled a.jxTabActive:focus,.jxBarLeft .jxDisabled a.jxTabActive:active,.jxBarLeft .jxDisabled a.jxTabActive:hover,.jxBarRight .jxDisabled a.jxTabActive:focus,.jxBarRight .jxDisabled a.jxTabActive:active,.jxBarRight .jxDisabled a.jxTabActive:hover{background-position:-72px top;}.jxBarLeft .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabActive:hover span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:hover span.jxTabContent{background-position:-72px bottom;}.jxBarLeft span.jxTabLabel,.jxBarRight span.jxTabLabel{padding:4px 0 4px 0;}.jxBarContainer{display:block;position:relative;z-index:1;overflow:hidden;margin:0;padding:0;border:0;background-color:#f0f0f0;}.jxBarTop,.jxBarBottom{width:100%;height:28px;background-image:url(images/toolbar.png);background-repeat:repeat-x;background-position:0 0;overflow:hidden;}.jxTabBox .jxTabBarTop{background-image:url(images/tabbar.png);background-position:0 bottom;}.jxTabBox .jxTabBarBottom{background-image:url(images/tabbar_bottom.png);background-position:0 top;}.jxBarLeft,.jxBarRight{width:auto;height:100%;background-image:url(images/toolbar.png);background-repeat:repeat-x;background-position:0 0;float:left;overflow:hidden;}.jxTabBox .jxTabBarLeft{background-image:url(images/tabbar_left.png);background-repeat:repeat-y;background-position:right 0;}.jxTabBox .jxTabBarRight{background-image:url(images/tabbar_right.png);background-repeat:repeat-y;background-position:left 0;}.jxBarTop .jxBarScroller,.jxBarBottom .jxBarScroller{position:absolute;width:10000%;overflow:hidden;}.jxBarTop .jxBarScrollLeft,.jxBarBottom .jxBarScrollLeft{position:absolute;top:0;left:0;}.jxBarTop .jxBarScrollRight,.jxBarBottom .jxBarScrollRight{position:absolute;top:0;right:0;}.jxBarTop .jxBarScrollLeft img.jxButtonIcon,.jxBarBottom .jxBarScrollLeft img.jxButtonIcon{background-image:url(images/emblems.png);background-position:0 -80px;}.jxBarTop .jxBarScrollRight img.jxButtonIcon,.jxBarBottom .jxBarScrollRight img.jxButtonIcon{background-image:url(images/emblems.png);background-position:0 -96px;}ul.jxToolbar,ul.jxTabBar{display:block;position:relative;float:left;list-style-type:none;margin:0;padding:0;border:none;}li.jxToolItem{display:block;position:relative;float:left;font-size:0;line-height:0;padding:0;margin:0;border:none;}li.jxToolItem span.jxBarSeparator{display:block;position:relative;float:left;font-size:0;line-height:0;border:0;margin:0;padding:4px;background-repeat:no-repeat;background-position:center center;}.jxBarTop li.jxToolItem span.jxBarSeparator,.jxBarBottom li.jxToolItem span.jxBarSeparator{width:8px;height:20px;background-image:url(images/toolbar_separator_h.png);}.jxBarLeft li.jxToolItem span.jxBarSeparator,.jxBarRight li.jxToolItem span.jxBarSeparator{width:20px;height:8px;background-image:url(images/toolbar_separator_v.png);}.jxBarLeft ul.jxToolbar,.jxBarLeft ul.jxTabBar,.jxBarLeft li.jxToolItem,.jxBarRight ul.jxToolbar,.jxBarRight ul.jxTabBar,.jxBarRight li.jxToolItem{clear:both;}.jxTooltip{width:auto;height:auto;background-color:black;color:white;padding:5px;z-index:65536;}.jxTree,.jxTreeRoot{position:relative;display:block;list-style:none;margin:0;padding:0;}.jxTreeNest{list-style:none;margin:0;padding:0;background-repeat:repeat-y;background-position:left top;}li.jxTreeContainer{position:relative;display:block;margin:0;padding:0;background-repeat:no-repeat;background-position:left top;white-space:nowrap;font-size:0;line-height:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxTree li.jxTreeContainer{margin-left:16px;}a.jxTreeItem{position:relative;display:block;cursor:pointer;outline:none;overflow:hidden;background-image:url(images/tree_hover.png);background-repeat:repeat-x;background-position:left top;border:none;margin:0 1px 0 17px;padding:0 0 0 20px;z-index:0;font-family:Arial,Helvetica,sans-serif;font-size:11px;color:#000;text-decoration:none;line-height:20px;height:20px;}a.jxTreeItem:focus{border-left:1px dotted #75ADFF;border-right:1px dotted #75ADFF;margin:0 0 0 16px;background-position:left -72px;}a.jxTreeItem:hover,li.jxTreeContainer a.jxHover{border-left:1px solid #CDDFFD;border-right:1px solid #CDDFFD;margin:0 0 0 16px;background-color:#CDE5FF;background-position:left -24px;}li.jxTreeContainer a.jxSelected,li.jxTreeContainer a.jxSelected:hover,li.jxTreeContainer a.jxPressed,li.jxTreeContainer a.jxPressed:hover{border-left:1px solid #8AABFB;border-right:1px solid #8AABFB;margin:0 0 0 16px;background-color:#CDE5FF;background-position:left -48px;}li.jxDisabled a.jxTreeItem{cursor:default;}li.jxDisabled a.jxTreeItem:focus,li.jxDisabled a.jxTreeItem:hover{background-position:left top;background-color:transparent;border:none;margin:0 1px 0 17px;}.jxTreeNest{background-image:url(images/tree_vert_line.png);}img.jxTreeImage,img.jxTreeIcon{position:absolute;display:inline;left:0;top:0;width:16px;height:20px;z-index:1;background-image:url(images/tree.png);background-repeat:no-repeat;border:0;margin:0;}img.jxTreeIcon{height:16px;top:2px;left:1px;}.jxTreeBranchOpen .jxTreeIcon,.jxTreeBranchLastOpen .jxTreeIcon{background-position:left -40px;}.jxTreeBranchOpen .jxTreeImage{background-position:left -100px;}.jxTreeBranchLastOpen .jxTreeImage{background-position:left -160px;}.jxTreeBranchClosed .jxTreeIcon,.jxTreeBranchLastClosed .jxTreeIcon{background-position:left -20px;}.jxTreeBranchClosed .jxTreeImage{background-position:left -80px;}.jxTreeBranchLastClosed .jxTreeImage{background-position:left -140px;}.jxTreeLeaf .jxTreeIcon,.jxTreeLeafLast .jxTreeIcon{background-position:left 0;}.jxTreeLeaf .jxTreeImage{background-position:left -60px;}.jxTreeLeafLast .jxTreeImage{background-position:left -120px;}a.jxTreeItem,img.jxTreeImage,img.jxTreeIcon,span.jxTreeLabel,.jxTreeItemContainer input{vertical-align:middle;}.jxFileUploadPanel{padding:5px;}.jxFileUploadPanel .jxInputContainer{width:300px;}.jxUploadQueue{width:100%;margin-top:10px;}.jxUploadQueue div{position:relative;width:95%;clear:both;border-top:1px solid black;padding:2px;}.jxUploadQueue div span{display:block;}.jxUploadQueue div span.jxUploadFileName{float:left;font-size:16px;}.jxUploadQueue div span.jxUploadFileDelete,.jxUploadQueue div span.jxUploadFileProgress,.jxUploadQueue div span.jxUploadFileComplete,.jxUploadQueue div span.jxUploadFileError{float:right;width:16px;height:16px;background-repeat:no-repeat;background-position:top left;cursor:pointer;}.jxUploadQueue div span.jxUploadFileDelete{background-image:url('images/delete.gif');}.jxUploadQueue div span.jxUploadFileProgress{background-image:url('images/loading.gif');}.jxUploadQueue div span.jxUploadFileComplete{background-image:url('images/green_tick.png');}.jxUploadQueue div span.jxUploadFileError{background-image:url('images/error.png');}.jxUploadFileErrorTip{padding:4px 4px 4px 20px;border:2px solid #ddd;background:url("images/error.png") no-repeat left top;color:black;width:100px;}
\ No newline at end of file

Modified: sandbox/jxlib-3.0/templates/mapserver/standard/themes/crispin/jxtheme.uncompressed.css
===================================================================
--- sandbox/jxlib-3.0/templates/mapserver/standard/themes/crispin/jxtheme.uncompressed.css	2009-11-24 20:05:41 UTC (rev 1987)
+++ sandbox/jxlib-3.0/templates/mapserver/standard/themes/crispin/jxtheme.uncompressed.css	2009-11-24 20:11:06 UTC (rev 1988)
@@ -984,7 +984,7 @@
     height: 35px;
 }/**
  * @project         Jx
- * @revision        $Id: form.css 570 2009-10-28 15:32:02Z fred.warnock $
+ * @revision        $Id: form.css 615 2009-11-19 22:01:38Z fred.warnock $
  * @author          Fred Warnock (fwarnock at dmsolutions.ca)
  * @copyright       (c) 2006 DM Solutions Group Inc.
  */
@@ -1142,45 +1142,45 @@
 
 /* Field Validation */
 
-.jxFieldInvalid .jxInputText,
-.jxFieldInvalid .jxInputPassword,
-.jxFieldInvalid .jxInputTextarea,
-.jxFieldInvalid .jxInputSelect {
+.jxFieldError .jxInputText,
+.jxFieldError .jxInputPassword,
+.jxFieldError .jxInputTextarea,
+.jxFieldError .jxInputSelect {
   background-color: #FBE3E4; 
   color: #8a1f11; 
   border-color: #FBC2C4;
 }
 
-.jxFieldValidated .jxInputText,
-.jxFieldValidated .jxInputPassword,
-.jxFieldValidated .jxInputTextarea,
-.jxFieldValidated .jxInputSelect {
+.jxFieldSuccess .jxInputText,
+.jxFieldSuccess .jxInputPassword,
+.jxFieldSuccess .jxInputTextarea,
+.jxFieldSuccess .jxInputSelect {
   background-color: #E6EFC2; 
   color: #264409; 
   border-color: #C6D880;
 }
 
-.jxFieldInvalid .jxInputText:focus,
-.jxFieldInvalid .jxInputPassword:focus,
-.jxFieldInvalid .jxInputTextarea:focus,
-.jxFieldInvalid .jxInputSelect:focus {
+.jxFieldError .jxInputText:focus,
+.jxFieldError .jxInputPassword:focus,
+.jxFieldError .jxInputTextarea:focus,
+.jxFieldError .jxInputSelect:focus {
   border-color: #8a1f11;
 }
 
-.jxFieldValidated .jxInputText:focus,
-.jxFieldValidated .jxInputPassword:focus,
-.jxFieldValidated .jxInputTextarea:focus,
-.jxFieldValidated .jxInputSelect:focus {
+.jxFieldSuccess .jxInputText:focus,
+.jxFieldSuccess .jxInputPassword:focus,
+.jxFieldSuccess .jxInputTextarea:focus,
+.jxFieldSuccess .jxInputSelect:focus {
   border-color: #264409;
 }
 
-.jxFieldInvalid .jxInputLabel,
-.jxFieldInvalid .jxInputTag {
+.jxFieldError .jxInputLabel,
+.jxFieldError .jxInputTag {
   color: #8a1f11; 
 }
 
-.jxFieldValidated .jxInputLabel,
-.jxFieldValidated .jxInputTag {
+.jxFieldSuccess .jxInputLabel,
+.jxFieldSuccess .jxInputTag {
   color: #264409; 
 }
 
@@ -1869,33 +1869,105 @@
     text-align: center;
     padding: 10px;
     margin-top: 10px;
-}.jxNotificationContainer {
-    border: 1px black solid;
-    padding: 2px;
+}/* For Reference
+   Success, notice and error boxes from Blueprint */
+
+/* 
+.error      { background: #FBE3E4; color: #8a1f11; border-color: #FBC2C4; }
+.notice     { background: #FFF6BF; color: #514721; border-color: #FFD324; }
+.success    { background: #E6EFC2; color: #264409; border-color: #C6D880; }
+.error a    { color: #8a1f11; }
+.notice a   { color: #514721; }
+.success a  { color: #264409; }
+*/
+
+
+.jxNoticeListContainer {
+  border: none;
+  padding: 0px;
+  margin: 0px;
+  font-size: 0px;
+  line-height: 0px;
+  z-index: 500;
 }
 
-.jxNotificationMinimize {
-    width: 100%;
-    height: 10px;
-    margin: 2px;
-    background-color: blue;
-    cursor: pointer;
-    display: block;
+.jxNoticeList {
+    position: relative;
 }
 
-.jxNotice {
-    margin: 5 auto;
-    border: 1px solid black;
+.jxNoticeItemContainer {
     position: relative;
-    display: block;
+    overflow: hidden;
 }
 
+.jxNoticeItemContainer .jxChrome {
+  background-image: url(images/flyout_chrome.png);
+  padding: 5px 5px 7px 6px;
+}
+
+.jxHasChrome .jxNoticeItem  {
+  margin: 6px 6px 8px 7px;
+}
+
+.jxNoticeItem {
+    position: relative;
+    border: 2px solid #ccc;
+    margin: 0px;
+    padding: 0px;
+    background-color: #f8f8f8;
+    background-image: url(images/notice.png);
+    background-repeat: repeat-x;
+    background-position: left bottom;
+}
+
+.jxNoticeIcon {
+  position: absolute;
+  top: 0px;
+  left: 0px;
+  margin: 6px;
+  width: 16px;
+  height: 16px;
+  background-image: url(images/icons.png);
+  background-repeat: no-repeat;
+  background-position: 0px 0px;
+}
+
+.jxNotice {
+    display: block;
+    position: relative;
+    font-family: Arial, Helvetica, sans-serif;
+    font-size: 12px;
+    line-height: 18px;
+    color: #666;
+    margin: 0px;
+    border: none;
+    padding: 6px 26px 6px 10px; 
+}                          
+
+.jxNoticeError .jxNoticeItem {   background-color: #FBE3E4; color: #8a1f11; border-color: #FBC2C4; background-image: url(images/notice_error.png);}
+.jxNoticeWarning .jxNoticeItem { background-color: #FFF6BF; color: #514721; border-color: #FFD324; background-image: url(images/notice_warning.png);}
+.jxNoticeSuccess .jxNoticeItem { background-color: #E6EFC2; color: #264409; border-color: #C6D880; background-image: url(images/notice_success.png);}
+
+.jxNoticeError .jxNotice {   color: #8a1f11; padding-left: 28px; }
+.jxNoticeWarning .jxNotice { color: #514721; padding-left: 28px; }
+.jxNoticeSuccess .jxNotice { color: #264409; padding-left: 28px; }
+.jxNoticeInfo .jxNotice { padding-left: 28px; }
+
+.jxNoticeError .jxNoticeIcon {   background-position: 0px -32px; }
+.jxNoticeWarning .jxNoticeIcon { background-position: 0px -16px; }
+.jxNoticeSuccess .jxNoticeIcon { background-position: 0px -48px; }            
+.jxNoticeInfo .jxNoticeIcon {    background-position: 0px -64px; }
+
 .jxNoticeClose {
-    float: right;
-    width: 15px;
-    height: 15px;
-    background-color: black;
-    cursor: pointer;
+    position: absolute;
+    top: 0px;
+    right: 0px;
+    margin: 6px;
+    width: 16px;
+    height: 16px;
+    background-image: url(images/tab_close.png);
+    background-position: 0px 0px;
+    background-repeat: no-repeat;
 }/**
  * @project         Jx
  * @revision        $Id: panel.css 302 2009-04-02 18:42:56Z fred.warnock $
@@ -2285,7 +2357,7 @@
   background-color: #aaa;
 }/**
  * @project         Jx
- * @revision        $Id: tab.css 599 2009-11-10 16:06:38Z fred.warnock $
+ * @revision        $Id: tab.css 615 2009-11-19 22:01:38Z fred.warnock $
  * @author          Fred Warnock (fwarnock at dmsolutions.ca)
  * @copyright       (c) 2006 DM Solutions Group Inc.
  */
@@ -2420,12 +2492,11 @@
   user-select: none;
   -moz-user-select: none;
   -khtml-user-select: none;
-}
-
-a.jxTabClose img {
   width: 16px;
   height: 16px;
-  background-image: url(images/tab_close.png);  
+  background-image: url(images/tab_close.png);
+  background-position: 0px 0px;
+  background-repeat: no-repeat;
 }
 
 .jxDisabled a.jxTab,

Modified: sandbox/jxlib-3.0/templates/mapserver/standard/themes/delicious/jxtheme.css
===================================================================
--- sandbox/jxlib-3.0/templates/mapserver/standard/themes/delicious/jxtheme.css	2009-11-24 20:05:41 UTC (rev 1987)
+++ sandbox/jxlib-3.0/templates/mapserver/standard/themes/delicious/jxtheme.css	2009-11-24 20:11:06 UTC (rev 1988)
@@ -21,4 +21,4 @@
  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  * DEALINGS IN THE SOFTWARE.
- */body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';}.jxButtonContainer{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:2px;border:none;}.jxButton{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:0 0 0 4px;border:none;background-image:url(images/button.png);background-position:left -24px;background-repeat:no-repeat;text-decoration:none;outline:none;}a.jxButton{cursor:pointer;user-select:none;-moz-user-select:none;-khtml-user-select:none;}ul.jxToolbar .jxButton{background-position:left top;}span.jxButtonContent{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:4px 4px 4px 0;border:none;background-image:url(images/button.png);background-position:right -24px;background-repeat:no-repeat;}ul.jxToolbar span.jxButtonContent{background-position:right top;}ul.jxToolbar .jxButtonActive,.jxButtonActive{background-position:left -72px;}ul.jxToolbar .jxButtonActive span.jxButtonContent,.jxButtonActive span.jxButtonContent{background-position:right -72px;}ul.jxToolbar .jxButton:focus,.jxButton:focus{background-position:left -96px;}ul.jxToolbar .jxButton:focus span.jxButtonContent,.jxButton:focus span.jxButtonContent{background-position:right -96px;}ul.jxToolbar .jxButtonActive:focus,.jxButtonActive:focus{background-position:left -144px;}ul.jxToolbar .jxButtonActive:focus span.jxButtonContent,.jxButtonActive:focus span.jxButtonContent{background-position:right -144px;}ul.jxToolbar .jxButton:hover,ul.jxToolbar .jxButtonActive:hover,.jxButton:hover,.jxButtonActive:hover{background-position:left -48px;}ul.jxToolbar .jxButton:hover span.jxButtonContent,ul.jxToolbar .jxButtonActive:hover span.jxButtonContent,.jxButton:hover span.jxButtonContent,.jxButtonActive:hover span.jxButtonContent{background-position:right -48px;}ul.jxToolbar .jxButtonPressed,ul.jxToolbar .jxButtonPressed:focus,.jxButtonPressed,.jxButtonPressed:focus{background-position:left -120px;}ul.jxToolbar .jxButtonPressed span.jxButtonContent,ul.jxToolbar .jxButtonPressed:focus span.jxButtonContent,.jxButtonPressed span.jxButtonContent,.jxButtonPressed:focus span.jxButtonContent{background-position:right -120px;}.jxDisabled .jxButton,.jxDisabled span.jxButtonContent span{cursor:default;}ul.jxToolbar .jxDisabled .jxButton:focus,ul.jxToolbar .jxDisabled .jxButton:active,ul.jxToolbar .jxDisabled .jxButton:hover,ul.jxToolbar .jxDisabled .jxButtonPressed{background-position:left top;}.jxDisabled .jxButton:focus,.jxDisabled .jxButton:active,.jxDisabled .jxButton:hover,.jxDisabled .jxButtonPressed{background-position:left -24px;}ul.jxToolbar .jxDisabled .jxButton:focus span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButton:active span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButton:hover span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonPressed span.jxButtonContent{background-position:right top;}.jxDisabled .jxButton:focus span.jxButtonContent,.jxDisabled .jxButton:active span.jxButtonContent,.jxDisabled .jxButton:hover span.jxButtonContent,.jxDisabled .jxButtonPressed span.jxButtonContent{background-position:right -24px;}ul.jxToolbar .jxDisabled .jxButtonActive:focus,ul.jxToolbar .jxDisabled .jxButtonActive:active,ul.jxToolbar .jxDisabled .jxButtonActive:hover,.jxDisabled .jxButtonActive:focus,.jxDisabled .jxButtonActive:active,.jxDisabled .jxButtonActive:hover{background-position:left -72px;}ul.jxToolbar .jxDisabled .jxButtonActive:focus span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonActive:active span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonActive:hover span.jxButtonContent,.jxDisabled .jxButtonActive:focus span.jxButtonContent,.jxDisabled .jxButtonActive:active span.jxButtonContent,.jxDisabled .jxButtonActive:hover span.jxButtonContent{background-position:right -72px;}img.jxButtonIcon{display:-moz-inline-box;display:inline-block;position:relative;vertical-align:middle;width:16px;height:16px;background-position:center center;background-repeat:no-repeat;}span.jxButtonContent span{display:-moz-inline-box;display:inline-block;position:relative;vertical-align:middle;cursor:pointer;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:16px;height:16px;white-space:nowrap;}span.jxButtonContent span.jxButtonLabel{margin:0;padding:0 4px 0 4px;color:#000;font-size:11px;}.jxDiscloser span.jxButtonContent{padding-right:0;}.jxDiscloser span.jxButtonContent span{padding-right:16px;background-image:url(images/emblems.png);background-position:right -16px;background-repeat:no-repeat;}a.jxButtonDisclose{position:absolute;display:-moz-inline-box;display:inline-block;padding:4px 0;font-size:0;line-height:0;right:2px;top:2px;background-image:url(images/button_multi_disclose.png);background-position:right 0;background-repeat:no-repeat;outline:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;}a.jxButtonDisclose img{width:16px;height:16px;margin:0;padding:0;border:0;background-image:url(images/emblems.png);background-position:right -16px;background-repeat:no-repeat;}a.jxButtonDisclose:focus,a.jxButtonDisclose:active{background-position:right -96px;}a.jxButtonDisclose:hover{background-position:right -48px;}a.jxButtonDisclosePressed{background-position:right -120px;}.jxDisabled a.jxButtonDisclose,.jxDisabled a.jxButtonDisclose:focus,.jxDisabled a.jxButtonDisclose:active,.jxDisabled a.jxButtonDisclose:hover,.jxDisabled a.jxButtonDisclosePressed{cursor:default;background-position:right 0;}ul.jxToolbar .jxButtonHover{background-position:left -24px!important;}ul.jxToolbar .jxButtonHover span.jxButtonContent{background-position:right -24px!important;}.jxFlyout .jxChrome{background-image:url(images/flyout_chrome.png);padding:5px 5px 7px 6px;}.jxFlyout{position:absolute;display:block;z-index:100;margin:0;padding:0;}.jxFlyoutContent{position:relative;display:block;overflow:auto;margin:6px 6px 8px 7px;background-color:#fff;border:1px solid #999;}.jxButtonMulti,.jxButtonMulti span.jxButtonContent{background-image:url(images/button_multi.png);}.jxButtonEditCombo,.jxButtonEditCombo span.jxButtonContent{background-image:url(images/button_combo.png);}.jxButtonMulti span.jxButtonContent span{padding-right:21px;}.jxButtonEditCombo span.jxButtonContent span{font-size:0;}.jxButtonComboDefault span.jxButtonContent span,.jxButtonComboDefault input{font-style:italic;color:#999;}.jxButtonEditCombo input{float:left;line-height:16px;height:16px;padding:0 4px;margin:0;border:none;font-size:11px;font-family:Arial,Helvetica,sans-serif;background-color:transparent;}.jxChrome{position:absolute;display:block;font-size:0;line-height:0;z-index:-1;width:100%;height:100%;top:0;left:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxChromeDrag{opacity:.5;-ms-filter:"Alpha(opacity=50)";}.jxChromeTL{position:absolute;overflow:hidden;left:0;top:0;width:50%;height:50%;}.jxChromeTR{position:absolute;overflow:hidden;left:50%;top:0;width:50%;height:50%;}.jxChromeBL{position:absolute;overflow:hidden;left:0;top:50%;width:50%;height:50%;}.jxChromeBR{position:absolute;overflow:hidden;left:50%;top:50%;width:50%;height:50%;}.jxChromeTL img{position:absolute;top:0;left:0;width:1000px;height:600px;}.jxChromeTR img{position:absolute;top:0;right:0;width:1000px;height:600px;}.jxChromeBL img{position:absolute;bottom:0;left:0;width:1000px;height:600px;}.jxChromeBR img{position:absolute;bottom:0;right:0;width:1000px;height:600px;}.jxColorBar{position:relative;overflow:hidden;}table.jxColorGrid{position:relative;border-collapse:collapse;empty-cells:show;clear:both;padding:0;margin:0;}.jxColorGrid tr{padding:0;margin:0;}.jxColorGrid td{border:1px solid #000;padding:0;margin:0;}.jxColorGrid td.emptyCell{border:0 solid #000;}.jxColorGrid td.emptyCell span{display:block;width:7px;height:7px;line-height:0;font-size:0;border:0 solid #000;padding:1px;margin:0;}.jxColorGrid a.colorSwatch{display:block;width:7px;height:7px;line-height:0;font-size:0;border:0 solid #000;margin:0;padding:1px;}.jxColorGrid a.borderWhite:hover{border:1px solid #fff;padding:0;}.jxColorGrid a.borderBlack:hover{border:1px solid #000;padding:0;}input.jxHexInput{width:55px;vertical-align:middle;}input.jxAlphaInput{width:30px;vertical-align:middle;}div.jxColorPreview{float:left;position:relative;width:20px;height:20px;border:1px solid #000;margin:2px;vertical-align:middle;background-image:url('images/grid.png');overflow:hidden;}.jxButtonFlyout span.jxButtonContent span.jxButtonSwatch{display:block;float:left;width:14px;height:14px;border:1px solid #000;background-image:url('images/grid.png');background-position:0 0;background-repeat:repeat;padding-right:0!important;}.jxButtonFlyout span.jxButtonContent span.jxButtonSwatch span{display:block;width:14px;height:14px;position:absolute;padding-right:0;background:none;}div.jxColorPreview img{position:absolute;z-index:0;}div.jxColorPreview div{width:20px;height:10px;position:absolute;display:block;left:0;z-index:1;font-size:10px;line-height:0;}div.jxColorPreview div.jxColorSelected{top:0;}div.jxColorPreview div.jxColorHover{bottom:0;}label.jxColorLabel,label.jxAlphaLabel{width:auto;font-family:Arial,sans-serif;font-size:11px;line-height:24px;padding:2px;vertical-align:middle;}a.jxColorClose{position:absolute;top:0;right:0;width:16px;height:16px;}a.jxColorClose img{width:16px;height:16px;}.jxClearer{display:block;position:relative;float:none;clear:both;font-size:0;line-height:0;width:0;height:0;margin:0;padding:0;}.jxDisabled{opacity:.4;-ms-filter:"Alpha(opacity=40)";}.jxDisabled *{-ms-filter:"Alpha(opacity=40)";}iframe.jxIframeShim{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;-ms-filter:"Alpha(opacity=0)";z-index:-1;}@CHARSET "ISO-8859-1";.jxConfirmQuestion{text-align:center;padding:10px;margin-top:10px;}.jxDialog .jxChrome{background-image:url(images/dialog_chrome.png);}.jxDialog{display:block;z-index:1000;overflow:hidden;}.jxDialogContentContainer{z-index:1;margin:0 11px 13px 12px;border:1px solid #b7b7b7;background-color:#f0f0f0;}.jxDialogModal{position:absolute;display:block;top:0;left:0;width:100%;height:100%;background-color:#000;opacity:.2;-ms-filter:"Alpha(opacity=20)";}.jxDialogContent{display:block;position:relative;overflow:auto;padding:0;z-index:1;}.jxDialogTitle{display:block;position:relative;background-image:url(images/a_pixel.png);text-align:center;height:24px;line-height:24px;z-index:1;margin:6px 6px 0 7px;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxDialogMin .jxDialogTitle{margin-bottom:8px;}.jxDialogMoveable,.jxDialogMoveable .jxDialogLabel{cursor:move;}.jxDialogIcon{position:absolute;left:2px;top:3px;width:16px;height:16px;border:none;padding:0;margin:0;}.jxDialogLabel{font-family:Arial,Helvetica,sans-serif;font-size:11px;font-weight:bold;line-height:21px;color:#000;white-space:nowrap;cursor:default;}.jxDialogResize{position:absolute;bottom:7px;right:6px;width:16px;height:16px;z-index:2;border:0;cursor:se-resize;background-image:url(images/dialog_resize.png);}.jxDialogControls{position:absolute;top:3px;right:2px;height:16px;width:80px;}.jxDialogControls img{background-image:url('images/panel_controls.png');background-repeat:no-repeat;border:0;margin:0;width:16px;height:16px;}.jxDialogClose img{background-position:0 -32px;}.jxDialogMenu img{background-position:0 -48px;}.jxDialogHelp img{background-position:0 -64px;}.jxDialogCollapse img{background-position:0 -16px;}.jxDialogMin .jxDialogCollapse img{background-position:0 0;}.jxDialogMax .jxDialogCollapse img{background-position:0 -16px;}.jxDialogLoading img{border:0;margin:0;width:16px;height:16px;visibility:hidden;position:absolute;top:1px;left:2px;}.jxDialogControls .jxButtonContainer,.jxDialogControls span.jxButtonContent,.jxDialogControls .jxButton:hover span.jxButtonContent,.jxDialogControls .jxButton:active span.jxButtonContent,.jxDialogControls .jxButtonActive span.jxButtonContent,.jxDialogControls .jxButtonActive:hover span.jxButtonContent,.jxDialogControls .jxButtonActive:active span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton:hover span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton:active span.jxButtonContent,.jxDialogControls .jxButton,.jxDialogControls .jxButton:hover,.jxDialogControls .jxButton:active,.jxDialogControls .jxButtonActive,.jxDialogControls .jxButtonActive:hover,.jxDialogControls .jxButtonActive:active,.jxDialogControls .jxDisabled .jxButton,.jxDialogControls .jxDisabled .jxButton:hover,.jxDialogControls .jxDisabled .jxButton:active{padding:0;margin:0;border:none;background-color:transparent;background-image:none;}.jxDialogControls .jxButtonMenu span.jxButtonContent,.jxDialogControls .jxButtonFlyout span.jxButtonContent{background-image:none;}.jxDialogControls .jxButtonMenu span.jxButtonContent span,.jxDialogControls .jxButtonFlyout span.jxButtonContent span{padding-right:0;}.jxDialogControls .jxBarContainer{position:absolute;right:0;background-image:none;background-color:transparent;margin:0;padding:0;border:none;height:16px;}.jxDialogControls .jxBarScroller{left:auto;right:0;}.jxDialogControls ul.jxToolbar{float:right;}.jxDialogControls ul.jxToolbar,.jxDialogControls li.jxToolItem{background-image:none;background-color:transparent;margin:0;padding:0;border:none;}div.jxFileInputs{position:relative;}div.jxFileFake{position:absolute;top:0;left:0;z-index:1;}div.jxFileFake span{float:left;display:block;}div.jxFileFake .jxInputContainer{width:150px;}div.jxFileFake .jxInputText{width:135px;}div.jxFileFake .jxButtonContainer{margin-top:6px;float:left;}.jxInputFile{position:relative;text-align:right;-moz-opacity:0;filter:alpha(opacity:0);opacity:0;z-index:2;margin-top:3px;height:35px;width:100%;}.jxForm{display:block;position:relative;overflow:hidden;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxFieldset{display:block;position:relative;overflow:hidden;border:1px solid #ccc;margin:10px;padding:5px;}.jxFieldsetLegend,.jxFieldset legend{position:relative;margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:26px;color:#000;}.jxInputContainer{display:block;position:relative;padding:0;margin:2px;border:none;}.jxInputLabel,.jxInputTag{display:-moz-inline-box;display:inline-block;margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:26px;color:#000;}.jxInputLabel{vertical-align:top;}.jxInputTag{vertical-align:bottom;}.jxInputText,.jxInputPassword,.jxInputTextarea{margin:0 4px;padding:4px;border:1px solid #bbb;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputSelect{margin:0 4px;padding:3px 4px 3px 1px;border:1px solid #bbb;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputText:focus,.jxInputPassword:focus,.jxInputTextarea:focus,.jxInputSelect:focus{border:1px solid #000;}.jxInputRadio,.jxInputCheck{margin:5px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputContainer .jxButtonContainer{padding:0;margin:0 4px;}.jxInputGroup{border:none;padding:0;margin:2px;}.jxInputGroup legend{font-size:0;line-height:0;padding:0;margin:0;border:none;}.jxInputGroup .jxFieldsetLegend{font-size:12px;}.jxInputGroup .jxInputLabel{width:auto;}.jxFieldInvalid .jxInputText,.jxFieldInvalid .jxInputPassword,.jxFieldInvalid .jxInputTextarea,.jxFieldInvalid .jxInputSelect{background-color:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;}.jxFieldValidated .jxInputText,.jxFieldValidated .jxInputPassword,.jxFieldValidated .jxInputTextarea,.jxFieldValidated .jxInputSelect{background-color:#E6EFC2;color:#264409;border-color:#C6D880;}.jxFieldInvalid .jxInputText:focus,.jxFieldInvalid .jxInputPassword:focus,.jxFieldInvalid .jxInputTextarea:focus,.jxFieldInvalid .jxInputSelect:focus{border-color:#8a1f11;}.jxFieldValidated .jxInputText:focus,.jxFieldValidated .jxInputPassword:focus,.jxFieldValidated .jxInputTextarea:focus,.jxFieldValidated .jxInputSelect:focus{border-color:#264409;}.jxFieldInvalid .jxInputLabel,.jxFieldInvalid .jxInputTag{color:#8a1f11;}.jxFieldValidated .jxInputLabel,.jxFieldValidated .jxInputTag{color:#264409;}.jxFormInline .jxInputContainer,form .jxFormInline .jxInputContainer,form .jxFieldset span.jxFormInline,form.jxForm span.jxFormInline{display:inline;}.jxFormInline .jxInputLabel,form .jxFormInline .jxInputLabel,form span.jxFormInline .jxInputLabel{display:inline;width:auto;}.jxFormInline .jxInputTag,form .jxFormInline .jxInputTag,form span.jxFormInline .jxInputTag{display:inline;}.jxFormInline .jxInputGroup,form .jxFormInline .jxInputGroup{padding-left:0;}.jxFormInline .jxInputGroup .jxFieldsetLegend,form .jxFormInline .jxInputGroup .jxFieldsetLegend{position:relative;left:auto;}.jxFormInline .jxInputGroup .jxInputLabel,form .jxFormInline .jxInputGroup .jxInputLabel{display:inline;width:auto;}.jxFormBlock .jxInputContainer,form .jxFormBlock .jxInputContainer,form .jxFieldset span.jxFormBlock,form.jxform span.jxFormBlock{display:block;}.jxFormBlock .jxInputLabel,form .jxFormBlock .jxInputLabel,form span.jxFormBlock .jxInputLabel{display:block;width:auto;margin-left:4px;}.jxFormBlock .jxInputContainerCheck .jxInputLabel,.jxFormBlock .jxInputContainerRadio .jxInputLabel,form .jxFormBlock .jxInputContainerCheck .jxInputLabel,form .jxFormBlock .jxInputContainerRadio .jxInputLabel,form span.jxFormBlock .jxInputContainerCheck .jxInputLabel,form span.jxFormBlock .jxInputContainerRadio .jxInputLabel{display:-moz-inline-box;display:inline-block;}.jxFormBlock .jxInputGroup,form .jxFormBlock .jxInputGroup{padding-left:0;}.jxFormBlock .jxInputGroup .jxFieldsetLegend,form .jxFormBlock .jxInputGroup .jxFieldsetLegend{position:relative;left:auto;}.jxFormBlock .jxInputGroup .jxInputLabel,form .jxFormBlock .jxInputGroup .jxInputLabel{display:-moz-inline-box;display:inline-block;width:auto;}.jxFormInlineblock .jxInputContainer,form .jxFormInlineblock .jxInputContainer,form .jxFieldset span.jxFormInlineblock,form.jxForm span.jxFormInlineblock{display:block;}.jxFormInlineblock .jxInputLabel,form .jxFormInlineblock .jxInputLabel,form span.jxFormInlineblock .jxInputLabel{display:-moz-inline-box;display:inline-block;width:200px;}.jxFormInlineblock .jxInputGroup,form .jxFormInlineblock .jxInputGroup{padding-left:200px;}.jxFormInlineblock .jxInputGroup .jxFieldsetLegend,form .jxFormInlineblock .jxInputGroup .jxFieldsetLegend{position:absolute;left:-200px;width:200px;}.jxFormInlineblock .jxInputGroup .jxInputLabel,form .jxFormInlineblock .jxInputGroup .jxInputLabel{display:-moz-inline-box;display:inline-block;width:auto;}.jxGridContainer{position:absolute;top:0;left:0;border-left:0 solid #d8d8d8;border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;overflow:hidden;}.jxGridTable{position:relative;table-layout:fixed;border-collapse:collapse;border-style:none;cursor:default;font-family:Arial,Verdana,sans-serif;font-size:11px;font-weight:normal;}.jxGridHeader{width:100%;}.jxGridTableBody{position:relative;table-layout:fixed;border-collapse:collapse;border-style:none;cursor:default;font-family:Arial,Verdana,sans-serif;font-size:11px;font-weight:normal;}.jxGridColHeadHide{height:0;line-height:0;font-size:0;background-color:#fff;white-space:normal;}.jxGridColHeadHide p,.jxGridRowHeadHide p{font-size:0;line-height:0;height:0;margin:0;padding:0;}.jxGridRowHeadHide{width:0;white-space:normal;}.jxGridCell{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;overflow:hidden;}.jxGridCellContent{position:relative;display:-moz-inline-box;display:inline-block;overflow:hidden;padding-left:3px;padding-right:3px;overflow:hidden;white-space:nowrap;cursor:cell;text-overflow:ellipsis;}.jxGridColHead{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;background-color:#f2f2f2;background-image:url('images/table_col.png');background-position:0 0;background-repeat:repeat-x;text-align:center;font-weight:bold;color:#333;cursor:default;padding-left:3px;padding-right:3px;white-space:nowrap;}.jxGridRowHead{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;background-color:#f2f2f2;background-image:url('images/table_row.png');background-position:0 0;background-repeat:repeat-y;text-align:center;font-weight:bold;color:#333;cursor:default;overflow:hidden;white-space:nowrap;}.jxGridRowAll{background-color:#fff;}.jxGridColumnHeaderSelected{background-color:#e1e1e1;background-position:0 -200px;}.jxGridRowHeaderSelected{background-color:#e1e1e1;background-position:-400px 0;}.jxGridColumnSelected{background-color:#f7f7f7;}.jxGridRowSelected td{background-color:#f7f7f7;}td.jxGridCellSelected{background-color:#ebebeb;}.jxGridColumnHeaderPrelight{background-color:#cee5ff;background-position:0 -300px;}.jxGridRowHeaderPrelight{background-color:#cee5ff;background-position:-600px 0;}.jxGridColumnPrelight{background-color:#e5f1ff;}.jxGridRowPrelight td{background-color:#e5f1ff;}td.jxGridCellPrelight{background-color:#cce3ff;}.jxColSortable{padding-right:20px;}.jxGridCell.jxColSortable{padding-right:0;}.jxColSortable span{background-image:url('images/emblems.png');padding-right:20px;background-repeat:no-repeat;background-position:right top;}.jxGridColumnSortedAsc span{background-position:right -160px;}.jxGridColumnSortedDesc span{background-position:right -16px;}.jxGridColumnResize,.jxGridRowResize{display:block;position:absolute;background-image:url(images/a_pixel.png);z-index:1;}.jxGridColumnResize{right:0;top:0;height:100%;width:4px;cursor:col-resize;}.jxGridRowResize{left:0;bottom:0;height:4px;width:100%;cursor:row-resize;}.jxListView .jxListItemContainer{position:relative;display:block;outline:none;overflow:hidden;border:none;margin:0 1px;padding:0;}.jxListItem{position:relative;display:block;cursor:pointer;outline:none;overflow:hidden;border:none;margin:0 1px;padding:0;z-index:0;font-family:Arial,Helvetica,sans-serif;font-size:11px;color:#000;text-decoration:none;line-height:20px;height:20px;}.jxListView .jxHover{margin:0;border-left:1px solid #CDDFFD;border-right:1px solid #CDDFFD;background-image:url(images/listitem.png);background-repeat:repeat-x;background-color:#CDE5FF;background-position:left -24px;}.jxListItem:focus{margin:0;border-left:1px dotted #75ADFF;border-right:1px dotted #75ADFF;background-image:url(images/listitem.png);background-repeat:repeat-x;background-position:left -72px;}.jxListView .jxPressed,.jxListView .jxSelected{margin:0;border-left:1px solid #8AABFB;border-right:1px solid #8AABFB;background-color:#CDE5FF;background-image:url(images/listitem.png);background-repeat:repeat-x;background-position:left -48px;}.jxMenuContainer .jxChrome{background-image:url(images/flyout_chrome.png);padding:5px 5px 7px 6px;}.jxButtonMenu span.jxMenuItemSpan{padding-right:16px;}.jxMenuContainer{position:absolute;top:0;left:-10000px;display:none;z-index:2000;padding:0;}ul.jxMenu{display:block;position:relative;list-style-type:none;padding:1px;margin:6px 6px 8px 7px;background-color:#fff;border:1px solid #999;}li.jxMenuItemContainer{display:block;position:relative;font-size:0;line-height:0;margin:0;padding:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}a.jxMenuItem{display:block;position:relative;overflow:hidden;text-decoration:none;cursor:pointer;outline:none;border:1px solid #fff;background-image:url(images/menuitem.png);background-repeat:no-repeat;background-position:left top;font-family:Arial,Helvetica,sans-serif;font-size:11px;text-decoration:none;margin:0;padding:0;color:#000;}a.jxMenuItemActive{background-position:left -98px;}a.jxMenuItem:focus{background-position:left -74px;}a.jxMenuItem:focus span.jxMenuItemContent{border-right:1px dotted #75ADFF;}a.jxMenuItemActive:focus{background-position:left -170px;}a.jxMenuItem:hover{background-color:#CDE5FF;background-position:left -26px;}a.jxMenuItem:hover span.jxMenuItemContent{border-right:1px solid #C5E0FF;}a.jxMenuItemActive:hover{background-position:left -122px;}a.jxMenuItemPressed,a.jxMenuItemPressed:hover{background-color:#CDE5FF;background-position:left -50px;}.jxDisabled a.jxMenuItem,.jxDisabled span.jxMenuItemContent span{cursor:default;}.jxDisabled a.jxMenuItem:focus,.jxDisabled a.jxMenuItemPressed,.jxDisabled a.jxMenuItemPressed:hover,.jxDisabled a.jxMenuItem:hover{background-color:#fff;background-position:left top;border-right:1px solid #fff;}.jxDisabled a.jxMenuItem:hover span.jxMenuItemContent{border-right:1px solid #fff;}span.jxMenuItemContent{display:block;position:relative;font-family:Arial,Helvetica,sans-serif;font-size:0;line-height:0;white-space:nowrap;padding:0 20px 0 0;margin:0;border-right:1px solid #fff;}.jxButtonSubMenu span.jxMenuItemContent,.jxButtonSubMenu:hover span.jxMenuItemContent{background-image:url(images/emblems.png);background-position:right -30px;background-repeat:no-repeat;}img.jxMenuItemIcon{position:absolute;top:2px;left:2px;width:16px;height:16px;background-position:left center;background-repeat:no-repeat;}span.jxMenuItemContent span{display:block;position:relative;cursor:pointer;margin:0;padding:2px 0 2px 22px;font-size:16px;line-height:16px;color:#000;}span.jxMenuItemContent span.jxMenuItemLabel{color:#000;font-size:11px;}.jxMenuItemToggle img.jxMenuItemIcon,.jxMenuItemToggleSet img.jxMenuItemIcon{background-image:url(images/emblems.png);background-position:2px 0;background-repeat:no-repeat;}.jxMenuItemToggle a.jxMenuItemActive img.jxMenuItemIcon{background-position:2px -48px;}.jxMenuItemToggleSet a.jxMenuItemActive img.jxMenuItemIcon{background-position:2px -64px;}ul.jxMenu span.jxMenuSeparator{display:block;font-size:10px;line-height:10px;background-image:url(images/toolbar_separator_v.png);background-repeat:repeat-x;background-position:left center;}@CHARSET "ISO-8859-1";.jxMessage{text-align:center;padding:10px;margin-top:10px;}.jxPanel{display:block;position:relative;}.jxPanelContentContainer{overflow:hidden;background-color:#f0f0f0;}.jxPanelContent{position:relative;display:block;overflow:auto;background-color:#fff;margin:0;padding:0;}.jxPanelTitle{display:block;position:relative;background-image:url(images/panelbar.png);background-repeat:repeat-x;background-position:left top;height:22px;margin:0;padding:0;text-align:center;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxPanelBar{position:absolute;line-height:1px;width:100%;height:5px;cursor:row-resize;background-color:#f0f0f0;z-index:2;}.jxPanelIcon{position:absolute;left:2px;top:3px;width:16px;height:16px;border:none;padding:0;margin:0;}.jxPanelLabel{padding-left:25px;font-family:Arial,Helvetica,sans-serif;font-size:11px;font-weight:bold;line-height:21px;color:#000;white-space:nowrap;}.jxPanelControls{position:absolute;top:3px;right:2px;height:16px;width:80px;overflow:hidden;}.jxPanelControls img{background-image:url('images/panel_controls.png');background-repeat:no-repeat;border:0;margin:0;width:16px;height:16px;}.jxPanelClose img{background-position:0 -32px;}.jxPanelMenu img{background-position:0 -48px;}.jxPanelHelp img{background-position:0 -64px;}.jxPanelCollapse img{background-position:0 -16px;}.jxPanelMin .jxPanelCollapse img{background-position:0 0;}.jxPanelMax .jxPanelCollapse img{background-position:0 -16px;}.jxPanelMaximize img{background-position:0 0;}.jxPanelLoading img{border:0;margin:0;width:16px;height:16px;visibility:hidden;position:absolute;top:1px;left:2px;}.jxPanelControls .jxButtonContainer,.jxPanelControls span.jxButtonContent,.jxPanelControls .jxButton:hover span.jxButtonContent,.jxPanelControls .jxButton:active span.jxButtonContent,.jxPanelControls .jxButtonActive span.jxButtonContent,.jxPanelControls .jxButtonActive:hover span.jxButtonContent,.jxPanelControls .jxButtonActive:active span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton:hover span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton:active span.jxButtonContent,.jxPanelControls .jxButton,.jxPanelControls .jxButton:hover,.jxPanelControls .jxButton:active,.jxPanelControls .jxButtonActive,.jxPanelControls .jxButtonActive:hover,.jxPanelControls .jxButtonActive:active,.jxPanelControls .jxDisabled .jxButton,.jxPanelControls .jxDisabled .jxButton:hover,.jxPanelControls .jxDisabled .jxButton:active{padding:0;margin:0;border:none;background-color:transparent;background-image:none;}.jxPanelControls .jxButtonMenu span.jxButtonContent,.jxPanelControls .jxButtonFlyout span.jxButtonContent{background-image:none;}.jxPanelControls .jxButtonMenu span.jxButtonContent span,.jxPanelControls .jxButtonFlyout span.jxButtonContent span{padding-right:0;}.jxPanelControls div.jxBarTop{position:absolute;right:0;background-image:none;background-color:transparent;margin:0;padding:0;border:none;height:16px;}.jxPanelControls .jxBarScroller{left:auto;right:0;}.jxPanelControls ul.jxToolbar{float:right;}.jxPanelControls ul.jxToolbar,.jxPanelControls li.jxToolItem{background-image:none;background-color:transparent;margin:0;padding:0;border:none;}@CHARSET "ISO-8859-1";.jxProgressBar-container{width:100%;display:block;clear:both;}.jxProgressBar-message{color:black;}.jxProgressBar-container .jxProgressBar{width:100%;clear:both;border-top:none;}.jxProgressBar-container .jxProgressBar .jxProgressBar-outline{border:1px solid #360;position:absolute;top:0;left:0;z-index:10;}.jxProgressBar-container .jxProgressBar .jxProgressBar-fill{background-color:#9c6;position:absolute;top:1px;left:1px;z-index:20;}.jxProgressBar-container .jxProgressBar .jxProgressBar-text{color:#360;margin:0;padding:2px;position:absolute;top:1px;left:1px;width:auto;z-index:30;border:none;}@CHARSET "ISO-8859-1";.jxSliderContainer{width:100%;height:10px;border:1px solid black;}.jxSliderKnob{width:10px;height:10px;background-color:black;cursor:pointer;}.jxSplitterMask{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;background-image:url(images/a_pixel.png);z-index:1;}.jxSplitBarHorizontal{display:block;position:absolute;font-size:0;line-height:0;margin:0;padding:0;border:none;width:5px;height:100%;cursor:col-resize;background-color:#f0f0f0;z-index:2;}.jxSplitBarVertical{display:block;position:absolute;font-size:0;line-height:0;margin:0;padding:0;border:none;width:100%;height:5px;cursor:row-resize;background-color:#f0f0f0;z-index:2;}.jxSplitContainer{display:block;position:relative;margin:0;padding:0;border:none;overflow:hidden;}.jxSplitArea{display:block;position:absolute;margin:0;padding:0;border:none;z-index:0;}.jxSplitBarDrag{background-color:#eee;}.jxSnapHorizontalBefore{width:5px;height:5px;position:absolute;top:0;left:0;background-color:#aaa;}.jxSnapHorizontalAfter{width:5px;height:5px;position:absolute;top:0;left:0;background-color:#aaa;}.jxTabSetContainer{position:relative;display:-moz-inline-box;display:inline-block;overflow:hidden;width:200px;height:200px;margin:0;padding:0;background-color:#fff;}.jxTabSetContainer .jxToolbarContainer{z-index:auto;}.tabContent{display:none;position:relative;width:100%;height:100%;overflow:auto;}.tabContentActive{display:block;}span.jxTabContainer{display:block;position:relative;margin:0;padding:2px;border:none;}a.jxTab{display:-moz-inline-box;display:inline-block;position:relative;cursor:pointer;user-select:none;-moz-user-select:none;-khtml-user-select:none;margin:0;padding:0;border:none;background-repeat:no-repeat;text-decoration:none;outline:none;}span.jxTabContent{display:-moz-inline-box;display:inline-block;font-size:0;line-height:0;margin:0;padding:0;border:none;background-repeat:no-repeat;}img.jxTabIcon{display:-moz-inline-box;display:inline-block;position:relative;width:16px;height:16px;background-position:center center;background-repeat:no-repeat;}span.jxTabLabel{display:-moz-inline-box;display:inline-block;position:relative;cursor:pointer;margin:0;padding:0;color:#000;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:16px;}a.jxTabClose{display:block;position:absolute;cursor:pointer;outline:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;}a.jxTabClose img{width:16px;height:16px;background-image:url(images/tab_close.png);}.jxDisabled a.jxTab,.jxDisabled span.jxTabContent span,.jxDisabled a.jxTabClose{cursor:default;}.jxBarTop a.jxTab,.jxBarTop span.jxTabContent{background-image:url(images/tab_top.png);}.jxBarBottom a.jxTab,.jxBarBottom span.jxTabContent{background-image:url(images/tab_bottom.png);}.jxBarTop a.jxTabClose,.jxBarBottom a.jxTabClose{top:5px;right:5px;}.jxBarTop .jxTabClose span.jxTabContent,.jxBarBottom .jxTabClose span.jxTabContent{padding-right:16px;}.jxBarTop a.jxTab,.jxBarBottom a.jxTab{padding-left:4px;background-position:left -24px;}.jxBarTop span.jxTabContent,.jxBarBottom span.jxTabContent{padding:4px 4px 4px 0;background-position:right -24px;}.jxBarTop a.jxTabActive,.jxBarBottom a.jxTabActive{background-position:left -72px;}.jxBarTop a.jxTabActive span.jxTabContent,.jxBarBottom a.jxTabActive span.jxTabContent{background-position:right -72px;}.jxBarTop a.jxTab:focus,.jxBarBottom a.jxTab:focus{background-position:left -96px;}.jxBarTop a.jxTab:focus span.jxTabContent,.jxBarBottom a.jxTab:focus span.jxTabContent{background-position:right -96px;}.jxBarTop a.jxTabActive:focus,.jxBarBottom a.jxTabActive:focus{background-position:left -144px;}.jxBarTop a.jxTabActive:focus span.jxTabContent,.jxBarBottom a.jxTabActive:focus span.jxTabContent{background-position:right -144px;}.jxBarTop a.jxTab:hover,.jxBarTop a.jxTabActive:hover,.jxBarBottom a.jxTab:hover,.jxBarBottom a.jxTabActive:hover{background-position:left -48px;}.jxBarTop a.jxTab:hover span.jxTabContent,.jxBarTop a.jxTabActive:hover span.jxTabContent,.jxBarBottom a.jxTab:hover span.jxTabContent,.jxBarBottom a.jxTabActive:hover span.jxTabContent{background-position:right -48px;}.jxBarTop a.jxTabPressed,.jxBarTop a.jxTabPressed:focus,.jxBarBottom a.jxTabPressed,.jxBarBottom a.jxTabPressed:focus{background-position:left -120px;}.jxBarTop a.jxTabPressed span.jxTabContent,.jxBarTop a.jxTabPressed:focus span.jxTabContent,.jxBarBottom a.jxTabPressed span.jxTabContent,.jxBarBottom a.jxTabPressed:focus span.jxTabContent{background-position:right -120px;}.jxBarTop .jxDisabled a.jxTab:focus,.jxBarTop .jxDisabled a.jxTab:active,.jxBarTop .jxDisabled a.jxTab:hover,.jxBarTop .jxDisabled a.jxTabPressed,.jxBarBottom .jxDisabled a.jxTab:focus,.jxBarBottom .jxDisabled a.jxTab:active,.jxBarBottom .jxDisabled a.jxTab:hover,.jxBarBottom .jxDisabled a.jxTabPressed{background-position:left -24px;}.jxBarTop .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarTop .jxDisabled a.jxTab:active span.jxTabContent,.jxBarTop .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarTop .jxDisabled a.jxTabPressed span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:active span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabPressed span.jxTabContent{background-position:right -24px;}.jxBarTop .jxDisabled a.jxTabActive:focus,.jxBarTop .jxDisabled a.jxTabActive:active,.jxBarTop .jxDisabled a.jxTabActive:hover,.jxBarBottom .jxDisabled a.jxTabActive:focus,.jxBarBottom .jxDisabled a.jxTabActive:active,.jxBarBottom .jxDisabled a.jxTabActive:hover{background-position:left -72px;}.jxBarTop .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarTop .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarTop .jxDisabled a.jxTabActive:hover span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:hover span.jxTabContent{background-position:right -72px;}.jxBarTop img.jxTabIcon,.jxBarBottom img.jxTabIcon{vertical-align:middle;}.jxBarTop span.jxTabLabel,.jxBarBottom span.jxTabLabel{vertical-align:middle;height:16px;padding:0 4px 0 4px;}.jxBarLeft a.jxTab,.jxBarLeft span.jxTabContent{background-image:url(images/tab_left.png);}.jxBarRight a.jxTab,.jxBarRight span.jxTabContent{background-image:url(images/tab_right.png);}.jxBarLeft a.jxTabClose,.jxBarRight a.jxTabClose{top:5px;left:5px;}.jxBarLeft .jxTabClose span.jxTabContent,.jxBarRight .jxTabClose span.jxTabContent{padding-top:16px;}.jxBarLeft a.jxTab,.jxBarRight a.jxTab{padding-top:4px;background-position:-24px top;}.jxBarLeft span.jxTabContent,.jxBarRight span.jxTabContent{padding:0 4px 4px 4px;background-position:-24px bottom;}.jxBarLeft a.jxTabActive,.jxBarRight a.jxTabActive{background-position:-72px top;}.jxBarLeft a.jxTabActive span.jxTabContent,.jxBarRight a.jxTabActive span.jxTabContent{background-position:-72px bottom;}.jxBarLeft a.jxTab:focus,.jxBarRight a.jxTab:focus{background-position:-96px top;}.jxBarLeft a.jxTab:focus span.jxTabContent,.jxBarRight a.jxTab:focus span.jxTabContent{background-position:-96px bottom;}.jxBarLeft a.jxTabActive:focus,.jxBarRight a.jxTabActive:focus{background-position:-144px top;}.jxBarLeft a.jxTabActive:focus span.jxTabContent,.jxBarRight a.jxTabActive:focus span.jxTabContent{background-position:-144px bottom;}.jxBarLeft a.jxTab:hover,.jxBarLeft a.jxTabActive:hover,.jxBarRight a.jxTab:hover,.jxBarRight a.jxTabActive:hover{background-position:-48px top;}.jxBarLeft a.jxTab:hover span.jxTabContent,.jxBarLeft a.jxTabActive:hover span.jxTabContent,.jxBarRight a.jxTab:hover span.jxTabContent,.jxBarRight a.jxTabActive:hover span.jxTabContent{background-position:-48px bottom;}.jxBarLeft a.jxTabPressed,.jxBarLeft a.jxTabPressed:focus,.jxBarRight a.jxTabPressed,.jxBarRight a.jxTabPressed:focus{background-position:-120px top;}.jxBarLeft a.jxTabPressed span.jxTabContent,.jxBarLeft a.jxTabPressed:focus span.jxTabContent,.jxBarRight a.jxTabPressed span.jxTabContent,.jxBarRight a.jxTabPressed:focus span.jxTabContent{background-position:-120px bottom;}.jxBarLeft .jxDisabled a.jxTab:focus,.jxBarLeft .jxDisabled a.jxTab:active,.jxBarLeft .jxDisabled a.jxTab:hover,.jxBarLeft .jxDisabled a.jxTabPressed,.jxBarRight .jxDisabled a.jxTab:focus,.jxBarRight .jxDisabled a.jxTab:active,.jxBarRight .jxDisabled a.jxTab:hover,.jxBarRight .jxDisabled a.jxTabPressed{background-position:-24px top;}.jxBarLeft .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarLeft .jxDisabled a.jxTab:active span.jxTabContent,.jxBarLeft .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabPressed span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:active span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarRight .jxDisabled a.jxTabPressed span.jxTabContent{background-position:-24px bottom;}.jxBarLeft .jxDisabled a.jxTabActive:focus,.jxBarLeft .jxDisabled a.jxTabActive:active,.jxBarLeft .jxDisabled a.jxTabActive:hover,.jxBarRight .jxDisabled a.jxTabActive:focus,.jxBarRight .jxDisabled a.jxTabActive:active,.jxBarRight .jxDisabled a.jxTabActive:hover{background-position:-72px top;}.jxBarLeft .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabActive:hover span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:hover span.jxTabContent{background-position:-72px bottom;}.jxBarLeft span.jxTabLabel,.jxBarRight span.jxTabLabel{padding:4px 0 4px 0;}.jxBarContainer{display:block;position:relative;z-index:1;overflow:hidden;margin:0;padding:0;border:0;background-color:#f0f0f0;}.jxBarTop,.jxBarBottom{width:100%;height:28px;background-image:url(images/toolbar.png);background-repeat:repeat-x;background-position:0 0;overflow:hidden;}.jxTabBox .jxTabBarTop{background-image:url(images/tabbar.png);background-position:0 bottom;}.jxTabBox .jxTabBarBottom{background-image:url(images/tabbar_bottom.png);background-position:0 top;}.jxBarLeft,.jxBarRight{width:auto;height:100%;background-image:url(images/toolbar.png);background-repeat:repeat-x;background-position:0 0;float:left;overflow:hidden;}.jxTabBox .jxTabBarLeft{background-image:url(images/tabbar_left.png);background-repeat:repeat-y;background-position:right 0;}.jxTabBox .jxTabBarRight{background-image:url(images/tabbar_right.png);background-repeat:repeat-y;background-position:left 0;}.jxBarTop .jxBarScroller,.jxBarBottom .jxBarScroller{position:absolute;width:10000%;overflow:hidden;}.jxBarTop .jxBarScrollLeft,.jxBarBottom .jxBarScrollLeft{position:absolute;top:0;left:0;}.jxBarTop .jxBarScrollRight,.jxBarBottom .jxBarScrollRight{position:absolute;top:0;right:0;}.jxBarTop .jxBarScrollLeft img.jxButtonIcon,.jxBarBottom .jxBarScrollLeft img.jxButtonIcon{background-image:url(images/emblems.png);background-position:0 -80px;}.jxBarTop .jxBarScrollRight img.jxButtonIcon,.jxBarBottom .jxBarScrollRight img.jxButtonIcon{background-image:url(images/emblems.png);background-position:0 -96px;}ul.jxToolbar,ul.jxTabBar{display:block;position:relative;float:left;list-style-type:none;margin:0;padding:0;border:none;}li.jxToolItem{display:block;position:relative;float:left;font-size:0;line-height:0;padding:0;margin:0;border:none;}li.jxToolItem span.jxBarSeparator{display:block;position:relative;float:left;font-size:0;line-height:0;border:0;margin:0;padding:4px;background-repeat:no-repeat;background-position:center center;}.jxBarTop li.jxToolItem span.jxBarSeparator,.jxBarBottom li.jxToolItem span.jxBarSeparator{width:8px;height:20px;background-image:url(images/toolbar_separator_h.png);}.jxBarLeft li.jxToolItem span.jxBarSeparator,.jxBarRight li.jxToolItem span.jxBarSeparator{width:20px;height:8px;background-image:url(images/toolbar_separator_v.png);}.jxBarLeft ul.jxToolbar,.jxBarLeft ul.jxTabBar,.jxBarLeft li.jxToolItem,.jxBarRight ul.jxToolbar,.jxBarRight ul.jxTabBar,.jxBarRight li.jxToolItem{clear:both;}.jxTooltip{width:auto;height:auto;background-color:black;color:white;padding:5px;z-index:65536;}.jxTree,.jxTreeRoot{position:relative;display:block;list-style:none;margin:0;padding:0;}.jxTreeNest{list-style:none;margin:0;padding:0;background-repeat:repeat-y;background-position:left top;}li.jxTreeContainer{position:relative;display:block;margin:0;padding:0;background-repeat:no-repeat;background-position:left top;white-space:nowrap;font-size:0;line-height:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxTree li.jxTreeContainer{margin-left:16px;}a.jxTreeItem{position:relative;display:block;cursor:pointer;outline:none;overflow:hidden;background-image:url(images/tree_hover.png);background-repeat:repeat-x;background-position:left top;border:none;margin:0 1px 0 17px;padding:0 0 0 20px;z-index:0;font-family:Arial,Helvetica,sans-serif;font-size:11px;color:#000;text-decoration:none;line-height:20px;height:20px;}a.jxTreeItem:focus{border-left:1px dotted #75ADFF;border-right:1px dotted #75ADFF;margin:0 0 0 16px;background-position:left -72px;}a.jxTreeItem:hover,li.jxTreeContainer a.jxHover{border-left:1px solid #CDDFFD;border-right:1px solid #CDDFFD;margin:0 0 0 16px;background-color:#CDE5FF;background-position:left -24px;}li.jxTreeContainer a.jxSelected,li.jxTreeContainer a.jxSelected:hover,li.jxTreeContainer a.jxPressed,li.jxTreeContainer a.jxPressed:hover{border-left:1px solid #8AABFB;border-right:1px solid #8AABFB;margin:0 0 0 16px;background-color:#CDE5FF;background-position:left -48px;}li.jxDisabled a.jxTreeItem{cursor:default;}li.jxDisabled a.jxTreeItem:focus,li.jxDisabled a.jxTreeItem:hover{background-position:left top;background-color:transparent;border:none;margin:0 1px 0 17px;}.jxTreeNest{background-image:url(images/tree_vert_line.png);}img.jxTreeImage,img.jxTreeIcon{position:absolute;display:inline;left:0;top:0;width:16px;height:20px;z-index:1;background-image:url(images/tree.png);background-repeat:no-repeat;border:0;margin:0;}img.jxTreeIcon{height:16px;top:2px;left:1px;}.jxTreeBranchOpen .jxTreeIcon,.jxTreeBranchLastOpen .jxTreeIcon{background-position:left -40px;}.jxTreeBranchOpen .jxTreeImage{background-position:left -100px;}.jxTreeBranchLastOpen .jxTreeImage{background-position:left -160px;}.jxTreeBranchClosed .jxTreeIcon,.jxTreeBranchLastClosed .jxTreeIcon{background-position:left -20px;}.jxTreeBranchClosed .jxTreeImage{background-position:left -80px;}.jxTreeBranchLastClosed .jxTreeImage{background-position:left -140px;}.jxTreeLeaf .jxTreeIcon,.jxTreeLeafLast .jxTreeIcon{background-position:left 0;}.jxTreeLeaf .jxTreeImage{background-position:left -60px;}.jxTreeLeafLast .jxTreeImage{background-position:left -120px;}a.jxTreeItem,img.jxTreeImage,img.jxTreeIcon,span.jxTreeLabel,.jxTreeItemContainer input{vertical-align:middle;}.jxFileUploadPanel{padding:5px;}.jxFileUploadPanel .jxInputContainer{width:300px;}.jxUploadQueue{width:100%;margin-top:10px;}.jxUploadQueue div{position:relative;width:95%;clear:both;border-top:1px solid black;padding:2px;}.jxUploadQueue div span{display:block;}.jxUploadQueue div span.jxUploadFileName{float:left;font-size:16px;}.jxUploadQueue div span.jxUploadFileDelete,.jxUploadQueue div span.jxUploadFileProgress,.jxUploadQueue div span.jxUploadFileComplete,.jxUploadQueue div span.jxUploadFileError{float:right;width:16px;height:16px;background-repeat:no-repeat;background-position:top left;cursor:pointer;}.jxUploadQueue div span.jxUploadFileDelete{background-image:url('images/delete.gif');}.jxUploadQueue div span.jxUploadFileProgress{background-image:url('images/loading.gif');}.jxUploadQueue div span.jxUploadFileComplete{background-image:url('images/green_tick.png');}.jxUploadQueue div span.jxUploadFileError{background-image:url('images/error.png');}.jxUploadFileErrorTip{padding:4px 4px 4px 20px;border:2px solid #ddd;background:url("images/error.png") no-repeat left top;color:black;width:100px;}
\ No newline at end of file
+ */body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';}.jxButtonContainer{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:2px;border:none;}.jxButton{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:0 0 0 4px;border:none;background-image:url(images/button.png);background-position:left -24px;background-repeat:no-repeat;text-decoration:none;outline:none;}a.jxButton{cursor:pointer;user-select:none;-moz-user-select:none;-khtml-user-select:none;}ul.jxToolbar .jxButton{background-position:left top;}span.jxButtonContent{display:-moz-inline-box;display:inline-block;position:relative;font-size:0;line-height:0;margin:0;padding:4px 4px 4px 0;border:none;background-image:url(images/button.png);background-position:right -24px;background-repeat:no-repeat;}ul.jxToolbar span.jxButtonContent{background-position:right top;}ul.jxToolbar .jxButtonActive,.jxButtonActive{background-position:left -72px;}ul.jxToolbar .jxButtonActive span.jxButtonContent,.jxButtonActive span.jxButtonContent{background-position:right -72px;}ul.jxToolbar .jxButton:focus,.jxButton:focus{background-position:left -96px;}ul.jxToolbar .jxButton:focus span.jxButtonContent,.jxButton:focus span.jxButtonContent{background-position:right -96px;}ul.jxToolbar .jxButtonActive:focus,.jxButtonActive:focus{background-position:left -144px;}ul.jxToolbar .jxButtonActive:focus span.jxButtonContent,.jxButtonActive:focus span.jxButtonContent{background-position:right -144px;}ul.jxToolbar .jxButton:hover,ul.jxToolbar .jxButtonActive:hover,.jxButton:hover,.jxButtonActive:hover{background-position:left -48px;}ul.jxToolbar .jxButton:hover span.jxButtonContent,ul.jxToolbar .jxButtonActive:hover span.jxButtonContent,.jxButton:hover span.jxButtonContent,.jxButtonActive:hover span.jxButtonContent{background-position:right -48px;}ul.jxToolbar .jxButtonPressed,ul.jxToolbar .jxButtonPressed:focus,.jxButtonPressed,.jxButtonPressed:focus{background-position:left -120px;}ul.jxToolbar .jxButtonPressed span.jxButtonContent,ul.jxToolbar .jxButtonPressed:focus span.jxButtonContent,.jxButtonPressed span.jxButtonContent,.jxButtonPressed:focus span.jxButtonContent{background-position:right -120px;}.jxDisabled .jxButton,.jxDisabled span.jxButtonContent span{cursor:default;}ul.jxToolbar .jxDisabled .jxButton:focus,ul.jxToolbar .jxDisabled .jxButton:active,ul.jxToolbar .jxDisabled .jxButton:hover,ul.jxToolbar .jxDisabled .jxButtonPressed{background-position:left top;}.jxDisabled .jxButton:focus,.jxDisabled .jxButton:active,.jxDisabled .jxButton:hover,.jxDisabled .jxButtonPressed{background-position:left -24px;}ul.jxToolbar .jxDisabled .jxButton:focus span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButton:active span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButton:hover span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonPressed span.jxButtonContent{background-position:right top;}.jxDisabled .jxButton:focus span.jxButtonContent,.jxDisabled .jxButton:active span.jxButtonContent,.jxDisabled .jxButton:hover span.jxButtonContent,.jxDisabled .jxButtonPressed span.jxButtonContent{background-position:right -24px;}ul.jxToolbar .jxDisabled .jxButtonActive:focus,ul.jxToolbar .jxDisabled .jxButtonActive:active,ul.jxToolbar .jxDisabled .jxButtonActive:hover,.jxDisabled .jxButtonActive:focus,.jxDisabled .jxButtonActive:active,.jxDisabled .jxButtonActive:hover{background-position:left -72px;}ul.jxToolbar .jxDisabled .jxButtonActive:focus span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonActive:active span.jxButtonContent,ul.jxToolbar .jxDisabled .jxButtonActive:hover span.jxButtonContent,.jxDisabled .jxButtonActive:focus span.jxButtonContent,.jxDisabled .jxButtonActive:active span.jxButtonContent,.jxDisabled .jxButtonActive:hover span.jxButtonContent{background-position:right -72px;}img.jxButtonIcon{display:-moz-inline-box;display:inline-block;position:relative;vertical-align:middle;width:16px;height:16px;background-position:center center;background-repeat:no-repeat;}span.jxButtonContent span{display:-moz-inline-box;display:inline-block;position:relative;vertical-align:middle;cursor:pointer;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:16px;height:16px;white-space:nowrap;}span.jxButtonContent span.jxButtonLabel{margin:0;padding:0 4px 0 4px;color:#000;font-size:11px;}.jxDiscloser span.jxButtonContent{padding-right:0;}.jxDiscloser span.jxButtonContent span{padding-right:16px;background-image:url(images/emblems.png);background-position:right -16px;background-repeat:no-repeat;}a.jxButtonDisclose{position:absolute;display:-moz-inline-box;display:inline-block;padding:4px 0;font-size:0;line-height:0;right:2px;top:2px;background-image:url(images/button_multi_disclose.png);background-position:right 0;background-repeat:no-repeat;outline:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;}a.jxButtonDisclose img{width:16px;height:16px;margin:0;padding:0;border:0;background-image:url(images/emblems.png);background-position:right -16px;background-repeat:no-repeat;}a.jxButtonDisclose:focus,a.jxButtonDisclose:active{background-position:right -96px;}a.jxButtonDisclose:hover{background-position:right -48px;}a.jxButtonDisclosePressed{background-position:right -120px;}.jxDisabled a.jxButtonDisclose,.jxDisabled a.jxButtonDisclose:focus,.jxDisabled a.jxButtonDisclose:active,.jxDisabled a.jxButtonDisclose:hover,.jxDisabled a.jxButtonDisclosePressed{cursor:default;background-position:right 0;}ul.jxToolbar .jxButtonHover{background-position:left -24px!important;}ul.jxToolbar .jxButtonHover span.jxButtonContent{background-position:right -24px!important;}.jxFlyout .jxChrome{background-image:url(images/flyout_chrome.png);padding:5px 5px 7px 6px;}.jxFlyout{position:absolute;display:block;z-index:100;margin:0;padding:0;}.jxFlyoutContent{position:relative;display:block;overflow:auto;margin:6px 6px 8px 7px;background-color:#fff;border:1px solid #999;}.jxButtonMulti,.jxButtonMulti span.jxButtonContent{background-image:url(images/button_multi.png);}.jxButtonEditCombo,.jxButtonEditCombo span.jxButtonContent{background-image:url(images/button_combo.png);}.jxButtonMulti span.jxButtonContent span{padding-right:21px;}.jxButtonEditCombo span.jxButtonContent span{font-size:0;}.jxButtonComboDefault span.jxButtonContent span,.jxButtonComboDefault input{font-style:italic;color:#999;}.jxButtonEditCombo input{float:left;line-height:16px;height:16px;padding:0 4px;margin:0;border:none;font-size:11px;font-family:Arial,Helvetica,sans-serif;background-color:transparent;}.jxChrome{position:absolute;display:block;font-size:0;line-height:0;z-index:-1;width:100%;height:100%;top:0;left:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxChromeDrag{opacity:.5;-ms-filter:"Alpha(opacity=50)";}.jxChromeTL{position:absolute;overflow:hidden;left:0;top:0;width:50%;height:50%;}.jxChromeTR{position:absolute;overflow:hidden;left:50%;top:0;width:50%;height:50%;}.jxChromeBL{position:absolute;overflow:hidden;left:0;top:50%;width:50%;height:50%;}.jxChromeBR{position:absolute;overflow:hidden;left:50%;top:50%;width:50%;height:50%;}.jxChromeTL img{position:absolute;top:0;left:0;width:1000px;height:600px;}.jxChromeTR img{position:absolute;top:0;right:0;width:1000px;height:600px;}.jxChromeBL img{position:absolute;bottom:0;left:0;width:1000px;height:600px;}.jxChromeBR img{position:absolute;bottom:0;right:0;width:1000px;height:600px;}.jxColorBar{position:relative;overflow:hidden;}table.jxColorGrid{position:relative;border-collapse:collapse;empty-cells:show;clear:both;padding:0;margin:0;}.jxColorGrid tr{padding:0;margin:0;}.jxColorGrid td{border:1px solid #000;padding:0;margin:0;}.jxColorGrid td.emptyCell{border:0 solid #000;}.jxColorGrid td.emptyCell span{display:block;width:7px;height:7px;line-height:0;font-size:0;border:0 solid #000;padding:1px;margin:0;}.jxColorGrid a.colorSwatch{display:block;width:7px;height:7px;line-height:0;font-size:0;border:0 solid #000;margin:0;padding:1px;}.jxColorGrid a.borderWhite:hover{border:1px solid #fff;padding:0;}.jxColorGrid a.borderBlack:hover{border:1px solid #000;padding:0;}input.jxHexInput{width:55px;vertical-align:middle;}input.jxAlphaInput{width:30px;vertical-align:middle;}div.jxColorPreview{float:left;position:relative;width:20px;height:20px;border:1px solid #000;margin:2px;vertical-align:middle;background-image:url('images/grid.png');overflow:hidden;}.jxButtonFlyout span.jxButtonContent span.jxButtonSwatch{display:block;float:left;width:14px;height:14px;border:1px solid #000;background-image:url('images/grid.png');background-position:0 0;background-repeat:repeat;padding-right:0!important;}.jxButtonFlyout span.jxButtonContent span.jxButtonSwatch span{display:block;width:14px;height:14px;position:absolute;padding-right:0;background:none;}div.jxColorPreview img{position:absolute;z-index:0;}div.jxColorPreview div{width:20px;height:10px;position:absolute;display:block;left:0;z-index:1;font-size:10px;line-height:0;}div.jxColorPreview div.jxColorSelected{top:0;}div.jxColorPreview div.jxColorHover{bottom:0;}label.jxColorLabel,label.jxAlphaLabel{width:auto;font-family:Arial,sans-serif;font-size:11px;line-height:24px;padding:2px;vertical-align:middle;}a.jxColorClose{position:absolute;top:0;right:0;width:16px;height:16px;}a.jxColorClose img{width:16px;height:16px;}.jxClearer{display:block;position:relative;float:none;clear:both;font-size:0;line-height:0;width:0;height:0;margin:0;padding:0;}.jxDisabled{opacity:.4;-ms-filter:"Alpha(opacity=40)";}.jxDisabled *{-ms-filter:"Alpha(opacity=40)";}iframe.jxIframeShim{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;-ms-filter:"Alpha(opacity=0)";z-index:-1;}@CHARSET "ISO-8859-1";.jxConfirmQuestion{text-align:center;padding:10px;margin-top:10px;}.jxDialog .jxChrome{background-image:url(images/dialog_chrome.png);}.jxDialog{display:block;z-index:1000;overflow:hidden;}.jxDialogContentContainer{z-index:1;margin:0 11px 13px 12px;border:1px solid #b7b7b7;background-color:#f0f0f0;}.jxDialogModal{position:absolute;display:block;top:0;left:0;width:100%;height:100%;background-color:#000;opacity:.2;-ms-filter:"Alpha(opacity=20)";}.jxDialogContent{display:block;position:relative;overflow:auto;padding:0;z-index:1;}.jxDialogTitle{display:block;position:relative;background-image:url(images/a_pixel.png);text-align:center;height:24px;line-height:24px;z-index:1;margin:6px 6px 0 7px;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxDialogMin .jxDialogTitle{margin-bottom:8px;}.jxDialogMoveable,.jxDialogMoveable .jxDialogLabel{cursor:move;}.jxDialogIcon{position:absolute;left:2px;top:3px;width:16px;height:16px;border:none;padding:0;margin:0;}.jxDialogLabel{font-family:Arial,Helvetica,sans-serif;font-size:11px;font-weight:bold;line-height:21px;color:#000;white-space:nowrap;cursor:default;}.jxDialogResize{position:absolute;bottom:7px;right:6px;width:16px;height:16px;z-index:2;border:0;cursor:se-resize;background-image:url(images/dialog_resize.png);}.jxDialogControls{position:absolute;top:3px;right:2px;height:16px;width:80px;}.jxDialogControls img{background-image:url('images/panel_controls.png');background-repeat:no-repeat;border:0;margin:0;width:16px;height:16px;}.jxDialogClose img{background-position:0 -32px;}.jxDialogMenu img{background-position:0 -48px;}.jxDialogHelp img{background-position:0 -64px;}.jxDialogCollapse img{background-position:0 -16px;}.jxDialogMin .jxDialogCollapse img{background-position:0 0;}.jxDialogMax .jxDialogCollapse img{background-position:0 -16px;}.jxDialogLoading img{border:0;margin:0;width:16px;height:16px;visibility:hidden;position:absolute;top:1px;left:2px;}.jxDialogControls .jxButtonContainer,.jxDialogControls span.jxButtonContent,.jxDialogControls .jxButton:hover span.jxButtonContent,.jxDialogControls .jxButton:active span.jxButtonContent,.jxDialogControls .jxButtonActive span.jxButtonContent,.jxDialogControls .jxButtonActive:hover span.jxButtonContent,.jxDialogControls .jxButtonActive:active span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton:hover span.jxButtonContent,.jxDialogControls .jxDisabled .jxButton:active span.jxButtonContent,.jxDialogControls .jxButton,.jxDialogControls .jxButton:hover,.jxDialogControls .jxButton:active,.jxDialogControls .jxButtonActive,.jxDialogControls .jxButtonActive:hover,.jxDialogControls .jxButtonActive:active,.jxDialogControls .jxDisabled .jxButton,.jxDialogControls .jxDisabled .jxButton:hover,.jxDialogControls .jxDisabled .jxButton:active{padding:0;margin:0;border:none;background-color:transparent;background-image:none;}.jxDialogControls .jxButtonMenu span.jxButtonContent,.jxDialogControls .jxButtonFlyout span.jxButtonContent{background-image:none;}.jxDialogControls .jxButtonMenu span.jxButtonContent span,.jxDialogControls .jxButtonFlyout span.jxButtonContent span{padding-right:0;}.jxDialogControls .jxBarContainer{position:absolute;right:0;background-image:none;background-color:transparent;margin:0;padding:0;border:none;height:16px;}.jxDialogControls .jxBarScroller{left:auto;right:0;}.jxDialogControls ul.jxToolbar{float:right;}.jxDialogControls ul.jxToolbar,.jxDialogControls li.jxToolItem{background-image:none;background-color:transparent;margin:0;padding:0;border:none;}div.jxFileInputs{position:relative;}div.jxFileFake{position:absolute;top:0;left:0;z-index:1;}div.jxFileFake span{float:left;display:block;}div.jxFileFake .jxInputContainer{width:150px;}div.jxFileFake .jxInputText{width:135px;}div.jxFileFake .jxButtonContainer{margin-top:6px;float:left;}.jxInputFile{position:relative;text-align:right;-moz-opacity:0;filter:alpha(opacity:0);opacity:0;z-index:2;margin-top:3px;height:35px;width:100%;}.jxForm{display:block;position:relative;overflow:hidden;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxFieldset{display:block;position:relative;overflow:hidden;border:1px solid #ccc;margin:10px;padding:5px;}.jxFieldsetLegend,.jxFieldset legend{position:relative;margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:26px;color:#000;}.jxInputContainer{display:block;position:relative;padding:0;margin:2px;border:none;}.jxInputLabel,.jxInputTag{display:-moz-inline-box;display:inline-block;margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:26px;color:#000;}.jxInputLabel{vertical-align:top;}.jxInputTag{vertical-align:bottom;}.jxInputText,.jxInputPassword,.jxInputTextarea{margin:0 4px;padding:4px;border:1px solid #bbb;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputSelect{margin:0 4px;padding:3px 4px 3px 1px;border:1px solid #bbb;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputText:focus,.jxInputPassword:focus,.jxInputTextarea:focus,.jxInputSelect:focus{border:1px solid #000;}.jxInputRadio,.jxInputCheck{margin:5px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:16px;color:#000;}.jxInputContainer .jxButtonContainer{padding:0;margin:0 4px;}.jxInputGroup{border:none;padding:0;margin:2px;}.jxInputGroup legend{font-size:0;line-height:0;padding:0;margin:0;border:none;}.jxInputGroup .jxFieldsetLegend{font-size:12px;}.jxInputGroup .jxInputLabel{width:auto;}.jxFieldError .jxInputText,.jxFieldError .jxInputPassword,.jxFieldError .jxInputTextarea,.jxFieldError .jxInputSelect{background-color:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;}.jxFieldSuccess .jxInputText,.jxFieldSuccess .jxInputPassword,.jxFieldSuccess .jxInputTextarea,.jxFieldSuccess .jxInputSelect{background-color:#E6EFC2;color:#264409;border-color:#C6D880;}.jxFieldError .jxInputText:focus,.jxFieldError .jxInputPassword:focus,.jxFieldError .jxInputTextarea:focus,.jxFieldError .jxInputSelect:focus{border-color:#8a1f11;}.jxFieldSuccess .jxInputText:focus,.jxFieldSuccess .jxInputPassword:focus,.jxFieldSuccess .jxInputTextarea:focus,.jxFieldSuccess .jxInputSelect:focus{border-color:#264409;}.jxFieldError .jxInputLabel,.jxFieldError .jxInputTag{color:#8a1f11;}.jxFieldSuccess .jxInputLabel,.jxFieldSuccess .jxInputTag{color:#264409;}.jxFormInline .jxInputContainer,form .jxFormInline .jxInputContainer,form .jxFieldset span.jxFormInline,form.jxForm span.jxFormInline{display:inline;}.jxFormInline .jxInputLabel,form .jxFormInline .jxInputLabel,form span.jxFormInline .jxInputLabel{display:inline;width:auto;}.jxFormInline .jxInputTag,form .jxFormInline .jxInputTag,form span.jxFormInline .jxInputTag{display:inline;}.jxFormInline .jxInputGroup,form .jxFormInline .jxInputGroup{padding-left:0;}.jxFormInline .jxInputGroup .jxFieldsetLegend,form .jxFormInline .jxInputGroup .jxFieldsetLegend{position:relative;left:auto;}.jxFormInline .jxInputGroup .jxInputLabel,form .jxFormInline .jxInputGroup .jxInputLabel{display:inline;width:auto;}.jxFormBlock .jxInputContainer,form .jxFormBlock .jxInputContainer,form .jxFieldset span.jxFormBlock,form.jxform span.jxFormBlock{display:block;}.jxFormBlock .jxInputLabel,form .jxFormBlock .jxInputLabel,form span.jxFormBlock .jxInputLabel{display:block;width:auto;margin-left:4px;}.jxFormBlock .jxInputContainerCheck .jxInputLabel,.jxFormBlock .jxInputContainerRadio .jxInputLabel,form .jxFormBlock .jxInputContainerCheck .jxInputLabel,form .jxFormBlock .jxInputContainerRadio .jxInputLabel,form span.jxFormBlock .jxInputContainerCheck .jxInputLabel,form span.jxFormBlock .jxInputContainerRadio .jxInputLabel{display:-moz-inline-box;display:inline-block;}.jxFormBlock .jxInputGroup,form .jxFormBlock .jxInputGroup{padding-left:0;}.jxFormBlock .jxInputGroup .jxFieldsetLegend,form .jxFormBlock .jxInputGroup .jxFieldsetLegend{position:relative;left:auto;}.jxFormBlock .jxInputGroup .jxInputLabel,form .jxFormBlock .jxInputGroup .jxInputLabel{display:-moz-inline-box;display:inline-block;width:auto;}.jxFormInlineblock .jxInputContainer,form .jxFormInlineblock .jxInputContainer,form .jxFieldset span.jxFormInlineblock,form.jxForm span.jxFormInlineblock{display:block;}.jxFormInlineblock .jxInputLabel,form .jxFormInlineblock .jxInputLabel,form span.jxFormInlineblock .jxInputLabel{display:-moz-inline-box;display:inline-block;width:200px;}.jxFormInlineblock .jxInputGroup,form .jxFormInlineblock .jxInputGroup{padding-left:200px;}.jxFormInlineblock .jxInputGroup .jxFieldsetLegend,form .jxFormInlineblock .jxInputGroup .jxFieldsetLegend{position:absolute;left:-200px;width:200px;}.jxFormInlineblock .jxInputGroup .jxInputLabel,form .jxFormInlineblock .jxInputGroup .jxInputLabel{display:-moz-inline-box;display:inline-block;width:auto;}.jxGridContainer{position:absolute;top:0;left:0;border-left:0 solid #d8d8d8;border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;overflow:hidden;}.jxGridTable{position:relative;table-layout:fixed;border-collapse:collapse;border-style:none;cursor:default;font-family:Arial,Verdana,sans-serif;font-size:11px;font-weight:normal;}.jxGridHeader{width:100%;}.jxGridTableBody{position:relative;table-layout:fixed;border-collapse:collapse;border-style:none;cursor:default;font-family:Arial,Verdana,sans-serif;font-size:11px;font-weight:normal;}.jxGridColHeadHide{height:0;line-height:0;font-size:0;background-color:#fff;white-space:normal;}.jxGridColHeadHide p,.jxGridRowHeadHide p{font-size:0;line-height:0;height:0;margin:0;padding:0;}.jxGridRowHeadHide{width:0;white-space:normal;}.jxGridCell{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;overflow:hidden;}.jxGridCellContent{position:relative;display:-moz-inline-box;display:inline-block;overflow:hidden;padding-left:3px;padding-right:3px;overflow:hidden;white-space:nowrap;cursor:cell;text-overflow:ellipsis;}.jxGridColHead{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;background-color:#f2f2f2;background-image:url('images/table_col.png');background-position:0 0;background-repeat:repeat-x;text-align:center;font-weight:bold;color:#333;cursor:default;padding-left:3px;padding-right:3px;white-space:nowrap;}.jxGridRowHead{border-top:0 solid #d8d8d8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;border-left:0 solid #d8d8d8;background-color:#f2f2f2;background-image:url('images/table_row.png');background-position:0 0;background-repeat:repeat-y;text-align:center;font-weight:bold;color:#333;cursor:default;overflow:hidden;white-space:nowrap;}.jxGridRowAll{background-color:#fff;}.jxGridColumnHeaderSelected{background-color:#e1e1e1;background-position:0 -200px;}.jxGridRowHeaderSelected{background-color:#e1e1e1;background-position:-400px 0;}.jxGridColumnSelected{background-color:#f7f7f7;}.jxGridRowSelected td{background-color:#f7f7f7;}td.jxGridCellSelected{background-color:#ebebeb;}.jxGridColumnHeaderPrelight{background-color:#cee5ff;background-position:0 -300px;}.jxGridRowHeaderPrelight{background-color:#cee5ff;background-position:-600px 0;}.jxGridColumnPrelight{background-color:#e5f1ff;}.jxGridRowPrelight td{background-color:#e5f1ff;}td.jxGridCellPrelight{background-color:#cce3ff;}.jxColSortable{padding-right:20px;}.jxGridCell.jxColSortable{padding-right:0;}.jxColSortable span{background-image:url('images/emblems.png');padding-right:20px;background-repeat:no-repeat;background-position:right top;}.jxGridColumnSortedAsc span{background-position:right -160px;}.jxGridColumnSortedDesc span{background-position:right -16px;}.jxGridColumnResize,.jxGridRowResize{display:block;position:absolute;background-image:url(images/a_pixel.png);z-index:1;}.jxGridColumnResize{right:0;top:0;height:100%;width:4px;cursor:col-resize;}.jxGridRowResize{left:0;bottom:0;height:4px;width:100%;cursor:row-resize;}.jxListView .jxListItemContainer{position:relative;display:block;outline:none;overflow:hidden;border:none;margin:0 1px;padding:0;}.jxListItem{position:relative;display:block;cursor:pointer;outline:none;overflow:hidden;border:none;margin:0 1px;padding:0;z-index:0;font-family:Arial,Helvetica,sans-serif;font-size:11px;color:#000;text-decoration:none;line-height:20px;height:20px;}.jxListView .jxHover{margin:0;border-left:1px solid #CDDFFD;border-right:1px solid #CDDFFD;background-image:url(images/listitem.png);background-repeat:repeat-x;background-color:#CDE5FF;background-position:left -24px;}.jxListItem:focus{margin:0;border-left:1px dotted #75ADFF;border-right:1px dotted #75ADFF;background-image:url(images/listitem.png);background-repeat:repeat-x;background-position:left -72px;}.jxListView .jxPressed,.jxListView .jxSelected{margin:0;border-left:1px solid #8AABFB;border-right:1px solid #8AABFB;background-color:#CDE5FF;background-image:url(images/listitem.png);background-repeat:repeat-x;background-position:left -48px;}.jxMenuContainer .jxChrome{background-image:url(images/flyout_chrome.png);padding:5px 5px 7px 6px;}.jxButtonMenu span.jxMenuItemSpan{padding-right:16px;}.jxMenuContainer{position:absolute;top:0;left:-10000px;display:none;z-index:2000;padding:0;}ul.jxMenu{display:block;position:relative;list-style-type:none;padding:1px;margin:6px 6px 8px 7px;background-color:#fff;border:1px solid #999;}li.jxMenuItemContainer{display:block;position:relative;font-size:0;line-height:0;margin:0;padding:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}a.jxMenuItem{display:block;position:relative;overflow:hidden;text-decoration:none;cursor:pointer;outline:none;border:1px solid #fff;background-image:url(images/menuitem.png);background-repeat:no-repeat;background-position:left top;font-family:Arial,Helvetica,sans-serif;font-size:11px;text-decoration:none;margin:0;padding:0;color:#000;}a.jxMenuItemActive{background-position:left -98px;}a.jxMenuItem:focus{background-position:left -74px;}a.jxMenuItem:focus span.jxMenuItemContent{border-right:1px dotted #75ADFF;}a.jxMenuItemActive:focus{background-position:left -170px;}a.jxMenuItem:hover{background-color:#CDE5FF;background-position:left -26px;}a.jxMenuItem:hover span.jxMenuItemContent{border-right:1px solid #C5E0FF;}a.jxMenuItemActive:hover{background-position:left -122px;}a.jxMenuItemPressed,a.jxMenuItemPressed:hover{background-color:#CDE5FF;background-position:left -50px;}.jxDisabled a.jxMenuItem,.jxDisabled span.jxMenuItemContent span{cursor:default;}.jxDisabled a.jxMenuItem:focus,.jxDisabled a.jxMenuItemPressed,.jxDisabled a.jxMenuItemPressed:hover,.jxDisabled a.jxMenuItem:hover{background-color:#fff;background-position:left top;border-right:1px solid #fff;}.jxDisabled a.jxMenuItem:hover span.jxMenuItemContent{border-right:1px solid #fff;}span.jxMenuItemContent{display:block;position:relative;font-family:Arial,Helvetica,sans-serif;font-size:0;line-height:0;white-space:nowrap;padding:0 20px 0 0;margin:0;border-right:1px solid #fff;}.jxButtonSubMenu span.jxMenuItemContent,.jxButtonSubMenu:hover span.jxMenuItemContent{background-image:url(images/emblems.png);background-position:right -30px;background-repeat:no-repeat;}img.jxMenuItemIcon{position:absolute;top:2px;left:2px;width:16px;height:16px;background-position:left center;background-repeat:no-repeat;}span.jxMenuItemContent span{display:block;position:relative;cursor:pointer;margin:0;padding:2px 0 2px 22px;font-size:16px;line-height:16px;color:#000;}span.jxMenuItemContent span.jxMenuItemLabel{color:#000;font-size:11px;}.jxMenuItemToggle img.jxMenuItemIcon,.jxMenuItemToggleSet img.jxMenuItemIcon{background-image:url(images/emblems.png);background-position:2px 0;background-repeat:no-repeat;}.jxMenuItemToggle a.jxMenuItemActive img.jxMenuItemIcon{background-position:2px -48px;}.jxMenuItemToggleSet a.jxMenuItemActive img.jxMenuItemIcon{background-position:2px -64px;}ul.jxMenu span.jxMenuSeparator{display:block;font-size:10px;line-height:10px;background-image:url(images/toolbar_separator_v.png);background-repeat:repeat-x;background-position:left center;}@CHARSET "ISO-8859-1";.jxMessage{text-align:center;padding:10px;margin-top:10px;}.jxNoticeListContainer{border:none;padding:0;margin:0;font-size:0;line-height:0;z-index:500;}.jxNoticeList{position:relative;}.jxNoticeItemContainer{position:relative;overflow:hidden;}.jxNoticeItemContainer .jxChrome{background-image:url(images/flyout_chrome.png);padding:5px 5px 7px 6px;}.jxHasChrome .jxNoticeItem{margin:6px 6px 8px 7px;}.jxNoticeItem{position:relative;border:2px solid #ccc;margin:0;padding:0;background-color:#f8f8f8;background-image:url(images/notice.png);background-repeat:repeat-x;background-position:left bottom;}.jxNoticeIcon{position:absolute;top:0;left:0;margin:6px;width:16px;height:16px;background-image:url(images/icons.png);background-repeat:no-repeat;background-position:0 0;}.jxNotice{display:block;position:relative;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;color:#666;margin:0;border:none;padding:6px 26px 6px 10px;}.jxNoticeError .jxNoticeItem{background-color:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;background-image:url(images/notice_error.png);}.jxNoticeWarning .jxNoticeItem{background-color:#FFF6BF;color:#514721;border-color:#FFD324;background-image:url(images/notice_warning.png);}.jxNoticeSuccess .jxNoticeItem{background-color:#E6EFC2;color:#264409;border-color:#C6D880;background-image:url(images/notice_success.png);}.jxNoticeError .jxNotice{color:#8a1f11;padding-left:28px;}.jxNoticeWarning .jxNotice{color:#514721;padding-left:28px;}.jxNoticeSuccess .jxNotice{color:#264409;padding-left:28px;}.jxNoticeInfo .jxNotice{padding-left:28px;}.jxNoticeError .jxNoticeIcon{background-position:0 -32px;}.jxNoticeWarning .jxNoticeIcon{background-position:0 -16px;}.jxNoticeSuccess .jxNoticeIcon{background-position:0 -48px;}.jxNoticeInfo .jxNoticeIcon{background-position:0 -64px;}.jxNoticeClose{position:absolute;top:0;right:0;margin:6px;width:16px;height:16px;background-image:url(images/tab_close.png);background-position:0 0;background-repeat:no-repeat;}.jxPanel{display:block;position:relative;}.jxPanelContentContainer{overflow:hidden;background-color:#f0f0f0;}.jxPanelContent{position:relative;display:block;overflow:auto;background-color:#fff;margin:0;padding:0;}.jxPanelTitle{display:block;position:relative;background-image:url(images/panelbar.png);background-repeat:repeat-x;background-position:left top;height:22px;margin:0;padding:0;text-align:center;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxPanelBar{position:absolute;line-height:1px;width:100%;height:5px;cursor:row-resize;background-color:#f0f0f0;z-index:2;}.jxPanelIcon{position:absolute;left:2px;top:3px;width:16px;height:16px;border:none;padding:0;margin:0;}.jxPanelLabel{padding-left:25px;font-family:Arial,Helvetica,sans-serif;font-size:11px;font-weight:bold;line-height:21px;color:#000;white-space:nowrap;}.jxPanelControls{position:absolute;top:3px;right:2px;height:16px;width:80px;overflow:hidden;}.jxPanelControls img{background-image:url('images/panel_controls.png');background-repeat:no-repeat;border:0;margin:0;width:16px;height:16px;}.jxPanelClose img{background-position:0 -32px;}.jxPanelMenu img{background-position:0 -48px;}.jxPanelHelp img{background-position:0 -64px;}.jxPanelCollapse img{background-position:0 -16px;}.jxPanelMin .jxPanelCollapse img{background-position:0 0;}.jxPanelMax .jxPanelCollapse img{background-position:0 -16px;}.jxPanelMaximize img{background-position:0 0;}.jxPanelLoading img{border:0;margin:0;width:16px;height:16px;visibility:hidden;position:absolute;top:1px;left:2px;}.jxPanelControls .jxButtonContainer,.jxPanelControls span.jxButtonContent,.jxPanelControls .jxButton:hover span.jxButtonContent,.jxPanelControls .jxButton:active span.jxButtonContent,.jxPanelControls .jxButtonActive span.jxButtonContent,.jxPanelControls .jxButtonActive:hover span.jxButtonContent,.jxPanelControls .jxButtonActive:active span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton:hover span.jxButtonContent,.jxPanelControls .jxDisabled .jxButton:active span.jxButtonContent,.jxPanelControls .jxButton,.jxPanelControls .jxButton:hover,.jxPanelControls .jxButton:active,.jxPanelControls .jxButtonActive,.jxPanelControls .jxButtonActive:hover,.jxPanelControls .jxButtonActive:active,.jxPanelControls .jxDisabled .jxButton,.jxPanelControls .jxDisabled .jxButton:hover,.jxPanelControls .jxDisabled .jxButton:active{padding:0;margin:0;border:none;background-color:transparent;background-image:none;}.jxPanelControls .jxButtonMenu span.jxButtonContent,.jxPanelControls .jxButtonFlyout span.jxButtonContent{background-image:none;}.jxPanelControls .jxButtonMenu span.jxButtonContent span,.jxPanelControls .jxButtonFlyout span.jxButtonContent span{padding-right:0;}.jxPanelControls div.jxBarTop{position:absolute;right:0;background-image:none;background-color:transparent;margin:0;padding:0;border:none;height:16px;}.jxPanelControls .jxBarScroller{left:auto;right:0;}.jxPanelControls ul.jxToolbar{float:right;}.jxPanelControls ul.jxToolbar,.jxPanelControls li.jxToolItem{background-image:none;background-color:transparent;margin:0;padding:0;border:none;}@CHARSET "ISO-8859-1";.jxProgressBar-container{width:100%;display:block;clear:both;}.jxProgressBar-message{color:black;}.jxProgressBar-container .jxProgressBar{width:100%;clear:both;border-top:none;}.jxProgressBar-container .jxProgressBar .jxProgressBar-outline{border:1px solid #360;position:absolute;top:0;left:0;z-index:10;}.jxProgressBar-container .jxProgressBar .jxProgressBar-fill{background-color:#9c6;position:absolute;top:1px;left:1px;z-index:20;}.jxProgressBar-container .jxProgressBar .jxProgressBar-text{color:#360;margin:0;padding:2px;position:absolute;top:1px;left:1px;width:auto;z-index:30;border:none;}@CHARSET "ISO-8859-1";.jxSliderContainer{width:100%;height:10px;border:1px solid black;}.jxSliderKnob{width:10px;height:10px;background-color:black;cursor:pointer;}.jxSplitterMask{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;background-image:url(images/a_pixel.png);z-index:1;}.jxSplitBarHorizontal{display:block;position:absolute;font-size:0;line-height:0;margin:0;padding:0;border:none;width:5px;height:100%;cursor:col-resize;background-color:#f0f0f0;z-index:2;}.jxSplitBarVertical{display:block;position:absolute;font-size:0;line-height:0;margin:0;padding:0;border:none;width:100%;height:5px;cursor:row-resize;background-color:#f0f0f0;z-index:2;}.jxSplitContainer{display:block;position:relative;margin:0;padding:0;border:none;overflow:hidden;}.jxSplitArea{display:block;position:absolute;margin:0;padding:0;border:none;z-index:0;}.jxSplitBarDrag{background-color:#eee;}.jxSnapHorizontalBefore{width:5px;height:5px;position:absolute;top:0;left:0;background-color:#aaa;}.jxSnapHorizontalAfter{width:5px;height:5px;position:absolute;top:0;left:0;background-color:#aaa;}.jxTabSetContainer{position:relative;display:-moz-inline-box;display:inline-block;overflow:hidden;width:200px;height:200px;margin:0;padding:0;background-color:#fff;}.jxTabSetContainer .jxToolbarContainer{z-index:auto;}.tabContent{display:none;position:relative;width:100%;height:100%;overflow:auto;}.tabContentActive{display:block;}span.jxTabContainer{display:block;position:relative;margin:0;padding:2px;border:none;}a.jxTab{display:-moz-inline-box;display:inline-block;position:relative;cursor:pointer;user-select:none;-moz-user-select:none;-khtml-user-select:none;margin:0;padding:0;border:none;background-repeat:no-repeat;text-decoration:none;outline:none;}span.jxTabContent{display:-moz-inline-box;display:inline-block;font-size:0;line-height:0;margin:0;padding:0;border:none;background-repeat:no-repeat;}img.jxTabIcon{display:-moz-inline-box;display:inline-block;position:relative;width:16px;height:16px;background-position:center center;background-repeat:no-repeat;}span.jxTabLabel{display:-moz-inline-box;display:inline-block;position:relative;cursor:pointer;margin:0;padding:0;color:#000;font-family:Arial,Helvetica,sans-serif;font-size:11px;line-height:16px;}a.jxTabClose{display:block;position:absolute;cursor:pointer;outline:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;width:16px;height:16px;background-image:url(images/tab_close.png);background-position:0 0;background-repeat:no-repeat;}.jxDisabled a.jxTab,.jxDisabled span.jxTabContent span,.jxDisabled a.jxTabClose{cursor:default;}.jxBarTop a.jxTab,.jxBarTop span.jxTabContent{background-image:url(images/tab_top.png);}.jxBarBottom a.jxTab,.jxBarBottom span.jxTabContent{background-image:url(images/tab_bottom.png);}.jxBarTop a.jxTabClose,.jxBarBottom a.jxTabClose{top:5px;right:5px;}.jxBarTop .jxTabClose span.jxTabContent,.jxBarBottom .jxTabClose span.jxTabContent{padding-right:16px;}.jxBarTop a.jxTab,.jxBarBottom a.jxTab{padding-left:4px;background-position:left -24px;}.jxBarTop span.jxTabContent,.jxBarBottom span.jxTabContent{padding:4px 4px 4px 0;background-position:right -24px;}.jxBarTop a.jxTabActive,.jxBarBottom a.jxTabActive{background-position:left -72px;}.jxBarTop a.jxTabActive span.jxTabContent,.jxBarBottom a.jxTabActive span.jxTabContent{background-position:right -72px;}.jxBarTop a.jxTab:focus,.jxBarBottom a.jxTab:focus{background-position:left -96px;}.jxBarTop a.jxTab:focus span.jxTabContent,.jxBarBottom a.jxTab:focus span.jxTabContent{background-position:right -96px;}.jxBarTop a.jxTabActive:focus,.jxBarBottom a.jxTabActive:focus{background-position:left -144px;}.jxBarTop a.jxTabActive:focus span.jxTabContent,.jxBarBottom a.jxTabActive:focus span.jxTabContent{background-position:right -144px;}.jxBarTop a.jxTab:hover,.jxBarTop a.jxTabActive:hover,.jxBarBottom a.jxTab:hover,.jxBarBottom a.jxTabActive:hover{background-position:left -48px;}.jxBarTop a.jxTab:hover span.jxTabContent,.jxBarTop a.jxTabActive:hover span.jxTabContent,.jxBarBottom a.jxTab:hover span.jxTabContent,.jxBarBottom a.jxTabActive:hover span.jxTabContent{background-position:right -48px;}.jxBarTop a.jxTabPressed,.jxBarTop a.jxTabPressed:focus,.jxBarBottom a.jxTabPressed,.jxBarBottom a.jxTabPressed:focus{background-position:left -120px;}.jxBarTop a.jxTabPressed span.jxTabContent,.jxBarTop a.jxTabPressed:focus span.jxTabContent,.jxBarBottom a.jxTabPressed span.jxTabContent,.jxBarBottom a.jxTabPressed:focus span.jxTabContent{background-position:right -120px;}.jxBarTop .jxDisabled a.jxTab:focus,.jxBarTop .jxDisabled a.jxTab:active,.jxBarTop .jxDisabled a.jxTab:hover,.jxBarTop .jxDisabled a.jxTabPressed,.jxBarBottom .jxDisabled a.jxTab:focus,.jxBarBottom .jxDisabled a.jxTab:active,.jxBarBottom .jxDisabled a.jxTab:hover,.jxBarBottom .jxDisabled a.jxTabPressed{background-position:left -24px;}.jxBarTop .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarTop .jxDisabled a.jxTab:active span.jxTabContent,.jxBarTop .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarTop .jxDisabled a.jxTabPressed span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:active span.jxTabContent,.jxBarBottom .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabPressed span.jxTabContent{background-position:right -24px;}.jxBarTop .jxDisabled a.jxTabActive:focus,.jxBarTop .jxDisabled a.jxTabActive:active,.jxBarTop .jxDisabled a.jxTabActive:hover,.jxBarBottom .jxDisabled a.jxTabActive:focus,.jxBarBottom .jxDisabled a.jxTabActive:active,.jxBarBottom .jxDisabled a.jxTabActive:hover{background-position:left -72px;}.jxBarTop .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarTop .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarTop .jxDisabled a.jxTabActive:hover span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarBottom .jxDisabled a.jxTabActive:hover span.jxTabContent{background-position:right -72px;}.jxBarTop img.jxTabIcon,.jxBarBottom img.jxTabIcon{vertical-align:middle;}.jxBarTop span.jxTabLabel,.jxBarBottom span.jxTabLabel{vertical-align:middle;height:16px;padding:0 4px 0 4px;}.jxBarLeft a.jxTab,.jxBarLeft span.jxTabContent{background-image:url(images/tab_left.png);}.jxBarRight a.jxTab,.jxBarRight span.jxTabContent{background-image:url(images/tab_right.png);}.jxBarLeft a.jxTabClose,.jxBarRight a.jxTabClose{top:5px;left:5px;}.jxBarLeft .jxTabClose span.jxTabContent,.jxBarRight .jxTabClose span.jxTabContent{padding-top:16px;}.jxBarLeft a.jxTab,.jxBarRight a.jxTab{padding-top:4px;background-position:-24px top;}.jxBarLeft span.jxTabContent,.jxBarRight span.jxTabContent{padding:0 4px 4px 4px;background-position:-24px bottom;}.jxBarLeft a.jxTabActive,.jxBarRight a.jxTabActive{background-position:-72px top;}.jxBarLeft a.jxTabActive span.jxTabContent,.jxBarRight a.jxTabActive span.jxTabContent{background-position:-72px bottom;}.jxBarLeft a.jxTab:focus,.jxBarRight a.jxTab:focus{background-position:-96px top;}.jxBarLeft a.jxTab:focus span.jxTabContent,.jxBarRight a.jxTab:focus span.jxTabContent{background-position:-96px bottom;}.jxBarLeft a.jxTabActive:focus,.jxBarRight a.jxTabActive:focus{background-position:-144px top;}.jxBarLeft a.jxTabActive:focus span.jxTabContent,.jxBarRight a.jxTabActive:focus span.jxTabContent{background-position:-144px bottom;}.jxBarLeft a.jxTab:hover,.jxBarLeft a.jxTabActive:hover,.jxBarRight a.jxTab:hover,.jxBarRight a.jxTabActive:hover{background-position:-48px top;}.jxBarLeft a.jxTab:hover span.jxTabContent,.jxBarLeft a.jxTabActive:hover span.jxTabContent,.jxBarRight a.jxTab:hover span.jxTabContent,.jxBarRight a.jxTabActive:hover span.jxTabContent{background-position:-48px bottom;}.jxBarLeft a.jxTabPressed,.jxBarLeft a.jxTabPressed:focus,.jxBarRight a.jxTabPressed,.jxBarRight a.jxTabPressed:focus{background-position:-120px top;}.jxBarLeft a.jxTabPressed span.jxTabContent,.jxBarLeft a.jxTabPressed:focus span.jxTabContent,.jxBarRight a.jxTabPressed span.jxTabContent,.jxBarRight a.jxTabPressed:focus span.jxTabContent{background-position:-120px bottom;}.jxBarLeft .jxDisabled a.jxTab:focus,.jxBarLeft .jxDisabled a.jxTab:active,.jxBarLeft .jxDisabled a.jxTab:hover,.jxBarLeft .jxDisabled a.jxTabPressed,.jxBarRight .jxDisabled a.jxTab:focus,.jxBarRight .jxDisabled a.jxTab:active,.jxBarRight .jxDisabled a.jxTab:hover,.jxBarRight .jxDisabled a.jxTabPressed{background-position:-24px top;}.jxBarLeft .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarLeft .jxDisabled a.jxTab:active span.jxTabContent,.jxBarLeft .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabPressed span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:focus span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:active span.jxTabContent,.jxBarRight .jxDisabled a.jxTab:hover span.jxTabContent,.jxBarRight .jxDisabled a.jxTabPressed span.jxTabContent{background-position:-24px bottom;}.jxBarLeft .jxDisabled a.jxTabActive:focus,.jxBarLeft .jxDisabled a.jxTabActive:active,.jxBarLeft .jxDisabled a.jxTabActive:hover,.jxBarRight .jxDisabled a.jxTabActive:focus,.jxBarRight .jxDisabled a.jxTabActive:active,.jxBarRight .jxDisabled a.jxTabActive:hover{background-position:-72px top;}.jxBarLeft .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarLeft .jxDisabled a.jxTabActive:hover span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:focus span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:active span.jxTabContent,.jxBarRight .jxDisabled a.jxTabActive:hover span.jxTabContent{background-position:-72px bottom;}.jxBarLeft span.jxTabLabel,.jxBarRight span.jxTabLabel{padding:4px 0 4px 0;}.jxBarContainer{display:block;position:relative;z-index:1;overflow:hidden;margin:0;padding:0;border:0;background-color:#f0f0f0;}.jxBarTop,.jxBarBottom{width:100%;height:28px;background-image:url(images/toolbar.png);background-repeat:repeat-x;background-position:0 0;overflow:hidden;}.jxTabBox .jxTabBarTop{background-image:url(images/tabbar.png);background-position:0 bottom;}.jxTabBox .jxTabBarBottom{background-image:url(images/tabbar_bottom.png);background-position:0 top;}.jxBarLeft,.jxBarRight{width:auto;height:100%;background-image:url(images/toolbar.png);background-repeat:repeat-x;background-position:0 0;float:left;overflow:hidden;}.jxTabBox .jxTabBarLeft{background-image:url(images/tabbar_left.png);background-repeat:repeat-y;background-position:right 0;}.jxTabBox .jxTabBarRight{background-image:url(images/tabbar_right.png);background-repeat:repeat-y;background-position:left 0;}.jxBarTop .jxBarScroller,.jxBarBottom .jxBarScroller{position:absolute;width:10000%;overflow:hidden;}.jxBarTop .jxBarScrollLeft,.jxBarBottom .jxBarScrollLeft{position:absolute;top:0;left:0;}.jxBarTop .jxBarScrollRight,.jxBarBottom .jxBarScrollRight{position:absolute;top:0;right:0;}.jxBarTop .jxBarScrollLeft img.jxButtonIcon,.jxBarBottom .jxBarScrollLeft img.jxButtonIcon{background-image:url(images/emblems.png);background-position:0 -80px;}.jxBarTop .jxBarScrollRight img.jxButtonIcon,.jxBarBottom .jxBarScrollRight img.jxButtonIcon{background-image:url(images/emblems.png);background-position:0 -96px;}ul.jxToolbar,ul.jxTabBar{display:block;position:relative;float:left;list-style-type:none;margin:0;padding:0;border:none;}li.jxToolItem{display:block;position:relative;float:left;font-size:0;line-height:0;padding:0;margin:0;border:none;}li.jxToolItem span.jxBarSeparator{display:block;position:relative;float:left;font-size:0;line-height:0;border:0;margin:0;padding:4px;background-repeat:no-repeat;background-position:center center;}.jxBarTop li.jxToolItem span.jxBarSeparator,.jxBarBottom li.jxToolItem span.jxBarSeparator{width:8px;height:20px;background-image:url(images/toolbar_separator_h.png);}.jxBarLeft li.jxToolItem span.jxBarSeparator,.jxBarRight li.jxToolItem span.jxBarSeparator{width:20px;height:8px;background-image:url(images/toolbar_separator_v.png);}.jxBarLeft ul.jxToolbar,.jxBarLeft ul.jxTabBar,.jxBarLeft li.jxToolItem,.jxBarRight ul.jxToolbar,.jxBarRight ul.jxTabBar,.jxBarRight li.jxToolItem{clear:both;}.jxTooltip{width:auto;height:auto;background-color:black;color:white;padding:5px;z-index:65536;}.jxTree,.jxTreeRoot{position:relative;display:block;list-style:none;margin:0;padding:0;}.jxTreeNest{list-style:none;margin:0;padding:0;background-repeat:repeat-y;background-position:left top;}li.jxTreeContainer{position:relative;display:block;margin:0;padding:0;background-repeat:no-repeat;background-position:left top;white-space:nowrap;font-size:0;line-height:0;user-select:none;-moz-user-select:none;-khtml-user-select:none;}.jxTree li.jxTreeContainer{margin-left:16px;}a.jxTreeItem{position:relative;display:block;cursor:pointer;outline:none;overflow:hidden;background-image:url(images/tree_hover.png);background-repeat:repeat-x;background-position:left top;border:none;margin:0 1px 0 17px;padding:0 0 0 20px;z-index:0;font-family:Arial,Helvetica,sans-serif;font-size:11px;color:#000;text-decoration:none;line-height:20px;height:20px;}a.jxTreeItem:focus{border-left:1px dotted #75ADFF;border-right:1px dotted #75ADFF;margin:0 0 0 16px;background-position:left -72px;}a.jxTreeItem:hover,li.jxTreeContainer a.jxHover{border-left:1px solid #CDDFFD;border-right:1px solid #CDDFFD;margin:0 0 0 16px;background-color:#CDE5FF;background-position:left -24px;}li.jxTreeContainer a.jxSelected,li.jxTreeContainer a.jxSelected:hover,li.jxTreeContainer a.jxPressed,li.jxTreeContainer a.jxPressed:hover{border-left:1px solid #8AABFB;border-right:1px solid #8AABFB;margin:0 0 0 16px;background-color:#CDE5FF;background-position:left -48px;}li.jxDisabled a.jxTreeItem{cursor:default;}li.jxDisabled a.jxTreeItem:focus,li.jxDisabled a.jxTreeItem:hover{background-position:left top;background-color:transparent;border:none;margin:0 1px 0 17px;}.jxTreeNest{background-image:url(images/tree_vert_line.png);}img.jxTreeImage,img.jxTreeIcon{position:absolute;display:inline;left:0;top:0;width:16px;height:20px;z-index:1;background-image:url(images/tree.png);background-repeat:no-repeat;border:0;margin:0;}img.jxTreeIcon{height:16px;top:2px;left:1px;}.jxTreeBranchOpen .jxTreeIcon,.jxTreeBranchLastOpen .jxTreeIcon{background-position:left -40px;}.jxTreeBranchOpen .jxTreeImage{background-position:left -100px;}.jxTreeBranchLastOpen .jxTreeImage{background-position:left -160px;}.jxTreeBranchClosed .jxTreeIcon,.jxTreeBranchLastClosed .jxTreeIcon{background-position:left -20px;}.jxTreeBranchClosed .jxTreeImage{background-position:left -80px;}.jxTreeBranchLastClosed .jxTreeImage{background-position:left -140px;}.jxTreeLeaf .jxTreeIcon,.jxTreeLeafLast .jxTreeIcon{background-position:left 0;}.jxTreeLeaf .jxTreeImage{background-position:left -60px;}.jxTreeLeafLast .jxTreeImage{background-position:left -120px;}a.jxTreeItem,img.jxTreeImage,img.jxTreeIcon,span.jxTreeLabel,.jxTreeItemContainer input{vertical-align:middle;}.jxFileUploadPanel{padding:5px;}.jxFileUploadPanel .jxInputContainer{width:300px;}.jxUploadQueue{width:100%;margin-top:10px;}.jxUploadQueue div{position:relative;width:95%;clear:both;border-top:1px solid black;padding:2px;}.jxUploadQueue div span{display:block;}.jxUploadQueue div span.jxUploadFileName{float:left;font-size:16px;}.jxUploadQueue div span.jxUploadFileDelete,.jxUploadQueue div span.jxUploadFileProgress,.jxUploadQueue div span.jxUploadFileComplete,.jxUploadQueue div span.jxUploadFileError{float:right;width:16px;height:16px;background-repeat:no-repeat;background-position:top left;cursor:pointer;}.jxUploadQueue div span.jxUploadFileDelete{background-image:url('images/delete.gif');}.jxUploadQueue div span.jxUploadFileProgress{background-image:url('images/loading.gif');}.jxUploadQueue div span.jxUploadFileComplete{background-image:url('images/green_tick.png');}.jxUploadQueue div span.jxUploadFileError{background-image:url('images/error.png');}.jxUploadFileErrorTip{padding:4px 4px 4px 20px;border:2px solid #ddd;background:url("images/error.png") no-repeat left top;color:black;width:100px;}
\ No newline at end of file

Modified: sandbox/jxlib-3.0/templates/mapserver/standard/themes/delicious/jxtheme.uncompressed.css
===================================================================
--- sandbox/jxlib-3.0/templates/mapserver/standard/themes/delicious/jxtheme.uncompressed.css	2009-11-24 20:05:41 UTC (rev 1987)
+++ sandbox/jxlib-3.0/templates/mapserver/standard/themes/delicious/jxtheme.uncompressed.css	2009-11-24 20:11:06 UTC (rev 1988)
@@ -988,7 +988,7 @@
     width: 100%;
 }/**
  * @project         Jx
- * @revision        $Id: form.css 570 2009-10-28 15:32:02Z fred.warnock $
+ * @revision        $Id: form.css 615 2009-11-19 22:01:38Z fred.warnock $
  * @author          Fred Warnock (fwarnock at dmsolutions.ca)
  * @copyright       (c) 2006 DM Solutions Group Inc.
  */
@@ -1141,45 +1141,45 @@
 
 /* Field Validation */
 
-.jxFieldInvalid .jxInputText,
-.jxFieldInvalid .jxInputPassword,
-.jxFieldInvalid .jxInputTextarea,
-.jxFieldInvalid .jxInputSelect {
+.jxFieldError .jxInputText,
+.jxFieldError .jxInputPassword,
+.jxFieldError .jxInputTextarea,
+.jxFieldError .jxInputSelect {
   background-color: #FBE3E4; 
   color: #8a1f11; 
   border-color: #FBC2C4;
 }
 
-.jxFieldValidated .jxInputText,
-.jxFieldValidated .jxInputPassword,
-.jxFieldValidated .jxInputTextarea,
-.jxFieldValidated .jxInputSelect {
+.jxFieldSuccess .jxInputText,
+.jxFieldSuccess .jxInputPassword,
+.jxFieldSuccess .jxInputTextarea,
+.jxFieldSuccess .jxInputSelect {
   background-color: #E6EFC2; 
   color: #264409; 
   border-color: #C6D880;
 }
 
-.jxFieldInvalid .jxInputText:focus,
-.jxFieldInvalid .jxInputPassword:focus,
-.jxFieldInvalid .jxInputTextarea:focus,
-.jxFieldInvalid .jxInputSelect:focus {
+.jxFieldError .jxInputText:focus,
+.jxFieldError .jxInputPassword:focus,
+.jxFieldError .jxInputTextarea:focus,
+.jxFieldError .jxInputSelect:focus {
   border-color: #8a1f11;
 }
 
-.jxFieldValidated .jxInputText:focus,
-.jxFieldValidated .jxInputPassword:focus,
-.jxFieldValidated .jxInputTextarea:focus,
-.jxFieldValidated .jxInputSelect:focus {
+.jxFieldSuccess .jxInputText:focus,
+.jxFieldSuccess .jxInputPassword:focus,
+.jxFieldSuccess .jxInputTextarea:focus,
+.jxFieldSuccess .jxInputSelect:focus {
   border-color: #264409;
 }
 
-.jxFieldInvalid .jxInputLabel,
-.jxFieldInvalid .jxInputTag {
+.jxFieldError .jxInputLabel,
+.jxFieldError .jxInputTag {
   color: #8a1f11; 
 }
 
-.jxFieldValidated .jxInputLabel,
-.jxFieldValidated .jxInputTag {
+.jxFieldSuccess .jxInputLabel,
+.jxFieldSuccess .jxInputTag {
   color: #264409; 
 }
 
@@ -1871,6 +1871,105 @@
     text-align: center;
     padding: 10px;
     margin-top: 10px;
+}/* For Reference
+   Success, notice and error boxes from Blueprint */
+
+/* 
+.error      { background: #FBE3E4; color: #8a1f11; border-color: #FBC2C4; }
+.notice     { background: #FFF6BF; color: #514721; border-color: #FFD324; }
+.success    { background: #E6EFC2; color: #264409; border-color: #C6D880; }
+.error a    { color: #8a1f11; }
+.notice a   { color: #514721; }
+.success a  { color: #264409; }
+*/
+
+
+.jxNoticeListContainer {
+  border: none;
+  padding: 0px;
+  margin: 0px;
+  font-size: 0px;
+  line-height: 0px;
+  z-index: 500;
+}
+
+.jxNoticeList {
+    position: relative;
+}
+
+.jxNoticeItemContainer {
+    position: relative;
+    overflow: hidden;
+}
+
+.jxNoticeItemContainer .jxChrome {
+  background-image: url(images/flyout_chrome.png);
+  padding: 5px 5px 7px 6px;
+}
+
+.jxHasChrome .jxNoticeItem  {
+  margin: 6px 6px 8px 7px;
+}
+
+.jxNoticeItem {
+    position: relative;
+    border: 2px solid #ccc;
+    margin: 0px;
+    padding: 0px;
+    background-color: #f8f8f8;
+    background-image: url(images/notice.png);
+    background-repeat: repeat-x;
+    background-position: left bottom;
+}
+
+.jxNoticeIcon {
+  position: absolute;
+  top: 0px;
+  left: 0px;
+  margin: 6px;
+  width: 16px;
+  height: 16px;
+  background-image: url(images/icons.png);
+  background-repeat: no-repeat;
+  background-position: 0px 0px;
+}
+
+.jxNotice {
+    display: block;
+    position: relative;
+    font-family: Arial, Helvetica, sans-serif;
+    font-size: 12px;
+    line-height: 18px;
+    color: #666;
+    margin: 0px;
+    border: none;
+    padding: 6px 26px 6px 10px; 
+}                          
+
+.jxNoticeError .jxNoticeItem {   background-color: #FBE3E4; color: #8a1f11; border-color: #FBC2C4; background-image: url(images/notice_error.png);}
+.jxNoticeWarning .jxNoticeItem { background-color: #FFF6BF; color: #514721; border-color: #FFD324; background-image: url(images/notice_warning.png);}
+.jxNoticeSuccess .jxNoticeItem { background-color: #E6EFC2; color: #264409; border-color: #C6D880; background-image: url(images/notice_success.png);}
+
+.jxNoticeError .jxNotice {   color: #8a1f11; padding-left: 28px; }
+.jxNoticeWarning .jxNotice { color: #514721; padding-left: 28px; }
+.jxNoticeSuccess .jxNotice { color: #264409; padding-left: 28px; }
+.jxNoticeInfo .jxNotice { padding-left: 28px; }
+
+.jxNoticeError .jxNoticeIcon {   background-position: 0px -32px; }
+.jxNoticeWarning .jxNoticeIcon { background-position: 0px -16px; }
+.jxNoticeSuccess .jxNoticeIcon { background-position: 0px -48px; }            
+.jxNoticeInfo .jxNoticeIcon {    background-position: 0px -64px; }
+
+.jxNoticeClose {
+    position: absolute;
+    top: 0px;
+    right: 0px;
+    margin: 6px;
+    width: 16px;
+    height: 16px;
+    background-image: url(images/tab_close.png);
+    background-position: 0px 0px;
+    background-repeat: no-repeat;
 }/**
  * @project         Jx
  * @revision        $Id: panel.css 302 2009-04-02 18:42:56Z fred.warnock $
@@ -2265,7 +2364,7 @@
   background-color: #aaa;
 }/**
  * @project         Jx
- * @revision        $Id: tab.css 599 2009-11-10 16:06:38Z fred.warnock $
+ * @revision        $Id: tab.css 615 2009-11-19 22:01:38Z fred.warnock $
  * @author          Fred Warnock (fwarnock at dmsolutions.ca)
  * @copyright       (c) 2006 DM Solutions Group Inc.
  */
@@ -2400,12 +2499,11 @@
   user-select: none;
   -moz-user-select: none;
   -khtml-user-select: none;
-}
-
-a.jxTabClose img {
   width: 16px;
   height: 16px;
-  background-image: url(images/tab_close.png);  
+  background-image: url(images/tab_close.png);
+  background-position: 0px 0px;
+  background-repeat: no-repeat;
 }
 
 .jxDisabled a.jxTab,



More information about the fusion-commits mailing list