You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2015/03/22 17:05:20 UTC

[28/54] [partial] camel git commit: CAMEL-7263: Remove not maintained and deprecated camel-web module.

http://git-wip-us.apache.org/repos/asf/camel/blob/9f5e32db/components/camel-web/src/main/webapp/js/dojox/charting/widget/Chart2D.js.uncompressed.js
----------------------------------------------------------------------
diff --git a/components/camel-web/src/main/webapp/js/dojox/charting/widget/Chart2D.js.uncompressed.js b/components/camel-web/src/main/webapp/js/dojox/charting/widget/Chart2D.js.uncompressed.js
deleted file mode 100644
index d51e93a..0000000
--- a/components/camel-web/src/main/webapp/js/dojox/charting/widget/Chart2D.js.uncompressed.js
+++ /dev/null
@@ -1,8043 +0,0 @@
-/*
-	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
-	Available via Academic Free License >= 2.1 OR the modified BSD license.
-	see: http://dojotoolkit.org/license for details
-*/
-
-/*
-	This is a compiled version of Dojo, built for deployment and not for
-	development. To get an editable version, please visit:
-
-		http://dojotoolkit.org
-
-	for documentation and information on getting the source.
-*/
-
-if(!dojo._hasResource["dojox.gfx.matrix"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.gfx.matrix"] = true;
-dojo.provide("dojox.gfx.matrix");
-
-(function(){
-	var m = dojox.gfx.matrix;
-
-	// candidates for dojox.math:
-	m._degToRad = function(degree){ return Math.PI * degree / 180; };
-	m._radToDeg = function(radian){ return radian / Math.PI * 180; };
-
-	m.Matrix2D = function(arg){
-		// summary: a 2D matrix object
-		// description: Normalizes a 2D matrix-like object. If arrays is passed,
-		//		all objects of the array are normalized and multiplied sequentially.
-		// arg: Object
-		//		a 2D matrix-like object, a number, or an array of such objects
-		if(arg){
-			if(typeof arg == "number"){
-				this.xx = this.yy = arg;
-			}else if(arg instanceof Array){
-				if(arg.length > 0){
-					var matrix = m.normalize(arg[0]);
-					// combine matrices
-					for(var i = 1; i < arg.length; ++i){
-						var l = matrix, r = dojox.gfx.matrix.normalize(arg[i]);
-						matrix = new m.Matrix2D();
-						matrix.xx = l.xx * r.xx + l.xy * r.yx;
-						matrix.xy = l.xx * r.xy + l.xy * r.yy;
-						matrix.yx = l.yx * r.xx + l.yy * r.yx;
-						matrix.yy = l.yx * r.xy + l.yy * r.yy;
-						matrix.dx = l.xx * r.dx + l.xy * r.dy + l.dx;
-						matrix.dy = l.yx * r.dx + l.yy * r.dy + l.dy;
-					}
-					dojo.mixin(this, matrix);
-				}
-			}else{
-				dojo.mixin(this, arg);
-			}
-		}
-	};
-
-	// the default (identity) matrix, which is used to fill in missing values
-	dojo.extend(m.Matrix2D, {xx: 1, xy: 0, yx: 0, yy: 1, dx: 0, dy: 0});
-
-	dojo.mixin(m, {
-		// summary: class constants, and methods of dojox.gfx.matrix
-
-		// matrix constants
-
-		// identity: dojox.gfx.matrix.Matrix2D
-		//		an identity matrix constant: identity * (x, y) == (x, y)
-		identity: new m.Matrix2D(),
-
-		// flipX: dojox.gfx.matrix.Matrix2D
-		//		a matrix, which reflects points at x = 0 line: flipX * (x, y) == (-x, y)
-		flipX:    new m.Matrix2D({xx: -1}),
-
-		// flipY: dojox.gfx.matrix.Matrix2D
-		//		a matrix, which reflects points at y = 0 line: flipY * (x, y) == (x, -y)
-		flipY:    new m.Matrix2D({yy: -1}),
-
-		// flipXY: dojox.gfx.matrix.Matrix2D
-		//		a matrix, which reflects points at the origin of coordinates: flipXY * (x, y) == (-x, -y)
-		flipXY:   new m.Matrix2D({xx: -1, yy: -1}),
-
-		// matrix creators
-
-		translate: function(a, b){
-			// summary: forms a translation matrix
-			// description: The resulting matrix is used to translate (move) points by specified offsets.
-			// a: Number: an x coordinate value
-			// b: Number: a y coordinate value
-			if(arguments.length > 1){
-				return new m.Matrix2D({dx: a, dy: b}); // dojox.gfx.matrix.Matrix2D
-			}
-			// branch
-			// a: dojox.gfx.Point: a point-like object, which specifies offsets for both dimensions
-			// b: null
-			return new m.Matrix2D({dx: a.x, dy: a.y}); // dojox.gfx.matrix.Matrix2D
-		},
-		scale: function(a, b){
-			// summary: forms a scaling matrix
-			// description: The resulting matrix is used to scale (magnify) points by specified offsets.
-			// a: Number: a scaling factor used for the x coordinate
-			// b: Number: a scaling factor used for the y coordinate
-			if(arguments.length > 1){
-				return new m.Matrix2D({xx: a, yy: b}); // dojox.gfx.matrix.Matrix2D
-			}
-			if(typeof a == "number"){
-				// branch
-				// a: Number: a uniform scaling factor used for the both coordinates
-				// b: null
-				return new m.Matrix2D({xx: a, yy: a}); // dojox.gfx.matrix.Matrix2D
-			}
-			// branch
-			// a: dojox.gfx.Point: a point-like object, which specifies scale factors for both dimensions
-			// b: null
-			return new m.Matrix2D({xx: a.x, yy: a.y}); // dojox.gfx.matrix.Matrix2D
-		},
-		rotate: function(angle){
-			// summary: forms a rotating matrix
-			// description: The resulting matrix is used to rotate points
-			//		around the origin of coordinates (0, 0) by specified angle.
-			// angle: Number: an angle of rotation in radians (>0 for CW)
-			var c = Math.cos(angle);
-			var s = Math.sin(angle);
-			return new m.Matrix2D({xx: c, xy: -s, yx: s, yy: c}); // dojox.gfx.matrix.Matrix2D
-		},
-		rotateg: function(degree){
-			// summary: forms a rotating matrix
-			// description: The resulting matrix is used to rotate points
-			//		around the origin of coordinates (0, 0) by specified degree.
-			//		See dojox.gfx.matrix.rotate() for comparison.
-			// degree: Number: an angle of rotation in degrees (>0 for CW)
-			return m.rotate(m._degToRad(degree)); // dojox.gfx.matrix.Matrix2D
-		},
-		skewX: function(angle) {
-			// summary: forms an x skewing matrix
-			// description: The resulting matrix is used to skew points in the x dimension
-			//		around the origin of coordinates (0, 0) by specified angle.
-			// angle: Number: an skewing angle in radians
-			return new m.Matrix2D({xy: Math.tan(angle)}); // dojox.gfx.matrix.Matrix2D
-		},
-		skewXg: function(degree){
-			// summary: forms an x skewing matrix
-			// description: The resulting matrix is used to skew points in the x dimension
-			//		around the origin of coordinates (0, 0) by specified degree.
-			//		See dojox.gfx.matrix.skewX() for comparison.
-			// degree: Number: an skewing angle in degrees
-			return m.skewX(m._degToRad(degree)); // dojox.gfx.matrix.Matrix2D
-		},
-		skewY: function(angle){
-			// summary: forms a y skewing matrix
-			// description: The resulting matrix is used to skew points in the y dimension
-			//		around the origin of coordinates (0, 0) by specified angle.
-			// angle: Number: an skewing angle in radians
-			return new m.Matrix2D({yx: Math.tan(angle)}); // dojox.gfx.matrix.Matrix2D
-		},
-		skewYg: function(degree){
-			// summary: forms a y skewing matrix
-			// description: The resulting matrix is used to skew points in the y dimension
-			//		around the origin of coordinates (0, 0) by specified degree.
-			//		See dojox.gfx.matrix.skewY() for comparison.
-			// degree: Number: an skewing angle in degrees
-			return m.skewY(m._degToRad(degree)); // dojox.gfx.matrix.Matrix2D
-		},
-		reflect: function(a, b){
-			// summary: forms a reflection matrix
-			// description: The resulting matrix is used to reflect points around a vector,
-			//		which goes through the origin.
-			// a: dojox.gfx.Point: a point-like object, which specifies a vector of reflection
-			// b: null
-			if(arguments.length == 1){
-				b = a.y;
-				a = a.x;
-			}
-			// branch
-			// a: Number: an x coordinate value
-			// b: Number: a y coordinate value
-
-			// make a unit vector
-			var a2 = a * a, b2 = b * b, n2 = a2 + b2, xy = 2 * a * b / n2;
-			return new m.Matrix2D({xx: 2 * a2 / n2 - 1, xy: xy, yx: xy, yy: 2 * b2 / n2 - 1}); // dojox.gfx.matrix.Matrix2D
-		},
-		project: function(a, b){
-			// summary: forms an orthogonal projection matrix
-			// description: The resulting matrix is used to project points orthogonally on a vector,
-			//		which goes through the origin.
-			// a: dojox.gfx.Point: a point-like object, which specifies a vector of projection
-			// b: null
-			if(arguments.length == 1){
-				b = a.y;
-				a = a.x;
-			}
-			// branch
-			// a: Number: an x coordinate value
-			// b: Number: a y coordinate value
-
-			// make a unit vector
-			var a2 = a * a, b2 = b * b, n2 = a2 + b2, xy = a * b / n2;
-			return new m.Matrix2D({xx: a2 / n2, xy: xy, yx: xy, yy: b2 / n2}); // dojox.gfx.matrix.Matrix2D
-		},
-
-		// ensure matrix 2D conformance
-		normalize: function(matrix){
-			// summary: converts an object to a matrix, if necessary
-			// description: Converts any 2D matrix-like object or an array of
-			//		such objects to a valid dojox.gfx.matrix.Matrix2D object.
-			// matrix: Object: an object, which is converted to a matrix, if necessary
-			return (matrix instanceof m.Matrix2D) ? matrix : new m.Matrix2D(matrix); // dojox.gfx.matrix.Matrix2D
-		},
-
-		// common operations
-
-		clone: function(matrix){
-			// summary: creates a copy of a 2D matrix
-			// matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix-like object to be cloned
-			var obj = new m.Matrix2D();
-			for(var i in matrix){
-				if(typeof(matrix[i]) == "number" && typeof(obj[i]) == "number" && obj[i] != matrix[i]) obj[i] = matrix[i];
-			}
-			return obj; // dojox.gfx.matrix.Matrix2D
-		},
-		invert: function(matrix){
-			// summary: inverts a 2D matrix
-			// matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix-like object to be inverted
-			var M = m.normalize(matrix),
-				D = M.xx * M.yy - M.xy * M.yx,
-				M = new m.Matrix2D({
-					xx: M.yy/D, xy: -M.xy/D,
-					yx: -M.yx/D, yy: M.xx/D,
-					dx: (M.xy * M.dy - M.yy * M.dx) / D,
-					dy: (M.yx * M.dx - M.xx * M.dy) / D
-				});
-			return M; // dojox.gfx.matrix.Matrix2D
-		},
-		_multiplyPoint: function(matrix, x, y){
-			// summary: applies a matrix to a point
-			// matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix object to be applied
-			// x: Number: an x coordinate of a point
-			// y: Number: a y coordinate of a point
-			return {x: matrix.xx * x + matrix.xy * y + matrix.dx, y: matrix.yx * x + matrix.yy * y + matrix.dy}; // dojox.gfx.Point
-		},
-		multiplyPoint: function(matrix, /* Number||Point */ a, /* Number, optional */ b){
-			// summary: applies a matrix to a point
-			// matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix object to be applied
-			// a: Number: an x coordinate of a point
-			// b: Number: a y coordinate of a point
-			var M = m.normalize(matrix);
-			if(typeof a == "number" && typeof b == "number"){
-				return m._multiplyPoint(M, a, b); // dojox.gfx.Point
-			}
-			// branch
-			// matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix object to be applied
-			// a: dojox.gfx.Point: a point
-			// b: null
-			return m._multiplyPoint(M, a.x, a.y); // dojox.gfx.Point
-		},
-		multiply: function(matrix){
-			// summary: combines matrices by multiplying them sequentially in the given order
-			// matrix: dojox.gfx.matrix.Matrix2D...: a 2D matrix-like object,
-			//		all subsequent arguments are matrix-like objects too
-			var M = m.normalize(matrix);
-			// combine matrices
-			for(var i = 1; i < arguments.length; ++i){
-				var l = M, r = m.normalize(arguments[i]);
-				M = new m.Matrix2D();
-				M.xx = l.xx * r.xx + l.xy * r.yx;
-				M.xy = l.xx * r.xy + l.xy * r.yy;
-				M.yx = l.yx * r.xx + l.yy * r.yx;
-				M.yy = l.yx * r.xy + l.yy * r.yy;
-				M.dx = l.xx * r.dx + l.xy * r.dy + l.dx;
-				M.dy = l.yx * r.dx + l.yy * r.dy + l.dy;
-			}
-			return M; // dojox.gfx.matrix.Matrix2D
-		},
-
-		// high level operations
-
-		_sandwich: function(matrix, x, y){
-			// summary: applies a matrix at a centrtal point
-			// matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix-like object, which is applied at a central point
-			// x: Number: an x component of the central point
-			// y: Number: a y component of the central point
-			return m.multiply(m.translate(x, y), matrix, m.translate(-x, -y)); // dojox.gfx.matrix.Matrix2D
-		},
-		scaleAt: function(a, b, c, d){
-			// summary: scales a picture using a specified point as a center of scaling
-			// description: Compare with dojox.gfx.matrix.scale().
-			// a: Number: a scaling factor used for the x coordinate
-			// b: Number: a scaling factor used for the y coordinate
-			// c: Number: an x component of a central point
-			// d: Number: a y component of a central point
-
-			// accepts several signatures:
-			//	1) uniform scale factor, Point
-			//	2) uniform scale factor, x, y
-			//	3) x scale, y scale, Point
-			//	4) x scale, y scale, x, y
-
-			switch(arguments.length){
-				case 4:
-					// a and b are scale factor components, c and d are components of a point
-					return m._sandwich(m.scale(a, b), c, d); // dojox.gfx.matrix.Matrix2D
-				case 3:
-					if(typeof c == "number"){
-						// branch
-						// a: Number: a uniform scaling factor used for both coordinates
-						// b: Number: an x component of a central point
-						// c: Number: a y component of a central point
-						// d: null
-						return m._sandwich(m.scale(a), b, c); // dojox.gfx.matrix.Matrix2D
-					}
-					// branch
-					// a: Number: a scaling factor used for the x coordinate
-					// b: Number: a scaling factor used for the y coordinate
-					// c: dojox.gfx.Point: a central point
-					// d: null
-					return m._sandwich(m.scale(a, b), c.x, c.y); // dojox.gfx.matrix.Matrix2D
-			}
-			// branch
-			// a: Number: a uniform scaling factor used for both coordinates
-			// b: dojox.gfx.Point: a central point
-			// c: null
-			// d: null
-			return m._sandwich(m.scale(a), b.x, b.y); // dojox.gfx.matrix.Matrix2D
-		},
-		rotateAt: function(angle, a, b){
-			// summary: rotates a picture using a specified point as a center of rotation
-			// description: Compare with dojox.gfx.matrix.rotate().
-			// angle: Number: an angle of rotation in radians (>0 for CW)
-			// a: Number: an x component of a central point
-			// b: Number: a y component of a central point
-
-			// accepts several signatures:
-			//	1) rotation angle in radians, Point
-			//	2) rotation angle in radians, x, y
-
-			if(arguments.length > 2){
-				return m._sandwich(m.rotate(angle), a, b); // dojox.gfx.matrix.Matrix2D
-			}
-
-			// branch
-			// angle: Number: an angle of rotation in radians (>0 for CCW)
-			// a: dojox.gfx.Point: a central point
-			// b: null
-			return m._sandwich(m.rotate(angle), a.x, a.y); // dojox.gfx.matrix.Matrix2D
-		},
-		rotategAt: function(degree, a, b){
-			// summary: rotates a picture using a specified point as a center of rotation
-			// description: Compare with dojox.gfx.matrix.rotateg().
-			// degree: Number: an angle of rotation in degrees (>0 for CW)
-			// a: Number: an x component of a central point
-			// b: Number: a y component of a central point
-
-			// accepts several signatures:
-			//	1) rotation angle in degrees, Point
-			//	2) rotation angle in degrees, x, y
-
-			if(arguments.length > 2){
-				return m._sandwich(m.rotateg(degree), a, b); // dojox.gfx.matrix.Matrix2D
-			}
-
-			// branch
-			// degree: Number: an angle of rotation in degrees (>0 for CCW)
-			// a: dojox.gfx.Point: a central point
-			// b: null
-			return m._sandwich(m.rotateg(degree), a.x, a.y); // dojox.gfx.matrix.Matrix2D
-		},
-		skewXAt: function(angle, a, b){
-			// summary: skews a picture along the x axis using a specified point as a center of skewing
-			// description: Compare with dojox.gfx.matrix.skewX().
-			// angle: Number: an skewing angle in radians
-			// a: Number: an x component of a central point
-			// b: Number: a y component of a central point
-
-			// accepts several signatures:
-			//	1) skew angle in radians, Point
-			//	2) skew angle in radians, x, y
-
-			if(arguments.length > 2){
-				return m._sandwich(m.skewX(angle), a, b); // dojox.gfx.matrix.Matrix2D
-			}
-
-			// branch
-			// angle: Number: an skewing angle in radians
-			// a: dojox.gfx.Point: a central point
-			// b: null
-			return m._sandwich(m.skewX(angle), a.x, a.y); // dojox.gfx.matrix.Matrix2D
-		},
-		skewXgAt: function(degree, a, b){
-			// summary: skews a picture along the x axis using a specified point as a center of skewing
-			// description: Compare with dojox.gfx.matrix.skewXg().
-			// degree: Number: an skewing angle in degrees
-			// a: Number: an x component of a central point
-			// b: Number: a y component of a central point
-
-			// accepts several signatures:
-			//	1) skew angle in degrees, Point
-			//	2) skew angle in degrees, x, y
-
-			if(arguments.length > 2){
-				return m._sandwich(m.skewXg(degree), a, b); // dojox.gfx.matrix.Matrix2D
-			}
-
-			// branch
-			// degree: Number: an skewing angle in degrees
-			// a: dojox.gfx.Point: a central point
-			// b: null
-			return m._sandwich(m.skewXg(degree), a.x, a.y); // dojox.gfx.matrix.Matrix2D
-		},
-		skewYAt: function(angle, a, b){
-			// summary: skews a picture along the y axis using a specified point as a center of skewing
-			// description: Compare with dojox.gfx.matrix.skewY().
-			// angle: Number: an skewing angle in radians
-			// a: Number: an x component of a central point
-			// b: Number: a y component of a central point
-
-			// accepts several signatures:
-			//	1) skew angle in radians, Point
-			//	2) skew angle in radians, x, y
-
-			if(arguments.length > 2){
-				return m._sandwich(m.skewY(angle), a, b); // dojox.gfx.matrix.Matrix2D
-			}
-
-			// branch
-			// angle: Number: an skewing angle in radians
-			// a: dojox.gfx.Point: a central point
-			// b: null
-			return m._sandwich(m.skewY(angle), a.x, a.y); // dojox.gfx.matrix.Matrix2D
-		},
-		skewYgAt: function(/* Number */ degree, /* Number||Point */ a, /* Number, optional */ b){
-			// summary: skews a picture along the y axis using a specified point as a center of skewing
-			// description: Compare with dojox.gfx.matrix.skewYg().
-			// degree: Number: an skewing angle in degrees
-			// a: Number: an x component of a central point
-			// b: Number: a y component of a central point
-
-			// accepts several signatures:
-			//	1) skew angle in degrees, Point
-			//	2) skew angle in degrees, x, y
-
-			if(arguments.length > 2){
-				return m._sandwich(m.skewYg(degree), a, b); // dojox.gfx.matrix.Matrix2D
-			}
-
-			// branch
-			// degree: Number: an skewing angle in degrees
-			// a: dojox.gfx.Point: a central point
-			// b: null
-			return m._sandwich(m.skewYg(degree), a.x, a.y); // dojox.gfx.matrix.Matrix2D
-		}
-
-		//TODO: rect-to-rect mapping, scale-to-fit (isotropic and anisotropic versions)
-
-	});
-})();
-
-// propagate Matrix2D up
-dojox.gfx.Matrix2D = dojox.gfx.matrix.Matrix2D;
-
-}
-
-if(!dojo._hasResource["dojox.gfx._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.gfx._base"] = true;
-dojo.provide("dojox.gfx._base");
-
-(function(){
-	var g = dojox.gfx, b = g._base;
-
-	// candidates for dojox.style (work on VML and SVG nodes)
-	g._hasClass = function(/*DomNode*/node, /*String*/classStr){
-		//	summary:
-		//		Returns whether or not the specified classes are a portion of the
-		//		class list currently applied to the node.
-		// return (new RegExp('(^|\\s+)'+classStr+'(\\s+|$)')).test(node.className)	// Boolean
-		var cls = node.getAttribute("className");
-		return cls && (" " + cls + " ").indexOf(" " + classStr + " ") >= 0;  // Boolean
-	}
-	g._addClass = function(/*DomNode*/node, /*String*/classStr){
-		//	summary:
-		//		Adds the specified classes to the end of the class list on the
-		//		passed node.
-		var cls = node.getAttribute("className") || "";
-		if(!cls || (" " + cls + " ").indexOf(" " + classStr + " ") < 0){
-			node.setAttribute("className", cls + (cls ? " " : "") + classStr);
-		}
-	}
-	g._removeClass = function(/*DomNode*/node, /*String*/classStr){
-		//	summary: Removes classes from node.
-		var cls = node.getAttribute("className");
-		if(cls){
-			node.setAttribute("className", cls.replace(new RegExp('(^|\\s+)' + classStr + '(\\s+|$)'), "$1$2"));
-		}
-	}
-
-	// candidate for dojox.html.metrics (dynamic font resize handler is not implemented here)
-
-	//	derived from Morris John's emResized measurer
-	b._getFontMeasurements = function(){
-		//	summary
-		//	Returns an object that has pixel equivilents of standard font size values.
-		var heights = {
-			'1em':0, '1ex':0, '100%':0, '12pt':0, '16px':0, 'xx-small':0, 'x-small':0,
-			'small':0, 'medium':0, 'large':0, 'x-large':0, 'xx-large':0
-		};
-
-		if(dojo.isIE){
-			//	we do a font-size fix if and only if one isn't applied already.
-			//	NOTE: If someone set the fontSize on the HTML Element, this will kill it.
-			dojo.doc.documentElement.style.fontSize="100%";
-		}
-
-		//	set up the measuring node.
-		var div=dojo.doc.createElement("div");
-		div.style.position="absolute";
-		div.style.left="-100px";
-		div.style.top="0";
-		div.style.width="30px";
-		div.style.height="1000em";
-		div.style.border="0";
-		div.style.margin="0";
-		div.style.padding="0";
-		div.style.outline="0";
-		div.style.lineHeight="1";
-		div.style.overflow="hidden";
-		dojo.body().appendChild(div);
-
-		//	do the measurements.
-		for(var p in heights){
-			div.style.fontSize = p;
-			heights[p] = Math.round(div.offsetHeight * 12/16) * 16/12 / 1000;
-		}
-
-		dojo.body().removeChild(div);
-		div = null;
-		return heights; 	//	object
-	};
-
-	var fontMeasurements = null;
-
-	b._getCachedFontMeasurements = function(recalculate){
-		if(recalculate || !fontMeasurements){
-			fontMeasurements = b._getFontMeasurements();
-		}
-		return fontMeasurements;
-	};
-
-	// candidate for dojox.html.metrics
-
-	var measuringNode = null, empty = {};
-	b._getTextBox = function(/* String */ text, /* Object */ style, /* String? */ className){
-		var m;
-		if(!measuringNode){
-			m = measuringNode = dojo.doc.createElement("div");
-			m.style.position = "absolute";
-			m.style.left = "-10000px";
-			m.style.top = "0";
-			dojo.body().appendChild(m);
-		}else{
-			m = measuringNode;
-		}
-		// reset styles
-		m.className = "";
-		m.style.border = "0";
-		m.style.margin = "0";
-		m.style.padding = "0";
-		m.style.outline = "0";
-		// set new style
-		if(arguments.length > 1 && style){
-			for(var i in style){
-				if(i in empty){ continue; }
-				m.style[i] = style[i];
-			}
-		}
-		// set classes
-		if(arguments.length > 2 && className){
-			m.className = className;
-		}
-		// take a measure
-		m.innerHTML = text;
-		return dojo.marginBox(m);
-	};
-
-	// candidate for dojo.dom
-
-	var uniqueId = 0;
-	b._getUniqueId = function(){
-		// summary: returns a unique string for use with any DOM element
-		var id;
-		do{
-			id = dojo._scopeName + "Unique" + (++uniqueId);
-		}while(dojo.byId(id));
-		return id;
-	};
-})();
-
-dojo.mixin(dojox.gfx, {
-	// summary: defines constants, prototypes, and utility functions
-
-	// default shapes, which are used to fill in missing parameters
-	defaultPath:     {type: "path",     path: ""},
-	defaultPolyline: {type: "polyline", points: []},
-	defaultRect:     {type: "rect",     x: 0, y: 0, width: 100, height: 100, r: 0},
-	defaultEllipse:  {type: "ellipse",  cx: 0, cy: 0, rx: 200, ry: 100},
-	defaultCircle:   {type: "circle",   cx: 0, cy: 0, r: 100},
-	defaultLine:     {type: "line",     x1: 0, y1: 0, x2: 100, y2: 100},
-	defaultImage:    {type: "image",    x: 0, y: 0, width: 0, height: 0, src: ""},
-	defaultText:     {type: "text",     x: 0, y: 0, text: "",
-		align: "start", decoration: "none", rotated: false, kerning: true },
-	defaultTextPath: {type: "textpath", text: "",
-		align: "start", decoration: "none", rotated: false, kerning: true },
-
-	// default geometric attributes
-	defaultStroke: {type: "stroke", color: "black", style: "solid", width: 1, cap: "butt", join: 4},
-	defaultLinearGradient: {type: "linear", x1: 0, y1: 0, x2: 100, y2: 100,
-		colors: [{offset: 0, color: "black"}, {offset: 1, color: "white"}]},
-	defaultRadialGradient: {type: "radial", cx: 0, cy: 0, r: 100,
-		colors: [{offset: 0, color: "black"}, {offset: 1, color: "white"}]},
-	defaultPattern: {type: "pattern", x: 0, y: 0, width: 0, height: 0, src: ""},
-	defaultFont: {type: "font", style: "normal", variant: "normal", weight: "normal",
-		size: "10pt", family: "serif"},
-
-	normalizeColor: function(/*Color*/ color){
-		// summary: converts any legal color representation to normalized dojo.Color object
-		return (color instanceof dojo.Color) ? color : new dojo.Color(color); // dojo.Color
-	},
-	normalizeParameters: function(existed, update){
-		// summary: updates an existing object with properties from an "update" object
-		// existed: Object: the "target" object to be updated
-		// update:  Object: the "update" object, whose properties will be used to update the existed object
-		if(update){
-			var empty = {};
-			for(var x in existed){
-				if(x in update && !(x in empty)){
-					existed[x] = update[x];
-				}
-			}
-		}
-		return existed;	// Object
-	},
-	makeParameters: function(defaults, update){
-		// summary: copies the original object, and all copied properties from the "update" object
-		// defaults: Object: the object to be cloned before updating
-		// update:   Object: the object, which properties are to be cloned during updating
-		if(!update) return dojo.clone(defaults);
-		var result = {};
-		for(var i in defaults){
-			if(!(i in result)){
-				result[i] = dojo.clone((i in update) ? update[i] : defaults[i]);
-			}
-		}
-		return result; // Object
-	},
-	formatNumber: function(x, addSpace){
-		// summary: converts a number to a string using a fixed notation
-		// x:			Number:		number to be converted
-		// addSpace:	Boolean?:	if it is true, add a space before a positive number
-		var val = x.toString();
-		if(val.indexOf("e") >= 0){
-			val = x.toFixed(4);
-		}else{
-			var point = val.indexOf(".");
-			if(point >= 0 && val.length - point > 5){
-				val = x.toFixed(4);
-			}
-		}
-		if(x < 0){
-			return val; // String
-		}
-		return addSpace ? " " + val : val; // String
-	},
-	// font operations
-	makeFontString: function(font){
-		// summary: converts a font object to a CSS font string
-		// font:	Object:	font object (see dojox.gfx.defaultFont)
-		return font.style + " " + font.variant + " " + font.weight + " " + font.size + " " + font.family; // Object
-	},
-	splitFontString: function(str){
-		// summary: converts a CSS font string to a font object
-		// str:		String:	a CSS font string
-		var font = dojo.clone(dojox.gfx.defaultFont);
-		var t = str.split(/\s+/);
-		do{
-			if(t.length < 5){ break; }
-			font.style  = t[0];
-			font.varian = t[1];
-			font.weight = t[2];
-			var i = t[3].indexOf("/");
-			font.size = i < 0 ? t[3] : t[3].substring(0, i);
-			var j = 4;
-			if(i < 0){
-				if(t[4] == "/"){
-					j = 6;
-					break;
-				}
-				if(t[4].substr(0, 1) == "/"){
-					j = 5;
-					break;
-				}
-			}
-			if(j + 3 > t.length){ break; }
-			font.size = t[j];
-			font.family = t[j + 1];
-		}while(false);
-		return font;	// Object
-	},
-	// length operations
-	cm_in_pt: 72 / 2.54,	// Number: points per centimeter
-	mm_in_pt: 7.2 / 2.54,	// Number: points per millimeter
-	px_in_pt: function(){
-		// summary: returns a number of pixels per point
-		return dojox.gfx._base._getCachedFontMeasurements()["12pt"] / 12;	// Number
-	},
-	pt2px: function(len){
-		// summary: converts points to pixels
-		// len: Number: a value in points
-		return len * dojox.gfx.px_in_pt();	// Number
-	},
-	px2pt: function(len){
-		// summary: converts pixels to points
-		// len: Number: a value in pixels
-		return len / dojox.gfx.px_in_pt();	// Number
-	},
-	normalizedLength: function(len) {
-		// summary: converts any length value to pixels
-		// len: String: a length, e.g., "12pc"
-		if(len.length == 0) return 0;
-		if(len.length > 2){
-			var px_in_pt = dojox.gfx.px_in_pt();
-			var val = parseFloat(len);
-			switch(len.slice(-2)){
-				case "px": return val;
-				case "pt": return val * px_in_pt;
-				case "in": return val * 72 * px_in_pt;
-				case "pc": return val * 12 * px_in_pt;
-				case "mm": return val * dojox.gfx.mm_in_pt * px_in_pt;
-				case "cm": return val * dojox.gfx.cm_in_pt * px_in_pt;
-			}
-		}
-		return parseFloat(len);	// Number
-	},
-
-	// a constant used to split a SVG/VML path into primitive components
-	pathVmlRegExp: /([A-Za-z]+)|(\d+(\.\d+)?)|(\.\d+)|(-\d+(\.\d+)?)|(-\.\d+)/g,
-	pathSvgRegExp: /([A-Za-z])|(\d+(\.\d+)?)|(\.\d+)|(-\d+(\.\d+)?)|(-\.\d+)/g,
-
-	equalSources: function(a, b){
-		// summary: compares event sources, returns true if they are equal
-		return a && b && a == b;
-	}
-});
-
-}
-
-if(!dojo._hasResource["dojox.gfx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.gfx"] = true;
-dojo.provide("dojox.gfx");
-
-
-
-
-dojo.loadInit(function(){
-	//Since loaderInit can be fired before any dojo.provide/require calls,
-	//make sure the dojox.gfx object exists and only run this logic if dojox.gfx.renderer
-	//has not been defined yet.
-	var gfx = dojo.getObject("dojox.gfx", true), sl, flag, match;
-	if(!gfx.renderer){
-		var renderers = (typeof dojo.config.gfxRenderer == "string" ?
-			dojo.config.gfxRenderer : "svg,vml,silverlight,canvas").split(",");
-
-		// mobile platform detection
-		// TODO: move to the base?
-
-		var ua = navigator.userAgent, iPhoneOsBuild = 0, androidVersion = 0;
-		if(dojo.isSafari >= 3){
-			// detect mobile version of WebKit starting with "version 3"
-
-			//	comprehensive iPhone test.  Have to figure out whether it's SVG or Canvas based on the build.
-			//	iPhone OS build numbers from en.wikipedia.org.
-			if(ua.indexOf("iPhone") >= 0 || ua.indexOf("iPod") >= 0){
-				//	grab the build out of this.  Expression is a little nasty because we want
-				//		to be sure we have the whole version string.
-				match = ua.match(/Version\/(\d(\.\d)?(\.\d)?)\sMobile\/([^\s]*)\s?/);
-				if(match){
-					//	grab the build out of the match.  Only use the first three because of specific builds.
-					iPhoneOsBuild = parseInt(match[4].substr(0,3), 16);
-				}
-			}
-		}
-		if(dojo.isWebKit){
-			// Android detection
-			if(!iPhoneOsBuild){
-				match = ua.match(/Android\s+(\d+\.\d+)/);
-				if(match){
-					androidVersion = parseFloat(match[1]);
-					// Android 1.0-1.1 doesn't support SVG but supports Canvas
-				}
-			}
-		}
-
-		for(var i = 0; i < renderers.length; ++i){
-			switch(renderers[i]){
-				case "svg":
-					//	iPhone OS builds greater than 5F1 should have SVG.
-					if(!dojo.isIE && (!iPhoneOsBuild || iPhoneOsBuild >= 0x5f1) && !androidVersion && !dojo.isAIR){
-						dojox.gfx.renderer = "svg";
-					}
-					break;
-				case "vml":
-					if(dojo.isIE){
-						dojox.gfx.renderer = "vml";
-					}
-					break;
-				case "silverlight":
-					try{
-						if(dojo.isIE){
-							sl = new ActiveXObject("AgControl.AgControl");
-							if(sl && sl.IsVersionSupported("1.0")){
-								flag = true;
-							}
-						}else{
-							if(navigator.plugins["Silverlight Plug-In"]){
-								flag = true;
-							}
-						}
-					}catch(e){
-						flag = false;
-					}finally{
-						sl = null;
-					}
-					if(flag){ dojox.gfx.renderer = "silverlight"; }
-					break;
-				case "canvas":
-					//TODO: need more comprehensive test for Canvas
-					if(!dojo.isIE){
-						dojox.gfx.renderer = "canvas";
-					}
-					break;
-			}
-			if(dojox.gfx.renderer){ break; }
-		}
-		if(dojo.config.isDebug){
-			
-		}
-	}
-});
-
-// include a renderer conditionally
-dojo.requireIf(dojox.gfx.renderer == "svg", "dojox.gfx.svg");
-dojo.requireIf(dojox.gfx.renderer == "vml", "dojox.gfx.vml");
-dojo.requireIf(dojox.gfx.renderer == "silverlight", "dojox.gfx.silverlight");
-dojo.requireIf(dojox.gfx.renderer == "canvas", "dojox.gfx.canvas");
-
-}
-
-if(!dojo._hasResource["dojox.lang.functional.lambda"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.lang.functional.lambda"] = true;
-dojo.provide("dojox.lang.functional.lambda");
-
-// This module adds high-level functions and related constructs:
-//	- anonymous functions built from the string
-
-// Acknoledgements:
-//	- lambda() is based on work by Oliver Steele 
-//		(http://osteele.com/sources/javascript/functional/functional.js)
-//		which was published under MIT License
-
-// Notes:
-//	- lambda() produces functions, which after the compilation step are 
-//		as fast as regular JS functions (at least theoretically).
-
-// Lambda input values:
-//	- returns functions unchanged
-//	- converts strings to functions
-//	- converts arrays to a functional composition
-
-(function(){
-	var df = dojox.lang.functional, lcache = {};
-
-	// split() is augmented on IE6 to ensure the uniform behavior
-	var split = "ab".split(/a*/).length > 1 ? String.prototype.split :
-			function(sep){
-				 var r = this.split.call(this, sep),
-					 m = sep.exec(this);
-				 if(m && m.index == 0){ r.unshift(""); }
-				 return r;
-			};
-			
-	var lambda = function(/*String*/ s){
-		var args = [], sects = split.call(s, /\s*->\s*/m);
-		if(sects.length > 1){
-			while(sects.length){
-				s = sects.pop();
-				args = sects.pop().split(/\s*,\s*|\s+/m);
-				if(sects.length){ sects.push("(function(" + args + "){return (" + s + ")})"); }
-			}
-		}else if(s.match(/\b_\b/)){
-			args = ["_"];
-		}else{
-			var l = s.match(/^\s*(?:[+*\/%&|\^\.=<>]|!=)/m),
-				r = s.match(/[+\-*\/%&|\^\.=<>!]\s*$/m);
-			if(l || r){
-				if(l){
-					args.push("$1");
-					s = "$1" + s;
-				}
-				if(r){
-					args.push("$2");
-					s = s + "$2";
-				}
-			}else{
-				// the point of the long regex below is to exclude all well-known 
-				// lower-case words from the list of potential arguments
-				var vars = s.
-					replace(/(?:\b[A-Z]|\.[a-zA-Z_$])[a-zA-Z_$\d]*|[a-zA-Z_$][a-zA-Z_$\d]*:|this|true|false|null|undefined|typeof|instanceof|in|delete|new|void|arguments|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape|dojo|dijit|dojox|window|document|'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"/g, "").
-					match(/([a-z_$][a-z_$\d]*)/gi) || [], t = {};
-				dojo.forEach(vars, function(v){
-					if(!(v in t)){
-						args.push(v);
-						t[v] = 1;
-					}
-				});
-			}
-		}
-		return {args: args, body: s};	// Object
-	};
-
-	var compose = function(/*Array*/ a){
-		return a.length ? 
-					function(){
-						var i = a.length - 1, x = df.lambda(a[i]).apply(this, arguments);
-						for(--i; i >= 0; --i){ x = df.lambda(a[i]).call(this, x); }
-						return x;
-					}
-				: 
-					// identity
-					function(x){ return x; };
-	};
-
-	dojo.mixin(df, {
-		// lambda
-		rawLambda: function(/*String*/ s){
-			// summary:
-			//		builds a function from a snippet, or array (composing),
-			//		returns an object describing the function; functions are
-			//		passed through unmodified.
-			// description:
-			//		This method is to normalize a functional representation (a
-			//		text snippet) to an object that contains an array of
-			//		arguments, and a body , which is used to calculate the
-			//		returning value.
-			return lambda(s);	// Object
-		},
-		buildLambda: function(/*String*/ s){
-			// summary:
-			//		builds a function from a snippet, returns a string, which
-			//		represents the function.
-			// description:
-			//		This method returns a textual representation of a function
-			//		built from the snippet. It is meant to be evaled in the
-			//		proper context, so local variables can be pulled from the
-			//		environment.
-			s = lambda(s);
-			return "function(" + s.args.join(",") + "){return (" + s.body + ");}";	// String
-		},
-		lambda: function(/*Function|String|Array*/ s){
-			// summary:
-			//		builds a function from a snippet, or array (composing),
-			//		returns a function object; functions are passed through
-			//		unmodified.
-			// description:
-			//		This method is used to normalize a functional
-			//		representation (a text snippet, an array, or a function) to
-			//		a function object.
-			if(typeof s == "function"){ return s; }
-			if(s instanceof Array){ return compose(s); }
-			if(s in lcache){ return lcache[s]; }
-			s = lambda(s);
-			return lcache[s] = new Function(s.args, "return (" + s.body + ");");	// Function
-		},
-		clearLambdaCache: function(){
-			// summary:
-			//		clears internal cache of lambdas
-			lcache = {};
-		}
-	});
-})();
-
-}
-
-if(!dojo._hasResource["dojox.lang.functional.array"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.lang.functional.array"] = true;
-dojo.provide("dojox.lang.functional.array");
-
-
-
-// This module adds high-level functions and related constructs:
-//	- array-processing functions similar to standard JS functions
-
-// Notes:
-//	- this module provides JS standard methods similar to high-level functions in dojo/_base/array.js: 
-//		forEach, map, filter, every, some
-
-// Defined methods:
-//	- take any valid lambda argument as the functional argument
-//	- operate on dense arrays
-//	- take a string as the array argument
-//	- take an iterator objects as the array argument
-
-(function(){
-	var d = dojo, df = dojox.lang.functional, empty = {};
-
-	d.mixin(df, {
-		// JS 1.6 standard array functions, which can take a lambda as a parameter.
-		// Consider using dojo._base.array functions, if you don't need the lambda support.
-		filter: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
-			// summary: creates a new array with all elements that pass the test 
-			//	implemented by the provided function.
-			if(typeof a == "string"){ a = a.split(""); }
-			o = o || d.global; f = df.lambda(f);
-			var t = [], v, i, n;
-			if(d.isArray(a)){
-				// array
-				for(i = 0, n = a.length; i < n; ++i){
-					v = a[i];
-					if(f.call(o, v, i, a)){ t.push(v); }
-				}
-			}else if(typeof a.hasNext == "function" && typeof a.next == "function"){
-				// iterator
-				for(i = 0; a.hasNext();){
-					v = a.next();
-					if(f.call(o, v, i++, a)){ t.push(v); }
-				}
-			}else{
-				// object/dictionary
-				for(i in a){
-					if(!(i in empty)){
-						v = a[i];
-						if(f.call(o, v, i, a)){ t.push(v); }
-					}
-				}
-			}
-			return t;	// Array
-		},
-		forEach: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
-			// summary: executes a provided function once per array element.
-			if(typeof a == "string"){ a = a.split(""); }
-			o = o || d.global; f = df.lambda(f);
-			var i, n;
-			if(d.isArray(a)){
-				// array
-				for(i = 0, n = a.length; i < n; f.call(o, a[i], i, a), ++i);
-			}else if(typeof a.hasNext == "function" && typeof a.next == "function"){
-				// iterator
-				for(i = 0; a.hasNext(); f.call(o, a.next(), i++, a));
-			}else{
-				// object/dictionary
-				for(i in a){
-					if(!(i in empty)){
-						f.call(o, a[i], i, a);
-					}
-				}
-			}
-			return o;	// Object
-		},
-		map: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
-			// summary: creates a new array with the results of calling 
-			//	a provided function on every element in this array.
-			if(typeof a == "string"){ a = a.split(""); }
-			o = o || d.global; f = df.lambda(f);
-			var t, n, i;
-			if(d.isArray(a)){
-				// array
-				t = new Array(n = a.length);
-				for(i = 0; i < n; t[i] = f.call(o, a[i], i, a), ++i);
-			}else if(typeof a.hasNext == "function" && typeof a.next == "function"){
-				// iterator
-				t = [];
-				for(i = 0; a.hasNext(); t.push(f.call(o, a.next(), i++, a)));
-			}else{
-				// object/dictionary
-				t = [];
-				for(i in a){
-					if(!(i in empty)){
-						t.push(f.call(o, a[i], i, a));
-					}
-				}
-			}
-			return t;	// Array
-		},
-		every: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
-			// summary: tests whether all elements in the array pass the test 
-			//	implemented by the provided function.
-			if(typeof a == "string"){ a = a.split(""); }
-			o = o || d.global; f = df.lambda(f);
-			var i, n;
-			if(d.isArray(a)){
-				// array
-				for(i = 0, n = a.length; i < n; ++i){
-					if(!f.call(o, a[i], i, a)){
-						return false;	// Boolean
-					}
-				}
-			}else if(typeof a.hasNext == "function" && typeof a.next == "function"){
-				// iterator
-				for(i = 0; a.hasNext();){
-					if(!f.call(o, a.next(), i++, a)){
-						return false;	// Boolean
-					}
-				}
-			}else{
-				// object/dictionary
-				for(i in a){
-					if(!(i in empty)){
-						if(!f.call(o, a[i], i, a)){
-							return false;	// Boolean
-						}
-					}
-				}
-			}
-			return true;	// Boolean
-		},
-		some: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
-			// summary: tests whether some element in the array passes the test 
-			//	implemented by the provided function.
-			if(typeof a == "string"){ a = a.split(""); }
-			o = o || d.global; f = df.lambda(f);
-			var i, n;
-			if(d.isArray(a)){
-				// array
-				for(i = 0, n = a.length; i < n; ++i){
-					if(f.call(o, a[i], i, a)){
-						return true;	// Boolean
-					}
-				}
-			}else if(typeof a.hasNext == "function" && typeof a.next == "function"){
-				// iterator
-				for(i = 0; a.hasNext();){
-					if(f.call(o, a.next(), i++, a)){
-						return true;	// Boolean
-					}
-				}
-			}else{
-				// object/dictionary
-				for(i in a){
-					if(!(i in empty)){
-						if(f.call(o, a[i], i, a)){
-							return true;	// Boolean
-						}
-					}
-				}
-			}
-			return false;	// Boolean
-		}
-	});
-})();
-
-}
-
-if(!dojo._hasResource["dojox.lang.functional.object"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.lang.functional.object"] = true;
-dojo.provide("dojox.lang.functional.object");
-
-
-
-// This module adds high-level functions and related constructs:
-//	- object/dictionary helpers
-
-// Defined methods:
-//	- take any valid lambda argument as the functional argument
-//	- skip all attributes that are present in the empty object 
-//		(IE and/or 3rd-party libraries).
-
-(function(){
-	var d = dojo, df = dojox.lang.functional, empty = {};
-
-	d.mixin(df, {
-		// object helpers
-		keys: function(/*Object*/ obj){
-			// summary: returns an array of all keys in the object
-			var t = [];
-			for(var i in obj){
-				if(!(i in empty)){
-					t.push(i);
-				}
-			}
-			return	t; // Array
-		},
-		values: function(/*Object*/ obj){
-			// summary: returns an array of all values in the object
-			var t = [];
-			for(var i in obj){
-				if(!(i in empty)){
-					t.push(obj[i]);
-				}
-			}
-			return	t; // Array
-		},
-		filterIn: function(/*Object*/ obj, /*Function|String|Array*/ f, /*Object?*/ o){
-			// summary: creates new object with all attributes that pass the test 
-			//	implemented by the provided function.
-			o = o || d.global; f = df.lambda(f);
-			var t = {}, v, i;
-			for(i in obj){
-				if(!(i in empty)){
-					v = obj[i];
-					if(f.call(o, v, i, obj)){ t[i] = v; }
-				}
-			}
-			return t;	// Object
-		},
-		forIn: function(/*Object*/ obj, /*Function|String|Array*/ f, /*Object?*/ o){
-			// summary: iterates over all object attributes.
-			o = o || d.global; f = df.lambda(f);
-			for(var i in obj){
-				if(!(i in empty)){
-					f.call(o, obj[i], i, obj);
-				}
-			}
-			return o;	// Object
-		},
-		mapIn: function(/*Object*/ obj, /*Function|String|Array*/ f, /*Object?*/ o){
-			// summary: creates new object with the results of calling 
-			//	a provided function on every attribute in this object.
-			o = o || d.global; f = df.lambda(f);
-			var t = {}, i;
-			for(i in obj){
-				if(!(i in empty)){
-					t[i] = f.call(o, obj[i], i, obj);
-				}
-			}
-			return t;	// Object
-		}
-	});
-})();
-
-}
-
-if(!dojo._hasResource["dojox.lang.functional"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.lang.functional"] = true;
-dojo.provide("dojox.lang.functional");
-
-
-
-
-
-}
-
-if(!dojo._hasResource["dojox.lang.functional.fold"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.lang.functional.fold"] = true;
-dojo.provide("dojox.lang.functional.fold");
-
-
-
-// This module adds high-level functions and related constructs:
-//	- "fold" family of functions
-
-// Notes:
-//	- missing high-level functions are provided with the compatible API: 
-//		foldl, foldl1, foldr, foldr1
-//	- missing JS standard functions are provided with the compatible API: 
-//		reduce, reduceRight
-//	- the fold's counterpart: unfold
-
-// Defined methods:
-//	- take any valid lambda argument as the functional argument
-//	- operate on dense arrays
-//	- take a string as the array argument
-//	- take an iterator objects as the array argument (only foldl, foldl1, and reduce)
-
-(function(){
-	var d = dojo, df = dojox.lang.functional, empty = {};
-
-	d.mixin(df, {
-		// classic reduce-class functions
-		foldl: function(/*Array|String|Object*/ a, /*Function*/ f, /*Object*/ z, /*Object?*/ o){
-			// summary: repeatedly applies a binary function to an array from left
-			//	to right using a seed value as a starting point; returns the final
-			//	value.
-			if(typeof a == "string"){ a = a.split(""); }
-			o = o || d.global; f = df.lambda(f);
-			var i, n;
-			if(d.isArray(a)){
-				// array
-				for(i = 0, n = a.length; i < n; z = f.call(o, z, a[i], i, a), ++i);
-			}else if(typeof a.hasNext == "function" && typeof a.next == "function"){
-				// iterator
-				for(i = 0; a.hasNext(); z = f.call(o, z, a.next(), i++, a));
-			}else{
-				// object/dictionary
-				for(i in a){
-					if(!(i in empty)){
-						z = f.call(o, z, a[i], i, a);
-					}
-				}
-			}
-			return z;	// Object
-		},
-		foldl1: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
-			// summary: repeatedly applies a binary function to an array from left
-			//	to right; returns the final value.
-			if(typeof a == "string"){ a = a.split(""); }
-			o = o || d.global; f = df.lambda(f);
-			var z, i, n;
-			if(d.isArray(a)){
-				// array
-				z = a[0];
-				for(i = 1, n = a.length; i < n; z = f.call(o, z, a[i], i, a), ++i);
-			}else if(typeof a.hasNext == "function" && typeof a.next == "function"){
-				// iterator
-				if(a.hasNext()){
-					z = a.next();
-					for(i = 1; a.hasNext(); z = f.call(o, z, a.next(), i++, a));
-				}
-			}else{
-				// object/dictionary
-				var first = true;
-				for(i in a){
-					if(!(i in empty)){
-						if(first){
-							z = a[i];
-							first = false;
-						}else{
-							z = f.call(o, z, a[i], i, a);
-						}
-					}
-				}
-			}
-			return z;	// Object
-		},
-		foldr: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object*/ z, /*Object?*/ o){
-			// summary: repeatedly applies a binary function to an array from right
-			//	to left using a seed value as a starting point; returns the final 
-			//	value.
-			if(typeof a == "string"){ a = a.split(""); }
-			o = o || d.global; f = df.lambda(f);
-			for(var i = a.length; i > 0; --i, z = f.call(o, z, a[i], i, a));
-			return z;	// Object
-		},
-		foldr1: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
-			// summary: repeatedly applies a binary function to an array from right
-			//	to left; returns the final value.
-			if(typeof a == "string"){ a = a.split(""); }
-			o = o || d.global; f = df.lambda(f);
-			var n = a.length, z = a[n - 1], i = n - 1;
-			for(; i > 0; --i, z = f.call(o, z, a[i], i, a));
-			return z;	// Object
-		},
-		// JS 1.8 standard array functions, which can take a lambda as a parameter.
-		reduce: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ z){
-			// summary: apply a function simultaneously against two values of the array
-			//	(from left-to-right) as to reduce it to a single value.
-			return arguments.length < 3 ? df.foldl1(a, f) : df.foldl(a, f, z);	// Object
-		},
-		reduceRight: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ z){
-			// summary: apply a function simultaneously against two values of the array
-			//	(from right-to-left) as to reduce it to a single value.
-			return arguments.length < 3 ? df.foldr1(a, f) : df.foldr(a, f, z);	// Object
-		},
-		// the fold's counterpart: unfold
-		unfold: function(/*Function|String|Array*/ pr, /*Function|String|Array*/ f,
-						/*Function|String|Array*/ g, /*Object*/ z, /*Object?*/ o){
-			// summary: builds an array by unfolding a value
-			o = o || d.global; f = df.lambda(f); g = df.lambda(g); pr = df.lambda(pr);
-			var t = [];
-			for(; !pr.call(o, z); t.push(f.call(o, z)), z = g.call(o, z));
-			return t;	// Array
-		}
-	});
-})();
-
-}
-
-if(!dojo._hasResource["dojox.lang.functional.reversed"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.lang.functional.reversed"] = true;
-dojo.provide("dojox.lang.functional.reversed");
-
-
-
-// This module adds high-level functions and related constructs:
-//	- reversed versions of array-processing functions similar to standard JS functions
-
-// Notes:
-//	- this module provides reversed versions of standard array-processing functions: 
-//		forEachRev, mapRev, filterRev
-
-// Defined methods:
-//	- take any valid lambda argument as the functional argument
-//	- operate on dense arrays
-//	- take a string as the array argument
-
-(function(){
-	var d = dojo, df = dojox.lang.functional;
-
-	d.mixin(df, {
-		// JS 1.6 standard array functions, which can take a lambda as a parameter.
-		// Consider using dojo._base.array functions, if you don't need the lambda support.
-		filterRev: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
-			// summary: creates a new array with all elements that pass the test 
-			//	implemented by the provided function.
-			if(typeof a == "string"){ a = a.split(""); }
-			o = o || d.global; f = df.lambda(f);
-			var t = [], v, i = a.length - 1;
-			for(; i >= 0; --i){
-				v = a[i];
-				if(f.call(o, v, i, a)){ t.push(v); }
-			}
-			return t;	// Array
-		},
-		forEachRev: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
-			// summary: executes a provided function once per array element.
-			if(typeof a == "string"){ a = a.split(""); }
-			o = o || d.global; f = df.lambda(f);
-			for(var i = a.length - 1; i >= 0; f.call(o, a[i], i, a), --i);
-		},
-		mapRev: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
-			// summary: creates a new array with the results of calling 
-			//	a provided function on every element in this array.
-			if(typeof a == "string"){ a = a.split(""); }
-			o = o || d.global; f = df.lambda(f);
-			var n = a.length, t = new Array(n), i = n - 1, j = 0;
-			for(; i >= 0; t[j++] = f.call(o, a[i], i, a), --i);
-			return t;	// Array
-		},
-		everyRev: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
-			// summary: tests whether all elements in the array pass the test 
-			//	implemented by the provided function.
-			if(typeof a == "string"){ a = a.split(""); }
-			o = o || d.global; f = df.lambda(f);
-			for(var i = a.length - 1; i >= 0; --i){
-				if(!f.call(o, a[i], i, a)){
-					return false;	// Boolean
-				}
-			}
-			return true;	// Boolean
-		},
-		someRev: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
-			// summary: tests whether some element in the array passes the test 
-			//	implemented by the provided function.
-			if(typeof a == "string"){ a = a.split(""); }
-			o = o || d.global; f = df.lambda(f);
-			for(var i = a.length - 1; i >= 0; --i){
-				if(f.call(o, a[i], i, a)){
-					return true;	// Boolean
-				}
-			}
-			return false;	// Boolean
-		}
-	});
-})();
-
-}
-
-if(!dojo._hasResource["dojo.colors"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.colors"] = true;
-dojo.provide("dojo.colors");
-
-//TODO: this module appears to break naming conventions
-
-/*=====
-dojo.colors = {
-	// summary: Color utilities
-}
-=====*/
-
-(function(){
-	// this is a standard conversion prescribed by the CSS3 Color Module
-	var hue2rgb = function(m1, m2, h){
-		if(h < 0){ ++h; }
-		if(h > 1){ --h; }
-		var h6 = 6 * h;
-		if(h6 < 1){ return m1 + (m2 - m1) * h6; }
-		if(2 * h < 1){ return m2; }
-		if(3 * h < 2){ return m1 + (m2 - m1) * (2 / 3 - h) * 6; }
-		return m1;
-	};
-	
-	dojo.colorFromRgb = function(/*String*/ color, /*dojo.Color?*/ obj){
-		// summary:
-		//		get rgb(a) array from css-style color declarations
-		// description:
-		//		this function can handle all 4 CSS3 Color Module formats: rgb,
-		//		rgba, hsl, hsla, including rgb(a) with percentage values.
-		var m = color.toLowerCase().match(/^(rgba?|hsla?)\(([\s\.\-,%0-9]+)\)/);
-		if(m){
-			var c = m[2].split(/\s*,\s*/), l = c.length, t = m[1], a;
-			if((t == "rgb" && l == 3) || (t == "rgba" && l == 4)){
-				var r = c[0];
-				if(r.charAt(r.length - 1) == "%"){
-					// 3 rgb percentage values
-					a = dojo.map(c, function(x){
-						return parseFloat(x) * 2.56;
-					});
-					if(l == 4){ a[3] = c[3]; }
-					return dojo.colorFromArray(a, obj);	// dojo.Color
-				}
-				return dojo.colorFromArray(c, obj);	// dojo.Color
-			}
-			if((t == "hsl" && l == 3) || (t == "hsla" && l == 4)){
-				// normalize hsl values
-				var H = ((parseFloat(c[0]) % 360) + 360) % 360 / 360,
-					S = parseFloat(c[1]) / 100,
-					L = parseFloat(c[2]) / 100,
-					// calculate rgb according to the algorithm 
-					// recommended by the CSS3 Color Module 
-					m2 = L <= 0.5 ? L * (S + 1) : L + S - L * S, 
-					m1 = 2 * L - m2;
-				a = [
-					hue2rgb(m1, m2, H + 1 / 3) * 256,
-					hue2rgb(m1, m2, H) * 256,
-					hue2rgb(m1, m2, H - 1 / 3) * 256,
-					1
-				];
-				if(l == 4){ a[3] = c[3]; }
-				return dojo.colorFromArray(a, obj);	// dojo.Color
-			}
-		}
-		return null;	// dojo.Color
-	};
-	
-	var confine = function(c, low, high){
-		// summary:
-		//		sanitize a color component by making sure it is a number,
-		//		and clamping it to valid values
-		c = Number(c);
-		return isNaN(c) ? high : c < low ? low : c > high ? high : c;	// Number
-	};
-	
-	dojo.Color.prototype.sanitize = function(){
-		// summary: makes sure that the object has correct attributes
-		var t = this;
-		t.r = Math.round(confine(t.r, 0, 255));
-		t.g = Math.round(confine(t.g, 0, 255));
-		t.b = Math.round(confine(t.b, 0, 255));
-		t.a = confine(t.a, 0, 1);
-		return this;	// dojo.Color
-	};
-})();
-
-
-dojo.colors.makeGrey = function(/*Number*/ g, /*Number?*/ a){
-	// summary: creates a greyscale color with an optional alpha
-	return dojo.colorFromArray([g, g, g, a]);
-};
-
-// mixin all CSS3 named colors not already in _base, along with SVG 1.0 variant spellings
-dojo.mixin(dojo.Color.named, {
-	aliceblue:	[240,248,255],
-	antiquewhite:	[250,235,215],
-	aquamarine:	[127,255,212],
-	azure:	[240,255,255],
-	beige:	[245,245,220],
-	bisque:	[255,228,196],
-	blanchedalmond:	[255,235,205],
-	blueviolet:	[138,43,226],
-	brown:	[165,42,42],
-	burlywood:	[222,184,135],
-	cadetblue:	[95,158,160],
-	chartreuse:	[127,255,0],
-	chocolate:	[210,105,30],
-	coral:	[255,127,80],
-	cornflowerblue:	[100,149,237],
-	cornsilk:	[255,248,220],
-	crimson:	[220,20,60],
-	cyan:	[0,255,255],
-	darkblue:	[0,0,139],
-	darkcyan:	[0,139,139],
-	darkgoldenrod:	[184,134,11],
-	darkgray:	[169,169,169],
-	darkgreen:	[0,100,0],
-	darkgrey:	[169,169,169],
-	darkkhaki:	[189,183,107],
-	darkmagenta:	[139,0,139],
-	darkolivegreen:	[85,107,47],
-	darkorange:	[255,140,0],
-	darkorchid:	[153,50,204],
-	darkred:	[139,0,0],
-	darksalmon:	[233,150,122],
-	darkseagreen:	[143,188,143],
-	darkslateblue:	[72,61,139],
-	darkslategray:	[47,79,79],
-	darkslategrey:	[47,79,79],
-	darkturquoise:	[0,206,209],
-	darkviolet:	[148,0,211],
-	deeppink:	[255,20,147],
-	deepskyblue:	[0,191,255],
-	dimgray:	[105,105,105],
-	dimgrey:	[105,105,105],
-	dodgerblue:	[30,144,255],
-	firebrick:	[178,34,34],
-	floralwhite:	[255,250,240],
-	forestgreen:	[34,139,34],
-	gainsboro:	[220,220,220],
-	ghostwhite:	[248,248,255],
-	gold:	[255,215,0],
-	goldenrod:	[218,165,32],
-	greenyellow:	[173,255,47],
-	grey:	[128,128,128],
-	honeydew:	[240,255,240],
-	hotpink:	[255,105,180],
-	indianred:	[205,92,92],
-	indigo:	[75,0,130],
-	ivory:	[255,255,240],
-	khaki:	[240,230,140],
-	lavender:	[230,230,250],
-	lavenderblush:	[255,240,245],
-	lawngreen:	[124,252,0],
-	lemonchiffon:	[255,250,205],
-	lightblue:	[173,216,230],
-	lightcoral:	[240,128,128],
-	lightcyan:	[224,255,255],
-	lightgoldenrodyellow:	[250,250,210],
-	lightgray:	[211,211,211],
-	lightgreen:	[144,238,144],
-	lightgrey:	[211,211,211],
-	lightpink:	[255,182,193],
-	lightsalmon:	[255,160,122],
-	lightseagreen:	[32,178,170],
-	lightskyblue:	[135,206,250],
-	lightslategray:	[119,136,153],
-	lightslategrey:	[119,136,153],
-	lightsteelblue:	[176,196,222],
-	lightyellow:	[255,255,224],
-	limegreen:	[50,205,50],
-	linen:	[250,240,230],
-	magenta:	[255,0,255],
-	mediumaquamarine:	[102,205,170],
-	mediumblue:	[0,0,205],
-	mediumorchid:	[186,85,211],
-	mediumpurple:	[147,112,219],
-	mediumseagreen:	[60,179,113],
-	mediumslateblue:	[123,104,238],
-	mediumspringgreen:	[0,250,154],
-	mediumturquoise:	[72,209,204],
-	mediumvioletred:	[199,21,133],
-	midnightblue:	[25,25,112],
-	mintcream:	[245,255,250],
-	mistyrose:	[255,228,225],
-	moccasin:	[255,228,181],
-	navajowhite:	[255,222,173],
-	oldlace:	[253,245,230],
-	olivedrab:	[107,142,35],
-	orange:	[255,165,0],
-	orangered:	[255,69,0],
-	orchid:	[218,112,214],
-	palegoldenrod:	[238,232,170],
-	palegreen:	[152,251,152],
-	paleturquoise:	[175,238,238],
-	palevioletred:	[219,112,147],
-	papayawhip:	[255,239,213],
-	peachpuff:	[255,218,185],
-	peru:	[205,133,63],
-	pink:	[255,192,203],
-	plum:	[221,160,221],
-	powderblue:	[176,224,230],
-	rosybrown:	[188,143,143],
-	royalblue:	[65,105,225],
-	saddlebrown:	[139,69,19],
-	salmon:	[250,128,114],
-	sandybrown:	[244,164,96],
-	seagreen:	[46,139,87],
-	seashell:	[255,245,238],
-	sienna:	[160,82,45],
-	skyblue:	[135,206,235],
-	slateblue:	[106,90,205],
-	slategray:	[112,128,144],
-	slategrey:	[112,128,144],
-	snow:	[255,250,250],
-	springgreen:	[0,255,127],
-	steelblue:	[70,130,180],
-	tan:	[210,180,140],
-	thistle:	[216,191,216],
-	tomato:	[255,99,71],
-	transparent: [0, 0, 0, 0],
-	turquoise:	[64,224,208],
-	violet:	[238,130,238],
-	wheat:	[245,222,179],
-	whitesmoke:	[245,245,245],
-	yellowgreen:	[154,205,50]
-});
-
-}
-
-if(!dojo._hasResource["dojox.color._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.color._base"] = true;
-dojo.provide("dojox.color._base");
-
-
-//	alias all the dojo.Color mechanisms
-dojox.color.Color=dojo.Color;
-dojox.color.blend=dojo.blendColors;
-dojox.color.fromRgb=dojo.colorFromRgb;
-dojox.color.fromHex=dojo.colorFromHex;
-dojox.color.fromArray=dojo.colorFromArray;
-dojox.color.fromString=dojo.colorFromString;
-
-//	alias the dojo.colors mechanisms
-dojox.color.greyscale=dojo.colors.makeGrey;
-
-//	static methods
-dojo.mixin(dojox.color, {
-	fromCmy: function(/* Object|Array|int */cyan, /*int*/magenta, /*int*/yellow){
-		//	summary
-		//	Create a dojox.color.Color from a CMY defined color.
-		//	All colors should be expressed as 0-100 (percentage)
-
-		if(dojo.isArray(cyan)){
-			magenta=cyan[1], yellow=cyan[2], cyan=cyan[0];
-		} else if(dojo.isObject(cyan)){
-			magenta=cyan.m, yellow=cyan.y, cyan=cyan.c;
-		}
-		cyan/=100, magenta/=100, yellow/=100;
-
-		var r=1-cyan, g=1-magenta, b=1-yellow;
-		return new dojox.color.Color({ r:Math.round(r*255), g:Math.round(g*255), b:Math.round(b*255) });	//	dojox.color.Color
-	},
-
-	fromCmyk: function(/* Object|Array|int */cyan, /*int*/magenta, /*int*/yellow, /*int*/black){
-		//	summary
-		//	Create a dojox.color.Color from a CMYK defined color.
-		//	All colors should be expressed as 0-100 (percentage)
-
-		if(dojo.isArray(cyan)){
-			magenta=cyan[1], yellow=cyan[2], black=cyan[3], cyan=cyan[0];
-		} else if(dojo.isObject(cyan)){
-			magenta=cyan.m, yellow=cyan.y, black=cyan.b, cyan=cyan.c;
-		}
-		cyan/=100, magenta/=100, yellow/=100, black/=100;
-		var r,g,b;
-		r = 1-Math.min(1, cyan*(1-black)+black);
-		g = 1-Math.min(1, magenta*(1-black)+black);
-		b = 1-Math.min(1, yellow*(1-black)+black);
-		return new dojox.color.Color({ r:Math.round(r*255), g:Math.round(g*255), b:Math.round(b*255) });	//	dojox.color.Color
-	},
-	
-	fromHsl: function(/* Object|Array|int */hue, /* int */saturation, /* int */luminosity){
-		//	summary
-		//	Create a dojox.color.Color from an HSL defined color.
-		//	hue from 0-359 (degrees), saturation and luminosity 0-100.
-
-		if(dojo.isArray(hue)){
-			saturation=hue[1], luminosity=hue[2], hue=hue[0];
-		} else if(dojo.isObject(hue)){
-			saturation=hue.s, luminosity=hue.l, hue=hue.h;
-		}
-		saturation/=100;
-		luminosity/=100;
-
-		while(hue<0){ hue+=360; }
-		while(hue>=360){ hue-=360; }
-		
-		var r, g, b;
-		if(hue<120){
-			r=(120-hue)/60, g=hue/60, b=0;
-		} else if (hue<240){
-			r=0, g=(240-hue)/60, b=(hue-120)/60;
-		} else {
-			r=(hue-240)/60, g=0, b=(360-hue)/60;
-		}
-		
-		r=2*saturation*Math.min(r, 1)+(1-saturation);
-		g=2*saturation*Math.min(g, 1)+(1-saturation);
-		b=2*saturation*Math.min(b, 1)+(1-saturation);
-		if(luminosity<0.5){
-			r*=luminosity, g*=luminosity, b*=luminosity;
-		}else{
-			r=(1-luminosity)*r+2*luminosity-1;
-			g=(1-luminosity)*g+2*luminosity-1;
-			b=(1-luminosity)*b+2*luminosity-1;
-		}
-		return new dojox.color.Color({ r:Math.round(r*255), g:Math.round(g*255), b:Math.round(b*255) });	//	dojox.color.Color
-	},
-	
-	fromHsv: function(/* Object|Array|int */hue, /* int */saturation, /* int */value){
-		//	summary
-		//	Create a dojox.color.Color from an HSV defined color.
-		//	hue from 0-359 (degrees), saturation and value 0-100.
-
-		if(dojo.isArray(hue)){
-			saturation=hue[1], value=hue[2], hue=hue[0];
-		} else if (dojo.isObject(hue)){
-			saturation=hue.s, value=hue.v, hue=hue.h;
-		}
-		
-		if(hue==360){ hue=0; }
-		saturation/=100;
-		value/=100;
-		
-		var r, g, b;
-		if(saturation==0){
-			r=value, b=value, g=value;
-		}else{
-			var hTemp=hue/60, i=Math.floor(hTemp), f=hTemp-i;
-			var p=value*(1-saturation);
-			var q=value*(1-(saturation*f));
-			var t=value*(1-(saturation*(1-f)));
-			switch(i){
-				case 0:{ r=value, g=t, b=p; break; }
-				case 1:{ r=q, g=value, b=p; break; }
-				case 2:{ r=p, g=value, b=t; break; }
-				case 3:{ r=p, g=q, b=value; break; }
-				case 4:{ r=t, g=p, b=value; break; }
-				case 5:{ r=value, g=p, b=q; break; }
-			}
-		}
-		return new dojox.color.Color({ r:Math.round(r*255), g:Math.round(g*255), b:Math.round(b*255) });	//	dojox.color.Color
-	}
-});
-
-//	Conversions directly on dojox.color.Color
-dojo.extend(dojox.color.Color, {
-	toCmy: function(){
-		//	summary
-		//	Convert this Color to a CMY definition.
-		var cyan=1-(this.r/255), magenta=1-(this.g/255), yellow=1-(this.b/255);
-		return { c:Math.round(cyan*100), m:Math.round(magenta*100), y:Math.round(yellow*100) };		//	Object
-	},
-	
-	toCmyk: function(){
-		//	summary
-		//	Convert this Color to a CMYK definition.
-		var cyan, magenta, yellow, black;
-		var r=this.r/255, g=this.g/255, b=this.b/255;
-		black = Math.min(1-r, 1-g, 1-b);
-		cyan = (1-r-black)/(1-black);
-		magenta = (1-g-black)/(1-black);
-		yellow = (1-b-black)/(1-black);
-		return { c:Math.round(cyan*100), m:Math.round(magenta*100), y:Math.round(yellow*100), b:Math.round(black*100) };	//	Object
-	},
-	
-	toHsl: function(){
-		//	summary
-		//	Convert this Color to an HSL definition.
-		var r=this.r/255, g=this.g/255, b=this.b/255;
-		var min = Math.min(r, b, g), max = Math.max(r, g, b);
-		var delta = max-min;
-		var h=0, s=0, l=(min+max)/2;
-		if(l>0 && l<1){
-			s = delta/((l<0.5)?(2*l):(2-2*l));
-		}
-		if(delta>0){
-			if(max==r && max!=g){
-				h+=(g-b)/delta;
-			}
-			if(max==g && max!=b){
-				h+=(2+(b-r)/delta);
-			}
-			if(max==b && max!=r){
-				h+=(4+(r-g)/delta);
-			}
-			h*=60;
-		}
-		return { h:h, s:Math.round(s*100), l:Math.round(l*100) };	//	Object
-	},
-
-	toHsv: function(){
-		//	summary
-		//	Convert this Color to an HSV definition.
-		var r=this.r/255, g=this.g/255, b=this.b/255;
-		var min = Math.min(r, b, g), max = Math.max(r, g, b);
-		var delta = max-min;
-		var h = null, s = (max==0)?0:(delta/max);
-		if(s==0){
-			h = 0;
-		}else{
-			if(r==max){
-				h = 60*(g-b)/delta;
-			}else if(g==max){
-				h = 120 + 60*(b-r)/delta;
-			}else{
-				h = 240 + 60*(r-g)/delta;
-			}
-
-			if(h<0){ h+=360; }
-		}
-		return { h:h, s:Math.round(s*100), v:Math.round(max*100) };	//	Object
-	}
-});
-
-}
-
-if(!dojo._hasResource["dojox.color"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.color"] = true;
-dojo.provide("dojox.color");
-
-
-}
-
-if(!dojo._hasResource["dojox.color.Palette"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.color.Palette"] = true;
-dojo.provide("dojox.color.Palette");
-
-
-(function(){
-	var dxc = dojox.color;
-	/***************************************************************
-	*	dojox.color.Palette
-	*
-	*	The Palette object is loosely based on the color palettes
-	*	at Kuler (http://kuler.adobe.com).  They are 5 color palettes
-	*	with the base color considered to be the third color in the
-	*	palette (for generation purposes).
-	*
-	*	Palettes can be generated from well-known algorithms or they
-	* 	can be manually created by passing an array to the constructor.
-	*
-	*	Palettes can be transformed, using a set of specific params
-	*	similar to the way shapes can be transformed with dojox.gfx.
-	*	However, unlike with transformations in dojox.gfx, transforming
-	* 	a palette will return you a new Palette object, in effect
-	* 	a clone of the original.
-	***************************************************************/
-
-	//	ctor ----------------------------------------------------------------------------
-	dxc.Palette = function(/* String|Array|dojox.color.Color|dojox.color.Palette */base){
-		//	summary
-		//		An object that represents a palette of colors.
-		//	description
-		//		A Palette is a representation of a set of colors.  While the standard
-		//		number of colors contained in a palette is 5, it can really handle any
-		//		number of colors.
-		//
-		//		A palette is useful for the ability to transform all the colors in it
-		//		using a simple object-based approach.  In addition, you can generate
-		//		palettes using dojox.color.Palette.generate; these generated palettes
-		//		are based on the palette generators at http://kuler.adobe.com.
-		//
-		//	colors: dojox.color.Color[]
-		//		The actual color references in this palette.
-		this.colors = [];
-		if(base instanceof dojox.color.Palette){
-			this.colors = base.colors.slice(0);
-		}
-		else if(base instanceof dojox.color.Color){
-			this.colors = [ null, null, base, null, null ];
-		}
-		else if(dojo.isArray(base)){
-			this.colors = dojo.map(base.slice(0), function(item){
-				if(dojo.isString(item)){ return new dojox.color.Color(item); }
-				return item;
-			});
-		}
-		else if (dojo.isString(base)){
-			this.colors = [ null, null, new dojox.color.Color(base), null, null ];
-		}
-	}
-
-	//	private functions ---------------------------------------------------------------
-
-	//	transformations
-	function tRGBA(p, param, val){
-		var ret = new dojox.color.Palette();
-		ret.colors = [];
-		dojo.forEach(p.colors, function(item){
-			var r=(param=="dr")?item.r+val:item.r,
-				g=(param=="dg")?item.g+val:item.g,
-				b=(param=="db")?item.b+val:item.b,
-				a=(param=="da")?item.a+val:item.a
-			ret.colors.push(new dojox.color.Color({
-				r: Math.min(255, Math.max(0, r)),
-				g: Math.min(255, Math.max(0, g)),
-				b: Math.min(255, Math.max(0, b)),
-				a: Math.min(1, Math.max(0, a))
-			}));
-		});
-		
-		return ret;
-	}
-
-	function tCMY(p, param, val){
-		var ret = new dojox.color.Palette();
-		ret.colors = [];
-		dojo.forEach(p.colors, function(item){
-			var o=item.toCmy(), 
-				c=(param=="dc")?o.c+val:o.c,
-				m=(param=="dm")?o.m+val:o.m,
-				y=(param=="dy")?o.y+val:o.y;
-			ret.colors.push(dojox.color.fromCmy(
-				Math.min(100, Math.max(0, c)),
-				Math.min(100, Math.max(0, m)),
-				Math.min(100, Math.max(0, y))
-			));
-		});
-		return ret;
-	}
-
-	function tCMYK(p, param, val){
-		var ret = new dojox.color.Palette();
-		ret.colors = [];
-		dojo.forEach(p.colors, function(item){
-			var o=item.toCmyk(), 
-				c=(param=="dc")?o.c+val:o.c,
-				m=(param=="dm")?o.m+val:o.m,
-				y=(param=="dy")?o.y+val:o.y,
-				k=(param=="dk")?o.b+val:o.b;
-			ret.colors.push(dojox.color.fromCmyk(
-				Math.min(100, Math.max(0, c)),
-				Math.min(100, Math.max(0, m)),
-				Math.min(100, Math.max(0, y)),
-				Math.min(100, Math.max(0, k))
-			));
-		});
-		return ret;
-	}
-
-	function tHSL(p, param, val){
-		var ret = new dojox.color.Palette();
-		ret.colors = [];
-		dojo.forEach(p.colors, function(item){
-			var o=item.toHsl(), 
-				h=(param=="dh")?o.h+val:o.h,
-				s=(param=="ds")?o.s+val:o.s,
-				l=(param=="dl")?o.l+val:o.l;
-			ret.colors.push(dojox.color.fromHsl(h%360, Math.min(100, Math.max(0, s)), Math.min(100, Math.max(0, l))));
-		});
-		return ret;
-	}
-
-	function tHSV(p, param, val){
-		var ret = new dojox.color.Palette();
-		ret.colors = [];
-		dojo.forEach(p.colors, function(item){
-			var o=item.toHsv(), 
-				h=(param=="dh")?o.h+val:o.h,
-				s=(param=="ds")?o.s+val:o.s,
-				v=(param=="dv")?o.v+val:o.v;
-			ret.colors.push(dojox.color.fromHsv(h%360, Math.min(100, Math.max(0, s)), Math.min(100, Math.max(0, v))));
-		});
-		return ret;
-	}
-
-	//	helper functions
-	function rangeDiff(val, low, high){
-		//	given the value in a range from 0 to high, find the equiv
-		//		using the range low to high.
-		return high-((high-val)*((high-low)/high));
-	}
-
-	//	object methods ---------------------------------------------------------------
-	dojo.extend(dxc.Palette, {
-		transform: function(/* Object */kwArgs){
-			//	summary
-			//		Transform the palette using a specific transformation function
-			//		and a set of transformation parameters.
-			//	description
-			//		{palette}.transform is a simple way to uniformly transform
-			//		all of the colors in a palette using any of 5 formulae:
-			//		RGBA, HSL, HSV, CMYK or CMY.
-			//
-			//		Once the forumula to be used is determined, you can pass any
-			//		number of parameters based on the formula "d"[param]; for instance,
-			//		{ use: "rgba", dr: 20, dg: -50 } will take all of the colors in
-			//		palette, add 20 to the R value and subtract 50 from the G value.
-			//
-			//		Unlike other types of transformations, transform does *not* alter
-			//		the original palette but will instead return a new one.
-			var fn=tRGBA;	//	the default transform function.
-			if(kwArgs.use){
-				//	we are being specific about the algo we want to use.
-				var use=kwArgs.use.toLowerCase();
-				if(use.indexOf("hs")==0){
-					if(use.charAt(2)=="l"){ fn=tHSL; }
-					else { fn=tHSV; }
-				}
-				else if(use.indexOf("cmy")==0){
-					if(use.charAt(3)=="k"){ fn=tCMYK; }
-					else { fn=tCMY; }
-				}
-			}
-			//	try to guess the best choice.
-			else if("dc" in kwArgs || "dm" in kwArgs || "dy" in kwArgs){
-				if("dk" in kwArgs){ fn = tCMYK; }
-				else { fn = tCMY; }
-			}
-			else if("dh" in kwArgs || "ds" in kwArgs){
-				if("dv" in kwArgs){ fn = tHSV; }
-				else { fn = tHSL; }
-			}
-
-			var palette = this;
-			for(var p in kwArgs){
-				//	ignore use
-				if(p=="use"){ continue; }
-				palette = fn(palette, p, kwArgs[p]);
-			}
-			return palette;		//	dojox.color.Palette
-		},
-		clone: function(){
-			//	summary
-			//		Clones the current palette.
-			return new dxc.Palette(this);	//	dojox.color.Palette
-		}
-	});
-
-	//	static methods ---------------------------------------------------------------
-	dojo.mixin(dxc.Palette, {
-		generators: {
-			analogous:function(/* Object */args){
-				var high=args.high||60, 	//	delta between base hue and highest hue (subtracted from base)
-					low=args.low||18,		//	delta between base hue and lowest hue (added to base)
-					base = dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,
-					hsv=base.toHsv();
-
-				//	generate our hue angle differences
-				var h=[
-					(hsv.h+low+360)%360,
-					(hsv.h+Math.round(low/2)+360)%360,
-					hsv.h,
-					(hsv.h-Math.round(high/2)+360)%360,
-					(hsv.h-high+360)%360
-				];
-
-				var s1=Math.max(10, (hsv.s<=95)?hsv.s+5:(100-(hsv.s-95))),
-					s2=(hsv.s>1)?hsv.s-1:21-hsv.s,
-					v1=(hsv.v>=92)?hsv.v-9:Math.max(hsv.v+9, 20),
-					v2=(hsv.v<=90)?Math.max(hsv.v+5, 20):(95+Math.ceil((hsv.v-90)/2)),
-					s=[ s1, s2, hsv.s, s1, s1 ],
-					v=[ v1, v2, hsv.v, v1, v2 ]
-
-				return new dxc.Palette(dojo.map(h, function(hue, i){
-					return dojox.color.fromHsv(hue, s[i], v[i]);
-				}));		//	dojox.color.Palette
-			},
-
-			monochromatic: function(/* Object */args){
-				var base = dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,
-					hsv = base.toHsv();
-				
-				//	figure out the saturation and value
-				var s1 = (hsv.s-30>9)?hsv.s-30:hsv.s+30,
-					s2 = hsv.s,
-					v1 = rangeDiff(hsv.v, 20, 100),
-					v2 = (hsv.v-20>20)?hsv.v-20:hsv.v+60,
-					v3 = (hsv.v-50>20)?hsv.v-50:hsv.v+30;
-
-				return new dxc.Palette([
-					dojox.color.fromHsv(hsv.h, s1, v1),
-					dojox.color.fromHsv(hsv.h, s2, v3),
-					base,
-					dojox.color.fromHsv(hsv.h, s1, v3),
-					dojox.color.fromHsv(hsv.h, s2, v2)
-				]);		//	dojox.color.Palette
-			},
-
-			triadic: function(/* Object */args){
-				var base = dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,
-					hsv = base.toHsv();
-
-				var h1 = (hsv.h+57+360)%360,
-					h2 = (hsv.h-157+360)%360,
-					s1 = (hsv.s>20)?hsv.s-10:hsv.s+10,
-					s2 = (hsv.s>90)?hsv.s-10:hsv.s+10,
-					s3 = (hsv.s>95)?hsv.s-5:hsv.s+5,
-					v1 = (hsv.v-20>20)?hsv.v-20:hsv.v+20,
-					v2 = (hsv.v-30>20)?hsv.v-30:hsv.v+30,
-					v3 = (hsv.v-30>70)?hsv.v-30:hsv.v+30;
-
-				return new dxc.Palette([
-					dojox.color.fromHsv(h1, s1, hsv.v),
-					dojox.color.fromHsv(hsv.h, s2, v2),
-					base,
-					dojox.color.fromHsv(h2, s2, v1),
-					dojox.color.fromHsv(h2, s3, v3)
-				]);		//	dojox.color.Palette
-			},
-
-			complementary: function(/* Object */args){
-				var base = dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,
-					hsv = base.toHsv();
-
-				var h1 = ((hsv.h*2)+137<360)?(hsv.h*2)+137:Math.floor(hsv.h/2)-137,
-					s1 = Math.max(hsv.s-10, 0),
-					s2 = rangeDiff(hsv.s, 10, 100),
-					s3 = Math.min(100, hsv.s+20),
-					v1 = Math.min(100, hsv.v+30),
-					v2 = (hsv.v>20)?hsv.v-30:hsv.v+30;
-
-				return new dxc.Palette([
-					dojox.color.fromHsv(hsv.h, s1, v1),
-					dojox.color.fromHsv(hsv.h, s2, v2),
-					base,
-					dojox.color.fromHsv(h1, s3, v2),
-					dojox.color.fromHsv(h1, hsv.s, hsv.v)
-				]);		//	dojox.color.Palette
-			},
-
-			splitComplementary: function(/* Object */args){
-				var base = dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,
-					dangle = args.da || 30,
-					hsv = base.toHsv();
-
-				var baseh = ((hsv.h*2)+137<360)?(hsv.h*2)+137:Math.floor(hsv.h/2)-137,
-					h1 = (baseh-dangle+360)%360,
-					h2 = (baseh+dangle)%360,
-					s1 = Math.max(hsv.s-10, 0),
-					s2 = rangeDiff(hsv.s, 10, 100),
-					s3 = Math.min(100, hsv.s+20),
-					v1 = Math.min(100, hsv.v+30),
-					v2 = (hsv.v>20)?hsv.v-30:hsv.v+30;
-
-				return new dxc.Palette([
-					dojox.color.fromHsv(h1, s1, v1),
-					dojox.color.fromHsv(h1, s2, v2),
-					base,
-					dojox.color.fromHsv(h2, s3, v2),
-					dojox.color.fromHsv(h2, hsv.s, hsv.v)
-				]);		//	dojox.color.Palette
-			},
-
-			compound: function(/* Object */args){
-				var base = dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,
-					hsv = base.toHsv();
-
-				var h1 = ((hsv.h*2)+18<360)?(hsv.h*2)+18:Math.floor(hsv.h/2)-18,
-					h2 = ((hsv.h*2)+120<360)?(hsv.h*2)+120:Math.floor(hsv.h/2)-120,
-					h3 = ((hsv.h*2)+99<360)?(hsv.h*2)+99:Math.floor(hsv.h/2)-99,
-					s1 = (hsv.s-40>10)?hsv.s-40:hsv.s+40,
-					s2 = (hsv.s-10>80)?hsv.s-10:hsv.s+10,
-					s3 = (hsv.s-25>10)?hsv.s-25:hsv.s+25,
-					v1 = (hsv.v-40>10)?hsv.v-40:hsv.v+40,
-					v2 = (hsv.v-20>80)?hsv.v-20:hsv.v+20,
-					v3 = Math.max(hsv.v, 20);
-
-				return new dxc.Palette([
-					dojox.color.fromHsv(h1, s1, v1),
-					dojox.color.fromHsv(h1, s2, v2),
-					base,
-					dojox.color.fromHsv(h2, s3, v3),
-					dojox.color.fromHsv(h3, s2, v2)
-				]);		//	dojox.color.Palette
-			},
-
-			shades: function(/* Object */args){
-				var base = dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,
-					hsv = base.toHsv();
-
-				var s  = (hsv.s==100 && hsv.v==0)?0:hsv.s,
-					v1 = (hsv.v-50>20)?hsv.v-50:hsv.v+30,
-					v2 = (hsv.v-25>=20)?hsv.v-25:hsv.v+55,
-					v3 = (hsv.v-75>=20)?hsv.v-75:hsv.v+5,
-					v4 = Math.max(hsv.v-10, 20);
-
-				return new dxc.Palette([
-					new dojox.color.fromHsv(hsv.h, s, v1),
-					new dojox.color.fromHsv(hsv.h, s, v2),
-					base,
-					new dojox.color.fromHsv(hsv.h, s, v3),
-					new dojox.color.fromHsv(hsv.h, s, v4)
-				]);		//	dojox.color.Palette
-			}
-		},
-		generate: function(/* String|dojox.color.Color */base, /* Function|String */type){
-			//	summary
-			//		Generate a new Palette using any of the named functions in
-			//		dojox.color.Palette.generators or an optional function definition.
-			if(dojo.isFunction(type)){
-				return type({ base: base });	//	dojox.color.Palette
-			}
-			else if(dxc.Palette.generators[type]){
-				return dxc.Palette.generators[type]({ base: base });	//	dojox.color.Palette
-			}
-			throw new Error("dojox.color.Palette.generate: the specified generator ('" + type + "') does not exist.");
-		}
-	});
-})();
-
-}
-
-if(!dojo._hasResource["dojox.charting.Theme"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.charting.Theme"] = true;
-dojo.provide("dojox.charting.Theme");
-
-
-
-(function(){
-	var dxc=dojox.charting;
-	//	TODO: Legend information
-
-	dxc.Theme = function(/*Object?*/ kwArgs){
-		kwArgs=kwArgs||{};
-		var def = dxc.Theme._def;
-		dojo.forEach(["chart", "plotarea", "axis", "series", "marker"], function(n){
-			this[n] = dojo.delegate(def[n], kwArgs[n]||{});
-		}, this);
-		this.markers = dojo.delegate(dxc.Theme.Markers, kwArgs.markers||{});
-		this.colors = [];
-		this.antiAlias = ("antiAlias" in kwArgs)?kwArgs.antiAlias:true;
-		this.assignColors = ("assignColors" in kwArgs)?kwArgs.assignColors:true;
-		this.assignMarkers = ("assignMarkers" in kwArgs)?kwArgs.assignMarkers:true;
-
-		//	push the colors, use _def colors if none passed.
-		kwArgs.colors = kwArgs.colors||def.colors;
-		dojo.forEach(kwArgs.colors, function(item){ 
-			this.colors.push(item); 
-		}, this);
-
-		//	private variables for color and marker indexing
-		this._current = { color:0, marker: 0 };
-		this._markers = [];
-		this._buildMarkerArray();
-	};
-
-	//	"static" fields
-	//	default markers.
-	//	A marker is defined by an SVG path segment; it should be defined as
-	//		relative motion, and with the assumption that the path segment
-	//		will be moved to the value point (i.e prepend Mx,y)
-	dxc.Theme.Markers={
-		CIRCLE:		"m-3,0 c0,-4 6,-4 6,0 m-6,0 c0,4 6,4 6,0", 
-		SQUARE:		"m-3,-3 l0,6 6,0 0,-6 z", 
-		DIAMOND:	"m0,-3 l3,3 -3,3 -3,-3 z", 
-		CROSS:		"m0,-3 l0,6 m-3,-3 l6,0", 
-		X:			"m-3,-3 l6,6 m0,-6 l-6,6", 
-		TRIANGLE:	"m-3,3 l3,-6 3,6 z", 
-		TRIANGLE_INVERTED:"m-3,-3 l3,6 3,-6 z"
-	};
-	dxc.Theme._def={
-		//	all objects are structs used directly in dojox.gfx
-		chart:{ 
-			stroke:null,
-			fill: "white"
-		},
-		plotarea:{ 
-			stroke:null,
-			fill: "white"
-		},
-		//	TODO: label rotation on axis
-		axis:{
-			stroke:	{ //	the axis itself
-				color:"#333",
-				width:1
-			},
-			/*
-			line:	{ //	in the future can be used for gridlines
-				color:"#ccc",
-				width:1,
-				style:"Dot",
-				cap:"round"
-			},
-			*/
-			majorTick:	{ //	major ticks on axis, and used for major gridlines
-				color:"#666",
-				width:1, 
-				length:6, 
-				position:"center"
-			},
-			minorTick:	{ //	minor ticks on axis, and used for minor gridlines
-				color:"#666", 
-				width:0.8, 
-				length:3, 
-				position:"center"
-			},	
-			font: "normal normal normal 7pt Tahoma", //	labels on axis
-			fontColor:"#333"						//	color of labels
-		},
-		series:{
-			outline: {width: 0.1, color: "#ccc"},							//	line or outline
-			stroke: {width: 1.5, color: "#333"},							//	line or outline
-			fill: "#ccc",												//	fill, if appropriate
-			font: "normal normal normal 7pt Tahoma",					//	if there's a label
-			fontColor: "#000"											// 	color of labels
-		},
-		marker:{	//	any markers on a series.
-			stroke: {width:1},											//	stroke or outline
-			fill: "#333",												//	fill if needed
-			font: "normal normal normal 7pt Tahoma",					//	label
-			fontColor: "#000"
-		},
-		colors:[ "#54544c","#858e94","#6e767a","#948585","#474747" ]
-	};
-	
-	//	prototype methods
-	dojo.extend(dxc.Theme, {
-		defineColors: function(obj){
-			//	summary:
-			//		Generate a set of colors for the theme based on keyword
-			//		arguments
-			var kwArgs=obj||{};
-
-			//	note that we've changed the default number from 32 to 4 colors
-			//	are cycled anyways.
-			var c=[], n=kwArgs.num||5;	//	the number of colors to generate
-			if(kwArgs.colors){
-				//	we have an array of colors predefined, so fix for the number of series.
-				var l=kwArgs.colors.length;
-				for(var i=0; i<n; i++){
-					c.push(kwArgs.colors[i%l]);
-				}
-				this.colors=c;
-			}else if(kwArgs.hue){
-				//	single hue, generate a set based on brightness
-				var s=kwArgs.saturation||100;	//	saturation
-				var st=kwArgs.low||30;
-				var end=kwArgs.high||90;
-				//	we'd like it to be a little on the darker side.
-				var l=(end+st)/2;
-
-				//	alternately, use "shades"
-				this.colors = dojox.color.Palette.generate(
-					dojox.color.fromHsv(kwArgs.hue, s, l), "monochromatic"
-				).colors;
-			}else if(kwArgs.generator){
-				//	pass a base color and the name of a generator
-				this.colors=dojox.color.Palette.generate(kwArgs.base, kwArgs.generator).colors;
-			}
-		},
-	
-		_buildMarkerArray: function(){
-			this._markers = [];
-			for(var p in this.markers){ this._markers.push(this.markers[p]); }
-			//	reset the position
-			this._current.marker=0;
-		},
-
-		_clone: function(){
-			//	summary:
-			//		Return a clone of this theme, with the position vars reset to 0.
-			return new dxc.Theme({
-				chart: this.chart,
-				plotarea: this.plotarea,
-				axis: this.axis,
-				series: this.series,
-				marker: this.marker,
-				antiAlias: this.antiAlias,
-				assignColors: this.assignColors,
-				assignMarkers: this.assigneMarkers,
-				colors: dojo.delegate(this.colors)
-			});
-		},
-
-		addMarker:function(/*String*/ name, /*String*/ segment){
-			//	summary:
-			//		Add a custom marker to this theme.
-			//	example:
-			//	|	myTheme.addMarker("Ellipse", foo);
-			this.markers[name]=segment;
-			this._buildMarkerArray();
-		},
-		setMarkers:function(/*Object*/ obj){
-			//	summary:
-			//		Set all the markers of this theme at once.  obj should be a
-			//		dictionary of keys and path segments.
-			//
-			//	example:
-			//	|	myTheme.setMarkers({ "CIRCLE": foo });
-			this.markers=obj;
-			this._buildMarkerArray();
-		},
-
-		next: function(/*String?*/ type){
-			//	summary:
-			//		get either the next color or the next marker, depending on
-			//		what was passed. If type is not passed, it assumes color.
-			//	type:
-			//		Optional. One of either "color" or "marker". Defaults to
-			//		"color".
-			//	example:
-			//	|	var color = myTheme.next();
-			//	|	var color = myTheme.next("color");
-			//	|	var marker = myTheme.next("marker");
-			if(type == "marker"){
-				return this._markers[ this._current.marker++ % this._markers.length ];
-			}else{
-				return this.colors[ this._current.color++ % this.colors.length ];
-			}
-		},
-		clear: function(){
-			// summary:
-			//		resets both marker and color counters back to the start.
-			//		Subsequent calls to `next` will retrievie the first value
-			//		of each depending on the passed type.
-			this._current = {color: 0, marker: 0};
-		}
-	});
-})();
-
-}
-
-if(!dojo._hasResource["dojox.charting.Element"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.charting.Element"] = true;
-dojo.provide("dojox.charting.Element");
-
-dojo.declare("dojox.charting.Element", null, {
-	constructor: function(chart){
-		this.chart = chart;
-		this.group = null;
-		this.htmlElements = [];
-		this.dirty = true;
-	},
-	createGroup: function(creator){
-		if(!creator){ creator = this.chart.surface; }
-		if(!this.group){
-			this.group = creator.createGroup();
-		}
-		return this;
-	},
-	purgeGroup: function(){
-		this.destroyHtmlElements();
-		if(this.group){
-			this.group.clear();
-			this.group.removeShape();
-			this.group = null;
-		}
-		this.dirty = true;
-		return this;
-	},
-	cleanGroup: function(creator){
-		this.destroyHtmlElements();
-		if(!creator){ creator = this.chart.surface; }
-		if(this.group){
-			this.group.clear();
-		}else{
-			this.group = creator.createGroup();
-		}
-		this.dirty = true;
-		return this;
-	},
-	destroyHtmlElements: function(){
-		if(this.htmlElements.length){
-			dojo.forEach(this.htmlElements, dojo.destroy);
-			this.htmlElements = [];
-		}
-	},
-	destroy: function(){
-		this.purgeGroup();
-	}
-});
-
-}
-
-if(!dojo._hasResource["dojox.charting.Series"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.charting.Series"] = true;
-dojo.provide("dojox.charting.Series");
-
-
-
-dojo.declare("dojox.charting.Series", dojox.charting.Element, {
-	constructor: function(chart, data, kwArgs){
-		dojo.mixin(this, kwArgs);
-		if(typeof this.plot != "string"){ this.plot = "default"; }
-		this.data = data;
-		this.dirty = true;
-		this.clear();
-	},
-	clear: function(){
-		this.dyn = {};
-	}
-});
-
-}
-
-if(!dojo._hasResource["dojox.charting.scaler.common"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.charting.scaler.common"] = true;
-dojo.provide("dojox.charting.scaler.common");
-
-(function(){
-	var eq = function(/*Number*/ a, /*Number*/ b){
-		// summary: compare two FP numbers for equality
-		return Math.abs(a - b) <= 1e-6 * (Math.abs(a) + Math.abs(b));	// Boolean
-	};
-	
-	dojo.mixin(dojox.charting.scaler.common, {
-		findString: function(/*String*/ val, /*Array*/ text){
-			val = val.toLowerCase();
-			for(var i = 0; i < text.length; ++i){
-				if(val == text[i]){ return true; }
-			}
-			return false;
-		},
-		getNumericLabel: function(/*Number*/ number, /*Number*/ precision, /*Object*/ kwArgs){
-			var def = kwArgs.fixed ? 
-						number.toFixed(precision < 0 ? -precision : 0) : 
-						number.toString();
-			if(kwArgs.labelFunc){
-				var r = kwArgs.labelFunc(def, number, precision);
-				if(r){ return r; }
-				// else fall through to the regular labels search
-			}
-			if(kwArgs.labels){
-				// classic binary search
-				var l = kwArgs.labels, lo = 0, hi = l.length;
-				while(lo < hi){
-					var mid = Math.floor((lo + hi) / 2), val = l[mid].value;
-					if(val < number){
-						lo = mid + 1;
-					}else{
-						hi = mid;
-					}
-				}
-				// lets take into account FP errors
-				if(lo < l.length && eq(l[lo].value, number)){
-					return l[lo].text;
-				}
-				--lo;
-				if(lo >= 0 && lo < l.length && eq(l[lo].value, number)){
-					return l[lo].text;
-				}
-				lo += 2;
-				if(lo < l.length && eq(l[lo].value, number)){
-					return l[lo].text;
-				}
-				// otherwise we will produce a number
-			}
-			return def;
-		}
-	});
-})();
-
-}
-
-if(!dojo._hasResource["dojox.charting.scaler.linear"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.charting.scaler.linear"] = true;
-dojo.provide("dojox.charting.scaler.linear");
-
-
-(function(){
-	var deltaLimit = 3,	// pixels
-		dc = dojox.charting, dcs = dc.scaler, dcsc = dcs.common,
-		findString = dcsc.findString,
-		getLabel = dcsc.getNumericLabel;
-	
-	var calcTicks = function(min, max, kwArgs, majorTick, minorTick, microTick, span){
-		kwArgs = dojo.delegate(kwArgs);
-		if(!majorTick){
-			if(kwArgs.fixUpper == "major"){ kwArgs.fixUpper = "minor"; }
-			if(kwArgs.fixLower == "major"){ kwArgs.fixLower = "minor"; }
-		}
-		if(!minorTick){
-			if(kwArgs.fixUpper == "minor"){ kwArgs.fixUpper = "micro"; }
-			if(kwArgs.fixLower == "minor"){ kwArgs.fixLower = "micro"; }
-		}
-		if(!microTick){
-			if(kwArgs.fixUpper == "micro"){ kwArgs.fixUpper = "none"; }
-			if(kwArgs.fixLower == "micro"){ kwArgs.fixLower = "none"; }
-		}
-		var lowerBound = findString(kwArgs.fixLower, ["major"]) ?
-				Math.floor(kwArgs.min / majorTick) * majorTick :
-					findString(kwArgs.fixLower, ["minor"]) ?
-						Math.floor(kwArgs.min / minorTick) * minorTick :
-							findString(kwArgs.fixLower, ["micro"]) ?
-								Math.floor(kwArgs.min / microTick) * microTick : kwArgs.min,
-			upperBound = findString(kwArgs.fixUpper, ["major"]) ?
-				Math.ceil(kwArgs

<TRUNCATED>