[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 == ' ') {
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