summaryrefslogtreecommitdiff
path: root/includes/js/dojox/charting
diff options
context:
space:
mode:
authormensonge <mensonge@b3834d28-1941-0410-a4f8-b48e95affb8f>2008-11-13 09:49:11 +0000
committermensonge <mensonge@b3834d28-1941-0410-a4f8-b48e95affb8f>2008-11-13 09:49:11 +0000
commite44a7e37b6c7b5961adaffc62b9042b8d442938e (patch)
tree95b67c356e93163467db2451f2b8cce84ed5d582 /includes/js/dojox/charting
parenta62b9742ee5e28bcec6872d88f50f25b820914f6 (diff)
downloadsemanticscuttle-e44a7e37b6c7b5961adaffc62b9042b8d442938e.tar.gz
semanticscuttle-e44a7e37b6c7b5961adaffc62b9042b8d442938e.tar.bz2
New feature: basic Ajax suggestion for tags and implementation of Dojo toolkit
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@151 b3834d28-1941-0410-a4f8-b48e95affb8f
Diffstat (limited to 'includes/js/dojox/charting')
-rw-r--r--includes/js/dojox/charting/Chart2D.js341
-rw-r--r--includes/js/dojox/charting/Chart3D.js86
-rw-r--r--includes/js/dojox/charting/Element.js49
-rw-r--r--includes/js/dojox/charting/README31
-rw-r--r--includes/js/dojox/charting/Series.js20
-rw-r--r--includes/js/dojox/charting/Theme.js256
-rw-r--r--includes/js/dojox/charting/_color.js62
-rw-r--r--includes/js/dojox/charting/axis2d/Base.js31
-rw-r--r--includes/js/dojox/charting/axis2d/Default.js323
-rw-r--r--includes/js/dojox/charting/axis2d/common.js75
-rw-r--r--includes/js/dojox/charting/plot2d/Areas.js14
-rw-r--r--includes/js/dojox/charting/plot2d/Bars.js89
-rw-r--r--includes/js/dojox/charting/plot2d/Base.js60
-rw-r--r--includes/js/dojox/charting/plot2d/ClusteredBars.js63
-rw-r--r--includes/js/dojox/charting/plot2d/ClusteredColumns.js63
-rw-r--r--includes/js/dojox/charting/plot2d/Columns.js88
-rw-r--r--includes/js/dojox/charting/plot2d/Default.js173
-rw-r--r--includes/js/dojox/charting/plot2d/Grid.js116
-rw-r--r--includes/js/dojox/charting/plot2d/Lines.js13
-rw-r--r--includes/js/dojox/charting/plot2d/Markers.js13
-rw-r--r--includes/js/dojox/charting/plot2d/MarkersOnly.js14
-rw-r--r--includes/js/dojox/charting/plot2d/Pie.js199
-rw-r--r--includes/js/dojox/charting/plot2d/Scatter.js14
-rw-r--r--includes/js/dojox/charting/plot2d/Stacked.js160
-rw-r--r--includes/js/dojox/charting/plot2d/StackedAreas.js14
-rw-r--r--includes/js/dojox/charting/plot2d/StackedBars.js85
-rw-r--r--includes/js/dojox/charting/plot2d/StackedColumns.js83
-rw-r--r--includes/js/dojox/charting/plot2d/StackedLines.js13
-rw-r--r--includes/js/dojox/charting/plot2d/common.js113
-rw-r--r--includes/js/dojox/charting/plot3d/Bars.js66
-rw-r--r--includes/js/dojox/charting/plot3d/Base.js23
-rw-r--r--includes/js/dojox/charting/plot3d/Cylinders.js69
-rw-r--r--includes/js/dojox/charting/scaler.js161
-rw-r--r--includes/js/dojox/charting/tests/Theme.js71
-rw-r--r--includes/js/dojox/charting/tests/_color.js82
-rw-r--r--includes/js/dojox/charting/tests/charting.js12
-rw-r--r--includes/js/dojox/charting/tests/data/goog_prices.csv796
-rw-r--r--includes/js/dojox/charting/tests/data/msft_prices.csv796
-rw-r--r--includes/js/dojox/charting/tests/data/yahoo_prices.csv796
-rw-r--r--includes/js/dojox/charting/tests/runTests.html9
-rw-r--r--includes/js/dojox/charting/tests/test_bars.html65
-rw-r--r--includes/js/dojox/charting/tests/test_chart2d.html353
-rw-r--r--includes/js/dojox/charting/tests/test_chart2d_updating.html80
-rw-r--r--includes/js/dojox/charting/tests/test_cylinders.html65
-rw-r--r--includes/js/dojox/charting/tests/test_labels2d.html90
-rw-r--r--includes/js/dojox/charting/tests/test_pie2d.html128
-rw-r--r--includes/js/dojox/charting/tests/test_scaler.html97
-rw-r--r--includes/js/dojox/charting/tests/test_sparklines.html180
-rw-r--r--includes/js/dojox/charting/tests/test_widget2d.html98
-rw-r--r--includes/js/dojox/charting/themes/ET/greys.js63
-rw-r--r--includes/js/dojox/charting/themes/GreySkies.js11
-rw-r--r--includes/js/dojox/charting/themes/PlotKit/README11
-rw-r--r--includes/js/dojox/charting/themes/PlotKit/blue.js43
-rw-r--r--includes/js/dojox/charting/themes/PlotKit/cyan.js43
-rw-r--r--includes/js/dojox/charting/themes/PlotKit/green.js43
-rw-r--r--includes/js/dojox/charting/themes/PlotKit/orange.js43
-rw-r--r--includes/js/dojox/charting/themes/PlotKit/purple.js43
-rw-r--r--includes/js/dojox/charting/themes/PlotKit/red.js43
-rw-r--r--includes/js/dojox/charting/widget/Chart2D.js215
59 files changed, 7256 insertions, 0 deletions
diff --git a/includes/js/dojox/charting/Chart2D.js b/includes/js/dojox/charting/Chart2D.js
new file mode 100644
index 0000000..27be653
--- /dev/null
+++ b/includes/js/dojox/charting/Chart2D.js
@@ -0,0 +1,341 @@
+if(!dojo._hasResource["dojox.charting.Chart2D"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.Chart2D"] = true;
+dojo.provide("dojox.charting.Chart2D");
+
+dojo.require("dojox.gfx");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.fold");
+dojo.require("dojox.lang.functional.reversed");
+
+dojo.require("dojox.charting.Theme");
+dojo.require("dojox.charting.Series");
+
+dojo.require("dojox.charting.axis2d.Default");
+
+dojo.require("dojox.charting.plot2d.Default");
+dojo.require("dojox.charting.plot2d.Lines");
+dojo.require("dojox.charting.plot2d.Areas");
+dojo.require("dojox.charting.plot2d.Markers");
+dojo.require("dojox.charting.plot2d.MarkersOnly");
+dojo.require("dojox.charting.plot2d.Scatter");
+dojo.require("dojox.charting.plot2d.Stacked");
+dojo.require("dojox.charting.plot2d.StackedLines");
+dojo.require("dojox.charting.plot2d.StackedAreas");
+dojo.require("dojox.charting.plot2d.Columns");
+dojo.require("dojox.charting.plot2d.StackedColumns");
+dojo.require("dojox.charting.plot2d.ClusteredColumns");
+dojo.require("dojox.charting.plot2d.Bars");
+dojo.require("dojox.charting.plot2d.StackedBars");
+dojo.require("dojox.charting.plot2d.ClusteredBars");
+dojo.require("dojox.charting.plot2d.Grid");
+dojo.require("dojox.charting.plot2d.Pie");
+
+(function(){
+ var df = dojox.lang.functional, dc = dojox.charting,
+ clear = df.lambda("item.clear()"),
+ purge = df.lambda("item.purgeGroup()"),
+ destroy = df.lambda("item.destroy()"),
+ makeClean = df.lambda("item.dirty = false"),
+ makeDirty = df.lambda("item.dirty = true");
+
+ dojo.declare("dojox.charting.Chart2D", null, {
+ constructor: function(node, kwArgs){
+ // initialize parameters
+ if(!kwArgs){ kwArgs = {}; }
+ this.margins = kwArgs.margins ? kwArgs.margins : {l: 10, t: 10, r: 10, b: 10};
+ this.stroke = kwArgs.stroke;
+ this.fill = kwArgs.fill;
+
+ // default initialization
+ this.theme = null;
+ this.axes = {}; // map of axes
+ this.stack = []; // stack of plotters
+ this.plots = {}; // map of plotter indices
+ this.series = []; // stack of data runs
+ this.runs = {}; // map of data run indices
+ this.dirty = true;
+ this.coords = null;
+
+ // create a surface
+ this.node = dojo.byId(node);
+ var box = dojo.marginBox(node);
+ this.surface = dojox.gfx.createSurface(this.node, box.w, box.h);
+ },
+ destroy: function(){
+ dojo.forEach(this.series, destroy);
+ dojo.forEach(this.stack, destroy);
+ df.forIn(this.axes, destroy);
+ },
+ getCoords: function(){
+ if(!this.coords){
+ this.coords = dojo.coords(this.node, true);
+ }
+ return this.coords;
+ },
+ setTheme: function(theme){
+ this.theme = theme;
+ this.dirty = true;
+ return this;
+ },
+ addAxis: function(name, kwArgs){
+ var axis;
+ if(!kwArgs || !("type" in kwArgs)){
+ axis = new dc.axis2d.Default(this, kwArgs);
+ }else{
+ axis = typeof kwArgs.type == "string" ?
+ new dc.axis2d[kwArgs.type](this, kwArgs) :
+ new kwArgs.type(this, kwArgs);
+ }
+ axis.name = name;
+ axis.dirty = true;
+ if(name in this.axes){
+ this.axes[name].destroy();
+ }
+ this.axes[name] = axis;
+ this.dirty = true;
+ return this;
+ },
+ addPlot: function(name, kwArgs){
+ var plot;
+ if(!kwArgs || !("type" in kwArgs)){
+ plot = new dc.plot2d.Default(this, kwArgs);
+ }else{
+ plot = typeof kwArgs.type == "string" ?
+ new dc.plot2d[kwArgs.type](this, kwArgs) :
+ new kwArgs.type(this, kwArgs);
+ }
+ plot.name = name;
+ plot.dirty = true;
+ if(name in this.plots){
+ this.stack[this.plots[name]].destroy();
+ this.stack[this.plots[name]] = plot;
+ }else{
+ this.plots[name] = this.stack.length;
+ this.stack.push(plot);
+ }
+ this.dirty = true;
+ return this;
+ },
+ addSeries: function(name, data, kwArgs){
+ var run = new dc.Series(this, data, kwArgs);
+ if(name in this.runs){
+ this.series[this.runs[name]].destroy();
+ this.series[this.runs[name]] = run;
+ }else{
+ this.runs[name] = this.series.length;
+ this.series.push(run);
+ }
+ this.dirty = true;
+ // fix min/max
+ if(!("ymin" in run) && "min" in run){ run.ymin = run.min; }
+ if(!("ymax" in run) && "max" in run){ run.ymax = run.max; }
+ return this;
+ },
+ updateSeries: function(name, data){
+ if(name in this.runs){
+ var run = this.series[this.runs[name]],
+ plot = this.stack[this.plots[run.plot]], axis;
+ run.data = data;
+ run.dirty = true;
+ // check to see if axes and plot should be updated
+ if(plot.hAxis){
+ axis = this.axes[plot.hAxis];
+ if(axis.dependOnData()){
+ axis.dirty = true;
+ // find all plots and mark them dirty
+ dojo.forEach(this.stack, function(p){
+ if(p.hAxis && p.hAxis == plot.hAxis){
+ p.dirty = true;
+ }
+ });
+ }
+ }else{
+ plot.dirty = true;
+ }
+ if(plot.vAxis){
+ axis = this.axes[plot.vAxis];
+ if(axis.dependOnData()){
+ axis.dirty = true;
+ // find all plots and mark them dirty
+ dojo.forEach(this.stack, function(p){
+ if(p.vAxis && p.vAxis == plot.vAxis){
+ p.dirty = true;
+ }
+ });
+ }
+ }else{
+ plot.dirty = true;
+ }
+ }
+ return this;
+ },
+ resize: function(width, height){
+ var box;
+ switch(arguments.length){
+ case 0:
+ box = dojo.marginBox(this.node);
+ break;
+ case 1:
+ box = width;
+ break;
+ default:
+ box = {w: width, h: height};
+ break;
+ }
+ dojo.marginBox(this.node, box);
+ this.surface.setDimensions(box.w, box.h);
+ this.dirty = true;
+ this.coords = null;
+ return this.render();
+ },
+ render: function(){
+ if(this.dirty){
+ return this.fullRender();
+ }
+
+ // calculate geometry
+ dojo.forEach(this.stack, function(plot){
+ if(plot.dirty || (plot.hAxis && this.axes[plot.hAxis].dirty) ||
+ (plot.vAxis && this.axes[plot.vAxis].dirty)){
+ plot.calculateAxes(this.plotArea);
+ }
+ }, this);
+
+ // go over the stack backwards
+ df.forEachRev(this.stack, function(plot){ plot.render(this.dim, this.offsets); }, this);
+
+ // go over axes
+ df.forIn(this.axes, function(axis){ axis.render(this.dim, this.offsets); }, this);
+
+ this._makeClean();
+
+ // BEGIN FOR HTML CANVAS
+ if(this.surface.render){ this.surface.render(); };
+ // END FOR HTML CANVAS
+
+ return this;
+ },
+ fullRender: function(){
+ this._makeDirty();
+
+ // clear old values
+ dojo.forEach(this.stack, clear);
+ dojo.forEach(this.series, purge);
+ df.forIn(this.axes, purge);
+ dojo.forEach(this.stack, purge);
+ this.surface.clear();
+
+ // rebuild new connections, and add defaults
+
+ // assign series
+ dojo.forEach(this.series, function(run){
+ if(!(run.plot in this.plots)){
+ var plot = new dc.plot2d.Default(this, {});
+ plot.name = run.plot;
+ this.plots[run.plot] = this.stack.length;
+ this.stack.push(plot);
+ }
+ this.stack[this.plots[run.plot]].addSeries(run);
+ }, this);
+ // assign axes
+ dojo.forEach(this.stack, function(plot){
+ if(plot.hAxis){
+ plot.setAxis(this.axes[plot.hAxis]);
+ }
+ if(plot.vAxis){
+ plot.setAxis(this.axes[plot.vAxis]);
+ }
+ }, this);
+ // set up a theme
+ if(!this.theme){
+ this.theme = new dojox.charting.Theme(dojox.charting._def);
+ }
+ var requiredColors = df.foldl(this.stack, "z + plot.getRequiredColors()", 0);
+ this.theme.defineColors({num: requiredColors, cache: false});
+
+ // calculate geometry
+
+ // 1st pass
+ var dim = this.dim = this.surface.getDimensions();
+ dim.width = dojox.gfx.normalizedLength(dim.width);
+ dim.height = dojox.gfx.normalizedLength(dim.height);
+ df.forIn(this.axes, clear);
+ dojo.forEach(this.stack, function(plot){ plot.calculateAxes(dim); });
+
+ // assumption: we don't have stacked axes yet
+ var offsets = this.offsets = {l: 0, r: 0, t: 0, b: 0};
+ df.forIn(this.axes, function(axis){
+ df.forIn(axis.getOffsets(), function(o, i){ offsets[i] += o; });
+ });
+ // add margins
+ df.forIn(this.margins, function(o, i){ offsets[i] += o; });
+
+ // 2nd pass with realistic dimensions
+ this.plotArea = {width: dim.width - offsets.l - offsets.r, height: dim.height - offsets.t - offsets.b};
+ df.forIn(this.axes, clear);
+ dojo.forEach(this.stack, function(plot){ plot.calculateAxes(this.plotArea); }, this);
+
+ // generate shapes
+
+ // draw a chart background
+ var t = this.theme,
+ fill = this.fill ? this.fill : (t.chart && t.chart.fill),
+ stroke = this.stroke ? this.stroke : (t.chart && t.chart.stroke);
+ if(fill){
+ this.surface.createRect({
+ width: dim.width,
+ height: dim.height
+ }).setFill(fill);
+ }
+ if(stroke){
+ this.surface.createRect({
+ width: dim.width - 1,
+ height: dim.height - 1
+ }).setStroke(stroke);
+ }
+ // draw a plot background
+ fill = t.plotarea && t.plotarea.fill;
+ stroke = t.plotarea && t.plotarea.stroke;
+ if(fill){
+ this.surface.createRect({
+ x: offsets.l, y: offsets.t,
+ width: dim.width - offsets.l - offsets.r,
+ height: dim.height - offsets.t - offsets.b
+ }).setFill(fill);
+ }
+ if(stroke){
+ this.surface.createRect({
+ x: offsets.l, y: offsets.t,
+ width: dim.width - offsets.l - offsets.r - 1,
+ height: dim.height - offsets.t - offsets.b - 1
+ }).setStroke(stroke);
+ }
+
+ // go over the stack backwards
+ df.foldr(this.stack, function(z, plot){ return plot.render(dim, offsets), 0; }, 0);
+
+ // go over axes
+ df.forIn(this.axes, function(axis){ axis.render(dim, offsets); });
+
+ this._makeClean();
+
+ return this;
+ },
+ _makeClean: function(){
+ // reset dirty flags
+ dojo.forEach(this.axes, makeClean);
+ dojo.forEach(this.stack, makeClean);
+ dojo.forEach(this.series, makeClean);
+ this.dirty = false;
+ },
+ _makeDirty: function(){
+ // reset dirty flags
+ dojo.forEach(this.axes, makeDirty);
+ dojo.forEach(this.stack, makeDirty);
+ dojo.forEach(this.series, makeDirty);
+ this.dirty = true;
+ }
+ });
+})();
+
+}
diff --git a/includes/js/dojox/charting/Chart3D.js b/includes/js/dojox/charting/Chart3D.js
new file mode 100644
index 0000000..86dfd59
--- /dev/null
+++ b/includes/js/dojox/charting/Chart3D.js
@@ -0,0 +1,86 @@
+if(!dojo._hasResource["dojox.charting.Chart3D"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.Chart3D"] = true;
+dojo.provide("dojox.charting.Chart3D");
+
+dojo.require("dojox.gfx3d");
+
+(function(){
+ var observerVector = {x: 0, y: 0, z: 1}, v = dojox.gfx3d.vector, n = dojox.gfx.normalizedLength;
+
+ dojo.declare("dojox.charting.Chart3D", null, {
+ constructor: function(node, lights, camera, theme){
+ // setup a view
+ this.node = dojo.byId(node);
+ this.surface = dojox.gfx.createSurface(this.node, n(this.node.style.width), n(this.node.style.height));
+ this.view = this.surface.createViewport();
+ this.view.setLights(lights.lights, lights.ambient, lights.specular);
+ this.view.setCameraTransform(camera);
+ this.theme = theme;
+
+ // initialize internal variables
+ this.walls = [];
+ this.plots = [];
+ },
+
+ // public API
+ generate: function(){
+ return this._generateWalls()._generatePlots();
+ },
+ invalidate: function(){
+ this.view.invalidate();
+ return this;
+ },
+ render: function(){
+ this.view.render();
+ return this;
+ },
+ addPlot: function(plot){
+ return this._add(this.plots, plot);
+ },
+ removePlot: function(plot){
+ return this._remove(this.plots, plot);
+ },
+ addWall: function(wall){
+ return this._add(this.walls, wall);
+ },
+ removeWall: function(wall){
+ return this._remove(this.walls, wall);
+ },
+
+ // internal API
+ _add: function(array, item){
+ if(!dojo.some(array, function(i){ return i == item; })){
+ array.push(item);
+ this.view.invalidate();
+ }
+ return this;
+ },
+ _remove: function(array, item){
+ var a = dojo.filter(array, function(i){ return i != item; });
+ return a.length < array.length ? (array = a, this.invalidate()) : this;
+ },
+ _generateWalls: function(){
+ for(var i = 0; i < this.walls.length; ++i){
+ if(v.dotProduct(observerVector, this.walls[i].normal) > 0){
+ this.walls[i].generate(this);
+ }
+ }
+ return this;
+ },
+ _generatePlots: function(){
+ var depth = 0, m = dojox.gfx3d.matrix, i = 0;
+ for(; i < this.plots.length; ++i){
+ depth += this.plots[i].getDepth();
+ }
+ for(--i; i >= 0; --i){
+ var scene = this.view.createScene();
+ scene.setTransform(m.translate(0, 0, -depth));
+ this.plots[i].generate(this, scene);
+ depth -= this.plots[i].getDepth();
+ }
+ return this;
+ }
+ });
+})();
+
+}
diff --git a/includes/js/dojox/charting/Element.js b/includes/js/dojox/charting/Element.js
new file mode 100644
index 0000000..f6bdc5d
--- /dev/null
+++ b/includes/js/dojox/charting/Element.js
@@ -0,0 +1,49 @@
+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(){
+ dojo.forEach(this.htmlElements, dojo._destroyElement);
+ this.htmlElements = [];
+ },
+ destroy: function(){
+ this.purgeGroup();
+ }
+});
+
+}
diff --git a/includes/js/dojox/charting/README b/includes/js/dojox/charting/README
new file mode 100644
index 0000000..0858f3a
--- /dev/null
+++ b/includes/js/dojox/charting/README
@@ -0,0 +1,31 @@
+-------------------------------------------------------------------------------
+dojox.charting
+-------------------------------------------------------------------------------
+Version 0.800
+Release date: 10/31/2007
+-------------------------------------------------------------------------------
+Project state:
+beta
+-------------------------------------------------------------------------------
+Credits
+ Tom Trenka (ttrenka@gmail.com)
+ Eugene Lazutkin (eugene.lazutkin@gmail.com)
+-------------------------------------------------------------------------------
+Project description
+
+Implementation of simple charting library based on dojox.gfx/dojox.gfx3d.
+-------------------------------------------------------------------------------
+Dependencies:
+
+Dojo Core, dojox.gfx, dojox.gfx3d, dojox.lang.
+-------------------------------------------------------------------------------
+Documentation
+
+Not ready yet.
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/
+-------------------------------------------------------------------------------
diff --git a/includes/js/dojox/charting/Series.js b/includes/js/dojox/charting/Series.js
new file mode 100644
index 0000000..06115ec
--- /dev/null
+++ b/includes/js/dojox/charting/Series.js
@@ -0,0 +1,20 @@
+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.require("dojox.charting.Element");
+
+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 = {};
+ }
+});
+
+}
diff --git a/includes/js/dojox/charting/Theme.js b/includes/js/dojox/charting/Theme.js
new file mode 100644
index 0000000..c7e3a6a
--- /dev/null
+++ b/includes/js/dojox/charting/Theme.js
@@ -0,0 +1,256 @@
+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");
+dojo.require("dojox.charting._color");
+
+(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.mixin(dojo.clone(def[n]), kwArgs[n]||{});
+ }, this);
+ this.markers = dojo.mixin(dojo.clone(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;
+ this._colorCache = null;
+
+ // 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: { // gridlines
+ color:"#ccc",
+ width:1,
+ style:"Dot",
+ cap:"round"
+ },
+ majorTick: { // major ticks on axis
+ color:"#666",
+ width:1,
+ length:6,
+ position:"center"
+ },
+ minorTick: { // minor ticks on axis
+ 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:[
+ "#000","#111","#222","#333",
+ "#444","#555","#666","#777",
+ "#888","#999","#aaa","#bbb",
+ "#ccc"
+ ]
+ };
+
+ // 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||{};
+
+ // deal with caching
+ var cache = false;
+ if(kwArgs.cache === undefined){ cache = true; }
+ if(kwArgs.cache == true){ cache = true; }
+
+ if(cache){
+ this._colorCache=kwArgs;
+ } else {
+ var mix=this._colorCache||{};
+ kwArgs=dojo.mixin(dojo.clone(mix), kwArgs);
+ }
+
+ var c=[], n=kwArgs.num||32; // 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;
+ var step=(end-st)/n; // brightness steps
+ for(var i=0; i<n; i++){
+ c.push(dxc._color.fromHsb(kwArgs.hue, s, st+(step*i)).toHex());
+ }
+ this.colors=c;
+ }else if(kwArgs.stops){
+ // create color ranges that are either equally distributed, or
+ // (optionally) based on a passed "offset" property. If you
+ // pass an array of Colors, it will equally distribute, if
+ // you pass an array of structs { color, offset }, it will
+ // use the offset (0.0 - 1.0) to distribute. Note that offset
+ // values should be plotted on a line from 0.0 to 1.0--i.e.
+ // they should be additive. For example:
+ // [ {color, offset:0}, { color, offset:0.2 }, { color, offset:0.5 }, { color, offset:1.0 } ]
+ //
+ // If you use stops for colors, you MUST have a color at 0.0 and one
+ // at 1.0.
+
+ // figure out how many stops we have
+ var l=kwArgs.stops.length;
+ if(l<2){
+ throw new Error(
+ "dojox.charting.Theme::defineColors: when using stops to "
+ + "define a color range, you MUST specify at least 2 colors."
+ );
+ }
+
+ // figure out if the distribution is equal or not. Note that
+ // colors may not exactly match the stops you define; because
+ // color generation is linear (i.e. evenly divided on a linear
+ // axis), it's very possible that a color will land in between
+ // two stops and not exactly *at* a stop.
+ //
+ // The only two colors guaranteed will be the end stops (i.e.
+ // the first and last stop), which will *always* be set as
+ // the end stops.
+ if(typeof(kwArgs.stops[0].offset) == "undefined"){
+ // set up equal offsets
+ var off=1/(l-1);
+ for(var i=0; i<l; i++){
+ kwArgs.stops[i]={
+ color:kwArgs.stops[i],
+ offset:off*i
+ };
+ }
+ }
+ // ensure the ends.
+ kwArgs.stops[0].offset=0;
+ kwArgs.stops[l-1].offset=1;
+ kwArgs.stops.sort(function(a,b){ return a.offset-b.offset; });
+
+ // create the colors.
+ // first stop.
+ c.push(kwArgs.stops[0].color.toHex());
+
+ // TODO: calculate the blend at n/steps and set the color
+
+ // last stop
+ c.push(kwArgs.stops[l-1].color.toHex());
+ this.colors=c;
+ }
+ },
+
+ _buildMarkerArray: function(){
+ this._markers = [];
+ for(var p in this.markers){ this._markers.push(this.markers[p]); }
+ // reset the position
+ this._current.marker=0;
+ },
+
+ 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};
+ }
+ });
+})();
+
+}
diff --git a/includes/js/dojox/charting/_color.js b/includes/js/dojox/charting/_color.js
new file mode 100644
index 0000000..7fe2947
--- /dev/null
+++ b/includes/js/dojox/charting/_color.js
@@ -0,0 +1,62 @@
+if(!dojo._hasResource["dojox.charting._color"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting._color"] = true;
+dojo.provide("dojox.charting._color");
+
+dojox.charting._color={};
+dojox.charting._color.fromHsb=function(/* int */hue, /* int */saturation, /* int */brightness){
+ // summary
+ // Creates an instance of dojo.Color based on HSB input (360, %, %)
+ hue=Math.round(hue);
+ saturation=Math.round((saturation/100)*255);
+ brightness=Math.round((brightness/100)*255);
+
+ var r, g, b;
+ if(saturation==0){
+ r=g=b=brightness;
+ } else {
+ var tint1=brightness,
+ tint2=(255-saturation)*brightness/255,
+ tint3=(tint1-tint2)*(hue%60)/60;
+ if(hue<60){ r=tint1, g=tint2+tint3, b=tint2; }
+ else if(hue<120){ r=tint1-tint3, g=tint1, b=tint2; }
+ else if(hue<180){ r=tint2, g=tint1, b=tint2+tint3; }
+ else if(hue<240){ r=tint2, g=tint1-tint3, b=tint1; }
+ else if(hue<300){ r=tint2+tint3, g=tint2, b=tint1; }
+ else if(hue<360){ r=tint1, g=tint2, b=tint1-tint3; }
+ }
+
+ r=Math.round(r); g=Math.round(g); b=Math.round(b);
+ return new dojo.Color({ r:r, g:g, b:b });
+};
+
+dojox.charting._color.toHsb=function(/* int|Object|dojo.Color */ red, /* int? */ green, /* int? */blue){
+ // summary
+ // Returns the color in HSB representation (360, %, %)
+ var r=red,g=green,b=blue;
+ if(dojo.isObject(red)){
+ r=red.r,g=red.g,b=red.b;
+ }
+ var min=Math.min(r,g,b);
+ var max=Math.max(r,g,b);
+ var delta=max-min;
+
+ var hue=0, saturation=(max!=0?delta/max:0), brightness=max/255;
+ if(saturation==0){ hue=0; }
+ else {
+ if(r==max){ hue=((max-b)/delta)-((max-g)/delta); }
+ else if(g==max){ hue=2+(((max-r)/delta)-((max-b)/delta)); }
+ else { hue=4+(((max-g)/delta)-((max-r)/delta)); }
+ hue/=6;
+ if(hue<0) hue++;
+ }
+
+ hue=Math.round(hue*360);
+ saturation=Math.round(saturation*100);
+ brightness=Math.round(brightness*100);
+ return {
+ h:hue, s:saturation, b:brightness,
+ hue:hue, saturation:saturation, brightness:brightness
+ }; // Object
+};
+
+}
diff --git a/includes/js/dojox/charting/axis2d/Base.js b/includes/js/dojox/charting/axis2d/Base.js
new file mode 100644
index 0000000..ea9bf78
--- /dev/null
+++ b/includes/js/dojox/charting/axis2d/Base.js
@@ -0,0 +1,31 @@
+if(!dojo._hasResource["dojox.charting.axis2d.Base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.axis2d.Base"] = true;
+dojo.provide("dojox.charting.axis2d.Base");
+
+dojo.require("dojox.charting.Element");
+
+dojo.declare("dojox.charting.axis2d.Base", dojox.charting.Element, {
+ constructor: function(chart, kwArgs){
+ this.vertical = kwArgs && kwArgs.vertical;
+ },
+ clear: function(){
+ return this;
+ },
+ initialized: function(){
+ return false;
+ },
+ calculate: function(min, max, span){
+ return this;
+ },
+ getScaler: function(){
+ return null;
+ },
+ getOffsets: function(){
+ return {l: 0, r: 0, t: 0, b: 0};
+ },
+ render: function(dim, offsets){
+ return this;
+ }
+});
+
+}
diff --git a/includes/js/dojox/charting/axis2d/Default.js b/includes/js/dojox/charting/axis2d/Default.js
new file mode 100644
index 0000000..491d9e9
--- /dev/null
+++ b/includes/js/dojox/charting/axis2d/Default.js
@@ -0,0 +1,323 @@
+if(!dojo._hasResource["dojox.charting.axis2d.Default"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.axis2d.Default"] = true;
+dojo.provide("dojox.charting.axis2d.Default");
+
+dojo.require("dojox.charting.scaler");
+dojo.require("dojox.charting.axis2d.common");
+dojo.require("dojox.charting.axis2d.Base");
+
+dojo.require("dojo.colors");
+dojo.require("dojox.gfx");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.utils");
+
+(function(){
+ var dc = dojox.charting,
+ df = dojox.lang.functional,
+ du = dojox.lang.utils,
+ g = dojox.gfx,
+ labelGap = 4; // in pixels
+
+ 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.declare("dojox.charting.axis2d.Default", dojox.charting.axis2d.Base, {
+ defaultParams: {
+ vertical: false, // true for vertical axis
+ fixUpper: "none", // align the upper on ticks: "major", "minor", "micro", "none"
+ fixLower: "none", // align the lower on ticks: "major", "minor", "micro", "none"
+ natural: false, // all tick marks should be made on natural numbers
+ leftBottom: true, // position of the axis, used with "vertical"
+ includeZero: false, // 0 should be included
+ fixed: true, // all labels are fixed numbers
+ majorLabels: true, // draw major labels
+ minorTicks: true, // draw minor ticks
+ minorLabels: true, // draw minor labels
+ microTicks: false, // draw micro ticks
+ htmlLabels: true // use HTML to draw labels
+ },
+ optionalParams: {
+ "min": 0, // minimal value on this axis
+ "max": 1, // maximal value on this axis
+ "majorTickStep": 4, // major tick step
+ "minorTickStep": 2, // minor tick step
+ "microTickStep": 1, // micro tick step
+ "labels": [], // array of labels for major ticks
+ // with corresponding numeric values
+ // ordered by values
+ // theme components
+ "stroke": {}, // stroke for an axis
+ "majorTick": {}, // stroke + length for a tick
+ "minorTick": {}, // stroke + length for a tick
+ "font": "", // font for labels
+ "fontColor": "" // color for labels as a string
+ },
+
+ constructor: function(chart, kwArgs){
+ this.opt = dojo.clone(this.defaultParams);
+ du.updateWithObject(this.opt, kwArgs);
+ du.updateWithPattern(this.opt, kwArgs, this.optionalParams);
+ },
+ dependOnData: function(){
+ return !("min" in this.opt) || !("max" in this.opt);
+ },
+ clear: function(){
+ delete this.scaler;
+ this.dirty = true;
+ return this;
+ },
+ initialized: function(){
+ return "scaler" in this;
+ },
+ calculate: function(min, max, span, labels){
+ if(this.initialized()){ return this; }
+ this.labels = "labels" in this.opt ? this.opt.labels : labels;
+ if("min" in this.opt){ min = this.opt.min; }
+ if("max" in this.opt){ max = this.opt.max; }
+ if(this.opt.includeZero){
+ if(min > 0){ min = 0; }
+ if(max < 0){ max = 0; }
+ }
+ var minMinorStep = 0, ta = this.chart.theme.axis,
+ taFont = "font" in this.opt ? this.opt.font : ta.font,
+ size = taFont ? g.normalizedLength(g.splitFontString(taFont).size) : 0;
+ if(this.vertical){
+ if(size){
+ minMinorStep = size + labelGap;
+ }
+ }else{
+ if(size){
+ var labelWidth, i;
+ if(this.labels){
+ labelWidth = df.foldl(df.map(this.labels, function(label){
+ return dojox.gfx._base._getTextBox(label.text, {font: taFont}).w;
+ }), "Math.max(a, b)", 0);
+ }else{
+ var labelLength = Math.ceil(Math.log(Math.max(Math.abs(min), Math.abs(max))) / Math.LN10), t = [];
+ if(min < 0 || max < 0){ t.push("-"); }
+ for(i = 0; i < labelLength; ++i){ t.push("9"); }
+ var precision = Math.floor(Math.log(max - min) / Math.LN10);
+ if(precision > 0){
+ t.push(".");
+ for(i = 0; i < precision; ++i){ t.push("9"); }
+ }
+ labelWidth = dojox.gfx._base._getTextBox(t.join(""), {font: taFont}).w;
+ }
+ minMinorStep = labelWidth + labelGap;
+ }
+ }
+ var kwArgs = {
+ fixUpper: this.opt.fixUpper,
+ fixLower: this.opt.fixLower,
+ natural: this.opt.natural
+ };
+ if("majorTickStep" in this.opt){ kwArgs.majorTick = this.opt.majorTickStep; }
+ if("minorTickStep" in this.opt){ kwArgs.minorTick = this.opt.minorTickStep; }
+ if("microTickStep" in this.opt){ kwArgs.microTick = this.opt.microTickStep; }
+ this.scaler = dojox.charting.scaler(min, max, span, kwArgs);
+ this.scaler.minMinorStep = minMinorStep;
+ return this;
+ },
+ getScaler: function(){
+ return this.scaler;
+ },
+ getOffsets: function(){
+ var offsets = {l: 0, r: 0, t: 0, b: 0}, s, labelWidth, gtb, a, b, c, d;
+ var offset = 0, ta = this.chart.theme.axis,
+ taFont = "font" in this.opt ? this.opt.font : ta.font,
+ taMajorTick = "majorTick" in this.opt ? this.opt.majorTick : ta.majorTick,
+ taMinorTick = "minorTick" in this.opt ? this.opt.minorTick : ta.minorTick,
+ size = taFont ? g.normalizedLength(g.splitFontString(taFont).size) : 0;
+ if(this.vertical){
+ if(size){
+ s = this.scaler;
+ if(this.labels){
+ labelWidth = df.foldl(df.map(this.labels, function(label){
+ return dojox.gfx._base._getTextBox(label.text, {font: taFont}).w;
+ }), "Math.max(a, b)", 0);
+ }else{
+ gtb = dojox.gfx._base._getTextBox;
+ a = gtb(this._getLabel(s.major.start, s.major.prec), {font: taFont}).w;
+ b = gtb(this._getLabel(s.major.start + s.major.count * s.major.tick, s.major.prec), {font: taFont}).w;
+ c = gtb(this._getLabel(s.minor.start, s.minor.prec), {font: taFont}).w;
+ d = gtb(this._getLabel(s.minor.start + s.minor.count * s.minor.tick, s.minor.prec), {font: taFont}).w;
+ labelWidth = Math.max(a, b, c, d);
+ }
+ offset = labelWidth + labelGap;
+ }
+ offset += labelGap + Math.max(taMajorTick.length, taMinorTick.length);
+ offsets[this.opt.leftBottom ? "l" : "r"] = offset;
+ offsets.t = offsets.b = size / 2;
+ }else{
+ if(size){
+ offset = size + labelGap;
+ }
+ offset += labelGap + Math.max(taMajorTick.length, taMinorTick.length);
+ offsets[this.opt.leftBottom ? "b" : "t"] = offset;
+ if(size){
+ s = this.scaler;
+ if(this.labels){
+ labelWidth = df.foldl(df.map(this.labels, function(label){
+ return dojox.gfx._base._getTextBox(label.text, {font: taFont}).w;
+ }), "Math.max(a, b)", 0);
+ }else{
+ gtb = dojox.gfx._base._getTextBox;
+ a = gtb(this._getLabel(s.major.start, s.major.prec), {font: taFont}).w;
+ b = gtb(this._getLabel(s.major.start + s.major.count * s.major.tick, s.major.prec), {font: taFont}).w;
+ c = gtb(this._getLabel(s.minor.start, s.minor.prec), {font: taFont}).w;
+ d = gtb(this._getLabel(s.minor.start + s.minor.count * s.minor.tick, s.minor.prec), {font: taFont}).w;
+ labelWidth = Math.max(a, b, c, d);
+ }
+ offsets.l = offsets.r = labelWidth / 2;
+ }
+ }
+ return offsets;
+ },
+ render: function(dim, offsets){
+ if(!this.dirty){ return this; }
+ // prepare variable
+ var start, stop, axisVector, tickVector, labelOffset, labelAlign,
+ ta = this.chart.theme.axis,
+ taStroke = "stroke" in this.opt ? this.opt.stroke : ta.stroke,
+ taMajorTick = "majorTick" in this.opt ? this.opt.majorTick : ta.majorTick,
+ taMinorTick = "minorTick" in this.opt ? this.opt.minorTick : ta.minorTick,
+ taFont = "font" in this.opt ? this.opt.font : ta.font,
+ taFontColor = "fontColor" in this.opt ? this.opt.fontColor : ta.fontColor,
+ tickSize = Math.max(taMajorTick.length, taMinorTick.length),
+ size = taFont ? g.normalizedLength(g.splitFontString(taFont).size) : 0;
+ if(this.vertical){
+ start = {y: dim.height - offsets.b};
+ stop = {y: offsets.t};
+ axisVector = {x: 0, y: -1};
+ if(this.opt.leftBottom){
+ start.x = stop.x = offsets.l;
+ tickVector = {x: -1, y: 0};
+ labelAlign = "end";
+ }else{
+ start.x = stop.x = dim.width - offsets.r;
+ tickVector = {x: 1, y: 0};
+ labelAlign = "start";
+ }
+ labelOffset = {x: tickVector.x * (tickSize + labelGap), y: size * 0.4};
+ }else{
+ start = {x: offsets.l};
+ stop = {x: dim.width - offsets.r};
+ axisVector = {x: 1, y: 0};
+ labelAlign = "middle";
+ if(this.opt.leftBottom){
+ start.y = stop.y = dim.height - offsets.b;
+ tickVector = {x: 0, y: 1};
+ labelOffset = {y: tickSize + labelGap + size};
+ }else{
+ start.y = stop.y = offsets.t;
+ tickVector = {x: 0, y: -1};
+ labelOffset = {y: -tickSize - labelGap};
+ }
+ labelOffset.x = 0;
+ }
+
+ // render shapes
+ this.cleanGroup();
+ var s = this.group, c = this.scaler, step, next,
+ nextMajor = c.major.start, nextMinor = c.minor.start, nextMicro = c.micro.start;
+ s.createLine({x1: start.x, y1: start.y, x2: stop.x, y2: stop.y}).setStroke(taStroke);
+ if(this.opt.microTicks && c.micro.tick){
+ step = c.micro.tick, next = nextMicro;
+ }else if(this.opt.minorTicks && c.minor.tick){
+ step = c.minor.tick, next = nextMinor;
+ }else if(c.major.tick){
+ step = c.major.tick, next = nextMajor;
+ }else{
+ // don't draw anything
+ return this;
+ }
+ while(next <= c.bounds.upper + 1/c.scale){
+ var offset = (next - c.bounds.lower) * c.scale,
+ x = start.x + axisVector.x * offset,
+ y = start.y + axisVector.y * offset, elem;
+ if(Math.abs(nextMajor - next) < step / 2){
+ // major tick
+ s.createLine({
+ x1: x, y1: y,
+ x2: x + tickVector.x * taMajorTick.length,
+ y2: y + tickVector.y * taMajorTick.length
+ }).setStroke(taMajorTick);
+ if(this.opt.majorLabels){
+ elem = dc.axis2d.common.createText[this.opt.htmlLabels && dojox.gfx.renderer != "vml" ? "html" : "gfx"]
+ (this.chart, s, x + labelOffset.x, y + labelOffset.y, labelAlign,
+ this._getLabel(nextMajor, c.major.prec), taFont, taFontColor);
+ if(this.opt.htmlLabels){ this.htmlElements.push(elem); }
+ }
+ nextMajor += c.major.tick;
+ nextMinor += c.minor.tick;
+ nextMicro += c.micro.tick;
+ }else if(Math.abs(nextMinor - next) < step / 2){
+ // minor tick
+ if(this.opt.minorTicks){
+ s.createLine({
+ x1: x, y1: y,
+ x2: x + tickVector.x * taMinorTick.length,
+ y2: y + tickVector.y * taMinorTick.length
+ }).setStroke(taMinorTick);
+ if(this.opt.minorLabels && (c.minMinorStep <= c.minor.tick * c.scale)){
+ elem = dc.axis2d.common.createText[this.opt.htmlLabels && dojox.gfx.renderer != "vml" ? "html" : "gfx"]
+ (this.chart, s, x + labelOffset.x, y + labelOffset.y, labelAlign,
+ this._getLabel(nextMinor, c.minor.prec), taFont, taFontColor);
+ if(this.opt.htmlLabels){ this.htmlElements.push(elem); }
+ }
+ }
+ nextMinor += c.minor.tick;
+ nextMicro += c.micro.tick;
+ }else{
+ // micro tick
+ if(this.opt.microTicks){
+ s.createLine({
+ x1: x, y1: y,
+ // use minor ticks for now
+ x2: x + tickVector.x * taMinorTick.length,
+ y2: y + tickVector.y * taMinorTick.length
+ }).setStroke(taMinorTick);
+ }
+ nextMicro += c.micro.tick;
+ }
+ next += step;
+ }
+ this.dirty = false;
+ return this;
+ },
+
+ // utilities
+ _getLabel: function(number, precision){
+ if(this.opt.labels){
+ // classic binary search
+ var l = this.opt.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 < 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 this.opt.fixed ? number.toFixed(precision < 0 ? -precision : 0) : number.toString();
+ }
+ });
+})();
+
+}
diff --git a/includes/js/dojox/charting/axis2d/common.js b/includes/js/dojox/charting/axis2d/common.js
new file mode 100644
index 0000000..dd8ceb3
--- /dev/null
+++ b/includes/js/dojox/charting/axis2d/common.js
@@ -0,0 +1,75 @@
+if(!dojo._hasResource["dojox.charting.axis2d.common"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.axis2d.common"] = true;
+dojo.provide("dojox.charting.axis2d.common");
+
+dojo.require("dojox.gfx");
+
+(function(){
+ var g = dojox.gfx;
+
+ function clearNode(s){
+ s.marginLeft = "0px";
+ s.marginTop = "0px";
+ s.marginRight = "0px";
+ s.marginBottom = "0px";
+ s.paddingLeft = "0px";
+ s.paddingTop = "0px";
+ s.paddingRight = "0px";
+ s.paddingBottom = "0px";
+ s.borderLeftWidth = "0px";
+ s.borderTopWidth = "0px";
+ s.borderRightWidth = "0px";
+ s.borderBottomWidth = "0px";
+ }
+
+ dojo.mixin(dojox.charting.axis2d.common, {
+ createText: {
+ gfx: function(chart, creator, x, y, align, text, font, fontColor){
+ return creator.createText({
+ x: x, y: y, text: text, align: align
+ }).setFont(font).setFill(fontColor);
+ },
+ html: function(chart, creator, x, y, align, text, font, fontColor){
+ // setup the text node
+ var p = dojo.doc.createElement("div"), s = p.style;
+ clearNode(s);
+ s.font = font;
+ p.innerHTML = text;
+ s.color = fontColor;
+ // measure the size
+ s.position = "absolute";
+ s.left = "-10000px";
+ dojo.body().appendChild(p);
+ var size = g.normalizedLength(g.splitFontString(font).size),
+ box = dojo.marginBox(p);
+ // new settings for the text node
+ dojo.body().removeChild(p);
+ s.position = "relative";
+ switch(align){
+ case "middle":
+ s.left = Math.floor(x - box.w / 2) + "px";
+ break;
+ case "end":
+ s.left = Math.floor(x - box.w) + "px";
+ break;
+ //case "start":
+ default:
+ s.left = Math.floor(x) + "px";
+ break;
+ }
+ s.top = Math.floor(y - size) + "px";
+ // setup the wrapper node
+ var wrap = dojo.doc.createElement("div"), w = wrap.style;
+ clearNode(w);
+ w.width = "0px";
+ w.height = "0px";
+ // insert nodes
+ wrap.appendChild(p)
+ chart.node.insertBefore(wrap, chart.node.firstChild);
+ return p;
+ }
+ }
+ });
+})();
+
+}
diff --git a/includes/js/dojox/charting/plot2d/Areas.js b/includes/js/dojox/charting/plot2d/Areas.js
new file mode 100644
index 0000000..35d859f
--- /dev/null
+++ b/includes/js/dojox/charting/plot2d/Areas.js
@@ -0,0 +1,14 @@
+if(!dojo._hasResource["dojox.charting.plot2d.Areas"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Areas"] = true;
+dojo.provide("dojox.charting.plot2d.Areas");
+
+dojo.require("dojox.charting.plot2d.Default");
+
+dojo.declare("dojox.charting.plot2d.Areas", dojox.charting.plot2d.Default, {
+ constructor: function(){
+ this.opt.lines = true;
+ this.opt.areas = true;
+ }
+});
+
+}
diff --git a/includes/js/dojox/charting/plot2d/Bars.js b/includes/js/dojox/charting/plot2d/Bars.js
new file mode 100644
index 0000000..dd82b64
--- /dev/null
+++ b/includes/js/dojox/charting/plot2d/Bars.js
@@ -0,0 +1,89 @@
+if(!dojo._hasResource["dojox.charting.plot2d.Bars"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Bars"] = true;
+dojo.provide("dojox.charting.plot2d.Bars");
+
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d.Base");
+
+dojo.require("dojox.lang.utils");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.reversed");
+
+(function(){
+ var df = dojox.lang.functional, du = dojox.lang.utils,
+ dc = dojox.charting.plot2d.common,
+ purgeGroup = df.lambda("item.purgeGroup()");
+
+ dojo.declare("dojox.charting.plot2d.Bars", dojox.charting.plot2d.Base, {
+ defaultParams: {
+ hAxis: "x", // use a horizontal axis named "x"
+ vAxis: "y", // use a vertical axis named "y"
+ gap: 0, // gap between columns in pixels
+ shadows: null // draw shadows
+ },
+ optionalParams: {}, // no optional parameters
+
+ constructor: function(chart, kwArgs){
+ this.opt = dojo.clone(this.defaultParams);
+ du.updateWithObject(this.opt, kwArgs);
+ this.series = [];
+ this.hAxis = this.opt.hAxis;
+ this.vAxis = this.opt.vAxis;
+ },
+
+ calculateAxes: function(dim){
+ var stats = dc.collectSimpleStats(this.series), t;
+ stats.hmin -= 0.5;
+ stats.hmax += 0.5;
+ t = stats.hmin, stats.hmin = stats.vmin, stats.vmin = t;
+ t = stats.hmax, stats.hmax = stats.vmax, stats.vmax = t;
+ this._calc(dim, stats);
+ return this;
+ },
+ render: function(dim, offsets){
+ if(this.dirty){
+ dojo.forEach(this.series, purgeGroup);
+ this.cleanGroup();
+ var s = this.group;
+ df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+ }
+ var t = this.chart.theme, color, stroke, fill, f,
+ gap = this.opt.gap < this._vScaler.scale / 3 ? this.opt.gap : 0;
+ for(var i = this.series.length - 1; i >= 0; --i){
+ var run = this.series[i];
+ if(!this.dirty && !run.dirty){ continue; }
+ run.cleanGroup();
+ var s = run.group;
+ if(!run.fill || !run.stroke){
+ // need autogenerated color
+ color = run.dyn.color = new dojo.Color(t.next("color"));
+ }
+ stroke = run.stroke ? run.stroke : dc.augmentStroke(t.series.stroke, color);
+ fill = run.fill ? run.fill : dc.augmentFill(t.series.fill, color);
+ var baseline = Math.max(0, this._hScaler.bounds.lower),
+ xoff = offsets.l + this._hScaler.scale * (baseline - this._hScaler.bounds.lower),
+ yoff = dim.height - offsets.b - this._vScaler.scale * (1.5 - this._vScaler.bounds.lower) + gap;
+ for(var j = 0; j < run.data.length; ++j){
+ var v = run.data[j],
+ width = this._hScaler.scale * (v - baseline),
+ height = this._vScaler.scale - 2 * gap,
+ w = Math.abs(width);
+ if(w >= 1 && height >= 1){
+ var shape = s.createRect({
+ x: xoff + (width < 0 ? width : 0),
+ y: yoff - this._vScaler.scale * j,
+ width: w, height: height
+ }).setFill(fill).setStroke(stroke);
+ run.dyn.fill = shape.getFill();
+ run.dyn.stroke = shape.getStroke();
+ }
+ }
+ run.dirty = false;
+ }
+ this.dirty = false;
+ return this;
+ }
+ });
+})();
+
+}
diff --git a/includes/js/dojox/charting/plot2d/Base.js b/includes/js/dojox/charting/plot2d/Base.js
new file mode 100644
index 0000000..c894ce3
--- /dev/null
+++ b/includes/js/dojox/charting/plot2d/Base.js
@@ -0,0 +1,60 @@
+if(!dojo._hasResource["dojox.charting.plot2d.Base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Base"] = true;
+dojo.provide("dojox.charting.plot2d.Base");
+
+dojo.require("dojox.charting.Element");
+dojo.require("dojox.charting.plot2d.common");
+
+dojo.declare("dojox.charting.plot2d.Base", dojox.charting.Element, {
+ clear: function(){
+ this.series = [];
+ this._hAxis = null;
+ this._vAxis = null;
+ this.dirty = true;
+ return this;
+ },
+ setAxis: function(axis){
+ if(axis){
+ this[axis.vertical ? "_vAxis" : "_hAxis"] = axis;
+ }
+ return this;
+ },
+ addSeries: function(run){
+ this.series.push(run);
+ return this;
+ },
+ calculateAxes: function(dim){
+ return this;
+ },
+ render: function(dim, offsets){
+ return this;
+ },
+ getRequiredColors: function(){
+ return this.series.length;
+ },
+
+ // utilities
+ _calc: function(dim, stats){
+ // calculate scaler
+ if(this._hAxis){
+ if(!this._hAxis.initialized()){
+ this._hAxis.calculate(stats.hmin, stats.hmax, dim.width);
+ }
+ this._hScaler = this._hAxis.getScaler();
+ }else{
+ this._hScaler = {bounds: {lower: stats.hmin, upper: stats.hmax},
+ scale: dim.width / (stats.hmax - stats.hmin)};
+ }
+ if(this._vAxis){
+ if(!this._vAxis.initialized()){
+ this._vAxis.calculate(stats.vmin, stats.vmax, dim.height);
+ }
+ this._vScaler = this._vAxis.getScaler();
+ }else{
+ this._vScaler = {bounds: {lower: stats.vmin, upper: stats.vmax},
+ scale: dim.height / (stats.vmax - stats.vmin)};
+ }
+ }
+});
+
+}
diff --git a/includes/js/dojox/charting/plot2d/ClusteredBars.js b/includes/js/dojox/charting/plot2d/ClusteredBars.js
new file mode 100644
index 0000000..9d64bb2
--- /dev/null
+++ b/includes/js/dojox/charting/plot2d/ClusteredBars.js
@@ -0,0 +1,63 @@
+if(!dojo._hasResource["dojox.charting.plot2d.ClusteredBars"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.ClusteredBars"] = true;
+dojo.provide("dojox.charting.plot2d.ClusteredBars");
+
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d.Bars");
+
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.reversed");
+
+(function(){
+ var df = dojox.lang.functional, dc = dojox.charting.plot2d.common,
+ purgeGroup = df.lambda("item.purgeGroup()");
+
+ dojo.declare("dojox.charting.plot2d.ClusteredBars", dojox.charting.plot2d.Bars, {
+ render: function(dim, offsets){
+ if(this.dirty){
+ dojo.forEach(this.series, purgeGroup);
+ this.cleanGroup();
+ var s = this.group;
+ df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+ }
+ var t = this.chart.theme, color, stroke, fill, f,
+ gap = this.opt.gap < this._vScaler.scale / 3 ? this.opt.gap : 0,
+ thickness = (this._vScaler.scale - 2 * gap) / this.series.length;
+ for(var i = this.series.length - 1; i >= 0; --i){
+ var run = this.series[i];
+ if(!this.dirty && !run.dirty){ continue; }
+ run.cleanGroup();
+ var s = run.group;
+ if(!run.fill || !run.stroke){
+ // need autogenerated color
+ color = run.dyn.color = new dojo.Color(t.next("color"));
+ }
+ stroke = run.stroke ? run.stroke : dc.augmentStroke(t.series.stroke, color);
+ fill = run.fill ? run.fill : dc.augmentFill(t.series.fill, color);
+ var baseline = Math.max(0, this._hScaler.bounds.lower),
+ xoff = offsets.l + this._hScaler.scale * (baseline - this._hScaler.bounds.lower),
+ yoff = dim.height - offsets.b - this._vScaler.scale * (1.5 - this._vScaler.bounds.lower) +
+ gap + thickness * (this.series.length - i - 1);
+ for(var j = 0; j < run.data.length; ++j){
+ var v = run.data[j],
+ width = this._hScaler.scale * (v - baseline),
+ height = thickness, w = Math.abs(width);
+ if(w >= 1 && height >= 1){
+ var shape = s.createRect({
+ x: xoff + (width < 0 ? width : 0),
+ y: yoff - this._vScaler.scale * j,
+ width: w, height: height
+ }).setFill(fill).setStroke(stroke);
+ run.dyn.fill = shape.getFill();
+ run.dyn.stroke = shape.getStroke();
+ }
+ }
+ run.dirty = false;
+ }
+ this.dirty = false;
+ return this;
+ }
+ });
+})();
+
+}
diff --git a/includes/js/dojox/charting/plot2d/ClusteredColumns.js b/includes/js/dojox/charting/plot2d/ClusteredColumns.js
new file mode 100644
index 0000000..9a4170a
--- /dev/null
+++ b/includes/js/dojox/charting/plot2d/ClusteredColumns.js
@@ -0,0 +1,63 @@
+if(!dojo._hasResource["dojox.charting.plot2d.ClusteredColumns"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.ClusteredColumns"] = true;
+dojo.provide("dojox.charting.plot2d.ClusteredColumns");
+
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d.Columns");
+
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.reversed");
+
+(function(){
+ var df = dojox.lang.functional, dc = dojox.charting.plot2d.common,
+ purgeGroup = df.lambda("item.purgeGroup()");
+
+ dojo.declare("dojox.charting.plot2d.ClusteredColumns", dojox.charting.plot2d.Columns, {
+ render: function(dim, offsets){
+ if(this.dirty){
+ dojo.forEach(this.series, purgeGroup);
+ this.cleanGroup();
+ var s = this.group;
+ df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+ }
+ var t = this.chart.theme, color, stroke, fill, f,
+ gap = this.opt.gap < this._hScaler.scale / 3 ? this.opt.gap : 0,
+ thickness = (this._hScaler.scale - 2 * gap) / this.series.length;
+ for(var i = 0; i < this.series.length; ++i){
+ var run = this.series[i];
+ if(!this.dirty && !run.dirty){ continue; }
+ run.cleanGroup();
+ var s = run.group;
+ if(!run.fill || !run.stroke){
+ // need autogenerated color
+ color = run.dyn.color = new dojo.Color(t.next("color"));
+ }
+ stroke = run.stroke ? run.stroke : dc.augmentStroke(t.series.stroke, color);
+ fill = run.fill ? run.fill : dc.augmentFill(t.series.fill, color);
+ var baseline = Math.max(0, this._vScaler.bounds.lower),
+ xoff = offsets.l + this._hScaler.scale * (0.5 - this._hScaler.bounds.lower) + gap + thickness * i,
+ yoff = dim.height - offsets.b - this._vScaler.scale * (baseline - this._vScaler.bounds.lower);
+ for(var j = 0; j < run.data.length; ++j){
+ var v = run.data[j],
+ width = thickness,
+ height = this._vScaler.scale * (v - baseline),
+ h = Math.abs(height);
+ if(width >= 1 && h >= 1){
+ var shape = s.createRect({
+ x: xoff + this._hScaler.scale * j,
+ y: yoff - (height < 0 ? 0 : height),
+ width: width, height: h
+ }).setFill(fill).setStroke(stroke);
+ run.dyn.fill = shape.getFill();
+ run.dyn.stroke = shape.getStroke();
+ }
+ }
+ run.dirty = false;
+ }
+ this.dirty = false;
+ return this;
+ }
+ });
+})();
+
+}
diff --git a/includes/js/dojox/charting/plot2d/Columns.js b/includes/js/dojox/charting/plot2d/Columns.js
new file mode 100644
index 0000000..ff97393
--- /dev/null
+++ b/includes/js/dojox/charting/plot2d/Columns.js
@@ -0,0 +1,88 @@
+if(!dojo._hasResource["dojox.charting.plot2d.Columns"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Columns"] = true;
+dojo.provide("dojox.charting.plot2d.Columns");
+
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d.Base");
+
+dojo.require("dojox.lang.utils");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.reversed");
+
+(function(){
+ var df = dojox.lang.functional, du = dojox.lang.utils,
+ dc = dojox.charting.plot2d.common,
+ purgeGroup = df.lambda("item.purgeGroup()");
+
+ dojo.declare("dojox.charting.plot2d.Columns", dojox.charting.plot2d.Base, {
+ defaultParams: {
+ hAxis: "x", // use a horizontal axis named "x"
+ vAxis: "y", // use a vertical axis named "y"
+ gap: 0, // gap between columns in pixels
+ shadows: null // draw shadows
+ },
+ optionalParams: {}, // no optional parameters
+
+ constructor: function(chart, kwArgs){
+ this.opt = dojo.clone(this.defaultParams);
+ du.updateWithObject(this.opt, kwArgs);
+ this.series = [];
+ this.hAxis = this.opt.hAxis;
+ this.vAxis = this.opt.vAxis;
+ },
+
+ calculateAxes: function(dim){
+ var stats = dc.collectSimpleStats(this.series);
+ stats.hmin -= 0.5;
+ stats.hmax += 0.5;
+ this._calc(dim, stats);
+ return this;
+ },
+ render: function(dim, offsets){
+ if(this.dirty){
+ dojo.forEach(this.series, purgeGroup);
+ this.cleanGroup();
+ var s = this.group;
+ df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+ }
+ var t = this.chart.theme, color, stroke, fill, f,
+ gap = this.opt.gap < this._hScaler.scale / 3 ? this.opt.gap : 0;
+ for(var i = this.series.length - 1; i >= 0; --i){
+ var run = this.series[i];
+ if(!this.dirty && !run.dirty){ continue; }
+ run.cleanGroup();
+ var s = run.group;
+ if(!run.fill || !run.stroke){
+ // need autogenerated color
+ color = run.dyn.color = new dojo.Color(t.next("color"));
+ }
+ stroke = run.stroke ? run.stroke : dc.augmentStroke(t.series.stroke, color);
+ fill = run.fill ? run.fill : dc.augmentFill(t.series.fill, color);
+ var baseline = Math.max(0, this._vScaler.bounds.lower),
+ xoff = offsets.l + this._hScaler.scale * (0.5 - this._hScaler.bounds.lower) + gap,
+ yoff = dim.height - offsets.b - this._vScaler.scale * (baseline - this._vScaler.bounds.lower);
+ for(var j = 0; j < run.data.length; ++j){
+ var v = run.data[j],
+ width = this._hScaler.scale - 2 * gap,
+ height = this._vScaler.scale * (v - baseline),
+ h = Math.abs(height);
+ if(width >= 1 && h >= 1){
+ var rect = {
+ x: xoff + this._hScaler.scale * j,
+ y: yoff - (height < 0 ? 0 : height),
+ width: width, height: h
+ },
+ shape = s.createRect(rect).setFill(fill).setStroke(stroke);
+ run.dyn.fill = shape.getFill();
+ run.dyn.stroke = shape.getStroke();
+ }
+ }
+ run.dirty = false;
+ }
+ this.dirty = false;
+ return this;
+ }
+ });
+})();
+
+}
diff --git a/includes/js/dojox/charting/plot2d/Default.js b/includes/js/dojox/charting/plot2d/Default.js
new file mode 100644
index 0000000..a8ca8a5
--- /dev/null
+++ b/includes/js/dojox/charting/plot2d/Default.js
@@ -0,0 +1,173 @@
+if(!dojo._hasResource["dojox.charting.plot2d.Default"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Default"] = true;
+dojo.provide("dojox.charting.plot2d.Default");
+
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d.Base");
+
+dojo.require("dojox.lang.utils");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.reversed");
+
+(function(){
+ var df = dojox.lang.functional, du = dojox.lang.utils,
+ dc = dojox.charting.plot2d.common,
+ purgeGroup = df.lambda("item.purgeGroup()");
+
+ dojo.declare("dojox.charting.plot2d.Default", dojox.charting.plot2d.Base, {
+ defaultParams: {
+ hAxis: "x", // use a horizontal axis named "x"
+ vAxis: "y", // use a vertical axis named "y"
+ lines: true, // draw lines
+ areas: false, // draw areas
+ markers: false, // draw markers
+ shadows: 0, // draw shadows
+ tension: 0 // draw curved lines (tension>0)
+ },
+ optionalParams: {}, // no optional parameters
+
+ constructor: function(chart, kwArgs){
+ this.opt = dojo.clone(this.defaultParams);
+ du.updateWithObject(this.opt, kwArgs);
+ this.series = [];
+ this.hAxis = this.opt.hAxis;
+ this.vAxis = this.opt.vAxis;
+ },
+
+ calculateAxes: function(dim){
+ this._calc(dim, dc.collectSimpleStats(this.series));
+ return this;
+ },
+ render: function(dim, offsets){
+ if(this.dirty){
+ dojo.forEach(this.series, purgeGroup);
+ this.cleanGroup();
+ var s = this.group;
+ df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+ }
+ var t = this.chart.theme, stroke, outline, color, marker;
+ for(var i = this.series.length - 1; i >= 0; --i){
+ var run = this.series[i];
+ if(!this.dirty && !run.dirty){ continue; }
+ run.cleanGroup();
+ if(!run.data.length){
+ run.dirty = false;
+ continue;
+ }
+
+ // inner function for translating polylines to curves with tension
+ function curve(arr, tension){
+ var p=dojo.map(arr, function(item, i){
+ if(i==0){ return "M" + item.x + "," + item.y; }
+ var dx=item.x-arr[i-1].x, dy=arr[i-1].y;
+ return "C"+(item.x-(tension-1)*(dx/tension))+","+dy+" "+(item.x-(dx/tension))+","+item.y+" "+item.x+","+item.y;
+ });
+ return p.join(" ");
+ }
+
+ var s = run.group, lpoly;
+ if(typeof run.data[0] == "number"){
+ lpoly = dojo.map(run.data, function(v, i){
+ return {
+ x: this._hScaler.scale * (i + 1 - this._hScaler.bounds.lower) + offsets.l,
+ y: dim.height - offsets.b - this._vScaler.scale * (v - this._vScaler.bounds.lower)
+ };
+ }, this);
+ }else{
+ lpoly = dojo.map(run.data, function(v, i){
+ return {
+ x: this._hScaler.scale * (v.x - this._hScaler.bounds.lower) + offsets.l,
+ y: dim.height - offsets.b - this._vScaler.scale * (v.y - this._vScaler.bounds.lower)
+ };
+ }, this);
+ }
+ if(!run.fill || !run.stroke){
+ // need autogenerated color
+ color = run.dyn.color = new dojo.Color(t.next("color"));
+ }
+
+ var lpath="";
+ if(this.opt.tension){
+ var lpath=curve(lpoly, this.opt.tension);
+ }
+
+ if(this.opt.areas){
+ var fill = run.fill ? run.fill : dc.augmentFill(t.series.fill, color);
+ var apoly = dojo.clone(lpoly);
+ if(this.opt.tension){
+ var apath="L" + (apoly[apoly.length-1].x) + "," + (dim.height-offsets.b) + " "
+ + "L"+apoly[0].x+","+(dim.height-offsets.b)+" "
+ + "L"+apoly[0].x+","+apoly[0].y;
+ run.dyn.fill = s.createPath(lpath+" "+apath).setFill(fill).getFill();
+ } else {
+ apoly.push({x: lpoly[lpoly.length - 1].x, y: dim.height - offsets.b});
+ apoly.push({x: lpoly[0].x, y: dim.height - offsets.b});
+ apoly.push(lpoly[0]);
+ run.dyn.fill = s.createPolyline(apoly).setFill(fill).getFill();
+ }
+ }
+ if(this.opt.lines || this.opt.markers){
+ // need a stroke
+ stroke = run.stroke ? dc.makeStroke(run.stroke) : dc.augmentStroke(t.series.stroke, color);
+ if(run.outline || t.series.outline){
+ outline = dc.makeStroke(run.outline ? run.outline : t.series.outline);
+ outline.width = 2 * outline.width + stroke.width;
+ }
+ }
+ if(this.opt.markers){
+ // need a marker
+ marker = run.dyn.marker = run.marker ? run.marker : t.next("marker");
+ }
+ if(this.opt.shadows && stroke){
+ var sh = this.opt.shadows, shadowColor = new dojo.Color([0, 0, 0, 0.3]),
+ spoly = dojo.map(lpoly, function(c){
+ return {x: c.x + sh.dx, y: c.y + sh.dy};
+ }),
+ shadowStroke = dojo.clone(outline ? outline : stroke);
+ shadowStroke.color = shadowColor;
+ shadowStroke.width += sh.dw ? sh.dw : 0;
+ if(this.opt.lines){
+ if(this.opt.tension){
+ s.createPath(curve(spoly, this.opt.tension)).setStroke(shadowStroke);
+ } else {
+ s.createPolyline(spoly).setStroke(shadowStroke);
+ }
+ }
+ if(this.opt.markers){
+ dojo.forEach(spoly, function(c){
+ s.createPath("M" + c.x + " " + c.y + " " + marker).setStroke(shadowStroke).setFill(shadowColor);
+ }, this);
+ }
+ }
+ if(this.opt.lines){
+ if(outline){
+ if(this.opt.tension){
+ run.dyn.outline = s.createPath(lpath).setStroke(outline).getStroke();
+ } else {
+ run.dyn.outline = s.createPolyline(lpoly).setStroke(outline).getStroke();
+ }
+ }
+ if(this.opt.tension){
+ run.dyn.stroke = s.createPath(lpath).setStroke(stroke).getStroke();
+ } else {
+ run.dyn.stroke = s.createPolyline(lpoly).setStroke(stroke).getStroke();
+ }
+ }
+ if(this.opt.markers){
+ dojo.forEach(lpoly, function(c){
+ var path = "M" + c.x + " " + c.y + " " + marker;
+ if(outline){
+ s.createPath(path).setStroke(outline);
+ }
+ s.createPath(path).setStroke(stroke).setFill(stroke.color);
+ }, this);
+ }
+ run.dirty = false;
+ }
+ this.dirty = false;
+ return this;
+ }
+ });
+})();
+
+}
diff --git a/includes/js/dojox/charting/plot2d/Grid.js b/includes/js/dojox/charting/plot2d/Grid.js
new file mode 100644
index 0000000..52cb348
--- /dev/null
+++ b/includes/js/dojox/charting/plot2d/Grid.js
@@ -0,0 +1,116 @@
+if(!dojo._hasResource["dojox.charting.plot2d.Grid"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Grid"] = true;
+dojo.provide("dojox.charting.plot2d.Grid");
+
+dojo.require("dojox.charting.Element");
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.lang.functional");
+
+(function(){
+ var du = dojox.lang.utils;
+
+ dojo.declare("dojox.charting.plot2d.Grid", dojox.charting.Element, {
+ defaultParams: {
+ hAxis: "x", // use a horizontal axis named "x"
+ vAxis: "y", // use a vertical axis named "y"
+ hMajorLines: true, // draw horizontal major lines
+ hMinorLines: false, // draw horizontal minor lines
+ vMajorLines: true, // draw vertical major lines
+ vMinorLines: false, // draw vertical minor lines
+ hStripes: "none", // TBD
+ vStripes: "none" // TBD
+ },
+ optionalParams: {}, // no optional parameters
+
+ constructor: function(chart, kwArgs){
+ this.opt = dojo.clone(this.defaultParams);
+ du.updateWithObject(this.opt, kwArgs);
+ this.hAxis = this.opt.hAxis;
+ this.vAxis = this.opt.vAxis;
+ },
+ clear: function(){
+ this._hAxis = null;
+ this._vAxis = null;
+ this.dirty = true;
+ return this;
+ },
+ setAxis: function(axis){
+ if(axis){
+ this[axis.vertical ? "_vAxis" : "_hAxis"] = axis;
+ }
+ return this;
+ },
+ addSeries: function(run){
+ // nothing
+ return this;
+ },
+ calculateAxes: function(dim){
+ // nothing
+ return this;
+ },
+ getRequiredColors: function(){
+ return 0;
+ },
+ render: function(dim, offsets){
+ // draw horizontal stripes and lines
+ if(!this.dirty){ return this; }
+ this.cleanGroup();
+ var s = this.group, ta = this.chart.theme.axis,
+ scaler = this._vAxis.getScaler();
+ if(this.opt.hMinorLines && scaler.minor.tick){
+ for(var i = 0; i < scaler.minor.count; ++i){
+ var y = dim.height - offsets.b - scaler.scale *
+ (scaler.minor.start - scaler.bounds.lower + i * scaler.minor.tick);
+ s.createLine({
+ x1: offsets.l,
+ y1: y,
+ x2: dim.width - offsets.r,
+ y2: y
+ }).setStroke(ta.minorTick);
+ }
+ }
+ if(this.opt.hMajorLines && scaler.major.tick){
+ for(var i = 0; i < scaler.major.count; ++i){
+ var y = dim.height - offsets.b - scaler.scale *
+ (scaler.major.start - scaler.bounds.lower + i * scaler.major.tick);
+ s.createLine({
+ x1: offsets.l,
+ y1: y,
+ x2: dim.width - offsets.r,
+ y2: y
+ }).setStroke(ta.majorTick);
+ }
+ }
+ // draw vertical stripes and lines
+ scaler = this._hAxis.getScaler();
+ if(this.opt.vMinorLines && scaler.minor.tick){
+ for(var i = 0; i < scaler.minor.count; ++i){
+ var x = offsets.l + scaler.scale *
+ (scaler.minor.start - scaler.bounds.lower + i * scaler.minor.tick);
+ s.createLine({
+ x1: x,
+ y1: offsets.t,
+ x2: x,
+ y2: dim.height - offsets.b
+ }).setStroke(ta.minorTick);
+ }
+ }
+ if(this.opt.vMajorLines && scaler.major.tick){
+ for(var i = 0; i < scaler.major.count; ++i){
+ var x = offsets.l + scaler.scale *
+ (scaler.major.start - scaler.bounds.lower + i * scaler.major.tick);
+ s.createLine({
+ x1: x,
+ y1: offsets.t,
+ x2: x,
+ y2: dim.height - offsets.b
+ }).setStroke(ta.majorTick);
+ }
+ }
+ this.dirty = false;
+ return this;
+ }
+ });
+})();
+
+}
diff --git a/includes/js/dojox/charting/plot2d/Lines.js b/includes/js/dojox/charting/plot2d/Lines.js
new file mode 100644
index 0000000..34e6897
--- /dev/null
+++ b/includes/js/dojox/charting/plot2d/Lines.js
@@ -0,0 +1,13 @@
+if(!dojo._hasResource["dojox.charting.plot2d.Lines"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Lines"] = true;
+dojo.provide("dojox.charting.plot2d.Lines");
+
+dojo.require("dojox.charting.plot2d.Default");
+
+dojo.declare("dojox.charting.plot2d.Lines", dojox.charting.plot2d.Default, {
+ constructor: function(){
+ this.opt.lines = true;
+ }
+});
+
+}
diff --git a/includes/js/dojox/charting/plot2d/Markers.js b/includes/js/dojox/charting/plot2d/Markers.js
new file mode 100644
index 0000000..177aafb
--- /dev/null
+++ b/includes/js/dojox/charting/plot2d/Markers.js
@@ -0,0 +1,13 @@
+if(!dojo._hasResource["dojox.charting.plot2d.Markers"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Markers"] = true;
+dojo.provide("dojox.charting.plot2d.Markers");
+
+dojo.require("dojox.charting.plot2d.Default");
+
+dojo.declare("dojox.charting.plot2d.Markers", dojox.charting.plot2d.Default, {
+ constructor: function(){
+ this.opt.markers = true;
+ }
+});
+
+}
diff --git a/includes/js/dojox/charting/plot2d/MarkersOnly.js b/includes/js/dojox/charting/plot2d/MarkersOnly.js
new file mode 100644
index 0000000..48cd663
--- /dev/null
+++ b/includes/js/dojox/charting/plot2d/MarkersOnly.js
@@ -0,0 +1,14 @@
+if(!dojo._hasResource["dojox.charting.plot2d.MarkersOnly"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.MarkersOnly"] = true;
+dojo.provide("dojox.charting.plot2d.MarkersOnly");
+
+dojo.require("dojox.charting.plot2d.Default");
+
+dojo.declare("dojox.charting.plot2d.MarkersOnly", dojox.charting.plot2d.Default, {
+ constructor: function(){
+ this.opt.lines = false;
+ this.opt.markers = true;
+ }
+});
+
+}
diff --git a/includes/js/dojox/charting/plot2d/Pie.js b/includes/js/dojox/charting/plot2d/Pie.js
new file mode 100644
index 0000000..2d0f55e
--- /dev/null
+++ b/includes/js/dojox/charting/plot2d/Pie.js
@@ -0,0 +1,199 @@
+if(!dojo._hasResource["dojox.charting.plot2d.Pie"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Pie"] = true;
+dojo.provide("dojox.charting.plot2d.Pie");
+
+dojo.require("dojox.charting.Element");
+dojo.require("dojox.charting.axis2d.common");
+dojo.require("dojox.charting.plot2d.common");
+
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.gfx");
+
+(function(){
+ var df = dojox.lang.functional, du = dojox.lang.utils,
+ dc = dojox.charting.plot2d.common,
+ da = dojox.charting.axis2d.common,
+ g = dojox.gfx;
+
+ dojo.declare("dojox.charting.plot2d.Pie", dojox.charting.Element, {
+ defaultParams: {
+ labels: true,
+ ticks: false,
+ fixed: true,
+ precision: 1,
+ labelOffset: 20,
+ labelStyle: "default", // default/rows/auto
+ htmlLabels: true // use HTML to draw labels
+ },
+ optionalParams: {
+ font: "",
+ fontColor: "",
+ radius: 0
+ },
+
+ constructor: function(chart, kwArgs){
+ this.opt = dojo.clone(this.defaultParams);
+ du.updateWithObject(this.opt, kwArgs);
+ du.updateWithPattern(this.opt, kwArgs, this.optionalParams);
+ this.run = null;
+ this.dyn = [];
+ },
+ clear: function(){
+ this.dirty = true;
+ this.dyn = [];
+ return this;
+ },
+ setAxis: function(axis){
+ // nothing
+ return this;
+ },
+ addSeries: function(run){
+ this.run = run;
+ return this;
+ },
+ calculateAxes: function(dim){
+ // nothing
+ return this;
+ },
+ getRequiredColors: function(){
+ return this.run ? this.run.data.length : 0;
+ },
+ render: function(dim, offsets){
+ if(!this.dirty){ return this; }
+ this.dirty = false;
+ this.cleanGroup();
+ var s = this.group, color, t = this.chart.theme;
+
+ // calculate the geometry
+ var rx = (dim.width - offsets.l - offsets.r) / 2,
+ ry = (dim.height - offsets.t - offsets.b) / 2,
+ r = Math.min(rx, ry),
+ taFont = "font" in this.opt ? this.opt.font : t.axis.font,
+ size = taFont ? g.normalizedLength(g.splitFontString(taFont).size) : 0,
+ taFontColor = "fontColor" in this.opt ? this.opt.fontColor : t.axis.fontColor,
+ start = 0, step, sum, slices, labels, shift, labelR,
+ run = this.run.data;
+ if(typeof run[0] == "number"){
+ sum = df.foldl1(run, "+");
+ slices = dojo.map(run, function(x){ return x / sum; });
+ if(this.opt.labels){
+ labels = dojo.map(slices, function(x){
+ return this._getLabel(x * 100) + "%";
+ }, this);
+ }
+ }else{
+ sum = df.foldl1(run, function(a, b){ return {y: a.y + b.y}; }).y;
+ slices = df.map(run, function(x){ return x.y / sum; });
+ if(this.opt.labels){
+ labels = dojo.map(slices, function(x, i){
+ var v = run[i];
+ return "text" in v ? v.text : this._getLabel(x * 100) + "%";
+ }, this);
+ }
+ }
+ if(this.opt.labels){
+ shift = df.foldl1(df.map(labels, function(label){
+ return dojox.gfx._base._getTextBox(label, {font: taFont}).w;
+ }, this), "Math.max(a, b)") / 2;
+ if(this.opt.labelOffset < 0){
+ r = Math.min(rx - 2 * shift, ry - size) + this.opt.labelOffset;
+ }
+ labelR = r - this.opt.labelOffset;
+ }
+ if("radius" in this.opt){
+ r = this.opt.radius;
+ labelR = r - this.opt.labelOffset;
+ }
+ var circle = {
+ cx: offsets.l + rx,
+ cy: offsets.t + ry,
+ r: r
+ };
+
+ this.dyn = [];
+ if(!this.run || !run.length){
+ return this;
+ }
+ if(run.length == 1){
+ // need autogenerated color
+ color = new dojo.Color(t.next("color"));
+ var shape = s.createCircle(circle).
+ setFill(dc.augmentFill(t.run.fill, color)).
+ setStroke(dc.augmentStroke(t.series.stroke, color));
+ this.dyn.push({color: color, fill: shape.getFill(), stroke: shape.getStroke()});
+ if(this.opt.labels){
+ // draw the label
+ var elem = da.createText[this.opt.htmlLabels && dojox.gfx.renderer != "vml" ? "html" : "gfx"]
+ (this.chart, s, circle.cx, circle.cy + size / 2, "middle",
+ "100%", taFont, taFontColor);
+ if(this.opt.htmlLabels){ this.htmlElements.push(elem); }
+ }
+ return this;
+ }
+ // draw slices
+ dojo.forEach(slices, function(x, i){
+ // calculate the geometry of the slice
+ var end = start + x * 2 * Math.PI, v = run[i];
+ if(i + 1 == slices.length){
+ end = 2 * Math.PI;
+ }
+ var step = end - start,
+ x1 = circle.cx + r * Math.cos(start),
+ y1 = circle.cy + r * Math.sin(start),
+ x2 = circle.cx + r * Math.cos(end),
+ y2 = circle.cy + r * Math.sin(end);
+ // draw the slice
+ var color, fill, stroke;
+ if(typeof v == "object"){
+ color = "color" in v ? v.color : new dojo.Color(t.next("color"));
+ fill = "fill" in v ? v.fill : dc.augmentFill(t.series.fill, color);
+ stroke = "stroke" in v ? v.stroke : dc.augmentStroke(t.series.stroke, color);
+ }else{
+ color = new dojo.Color(t.next("color"));
+ fill = dc.augmentFill(t.series.fill, color);
+ stroke = dc.augmentStroke(t.series.stroke, color);
+ }
+ var shape = s.createPath({}).
+ moveTo(circle.cx, circle.cy).
+ lineTo(x1, y1).
+ arcTo(r, r, 0, step > Math.PI, true, x2, y2).
+ lineTo(circle.cx, circle.cy).
+ closePath().
+ setFill(fill).
+ setStroke(stroke);
+ this.dyn.push({color: color, fill: fill, stroke: stroke});
+ start = end;
+ }, this);
+ // draw labels
+ if(this.opt.labels){
+ start = 0;
+ dojo.forEach(slices, function(slice, i){
+ // calculate the geometry of the slice
+ var end = start + slice * 2 * Math.PI, v = run[i];
+ if(i + 1 == slices.length){
+ end = 2 * Math.PI;
+ }
+ var labelAngle = (start + end) / 2,
+ x = circle.cx + labelR * Math.cos(labelAngle),
+ y = circle.cy + labelR * Math.sin(labelAngle) + size / 2;
+ // draw the label
+ var elem = da.createText[this.opt.htmlLabels && dojox.gfx.renderer != "vml" ? "html" : "gfx"]
+ (this.chart, s, x, y, "middle",
+ labels[i], taFont,
+ (typeof v == "object" && "fontColor" in v)
+ ? v.fontColor : taFontColor);
+ if(this.opt.htmlLabels){ this.htmlElements.push(elem); }
+ start = end;
+ }, this);
+ }
+ return this;
+ },
+
+ // utilities
+ _getLabel: function(number){
+ return this.opt.fixed ? number.toFixed(this.opt.precision) : number.toString();
+ }
+ });
+})();
+
+}
diff --git a/includes/js/dojox/charting/plot2d/Scatter.js b/includes/js/dojox/charting/plot2d/Scatter.js
new file mode 100644
index 0000000..d307cb1
--- /dev/null
+++ b/includes/js/dojox/charting/plot2d/Scatter.js
@@ -0,0 +1,14 @@
+if(!dojo._hasResource["dojox.charting.plot2d.Scatter"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Scatter"] = true;
+dojo.provide("dojox.charting.plot2d.Scatter");
+
+dojo.require("dojox.charting.plot2d.Default");
+
+dojo.declare("dojox.charting.plot2d.Scatter", dojox.charting.plot2d.Default, {
+ constructor: function(){
+ this.opt.lines = false;
+ this.opt.markers = true;
+ }
+});
+
+}
diff --git a/includes/js/dojox/charting/plot2d/Stacked.js b/includes/js/dojox/charting/plot2d/Stacked.js
new file mode 100644
index 0000000..0e26a75
--- /dev/null
+++ b/includes/js/dojox/charting/plot2d/Stacked.js
@@ -0,0 +1,160 @@
+if(!dojo._hasResource["dojox.charting.plot2d.Stacked"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Stacked"] = true;
+dojo.provide("dojox.charting.plot2d.Stacked");
+
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d.Default");
+
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.sequence");
+dojo.require("dojox.lang.functional.reversed");
+
+(function(){
+ var df = dojox.lang.functional, dc = dojox.charting.plot2d.common,
+ purgeGroup = df.lambda("item.purgeGroup()");
+
+ dojo.declare("dojox.charting.plot2d.Stacked", dojox.charting.plot2d.Default, {
+ calculateAxes: function(dim){
+ var stats = dc.collectStackedStats(this.series);
+ this._maxRunLength = stats.hmax;
+ this._calc(dim, stats);
+ return this;
+ },
+ render: function(dim, offsets){
+ // stack all values
+ var acc = df.repeat(this._maxRunLength, "-> 0", 0);
+ for(var i = 0; i < this.series.length; ++i){
+ var run = this.series[i];
+ for(var j = 0; j < run.data.length; ++j){
+ var v = run.data[j];
+ if(isNaN(v)){ v = 0; }
+ acc[j] += v;
+ }
+ }
+ // draw runs in backwards
+ if(this.dirty){
+ dojo.forEach(this.series, purgeGroup);
+ this.cleanGroup();
+ var s = this.group;
+ df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+ }
+
+ // inner function for translating polylines to curves with tension
+ function curve(arr, tension){
+ var p=dojo.map(arr, function(item, i){
+ if(i==0){ return "M" + item.x + "," + item.y; }
+ var dx=item.x-arr[i-1].x, dy=arr[i-1].y;
+ return "C"+(item.x-(tension-1)*(dx/tension))+","+dy+" "+(item.x-(dx/tension))+","+item.y+" "+item.x+","+item.y;
+ });
+ return p.join(" ");
+ }
+
+ var t = this.chart.theme, stroke, outline, color, marker;
+ for(var i = this.series.length - 1; i >= 0; --i){
+ var run = this.series[i];
+ if(!this.dirty && !run.dirty){ continue; }
+ run.cleanGroup();
+ var s = run.group,
+ lpoly = dojo.map(acc, function(v, i){
+ return {
+ x: this._hScaler.scale * (i + 1 - this._hScaler.bounds.lower) + offsets.l,
+ y: dim.height - offsets.b - this._vScaler.scale * (v - this._vScaler.bounds.lower)
+ };
+ }, this);
+ if(!run.fill || !run.stroke){
+ // need autogenerated color
+ color = new dojo.Color(t.next("color"));
+ }
+
+ var lpath="";
+ if(this.opt.tension){
+ lpath=curve(lpoly, this.opt.tension);
+ }
+
+ if(this.opt.areas){
+ var apoly = dojo.clone(lpoly);
+ var fill = run.fill ? run.fill : dc.augmentFill(t.series.fill, color);
+ if(this.opt.tension){
+ var p=curve(apoly, this.opt.tension);
+ p += " L" + lpoly[lpoly.length-1].x + "," + (dim.height - offsets.b) + " "
+ + "L" + lpoly[0].x + "," + (dim.height - offsets.b) + " "
+ + "L" + lpoly[0].x + "," + lpoly[0].y;
+ s.createPath(p).setFill(fill);
+ } else {
+ apoly.push({x: lpoly[lpoly.length - 1].x, y: dim.height - offsets.b});
+ apoly.push({x: lpoly[0].x, y: dim.height - offsets.b});
+ apoly.push(lpoly[0]);
+ s.createPolyline(apoly).setFill(fill);
+ }
+ }
+ if(this.opt.lines || this.opt.markers){
+ // need a stroke
+ stroke = run.stroke ? dc.makeStroke(run.stroke) : dc.augmentStroke(t.series.stroke, color);
+ if(run.outline || t.series.outline){
+ outline = dc.makeStroke(run.outline ? run.outline : t.series.outline);
+ outline.width = 2 * outline.width + stroke.width;
+ }
+ }
+ if(this.opt.markers){
+ // need a marker
+ marker = run.marker ? run.marker : t.next("marker");
+ }
+ if(this.opt.shadows && stroke){
+ var sh = this.opt.shadows, shadowColor = new dojo.Color([0, 0, 0, 0.3]),
+ spoly = dojo.map(lpoly, function(c){
+ return {x: c.x + sh.dx, y: c.y + sh.dy};
+ }),
+ shadowStroke = dojo.clone(outline ? outline : stroke);
+ shadowStroke.color = shadowColor;
+ shadowStroke.width += sh.dw ? sh.dw : 0;
+ if(this.opt.lines){
+ if(this.opt.tension){
+ s.createPath(curve(spoly, this.opt.tension)).setStroke(shadowStroke);
+ } else {
+ s.createPolyline(spoly).setStroke(shadowStroke);
+ }
+ }
+ if(this.opt.markers){
+ dojo.forEach(spoly, function(c){
+ s.createPath("M" + c.x + " " + c.y + " " + marker).setStroke(shadowStroke).setFill(shadowColor);
+ }, this);
+ }
+ }
+ if(this.opt.lines){
+ if(outline){
+ if(this.opt.tension){
+ s.createPath(lpath).setStroke(outline);
+ } else {
+ s.createPolyline(lpoly).setStroke(outline);
+ }
+ }
+ if(this.opt.tension){
+ s.createPath(lpath).setStroke(stroke);
+ } else {
+ s.createPolyline(lpoly).setStroke(stroke);
+ }
+ }
+ if(this.opt.markers){
+ dojo.forEach(lpoly, function(c){
+ var path = "M" + c.x + " " + c.y + " " + marker;
+ if(outline){
+ s.createPath(path).setStroke(outline);
+ }
+ s.createPath(path).setStroke(stroke).setFill(stroke.color);
+ }, this);
+ }
+ run.dirty = false;
+ // update the accumulator
+ for(var j = 0; j < run.data.length; ++j){
+ var v = run.data[j];
+ if(isNaN(v)){ v = 0; }
+ acc[j] -= v;
+ }
+ }
+ this.dirty = false;
+ return this;
+ }
+ });
+})();
+
+}
diff --git a/includes/js/dojox/charting/plot2d/StackedAreas.js b/includes/js/dojox/charting/plot2d/StackedAreas.js
new file mode 100644
index 0000000..7bfd255
--- /dev/null
+++ b/includes/js/dojox/charting/plot2d/StackedAreas.js
@@ -0,0 +1,14 @@
+if(!dojo._hasResource["dojox.charting.plot2d.StackedAreas"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.StackedAreas"] = true;
+dojo.provide("dojox.charting.plot2d.StackedAreas");
+
+dojo.require("dojox.charting.plot2d.Stacked");
+
+dojo.declare("dojox.charting.plot2d.StackedAreas", dojox.charting.plot2d.Stacked, {
+ constructor: function(){
+ this.opt.lines = true;
+ this.opt.areas = true;
+ }
+});
+
+}
diff --git a/includes/js/dojox/charting/plot2d/StackedBars.js b/includes/js/dojox/charting/plot2d/StackedBars.js
new file mode 100644
index 0000000..e5c9c22
--- /dev/null
+++ b/includes/js/dojox/charting/plot2d/StackedBars.js
@@ -0,0 +1,85 @@
+if(!dojo._hasResource["dojox.charting.plot2d.StackedBars"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.StackedBars"] = true;
+dojo.provide("dojox.charting.plot2d.StackedBars");
+
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d.Bars");
+
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.reversed");
+
+(function(){
+ var df = dojox.lang.functional, dc = dojox.charting.plot2d.common,
+ purgeGroup = df.lambda("item.purgeGroup()");
+
+ dojo.declare("dojox.charting.plot2d.StackedBars", dojox.charting.plot2d.Bars, {
+ calculateAxes: function(dim){
+ var stats = dc.collectStackedStats(this.series), t;
+ this._maxRunLength = stats.hmax;
+ stats.hmin -= 0.5;
+ stats.hmax += 0.5;
+ t = stats.hmin, stats.hmin = stats.vmin, stats.vmin = t;
+ t = stats.hmax, stats.hmax = stats.vmax, stats.vmax = t;
+ this._calc(dim, stats);
+ return this;
+ },
+ render: function(dim, offsets){
+ // stack all values
+ var acc = df.repeat(this._maxRunLength, "-> 0", 0);
+ for(var i = 0; i < this.series.length; ++i){
+ var run = this.series[i];
+ for(var j = 0; j < run.data.length; ++j){
+ var v = run.data[j];
+ if(isNaN(v)){ v = 0; }
+ acc[j] += v;
+ }
+ }
+ // draw runs in backwards
+ if(this.dirty){
+ dojo.forEach(this.series, purgeGroup);
+ this.cleanGroup();
+ var s = this.group;
+ df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+ }
+ var t = this.chart.theme, color, stroke, fill, f,
+ gap = this.opt.gap < this._vScaler.scale / 3 ? this.opt.gap : 0;
+ for(var i = this.series.length - 1; i >= 0; --i){
+ var run = this.series[i];
+ if(!this.dirty && !run.dirty){ continue; }
+ run.cleanGroup();
+ var s = run.group;
+ if(!run.fill || !run.stroke){
+ // need autogenerated color
+ color = run.dyn.color = new dojo.Color(t.next("color"));
+ }
+ stroke = run.stroke ? run.stroke : dc.augmentStroke(t.series.stroke, color);
+ fill = run.fill ? run.fill : dc.augmentFill(t.series.fill, color);
+ for(var j = 0; j < acc.length; ++j){
+ var v = acc[j],
+ width = this._hScaler.scale * (v - this._hScaler.bounds.lower),
+ height = this._vScaler.scale - 2 * gap;
+ if(width >= 1 && height >= 1){
+ var shape = s.createRect({
+ x: offsets.l,
+ y: dim.height - offsets.b - this._vScaler.scale * (j + 1.5 - this._vScaler.bounds.lower) + gap,
+ width: width, height: height
+ }).setFill(fill).setStroke(stroke);
+ run.dyn.fill = shape.getFill();
+ run.dyn.stroke = shape.getStroke();
+ }
+ }
+ run.dirty = false;
+ // update the accumulator
+ for(var j = 0; j < run.data.length; ++j){
+ var v = run.data[j];
+ if(isNaN(v)){ v = 0; }
+ acc[j] -= v;
+ }
+ }
+ this.dirty = false;
+ return this;
+ }
+ });
+})();
+
+}
diff --git a/includes/js/dojox/charting/plot2d/StackedColumns.js b/includes/js/dojox/charting/plot2d/StackedColumns.js
new file mode 100644
index 0000000..15fd141
--- /dev/null
+++ b/includes/js/dojox/charting/plot2d/StackedColumns.js
@@ -0,0 +1,83 @@
+if(!dojo._hasResource["dojox.charting.plot2d.StackedColumns"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.StackedColumns"] = true;
+dojo.provide("dojox.charting.plot2d.StackedColumns");
+
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d.Columns");
+
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.reversed");
+
+(function(){
+ var df = dojox.lang.functional, dc = dojox.charting.plot2d.common,
+ purgeGroup = df.lambda("item.purgeGroup()");
+
+ dojo.declare("dojox.charting.plot2d.StackedColumns", dojox.charting.plot2d.Columns, {
+ calculateAxes: function(dim){
+ var stats = dc.collectStackedStats(this.series);
+ this._maxRunLength = stats.hmax;
+ stats.hmin -= 0.5;
+ stats.hmax += 0.5;
+ this._calc(dim, stats);
+ return this;
+ },
+ render: function(dim, offsets){
+ // stack all values
+ var acc = df.repeat(this._maxRunLength, "-> 0", 0);
+ for(var i = 0; i < this.series.length; ++i){
+ var run = this.series[i];
+ for(var j = 0; j < run.data.length; ++j){
+ var v = run.data[j];
+ if(isNaN(v)){ v = 0; }
+ acc[j] += v;
+ }
+ }
+ // draw runs in backwards
+ if(this.dirty){
+ dojo.forEach(this.series, purgeGroup);
+ this.cleanGroup();
+ var s = this.group;
+ df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+ }
+ var t = this.chart.theme, color, stroke, fill, f,
+ gap = this.opt.gap < this._hScaler.scale / 3 ? this.opt.gap : 0;
+ for(var i = this.series.length - 1; i >= 0; --i){
+ var run = this.series[i];
+ if(!this.dirty && !run.dirty){ continue; }
+ run.cleanGroup();
+ var s = run.group;
+ if(!run.fill || !run.stroke){
+ // need autogenerated color
+ color = run.dyn.color = new dojo.Color(t.next("color"));
+ }
+ stroke = run.stroke ? run.stroke : dc.augmentStroke(t.series.stroke, color);
+ fill = run.fill ? run.fill : dc.augmentFill(t.series.fill, color);
+ for(var j = 0; j < acc.length; ++j){
+ var v = acc[j],
+ width = this._hScaler.scale - 2 * gap,
+ height = this._vScaler.scale * (v - this._vScaler.bounds.lower);
+ if(width >= 1 && height >= 1){
+ var shape = s.createRect({
+ x: offsets.l + this._hScaler.scale * (j + 0.5 - this._hScaler.bounds.lower) + gap,
+ y: dim.height - offsets.b - this._vScaler.scale * (v - this._vScaler.bounds.lower),
+ width: width, height: height
+ }).setFill(fill).setStroke(stroke);
+ run.dyn.fill = shape.getFill();
+ run.dyn.stroke = shape.getStroke();
+ }
+ }
+ run.dirty = false;
+ // update the accumulator
+ for(var j = 0; j < run.data.length; ++j){
+ var v = run.data[j];
+ if(isNaN(v)){ v = 0; }
+ acc[j] -= v;
+ }
+ }
+ this.dirty = false;
+ return this;
+ }
+ });
+})();
+
+}
diff --git a/includes/js/dojox/charting/plot2d/StackedLines.js b/includes/js/dojox/charting/plot2d/StackedLines.js
new file mode 100644
index 0000000..2581b85
--- /dev/null
+++ b/includes/js/dojox/charting/plot2d/StackedLines.js
@@ -0,0 +1,13 @@
+if(!dojo._hasResource["dojox.charting.plot2d.StackedLines"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.StackedLines"] = true;
+dojo.provide("dojox.charting.plot2d.StackedLines");
+
+dojo.require("dojox.charting.plot2d.Stacked");
+
+dojo.declare("dojox.charting.plot2d.StackedLines", dojox.charting.plot2d.Stacked, {
+ constructor: function(){
+ this.opt.lines = true;
+ }
+});
+
+}
diff --git a/includes/js/dojox/charting/plot2d/common.js b/includes/js/dojox/charting/plot2d/common.js
new file mode 100644
index 0000000..de60020
--- /dev/null
+++ b/includes/js/dojox/charting/plot2d/common.js
@@ -0,0 +1,113 @@
+if(!dojo._hasResource["dojox.charting.plot2d.common"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.common"] = true;
+dojo.provide("dojox.charting.plot2d.common");
+
+dojo.require("dojo.colors");
+dojo.require("dojox.gfx");
+dojo.require("dojox.lang.functional");
+
+(function(){
+ var df = dojox.lang.functional, dc = dojox.charting.plot2d.common;
+
+ dojo.mixin(dojox.charting.plot2d.common, {
+ makeStroke: function(stroke){
+ if(!stroke){ return stroke; }
+ if(typeof stroke == "string" || stroke instanceof dojo.Color){
+ stroke = {color: stroke};
+ }
+ return dojox.gfx.makeParameters(dojox.gfx.defaultStroke, stroke);
+ },
+ augmentColor: function(target, color){
+ var t = new dojo.Color(target),
+ c = new dojo.Color(color);
+ c.a = t.a;
+ return c;
+ },
+ augmentStroke: function(stroke, color){
+ var s = dc.makeStroke(stroke);
+ if(s){
+ s.color = dc.augmentColor(s.color, color);
+ }
+ return s;
+ },
+ augmentFill: function(fill, color){
+ var fc, c = new dojo.Color(color);
+ if(typeof fill == "string" || fill instanceof dojo.Color){
+ return dc.augmentColor(fill, color);
+ }
+ return fill;
+ },
+
+ defaultStats: {hmin: Number.POSITIVE_INFINITY, hmax: Number.NEGATIVE_INFINITY,
+ vmin: Number.POSITIVE_INFINITY, vmax: Number.NEGATIVE_INFINITY},
+
+ collectSimpleStats: function(series){
+ var stats = dojo.clone(dc.defaultStats);
+ for(var i = 0; i < series.length; ++i){
+ var run = series[i];
+ if(!run.data.length){ continue; }
+ if(typeof run.data[0] == "number"){
+ // 1D case
+ var old_vmin = stats.vmin, old_vmax = stats.vmax;
+ if(!("ymin" in run) || !("ymax" in run)){
+ dojo.forEach(run.data, function(val, i){
+ var x = i + 1, y = val;
+ if(isNaN(y)){ y = 0; }
+ stats.hmin = Math.min(stats.hmin, x);
+ stats.hmax = Math.max(stats.hmax, x);
+ stats.vmin = Math.min(stats.vmin, y);
+ stats.vmax = Math.max(stats.vmax, y);
+ });
+ }
+ if("ymin" in run){ stats.vmin = Math.min(old_vmin, run.ymin); }
+ if("ymax" in run){ stats.vmax = Math.max(old_vmax, run.ymax); }
+ }else{
+ // 2D case
+ var old_hmin = stats.hmin, old_hmax = stats.hmax,
+ old_vmin = stats.vmin, old_vmax = stats.vmax;
+ if(!("xmin" in run) || !("xmax" in run) || !("ymin" in run) || !("ymax" in run)){
+ dojo.forEach(run.data, function(val, i){
+ var x = val.x, y = val.y;
+ if(isNaN(x)){ x = 0; }
+ if(isNaN(y)){ y = 0; }
+ stats.hmin = Math.min(stats.hmin, x);
+ stats.hmax = Math.max(stats.hmax, x);
+ stats.vmin = Math.min(stats.vmin, y);
+ stats.vmax = Math.max(stats.vmax, y);
+ });
+ }
+ if("xmin" in run){ stats.hmin = Math.min(old_hmin, run.xmin); }
+ if("xmax" in run){ stats.hmax = Math.max(old_hmax, run.xmax); }
+ if("ymin" in run){ stats.vmin = Math.min(old_vmin, run.ymin); }
+ if("ymax" in run){ stats.vmax = Math.max(old_vmax, run.ymax); }
+ }
+ }
+ return stats;
+ },
+
+ collectStackedStats: function(series){
+ // collect statistics
+ var stats = dojo.clone(dc.defaultStats);
+ if(series.length){
+ // 1st pass: find the maximal length of runs
+ stats.hmin = Math.min(stats.hmin, 1);
+ stats.hmax = df.foldl(series, "seed, run -> Math.max(seed, run.data.length)", stats.hmax);
+ // 2nd pass: stack values
+ for(var i = 0; i < stats.hmax; ++i){
+ var v = series[0].data[i];
+ if(isNaN(v)){ v = 0; }
+ stats.vmin = Math.min(stats.vmin, v);
+ for(var j = 1; j < series.length; ++j){
+ var t = series[j].data[i];
+ if(isNaN(t)){ t = 0; }
+ v += t;
+ }
+ stats.vmax = Math.max(stats.vmax, v);
+ }
+ }
+ return stats;
+ }
+ });
+})();
+
+}
diff --git a/includes/js/dojox/charting/plot3d/Bars.js b/includes/js/dojox/charting/plot3d/Bars.js
new file mode 100644
index 0000000..8fbe67c
--- /dev/null
+++ b/includes/js/dojox/charting/plot3d/Bars.js
@@ -0,0 +1,66 @@
+if(!dojo._hasResource["dojox.charting.plot3d.Bars"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot3d.Bars"] = true;
+dojo.provide("dojox.charting.plot3d.Bars");
+
+dojo.require("dojox.charting.plot3d.Base");
+
+(function(){
+
+ // reduce function borrowed from dojox.fun
+ var reduce = function(/*Array*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+ // summary: repeatedly applies a binary function to an array from left
+ // to right; returns the final value.
+ a = typeof a == "string" ? a.split("") : a; o = o || dojo.global;
+ var z = a[0];
+ for(var i = 1; i < a.length; z = f.call(o, z, a[i++]));
+ return z; // Object
+ };
+
+ dojo.declare("dojox.charting.plot3d.Bars", dojox.charting.plot3d.Base, {
+ constructor: function(width, height, kwArgs){
+ this.depth = "auto";
+ this.gap = 0;
+ this.data = [];
+ this.material = {type: "plastic", finish: "dull", color: "lime"};
+ if(kwArgs){
+ if("depth" in kwArgs){ this.depth = kwArgs.depth; }
+ if("gap" in kwArgs){ this.gap = kwArgs.gap; }
+ if("material" in kwArgs){
+ var m = kwArgs.material;
+ if(typeof m == "string" || m instanceof dojo.Color){
+ this.material.color = m;
+ }else{
+ this.material = m;
+ }
+ }
+ }
+ },
+ getDepth: function(){
+ if(this.depth == "auto"){
+ var w = this.width;
+ if(this.data && this.data.length){
+ w = w / this.data.length;
+ }
+ return w - 2 * this.gap;
+ }
+ return this.depth;
+ },
+ generate: function(chart, creator){
+ if(!this.data){ return this; }
+ var step = this.width / this.data.length, org = 0,
+ depth = this.depth == "auto" ? step - 2 * this.gap : this.depth,
+ scale = this.height / reduce(this.data, Math.max);
+ if(!creator){ creator = chart.view; }
+ for(var i = 0; i < this.data.length; ++i, org += step){
+ creator
+ .createCube({
+ bottom: {x: org + this.gap, y: 0, z: 0},
+ top: {x: org + step - this.gap, y: this.data[i] * scale, z: depth}
+ })
+ .setFill(this.material);
+ }
+ }
+ });
+})();
+
+}
diff --git a/includes/js/dojox/charting/plot3d/Base.js b/includes/js/dojox/charting/plot3d/Base.js
new file mode 100644
index 0000000..5ba5dc4
--- /dev/null
+++ b/includes/js/dojox/charting/plot3d/Base.js
@@ -0,0 +1,23 @@
+if(!dojo._hasResource["dojox.charting.plot3d.Base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot3d.Base"] = true;
+dojo.provide("dojox.charting.plot3d.Base");
+
+dojo.require("dojox.charting.Chart3D");
+
+dojo.declare("dojox.charting.plot3d.Base", null, {
+ constructor: function(width, height, kwArgs){
+ this.width = width;
+ this.height = height;
+ },
+ setData: function(data){
+ this.data = data ? data : [];
+ return this;
+ },
+ getDepth: function(){
+ return this.depth;
+ },
+ generate: function(chart, creator){
+ }
+});
+
+}
diff --git a/includes/js/dojox/charting/plot3d/Cylinders.js b/includes/js/dojox/charting/plot3d/Cylinders.js
new file mode 100644
index 0000000..96433d4
--- /dev/null
+++ b/includes/js/dojox/charting/plot3d/Cylinders.js
@@ -0,0 +1,69 @@
+if(!dojo._hasResource["dojox.charting.plot3d.Cylinders"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot3d.Cylinders"] = true;
+dojo.provide("dojox.charting.plot3d.Cylinders");
+
+dojo.require("dojox.charting.plot3d.Base");
+
+(function(){
+
+ // reduce function borrowed from dojox.fun
+ var reduce = function(/*Array*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+ // summary: repeatedly applies a binary function to an array from left
+ // to right; returns the final value.
+ a = typeof a == "string" ? a.split("") : a; o = o || dojo.global;
+ var z = a[0];
+ for(var i = 1; i < a.length; z = f.call(o, z, a[i++]));
+ return z; // Object
+ };
+
+ dojo.declare("dojox.charting.plot3d.Cylinders", dojox.charting.plot3d.Base, {
+ constructor: function(width, height, kwArgs){
+ this.depth = "auto";
+ this.gap = 0;
+ this.data = [];
+ this.material = {type: "plastic", finish: "shiny", color: "lime"};
+ this.outline = null;
+ if(kwArgs){
+ if("depth" in kwArgs){ this.depth = kwArgs.depth; }
+ if("gap" in kwArgs){ this.gap = kwArgs.gap; }
+ if("material" in kwArgs){
+ var m = kwArgs.material;
+ if(typeof m == "string" || m instanceof dojo.Color){
+ this.material.color = m;
+ }else{
+ this.material = m;
+ }
+ }
+ if("outline" in kwArgs){ this.outline = kwArgs.outline; }
+ }
+ },
+ getDepth: function(){
+ if(this.depth == "auto"){
+ var w = this.width;
+ if(this.data && this.data.length){
+ w = w / this.data.length;
+ }
+ return w - 2 * this.gap;
+ }
+ return this.depth;
+ },
+ generate: function(chart, creator){
+ if(!this.data){ return this; }
+ var step = this.width / this.data.length, org = 0,
+ scale = this.height / reduce(this.data, Math.max);
+ if(!creator){ creator = chart.view; }
+ for(var i = 0; i < this.data.length; ++i, org += step){
+ creator
+ .createCylinder({
+ center: {x: org + step / 2, y: 0, z: 0},
+ radius: step / 2 - this.gap,
+ height: this.data[i] * scale
+ })
+ .setTransform(dojox.gfx3d.matrix.rotateXg(-90))
+ .setFill(this.material).setStroke(this.outline);
+ }
+ }
+ });
+})();
+
+}
diff --git a/includes/js/dojox/charting/scaler.js b/includes/js/dojox/charting/scaler.js
new file mode 100644
index 0000000..8a3d091
--- /dev/null
+++ b/includes/js/dojox/charting/scaler.js
@@ -0,0 +1,161 @@
+if(!dojo._hasResource["dojox.charting.scaler"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.scaler"] = true;
+dojo.provide("dojox.charting.scaler");
+
+(function(){
+ var deltaLimit = 3; // pixels
+
+ var isText = function(val, text){
+ val = val.toLowerCase();
+ for(var i = 0; i < text.length; ++i){
+ if(val == text[i]){ return true; }
+ }
+ return false;
+ };
+
+ var calcTicks = function(min, max, kwArgs, majorTick, minorTick, microTick, span){
+ kwArgs = dojo.clone(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 = isText(kwArgs.fixLower, ["major"]) ?
+ Math.floor(min / majorTick) * majorTick :
+ isText(kwArgs.fixLower, ["minor"]) ?
+ Math.floor(min / minorTick) * minorTick :
+ isText(kwArgs.fixLower, ["micro"]) ?
+ Math.floor(min / microTick) * unit : min,
+ upperBound = isText(kwArgs.fixUpper, ["major"]) ?
+ Math.ceil(max / majorTick) * majorTick :
+ isText(kwArgs.fixUpper, ["minor"]) ?
+ Math.ceil(max / minorTick) * minorTick :
+ isText(kwArgs.fixUpper, ["unit"]) ?
+ Math.ceil(max / unit) * unit : max,
+ majorStart = (isText(kwArgs.fixLower, ["major"]) || !majorTick) ?
+ lowerBound : Math.ceil(lowerBound / majorTick) * majorTick,
+ minorStart = (isText(kwArgs.fixLower, ["major", "minor"]) || !minorTick) ?
+ lowerBound : Math.ceil(lowerBound / minorTick) * minorTick,
+ microStart = (isText(kwArgs.fixLower, ["major", "minor", "micro"]) || ! microTick) ?
+ lowerBound : Math.ceil(lowerBound / microTick) * microTick,
+ majorCount = !majorTick ? 0 : (isText(kwArgs.fixUpper, ["major"]) ?
+ Math.round((upperBound - majorStart) / majorTick) :
+ Math.floor((upperBound - majorStart) / majorTick)) + 1,
+ minorCount = !minorTick ? 0 : (isText(kwArgs.fixUpper, ["major", "minor"]) ?
+ Math.round((upperBound - minorStart) / minorTick) :
+ Math.floor((upperBound - minorStart) / minorTick)) + 1,
+ microCount = !microTick ? 0 : (isText(kwArgs.fixUpper, ["major", "minor", "micro"]) ?
+ Math.round((upperBound - microStart) / microTick) :
+ Math.floor((upperBound - microStart) / microTick)) + 1,
+ minorPerMajor = minorTick ? Math.round(majorTick / minorTick) : 0,
+ microPerMinor = microTick ? Math.round(minorTick / microTick) : 0,
+ majorPrecision = majorTick ? Math.floor(Math.log(majorTick) / Math.LN10) : 0,
+ minorPrecision = minorTick ? Math.floor(Math.log(minorTick) / Math.LN10) : 0,
+ scale = span / (upperBound - lowerBound);
+ if(!isFinite(scale)){ scale = 1; }
+ return {
+ bounds: {
+ lower: lowerBound,
+ upper: upperBound
+ },
+ major: {
+ tick: majorTick,
+ start: majorStart,
+ count: majorCount,
+ prec: majorPrecision
+ },
+ minor: {
+ tick: minorTick,
+ start: minorStart,
+ count: minorCount,
+ prec: minorPrecision
+ },
+ micro: {
+ tick: microTick,
+ start: microStart,
+ count: microCount,
+ prec: 0
+ },
+ minorPerMajor: minorPerMajor,
+ microPerMinor: microPerMinor,
+ scale: scale
+ };
+ };
+
+ dojox.charting.scaler = function(min, max, span, kwArgs){
+ var h = {fixUpper: "none", fixLower: "none", natural: false};
+ if(kwArgs){
+ if("fixUpper" in kwArgs){ h.fixUpper = String(kwArgs.fixUpper); }
+ if("fixLower" in kwArgs){ h.fixLower = String(kwArgs.fixLower); }
+ if("natural" in kwArgs){ h.natural = Boolean(kwArgs.natural); }
+ }
+
+ if(max <= min){
+ return calcTicks(min, max, h, 0, 0, 0, span); // Object
+ }
+
+ var mag = Math.floor(Math.log(max - min) / Math.LN10),
+ major = kwArgs && ("majorTick" in kwArgs) ? kwArgs.majorTick : Math.pow(10, mag),
+ minor = 0, micro = 0, ticks;
+
+ // calculate minor ticks
+ if(kwArgs && ("minorTick" in kwArgs)){
+ minor = kwArgs.minorTick;
+ }else{
+ do{
+ minor = major / 10;
+ if(!h.natural || minor > 0.9){
+ ticks = calcTicks(min, max, h, major, minor, 0, span);
+ if(ticks.scale * ticks.minor.tick > deltaLimit){ break; }
+ }
+ minor = major / 5;
+ if(!h.natural || minor > 0.9){
+ ticks = calcTicks(min, max, h, major, minor, 0, span);
+ if(ticks.scale * ticks.minor.tick > deltaLimit){ break; }
+ }
+ minor = major / 2;
+ if(!h.natural || minor > 0.9){
+ ticks = calcTicks(min, max, h, major, minor, 0, span);
+ if(ticks.scale * ticks.minor.tick > deltaLimit){ break; }
+ }
+ return calcTicks(min, max, h, major, 0, 0, span); // Object
+ }while(false);
+ }
+
+ // calculate micro ticks
+ if(kwArgs && ("microTick" in kwArgs)){
+ micro = kwArgs.microTick;
+ ticks = calcTicks(min, max, h, major, minor, micro, span);
+ }else{
+ do{
+ micro = minor / 10;
+ if(!h.natural || micro > 0.9){
+ ticks = calcTicks(min, max, h, major, minor, micro, span);
+ if(ticks.scale * ticks.micro.tick > deltaLimit){ break; }
+ }
+ micro = minor / 5;
+ if(!h.natural || micro > 0.9){
+ ticks = calcTicks(min, max, h, major, minor, micro, span);
+ if(ticks.scale * ticks.micro.tick > deltaLimit){ break; }
+ }
+ micro = minor / 2;
+ if(!h.natural || micro > 0.9){
+ ticks = calcTicks(min, max, h, major, minor, micro, span);
+ if(ticks.scale * ticks.micro.tick > deltaLimit){ break; }
+ }
+ micro = 0;
+ }while(false);
+ }
+
+ return micro ? ticks : calcTicks(min, max, h, major, minor, 0, span); // Object
+ };
+})();
+
+}
diff --git a/includes/js/dojox/charting/tests/Theme.js b/includes/js/dojox/charting/tests/Theme.js
new file mode 100644
index 0000000..c30635c
--- /dev/null
+++ b/includes/js/dojox/charting/tests/Theme.js
@@ -0,0 +1,71 @@
+if(!dojo._hasResource["dojox.charting.tests.Theme"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.tests.Theme"] = true;
+dojo.provide("dojox.charting.tests.Theme");
+dojo.require("dojox.charting.Theme");
+dojo.require("dojox.charting.themes.PlotKit.blue");
+
+(function(){
+ var dxc=dojox.charting;
+ var blue=dxc.themes.PlotKit.blue;
+ tests.register("dojox.charting.tests.Theme", [
+ function testDefineColor(t){
+ var args={ num:16, cache:false };
+ blue.defineColors(args);
+ var a=blue.colors;
+ var s="<table border=1>";
+ for(var i=0; i<a.length; i++){
+ if(i%8==0){
+ if(i>0) s+="</tr>";
+ s+="<tr>";
+ }
+ s+='<td width=16 bgcolor='+a[i]+'>&nbsp;</td>';
+ }
+ s+="</tr></table>";
+ doh.debug(s);
+
+ var args={ num:32, cache: false };
+ blue.defineColors(args);
+ var a=blue.colors;
+ var s="<table border=1 style=margin-top:12px;>";
+ for(var i=0; i<a.length; i++){
+ if(i%8==0){
+ if(i>0) s+="</tr>";
+ s+="<tr>";
+ }
+ s+='<td width=16 bgcolor='+a[i]+'>&nbsp;</td>';
+ }
+ s+="</tr></table>";
+ doh.debug(s);
+
+ var args={ saturation:20, num:32, cache:false };
+ blue.defineColors(args);
+ var a=blue.colors;
+ var s="<table border=1 style=margin-top:12px;>";
+ for(var i=0; i<a.length; i++){
+ if(i%8==0){
+ if(i>0) s+="</tr>";
+ s+="<tr>";
+ }
+ s+='<td width=16 bgcolor='+a[i]+'>&nbsp;</td>';
+ }
+ s+="</tr></table>";
+ doh.debug(s);
+
+ var args={ low:10, high:90, num:32, cache: false };
+ blue.defineColors(args);
+ var a=blue.colors;
+ var s="<table border=1 style=margin-top:12px;>";
+ for(var i=0; i<a.length; i++){
+ if(i%8==0){
+ if(i>0) s+="</tr>";
+ s+="<tr>";
+ }
+ s+='<td width=16 bgcolor='+a[i]+'>&nbsp;</td>';
+ }
+ s+="</tr></table>";
+ doh.debug(s);
+ }
+ ]);
+})();
+
+}
diff --git a/includes/js/dojox/charting/tests/_color.js b/includes/js/dojox/charting/tests/_color.js
new file mode 100644
index 0000000..df263df
--- /dev/null
+++ b/includes/js/dojox/charting/tests/_color.js
@@ -0,0 +1,82 @@
+if(!dojo._hasResource["dojox.charting.tests._color"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.tests._color"] = true;
+dojo.provide("dojox.charting.tests._color");
+dojo.require("dojox.charting._color");
+
+/*
+ Note that there are some minor inaccuracies that
+ can be introduced for comparison purposes; the
+ formulae used in Photoshop may produce *slightly*
+ different numbers. But numbers will be off by
+ 1, if at all.
+ */
+(function(){
+ var dxc=dojox.charting;
+ var rgb=[
+ { r:0x4f, g:0xc8, b:0xd6 },
+ { r:0x40, g:0x9e, b:0x02 },
+ { r:0xff, g:0xfb, b:0x85 },
+ { r:0x7b, g:0x5a, b:0x7d }
+ ];
+ var hsb=[
+ { h:186, s:63, b: 84 },
+ { h: 96, s:99, b: 62 },
+ { h: 58, s:48, b:100 },
+ { h:297, s:28, b: 49 }
+ ];
+ tests.register("dojox.charting.tests._util", [
+ function testToHsb(t){
+ var c=rgb[0];
+ var oHsb=dxc._color.toHsb(c.r, c.g, c.b);
+ t.assertEqual(hsb[0].h, oHsb.h);
+ t.assertEqual(hsb[0].s, oHsb.s);
+ t.assertEqual(hsb[0].b, oHsb.b);
+
+ var c=rgb[1];
+ var oHsb=dxc._color.toHsb(c.r, c.g, c.b);
+ t.assertEqual(hsb[1].h, oHsb.h);
+ t.assertEqual(hsb[1].s, oHsb.s);
+ t.assertEqual(hsb[1].b, oHsb.b);
+
+ var c=rgb[2];
+ var oHsb=dxc._color.toHsb(c.r, c.g, c.b);
+ t.assertEqual(hsb[2].h, oHsb.h);
+ t.assertEqual(hsb[2].s, oHsb.s);
+ t.assertEqual(hsb[2].b, oHsb.b);
+
+ var c=rgb[3];
+ var oHsb=dxc._color.toHsb(c.r, c.g, c.b);
+ t.assertEqual(hsb[3].h, oHsb.h);
+ t.assertEqual(hsb[3].s, oHsb.s);
+ t.assertEqual(hsb[3].b, oHsb.b);
+ },
+
+ function testFromHsb(t){
+ var c1=dxc._color.fromHsb(hsb[0].h, hsb[0].s, hsb[0].b);
+ var c2=rgb[0];
+ t.assertEqual(c1.r, c2.r);
+ t.assertEqual(c1.g, c2.g);
+ t.assertEqual(c1.b, c2.b);
+
+ var c1=dxc._color.fromHsb(hsb[1].h, hsb[1].s, hsb[1].b);
+ var c2=rgb[1];
+ t.assertEqual(c1.r, c2.r);
+ t.assertEqual(c1.g, c2.g);
+ t.assertEqual(c1.b, c2.b);
+
+ var c1=dxc._color.fromHsb(hsb[2].h, hsb[2].s, hsb[2].b);
+ var c2=rgb[2];
+ t.assertEqual(c1.r, c2.r);
+ t.assertEqual(c1.g, c2.g);
+ t.assertEqual(c1.b, c2.b);
+
+ var c1=dxc._color.fromHsb(hsb[3].h, hsb[3].s, hsb[3].b);
+ var c2=rgb[3];
+ t.assertEqual(c1.r, c2.r);
+ t.assertEqual(c1.g, c2.g);
+ t.assertEqual(c1.b, c2.b);
+ }
+ ]);
+})();
+
+}
diff --git a/includes/js/dojox/charting/tests/charting.js b/includes/js/dojox/charting/tests/charting.js
new file mode 100644
index 0000000..500f354
--- /dev/null
+++ b/includes/js/dojox/charting/tests/charting.js
@@ -0,0 +1,12 @@
+if(!dojo._hasResource["dojox.charting.tests.charting"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.tests.charting"] = true;
+dojo.provide("dojox.charting.tests.charting");
+
+try{
+ dojo.require("dojox.charting.tests._color");
+ dojo.require("dojox.charting.tests.Theme");
+}catch(e){
+ doh.debug(e);
+}
+
+}
diff --git a/includes/js/dojox/charting/tests/data/goog_prices.csv b/includes/js/dojox/charting/tests/data/goog_prices.csv
new file mode 100644
index 0000000..901a6d2
--- /dev/null
+++ b/includes/js/dojox/charting/tests/data/goog_prices.csv
@@ -0,0 +1,796 @@
+Date,Open,High,Low,Close,Volume,Adj Close
+2008-02-29,471.87,479.74,464.65,471.18,9425400,471.18
+2008-02-28,470.50,479.09,467.36,475.39,6586900,475.39
+2008-02-27,460.13,475.49,459.64,472.86,10121900,472.86
+2008-02-26,461.20,466.47,446.85,464.19,23287300,464.19
+2008-02-25,505.95,506.50,485.74,486.44,8350800,486.44
+2008-02-22,502.06,509.00,497.55,507.80,5515900,507.80
+2008-02-21,512.85,513.21,499.50,502.86,5677800,502.86
+2008-02-20,503.51,511.01,498.82,509.00,6662200,509.00
+2008-02-19,534.94,535.06,506.50,508.95,6350400,508.95
+2008-02-15,528.31,532.66,524.33,529.64,5240100,529.64
+2008-02-14,538.35,541.04,531.00,532.25,6476700,532.25
+2008-02-13,522.50,534.99,518.69,534.62,6624700,534.62
+2008-02-12,523.39,530.60,513.03,518.09,6662300,518.09
+2008-02-11,520.52,523.71,513.40,521.16,5826000,521.16
+2008-02-08,509.41,517.73,508.70,516.69,6828900,516.69
+2008-02-07,496.86,514.19,494.76,504.95,7928900,504.95
+2008-02-06,511.14,511.17,497.93,501.71,7636400,501.71
+2008-02-05,489.43,509.00,488.52,506.80,11203300,506.80
+2008-02-04,509.07,512.78,492.55,495.43,13157100,495.43
+2008-02-01,528.67,536.67,510.00,515.90,17600500,515.90
+2008-01-31,539.01,573.00,534.29,564.30,14871300,564.30
+2008-01-30,549.19,560.43,543.51,548.27,7939600,548.27
+2008-01-29,560.47,561.33,540.67,550.52,6283000,550.52
+2008-01-28,570.97,572.24,548.60,555.98,5816700,555.98
+2008-01-25,591.81,595.00,566.18,566.40,6966000,566.40
+2008-01-24,558.80,579.69,554.14,574.49,9400900,574.49
+2008-01-23,560.71,568.00,519.00,548.62,16965700,548.62
+2008-01-22,562.03,597.50,561.20,584.35,9501500,584.35
+2008-01-18,608.36,609.99,598.45,600.25,8539600,600.25
+2008-01-17,620.76,625.74,598.01,600.79,8216800,600.79
+2008-01-16,628.97,639.99,601.93,615.95,10560000,615.95
+2008-01-15,645.90,649.05,635.38,637.65,5568200,637.65
+2008-01-14,651.14,657.40,645.25,653.82,4447500,653.82
+2008-01-11,642.70,649.47,630.11,638.25,4977000,638.25
+2008-01-10,645.01,657.20,640.11,646.73,6334200,646.73
+2008-01-09,630.04,653.34,622.51,653.20,6739700,653.20
+2008-01-08,653.00,659.96,631.00,631.68,5339100,631.68
+2008-01-07,653.94,662.28,637.35,649.25,6403400,649.25
+2008-01-04,679.69,680.96,655.00,657.00,5359800,657.00
+2008-01-03,685.26,686.85,676.52,685.33,3252500,685.33
+2008-01-02,692.87,697.37,677.73,685.19,4306900,685.19
+2007-12-31,698.57,702.49,690.58,691.48,2376200,691.48
+2007-12-28,704.93,707.95,696.54,702.53,2562700,702.53
+2007-12-27,707.07,716.00,700.74,700.74,2942500,700.74
+2007-12-26,698.99,713.22,698.21,710.84,2530000,710.84
+2007-12-24,694.99,700.73,693.06,700.73,1628400,700.73
+2007-12-21,697.88,699.26,693.24,696.69,5382000,696.69
+2007-12-20,685.83,691.00,680.61,689.69,4422200,689.69
+2007-12-19,674.21,679.50,669.00,677.37,4421100,677.37
+2007-12-18,674.16,676.71,652.50,673.35,7166700,673.35
+2007-12-17,688.00,695.42,663.67,669.23,5486000,669.23
+2007-12-14,687.51,699.70,687.26,689.96,3673500,689.96
+2007-12-13,696.31,697.62,681.21,694.05,5040800,694.05
+2007-12-12,714.00,714.32,688.50,699.35,6159100,699.35
+2007-12-11,719.94,720.99,698.78,699.20,6139100,699.20
+2007-12-10,715.99,724.80,714.00,718.42,3856200,718.42
+2007-12-07,714.99,718.00,710.50,714.87,3852100,714.87
+2007-12-06,697.80,716.56,697.01,715.26,4909000,715.26
+2007-12-05,692.73,698.93,687.50,698.51,4209600,698.51
+2007-12-04,678.31,692.00,677.12,684.16,4231800,684.16
+2007-12-03,691.01,695.00,681.14,681.53,4325100,681.53
+2007-11-30,711.00,711.06,682.11,693.00,7895500,693.00
+2007-11-29,690.75,702.79,687.77,697.00,6208000,697.00
+2007-11-28,682.11,694.30,672.14,692.26,7916500,692.26
+2007-11-27,674.80,676.43,650.26,673.57,8904500,673.57
+2007-11-26,680.20,693.40,665.00,666.00,6790100,666.00
+2007-11-23,670.00,678.28,668.11,676.70,2738700,676.70
+2007-11-21,643.77,669.97,642.08,660.52,7013500,660.52
+2007-11-20,636.48,659.10,632.87,648.54,9840600,648.54
+2007-11-19,629.59,636.77,618.50,625.85,5527400,625.85
+2007-11-16,633.94,635.49,616.02,633.63,9042800,633.63
+2007-11-15,638.57,647.50,624.00,629.65,6967700,629.65
+2007-11-14,673.28,675.49,636.27,641.68,8094700,641.68
+2007-11-13,644.99,660.92,632.07,660.55,8426100,660.55
+2007-11-12,657.74,669.93,626.21,632.07,10227300,632.07
+2007-11-09,675.78,681.88,661.21,663.97,11388100,663.97
+2007-11-08,734.60,734.89,677.18,693.84,16512200,693.84
+2007-11-07,741.13,747.24,723.14,732.94,8252900,732.94
+2007-11-06,737.56,741.79,725.00,741.79,8436300,741.79
+2007-11-05,706.99,730.23,706.07,725.65,8883700,725.65
+2007-11-02,710.51,713.58,697.34,711.25,5841500,711.25
+2007-11-01,702.79,713.72,701.78,703.21,6527200,703.21
+2007-10-31,700.69,707.00,696.04,707.00,6876800,707.00
+2007-10-30,677.51,699.91,677.51,694.77,6900600,694.77
+2007-10-29,677.77,680.00,672.09,679.23,3066300,679.23
+2007-10-26,674.03,676.54,668.06,674.60,3353900,674.60
+2007-10-25,678.68,678.97,663.55,668.51,5795500,668.51
+2007-10-24,672.71,677.47,659.56,675.82,7404200,675.82
+2007-10-23,661.25,677.60,660.00,675.77,6793700,675.77
+2007-10-22,638.67,655.00,636.28,650.75,6664400,650.75
+2007-10-19,654.56,658.49,643.23,644.71,15789000,644.71
+2007-10-18,635.41,641.37,628.50,639.62,12289200,639.62
+2007-10-17,630.45,634.00,621.59,633.48,6030500,633.48
+2007-10-16,618.49,625.92,611.99,616.00,6025300,616.00
+2007-10-15,638.47,639.86,615.55,620.11,6943800,620.11
+2007-10-12,623.98,638.40,618.24,637.39,6823700,637.39
+2007-10-11,633.64,641.41,609.00,622.00,11799000,622.00
+2007-10-10,621.36,625.68,616.80,625.39,5385600,625.39
+2007-10-09,615.11,623.78,608.39,615.18,8767800,615.18
+2007-10-08,595.00,610.26,593.95,609.62,5028000,609.62
+2007-10-05,587.11,596.00,587.01,594.05,5068700,594.05
+2007-10-04,585.09,585.09,577.06,579.03,2986700,579.03
+2007-10-03,586.25,588.99,580.36,584.02,3879500,584.02
+2007-10-02,583.38,596.81,580.01,584.39,7067500,584.39
+2007-10-01,569.97,584.35,569.61,582.55,4711300,582.55
+2007-09-28,567.00,569.55,564.12,567.27,2639500,567.27
+2007-09-27,571.73,571.74,565.78,567.50,2056300,567.50
+2007-09-26,570.40,571.79,563.81,568.16,3346100,568.16
+2007-09-25,564.00,569.56,562.86,569.00,2730600,569.00
+2007-09-24,561.00,571.46,560.00,568.02,5297000,568.02
+2007-09-21,556.34,560.79,552.83,560.10,8011700,560.10
+2007-09-20,547.00,556.80,546.03,552.83,5525000,552.83
+2007-09-19,539.27,549.45,538.86,546.85,5526900,546.85
+2007-09-18,526.52,537.25,524.27,535.27,4215700,535.27
+2007-09-17,526.53,529.28,524.07,525.30,2197500,525.30
+2007-09-14,523.20,530.27,522.22,528.75,2764900,528.75
+2007-09-13,524.06,527.21,523.22,524.78,1891100,524.78
+2007-09-12,520.53,527.98,519.00,522.65,2986000,522.65
+2007-09-11,516.99,521.65,515.73,521.33,2703600,521.33
+2007-09-10,521.28,522.07,510.88,514.48,3225800,514.48
+2007-09-07,517.86,521.24,516.80,519.35,3663600,519.35
+2007-09-06,529.36,529.83,518.24,523.52,3625900,523.52
+2007-09-05,523.40,529.48,522.25,527.80,3312900,527.80
+2007-09-04,515.02,528.00,514.62,525.15,3693700,525.15
+2007-08-31,513.10,516.50,511.47,515.25,2977600,515.25
+2007-08-30,512.36,515.40,510.58,511.40,2651700,511.40
+2007-08-29,507.84,513.30,507.23,512.88,2549300,512.88
+2007-08-28,511.53,514.98,505.79,506.40,3273900,506.40
+2007-08-27,514.43,517.45,511.40,513.26,2325100,513.26
+2007-08-24,512.61,515.55,508.50,515.00,2472700,515.00
+2007-08-23,516.00,516.13,507.00,512.19,3076700,512.19
+2007-08-22,509.96,516.25,509.25,512.75,3252700,512.75
+2007-08-21,498.94,508.16,497.77,506.61,3610600,506.61
+2007-08-20,502.46,502.56,496.00,497.92,2697300,497.92
+2007-08-17,497.44,501.00,491.65,500.04,5479400,500.04
+2007-08-16,492.02,496.43,480.46,491.52,8645600,491.52
+2007-08-15,509.00,511.69,496.71,497.55,5409500,497.55
+2007-08-14,515.72,517.40,508.00,508.60,3633700,508.60
+2007-08-13,519.54,519.75,513.03,515.50,3179300,515.50
+2007-08-10,510.18,518.72,505.63,515.75,5875200,515.75
+2007-08-09,520.80,526.82,514.63,514.73,4846500,514.73
+2007-08-08,519.34,525.78,517.09,525.78,4068800,525.78
+2007-08-07,509.75,519.88,509.04,516.02,4264300,516.02
+2007-08-06,503.00,510.15,502.50,510.00,3651500,510.00
+2007-08-03,510.05,513.20,503.00,503.00,3176200,503.00
+2007-08-02,513.72,514.99,509.00,511.01,3154900,511.01
+2007-08-01,510.50,516.51,508.14,512.94,4421500,512.94
+2007-07-31,520.23,520.44,510.00,510.00,4270500,510.00
+2007-07-30,512.92,519.34,510.50,516.11,3963300,516.11
+2007-07-27,508.53,516.62,505.50,511.89,5509100,511.89
+2007-07-26,508.74,512.59,498.88,508.00,6883400,508.00
+2007-07-25,516.98,517.02,505.56,509.76,5545000,509.76
+2007-07-24,509.30,518.69,507.11,514.00,5572100,514.00
+2007-07-23,519.01,520.00,512.15,512.51,6356700,512.51
+2007-07-20,511.90,523.18,509.50,520.12,17772300,520.12
+2007-07-19,553.46,553.52,542.24,548.59,11127200,548.59
+2007-07-18,553.89,554.50,543.81,549.50,6080000,549.50
+2007-07-17,555.04,557.73,552.38,555.00,4328600,555.00
+2007-07-16,550.30,558.58,549.31,552.99,6599500,552.99
+2007-07-13,547.91,552.67,547.25,552.16,5237100,552.16
+2007-07-12,545.86,547.32,540.22,545.33,3441600,545.33
+2007-07-11,543.61,546.50,540.01,544.47,3309300,544.47
+2007-07-10,543.79,547.00,541.65,543.34,3856000,543.34
+2007-07-09,543.00,548.74,540.26,542.56,3729800,542.56
+2007-07-06,541.25,543.87,538.73,539.40,2747000,539.40
+2007-07-05,535.56,544.40,532.15,541.63,4942900,541.63
+2007-07-03,531.06,534.40,527.50,534.34,1871800,534.34
+2007-07-02,525.49,531.85,524.20,530.38,3487600,530.38
+2007-06-29,526.02,527.40,519.46,522.70,3880600,522.70
+2007-06-28,524.88,529.50,523.80,525.01,4168400,525.01
+2007-06-27,525.00,527.99,519.56,526.29,6123100,526.29
+2007-06-26,532.73,533.20,526.24,530.26,5689500,530.26
+2007-06-25,528.98,534.99,523.38,527.42,7925000,527.42
+2007-06-22,516.42,524.99,516.10,524.98,7203700,524.98
+2007-06-21,510.98,515.29,506.28,514.11,4409700,514.11
+2007-06-20,516.96,518.75,509.06,509.97,4338200,509.97
+2007-06-19,514.01,517.25,511.54,514.31,4355300,514.31
+2007-06-18,506.18,516.00,504.24,515.20,4835900,515.20
+2007-06-15,508.19,509.00,501.23,505.89,6174100,505.89
+2007-06-14,505.38,505.88,501.70,502.84,4621200,502.84
+2007-06-13,507.09,508.54,498.69,505.24,7034000,505.24
+2007-06-12,508.71,511.67,503.17,504.77,6419500,504.77
+2007-06-11,514.02,518.25,510.00,511.34,4647700,511.34
+2007-06-08,516.20,519.64,509.46,515.49,6358200,515.49
+2007-06-07,519.75,526.50,512.51,515.06,10630500,515.06
+2007-06-06,516.75,520.78,515.26,518.25,7886700,518.25
+2007-06-05,509.75,519.00,506.61,518.84,10447100,518.84
+2007-06-04,497.91,510.51,497.59,507.07,7101000,507.07
+2007-06-01,501.00,505.02,497.93,500.40,4799000,500.40
+2007-05-31,500.56,508.78,497.06,497.91,8924300,497.91
+2007-05-30,484.50,498.84,483.00,498.60,7245800,498.60
+2007-05-29,485.00,491.80,484.00,487.11,5218000,487.11
+2007-05-25,479.70,484.95,477.27,483.52,5348500,483.52
+2007-05-24,475.15,479.20,471.50,474.33,4173600,474.33
+2007-05-23,480.82,483.41,473.75,473.97,5060200,473.97
+2007-05-22,473.00,479.01,473.00,475.86,3839000,475.86
+2007-05-21,469.53,479.20,466.72,470.60,6159300,470.60
+2007-05-18,472.03,472.70,469.75,470.32,3695900,470.32
+2007-05-17,472.46,475.22,470.81,470.96,4660600,470.96
+2007-05-16,462.00,473.14,459.02,472.61,6554200,472.61
+2007-05-15,461.96,462.54,457.41,458.00,4119000,458.00
+2007-05-14,465.48,467.51,460.00,461.78,3872700,461.78
+2007-05-11,461.83,467.00,461.00,466.74,2944100,466.74
+2007-05-10,467.04,469.49,461.02,461.47,3686300,461.47
+2007-05-09,466.15,471.73,463.88,469.25,3889900,469.25
+2007-05-08,466.13,468.17,464.73,466.81,2905100,466.81
+2007-05-07,472.14,472.82,466.47,467.27,3020100,467.27
+2007-05-04,470.12,474.84,465.88,471.12,3950000,471.12
+2007-05-03,466.22,474.07,465.29,473.23,3594200,473.23
+2007-05-02,468.65,471.08,465.73,465.78,3062700,465.78
+2007-05-01,472.19,472.81,464.17,469.00,3658200,469.00
+2007-04-30,479.15,481.35,471.38,471.38,3641200,471.38
+2007-04-27,480.07,482.40,478.33,479.01,2925700,479.01
+2007-04-26,478.10,484.45,477.11,481.18,4124900,481.18
+2007-04-25,480.00,481.37,476.11,477.99,3966800,477.99
+2007-04-24,478.61,479.98,475.55,477.53,3694700,477.53
+2007-04-23,480.10,485.00,478.26,479.08,5674600,479.08
+2007-04-20,490.52,492.50,482.02,482.48,12161500,482.48
+2007-04-19,474.50,481.95,469.59,471.65,11009600,471.65
+2007-04-18,471.26,479.90,469.53,476.01,5670500,476.01
+2007-04-17,473.80,476.39,471.60,472.80,3210100,472.80
+2007-04-16,468.46,476.99,468.15,474.27,5077900,474.27
+2007-04-13,468.45,468.77,463.36,466.29,2794800,466.29
+2007-04-12,464.00,468.00,462.24,467.39,2707900,467.39
+2007-04-11,466.06,469.40,462.61,464.53,3812000,464.53
+2007-04-10,467.09,470.79,465.16,466.50,2979300,466.50
+2007-04-09,472.98,473.00,465.59,468.21,3062100,468.21
+2007-04-05,471.30,472.09,469.62,471.51,2715800,471.51
+2007-04-04,472.14,473.00,469.58,471.02,3778800,471.02
+2007-04-03,464.05,474.25,464.00,472.60,6501800,472.60
+2007-04-02,457.76,458.53,452.12,458.53,3448500,458.53
+2007-03-30,462.10,463.40,456.14,458.16,3380200,458.16
+2007-03-29,464.55,466.00,455.00,460.92,3988500,460.92
+2007-03-28,461.87,465.44,460.15,461.88,4591600,461.88
+2007-03-27,463.55,465.23,460.34,463.62,3741200,463.62
+2007-03-26,460.55,465.00,455.62,465.00,4710300,465.00
+2007-03-23,461.45,463.39,457.08,461.83,4111300,461.83
+2007-03-22,455.61,462.17,452.53,462.04,5680700,462.04
+2007-03-21,445.30,456.57,445.21,456.55,5798300,456.55
+2007-03-20,445.79,447.60,443.60,445.28,3421500,445.28
+2007-03-19,443.25,448.50,440.63,447.23,5197700,447.23
+2007-03-16,445.65,446.70,439.89,440.85,5659100,440.85
+2007-03-15,447.86,449.82,443.94,446.19,3944200,446.19
+2007-03-14,443.23,448.66,439.00,448.00,8016900,448.00
+2007-03-13,450.11,451.93,442.83,443.03,6377300,443.03
+2007-03-12,452.57,455.25,451.11,454.75,3465400,454.75
+2007-03-09,458.00,458.40,450.10,452.96,4977700,452.96
+2007-03-08,459.22,465.50,454.10,454.72,5362800,454.72
+2007-03-07,462.69,463.14,454.29,455.64,6534100,455.64
+2007-03-06,447.47,459.00,447.38,457.55,7533700,457.55
+2007-03-05,437.02,445.50,437.00,440.95,6355100,440.95
+2007-03-02,445.11,448.70,438.68,438.68,6583600,438.68
+2007-03-01,442.67,452.42,440.00,448.23,8685200,448.23
+2007-02-28,450.41,453.67,443.04,449.45,8032300,449.45
+2007-02-27,455.00,459.80,447.17,448.77,9312800,448.77
+2007-02-26,472.83,475.25,463.75,464.93,3969900,464.93
+2007-02-23,475.75,476.95,467.80,470.62,3882600,470.62
+2007-02-22,478.69,484.24,474.39,475.85,5743900,475.85
+2007-02-21,469.84,478.68,467.74,475.86,5640600,475.86
+2007-02-20,468.47,472.75,464.71,472.10,4067600,472.10
+2007-02-16,462.80,470.15,462.06,469.94,6177000,469.94
+2007-02-15,466.00,466.13,460.72,461.47,4042400,461.47
+2007-02-14,460.00,469.13,459.22,465.93,5698800,465.93
+2007-02-13,459.15,462.78,457.26,459.10,4062600,459.10
+2007-02-12,460.68,462.39,455.02,458.29,5754500,458.29
+2007-02-09,471.65,472.68,461.50,461.89,4858600,461.89
+2007-02-08,468.05,473.75,465.15,471.03,4076700,471.03
+2007-02-07,473.82,474.35,468.78,470.01,4119800,470.01
+2007-02-06,468.10,473.30,467.26,471.48,5321900,471.48
+2007-02-05,477.50,478.00,466.19,467.16,7206900,467.16
+2007-02-02,482.61,485.00,477.81,481.50,6286500,481.50
+2007-02-01,506.00,506.01,481.53,481.75,15658700,481.75
+2007-01-31,496.49,505.00,495.51,501.50,12206100,501.50
+2007-01-30,494.00,498.00,491.22,494.32,4180500,494.32
+2007-01-29,498.00,498.75,490.50,492.47,4775700,492.47
+2007-01-26,490.93,497.90,487.03,495.84,5496500,495.84
+2007-01-25,501.00,504.50,485.66,488.09,6368500,488.09
+2007-01-24,484.45,499.54,483.29,499.07,6059300,499.07
+2007-01-23,480.79,484.75,477.29,479.05,4665500,479.05
+2007-01-22,492.50,492.65,478.50,480.84,5404300,480.84
+2007-01-19,487.98,490.76,486.74,489.75,4978300,489.75
+2007-01-18,494.52,496.48,487.43,487.83,5932000,487.83
+2007-01-17,503.39,507.77,494.38,497.28,6699100,497.28
+2007-01-16,507.55,513.00,503.30,504.28,7568900,504.28
+2007-01-12,501.99,505.00,500.00,505.00,4473700,505.00
+2007-01-11,497.20,501.75,496.18,499.72,7208200,499.72
+2007-01-10,484.43,493.55,482.04,489.46,5968500,489.46
+2007-01-09,485.45,488.25,481.20,485.50,5381400,485.50
+2007-01-08,487.69,489.87,482.20,483.58,4754400,483.58
+2007-01-05,482.50,487.50,478.11,487.19,6872100,487.19
+2007-01-04,469.00,483.95,468.35,483.26,7887600,483.26
+2007-01-03,466.00,476.66,461.11,467.59,7706500,467.59
+2006-12-29,462.10,464.47,459.86,460.48,2559200,460.48
+2006-12-28,467.12,468.58,462.25,462.56,3116200,462.56
+2006-12-27,460.00,468.08,459.10,468.03,4231500,468.03
+2006-12-26,456.52,459.47,454.59,457.53,2074300,457.53
+2006-12-22,457.50,458.64,452.73,455.58,3988300,455.58
+2006-12-21,464.18,465.25,452.34,456.20,6953300,456.20
+2006-12-20,470.00,471.50,462.33,462.90,4367800,462.90
+2006-12-19,461.72,469.31,458.50,468.63,6587000,468.63
+2006-12-18,482.51,482.74,460.72,462.80,8016600,462.80
+2006-12-15,482.64,484.11,479.84,480.30,5190800,480.30
+2006-12-14,480.25,483.75,477.26,482.12,4748900,482.12
+2006-12-13,484.69,485.50,477.02,478.99,4662100,478.99
+2006-12-12,483.85,486.36,480.28,481.78,4181000,481.78
+2006-12-11,484.92,488.90,483.80,483.93,3263400,483.93
+2006-12-08,481.94,488.60,480.00,484.11,3974900,484.11
+2006-12-07,490.23,491.80,482.42,482.64,4664300,482.64
+2006-12-06,486.96,492.40,484.52,488.71,4450300,488.71
+2006-12-05,487.40,489.44,484.89,487.00,4103000,487.00
+2006-12-04,483.00,487.43,479.35,484.85,4899900,484.85
+2006-12-01,485.98,488.39,478.50,480.80,5631400,480.80
+2006-11-30,484.19,490.40,481.55,484.81,5577500,484.81
+2006-11-29,494.24,494.74,482.25,484.65,6315300,484.65
+2006-11-28,481.13,489.86,477.03,489.50,7797600,489.50
+2006-11-27,501.37,501.78,484.75,484.75,7324700,484.75
+2006-11-24,504.50,507.50,504.00,505.00,1732700,505.00
+2006-11-22,510.97,513.00,505.78,508.01,4500700,508.01
+2006-11-21,496.54,510.00,495.83,509.65,8427500,509.65
+2006-11-20,498.40,498.40,492.65,495.05,5124500,495.05
+2006-11-17,493.25,499.66,493.00,498.79,5511000,498.79
+2006-11-16,495.00,497.68,492.56,495.90,5092600,495.90
+2006-11-15,493.43,499.85,491.93,491.93,8370700,491.93
+2006-11-14,480.70,489.95,480.50,489.30,7223400,489.30
+2006-11-13,474.90,481.17,474.14,481.03,4341900,481.03
+2006-11-10,473.78,474.72,470.29,473.55,2796700,473.55
+2006-11-09,476.50,479.49,471.86,472.63,4879200,472.63
+2006-11-08,470.35,481.74,468.60,475.00,7965000,475.00
+2006-11-07,476.95,479.02,471.77,472.57,4897100,472.57
+2006-11-06,473.77,479.66,472.33,476.95,4991500,476.95
+2006-11-03,472.23,473.75,465.06,471.80,4907700,471.80
+2006-11-02,467.50,473.73,466.38,469.91,5236700,469.91
+2006-11-01,478.76,479.13,465.26,467.50,5426300,467.50
+2006-10-31,478.06,482.16,473.84,476.39,6285400,476.39
+2006-10-30,474.82,480.46,470.01,476.57,6563100,476.57
+2006-10-27,483.90,485.24,472.49,475.20,6604000,475.20
+2006-10-26,487.68,491.96,484.20,485.10,7031700,485.10
+2006-10-25,477.49,488.50,475.11,486.60,9187500,486.60
+2006-10-24,476.28,477.86,471.41,473.31,8660200,473.31
+2006-10-23,462.28,484.64,460.37,480.78,15104500,480.78
+2006-10-20,458.99,460.10,453.59,459.67,11647900,459.67
+2006-10-19,420.23,429.50,419.57,426.06,11503500,426.06
+2006-10-18,422.99,424.75,417.50,419.31,6017300,419.31
+2006-10-17,420.30,423.75,416.70,420.64,5211000,420.64
+2006-10-16,427.70,429.20,421.34,421.75,4319400,421.75
+2006-10-13,427.76,429.50,425.56,427.30,3622500,427.30
+2006-10-12,428.56,429.68,424.00,427.44,4844000,427.44
+2006-10-11,425.02,429.91,423.76,426.50,5635400,426.50
+2006-10-10,431.56,437.85,422.39,426.65,9788600,426.65
+2006-10-09,424.80,431.95,423.42,429.00,7583300,429.00
+2006-10-06,410.22,421.91,409.75,420.50,7336500,420.50
+2006-10-05,414.70,418.24,410.86,411.81,5789800,411.81
+2006-10-04,404.97,415.77,403.05,415.70,6661800,415.70
+2006-10-03,401.29,406.46,398.19,404.04,5464700,404.04
+2006-10-02,401.90,406.00,400.80,401.44,3651900,401.44
+2006-09-29,405.13,405.62,401.41,401.90,3310900,401.90
+2006-09-28,404.08,406.98,400.54,403.58,5107400,403.58
+2006-09-27,406.30,411.22,402.37,402.92,5876700,402.92
+2006-09-26,405.50,407.68,401.77,406.87,5289400,406.87
+2006-09-25,405.58,409.45,402.50,403.98,5737300,403.98
+2006-09-22,404.98,407.45,401.36,403.78,4649600,403.78
+2006-09-21,400.30,408.45,399.86,406.85,10692100,406.85
+2006-09-20,407.10,407.39,394.62,397.00,9147800,397.00
+2006-09-19,415.46,415.49,392.74,403.81,14292900,403.81
+2006-09-18,410.00,418.69,409.47,414.69,7106700,414.69
+2006-09-15,407.48,410.05,406.74,409.88,7838200,409.88
+2006-09-14,404.30,406.28,401.93,403.98,5366100,403.98
+2006-09-13,395.15,406.76,395.10,406.57,9768200,406.57
+2006-09-12,385.00,392.73,384.88,391.90,5442200,391.90
+2006-09-11,378.26,384.69,377.77,384.09,4529200,384.09
+2006-09-08,376.72,380.79,376.72,377.85,3083400,377.85
+2006-09-07,379.39,381.75,377.40,378.49,3842000,378.49
+2006-09-06,382.10,383.19,379.66,380.14,3724100,380.14
+2006-09-05,379.87,385.40,377.44,384.36,4074300,384.36
+2006-09-01,380.99,381.28,377.19,378.60,2672900,378.60
+2006-08-31,381.49,382.15,378.20,378.53,2959900,378.53
+2006-08-30,379.21,384.65,378.51,380.75,4044400,380.75
+2006-08-29,380.78,382.32,377.20,378.95,4460000,378.95
+2006-08-28,375.61,380.95,375.00,380.95,4164000,380.95
+2006-08-25,373.08,375.32,372.50,373.26,2466700,373.26
+2006-08-24,374.44,376.40,372.26,373.73,3482500,373.73
+2006-08-23,377.64,378.27,372.66,373.43,3642300,373.43
+2006-08-22,377.73,379.26,374.84,378.29,4164100,378.29
+2006-08-21,378.10,379.00,375.22,377.30,4023300,377.30
+2006-08-18,386.31,387.09,380.75,383.36,4952200,383.36
+2006-08-17,386.39,390.00,383.92,385.80,5080200,385.80
+2006-08-16,383.48,388.45,382.12,387.72,5853200,387.72
+2006-08-15,374.11,381.67,372.60,380.97,6698200,380.97
+2006-08-14,371.50,375.13,368.67,369.43,4968300,369.43
+2006-08-11,374.40,375.28,368.00,368.50,3766500,368.50
+2006-08-10,373.88,377.67,372.46,374.20,4261900,374.20
+2006-08-09,382.80,384.68,376.36,376.94,4311000,376.94
+2006-08-08,382.82,384.50,379.09,381.00,5743200,381.00
+2006-08-07,371.50,379.73,371.15,377.95,3946900,377.95
+2006-08-04,379.56,380.68,371.75,373.85,5095200,373.85
+2006-08-03,364.98,377.91,363.36,375.39,6327000,375.39
+2006-08-02,375.60,377.17,365.20,367.23,7097800,367.23
+2006-08-01,385.11,385.77,375.51,375.51,5463200,375.51
+2006-07-31,388.00,389.17,383.31,386.60,4595300,386.60
+2006-07-28,382.00,389.56,381.73,388.12,4083600,388.12
+2006-07-27,387.37,387.49,377.95,382.40,5641100,382.40
+2006-07-26,388.20,391.91,383.00,385.50,5531900,385.50
+2006-07-25,385.02,391.31,383.80,389.36,5761100,389.36
+2006-07-24,392.82,393.89,381.21,390.90,8086100,390.90
+2006-07-21,386.14,391.75,377.69,390.11,11754600,390.11
+2006-07-20,404.28,404.44,385.66,387.12,12538700,387.12
+2006-07-19,395.01,401.14,394.66,399.00,8518500,399.00
+2006-07-18,409.75,410.57,397.74,403.05,8536800,403.05
+2006-07-17,404.63,411.00,403.72,407.89,5811900,407.89
+2006-07-14,410.33,411.49,398.61,403.50,7552100,403.50
+2006-07-13,414.00,418.34,406.83,408.83,6924500,408.83
+2006-07-12,422.09,422.74,416.73,417.25,4906700,417.25
+2006-07-11,418.51,425.05,413.03,424.56,5971300,424.56
+2006-07-10,423.44,425.23,416.38,418.20,4436400,418.20
+2006-07-07,426.05,427.89,415.88,420.45,6041900,420.45
+2006-07-06,423.38,425.38,421.98,423.19,3687100,423.19
+2006-07-05,421.52,422.80,415.64,421.46,4985600,421.46
+2006-07-03,420.04,423.77,419.45,423.20,2156700,423.20
+2006-06-30,415.60,419.33,412.33,419.33,6258000,419.33
+2006-06-29,407.99,418.20,405.82,417.81,6658200,417.81
+2006-06-28,404.01,406.48,401.13,406.11,3710500,406.11
+2006-06-27,405.71,408.00,401.01,402.32,4107100,402.32
+2006-06-26,406.75,408.30,403.25,404.22,3551200,404.22
+2006-06-23,402.76,409.75,400.74,404.86,5314800,404.86
+2006-06-22,401.58,406.00,388.00,399.95,5911900,399.95
+2006-06-21,391.06,404.00,389.75,402.13,8744400,402.13
+2006-06-20,388.03,391.87,386.51,387.17,4039900,387.17
+2006-06-19,390.85,394.80,386.98,388.14,7633100,388.14
+2006-06-16,389.10,390.93,388.00,390.70,5304600,390.70
+2006-06-15,386.62,392.25,383.00,391.00,6785700,391.00
+2006-06-14,389.83,391.10,378.52,384.39,7772000,384.39
+2006-06-13,380.90,387.00,378.12,386.52,7659100,386.52
+2006-06-12,388.34,390.49,381.00,381.54,5019100,381.54
+2006-06-09,392.19,395.43,385.35,386.57,6157500,386.57
+2006-06-08,387.75,394.27,378.59,393.30,10359500,393.30
+2006-06-07,393.24,394.86,386.50,386.51,8911300,386.51
+2006-06-06,376.58,390.00,376.30,389.99,10259800,389.99
+2006-06-05,376.18,381.45,374.15,374.44,5558500,374.44
+2006-06-02,386.84,387.08,377.45,379.44,6386400,379.44
+2006-06-01,373.54,382.99,371.60,382.62,6278000,382.62
+2006-05-31,373.80,378.25,366.78,371.82,7981300,371.82
+2006-05-30,378.28,381.00,371.45,371.94,4316000,371.94
+2006-05-26,384.55,385.88,380.03,381.35,3667000,381.35
+2006-05-25,379.08,383.00,372.31,382.99,8194600,382.99
+2006-05-24,377.35,383.44,371.61,381.25,9553800,381.25
+2006-05-23,374.21,383.88,373.56,375.58,8983000,375.58
+2006-05-22,367.85,373.03,365.25,370.95,8604400,370.95
+2006-05-19,373.28,374.50,360.57,370.02,11398200,370.02
+2006-05-18,378.78,381.81,370.71,370.99,5835000,370.99
+2006-05-17,370.61,379.84,370.22,374.50,10643800,374.50
+2006-05-16,375.99,376.86,369.89,371.30,6491100,371.30
+2006-05-15,375.93,380.15,368.25,376.20,8590100,376.20
+2006-05-12,383.54,384.87,373.55,374.13,10087600,374.13
+2006-05-11,403.42,404.71,384.98,387.00,8892800,387.00
+2006-05-10,408.31,411.71,401.86,402.98,6187200,402.98
+2006-05-09,395.70,409.00,393.75,408.80,9140600,408.80
+2006-05-08,395.11,397.12,390.05,394.78,5118600,394.78
+2006-05-05,397.60,400.68,391.78,394.30,6065000,394.30
+2006-05-04,395.03,398.87,392.21,394.75,4652000,394.75
+2006-05-03,396.35,401.50,390.88,394.17,8072200,394.17
+2006-05-02,401.08,402.49,388.40,394.80,13104300,394.80
+2006-05-01,418.47,419.44,398.55,398.90,10361200,398.90
+2006-04-28,418.63,425.73,416.30,417.94,7421300,417.94
+2006-04-27,422.91,426.91,419.39,420.03,8337900,420.03
+2006-04-26,427.74,430.04,423.53,425.97,7277800,425.97
+2006-04-25,439.63,441.04,426.00,427.16,9569000,427.16
+2006-04-24,439.40,444.70,436.52,440.50,8836400,440.50
+2006-04-21,448.90,450.72,436.17,437.10,22551300,437.10
+2006-04-20,411.01,416.00,408.20,415.00,12271500,415.00
+2006-04-19,412.57,413.64,406.73,410.50,6781700,410.50
+2006-04-18,407.93,409.83,401.50,404.24,8137600,404.24
+2006-04-17,403.45,412.50,400.84,406.82,8259500,406.82
+2006-04-13,408.63,409.76,400.50,402.16,6552900,402.16
+2006-04-12,409.00,411.33,405.19,408.95,6017000,408.95
+2006-04-11,416.42,419.10,406.22,409.66,11107200,409.66
+2006-04-10,407.08,417.17,405.25,416.38,9320100,416.38
+2006-04-07,412.41,412.85,404.02,406.16,7025900,406.16
+2006-04-06,406.49,413.89,405.43,411.18,8598500,411.18
+2006-04-05,408.20,414.57,402.82,407.99,13410500,407.99
+2006-04-04,389.90,404.90,388.14,404.34,15715700,404.34
+2006-04-03,389.53,392.47,387.93,389.70,8122700,389.70
+2006-03-31,388.74,391.87,384.03,390.00,36521400,390.00
+2006-03-30,389.19,393.50,383.61,388.44,14711700,388.44
+2006-03-29,379.94,399.00,379.51,394.98,19027500,394.98
+2006-03-28,371.71,377.86,371.17,377.20,8945800,377.20
+2006-03-27,367.09,371.71,365.00,369.69,7023700,369.69
+2006-03-24,368.62,370.09,362.51,365.80,15180600,365.80
+2006-03-23,342.35,345.75,340.20,341.89,7434700,341.89
+2006-03-22,339.75,344.10,337.50,340.22,7596000,340.22
+2006-03-21,350.01,351.66,339.08,339.92,9831100,339.92
+2006-03-20,342.34,350.09,341.54,348.19,10407600,348.19
+2006-03-17,338.80,341.78,334.93,339.79,8551700,339.79
+2006-03-16,348.61,348.75,337.90,338.77,10016700,338.77
+2006-03-15,350.77,352.30,340.53,344.50,12768800,344.50
+2006-03-14,337.14,352.37,332.62,351.16,18450700,351.16
+2006-03-13,340.93,346.10,335.45,337.06,13642400,337.06
+2006-03-10,343.50,344.50,331.55,337.50,19325600,337.50
+2006-03-09,355.39,358.53,341.50,343.00,13910400,343.00
+2006-03-08,353.93,360.03,350.54,353.88,11745600,353.88
+2006-03-07,365.02,368.45,358.15,364.45,10378800,364.45
+2006-03-06,380.91,383.40,367.14,368.10,8939700,368.10
+2006-03-03,384.30,387.24,375.76,378.18,11962000,378.18
+2006-03-02,364.28,381.10,362.20,376.45,18330300,376.45
+2006-03-01,368.56,369.45,361.30,364.80,12061200,364.80
+2006-02-28,393.20,397.54,338.51,362.62,39437600,362.62
+2006-02-27,381.27,391.70,380.28,390.38,10212200,390.38
+2006-02-24,377.30,380.07,373.49,377.40,6484300,377.40
+2006-02-23,365.61,381.24,365.39,378.07,12551600,378.07
+2006-02-22,367.15,368.95,363.86,365.49,6476200,365.49
+2006-02-21,366.44,373.54,365.11,366.59,8686000,366.59
+2006-02-17,369.86,372.14,363.62,368.75,14320200,368.75
+2006-02-16,345.67,367.00,344.49,366.46,21315500,366.46
+2006-02-15,341.27,346.00,337.83,342.38,12947000,342.38
+2006-02-14,345.33,351.69,342.40,343.32,14654000,343.32
+2006-02-13,346.64,350.60,341.89,345.70,19717800,345.70
+2006-02-10,361.95,364.50,353.14,362.61,15223500,362.61
+2006-02-09,371.20,374.40,356.11,358.77,11912400,358.77
+2006-02-08,368.48,370.69,354.67,369.08,20804100,369.08
+2006-02-07,382.99,383.70,363.35,367.92,16630200,367.92
+2006-02-06,385.31,389.90,379.56,385.10,8940400,385.10
+2006-02-03,393.62,393.90,372.57,381.55,18281800,381.55
+2006-02-02,403.82,406.50,395.98,396.04,11807700,396.04
+2006-02-01,389.03,402.00,387.52,401.78,27122500,401.78
+2006-01-31,430.57,439.60,423.97,432.66,22066000,432.66
+2006-01-30,429.23,433.28,425.00,426.82,8588900,426.82
+2006-01-27,435.00,438.22,428.98,433.49,8452200,433.49
+2006-01-26,439.54,439.99,423.56,434.27,12926100,434.27
+2006-01-25,451.26,454.23,429.22,433.00,18739800,433.00
+2006-01-24,436.03,444.95,434.48,443.03,15464600,443.03
+2006-01-23,407.38,428.39,405.73,427.50,22741400,427.50
+2006-01-20,438.70,440.03,394.74,399.46,41116700,399.46
+2006-01-19,451.17,453.49,433.00,436.45,14537300,436.45
+2006-01-18,447.30,457.36,443.25,444.91,20485700,444.91
+2006-01-17,463.06,469.90,462.53,467.11,8270300,467.11
+2006-01-13,464.31,466.89,461.61,466.25,7656600,466.25
+2006-01-12,473.72,474.99,461.50,463.63,10125300,463.63
+2006-01-11,471.27,475.11,469.18,471.63,9007400,471.63
+2006-01-10,464.42,470.25,462.04,469.76,9097100,469.76
+2006-01-09,466.41,473.40,460.94,466.90,12791900,466.90
+2006-01-06,456.87,470.50,453.24,465.66,17756900,465.66
+2006-01-05,446.00,451.55,441.50,451.24,10808300,451.24
+2006-01-04,443.90,448.96,439.75,445.24,15286400,445.24
+2006-01-03,422.52,435.67,418.22,435.23,13121200,435.23
+2005-12-30,417.27,418.21,413.74,414.86,7587100,414.86
+2005-12-29,427.98,428.73,419.17,420.15,6945800,420.15
+2005-12-28,424.34,427.78,421.26,426.69,7117900,426.69
+2005-12-27,431.86,431.86,422.76,424.64,6702800,424.64
+2005-12-23,432.15,432.50,428.78,430.93,4595100,430.93
+2005-12-22,431.77,432.86,425.93,432.04,7546600,432.04
+2005-12-21,433.55,436.86,420.71,426.33,11221900,426.33
+2005-12-20,427.86,432.20,424.67,429.74,10084700,429.74
+2005-12-19,432.20,446.21,420.11,424.60,21936800,424.60
+2005-12-16,425.34,432.50,422.75,430.15,16330500,430.15
+2005-12-15,419.11,423.14,416.50,422.55,6045800,422.55
+2005-12-14,417.04,419.73,415.49,418.96,6630400,418.96
+2005-12-13,412.50,418.00,411.64,417.49,8157000,417.49
+2005-12-12,414.63,415.21,409.95,412.61,6950100,412.61
+2005-12-09,415.00,415.78,408.56,409.20,7643400,409.20
+2005-12-08,405.30,410.65,402.64,410.65,8910100,410.65
+2005-12-07,406.16,406.70,399.01,404.22,11665900,404.22
+2005-12-06,408.70,416.41,401.70,404.54,15114700,404.54
+2005-12-05,417.00,417.50,404.28,405.85,10289400,405.85
+2005-12-02,416.94,419.53,413.86,417.70,7543500,417.70
+2005-12-01,409.20,415.44,408.29,414.09,9744900,414.09
+2005-11-30,404.26,408.45,395.56,404.91,15596600,404.91
+2005-11-29,424.46,426.40,402.14,403.54,21495800,403.54
+2005-11-28,429.82,431.24,422.44,423.48,11008400,423.48
+2005-11-25,425.78,428.75,425.30,428.62,4840100,428.62
+2005-11-23,417.04,424.72,415.78,422.86,10085000,422.86
+2005-11-22,408.65,417.31,406.23,416.47,9596000,416.47
+2005-11-21,399.17,409.98,393.49,409.36,10335100,409.36
+2005-11-18,403.49,404.50,399.85,400.21,7025700,400.21
+2005-11-17,401.80,403.81,399.53,403.45,9212200,403.45
+2005-11-16,396.20,398.85,394.11,398.15,8695200,398.15
+2005-11-15,394.38,397.00,390.95,392.80,8624900,392.80
+2005-11-14,392.12,398.22,391.53,396.97,7807900,396.97
+2005-11-11,395.12,396.90,388.85,390.40,7063900,390.40
+2005-11-10,378.36,391.35,377.43,391.10,9128700,391.10
+2005-11-09,386.67,388.29,378.03,379.15,10466900,379.15
+2005-11-08,394.25,395.59,388.58,389.90,7897500,389.90
+2005-11-07,395.10,397.47,392.15,395.03,9591500,395.03
+2005-11-04,389.98,391.79,385.45,390.43,8824900,390.43
+2005-11-03,382.41,386.58,381.38,385.95,7448400,385.95
+2005-11-02,381.70,385.00,377.17,379.68,10565400,379.68
+2005-11-01,371.86,383.90,369.01,379.38,16356100,379.38
+2005-10-31,360.24,374.75,359.51,372.14,14342900,372.14
+2005-10-28,355.27,358.95,355.02,358.17,5903500,358.17
+2005-10-27,356.60,357.09,351.68,353.06,5134400,353.06
+2005-10-26,346.28,356.00,346.19,355.44,8907500,355.44
+2005-10-25,345.78,347.40,342.86,346.91,6878300,346.91
+2005-10-24,343.37,349.30,342.19,348.65,9431700,348.65
+2005-10-21,345.80,346.43,333.00,339.90,22892400,339.90
+2005-10-20,309.99,311.13,301.21,303.20,13911700,303.20
+2005-10-19,304.00,309.87,303.96,308.70,7010700,308.70
+2005-10-18,304.96,307.96,302.74,303.28,7077800,303.28
+2005-10-17,297.50,305.20,294.56,305.00,7566700,305.00
+2005-10-14,299.90,300.23,292.54,296.14,8519100,296.14
+2005-10-13,302.00,302.00,290.68,297.44,10567700,297.44
+2005-10-12,305.20,307.19,299.00,300.97,9306200,300.97
+2005-10-11,310.61,312.65,304.86,306.10,8542600,306.10
+2005-10-10,313.31,314.82,309.15,310.65,5572200,310.65
+2005-10-07,314.79,316.67,310.54,312.99,6770300,312.99
+2005-10-06,314.14,314.48,310.09,312.75,7993800,312.75
+2005-10-05,312.69,314.90,308.00,310.71,8328400,310.71
+2005-10-04,319.95,321.28,310.74,311.00,9144300,311.00
+2005-10-03,313.63,320.11,312.79,318.68,9160300,318.68
+2005-09-30,314.22,317.50,312.29,316.46,9151300,316.46
+2005-09-29,306.68,310.72,306.08,309.62,5613800,309.62
+2005-09-28,314.22,315.10,305.60,306.00,7997400,306.00
+2005-09-27,314.95,318.41,313.38,313.94,6873100,313.94
+2005-09-26,319.50,320.95,312.56,314.28,9894400,314.28
+2005-09-23,313.00,317.21,312.59,315.36,8483800,315.36
+2005-09-22,311.50,319.22,310.17,311.37,13006400,311.37
+2005-09-21,308.41,313.76,305.96,311.90,10119700,311.90
+2005-09-20,306.15,311.30,305.23,307.91,9351000,307.91
+2005-09-19,301.00,306.00,300.71,303.79,5761900,303.79
+2005-09-16,304.02,304.50,299.87,300.20,7579800,300.20
+2005-09-15,299.52,306.75,297.91,302.62,15466200,302.62
+2005-09-14,308.73,313.28,300.30,303.00,11275800,303.00
+2005-09-13,309.00,315.53,306.17,311.68,10299900,311.68
+2005-09-12,301.75,311.42,301.00,309.74,10386500,309.74
+2005-09-09,297.28,299.10,296.56,299.09,4390500,299.09
+2005-09-08,294.83,299.28,293.36,295.39,6613300,295.39
+2005-09-07,285.89,295.50,285.28,294.87,7499500,294.87
+2005-09-06,289.00,289.39,286.80,287.11,4212300,287.11
+2005-09-02,286.51,289.99,286.44,288.45,3434500,288.45
+2005-09-01,285.91,287.50,285.00,286.25,2742100,286.25
+2005-08-31,288.23,288.50,284.36,286.00,5034000,286.00
+2005-08-30,287.39,289.51,285.88,287.27,4792000,287.27
+2005-08-29,282.24,289.12,282.24,288.45,5903000,288.45
+2005-08-26,283.48,285.02,282.66,283.58,3755300,283.58
+2005-08-25,282.55,284.00,279.97,282.59,4376600,282.59
+2005-08-24,277.57,284.75,276.45,282.57,8593100,282.57
+2005-08-23,276.16,279.74,274.12,279.58,5821700,279.58
+2005-08-22,281.24,281.47,273.35,274.01,6813000,274.01
+2005-08-19,280.99,281.45,279.62,280.00,5542900,280.00
+2005-08-18,275.91,280.50,275.00,279.99,11872800,279.99
+2005-08-17,285.51,286.57,284.00,285.10,3883300,285.10
+2005-08-16,284.88,287.79,283.34,285.65,7109200,285.65
+2005-08-15,289.80,292.77,283.77,284.00,8174700,284.00
+2005-08-12,283.36,290.20,281.64,289.72,6585900,289.72
+2005-08-11,285.89,286.58,280.62,284.05,7514900,284.05
+2005-08-10,291.30,292.33,284.88,285.68,6879000,285.68
+2005-08-09,291.96,292.68,288.51,291.57,5779300,291.57
+2005-08-08,293.60,295.65,290.49,291.25,4481800,291.25
+2005-08-05,297.50,298.51,291.31,292.35,5939700,292.35
+2005-08-04,295.55,299.00,295.25,297.73,5236500,297.73
+2005-08-03,298.00,299.72,295.60,297.30,5930600,297.30
+2005-08-02,291.60,299.52,291.12,299.19,7290200,299.19
+2005-08-01,288.12,292.50,288.10,291.61,5662400,291.61
+2005-07-29,292.14,292.84,286.99,287.76,8363300,287.76
+2005-07-28,297.41,297.41,293.28,293.50,5925600,293.50
+2005-07-27,297.74,298.23,292.40,296.93,7217900,296.93
+2005-07-26,295.01,298.00,292.09,296.09,9816900,296.09
+2005-07-25,302.39,303.29,294.96,295.85,9658800,295.85
+2005-07-22,306.37,309.25,296.33,302.40,23386800,302.40
+2005-07-21,314.05,317.80,311.21,313.94,19789400,313.94
+2005-07-20,305.57,312.61,301.80,312.00,14310400,312.00
+2005-07-19,302.10,310.35,301.80,309.90,12621400,309.90
+2005-07-18,300.00,301.90,297.75,299.54,6207800,299.54
+2005-07-15,301.24,303.40,299.78,301.19,8438400,301.19
+2005-07-14,305.34,306.75,300.07,300.89,10667700,300.89
+2005-07-13,292.51,299.24,292.10,298.86,11437900,298.86
+2005-07-12,293.39,294.40,290.93,291.78,5864900,291.78
+2005-07-11,296.40,296.60,291.02,293.35,8390300,293.35
+2005-07-08,296.25,297.50,294.05,296.23,7457600,296.23
+2005-07-07,289.39,295.80,288.51,295.54,10672100,295.54
+2005-07-06,297.30,297.60,291.38,291.52,8000300,291.52
+2005-07-05,292.10,295.98,290.23,295.71,7494000,295.71
+2005-07-01,295.04,296.24,289.22,291.25,9227600,291.25
+2005-06-30,294.34,298.93,291.04,294.15,15094400,294.15
+2005-06-29,302.50,304.38,292.15,292.72,18298700,292.72
+2005-06-28,306.28,309.25,302.00,302.00,19036500,302.00
+2005-06-27,298.90,304.47,293.86,304.10,17802900,304.10
+2005-06-24,290.90,298.00,289.58,297.25,17771200,297.25
+2005-06-23,288.00,294.81,286.50,289.71,14056400,289.71
+2005-06-22,289.67,292.32,288.67,289.30,10474000,289.30
+2005-06-21,288.07,290.30,284.97,287.84,15132300,287.84
+2005-06-20,276.09,287.67,271.73,286.70,21024700,286.70
+2005-06-17,279.00,280.30,275.90,280.30,10434400,280.30
+2005-06-16,274.26,278.30,273.07,277.44,12462400,277.44
+2005-06-15,275.00,277.30,267.43,274.80,20883100,274.80
+2005-06-14,278.59,281.24,277.75,278.35,10091900,278.35
+2005-06-13,279.82,284.19,276.52,282.75,12803200,282.75
+2005-06-10,286.99,287.28,280.02,282.50,12696600,282.50
+2005-06-09,284.72,288.50,280.56,286.31,16441100,286.31
+2005-06-08,292.85,293.19,278.00,279.56,25700900,279.56
+2005-06-07,297.10,299.59,290.30,293.12,24323000,293.12
+2005-06-06,282.39,293.75,281.83,290.94,22525900,290.94
+2005-06-03,286.79,289.30,277.41,280.26,18782300,280.26
+2005-06-02,288.73,289.78,284.60,287.90,17974100,287.90
+2005-06-01,283.20,292.89,282.02,288.00,35191700,288.00
+2005-05-31,269.43,278.40,269.37,277.27,22236800,277.27
+2005-05-27,260.46,266.05,259.25,266.00,12184100,266.00
+2005-05-26,260.96,263.76,258.30,259.20,13546600,259.20
+2005-05-25,252.73,260.98,250.63,260.81,18057900,260.81
+2005-05-24,256.96,265.44,253.50,256.00,29043100,256.00
+2005-05-23,243.16,258.10,242.71,255.45,21388300,255.45
+2005-05-20,241.21,241.67,239.65,241.61,8163500,241.61
+2005-05-19,240.34,241.17,238.27,239.18,9716500,239.18
+2005-05-18,233.61,239.97,233.52,239.16,12312000,239.16
+2005-05-17,230.56,233.45,230.20,233.13,7808900,233.13
+2005-05-16,229.68,231.62,228.57,231.05,5681400,231.05
+2005-05-13,229.18,231.09,227.32,229.24,7415500,229.24
+2005-05-12,230.81,232.23,228.20,228.72,8948200,228.72
+2005-05-11,228.97,231.98,227.93,231.29,11478800,231.29
+2005-05-10,225.47,227.80,224.72,227.80,6345800,227.80
+2005-05-09,228.00,228.50,225.43,226.02,5536800,226.02
+2005-05-06,228.40,229.25,226.47,228.02,6763900,228.02
+2005-05-05,228.62,228.62,225.88,226.98,7509600,226.98
+2005-05-04,227.23,229.88,227.00,228.50,12083500,228.50
+2005-05-03,221.85,228.15,221.32,226.19,17780200,226.19
+2005-05-02,222.05,223.70,220.21,222.29,9767400,222.29
+2005-04-29,221.91,222.25,217.82,220.00,9170200,220.00
+2005-04-28,219.50,222.08,217.71,219.45,8682800,219.45
+2005-04-27,217.99,220.85,216.74,219.78,10264800,219.78
+2005-04-26,220.22,222.00,218.29,218.75,17272000,218.75
+2005-04-25,217.82,224.74,217.52,223.53,19840000,223.53
+2005-04-22,222.90,224.00,214.26,215.81,33205100,215.81
+2005-04-21,200.42,205.00,199.32,204.22,17751900,204.22
+2005-04-20,198.58,200.50,195.91,198.10,15451500,198.10
+2005-04-19,189.33,192.00,188.03,191.40,8430000,191.40
+2005-04-18,184.58,187.88,183.49,186.97,6550300,186.97
+2005-04-15,190.10,190.34,184.66,185.00,11577400,185.00
+2005-04-14,193.27,194.36,190.10,191.45,6152700,191.45
+2005-04-13,193.47,194.32,189.73,192.93,6555800,192.93
+2005-04-12,193.00,194.42,189.41,193.96,7319600,193.96
+2005-04-11,193.09,194.80,192.32,193.23,5410500,193.23
+2005-04-08,193.69,195.10,191.45,192.05,5116600,192.05
+2005-04-07,188.78,194.62,188.64,193.76,9692200,193.76
+2005-04-06,189.24,189.65,187.58,189.22,5252600,189.22
+2005-04-05,187.73,190.26,187.57,188.57,8736700,188.57
+2005-04-04,179.95,185.32,179.84,185.29,8076400,185.29
+2005-04-01,181.76,182.95,179.99,180.04,6182000,180.04
+2005-03-31,177.95,181.39,177.64,180.51,6768600,180.51
+2005-03-30,180.64,181.45,179.60,180.45,6236100,180.45
+2005-03-29,181.05,183.28,178.07,179.57,6473000,179.57
+2005-03-28,181.68,184.80,180.95,181.42,8738000,181.42
+2005-03-24,180.70,180.86,179.20,179.25,3705200,179.25
+2005-03-23,177.97,180.24,177.97,178.98,4845000,178.98
+2005-03-22,181.18,181.94,177.85,178.60,5631700,178.60
+2005-03-21,179.27,182.17,177.25,180.88,7483700,180.88
+2005-03-18,178.81,180.40,178.31,180.04,7090000,180.04
+2005-03-17,177.13,179.64,175.80,179.29,8260600,179.29
+2005-03-16,176.70,178.61,175.01,175.60,7106300,175.60
+2005-03-15,175.30,180.00,174.21,178.61,10422100,178.61
+2005-03-14,178.33,178.40,172.57,174.99,11146600,174.99
+2005-03-11,180.44,180.95,177.15,177.80,8028300,177.80
+2005-03-10,181.01,181.20,177.40,179.98,10960500,179.98
+2005-03-09,184.21,184.65,180.16,181.35,11360400,181.35
+2005-03-08,189.10,189.85,184.97,185.20,8046100,185.20
+2005-03-07,187.78,189.60,187.03,188.81,8667400,188.81
+2005-03-04,186.70,187.25,185.07,185.90,6774100,185.90
+2005-03-03,186.13,187.75,184.31,187.01,7608600,187.01
+2005-03-02,185.95,187.67,184.36,185.18,7285500,185.18
+2005-03-01,189.29,189.75,182.00,186.06,9311200,186.06
+2005-02-28,186.00,189.87,185.85,187.99,7818400,187.99
+2005-02-25,189.15,189.92,185.51,185.87,9973500,185.87
+2005-02-24,183.37,189.85,182.23,188.89,25814300,188.89
+2005-02-23,193.30,194.48,188.66,193.95,15586000,193.95
+2005-02-22,196.50,198.90,190.39,191.37,13483700,191.37
+2005-02-18,198.51,198.84,196.66,197.95,8485900,197.95
+2005-02-17,197.83,199.75,196.81,197.90,10414400,197.90
+2005-02-16,194.70,199.33,194.30,198.41,16532300,198.41
+2005-02-15,193.60,199.84,193.08,195.23,25782800,195.23
+2005-02-14,182.85,193.08,181.00,192.99,38562200,192.99
+2005-02-11,186.66,192.32,186.07,187.40,13116000,187.40
+2005-02-10,191.97,192.21,185.25,187.98,18982700,187.98
+2005-02-09,200.76,201.60,189.46,191.58,17171500,191.58
+2005-02-08,196.96,200.02,194.53,198.64,11480000,198.64
+2005-02-07,205.26,206.40,195.51,196.03,12960400,196.03
+2005-02-04,206.47,207.75,202.60,204.36,14819300,204.36
+2005-02-03,205.99,213.37,205.81,210.86,12988100,210.86
+2005-02-02,215.55,216.80,203.66,205.96,32799300,205.96
+2005-02-01,194.38,196.66,190.63,191.90,18839000,191.90
+2005-01-31,193.69,196.36,191.72,195.62,9596700,195.62
+2005-01-28,190.02,194.70,186.34,190.34,12208200,190.34
+2005-01-27,188.76,188.86,185.20,188.08,6627400,188.08
+2005-01-26,179.27,189.41,179.15,189.24,12307900,189.24
+2005-01-25,181.94,182.24,176.29,177.12,10659200,177.12
+2005-01-24,188.69,189.33,180.32,180.72,14022700,180.72
+2005-01-21,194.54,195.36,188.12,188.28,9258400,188.28
+2005-01-20,192.50,196.25,192.00,193.92,9001600,193.92
+2005-01-19,204.65,205.30,196.71,197.30,11257700,197.30
+2005-01-18,200.97,205.02,198.66,203.90,13172600,203.90
+2005-01-14,196.00,200.01,194.13,199.97,9640300,199.97
+2005-01-13,195.38,197.39,194.05,195.33,6849400,195.33
+2005-01-12,194.33,195.93,190.50,195.38,8177800,195.38
+2005-01-11,195.62,197.71,193.18,193.54,6958700,193.54
+2005-01-10,194.50,198.10,191.83,195.06,7539600,195.06
+2005-01-07,190.64,194.25,188.78,193.85,9662900,193.85
+2005-01-06,195.08,195.90,187.72,188.55,10387100,188.55
+2005-01-05,193.45,196.90,192.23,193.51,8236600,193.51
+2005-01-04,201.40,202.93,193.48,194.50,13755900,194.50
+2005-01-03,197.40,203.64,195.46,202.71,15844200,202.71
diff --git a/includes/js/dojox/charting/tests/data/msft_prices.csv b/includes/js/dojox/charting/tests/data/msft_prices.csv
new file mode 100644
index 0000000..a0c1e90
--- /dev/null
+++ b/includes/js/dojox/charting/tests/data/msft_prices.csv
@@ -0,0 +1,796 @@
+Date,Open,High,Low,Close,Volume,Adj Close
+2008-02-29,27.69,27.83,27.02,27.20,117394000,27.20
+2008-02-28,28.02,28.27,27.80,27.93,83002900,27.93
+2008-02-27,28.19,28.68,28.10,28.26,75187200,28.26
+2008-02-26,27.74,28.86,27.67,28.38,108923500,28.38
+2008-02-25,27.65,28.24,27.48,27.84,109945200,27.84
+2008-02-22,28.24,28.39,27.20,27.68,125705400,27.68
+2008-02-21,28.62,28.96,27.96,28.10,98776500,28.10
+2008-02-20,28.15,28.26,27.92,28.22,92830000,28.22
+2008-02-19,28.80,28.84,28.07,28.17,68261200,28.17
+2008-02-15,28.31,28.64,28.25,28.42,68166100,28.31
+2008-02-14,28.88,29.04,28.46,28.50,68191600,28.39
+2008-02-13,28.62,29.05,28.53,28.96,88986200,28.85
+2008-02-12,28.43,28.62,28.11,28.34,84365900,28.23
+2008-02-11,28.52,28.61,27.91,28.21,156814100,28.10
+2008-02-08,28.29,29.08,28.24,28.56,124872000,28.45
+2008-02-07,28.34,28.78,27.90,28.12,164964900,28.01
+2008-02-06,29.28,29.35,28.29,28.52,138315600,28.41
+2008-02-05,29.91,29.94,28.89,29.07,137534100,28.96
+2008-02-04,30.49,30.72,30.11,30.19,119998600,30.07
+2008-02-01,31.06,33.25,30.25,30.45,291138900,30.33
+2008-01-31,31.91,32.74,31.72,32.60,103642200,32.47
+2008-01-30,32.56,32.80,32.05,32.20,106432600,32.08
+2008-01-29,32.85,32.89,32.35,32.60,68023000,32.47
+2008-01-28,33.02,33.10,32.42,32.72,81019000,32.59
+2008-01-25,34.90,35.00,32.87,32.94,196992300,32.81
+2008-01-24,32.35,33.36,32.12,33.25,155640400,33.12
+2008-01-23,31.48,32.05,31.04,31.93,137597400,31.81
+2008-01-22,31.54,32.53,31.50,31.96,108521400,31.84
+2008-01-18,33.16,34.00,32.97,33.01,117062000,32.88
+2008-01-17,33.54,33.80,32.97,33.11,94247800,32.98
+2008-01-16,33.42,33.65,32.51,33.23,120778500,33.10
+2008-01-15,34.03,34.38,34.00,34.00,61606200,33.87
+2008-01-14,34.46,34.57,34.08,34.39,52792200,34.26
+2008-01-11,34.14,34.24,33.72,33.91,55187900,33.78
+2008-01-10,34.35,34.50,33.78,34.33,72446000,34.20
+2008-01-09,33.36,34.54,33.35,34.44,74305500,34.31
+2008-01-08,34.71,34.71,33.40,33.45,79148300,33.32
+2008-01-07,34.55,34.80,34.25,34.61,80164300,34.48
+2008-01-04,35.19,35.20,34.09,34.38,72090800,34.25
+2008-01-03,35.22,35.65,34.86,35.37,49599600,35.23
+2008-01-02,35.79,35.96,35.00,35.22,63004200,35.08
+2007-12-31,35.90,35.99,35.52,35.60,35229700,35.46
+2007-12-28,36.10,36.23,35.67,36.12,33447200,35.98
+2007-12-27,36.35,36.55,35.94,35.97,33311100,35.83
+2007-12-26,36.41,36.64,36.26,36.61,30252400,36.47
+2007-12-24,36.13,36.72,36.05,36.58,29622600,36.44
+2007-12-21,35.90,36.06,35.75,36.06,83240500,35.92
+2007-12-20,35.29,35.79,35.08,35.52,59345000,35.38
+2007-12-19,34.69,35.14,34.38,34.79,58469100,34.66
+2007-12-18,34.64,35.00,34.21,34.74,52791800,34.61
+2007-12-17,35.03,35.13,34.36,34.39,58121200,34.26
+2007-12-14,35.05,35.84,35.01,35.31,71126200,35.17
+2007-12-13,34.48,35.45,34.28,35.22,73913200,35.08
+2007-12-12,34.61,35.09,33.93,34.47,63345400,34.34
+2007-12-11,34.73,34.99,33.93,34.10,55070700,33.97
+2007-12-10,34.64,34.95,34.47,34.76,36083500,34.63
+2007-12-07,34.61,34.70,34.22,34.53,40771000,34.40
+2007-12-06,34.26,34.61,33.87,34.55,49209700,34.42
+2007-12-05,33.14,34.52,33.03,34.15,84894700,34.02
+2007-12-04,32.74,33.24,32.63,32.77,54801500,32.64
+2007-12-03,33.50,33.64,32.68,32.92,61770600,32.79
+2007-11-30,33.92,34.12,33.19,33.60,71027800,33.47
+2007-11-29,33.58,33.93,33.31,33.59,53633600,33.46
+2007-11-28,33.38,33.89,32.90,33.70,88585000,33.57
+2007-11-27,33.27,33.60,32.68,33.06,84178400,32.93
+2007-11-26,34.09,34.37,32.93,32.97,80335000,32.84
+2007-11-23,34.36,34.44,33.71,34.11,33467200,33.98
+2007-11-21,34.40,34.73,34.18,34.23,89518700,34.10
+2007-11-20,34.23,34.97,34.10,34.58,100009400,34.45
+2007-11-19,33.96,34.24,33.87,33.96,63000300,33.83
+2007-11-16,33.86,34.26,33.71,34.09,71113800,33.96
+2007-11-15,33.76,34.10,33.55,33.76,63111200,33.63
+2007-11-14,34.62,34.75,33.75,33.93,83840100,33.80
+2007-11-13,33.54,34.67,33.38,34.46,104261100,34.33
+2007-11-12,33.32,33.71,33.02,33.38,84719000,33.14
+2007-11-09,34.18,34.54,33.65,33.73,125111400,33.49
+2007-11-08,35.60,35.90,34.40,34.74,133742400,34.49
+2007-11-07,36.04,36.16,35.45,35.52,74873600,35.27
+2007-11-06,36.59,36.66,35.87,36.41,100966700,36.15
+2007-11-05,36.76,37.10,36.63,36.73,75485400,36.47
+2007-11-02,37.22,37.50,36.42,37.06,96389800,36.79
+2007-11-01,36.53,37.49,36.36,37.06,152078800,36.79
+2007-10-31,35.52,37.00,35.51,36.81,185635800,36.55
+2007-10-30,34.37,35.59,34.35,35.57,107297300,35.32
+2007-10-29,34.85,35.29,34.45,34.57,114655600,34.32
+2007-10-26,36.01,36.03,34.56,35.03,287270900,34.78
+2007-10-25,31.57,32.22,31.49,31.99,169588700,31.76
+2007-10-24,30.85,31.30,30.50,31.25,77979200,31.03
+2007-10-23,30.71,31.12,30.71,30.90,49956200,30.68
+2007-10-22,30.12,30.70,30.12,30.51,58785100,30.29
+2007-10-19,31.09,31.09,30.11,30.17,75200200,29.95
+2007-10-18,31.22,31.23,30.63,31.16,49208600,30.94
+2007-10-17,30.75,31.23,30.65,31.08,86092400,30.86
+2007-10-16,30.24,30.58,30.23,30.32,56286200,30.10
+2007-10-15,30.10,30.33,30.00,30.04,47150500,29.83
+2007-10-12,30.03,30.40,29.95,30.17,31121100,29.95
+2007-10-11,30.30,30.63,29.79,29.91,50788400,29.70
+2007-10-10,30.04,30.37,30.03,30.23,32251500,30.01
+2007-10-09,30.03,30.39,30.00,30.10,63603100,29.88
+2007-10-08,29.66,29.85,29.60,29.84,30265400,29.63
+2007-10-05,29.89,29.99,29.73,29.84,45012300,29.63
+2007-10-04,29.56,29.77,29.44,29.71,37868000,29.50
+2007-10-03,29.71,29.85,29.29,29.45,37633900,29.24
+2007-10-02,29.70,29.85,29.57,29.70,33700900,29.49
+2007-10-01,29.46,29.79,29.41,29.77,43875100,29.56
+2007-09-28,29.49,29.69,29.23,29.46,45819100,29.25
+2007-09-27,29.70,29.72,29.44,29.49,43407100,29.28
+2007-09-26,29.68,29.85,29.48,29.50,60337000,29.29
+2007-09-25,29.14,29.56,29.11,29.56,75621000,29.35
+2007-09-24,28.81,29.61,28.80,29.08,104459800,28.87
+2007-09-21,28.69,28.81,28.44,28.65,135636100,28.45
+2007-09-20,28.48,28.58,28.34,28.42,67168900,28.22
+2007-09-19,28.87,28.91,28.30,28.67,94242200,28.46
+2007-09-18,28.70,28.97,28.27,28.93,77462400,28.72
+2007-09-17,28.79,28.88,28.62,28.73,39536500,28.52
+2007-09-14,28.98,29.11,28.88,29.04,33496600,28.83
+2007-09-13,29.12,29.26,28.96,29.16,35288600,28.95
+2007-09-12,28.81,29.17,28.80,28.93,42364700,28.72
+2007-09-11,28.63,28.95,28.58,28.93,34380800,28.72
+2007-09-10,28.67,28.75,28.41,28.48,37247600,28.28
+2007-09-07,28.62,28.83,28.32,28.44,52160900,28.24
+2007-09-06,28.56,29.01,28.55,28.91,45430800,28.70
+2007-09-05,28.65,28.73,28.42,28.48,47669800,28.28
+2007-09-04,28.50,29.10,28.48,28.81,45689600,28.60
+2007-08-31,28.70,28.92,28.36,28.73,42511900,28.52
+2007-08-30,28.42,28.93,28.32,28.45,33690700,28.25
+2007-08-29,28.13,28.61,27.82,28.59,45753700,28.39
+2007-08-28,28.30,28.49,27.91,27.93,43924400,27.73
+2007-08-27,28.61,28.77,28.40,28.49,32789500,28.29
+2007-08-24,28.21,28.84,28.07,28.81,45158900,28.60
+2007-08-23,28.28,28.33,28.10,28.30,33886600,28.10
+2007-08-22,28.27,28.32,28.01,28.22,44763500,28.02
+2007-08-21,28.10,28.32,27.87,28.07,50786200,27.87
+2007-08-20,28.18,28.49,28.08,28.26,49952000,28.06
+2007-08-17,28.09,28.25,27.82,28.25,76747700,28.05
+2007-08-16,27.88,28.35,27.51,27.81,81447400,27.61
+2007-08-15,28.24,28.99,28.05,28.10,48117700,27.90
+2007-08-14,28.77,28.89,28.20,28.27,42944100,28.07
+2007-08-13,28.94,28.99,28.44,28.63,55492300,28.33
+2007-08-10,28.90,29.05,28.26,28.71,76576200,28.41
+2007-08-09,29.64,30.10,28.92,29.30,72964500,28.99
+2007-08-08,29.72,30.01,29.21,30.00,52898600,29.68
+2007-08-07,29.33,29.79,29.05,29.55,49163000,29.24
+2007-08-06,29.05,29.54,28.75,29.54,59530500,29.23
+2007-08-03,29.45,29.78,28.90,28.96,61535500,28.65
+2007-08-02,29.19,29.79,29.02,29.52,47938300,29.21
+2007-08-01,28.95,29.55,28.82,29.30,80006300,28.99
+2007-07-31,29.71,29.72,28.98,28.99,66554000,28.68
+2007-07-30,29.41,29.49,28.95,29.40,67499600,29.09
+2007-07-27,29.93,30.00,29.36,29.39,69214600,29.08
+2007-07-26,30.24,30.53,29.51,29.98,87025300,29.66
+2007-07-25,30.99,31.30,30.37,30.71,54950100,30.38
+2007-07-24,31.01,31.48,30.71,30.80,59729300,30.47
+2007-07-23,31.36,31.52,31.12,31.19,48910600,30.86
+2007-07-20,31.15,31.20,30.79,31.16,98292600,30.83
+2007-07-19,31.05,31.84,30.93,31.51,121159300,31.18
+2007-07-18,30.51,30.97,30.50,30.92,64414400,30.59
+2007-07-17,30.02,30.88,30.01,30.78,77539600,30.45
+2007-07-16,29.76,30.24,29.72,30.03,48023200,29.71
+2007-07-13,29.94,30.02,29.66,29.82,42173000,29.50
+2007-07-12,29.56,30.11,29.44,30.07,54302400,29.75
+2007-07-11,29.24,29.65,29.21,29.49,48017000,29.18
+2007-07-10,29.70,29.99,29.18,29.33,66013500,29.02
+2007-07-09,29.86,29.95,29.81,29.87,33831400,29.55
+2007-07-06,29.91,30.04,29.66,29.97,57541000,29.65
+2007-07-05,30.05,30.22,29.83,29.99,47838500,29.67
+2007-07-03,29.79,30.22,29.78,30.02,35202600,29.70
+2007-07-02,29.67,29.80,29.49,29.74,47316000,29.42
+2007-06-29,29.87,29.93,29.04,29.47,71193900,29.16
+2007-06-28,29.86,29.97,29.68,29.83,46055200,29.51
+2007-06-27,29.36,29.95,29.36,29.87,53468600,29.55
+2007-06-26,29.55,29.80,29.50,29.52,48340300,29.21
+2007-06-25,29.47,29.77,29.38,29.49,53905800,29.18
+2007-06-22,30.00,30.10,29.45,29.49,86219900,29.18
+2007-06-21,29.98,30.30,29.91,30.22,56564800,29.90
+2007-06-20,30.44,30.51,29.96,30.01,46861600,29.69
+2007-06-19,30.48,30.66,30.38,30.46,46802600,30.14
+2007-06-18,30.69,30.72,30.42,30.51,45412600,30.19
+2007-06-15,30.86,30.88,30.43,30.49,100933000,30.17
+2007-06-14,30.35,30.71,30.30,30.52,59065700,30.20
+2007-06-13,29.97,30.41,29.85,30.39,64435600,30.07
+2007-06-12,29.96,30.24,29.77,29.85,56981800,29.53
+2007-06-11,29.94,30.25,29.93,30.02,48467400,29.70
+2007-06-08,29.58,30.06,29.41,30.05,61346200,29.73
+2007-06-07,30.02,30.29,29.59,29.62,71971400,29.31
+2007-06-06,30.37,30.53,30.25,30.29,38217500,29.97
+2007-06-05,30.62,30.63,30.33,30.58,44265000,30.26
+2007-06-04,30.42,30.76,30.40,30.72,41434500,30.39
+2007-06-01,30.79,30.90,30.55,30.59,39469400,30.27
+2007-05-31,31.12,31.16,30.61,30.69,85290500,30.36
+2007-05-30,30.55,31.13,30.51,31.11,57376800,30.78
+2007-05-29,30.49,30.83,30.39,30.79,42373100,30.46
+2007-05-25,30.28,30.66,30.18,30.48,47726500,30.16
+2007-05-24,30.54,30.80,29.96,30.17,64046400,29.85
+2007-05-23,30.84,30.84,30.57,30.58,46322500,30.26
+2007-05-22,30.90,30.93,30.66,30.69,39999500,30.36
+2007-05-21,30.73,31.16,30.73,31.05,41836400,30.72
+2007-05-18,30.97,30.99,30.58,30.83,58453000,30.50
+2007-05-17,31.03,31.14,30.96,30.98,41045600,30.65
+2007-05-16,31.00,31.09,30.81,31.07,45833600,30.74
+2007-05-15,30.90,31.09,30.84,30.90,75013900,30.57
+2007-05-14,30.84,30.99,30.81,30.97,70188500,30.54
+2007-05-11,30.57,30.98,30.55,30.89,43425300,30.46
+2007-05-10,30.68,30.93,30.53,30.58,55398600,30.16
+2007-05-09,30.70,30.93,30.57,30.78,51735000,30.35
+2007-05-08,30.68,30.94,30.58,30.75,60551700,30.33
+2007-05-07,30.52,30.76,30.48,30.71,59889100,30.29
+2007-05-04,30.68,30.70,30.29,30.56,104385900,30.14
+2007-05-03,30.60,31.00,30.53,30.97,82036800,30.54
+2007-05-02,30.39,30.69,30.30,30.61,80686700,30.19
+2007-05-01,29.94,30.42,29.90,30.40,73539300,29.98
+2007-04-30,30.13,30.37,29.94,29.94,67788800,29.53
+2007-04-27,30.17,30.74,30.00,30.12,128298800,29.70
+2007-04-26,29.09,29.35,28.91,29.10,68760300,28.70
+2007-04-25,28.86,29.00,28.69,28.99,39475000,28.59
+2007-04-24,28.79,28.96,28.59,28.79,34236700,28.39
+2007-04-23,28.96,28.99,28.67,28.78,41739100,28.38
+2007-04-20,28.98,29.10,28.70,29.02,60311500,28.62
+2007-04-19,28.34,28.89,28.26,28.69,43648800,28.29
+2007-04-18,28.61,28.67,28.36,28.60,41778400,28.20
+2007-04-17,28.63,28.89,28.56,28.85,33170200,28.45
+2007-04-16,28.60,28.75,28.21,28.73,30740100,28.33
+2007-04-13,28.43,28.70,28.10,28.61,36002900,28.21
+2007-04-12,28.06,28.62,28.04,28.54,43762100,28.15
+2007-04-11,28.30,28.57,27.99,28.11,44050200,27.72
+2007-04-10,28.50,28.64,28.22,28.40,38643100,28.01
+2007-04-09,28.58,28.72,28.39,28.57,31384600,28.18
+2007-04-05,28.32,28.65,28.30,28.55,30131200,28.16
+2007-04-04,28.01,28.78,27.90,28.50,63244200,28.11
+2007-04-03,27.86,28.06,27.75,27.87,39821300,27.48
+2007-04-02,27.89,27.93,27.56,27.74,41977600,27.36
+2007-03-30,27.75,27.95,27.50,27.87,47061000,27.48
+2007-03-29,27.84,27.85,27.49,27.75,42629900,27.37
+2007-03-28,27.58,28.00,27.40,27.64,46947000,27.26
+2007-03-27,28.04,28.16,27.65,27.72,58979800,27.34
+2007-03-26,27.94,28.22,27.70,28.22,47491500,27.83
+2007-03-23,28.22,28.27,27.80,28.02,50519800,27.63
+2007-03-22,28.52,28.55,28.01,28.27,47934900,27.88
+2007-03-21,27.90,28.52,27.56,28.52,72808200,28.13
+2007-03-20,27.93,28.16,27.76,27.84,47902400,27.46
+2007-03-19,27.34,27.83,27.20,27.83,49412000,27.45
+2007-03-16,27.35,27.48,27.20,27.33,65055300,26.95
+2007-03-15,27.32,27.47,27.20,27.28,51757100,26.90
+2007-03-14,26.82,27.40,26.73,27.40,75730300,27.02
+2007-03-13,27.25,27.40,26.71,26.72,75169500,26.35
+2007-03-12,27.18,27.48,27.13,27.44,36516400,27.06
+2007-03-09,27.42,27.48,27.03,27.29,80125000,26.91
+2007-03-08,27.72,27.85,26.60,27.32,72175200,26.94
+2007-03-07,27.76,27.90,27.55,27.61,52044700,27.23
+2007-03-06,27.80,27.94,27.65,27.83,49361800,27.45
+2007-03-05,27.49,27.91,27.41,27.55,56454300,27.17
+2007-03-02,28.02,28.16,27.76,27.76,63254700,27.38
+2007-03-01,27.82,28.33,27.73,28.09,80175700,27.70
+2007-02-28,27.95,28.25,27.92,28.17,86333300,27.78
+2007-02-27,28.71,28.97,27.79,27.87,87143300,27.48
+2007-02-26,28.96,29.09,28.82,29.07,63481900,28.67
+2007-02-23,29.22,29.28,28.89,28.90,63787100,28.50
+2007-02-22,29.31,29.54,29.16,29.39,57754400,28.98
+2007-02-21,28.75,29.39,28.74,29.35,68604900,28.94
+2007-02-20,28.63,28.86,28.47,28.83,53978200,28.43
+2007-02-16,28.91,28.94,28.65,28.74,109340300,28.34
+2007-02-15,29.58,29.65,29.22,29.46,63858100,29.05
+2007-02-14,29.17,29.69,29.15,29.40,55588600,28.99
+2007-02-13,29.04,29.20,28.96,29.01,50348100,28.61
+2007-02-12,28.89,29.09,28.83,28.94,52774400,28.44
+2007-02-09,29.35,29.40,28.93,28.98,69823100,28.48
+2007-02-08,29.24,29.80,29.20,29.26,48749000,28.76
+2007-02-07,29.64,29.70,29.25,29.37,65145500,28.86
+2007-02-06,29.59,29.75,29.22,29.51,79281100,29.00
+2007-02-05,29.97,30.02,29.41,29.61,99102100,29.10
+2007-02-02,30.82,30.84,30.13,30.19,60401700,29.67
+2007-02-01,30.84,30.94,30.37,30.56,55355800,30.03
+2007-01-31,30.41,31.10,30.35,30.86,73968400,30.33
+2007-01-30,30.57,30.64,30.14,30.48,61900400,29.96
+2007-01-29,30.65,30.78,30.34,30.53,57605900,30.00
+2007-01-26,31.22,31.23,30.60,30.60,96103700,30.07
+2007-01-25,31.08,31.48,30.45,30.45,97378700,29.93
+2007-01-24,30.78,31.30,30.65,31.09,58527800,30.55
+2007-01-23,30.63,30.96,30.52,30.74,49171200,30.21
+2007-01-22,31.06,31.12,30.51,30.72,56143900,30.19
+2007-01-19,30.73,31.11,30.69,31.11,75826900,30.57
+2007-01-18,31.15,31.37,30.80,31.00,56364300,30.47
+2007-01-17,31.26,31.44,31.01,31.10,58519600,30.56
+2007-01-16,31.26,31.45,31.03,31.16,62379600,30.62
+2007-01-12,30.65,31.39,30.64,31.21,103972500,30.67
+2007-01-11,29.76,30.75,29.65,30.70,99464300,30.17
+2007-01-10,29.80,29.89,29.43,29.66,55017400,29.15
+2007-01-09,30.00,30.18,29.73,29.96,44636600,29.44
+2007-01-08,29.65,30.10,29.53,29.93,50220200,29.41
+2007-01-05,29.63,29.75,29.45,29.64,44607200,29.13
+2007-01-04,29.70,29.97,29.44,29.81,45774500,29.30
+2007-01-03,29.91,30.25,29.40,29.86,76935100,29.35
+2006-12-29,29.86,30.15,29.83,29.86,41739800,29.35
+2006-12-28,29.86,30.03,29.81,29.98,26690600,29.46
+2006-12-27,29.99,30.13,29.91,30.02,31248400,29.50
+2006-12-26,29.53,30.00,29.40,29.99,37098300,29.47
+2006-12-22,29.83,29.86,29.62,29.64,37971700,29.13
+2006-12-21,30.13,30.14,29.89,29.98,32270500,29.46
+2006-12-20,29.99,30.24,29.97,30.09,31202100,29.57
+2006-12-19,29.71,30.17,29.53,29.99,53822100,29.47
+2006-12-18,30.19,30.26,29.78,29.89,56986800,29.38
+2006-12-15,30.14,30.23,30.03,30.19,102783700,29.67
+2006-12-14,29.54,30.08,29.52,30.07,85866500,29.55
+2006-12-13,29.60,29.60,29.32,29.55,46002500,29.04
+2006-12-12,29.56,29.63,29.22,29.43,68529400,28.92
+2006-12-11,29.19,29.75,29.11,29.54,107712000,29.03
+2006-12-08,28.82,29.40,28.80,29.40,108854900,28.89
+2006-12-07,28.96,29.07,28.81,28.85,46831100,28.35
+2006-12-06,29.10,29.13,28.87,28.99,48564100,28.49
+2006-12-05,29.36,29.40,29.03,29.13,45606000,28.63
+2006-12-04,29.23,29.52,29.17,29.33,55123400,28.82
+2006-12-01,29.23,29.30,28.90,29.12,72257000,28.62
+2006-11-30,29.42,29.57,29.33,29.36,53297400,28.85
+2006-11-29,29.44,29.78,29.43,29.57,58775100,29.06
+2006-11-28,29.34,29.42,29.13,29.39,52602300,28.88
+2006-11-27,29.69,29.74,29.33,29.48,72722100,28.97
+2006-11-24,29.66,29.84,29.64,29.76,20456700,29.25
+2006-11-22,29.97,30.00,29.82,29.92,43907200,29.40
+2006-11-21,29.91,30.00,29.79,29.92,66446600,29.40
+2006-11-20,29.52,30.00,29.50,29.89,85703800,29.38
+2006-11-17,29.31,29.54,29.28,29.40,49356700,28.89
+2006-11-16,29.14,29.64,29.13,29.47,64328500,28.96
+2006-11-15,29.13,29.36,29.11,29.12,63943200,28.62
+2006-11-14,29.28,29.42,29.07,29.23,63012500,28.73
+2006-11-13,29.19,29.46,29.16,29.35,47271800,28.75
+2006-11-10,29.17,29.29,29.15,29.24,37855100,28.64
+2006-11-09,29.11,29.40,29.00,29.26,89407500,28.66
+2006-11-08,28.78,29.23,28.66,28.98,77403300,28.38
+2006-11-07,28.86,29.07,28.80,28.95,56511200,28.35
+2006-11-06,28.77,29.05,28.76,28.84,60446200,28.25
+2006-11-03,28.85,28.93,28.61,28.73,41124500,28.14
+2006-11-02,28.71,28.86,28.58,28.77,58674400,28.18
+2006-11-01,28.78,28.99,28.70,28.81,75895900,28.22
+2006-10-31,28.66,28.85,28.56,28.71,61861700,28.12
+2006-10-30,28.35,28.84,28.32,28.53,47296800,27.94
+2006-10-27,28.49,28.79,28.25,28.34,89060100,27.76
+2006-10-26,28.33,28.41,28.04,28.35,69964200,27.77
+2006-10-25,28.28,28.46,28.14,28.31,40717100,27.73
+2006-10-24,28.43,28.43,28.13,28.28,61409600,27.70
+2006-10-23,28.30,28.69,28.18,28.45,48525000,27.86
+2006-10-20,28.48,28.49,28.17,28.43,48887800,27.85
+2006-10-19,28.35,28.45,28.12,28.29,44730800,27.71
+2006-10-18,28.50,28.70,28.26,28.52,40630800,27.93
+2006-10-17,28.24,28.51,28.17,28.44,40122600,27.85
+2006-10-16,28.48,28.60,28.33,28.45,49744800,27.86
+2006-10-13,28.34,28.69,28.31,28.37,129751900,27.79
+2006-10-12,27.58,28.29,27.54,28.22,120174900,27.64
+2006-10-11,27.46,27.67,27.42,27.54,37219600,26.97
+2006-10-10,27.69,27.75,27.44,27.69,34598500,27.12
+2006-10-09,27.80,27.93,27.62,27.72,33366300,27.15
+2006-10-06,27.76,28.00,27.65,27.87,36452200,27.30
+2006-10-05,27.92,28.11,27.78,27.92,81967200,27.35
+2006-10-04,27.39,27.96,27.37,27.94,82191200,27.37
+2006-10-03,27.37,27.48,27.21,27.37,39386200,26.81
+2006-10-02,27.32,27.49,27.15,27.36,52908100,26.80
+2006-09-29,27.35,27.42,27.21,27.35,34283500,26.79
+2006-09-28,27.47,27.52,27.26,27.40,44179700,26.84
+2006-09-27,27.18,27.47,27.12,27.44,66233900,26.88
+2006-09-26,26.91,27.32,26.88,27.20,54766500,26.64
+2006-09-25,26.81,27.19,26.79,26.95,67903900,26.40
+2006-09-22,26.83,26.85,26.48,26.66,47712500,26.11
+2006-09-21,27.24,27.25,26.85,26.90,58495100,26.35
+2006-09-20,27.01,27.23,26.99,27.18,71676400,26.62
+2006-09-19,26.74,26.94,26.72,26.86,43039100,26.31
+2006-09-18,26.74,27.04,26.67,26.79,49135000,26.24
+2006-09-15,26.58,26.94,26.49,26.85,126057700,26.30
+2006-09-14,25.99,26.50,25.98,26.33,74324500,25.79
+2006-09-13,25.82,26.10,25.82,25.98,37706700,25.45
+2006-09-12,25.90,25.98,25.72,25.93,52248800,25.40
+2006-09-11,25.43,25.95,25.42,25.91,55608200,25.38
+2006-09-08,25.53,25.79,25.46,25.60,36866800,25.07
+2006-09-07,25.48,25.70,25.39,25.43,51266900,24.91
+2006-09-06,25.51,25.72,25.51,25.61,50160400,25.08
+2006-09-05,25.69,25.96,25.56,25.61,44222400,25.08
+2006-09-01,25.89,25.97,25.64,25.84,31594600,25.31
+2006-08-31,25.87,25.98,25.68,25.70,26380500,25.17
+2006-08-30,25.85,25.89,25.64,25.80,30283100,25.27
+2006-08-29,25.92,25.98,25.63,25.84,42711200,25.31
+2006-08-28,25.84,26.00,25.69,25.95,34190900,25.42
+2006-08-25,25.71,26.00,25.69,25.85,33115900,25.32
+2006-08-24,25.82,25.86,25.50,25.74,35933300,25.21
+2006-08-23,25.65,25.95,25.52,25.67,44648500,25.14
+2006-08-22,26.01,26.25,25.62,25.62,89312400,25.09
+2006-08-21,25.66,26.13,25.56,26.12,88398300,25.58
+2006-08-18,25.05,25.80,24.98,25.79,128414800,25.26
+2006-08-17,24.70,24.75,24.61,24.70,45674800,24.19
+2006-08-16,24.61,24.73,24.47,24.70,52373600,24.19
+2006-08-15,24.55,24.65,24.44,24.62,48994500,24.11
+2006-08-14,24.52,24.60,24.35,24.53,47831900,23.94
+2006-08-11,24.43,24.45,24.20,24.43,30255500,23.84
+2006-08-10,24.37,24.60,24.34,24.46,31753400,23.87
+2006-08-09,24.49,24.64,24.34,24.44,44405700,23.85
+2006-08-08,24.39,24.52,24.20,24.34,58171300,23.75
+2006-08-07,24.28,24.48,24.19,24.22,36862400,23.63
+2006-08-04,24.40,24.49,24.15,24.29,45690400,23.70
+2006-08-03,24.19,24.48,24.15,24.21,43155300,23.62
+2006-08-02,24.12,24.40,24.03,24.30,46462000,23.71
+2006-08-01,24.02,24.20,23.85,23.99,49168700,23.41
+2006-07-31,24.07,24.42,24.01,24.06,40254400,23.48
+2006-07-28,24.08,24.28,24.06,24.25,51705800,23.66
+2006-07-27,24.58,24.60,23.77,23.87,85386800,23.29
+2006-07-26,24.12,24.53,24.10,24.37,54942100,23.78
+2006-07-25,24.00,24.29,23.90,24.22,60075800,23.63
+2006-07-24,24.01,24.11,23.79,24.00,59586700,23.42
+2006-07-21,24.08,24.15,23.00,23.87,175483800,23.29
+2006-07-20,23.44,23.45,22.78,22.85,76605200,22.30
+2006-07-19,22.82,23.46,22.72,23.40,82188200,22.83
+2006-07-18,22.59,22.76,22.48,22.74,65047300,22.19
+2006-07-17,22.29,22.61,22.26,22.48,37053500,21.94
+2006-07-14,22.28,22.55,22.23,22.29,67499400,21.75
+2006-07-13,22.37,22.61,22.25,22.26,73099500,21.72
+2006-07-12,22.79,22.88,22.62,22.64,77379300,22.09
+2006-07-11,23.37,23.37,22.74,23.10,88676300,22.54
+2006-07-10,23.43,23.66,23.38,23.50,50565100,22.93
+2006-07-07,23.39,23.55,23.30,23.30,63168800,22.74
+2006-07-06,23.45,23.61,23.42,23.48,44775200,22.91
+2006-07-05,23.48,23.52,23.30,23.35,53093500,22.79
+2006-07-03,23.53,23.72,23.45,23.70,25711400,23.13
+2006-06-30,23.54,23.65,23.30,23.30,73048800,22.74
+2006-06-29,23.32,23.63,23.22,23.47,121395500,22.90
+2006-06-28,22.96,23.25,22.91,23.16,71906500,22.60
+2006-06-27,22.89,23.16,22.84,22.86,84759100,22.31
+2006-06-26,22.65,22.89,22.63,22.82,53644100,22.27
+2006-06-23,22.85,22.87,22.50,22.50,60532600,21.96
+2006-06-22,23.06,23.17,22.78,22.88,76590600,22.33
+2006-06-21,22.61,23.15,22.53,23.08,91660300,22.52
+2006-06-20,22.54,22.76,22.50,22.56,90598500,22.01
+2006-06-19,22.14,22.60,22.12,22.55,129640900,22.01
+2006-06-16,21.97,22.28,21.79,22.10,147506500,21.57
+2006-06-15,22.01,22.13,21.80,22.07,121577300,21.54
+2006-06-14,21.59,21.94,21.55,21.88,86081500,21.35
+2006-06-13,21.73,22.03,21.46,21.51,113175300,20.99
+2006-06-12,21.96,22.10,21.70,21.71,74309700,21.19
+2006-06-09,22.15,22.19,21.89,21.92,52573800,21.39
+2006-06-08,22.03,22.21,21.97,22.11,104126900,21.58
+2006-06-07,22.15,22.39,22.01,22.04,73827500,21.51
+2006-06-06,22.55,22.56,21.98,22.13,126601300,21.60
+2006-06-05,22.72,22.73,22.49,22.50,63914100,21.96
+2006-06-02,22.87,22.99,22.67,22.76,73935600,22.21
+2006-06-01,22.74,22.84,22.62,22.82,80230800,22.27
+2006-05-31,23.26,23.35,22.65,22.65,120202000,22.10
+2006-05-30,23.55,23.76,23.14,23.15,52497500,22.59
+2006-05-26,23.77,23.88,23.56,23.72,46861600,23.15
+2006-05-25,23.57,23.92,23.54,23.74,83052700,23.17
+2006-05-24,22.99,23.54,22.98,23.50,107356700,22.93
+2006-05-23,23.11,23.38,22.77,22.79,79986300,22.24
+2006-05-22,22.48,23.02,22.45,22.88,87322300,22.33
+2006-05-19,22.79,22.90,22.52,22.56,100071200,22.01
+2006-05-18,22.84,23.14,22.76,22.83,95476400,22.28
+2006-05-17,22.89,23.08,22.73,22.73,98598300,22.18
+2006-05-16,23.16,24.00,22.91,23.01,82095100,22.45
+2006-05-15,23.10,23.23,23.03,23.15,67314800,22.59
+2006-05-12,23.14,23.37,23.05,23.17,83115900,22.52
+2006-05-11,23.71,23.79,23.15,23.22,92916700,22.57
+2006-05-10,23.67,23.79,23.59,23.77,76563300,23.11
+2006-05-09,23.75,24.00,23.49,23.62,75345900,22.96
+2006-05-08,23.85,25.00,23.51,23.73,80693500,23.07
+2006-05-05,23.66,23.95,23.52,23.80,131604300,23.13
+2006-05-04,23.35,23.67,23.14,23.44,171257400,22.78
+2006-05-03,23.99,24.02,23.15,23.17,211527100,22.52
+2006-05-02,24.49,25.00,23.90,24.01,190533500,23.34
+2006-05-01,24.32,25.00,24.09,24.29,174800900,23.61
+2006-04-28,24.23,24.50,24.00,24.15,591052200,23.47
+2006-04-27,26.97,27.63,26.94,27.25,96509600,26.49
+2006-04-26,27.08,27.23,27.00,27.10,39190000,26.34
+2006-04-25,27.09,27.21,27.02,27.11,49222500,26.35
+2006-04-24,27.07,27.25,26.98,27.11,42318400,26.35
+2006-04-21,27.05,27.39,27.00,27.15,58528000,26.39
+2006-04-20,27.05,27.19,26.70,27.03,45648300,26.27
+2006-04-19,27.11,27.19,26.96,27.03,45111100,26.27
+2006-04-18,26.94,27.50,26.82,27.22,56272700,26.46
+2006-04-17,27.03,27.05,26.73,26.84,35796200,26.09
+2006-04-13,27.08,27.20,27.00,27.07,28160000,26.31
+2006-04-12,27.10,27.20,26.97,27.20,32183000,26.44
+2006-04-11,27.29,27.32,27.00,27.13,42953400,26.37
+2006-04-10,27.23,27.44,27.20,27.29,39432000,26.53
+2006-04-07,27.61,27.72,27.23,27.25,47249400,26.49
+2006-04-06,27.66,27.72,27.37,27.56,51885500,26.79
+2006-04-05,27.88,27.94,27.64,27.74,41539300,26.96
+2006-04-04,27.60,27.80,27.47,27.64,45470000,26.87
+2006-04-03,27.67,27.73,27.44,27.56,57605300,26.79
+2006-03-31,27.30,27.54,27.21,27.21,62190500,26.45
+2006-03-30,27.03,27.39,27.00,27.23,54612000,26.47
+2006-03-29,26.95,27.20,26.92,27.02,53150300,26.26
+2006-03-28,27.01,27.21,26.81,26.90,58520500,26.15
+2006-03-27,27.01,27.30,27.00,27.01,59908600,26.25
+2006-03-24,26.71,27.21,26.62,27.01,69157600,26.25
+2006-03-23,27.08,27.10,26.66,26.85,73682900,26.10
+2006-03-22,27.08,27.50,26.80,27.15,145696100,26.39
+2006-03-21,27.74,28.22,27.68,27.74,73199600,26.96
+2006-03-20,27.70,27.99,27.67,27.89,67094100,27.11
+2006-03-17,27.35,27.66,27.27,27.50,120615000,26.73
+2006-03-16,27.34,27.48,27.22,27.27,73793700,26.51
+2006-03-15,27.20,27.45,27.01,27.36,57152000,26.60
+2006-03-14,27.04,27.38,26.99,27.23,39821800,26.47
+2006-03-13,27.18,27.29,26.94,27.11,40342600,26.35
+2006-03-10,27.06,27.22,26.88,27.17,41297200,26.41
+2006-03-09,27.27,27.42,27.00,27.00,45360700,26.25
+2006-03-08,26.99,27.50,26.97,27.25,57547400,26.49
+2006-03-07,26.90,27.10,26.81,27.06,51613900,26.30
+2006-03-06,26.92,27.15,26.83,26.91,53054100,26.16
+2006-03-03,26.81,27.16,26.74,26.93,45218800,26.18
+2006-03-02,27.02,27.10,26.90,26.97,41850300,26.22
+2006-03-01,26.98,27.20,26.95,27.14,53061200,26.38
+2006-02-28,26.95,27.30,26.87,26.87,65036100,26.12
+2006-02-27,26.75,27.26,26.67,27.05,51301500,26.29
+2006-02-24,26.59,26.74,26.52,26.63,44753800,25.89
+2006-02-23,26.73,26.89,26.54,26.66,47359100,25.91
+2006-02-22,26.53,26.86,26.47,26.72,43043100,25.97
+2006-02-21,26.72,26.72,26.34,26.54,50216100,25.80
+2006-02-17,26.67,26.81,26.56,26.70,41513200,25.95
+2006-02-16,26.85,26.90,26.57,26.81,48868500,26.06
+2006-02-15,26.60,26.93,26.50,26.88,62808900,26.13
+2006-02-14,26.41,26.68,26.35,26.65,58432900,25.82
+2006-02-13,26.63,26.70,26.34,26.39,46707000,25.57
+2006-02-10,26.62,26.89,26.51,26.69,52127000,25.86
+2006-02-09,26.96,27.03,26.65,26.66,52861700,25.83
+2006-02-08,27.01,27.08,26.71,26.91,51795200,26.07
+2006-02-07,26.95,27.15,26.81,26.94,72159500,26.10
+2006-02-06,27.51,27.54,27.09,27.17,60170500,26.32
+2006-02-03,27.48,27.70,27.34,27.54,75022700,26.68
+2006-02-02,27.97,27.99,27.55,27.68,55073400,26.82
+2006-02-01,27.96,28.07,27.76,28.04,68448800,27.16
+2006-01-31,27.91,28.38,27.87,28.15,94841300,27.27
+2006-01-30,27.82,28.18,27.78,28.00,103999200,27.13
+2006-01-27,27.23,27.95,27.19,27.79,134520700,26.92
+2006-01-26,26.56,26.72,26.31,26.50,69509300,25.67
+2006-01-25,26.41,26.57,26.23,26.40,59072100,25.58
+2006-01-24,26.34,26.45,26.22,26.28,63040700,25.46
+2006-01-23,26.41,26.53,26.30,26.35,47925600,25.53
+2006-01-20,27.01,27.01,26.26,26.41,79165900,25.58
+2006-01-19,26.87,27.24,26.85,27.02,60367600,26.18
+2006-01-18,26.74,26.98,26.70,26.83,52376200,25.99
+2006-01-17,26.90,27.19,26.90,26.99,58566600,26.15
+2006-01-13,27.03,27.25,27.01,27.19,41418000,26.34
+2006-01-12,27.25,27.26,26.97,27.14,45994800,26.29
+2006-01-11,27.01,27.39,26.90,27.29,70120700,26.44
+2006-01-10,26.65,27.02,26.59,27.00,64921900,26.16
+2006-01-09,26.93,27.07,26.76,26.86,55625000,26.02
+2006-01-06,26.89,27.00,26.49,26.91,100963000,26.07
+2006-01-05,26.96,27.13,26.91,26.99,48245500,26.15
+2006-01-04,26.77,27.08,26.77,26.97,57975600,26.13
+2006-01-03,26.25,27.00,26.10,26.84,79973000,26.00
+2005-12-30,26.15,26.31,26.10,26.15,49044600,25.33
+2005-12-29,26.41,26.50,26.26,26.27,34495500,25.45
+2005-12-28,26.51,26.66,26.35,26.39,35444400,25.57
+2005-12-27,26.68,26.85,26.45,26.46,37819000,25.63
+2005-12-23,26.52,26.67,26.44,26.64,30689200,25.81
+2005-12-22,26.71,26.78,26.42,26.59,91276900,25.76
+2005-12-21,26.87,26.91,26.71,26.73,75800900,25.89
+2005-12-20,26.76,26.88,26.67,26.86,62960600,26.02
+2005-12-19,26.82,26.87,26.65,26.83,68680100,25.99
+2005-12-16,26.88,27.08,26.81,26.90,88542500,26.06
+2005-12-15,27.08,27.11,26.81,26.92,79018100,26.08
+2005-12-14,27.00,27.24,26.85,27.09,65076200,26.24
+2005-12-13,27.29,27.43,27.00,27.13,104285500,26.28
+2005-12-12,27.70,27.75,27.33,27.45,63757200,26.59
+2005-12-09,27.71,27.83,27.64,27.71,48467000,26.84
+2005-12-08,27.71,27.81,27.60,27.69,63931600,26.83
+2005-12-07,27.67,27.75,27.55,27.75,55583200,26.88
+2005-12-06,27.90,27.92,27.68,27.69,65980000,26.83
+2005-12-05,27.93,28.02,27.71,27.85,47517300,26.98
+2005-12-02,27.82,28.10,27.79,28.01,42319600,27.14
+2005-12-01,27.73,28.10,27.73,27.89,61006100,27.02
+2005-11-30,27.68,27.77,27.63,27.68,55904700,26.82
+2005-11-29,27.79,27.79,27.60,27.68,62220400,26.82
+2005-11-28,27.79,27.85,27.53,27.75,57517200,26.88
+2005-11-25,27.80,27.94,27.47,27.76,44082500,26.89
+2005-11-23,27.92,28.09,27.74,27.92,70541300,27.05
+2005-11-22,28.06,28.08,27.86,27.91,104253300,27.04
+2005-11-21,28.07,28.24,27.84,28.16,65794400,27.28
+2005-11-18,28.12,28.25,27.90,28.07,75431200,27.19
+2005-11-17,27.85,28.00,27.76,27.97,91351000,27.10
+2005-11-16,27.48,27.88,27.44,27.74,86277000,26.87
+2005-11-15,27.33,27.54,27.25,27.50,65081000,26.64
+2005-11-14,27.36,27.44,27.20,27.37,67152200,26.44
+2005-11-11,27.15,27.39,27.13,27.28,51945600,26.35
+2005-11-10,26.94,27.15,26.64,27.09,73314800,26.17
+2005-11-09,26.98,27.15,26.94,26.96,59562100,26.04
+2005-11-08,26.94,27.18,26.77,27.05,60091700,26.13
+2005-11-07,26.72,27.08,26.70,27.01,77104800,26.09
+2005-11-04,26.53,26.71,26.45,26.66,57464000,25.75
+2005-11-03,26.60,26.64,26.25,26.44,73421600,25.54
+2005-11-02,25.93,26.50,25.93,26.46,75067100,25.56
+2005-11-01,25.61,26.10,25.61,25.96,71370400,25.08
+2005-10-31,25.61,25.80,25.50,25.70,75122100,24.82
+2005-10-28,25.10,25.60,25.10,25.53,106559300,24.66
+2005-10-27,25.22,25.27,24.85,24.85,61566100,24.00
+2005-10-26,24.97,25.33,24.93,25.11,58178100,24.25
+2005-10-25,24.95,25.13,24.83,25.03,41310500,24.18
+2005-10-24,24.89,25.10,24.68,25.10,51868000,24.24
+2005-10-21,24.91,25.00,24.57,24.78,69431200,23.94
+2005-10-20,25.05,25.13,24.74,24.79,58830600,23.95
+2005-10-19,24.56,25.09,24.50,25.09,66574500,24.24
+2005-10-18,24.49,24.83,24.45,24.57,69328200,23.73
+2005-10-17,24.68,24.69,24.44,24.53,46924400,23.69
+2005-10-14,24.71,24.73,24.50,24.67,53846700,23.83
+2005-10-13,24.31,24.73,24.27,24.59,70192000,23.75
+2005-10-12,24.49,24.70,24.27,24.30,71294400,23.47
+2005-10-11,24.51,24.55,24.25,24.41,76567300,23.58
+2005-10-10,24.67,24.68,24.35,24.46,48880900,23.63
+2005-10-07,24.77,24.84,24.52,24.59,50768700,23.75
+2005-10-06,24.66,24.95,24.53,24.73,81724600,23.89
+2005-10-05,25.04,25.05,24.67,24.67,73684700,23.83
+2005-10-04,25.36,25.39,24.75,24.98,151666300,24.13
+2005-10-03,25.71,25.73,25.44,25.50,55341300,24.63
+2005-09-30,25.91,25.95,25.61,25.73,57644500,24.85
+2005-09-29,25.61,26.00,25.50,25.94,66807100,25.06
+2005-09-28,25.39,25.87,25.38,25.67,71019400,24.80
+2005-09-27,25.37,25.45,25.30,25.34,48797900,24.48
+2005-09-26,25.40,25.49,25.21,25.27,56203700,24.41
+2005-09-23,25.31,25.54,25.12,25.27,66396800,24.41
+2005-09-22,25.49,25.60,25.15,25.34,71314900,24.48
+2005-09-21,25.80,25.90,25.43,25.49,68281800,24.62
+2005-09-20,26.07,26.22,25.69,25.84,61043400,24.96
+2005-09-19,26.09,26.27,25.86,26.00,61832300,25.11
+2005-09-16,26.34,26.40,25.97,26.07,187384300,25.18
+2005-09-15,26.37,26.43,26.22,26.27,60357200,25.37
+2005-09-14,26.52,26.64,26.30,26.31,54969600,25.41
+2005-09-13,26.54,26.76,26.37,26.48,63422900,25.58
+2005-09-12,26.62,26.75,26.52,26.61,40550500,25.70
+2005-09-09,26.62,26.82,26.53,26.58,41515800,25.67
+2005-09-08,26.80,26.88,26.52,26.61,52552300,25.70
+2005-09-07,26.94,27.11,26.82,26.85,44656100,25.94
+2005-09-06,27.06,27.29,26.98,27.00,46089000,26.08
+2005-09-02,27.21,27.27,26.97,27.02,52047500,26.10
+2005-09-01,27.38,27.39,27.15,27.20,75974500,26.27
+2005-08-31,27.17,27.44,27.04,27.38,65210200,26.45
+2005-08-30,27.06,27.23,26.96,27.18,55163200,26.25
+2005-08-29,26.81,27.23,26.81,27.15,52307700,26.22
+2005-08-26,27.06,27.08,26.87,26.97,36774600,26.05
+2005-08-25,26.90,27.09,26.85,27.03,39306300,26.11
+2005-08-24,26.84,27.16,26.78,26.81,63645000,25.90
+2005-08-23,26.84,27.07,26.74,26.87,48296700,25.95
+2005-08-22,26.79,27.17,26.77,26.91,41691700,25.99
+2005-08-19,26.85,26.91,26.70,26.72,36043500,25.81
+2005-08-18,26.89,27.08,26.80,26.82,40861900,25.91
+2005-08-17,26.82,27.15,26.66,26.95,52413100,26.03
+2005-08-16,27.03,27.14,26.70,26.74,46894600,25.83
+2005-08-15,26.98,27.30,26.69,27.13,45976600,26.21
+2005-08-12,27.08,27.14,26.90,27.05,52006500,26.05
+2005-08-11,26.98,27.30,26.89,27.27,48646800,26.26
+2005-08-10,27.41,27.50,26.85,26.95,62818800,25.95
+2005-08-09,27.22,27.51,27.01,27.35,64761800,26.34
+2005-08-08,27.80,27.84,27.08,27.13,77207200,26.13
+2005-08-05,27.29,27.94,27.25,27.76,82212400,26.73
+2005-08-04,27.16,27.50,27.05,27.32,91461400,26.31
+2005-08-03,26.76,27.43,26.73,27.25,139422400,26.24
+2005-08-02,25.90,26.90,25.87,26.81,137510100,25.82
+2005-08-01,25.81,26.05,25.76,25.92,61346800,24.96
+2005-07-29,25.78,26.00,25.59,25.61,59524400,24.66
+2005-07-28,25.75,25.85,25.66,25.75,44738700,24.80
+2005-07-27,25.61,25.80,25.53,25.72,57977300,24.77
+2005-07-26,25.72,25.74,25.53,25.54,51476400,24.60
+2005-07-25,25.69,25.90,25.65,25.69,45174600,24.74
+2005-07-22,25.99,26.34,25.63,25.68,97558900,24.73
+2005-07-21,26.30,26.48,26.00,26.44,112932100,25.46
+2005-07-20,26.00,26.23,25.88,26.19,71424800,25.22
+2005-07-19,25.79,26.25,25.75,26.16,113290100,25.19
+2005-07-18,25.71,25.79,25.55,25.55,39668000,24.61
+2005-07-15,26.04,26.10,25.75,25.79,56472800,24.84
+2005-07-14,25.79,26.10,25.79,25.97,69506800,25.01
+2005-07-13,25.53,25.75,25.48,25.66,44749200,24.71
+2005-07-12,25.24,25.62,25.20,25.61,63384800,24.66
+2005-07-11,25.15,25.38,25.11,25.29,61525400,24.36
+2005-07-08,24.64,25.12,24.63,25.09,56104000,24.16
+2005-07-07,24.58,24.71,24.50,24.65,80082900,23.74
+2005-07-06,24.97,25.08,24.69,24.70,64214600,23.79
+2005-07-05,24.66,25.19,24.62,24.98,61883500,24.06
+2005-07-01,24.85,24.99,24.67,24.71,69718400,23.80
+2005-06-30,25.06,25.14,24.82,24.84,82018200,23.92
+2005-06-29,25.22,25.32,25.00,25.09,55859900,24.16
+2005-06-28,25.09,25.20,25.03,25.07,53058100,24.14
+2005-06-27,25.07,25.25,25.03,25.05,61636200,24.12
+2005-06-24,25.22,25.40,25.04,25.04,57970700,24.12
+2005-06-23,25.17,25.62,25.15,25.31,105159800,24.38
+2005-06-22,25.11,25.26,25.03,25.07,60492700,24.14
+2005-06-21,25.08,25.19,25.04,25.15,81084000,24.22
+2005-06-20,24.98,25.28,24.93,25.11,50538900,24.18
+2005-06-17,25.27,25.29,24.92,25.04,90821300,24.12
+2005-06-16,25.22,25.23,24.95,25.04,65918800,24.12
+2005-06-15,25.40,25.41,25.11,25.26,50764800,24.33
+2005-06-14,25.31,25.44,25.24,25.36,44243300,24.42
+2005-06-13,25.36,25.49,25.26,25.31,49104100,24.38
+2005-06-10,25.49,25.52,25.34,25.43,39459800,24.49
+2005-06-09,25.40,25.61,25.35,25.51,52767900,24.57
+2005-06-08,25.55,25.62,25.34,25.40,45369700,24.46
+2005-06-07,25.33,25.83,25.31,25.51,54511400,24.57
+2005-06-06,25.38,25.50,25.31,25.37,40756900,24.43
+2005-06-03,25.70,25.81,25.34,25.43,79659500,24.49
+2005-06-02,25.71,25.86,25.64,25.79,27212500,24.84
+2005-06-01,25.73,26.00,25.61,25.81,54621000,24.86
+2005-05-31,25.99,26.03,25.75,25.80,46131100,24.85
+2005-05-27,25.83,26.09,25.81,26.07,54978000,25.11
+2005-05-26,25.75,26.00,25.73,25.90,50579200,24.94
+2005-05-25,25.68,25.77,25.50,25.71,35749000,24.76
+2005-05-24,25.80,25.88,25.72,25.75,61287700,24.80
+2005-05-23,25.74,26.07,25.74,25.85,75421100,24.90
+2005-05-20,25.88,25.92,25.73,25.74,64444500,24.79
+2005-05-19,25.75,26.05,25.70,25.92,52120800,24.96
+2005-05-18,25.50,25.84,25.42,25.70,71182400,24.75
+2005-05-17,25.31,25.50,25.25,25.46,39983200,24.52
+2005-05-16,25.23,25.50,25.19,25.49,50577300,24.55
+2005-05-13,25.03,25.38,24.99,25.30,77204300,24.29
+2005-05-12,24.84,25.11,24.83,25.00,74540700,24.00
+2005-05-11,24.89,24.97,24.64,24.91,59463300,23.91
+2005-05-10,25.04,25.08,24.82,24.90,62235100,23.90
+2005-05-09,25.23,25.33,25.05,25.11,61872400,24.11
+2005-05-06,25.33,25.48,25.19,25.22,64322600,24.21
+2005-05-05,25.20,25.33,25.08,25.23,59362300,24.22
+2005-05-04,25.34,25.40,25.11,25.21,86864200,24.20
+2005-05-03,25.13,25.40,25.09,25.36,67867800,24.35
+2005-05-02,25.23,25.36,24.95,25.23,54376700,24.22
+2005-04-29,24.88,25.30,24.79,25.30,98641200,24.29
+2005-04-28,24.82,24.92,24.44,24.45,83623100,23.47
+2005-04-27,24.66,25.15,24.63,24.99,47732800,23.99
+2005-04-26,24.95,25.25,24.74,24.76,60464300,23.77
+2005-04-25,25.07,25.28,24.86,24.99,75457900,23.99
+2005-04-22,25.05,25.25,24.78,24.98,80087500,23.98
+2005-04-21,24.48,25.39,24.47,25.28,93562300,24.27
+2005-04-20,24.66,24.70,24.30,24.32,91923500,23.35
+2005-04-19,24.71,24.80,24.45,24.63,65956200,23.65
+2005-04-18,24.45,24.84,24.40,24.65,75766400,23.66
+2005-04-15,24.58,24.90,24.41,24.46,100251600,23.48
+2005-04-14,25.01,25.14,24.83,24.84,66754400,23.85
+2005-04-13,25.23,25.45,24.99,25.04,60929300,24.04
+2005-04-12,24.92,25.35,24.80,25.32,67517800,24.31
+2005-04-11,25.03,25.11,24.86,24.97,47791800,23.97
+2005-04-08,25.07,25.25,24.91,24.94,47956300,23.94
+2005-04-07,24.66,25.13,24.63,25.10,77451500,24.10
+2005-04-06,24.47,24.94,24.45,24.67,78020200,23.68
+2005-04-05,24.22,24.50,24.12,24.47,73549600,23.49
+2005-04-04,24.11,24.26,23.94,24.23,62196400,23.26
+2005-04-01,24.24,24.35,24.10,24.12,64619600,23.16
+2005-03-31,24.25,24.31,24.12,24.17,62382300,23.20
+2005-03-30,24.04,24.19,24.00,24.16,59585700,23.19
+2005-03-29,24.14,24.24,23.82,23.92,74231700,22.96
+2005-03-28,24.40,24.47,24.18,24.20,49802000,23.23
+2005-03-24,24.24,24.47,24.20,24.28,78820900,23.31
+2005-03-23,23.99,24.39,23.96,24.18,79293300,23.21
+2005-03-22,24.19,24.27,23.96,23.99,102113300,23.03
+2005-03-21,24.35,24.36,24.15,24.20,71446200,23.23
+2005-03-18,24.53,24.91,24.28,24.31,135904000,23.34
+2005-03-17,24.64,24.68,24.53,24.54,60573200,23.56
+2005-03-16,24.82,24.97,24.56,24.63,74841400,23.65
+2005-03-15,25.10,25.24,24.89,24.91,71469400,23.91
+2005-03-14,25.08,25.15,24.96,25.11,65550500,24.11
+2005-03-11,25.45,25.48,25.06,25.09,60617900,24.09
+2005-03-10,25.43,25.48,25.25,25.43,59132900,24.41
+2005-03-09,25.39,25.57,25.28,25.31,62991800,24.30
+2005-03-08,25.40,25.62,25.34,25.40,52871800,24.38
+2005-03-07,25.17,25.79,25.16,25.47,80407400,24.45
+2005-03-04,25.21,25.30,25.13,25.17,63058200,24.16
+2005-03-03,25.30,25.31,25.14,25.17,52183600,24.16
+2005-03-02,25.19,25.48,25.16,25.26,67739000,24.25
+2005-03-01,25.19,25.41,25.13,25.28,56394800,24.27
+2005-02-28,25.22,25.37,25.13,25.16,82728000,24.15
+2005-02-25,25.33,25.38,25.15,25.25,62467700,24.24
+2005-02-24,25.18,25.44,25.15,25.37,85236300,24.36
+2005-02-23,25.24,25.35,25.17,25.20,83689400,24.19
+2005-02-22,25.25,25.49,25.20,25.23,96419200,24.22
+2005-02-18,25.64,25.65,25.40,25.48,77091100,24.46
+2005-02-17,25.71,25.86,25.60,25.65,67024800,24.62
+2005-02-16,25.87,25.93,25.67,25.79,57506600,24.76
+2005-02-15,26.00,26.08,25.86,25.93,76551600,24.89
+2005-02-14,25.93,26.12,25.91,26.01,58694000,24.89
+2005-02-11,26.03,26.12,25.81,25.97,83835900,24.86
+2005-02-10,26.10,26.13,26.00,26.06,71796400,24.94
+2005-02-09,26.25,26.31,26.04,26.07,77874800,24.95
+2005-02-08,26.19,26.34,26.16,26.24,61343700,25.11
+2005-02-07,26.27,26.30,26.06,26.16,57763400,25.04
+2005-02-04,26.17,26.37,26.14,26.32,61246500,25.19
+2005-02-03,26.37,26.40,26.10,26.18,62545400,25.06
+2005-02-02,26.42,26.50,26.28,26.46,79329500,25.32
+2005-02-01,26.25,26.43,26.22,26.39,57981700,25.26
+2005-01-31,26.35,26.52,26.16,26.28,71442100,25.15
+2005-01-28,26.54,26.65,25.96,26.18,110466500,25.06
+2005-01-27,25.95,26.16,25.85,26.11,93204100,24.99
+2005-01-26,26.07,26.17,25.90,26.01,64974500,24.89
+2005-01-25,25.76,26.19,25.75,26.02,67580700,24.90
+2005-01-24,25.76,26.00,25.64,25.67,69010900,24.57
+2005-01-21,25.95,26.13,25.64,25.65,76501000,24.55
+2005-01-20,25.84,26.10,25.74,25.86,58380100,24.75
+2005-01-19,26.21,26.26,25.92,25.98,58114100,24.86
+2005-01-18,26.03,26.35,25.84,26.32,69146400,25.19
+2005-01-14,26.40,26.45,26.04,26.12,92180800,25.00
+2005-01-13,26.68,26.80,26.16,26.27,89861600,25.14
+2005-01-12,26.77,26.85,26.62,26.78,72940600,25.63
+2005-01-11,26.69,26.82,26.61,26.73,64712000,25.58
+2005-01-10,26.60,26.86,26.54,26.80,70376600,25.65
+2005-01-07,26.82,26.89,26.62,26.67,68723300,25.53
+2005-01-06,26.85,27.06,26.64,26.75,76890500,25.60
+2005-01-05,26.84,27.10,26.76,26.78,72463500,25.63
+2005-01-04,26.87,27.10,26.66,26.84,109442100,25.69
+2005-01-03,26.80,26.95,26.65,26.74,65002900,25.59
diff --git a/includes/js/dojox/charting/tests/data/yahoo_prices.csv b/includes/js/dojox/charting/tests/data/yahoo_prices.csv
new file mode 100644
index 0000000..261889b
--- /dev/null
+++ b/includes/js/dojox/charting/tests/data/yahoo_prices.csv
@@ -0,0 +1,796 @@
+Date,Open,High,Low,Close,Volume,Adj Close
+2008-02-29,27.94,28.41,27.50,27.78,23860500,27.78
+2008-02-28,27.98,28.82,27.96,28.15,30113200,28.15
+2008-02-27,28.33,28.49,27.75,28.37,27664100,28.37
+2008-02-26,27.93,28.55,27.81,28.22,26013000,28.22
+2008-02-25,28.42,28.57,27.75,28.13,32470600,28.13
+2008-02-22,28.36,28.64,27.98,28.42,26157800,28.42
+2008-02-21,28.76,29.17,28.25,28.42,34494000,28.42
+2008-02-20,28.71,29.04,28.39,28.83,29274700,28.83
+2008-02-19,29.34,29.42,28.75,29.01,38679600,29.01
+2008-02-15,29.95,30.15,29.43,29.66,40125200,29.66
+2008-02-14,29.98,30.25,29.75,29.98,38045600,29.98
+2008-02-13,29.78,30.07,29.60,29.88,57047700,29.88
+2008-02-12,29.81,29.84,29.40,29.57,42445600,29.57
+2008-02-11,29.89,30.05,29.32,29.87,67253700,29.87
+2008-02-08,28.98,29.22,28.71,29.20,55618900,29.20
+2008-02-07,28.63,29.19,28.60,29.04,44248800,29.04
+2008-02-06,29.11,29.33,28.53,28.57,55648800,28.57
+2008-02-05,28.78,29.57,28.75,28.98,68583700,28.98
+2008-02-04,28.33,29.50,28.33,29.33,144814000,29.33
+2008-02-01,28.68,29.83,27.34,28.38,438248800,28.38
+2008-01-31,18.87,19.35,18.72,19.18,41449800,19.18
+2008-01-30,18.62,20.81,18.58,19.05,115993300,19.05
+2008-01-29,20.87,20.90,20.05,20.81,79230000,20.81
+2008-01-28,21.56,21.90,20.42,20.78,32473100,20.78
+2008-01-25,22.24,22.37,21.32,21.94,28386800,21.94
+2008-01-24,20.44,21.75,20.42,21.69,39823300,21.69
+2008-01-23,19.25,20.34,18.72,20.01,42064200,20.01
+2008-01-22,19.29,21.03,19.26,19.86,38126200,19.86
+2008-01-18,21.27,21.61,20.07,20.78,41239300,20.78
+2008-01-17,22.00,22.17,21.14,21.22,28812600,21.22
+2008-01-16,22.20,22.75,21.73,21.95,38155300,21.95
+2008-01-15,23.00,23.49,22.57,22.91,31911000,22.91
+2008-01-14,23.51,23.76,23.18,23.70,18552900,23.70
+2008-01-11,23.81,24.13,22.98,23.36,27297400,23.36
+2008-01-10,23.19,24.57,22.83,24.09,52342100,24.09
+2008-01-09,22.47,22.80,21.37,22.56,46662700,22.56
+2008-01-08,23.28,23.65,22.50,22.61,22974000,22.61
+2008-01-07,23.12,23.56,22.73,23.18,24769400,23.18
+2008-01-04,23.81,23.81,23.10,23.16,20745800,23.16
+2008-01-03,23.86,24.19,23.70,23.84,20179700,23.84
+2008-01-02,23.80,24.15,23.60,23.72,25671700,23.72
+2007-12-31,23.22,23.43,23.11,23.26,14782600,23.26
+2007-12-28,23.66,23.71,23.21,23.45,13773000,23.45
+2007-12-27,23.60,24.15,23.57,23.71,16041500,23.71
+2007-12-26,23.85,24.25,23.85,23.96,9821600,23.96
+2007-12-24,24.01,24.19,23.94,24.05,24861800,24.05
+2007-12-21,23.88,24.10,23.74,24.01,24094600,24.01
+2007-12-20,23.50,23.80,23.24,23.64,21030700,23.64
+2007-12-19,22.92,23.69,22.92,23.31,26547300,23.31
+2007-12-18,23.22,23.35,22.80,23.02,27735600,23.02
+2007-12-17,23.80,24.03,22.94,23.04,37877100,23.04
+2007-12-14,24.13,24.47,24.00,24.06,15125500,24.06
+2007-12-13,24.39,24.75,24.19,24.38,23787400,24.38
+2007-12-12,24.82,25.00,24.11,24.54,20241200,24.54
+2007-12-11,25.15,25.65,24.36,24.47,28579100,24.47
+2007-12-10,25.51,25.57,24.92,25.20,26074900,25.20
+2007-12-07,25.86,26.11,25.50,25.63,11443200,25.63
+2007-12-06,25.88,26.02,25.39,25.96,19236500,25.96
+2007-12-05,26.63,26.73,25.73,25.98,21170900,25.98
+2007-12-04,26.14,26.73,26.11,26.42,14668800,26.42
+2007-12-03,26.64,27.20,26.56,26.61,15250100,26.61
+2007-11-30,26.96,27.33,26.51,26.81,23994000,26.81
+2007-11-29,26.01,26.71,25.91,26.63,17929700,26.63
+2007-11-28,26.03,26.70,25.93,26.20,23239300,26.20
+2007-11-27,25.18,26.00,25.17,25.59,19484500,25.59
+2007-11-26,26.08,26.25,25.20,25.22,24174600,25.22
+2007-11-23,25.98,26.40,25.76,26.13,9249400,26.13
+2007-11-21,26.11,26.58,25.52,25.71,23320100,25.71
+2007-11-20,26.93,27.25,25.98,26.72,25672500,26.72
+2007-11-19,27.11,27.35,26.35,26.76,33066200,26.76
+2007-11-16,25.66,27.13,25.10,26.82,53013100,26.82
+2007-11-15,24.94,25.75,24.90,25.42,27920800,25.42
+2007-11-14,26.42,26.44,25.00,25.07,38154800,25.07
+2007-11-13,25.53,26.24,25.30,26.10,34123300,26.10
+2007-11-12,25.80,26.20,24.69,24.78,31264200,24.78
+2007-11-09,26.13,26.38,25.40,25.79,45199700,25.79
+2007-11-08,28.11,28.24,25.82,26.70,58160600,26.70
+2007-11-07,29.27,29.30,27.56,27.63,57069800,27.63
+2007-11-06,31.76,31.79,29.00,29.93,63664400,29.93
+2007-11-05,30.71,32.37,30.35,31.36,43520300,31.36
+2007-11-02,30.54,31.21,29.64,31.11,34090300,31.11
+2007-11-01,30.86,31.10,30.04,30.22,26913300,30.22
+2007-10-31,31.50,31.75,30.50,31.10,34762000,31.10
+2007-10-30,31.55,31.64,30.12,30.83,52417300,30.83
+2007-10-29,34.07,34.08,31.18,31.79,83685800,31.79
+2007-10-26,32.43,33.99,31.61,33.63,66018100,33.63
+2007-10-25,30.75,31.62,30.50,31.34,38706600,31.34
+2007-10-24,30.68,30.98,30.00,30.68,33603100,30.68
+2007-10-23,30.12,30.88,30.03,30.64,45406200,30.64
+2007-10-22,28.93,30.00,28.80,29.85,27750100,29.85
+2007-10-19,29.36,29.96,28.85,29.03,41933000,29.03
+2007-10-18,28.59,29.60,28.47,29.35,28152200,29.35
+2007-10-17,29.10,29.20,28.00,28.82,75067700,28.82
+2007-10-16,27.37,27.48,26.55,26.69,56275300,26.69
+2007-10-15,28.32,28.40,27.46,27.86,22994100,27.86
+2007-10-12,27.76,28.51,27.65,28.48,22130500,28.48
+2007-10-11,28.44,28.68,27.50,27.65,25298300,27.65
+2007-10-10,28.43,28.70,27.90,28.36,14847100,28.36
+2007-10-09,28.35,28.76,27.94,28.37,19539500,28.37
+2007-10-08,28.01,28.17,27.75,28.05,15060700,28.05
+2007-10-05,27.78,28.16,27.75,27.88,28389600,27.88
+2007-10-04,27.19,27.29,26.90,27.15,19203600,27.15
+2007-10-03,27.16,27.38,26.82,27.17,18052500,27.17
+2007-10-02,27.20,27.24,26.62,26.95,15133400,26.95
+2007-10-01,26.76,27.10,26.73,27.04,16938700,27.04
+2007-09-28,26.49,26.89,26.20,26.84,22155600,26.84
+2007-09-27,26.95,26.95,26.17,26.27,21365200,26.27
+2007-09-26,26.70,27.07,26.50,26.70,18692400,26.70
+2007-09-25,25.70,26.65,25.63,26.51,33721300,26.51
+2007-09-24,26.13,26.40,25.51,25.73,27597800,25.73
+2007-09-21,25.54,26.21,25.29,26.05,53074900,26.05
+2007-09-20,25.28,25.61,25.16,25.29,17312000,25.29
+2007-09-19,25.09,25.37,24.81,25.29,25867900,25.29
+2007-09-18,25.06,25.21,24.53,25.06,28121000,25.06
+2007-09-17,24.50,25.10,24.38,24.95,20594000,24.95
+2007-09-14,23.69,25.00,23.65,24.73,28868600,24.73
+2007-09-13,23.60,23.96,23.60,23.72,10309000,23.72
+2007-09-12,23.64,23.94,23.53,23.56,16553700,23.56
+2007-09-11,23.31,23.84,23.31,23.71,17207500,23.71
+2007-09-10,23.85,23.85,23.10,23.30,15246000,23.30
+2007-09-07,23.76,24.05,23.60,23.76,12591900,23.76
+2007-09-06,24.22,24.32,23.62,24.15,13922100,24.15
+2007-09-05,24.10,24.40,23.91,24.10,23071000,24.10
+2007-09-04,23.30,24.50,23.20,23.97,43598600,23.97
+2007-08-31,22.81,22.83,22.51,22.73,13052500,22.73
+2007-08-30,22.49,22.91,22.38,22.61,18172500,22.61
+2007-08-29,22.60,22.69,22.27,22.55,24599900,22.55
+2007-08-28,22.95,23.10,22.50,22.52,18030600,22.52
+2007-08-27,23.59,23.76,23.01,23.03,16523800,23.03
+2007-08-24,23.03,23.73,23.03,23.59,11191100,23.59
+2007-08-23,23.35,23.36,22.95,23.13,15603000,23.13
+2007-08-22,23.22,23.52,23.18,23.23,18763700,23.23
+2007-08-21,23.25,23.48,22.91,23.04,25962900,23.04
+2007-08-20,23.64,23.74,23.18,23.34,13338900,23.34
+2007-08-17,23.26,23.63,22.76,23.54,19528200,23.54
+2007-08-16,23.00,23.15,22.50,22.76,29652200,22.76
+2007-08-15,23.56,24.00,23.25,23.32,18767700,23.32
+2007-08-14,24.69,24.70,23.69,23.72,18707100,23.72
+2007-08-13,24.21,24.74,24.01,24.57,21317600,24.57
+2007-08-10,23.93,24.22,23.52,23.94,22939800,23.94
+2007-08-09,23.67,24.45,23.51,23.80,24052500,23.80
+2007-08-08,23.46,23.87,23.43,23.87,17198000,23.87
+2007-08-07,22.75,23.70,22.69,23.44,20075300,23.44
+2007-08-06,23.03,23.15,22.44,22.97,28948000,22.97
+2007-08-03,23.20,23.39,22.87,22.92,19702100,22.92
+2007-08-02,22.65,23.70,22.65,23.36,21098900,23.36
+2007-08-01,23.17,23.40,22.85,23.25,22030400,23.25
+2007-07-31,23.88,23.93,23.24,23.25,21575800,23.25
+2007-07-30,23.55,23.88,23.38,23.62,20976600,23.62
+2007-07-27,23.98,24.49,23.47,23.49,35783800,23.49
+2007-07-26,24.40,24.49,23.62,24.03,33373300,24.03
+2007-07-25,25.01,25.32,24.59,24.68,21882400,24.68
+2007-07-24,24.80,25.34,24.73,24.84,28981000,24.84
+2007-07-23,25.43,25.46,24.98,24.99,26631500,24.99
+2007-07-20,25.70,25.89,25.20,25.35,38056100,25.35
+2007-07-19,26.32,26.34,25.92,26.03,29537900,26.03
+2007-07-18,26.07,26.72,26.02,26.20,65125900,26.20
+2007-07-17,26.74,27.80,26.70,27.53,53656100,27.53
+2007-07-16,26.48,26.74,26.13,26.70,30804500,26.70
+2007-07-13,26.87,26.97,26.50,26.58,18522700,26.58
+2007-07-12,26.70,26.97,26.34,26.96,20082300,26.96
+2007-07-11,27.03,27.05,26.55,26.69,21970700,26.69
+2007-07-10,27.09,27.57,26.96,26.97,24635500,26.97
+2007-07-09,26.92,27.33,26.82,27.20,17515800,27.20
+2007-07-06,27.01,27.14,26.93,27.10,12284500,27.10
+2007-07-05,26.92,27.14,26.90,26.99,16071900,26.99
+2007-07-03,26.95,27.25,26.90,27.00,11643400,27.00
+2007-07-02,27.19,27.27,26.76,26.86,21011000,26.86
+2007-06-29,27.21,27.38,26.93,27.13,13842500,27.13
+2007-06-28,27.44,27.49,27.12,27.25,17124500,27.25
+2007-06-27,27.51,27.66,27.40,27.58,13997000,27.58
+2007-06-26,27.73,28.18,27.36,27.71,25324000,27.71
+2007-06-25,27.60,27.77,27.34,27.64,21232200,27.64
+2007-06-22,27.68,27.79,27.31,27.38,33796900,27.38
+2007-06-21,27.69,27.94,27.55,27.67,17885800,27.67
+2007-06-20,27.89,28.17,27.66,27.66,33496400,27.66
+2007-06-19,29.40,29.40,27.54,27.63,65967500,27.63
+2007-06-18,27.72,28.34,27.50,28.12,70919400,28.12
+2007-06-15,27.49,27.52,27.19,27.31,23816900,27.31
+2007-06-14,27.38,27.64,27.15,27.30,18919400,27.30
+2007-06-13,27.12,27.41,26.61,27.38,31210700,27.38
+2007-06-12,27.30,27.66,26.98,27.05,22203600,27.05
+2007-06-11,27.27,27.52,27.15,27.35,14856500,27.35
+2007-06-08,27.02,27.45,26.96,27.39,18618500,27.39
+2007-06-07,27.34,27.73,26.98,26.98,34232300,26.98
+2007-06-06,28.05,28.11,27.30,27.44,33508200,27.44
+2007-06-05,28.40,28.59,28.10,28.23,20494800,28.23
+2007-06-04,28.60,28.78,28.40,28.59,13428800,28.59
+2007-06-01,28.90,29.13,28.61,28.78,12398800,28.78
+2007-05-31,28.76,28.85,28.49,28.70,15859100,28.70
+2007-05-30,28.19,28.38,28.00,28.38,16046800,28.38
+2007-05-29,28.36,28.73,28.20,28.40,13981500,28.40
+2007-05-25,28.44,28.73,28.34,28.58,10334600,28.58
+2007-05-24,28.65,28.88,28.25,28.41,19122900,28.41
+2007-05-23,29.10,29.37,28.53,28.61,27964400,28.61
+2007-05-22,29.33,29.35,28.78,28.92,19131300,28.92
+2007-05-21,29.62,29.86,29.32,29.35,18955900,29.35
+2007-05-18,28.90,29.80,28.78,29.75,35487200,29.75
+2007-05-17,28.99,29.13,28.49,28.57,23535000,28.57
+2007-05-16,28.89,29.37,28.25,29.21,32944800,29.21
+2007-05-15,29.16,29.42,28.75,28.81,22226800,28.81
+2007-05-14,29.79,30.00,29.08,29.31,20895900,29.31
+2007-05-11,29.62,30.08,29.53,30.05,13838800,30.05
+2007-05-10,30.52,30.69,29.61,29.70,26570200,29.70
+2007-05-09,30.17,30.44,29.95,30.22,23533100,30.22
+2007-05-08,30.24,31.10,30.21,30.41,28018200,30.41
+2007-05-07,30.13,30.98,29.86,30.38,41243900,30.38
+2007-05-04,33.27,33.61,29.58,30.98,245611400,30.98
+2007-05-03,28.25,28.50,28.01,28.18,20119500,28.18
+2007-05-02,27.72,28.26,27.72,28.12,16911800,28.12
+2007-05-01,28.25,28.35,27.53,27.73,18310900,27.73
+2007-04-30,28.32,28.50,28.00,28.04,17596300,28.04
+2007-04-27,28.35,28.86,28.17,28.34,21097000,28.34
+2007-04-26,27.98,28.65,27.73,28.49,32331000,28.49
+2007-04-25,28.22,28.27,27.68,28.06,35568600,28.06
+2007-04-24,28.03,28.26,27.69,28.02,25964000,28.02
+2007-04-23,27.53,28.14,27.37,27.88,27262400,27.88
+2007-04-20,27.86,27.86,27.37,27.46,39123300,27.46
+2007-04-19,28.10,28.23,27.46,27.51,45664700,27.51
+2007-04-18,28.42,28.90,27.89,28.31,127875300,28.31
+2007-04-17,31.98,32.14,31.71,32.09,43223800,32.09
+2007-04-16,31.68,31.79,31.24,31.61,14359100,31.61
+2007-04-13,31.15,31.50,30.96,31.41,12006300,31.41
+2007-04-12,31.26,31.42,31.10,31.21,13904800,31.21
+2007-04-11,31.65,31.73,30.90,31.17,16141100,31.17
+2007-04-10,31.64,32.02,31.60,31.69,12797600,31.69
+2007-04-09,32.01,32.24,31.60,31.64,12408000,31.64
+2007-04-05,32.00,32.09,31.72,31.96,13878100,31.96
+2007-04-04,31.61,31.87,31.48,31.62,7836200,31.62
+2007-04-03,31.41,32.00,31.41,31.72,12324600,31.72
+2007-04-02,31.22,31.40,30.93,31.28,8668800,31.28
+2007-03-30,31.21,31.60,31.02,31.29,9425000,31.29
+2007-03-29,31.71,31.73,30.83,31.34,13815000,31.34
+2007-03-28,31.45,31.70,31.25,31.41,13162500,31.41
+2007-03-27,31.56,31.66,31.24,31.55,9403100,31.55
+2007-03-26,31.25,31.74,31.24,31.66,12907000,31.66
+2007-03-23,31.33,31.70,31.16,31.36,12727900,31.36
+2007-03-22,31.36,31.44,30.85,31.26,12989800,31.26
+2007-03-21,30.33,31.39,30.21,31.29,26667300,31.29
+2007-03-20,30.00,30.35,29.94,30.33,12203800,30.33
+2007-03-19,30.00,30.19,29.92,30.03,9983800,30.03
+2007-03-16,30.02,30.11,29.72,29.88,19799300,29.88
+2007-03-15,29.81,30.07,29.78,30.06,15440900,30.06
+2007-03-14,29.63,30.04,29.26,29.86,23604900,29.86
+2007-03-13,29.77,30.24,29.42,29.56,18263800,29.56
+2007-03-12,29.30,30.11,29.29,29.99,35991600,29.99
+2007-03-09,29.85,30.15,28.79,29.12,72749900,29.12
+2007-03-08,30.82,31.04,30.58,30.71,13715100,30.71
+2007-03-07,30.95,31.03,30.33,30.39,16014300,30.39
+2007-03-06,30.89,31.06,30.52,30.80,33472600,30.80
+2007-03-05,30.18,31.90,30.14,30.31,21469000,30.31
+2007-03-02,30.54,30.89,30.28,30.42,18136600,30.42
+2007-03-01,30.13,31.23,30.00,30.86,24012900,30.86
+2007-02-28,30.86,31.47,30.09,30.86,30487800,30.86
+2007-02-27,31.38,31.64,30.24,30.95,31505200,30.95
+2007-02-26,32.80,32.84,30.85,32.11,28295200,32.11
+2007-02-23,31.60,32.18,31.41,32.10,21533500,32.10
+2007-02-22,31.60,32.08,31.32,31.60,15485100,31.60
+2007-02-21,31.74,31.77,31.22,31.65,27999200,31.65
+2007-02-20,31.80,32.21,31.39,32.01,20026500,32.01
+2007-02-16,31.00,32.00,31.00,31.91,36774800,31.91
+2007-02-15,30.82,31.65,30.69,31.25,28160300,31.25
+2007-02-14,29.69,30.86,29.64,30.66,30821100,30.66
+2007-02-13,29.37,29.68,29.26,29.56,12802300,29.56
+2007-02-12,29.29,29.77,29.05,29.17,18316200,29.17
+2007-02-09,30.07,30.16,29.51,29.74,18172200,29.74
+2007-02-08,29.75,30.24,29.73,30.08,15561700,30.08
+2007-02-07,29.35,30.15,29.12,29.89,29162600,29.89
+2007-02-06,28.61,29.56,28.60,29.35,24506800,29.35
+2007-02-05,28.67,28.80,28.36,28.56,11163300,28.56
+2007-02-02,28.57,28.92,28.45,28.77,16483100,28.77
+2007-02-01,28.68,28.71,28.15,28.35,17905200,28.35
+2007-01-31,28.04,28.48,27.82,28.31,14100300,28.31
+2007-01-30,27.87,28.39,27.61,28.04,13576600,28.04
+2007-01-29,28.05,28.21,27.73,27.87,16859000,27.87
+2007-01-26,28.33,28.52,27.96,28.04,21334800,28.04
+2007-01-25,28.68,29.05,28.13,28.21,28356200,28.21
+2007-01-24,28.34,29.20,28.22,28.94,81017500,28.94
+2007-01-23,27.42,27.54,26.88,26.96,43728100,26.96
+2007-01-22,27.85,27.90,27.18,27.42,23199800,27.42
+2007-01-19,27.93,28.34,27.55,27.64,24757700,27.64
+2007-01-18,28.92,28.99,27.82,28.12,23869400,28.12
+2007-01-17,29.40,29.40,28.81,29.05,17796100,29.05
+2007-01-16,29.88,29.88,28.79,29.29,24448400,29.29
+2007-01-12,28.98,29.50,28.49,29.45,20971100,29.45
+2007-01-11,28.76,29.37,28.70,29.20,28457500,29.20
+2007-01-10,27.48,28.92,27.44,28.70,40240000,28.70
+2007-01-09,28.00,28.05,27.41,27.58,25621500,27.58
+2007-01-08,27.70,28.04,27.43,27.92,25713700,27.92
+2007-01-05,26.70,27.87,26.66,27.74,64264600,27.74
+2007-01-04,25.64,26.92,25.52,26.85,32512200,26.85
+2007-01-03,25.85,26.26,25.26,25.61,26352700,25.61
+2006-12-29,25.42,25.82,25.33,25.54,16297800,25.54
+2006-12-28,25.62,25.72,25.30,25.36,11908400,25.36
+2006-12-27,25.47,25.88,25.45,25.75,12421800,25.75
+2006-12-26,25.49,25.61,25.34,25.45,8400500,25.45
+2006-12-22,25.67,25.88,25.45,25.55,14666100,25.55
+2006-12-21,25.71,25.75,25.13,25.48,27050600,25.48
+2006-12-20,26.24,26.31,25.54,25.59,24905600,25.59
+2006-12-19,26.05,26.50,25.91,26.41,18973800,26.41
+2006-12-18,26.89,26.97,26.07,26.30,19431200,26.30
+2006-12-15,27.00,27.22,26.76,26.90,27227300,26.90
+2006-12-14,26.63,26.97,26.50,26.87,14400300,26.87
+2006-12-13,27.05,27.23,26.51,26.60,20428600,26.60
+2006-12-12,26.63,27.38,26.60,26.75,31971600,26.75
+2006-12-11,26.37,26.70,26.12,26.49,12916900,26.49
+2006-12-08,26.65,26.78,26.27,26.34,19262200,26.34
+2006-12-07,26.95,27.16,26.60,26.63,22407000,26.63
+2006-12-06,27.25,27.45,26.60,26.86,35202800,26.86
+2006-12-05,26.87,27.61,26.86,27.43,27118200,27.43
+2006-12-04,26.49,27.30,26.49,26.89,28012700,26.89
+2006-12-01,27.00,27.25,26.00,26.49,20055800,26.49
+2006-11-30,27.00,27.15,26.73,27.01,14916300,27.01
+2006-11-29,27.40,27.40,26.71,27.04,19375100,27.04
+2006-11-28,27.03,27.24,26.85,27.00,14940800,27.00
+2006-11-27,27.50,28.50,27.17,27.27,19922300,27.27
+2006-11-24,28.22,28.49,27.70,28.03,9384400,28.03
+2006-11-22,27.51,28.56,27.29,28.49,32055800,28.49
+2006-11-21,26.50,27.34,26.50,27.14,21138300,27.14
+2006-11-20,26.96,27.04,26.63,26.72,20272000,26.72
+2006-11-17,26.68,27.05,26.63,26.91,17955200,26.91
+2006-11-16,27.31,27.33,26.20,26.64,38508500,26.64
+2006-11-15,27.18,27.50,27.03,27.15,22112700,27.15
+2006-11-14,27.40,27.50,27.11,27.24,20145700,27.24
+2006-11-13,27.17,27.62,27.15,27.40,16876500,27.40
+2006-11-10,27.40,27.50,27.03,27.39,21366600,27.39
+2006-11-09,27.18,27.65,26.96,27.45,27428600,27.45
+2006-11-08,26.36,27.25,26.31,26.90,23384800,26.90
+2006-11-07,26.69,27.15,26.58,26.61,28442700,26.61
+2006-11-06,26.34,26.70,26.10,26.59,22563600,26.59
+2006-11-03,26.63,26.70,26.04,26.18,15313800,26.18
+2006-11-02,25.94,26.60,25.77,26.53,34824500,26.53
+2006-11-01,26.50,26.62,25.82,25.99,26300200,25.99
+2006-10-31,26.44,26.70,26.10,26.34,33492800,26.34
+2006-10-30,25.87,26.40,25.66,25.95,35295800,25.95
+2006-10-27,25.23,25.60,24.90,25.34,29647200,25.34
+2006-10-26,24.70,25.33,24.36,25.28,38435800,25.28
+2006-10-25,23.73,24.64,23.69,24.49,40110600,24.49
+2006-10-24,23.35,23.64,23.15,23.53,31704000,23.53
+2006-10-23,23.14,23.50,23.10,23.37,26301200,23.37
+2006-10-20,23.22,23.27,22.65,23.21,49795600,23.21
+2006-10-19,23.02,23.59,23.00,23.14,42280400,23.14
+2006-10-18,24.57,24.75,22.88,22.99,111660900,22.99
+2006-10-17,23.74,24.35,23.68,24.15,67417200,24.15
+2006-10-16,24.34,24.52,23.75,24.18,36496400,24.18
+2006-10-13,23.90,24.50,23.57,24.42,51338900,24.42
+2006-10-12,24.32,24.38,24.10,24.12,25824500,24.12
+2006-10-11,24.29,24.64,23.80,24.24,39356300,24.24
+2006-10-10,24.94,25.03,24.32,24.47,30371900,24.47
+2006-10-09,25.45,25.72,25.00,25.03,15729500,25.03
+2006-10-06,25.09,25.50,25.01,25.47,20847000,25.47
+2006-10-05,25.16,25.25,24.88,25.18,17634000,25.18
+2006-10-04,24.89,25.26,24.74,25.21,21717900,25.21
+2006-10-03,24.81,25.00,24.70,24.84,21148300,24.84
+2006-10-02,25.45,25.46,24.75,24.88,19641300,24.88
+2006-09-29,25.50,25.59,25.24,25.28,18982600,25.28
+2006-09-28,24.87,25.50,24.84,25.33,35331200,25.33
+2006-09-27,25.00,25.01,24.60,24.65,29835900,24.65
+2006-09-26,25.44,25.48,24.81,25.05,34950100,25.05
+2006-09-25,25.64,25.87,25.20,25.29,19992400,25.29
+2006-09-22,25.34,25.69,25.18,25.52,20667400,25.52
+2006-09-21,25.53,25.95,25.21,25.34,28584500,25.34
+2006-09-20,26.04,26.09,25.38,25.64,55636600,25.64
+2006-09-19,29.09,29.13,25.10,25.75,127718600,25.75
+2006-09-18,29.37,29.39,28.58,29.00,15685000,29.00
+2006-09-15,29.30,29.57,29.22,29.32,19550300,29.32
+2006-09-14,29.10,29.24,28.89,29.03,9565500,29.03
+2006-09-13,29.06,29.37,28.80,29.17,15248400,29.17
+2006-09-12,28.55,29.22,28.46,29.09,10005000,29.09
+2006-09-11,28.05,28.73,27.67,28.61,12936000,28.61
+2006-09-08,28.04,28.32,27.97,28.14,9781800,28.14
+2006-09-07,28.40,28.51,27.82,27.86,18434400,27.86
+2006-09-06,28.94,29.01,28.49,28.50,12800600,28.50
+2006-09-05,29.45,29.48,28.95,29.07,11425600,29.07
+2006-09-01,28.91,29.53,28.91,29.49,11573600,29.49
+2006-08-31,28.99,29.02,28.59,28.83,8879300,28.83
+2006-08-30,29.00,29.14,28.71,29.02,13119300,29.02
+2006-08-29,28.86,29.01,28.51,28.96,9888800,28.96
+2006-08-28,28.75,29.25,28.70,28.91,10404700,28.91
+2006-08-25,28.95,29.28,28.74,28.77,6203800,28.77
+2006-08-24,28.75,29.13,28.70,28.99,8983600,28.99
+2006-08-23,29.34,29.47,28.68,28.70,8837400,28.70
+2006-08-22,28.84,29.65,28.80,29.26,10891800,29.26
+2006-08-21,29.22,29.52,28.83,28.90,11575200,28.90
+2006-08-18,28.90,29.97,28.77,29.78,19611300,29.78
+2006-08-17,28.38,29.32,28.34,28.91,17251600,28.91
+2006-08-16,28.35,28.46,27.97,28.39,12589400,28.39
+2006-08-15,27.58,28.20,27.48,28.17,15298500,28.17
+2006-08-14,27.71,27.80,27.00,27.26,10640100,27.26
+2006-08-11,27.52,27.72,27.40,27.50,9252200,27.50
+2006-08-10,26.95,27.80,26.85,27.49,12597900,27.49
+2006-08-09,27.75,27.85,27.00,27.22,14736100,27.22
+2006-08-08,26.95,27.70,26.63,27.44,19332800,27.44
+2006-08-07,26.92,27.11,26.58,27.08,12847200,27.08
+2006-08-04,27.20,27.58,26.83,26.99,11607900,26.99
+2006-08-03,26.50,27.05,26.40,26.90,15468500,26.90
+2006-08-02,27.01,27.10,26.45,26.63,18116200,26.63
+2006-08-01,27.06,27.12,26.74,26.94,18613100,26.94
+2006-07-31,27.46,27.55,26.99,27.14,16492600,27.14
+2006-07-28,26.90,27.50,26.33,27.47,21584800,27.47
+2006-07-27,27.35,27.50,26.64,26.70,25153000,26.70
+2006-07-26,26.78,27.51,26.57,27.08,20073800,27.08
+2006-07-25,26.75,27.19,26.57,26.95,21388800,26.95
+2006-07-24,26.24,27.23,25.89,26.94,42631300,26.94
+2006-07-21,24.99,26.06,24.91,25.89,36187100,25.89
+2006-07-20,25.55,26.21,24.91,25.27,54659700,25.27
+2006-07-19,26.41,26.70,25.04,25.20,204339000,25.20
+2006-07-18,32.08,32.26,31.25,32.24,39767700,32.24
+2006-07-17,31.98,32.40,31.69,31.84,16369600,31.84
+2006-07-14,32.34,32.48,31.85,32.08,12484700,32.08
+2006-07-13,32.85,33.16,32.07,32.23,19463500,32.23
+2006-07-12,33.03,33.74,32.99,33.38,18708400,33.38
+2006-07-11,32.79,33.35,32.32,33.17,11285900,33.17
+2006-07-10,32.91,33.14,32.73,32.85,15317600,32.85
+2006-07-07,32.94,33.05,32.37,32.50,12372500,32.50
+2006-07-06,32.77,33.22,32.70,33.11,13801500,33.11
+2006-07-05,32.85,32.99,32.33,32.47,13453900,32.47
+2006-07-03,32.90,33.44,32.90,33.30,8067100,33.30
+2006-06-30,33.01,33.12,32.54,33.00,22566600,33.00
+2006-06-29,32.26,33.00,32.20,32.97,15745900,32.97
+2006-06-28,31.75,32.17,31.70,31.92,14032800,31.92
+2006-06-27,31.85,32.22,31.32,31.51,16589400,31.51
+2006-06-26,31.45,31.70,31.16,31.55,11457000,31.55
+2006-06-23,31.08,31.76,30.82,31.37,17378500,31.37
+2006-06-22,30.85,31.16,30.44,30.68,11500300,30.68
+2006-06-21,30.77,31.54,30.65,31.06,18252900,31.06
+2006-06-20,30.42,30.65,30.10,30.60,12613200,30.60
+2006-06-19,30.51,30.75,30.06,30.35,12236700,30.35
+2006-06-16,30.70,30.86,30.15,30.36,12951700,30.36
+2006-06-15,29.98,30.96,29.72,30.79,22375000,30.79
+2006-06-14,29.81,30.00,29.25,29.62,19257500,29.62
+2006-06-13,29.77,30.20,29.51,29.65,16435700,29.65
+2006-06-12,30.37,30.65,29.66,29.78,14344600,29.78
+2006-06-09,30.70,30.80,30.23,30.37,10044700,30.37
+2006-06-08,30.43,30.99,29.83,30.45,20538600,30.45
+2006-06-07,30.80,31.25,30.36,30.54,17470100,30.54
+2006-06-06,30.83,30.97,30.35,30.70,15615600,30.70
+2006-06-05,31.19,31.43,30.79,30.82,17188500,30.82
+2006-06-02,32.11,32.19,31.30,31.52,16470900,31.52
+2006-06-01,31.83,32.00,31.49,31.99,16652400,31.99
+2006-05-31,32.19,32.32,31.11,31.59,21306700,31.59
+2006-05-30,32.73,32.89,31.79,32.00,16247600,32.00
+2006-05-26,32.86,33.02,32.35,33.02,13842600,33.02
+2006-05-25,32.94,33.50,32.50,32.92,34732700,32.92
+2006-05-24,30.95,32.02,30.71,31.79,27286300,31.79
+2006-05-23,31.04,31.63,30.76,30.76,28583400,30.76
+2006-05-22,30.42,30.98,29.89,30.46,35089300,30.46
+2006-05-19,29.05,29.75,28.60,29.53,33121900,29.53
+2006-05-18,30.10,30.36,28.93,29.00,38254000,29.00
+2006-05-17,30.61,31.26,30.04,30.11,39847500,30.11
+2006-05-16,31.10,31.22,30.63,30.97,15333700,30.97
+2006-05-15,30.85,31.25,30.60,31.03,13350700,31.03
+2006-05-12,30.71,31.18,30.38,30.81,16745600,30.81
+2006-05-11,31.96,32.17,30.87,30.99,24277000,30.99
+2006-05-10,32.48,32.56,32.00,32.09,13797500,32.09
+2006-05-09,32.68,34.00,32.35,32.49,13396400,32.49
+2006-05-08,33.09,33.43,32.63,32.87,18188200,32.87
+2006-05-05,32.63,32.75,32.22,32.66,14689200,32.66
+2006-05-04,32.40,32.56,32.08,32.19,10402300,32.19
+2006-05-03,32.40,33.00,31.75,32.17,23292600,32.17
+2006-05-02,32.20,32.91,31.72,31.85,16276000,31.85
+2006-05-01,32.99,33.10,31.86,32.08,19752200,32.08
+2006-04-28,32.88,33.45,32.78,32.78,13283500,32.78
+2006-04-27,32.79,33.50,32.40,33.20,19635700,33.20
+2006-04-26,32.30,33.09,32.10,33.00,24426400,33.00
+2006-04-25,32.99,33.06,31.88,31.99,22363200,31.99
+2006-04-24,33.01,33.45,32.90,33.01,15441600,33.01
+2006-04-21,33.36,34.09,32.70,32.89,25215000,32.89
+2006-04-20,33.48,33.70,32.93,33.37,23403900,33.37
+2006-04-19,33.47,33.98,32.76,33.54,77253600,33.54
+2006-04-18,31.17,31.38,30.53,31.30,38604500,31.30
+2006-04-17,31.16,31.79,30.66,30.97,18239900,30.97
+2006-04-13,31.14,31.40,30.85,31.13,15609800,31.13
+2006-04-12,31.44,31.50,30.89,31.10,14926900,31.10
+2006-04-11,32.45,32.60,31.15,31.39,22105600,31.39
+2006-04-10,32.28,32.63,32.12,32.55,9618000,32.55
+2006-04-07,32.85,32.97,32.21,32.27,12980200,32.27
+2006-04-06,32.12,33.14,32.11,32.79,21572600,32.79
+2006-04-05,32.30,32.50,31.96,32.11,11982500,32.11
+2006-04-04,31.69,32.25,31.66,32.10,16232700,32.10
+2006-04-03,32.41,32.53,31.79,31.89,14887900,31.89
+2006-03-31,32.45,32.63,32.01,32.26,12677300,32.26
+2006-03-30,32.75,32.83,32.09,32.42,14314000,32.42
+2006-03-29,32.44,32.91,32.14,32.56,25508200,32.56
+2006-03-28,31.45,32.50,31.41,32.39,25981500,32.39
+2006-03-27,31.84,32.08,31.30,31.45,14858500,31.45
+2006-03-24,32.28,32.31,31.53,31.77,17816500,31.77
+2006-03-23,31.52,31.95,31.48,31.83,33834000,31.83
+2006-03-22,30.33,30.91,30.31,30.75,23147400,30.75
+2006-03-21,30.11,30.78,30.02,30.11,18876400,30.11
+2006-03-20,30.38,30.93,30.20,30.44,21455200,30.44
+2006-03-17,30.35,30.36,29.83,30.07,23629700,30.07
+2006-03-16,30.77,30.88,30.10,30.13,17108000,30.13
+2006-03-15,31.25,31.28,30.47,30.53,20758000,30.53
+2006-03-14,30.10,31.00,30.10,30.99,19294700,30.99
+2006-03-13,30.72,30.97,30.12,30.15,18437700,30.15
+2006-03-10,30.40,31.10,29.75,30.58,28991400,30.58
+2006-03-09,31.05,31.32,30.25,30.28,18277000,30.28
+2006-03-08,31.31,31.55,30.82,30.99,20910200,30.99
+2006-03-07,31.42,32.20,31.31,31.43,23365100,31.43
+2006-03-06,31.53,31.94,31.45,31.57,17211200,31.57
+2006-03-03,31.70,32.07,31.38,31.45,23196000,31.45
+2006-03-02,32.01,32.11,31.58,31.70,23487300,31.70
+2006-03-01,32.21,32.42,31.72,32.18,18466100,32.18
+2006-02-28,32.63,32.98,31.34,32.06,39926200,32.06
+2006-02-27,33.11,33.21,32.57,32.74,11821900,32.74
+2006-02-24,33.20,33.34,32.92,33.01,10136400,33.01
+2006-02-23,33.01,33.66,32.88,33.15,14947600,33.15
+2006-02-22,32.49,33.34,32.40,33.16,18433500,33.16
+2006-02-21,32.90,33.07,32.38,32.39,14328100,32.39
+2006-02-17,32.88,33.14,32.71,32.76,12620200,32.76
+2006-02-16,33.30,33.40,32.60,32.75,19500100,32.75
+2006-02-15,32.62,33.33,32.55,33.02,19542100,33.02
+2006-02-14,32.14,32.83,32.05,32.72,26198600,32.72
+2006-02-13,32.21,32.44,31.70,32.04,26139300,32.04
+2006-02-10,32.58,32.60,32.10,32.51,19628600,32.51
+2006-02-09,33.01,33.36,32.40,32.50,25335200,32.50
+2006-02-08,33.24,33.40,32.51,33.00,28112900,33.00
+2006-02-07,33.01,33.10,32.32,33.02,37236800,33.02
+2006-02-06,33.90,33.95,32.78,32.92,23523100,32.92
+2006-02-03,34.00,34.05,33.26,33.54,32639600,33.54
+2006-02-02,35.01,35.10,34.10,34.25,18323500,34.25
+2006-02-01,34.45,35.00,34.35,35.00,43600400,35.00
+2006-01-31,35.20,35.20,34.31,34.38,36538000,34.38
+2006-01-30,35.09,35.23,34.88,35.05,29030600,35.05
+2006-01-27,35.26,35.27,34.66,35.09,24317400,35.09
+2006-01-26,34.94,35.25,34.49,35.17,28471400,35.17
+2006-01-25,35.43,35.48,34.38,34.49,23779200,34.49
+2006-01-24,34.55,35.20,34.51,34.87,31667800,34.87
+2006-01-23,34.22,34.40,33.98,34.17,30887600,34.17
+2006-01-20,34.44,34.66,33.21,33.74,57644600,33.74
+2006-01-19,35.82,35.84,34.24,34.33,60913000,34.33
+2006-01-18,35.01,36.16,34.74,35.18,118556100,35.18
+2006-01-17,39.09,40.39,38.96,40.11,41797000,40.11
+2006-01-13,41.00,41.08,39.62,39.90,30960800,39.90
+2006-01-12,41.92,41.99,40.76,40.89,18921700,40.89
+2006-01-11,42.19,42.31,41.72,41.87,26191400,41.87
+2006-01-10,42.96,43.34,42.34,42.98,16287200,42.98
+2006-01-09,43.10,43.66,42.82,43.42,16266900,43.42
+2006-01-06,42.88,43.57,42.80,43.21,29418400,43.21
+2006-01-05,40.93,41.73,40.85,41.53,12829100,41.53
+2006-01-04,41.22,41.90,40.77,40.97,20549000,40.97
+2006-01-03,39.69,41.22,38.79,40.91,24227700,40.91
+2005-12-30,39.40,39.56,39.05,39.18,12233000,39.18
+2005-12-29,40.25,40.35,39.41,39.56,10116600,39.56
+2005-12-28,40.10,40.48,39.77,40.25,11567900,40.25
+2005-12-27,40.65,40.94,39.85,39.94,11672900,39.94
+2005-12-23,41.09,41.10,40.45,40.63,5070200,40.63
+2005-12-22,40.69,41.68,40.55,40.83,9548300,40.83
+2005-12-21,40.52,41.05,40.35,40.47,11626900,40.47
+2005-12-20,41.26,41.36,40.48,40.68,15269500,40.68
+2005-12-19,42.16,42.89,40.88,41.05,18563700,41.05
+2005-12-16,41.86,42.67,41.75,42.32,21805000,42.32
+2005-12-15,41.23,41.84,41.14,41.75,20900800,41.75
+2005-12-14,41.12,41.68,40.84,41.30,23034200,41.30
+2005-12-13,40.01,41.40,40.00,41.20,17264700,41.20
+2005-12-12,40.41,40.54,39.81,40.08,9776300,40.08
+2005-12-09,40.50,40.87,40.20,40.31,11116900,40.31
+2005-12-08,40.25,40.54,39.95,40.35,12851600,40.35
+2005-12-07,40.31,40.63,39.57,40.11,15644900,40.11
+2005-12-06,40.78,41.18,40.12,40.19,16356800,40.19
+2005-12-05,40.88,41.03,40.37,40.47,15389400,40.47
+2005-12-02,41.22,41.85,40.89,41.21,14411400,41.21
+2005-12-01,40.74,41.25,40.54,41.07,20069600,41.07
+2005-11-30,39.38,40.84,39.09,40.23,31608700,40.23
+2005-11-29,41.01,41.59,39.82,40.19,28698200,40.19
+2005-11-28,41.63,41.77,40.66,41.11,23190900,41.11
+2005-11-25,42.71,42.84,41.94,42.13,8253000,42.13
+2005-11-23,42.21,43.45,42.17,42.50,21471000,42.50
+2005-11-22,41.73,42.65,41.65,42.36,26389500,42.36
+2005-11-21,41.26,42.98,41.21,42.27,27915500,42.27
+2005-11-18,42.04,42.41,41.29,41.54,30747600,41.54
+2005-11-17,40.32,42.50,40.03,42.23,44796000,42.23
+2005-11-16,37.90,40.07,37.86,40.04,39464600,40.04
+2005-11-15,38.26,38.61,37.54,37.65,11981600,37.65
+2005-11-14,38.43,38.72,37.96,38.45,10112500,38.45
+2005-11-11,38.69,39.05,38.34,38.49,12234400,38.49
+2005-11-10,37.52,38.75,37.52,38.69,13722400,38.69
+2005-11-09,37.76,38.04,37.43,37.75,12217600,37.75
+2005-11-08,37.75,38.50,37.60,37.97,14434400,37.97
+2005-11-07,37.69,38.18,37.41,37.90,11652700,37.90
+2005-11-04,37.59,37.99,37.37,37.87,11656100,37.87
+2005-11-03,38.26,38.28,37.33,37.45,16880800,37.45
+2005-11-02,37.49,38.04,37.43,37.99,17886200,37.99
+2005-11-01,36.62,38.71,36.59,37.72,41932100,37.72
+2005-10-31,35.60,37.27,35.60,36.97,24867100,36.97
+2005-10-28,35.62,35.92,35.25,35.58,14123800,35.58
+2005-10-27,35.34,35.66,35.30,35.45,11605000,35.45
+2005-10-26,35.06,35.75,34.97,35.46,17125600,35.46
+2005-10-25,35.19,35.38,34.89,35.12,14441100,35.12
+2005-10-24,35.30,35.49,34.94,35.28,19591900,35.28
+2005-10-21,35.99,36.33,35.19,35.29,28423400,35.29
+2005-10-20,35.90,36.94,35.05,35.26,29267000,35.26
+2005-10-19,34.62,35.94,34.59,35.91,63254000,35.91
+2005-10-18,34.40,34.76,33.64,33.70,35010300,33.70
+2005-10-17,33.85,34.30,33.80,34.16,21994600,34.16
+2005-10-14,33.62,33.62,32.77,33.52,17425200,33.52
+2005-10-13,33.80,33.85,32.97,33.37,16254600,33.37
+2005-10-12,33.99,34.71,33.91,33.93,16089600,33.93
+2005-10-11,34.55,34.84,33.66,34.10,16504700,34.10
+2005-10-10,34.20,34.90,34.12,34.53,15227800,34.53
+2005-10-07,34.03,34.29,33.97,34.16,12253200,34.16
+2005-10-06,33.95,34.30,33.54,33.80,21836100,33.80
+2005-10-05,33.79,33.93,33.36,33.49,14642000,33.49
+2005-10-04,33.75,34.37,33.51,33.57,14331000,33.57
+2005-10-03,33.80,34.12,33.71,33.77,13184500,33.77
+2005-09-30,33.59,34.10,33.56,33.84,15697000,33.84
+2005-09-29,32.40,33.70,32.12,33.46,22209100,33.46
+2005-09-28,32.67,32.80,32.27,32.35,11622800,32.35
+2005-09-27,32.17,32.61,32.17,32.48,12246900,32.48
+2005-09-26,32.48,32.55,31.99,32.18,13548200,32.18
+2005-09-23,32.12,32.25,31.75,32.13,14903700,32.13
+2005-09-22,32.09,32.41,31.76,32.04,18259400,32.04
+2005-09-21,32.53,33.10,31.60,31.97,21896000,31.97
+2005-09-20,32.88,33.11,32.36,32.64,14578900,32.64
+2005-09-19,33.27,33.47,32.25,32.75,15429900,32.75
+2005-09-16,33.74,33.77,33.05,33.17,20858300,33.17
+2005-09-15,33.95,33.99,33.50,33.57,10404800,33.57
+2005-09-14,34.30,34.50,33.64,33.80,15017400,33.80
+2005-09-13,33.93,34.71,33.73,34.30,19346600,34.30
+2005-09-12,33.42,34.34,33.41,33.91,18580300,33.91
+2005-09-09,33.35,33.60,33.02,33.46,15247900,33.46
+2005-09-08,33.74,33.93,33.20,33.34,17464400,33.34
+2005-09-07,33.50,34.26,33.30,34.06,12545300,34.06
+2005-09-06,33.18,33.78,33.18,33.68,12513300,33.68
+2005-09-02,33.20,33.37,33.10,33.17,6849000,33.17
+2005-09-01,33.28,33.51,33.04,33.24,11848500,33.24
+2005-08-31,33.23,33.39,32.99,33.32,13035500,33.32
+2005-08-30,33.50,33.67,33.00,33.18,13496000,33.18
+2005-08-29,33.40,33.78,33.31,33.68,11427600,33.68
+2005-08-26,33.51,33.81,33.38,33.57,9833400,33.57
+2005-08-25,33.54,33.62,33.20,33.48,12564900,33.48
+2005-08-24,32.92,33.68,32.88,33.47,23249500,33.47
+2005-08-23,33.29,33.33,32.65,33.11,16912700,33.11
+2005-08-22,34.07,34.10,33.07,33.20,21054400,33.20
+2005-08-19,34.39,34.47,33.98,34.00,12810400,34.00
+2005-08-18,34.13,34.73,34.12,34.36,12154200,34.36
+2005-08-17,34.30,34.73,34.23,34.39,10443700,34.39
+2005-08-16,34.57,34.66,34.21,34.23,11867100,34.23
+2005-08-15,34.80,34.87,34.49,34.60,11244500,34.60
+2005-08-12,34.86,34.88,34.45,34.60,13306100,34.60
+2005-08-11,34.54,35.00,34.32,34.94,22391900,34.94
+2005-08-10,34.28,34.77,34.00,34.19,18047900,34.19
+2005-08-09,34.15,34.32,33.91,34.06,9987400,34.06
+2005-08-08,33.86,34.18,33.66,33.94,13066200,33.94
+2005-08-05,34.09,34.28,33.49,33.52,11873800,33.52
+2005-08-04,34.26,34.60,34.00,34.06,11143400,34.06
+2005-08-03,33.75,34.68,33.73,34.51,18240600,34.51
+2005-08-02,33.46,34.20,33.39,33.88,17581900,33.88
+2005-08-01,33.63,33.69,33.31,33.33,12637100,33.33
+2005-07-29,34.01,34.06,33.34,33.34,16236100,33.34
+2005-07-28,34.23,34.31,33.98,34.01,11871600,34.01
+2005-07-27,34.22,34.37,33.95,34.29,20497500,34.29
+2005-07-26,34.05,34.30,33.91,34.15,16819200,34.15
+2005-07-25,33.88,34.08,33.59,33.85,23252600,33.85
+2005-07-22,33.35,33.77,33.17,33.53,27561500,33.53
+2005-07-21,33.75,33.76,32.75,32.94,37778500,32.94
+2005-07-20,34.21,34.35,33.31,33.40,82623300,33.40
+2005-07-19,37.02,38.02,36.56,37.73,32685500,37.73
+2005-07-18,36.45,36.78,36.37,36.58,11019300,36.58
+2005-07-15,37.05,37.16,36.50,36.58,12372200,36.58
+2005-07-14,37.40,37.50,36.77,36.86,14722200,36.86
+2005-07-13,36.42,36.98,36.41,36.73,16897500,36.73
+2005-07-12,36.20,36.49,35.94,36.23,19665800,36.23
+2005-07-11,34.90,35.81,34.78,35.76,20233000,35.76
+2005-07-08,34.77,34.87,34.25,34.62,15515400,34.62
+2005-07-07,33.87,34.77,33.72,34.63,16354300,34.63
+2005-07-06,34.64,34.97,34.03,34.12,13585700,34.12
+2005-07-05,34.25,35.08,34.20,34.60,16086700,34.60
+2005-07-01,34.76,34.85,34.22,34.44,9861600,34.44
+2005-06-30,34.84,35.17,34.44,34.65,16699500,34.65
+2005-06-29,35.80,35.94,34.88,34.94,16481900,34.94
+2005-06-28,35.95,36.24,35.51,35.80,13346200,35.80
+2005-06-27,35.88,36.11,35.20,35.68,12044700,35.68
+2005-06-24,36.26,36.40,35.60,36.09,13468200,36.09
+2005-06-23,36.85,37.31,36.20,36.20,15547700,36.20
+2005-06-22,36.91,37.32,36.84,36.90,12148100,36.90
+2005-06-21,36.37,37.31,36.36,36.95,16219200,36.95
+2005-06-20,35.96,36.84,35.79,36.45,12753200,36.45
+2005-06-17,36.76,36.98,36.12,36.30,15952800,36.30
+2005-06-16,36.46,36.74,36.22,36.40,12228700,36.40
+2005-06-15,36.97,37.11,35.91,36.32,22753900,36.32
+2005-06-14,36.56,37.05,36.43,36.80,12781200,36.80
+2005-06-13,36.66,37.51,36.53,36.90,11586300,36.90
+2005-06-10,37.48,37.50,36.32,36.81,14216900,36.81
+2005-06-09,36.81,37.48,36.38,37.45,18455100,37.45
+2005-06-08,37.42,37.45,36.32,36.63,20121100,36.63
+2005-06-07,38.72,38.95,37.32,37.44,22848300,37.44
+2005-06-06,37.79,38.74,37.75,38.52,12416000,38.52
+2005-06-03,38.24,38.79,37.60,37.92,12813300,37.92
+2005-06-02,38.20,38.71,38.13,38.50,13150700,38.50
+2005-06-01,37.31,38.90,37.17,38.42,28153800,38.42
+2005-05-31,37.03,37.35,36.85,37.20,12498300,37.20
+2005-05-27,36.98,37.47,36.95,37.27,10256600,37.27
+2005-05-26,36.45,37.19,36.35,37.14,15547700,37.14
+2005-05-25,36.25,36.42,36.06,36.27,14995100,36.27
+2005-05-24,36.87,37.10,36.45,36.63,17421300,36.63
+2005-05-23,36.10,37.10,36.04,36.80,21616200,36.80
+2005-05-20,36.60,36.64,36.13,36.33,13771900,36.33
+2005-05-19,36.13,36.99,36.11,36.75,21267100,36.75
+2005-05-18,35.79,36.58,35.69,35.95,23769000,35.95
+2005-05-17,35.20,35.80,35.14,35.68,13178400,35.68
+2005-05-16,34.78,35.50,34.74,35.45,15473900,35.45
+2005-05-13,34.71,35.35,34.35,34.82,15855900,34.82
+2005-05-12,34.95,35.37,34.54,34.71,18906700,34.71
+2005-05-11,34.09,34.88,33.69,34.88,19537100,34.88
+2005-05-10,34.30,34.37,33.86,34.06,13227000,34.06
+2005-05-09,34.48,34.65,34.25,34.59,9991700,34.59
+2005-05-06,35.00,35.08,34.45,34.52,14202200,34.52
+2005-05-05,35.10,35.29,34.43,34.71,16926300,34.71
+2005-05-04,34.43,35.50,34.38,35.18,23410900,35.18
+2005-05-03,34.05,34.60,33.90,34.28,22042800,34.28
+2005-05-02,34.44,34.85,34.03,34.38,13231500,34.38
+2005-04-29,34.60,34.75,33.92,34.50,15666100,34.50
+2005-04-28,34.70,34.93,34.02,34.33,16159300,34.33
+2005-04-27,34.70,35.14,34.59,34.95,14861300,34.95
+2005-04-26,35.12,35.42,34.80,35.00,17921200,35.00
+2005-04-25,34.58,35.59,34.58,35.49,23883600,35.49
+2005-04-22,35.21,35.88,34.50,34.87,31869800,34.87
+2005-04-21,35.12,35.91,34.71,35.87,27731600,35.87
+2005-04-20,34.96,35.25,34.36,34.65,50104400,34.65
+2005-04-19,32.96,33.33,32.42,33.22,34158500,33.22
+2005-04-18,32.43,33.09,32.40,32.55,19201200,32.55
+2005-04-15,32.96,33.41,32.29,32.46,27008500,32.46
+2005-04-14,33.63,34.20,33.40,33.46,19855300,33.46
+2005-04-13,34.16,34.46,33.40,33.60,16886100,33.60
+2005-04-12,34.35,34.50,33.74,34.28,22681900,34.28
+2005-04-11,34.97,35.09,34.54,34.60,11758500,34.60
+2005-04-08,35.04,35.14,34.65,34.76,11106300,34.76
+2005-04-07,34.45,35.25,34.45,35.07,20575000,35.07
+2005-04-06,35.14,35.42,34.12,34.49,23574000,34.49
+2005-04-05,35.15,35.40,34.84,35.15,20275900,35.15
+2005-04-04,34.34,35.27,33.75,35.07,27853300,35.07
+2005-04-01,34.18,34.77,34.15,34.28,27955400,34.28
+2005-03-31,33.55,34.20,33.20,33.90,25390000,33.90
+2005-03-30,32.31,33.60,32.27,33.48,28267900,33.48
+2005-03-29,32.18,32.84,31.79,32.16,23544700,32.16
+2005-03-28,32.21,32.50,32.10,32.25,20624400,32.25
+2005-03-24,31.94,32.09,31.41,31.41,23162000,31.41
+2005-03-23,30.91,31.33,30.85,30.87,13917100,30.87
+2005-03-22,31.70,31.98,30.86,30.99,19570600,30.99
+2005-03-21,31.29,31.77,30.98,31.62,18449400,31.62
+2005-03-18,31.53,31.73,30.91,31.11,20796400,31.11
+2005-03-17,31.80,31.98,31.54,31.61,13760200,31.61
+2005-03-16,31.87,32.35,31.40,31.58,17952000,31.58
+2005-03-15,31.61,32.28,31.53,31.94,20880800,31.94
+2005-03-14,31.74,31.83,30.65,31.32,19762000,31.32
+2005-03-11,31.86,32.21,31.65,31.65,13364800,31.65
+2005-03-10,32.43,32.56,31.60,31.91,19381200,31.91
+2005-03-09,33.01,33.15,32.01,32.32,21824400,32.32
+2005-03-08,33.55,33.73,33.14,33.16,17839300,33.16
+2005-03-07,32.40,33.31,32.36,33.09,17679200,33.09
+2005-03-04,32.36,32.57,31.76,32.36,17499800,32.36
+2005-03-03,32.25,32.48,31.80,32.31,17896100,32.31
+2005-03-02,32.07,32.60,31.75,32.23,15357200,32.23
+2005-03-01,32.37,32.67,32.05,32.30,20222500,32.30
+2005-02-28,31.74,33.77,31.62,32.27,25266400,32.27
+2005-02-25,31.53,31.96,31.43,31.73,20114900,31.73
+2005-02-24,30.43,31.49,30.30,31.48,55457300,31.48
+2005-02-23,32.82,32.92,31.40,32.12,34757100,32.12
+2005-02-22,33.25,33.82,32.66,32.79,18142600,32.79
+2005-02-18,33.84,33.98,33.38,33.60,12436100,33.60
+2005-02-17,34.42,34.79,33.76,33.82,16203500,33.82
+2005-02-16,33.81,34.82,33.75,34.42,22176200,34.42
+2005-02-15,34.34,34.92,33.81,33.98,20391900,33.98
+2005-02-14,34.01,34.41,33.78,34.33,20065300,34.33
+2005-02-11,33.45,34.70,33.31,34.15,20005800,34.15
+2005-02-10,33.72,33.72,32.47,33.44,32637400,33.44
+2005-02-09,34.60,34.66,33.45,33.59,18285100,33.59
+2005-02-08,34.64,34.91,34.32,34.36,17321500,34.36
+2005-02-07,35.07,35.19,34.36,34.47,14588900,34.47
+2005-02-04,34.71,35.30,34.71,35.02,16850200,35.02
+2005-02-03,35.27,35.67,35.00,35.09,16742400,35.09
+2005-02-02,36.02,36.34,35.29,35.54,33495200,35.54
+2005-02-01,35.13,35.28,34.46,34.75,18633600,34.75
+2005-01-31,35.04,35.44,34.53,35.21,20712200,35.21
+2005-01-28,34.90,35.24,34.12,34.62,17853700,34.62
+2005-01-27,35.38,35.49,34.35,34.73,21450800,34.73
+2005-01-26,34.71,35.74,34.39,35.47,25767500,35.47
+2005-01-25,34.55,34.76,33.94,34.04,26521400,34.04
+2005-01-24,35.48,35.52,33.75,33.93,31477400,33.93
+2005-01-21,36.07,36.11,35.29,35.30,26608000,35.30
+2005-01-20,35.39,36.42,35.05,35.78,30239100,35.78
+2005-01-19,38.08,38.20,36.42,36.45,44303200,36.45
+2005-01-18,37.10,37.46,36.60,37.18,42709600,37.18
+2005-01-14,35.86,36.70,35.83,36.70,27697700,36.70
+2005-01-13,36.12,36.32,35.26,35.33,18526500,35.33
+2005-01-12,35.88,36.18,34.80,36.14,23274700,36.14
+2005-01-11,36.31,36.58,35.39,35.66,19711900,35.66
+2005-01-10,36.00,36.76,35.51,36.32,17482800,36.32
+2005-01-07,35.99,36.46,35.41,35.96,18596300,35.96
+2005-01-06,36.32,36.50,35.21,35.43,20835300,35.43
+2005-01-05,36.69,36.98,36.06,36.13,18469100,36.13
+2005-01-04,38.45,38.54,36.46,36.58,26625300,36.58
+2005-01-03,38.36,38.90,37.65,38.18,25482800,38.18
diff --git a/includes/js/dojox/charting/tests/runTests.html b/includes/js/dojox/charting/tests/runTests.html
new file mode 100644
index 0000000..6e13c2a
--- /dev/null
+++ b/includes/js/dojox/charting/tests/runTests.html
@@ -0,0 +1,9 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <title>Dojox.wire Unit Test Runner</title>
+ <meta http-equiv="REFRESH" content="0;url=../../../util/doh/runner.html?testModule=dojox.charting.tests.charting"></HEAD>
+ <BODY>
+ Redirecting to D.O.H runner.
+ </BODY>
+</HTML>
diff --git a/includes/js/dojox/charting/tests/test_bars.html b/includes/js/dojox/charting/tests/test_bars.html
new file mode 100644
index 0000000..f39c7b1
--- /dev/null
+++ b/includes/js/dojox/charting/tests/test_bars.html
@@ -0,0 +1,65 @@
+<html>
+<head>
+<title>Bar chart</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<style type="text/css">
+ @import "../../../dojo/resources/dojo.css";
+ @import "../../../dijit/tests/css/dijitTests.css";
+</style>
+<!--
+The next line should include Microsoft's Silverligth.js, if you plan to use the silverlight backend
+<script type="text/javascript" src="Silverlight.js"></script>
+-->
+<script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug: true"></script>
+<script type="text/javascript" src="../Chart3D.js"></script>
+<script type="text/javascript" src="../plot3d/Base.js"></script>
+<script type="text/javascript" src="../plot3d/Bars.js"></script>
+<script type="text/javascript">
+
+dojo.require("dojox.charting.Chart3D");
+dojo.require("dojox.charting.plot3d.Bars");
+
+makeObjects = function(){
+ var m = dojox.gfx3d.matrix;
+ var chart = new dojox.charting.Chart3D("test",
+ {
+ lights: [{direction: {x: 5, y: 5, z: -5}, color: "white"}],
+ ambient: {color:"white", intensity: 2},
+ specular: "white"
+ },
+ [m.cameraRotateXg(10), m.cameraRotateYg(-10), m.scale(0.8), m.cameraTranslate(-50, -50, 0)]
+ );
+
+ var plot1 = new dojox.charting.plot3d.Bars(500, 500, {gap: 10, material: "yellow"});
+ plot1.setData([1,2,3,2,1,2,3,4,5]);
+ chart.addPlot(plot1);
+
+ var plot2 = new dojox.charting.plot3d.Bars(500, 500, {gap: 10, material: "red"});
+ plot2.setData([2,3,4,3,2,3,4,5,5]);
+ chart.addPlot(plot2);
+
+ var plot3 = new dojox.charting.plot3d.Bars(500, 500, {gap: 10, material: "blue"});
+ plot3.setData([3,4,5,4,3,4,5,5,5]);
+ chart.addPlot(plot3);
+
+ chart.generate().render();
+
+ //dojo.byId("out1").value = dojo.byId("test").innerHTML;
+ //dojo.byId("out2").value = dojox.gfx.utils.toJson(surface, true);
+};
+
+dojo.addOnLoad(makeObjects);
+
+</script>
+</head>
+<body>
+<h1>Bar chart</h1>
+<div id="test" style="width: 500px; height: 500px;"></div>
+<!--
+<p><button onclick="makeObjects();">Go</button></p>
+<p><textarea id="out1" cols="40" rows="5"></textarea></p>
+<p><textarea id="out2" cols="40" rows="5"></textarea></p>
+-->
+<p>That's all Folks!</p>
+</body>
+</html>
diff --git a/includes/js/dojox/charting/tests/test_chart2d.html b/includes/js/dojox/charting/tests/test_chart2d.html
new file mode 100644
index 0000000..2480730
--- /dev/null
+++ b/includes/js/dojox/charting/tests/test_chart2d.html
@@ -0,0 +1,353 @@
+<html>
+<head>
+<title>Chart 2D</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<style type="text/css">
+ @import "../../../dojo/resources/dojo.css";
+ @import "../../../dijit/tests/css/dijitTests.css";
+</style>
+<!--
+The next line should include Microsoft's Silverligth.js, if you plan to use the silverlight backend
+<script type="text/javascript" src="Silverlight.js"></script>
+-->
+<script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug: true"></script>
+<script type="text/javascript" src="../../lang/functional.js"></script>
+<script type="text/javascript" src="../../lang/utils.js"></script>
+<script type="text/javascript" src="../Theme.js"></script>
+<script type="text/javascript" src="../scaler.js"></script>
+<script type="text/javascript" src="../Element.js"></script>
+<script type="text/javascript" src="../axis2d/common.js"></script>
+<script type="text/javascript" src="../axis2d/Base.js"></script>
+<script type="text/javascript" src="../axis2d/Default.js"></script>
+<script type="text/javascript" src="../plot2d/common.js"></script>
+<script type="text/javascript" src="../plot2d/Base.js"></script>
+<script type="text/javascript" src="../plot2d/Default.js"></script>
+<script type="text/javascript" src="../plot2d/Lines.js"></script>
+<script type="text/javascript" src="../plot2d/Areas.js"></script>
+<script type="text/javascript" src="../plot2d/Markers.js"></script>
+<script type="text/javascript" src="../plot2d/MarkersOnly.js"></script>
+<script type="text/javascript" src="../plot2d/Scatter.js"></script>
+<script type="text/javascript" src="../plot2d/Stacked.js"></script>
+<script type="text/javascript" src="../plot2d/StackedLines.js"></script>
+<script type="text/javascript" src="../plot2d/StackedAreas.js"></script>
+<script type="text/javascript" src="../plot2d/Columns.js"></script>
+<script type="text/javascript" src="../plot2d/StackedColumns.js"></script>
+<script type="text/javascript" src="../plot2d/ClusteredColumns.js"></script>
+<script type="text/javascript" src="../plot2d/Bars.js"></script>
+<script type="text/javascript" src="../plot2d/StackedBars.js"></script>
+<script type="text/javascript" src="../plot2d/ClusteredBars.js"></script>
+<script type="text/javascript" src="../plot2d/Grid.js"></script>
+<script type="text/javascript" src="../plot2d/Pie.js"></script>
+<script type="text/javascript" src="../Chart2D.js"></script>
+<script type="text/javascript">
+
+dojo.require("dojox.charting.Chart2D");
+dojo.require("dojox.charting.themes.PlotKit.blue");
+dojo.require("dojox.charting.themes.PlotKit.cyan");
+dojo.require("dojox.charting.themes.PlotKit.green");
+dojo.require("dojox.charting.themes.PlotKit.orange");
+dojo.require("dojox.charting.themes.PlotKit.purple");
+dojo.require("dojox.charting.themes.PlotKit.red");
+dojo.require("dojox.charting.themes.ET.greys");
+
+makeObjects = function(){
+ var chart1 = new dojox.charting.Chart2D("test1");
+ chart1.addSeries("Series A", [1, 2, 1, 2, 1, 2, 1]);
+ chart1.addSeries("Series B", [2, 1, 2, 1, 2, 1, 2]);
+ chart1.render();
+
+ var chart2 = new dojox.charting.Chart2D("test2");
+ chart2.addSeries("Series A", [1, 2, 1, 2, 1, 2, 1], {stroke: "red"});
+ chart2.addSeries("Series B", [2, 1, 2, 1, 2, 1, 2], {stroke: "blue"});
+ chart2.render();
+
+ var chart3 = new dojox.charting.Chart2D("test3");
+ chart3.addPlot("default", {type: "Areas", tension:2.5});
+ chart3.setTheme(dojox.charting.themes.PlotKit.orange);
+ chart3.addSeries("Series A", [1, 2, 0.5, 1.5, 1, 2.8, 0.4]);
+ chart3.addSeries("Series B", [2.6, 1.8, 2, 1, 1.4, 0.7, 2]);
+ chart3.addSeries("Series C", [6.3, 1.8, 3, 0.5, 4.4, 2.7, 2]);
+ chart3.render();
+
+ var chart4 = new dojox.charting.Chart2D("test4");
+ chart4.addPlot("default", {type: "Areas"});
+ chart4.addSeries("Series A", [1, 2, 1, 2, 1, 2, 1], {stroke: {color: "red", width: 2}, fill: "lightpink"});
+ chart4.addSeries("Series B", [2, 1, 2, 1, 2, 1, 2], {stroke: {color: "blue", width: 2}, fill: "lightblue"});
+ chart4.render();
+
+ var chart5 = new dojox.charting.Chart2D("test5");
+ chart5.setTheme(dojox.charting.themes.PlotKit.blue);
+ chart5.addAxis("x");
+ chart5.addAxis("y", {vertical: true});
+ chart5.addSeries("Series A", [1, 2, 1, 2, 1, 2, 1]);
+ chart5.addSeries("Series B", [2, 1, 2, 1, 2, 1, 2]);
+ chart5.render();
+
+ var chart6 = new dojox.charting.Chart2D("test6");
+ chart6.setTheme(dojox.charting.themes.PlotKit.cyan);
+ chart6.addAxis("x", {fixLower: "minor", fixUpper: "minor"});
+ chart6.addAxis("y", {vertical: true, fixLower: "minor", fixUpper: "minor"});
+ chart6.addSeries("Series A", [1, 2, 1, 2, 1, 2, 1]);
+ chart6.addSeries("Series B", [2, 1, 2, 1, 2, 1, 2]);
+ chart6.render();
+
+ var chart7 = new dojox.charting.Chart2D("test7");
+ chart7.setTheme(dojox.charting.themes.PlotKit.green);
+ chart7.addAxis("x", {fixLower: "major", fixUpper: "major"});
+ chart7.addAxis("y", {vertical: true, fixLower: "major", fixUpper: "major"});
+ chart7.addSeries("Series A", [1, 2, 1, 2, 1, 2, 1]);
+ chart7.addSeries("Series B", [2, 1, 2, 1, 2, 1, 2]);
+ chart7.render();
+
+ var chart8 = new dojox.charting.Chart2D("test8");
+ chart8.setTheme(dojox.charting.themes.PlotKit.purple);
+ chart8.addPlot("default", {type: "Markers"});
+ chart8.addSeries("Series A", [1, 2, 1, 2, 1, 2, 1], {min: 0, max: 3});
+ chart8.addSeries("Series B", [2, 1, 2, 1, 2, 1, 2]);
+ chart8.render();
+
+ var chart9 = new dojox.charting.Chart2D("test9");
+ chart9.addPlot("default", {type: "MarkersOnly"});
+ chart9.addSeries("Series A", [1, 2, 1, 2, 1, 2, 1], {min: 0, max: 3, stroke: {color: "red", width: 2}, marker: "m-3,0 c0,-4 6,-4 6,0 m-6,0 c0,4 6,4 6,0"});
+ chart9.addSeries("Series B", [2, 1, 2, 1, 2, 1, 2], {stroke: {color: "blue", width: 2}, marker: "m-3,-3 l0,6 6,0 0,-6 z"});
+ chart9.render();
+
+ var chart10 = new dojox.charting.Chart2D("test10");
+ chart10.addPlot("default", {type: "Markers", shadows: {dx: 2, dy: 2, dw: 2}});
+ chart10.addSeries("Series A", [1, 2, 1, 2, 1, 2, 1], {min: 0, max: 3, stroke: {color: "red", width: 2, join: "round"}, marker: "m-3,0 c0,-4 6,-4 6,0 m-6,0 c0,4 6,4 6,0"});
+ chart10.addSeries("Series B", [2, 1, 2, 1, 2, 1, 2], {stroke: {color: "blue", width: 2, join: "round"}, marker: "m-3,-3 l0,6 6,0 0,-6 z"});
+ chart10.render();
+
+ var chart11 = new dojox.charting.Chart2D("test11");
+ chart11.addPlot("default", {type: "StackedLines", markers: true, tension:3, shadows: {dx: 2, dy: 2, dw: 2}});
+ chart11.addSeries("Series A", [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6], {stroke: {color: "red", width: 2}, fill: "lightpink", marker: "m-3,-3 l0,6 6,0 0,-6 z"});
+ chart11.addSeries("Series B", [1, 1.6, 1.3, 1.4, 1.1, 1.5, 1.1], {stroke: {color: "blue", width: 2}, fill: "lightblue", marker: "m-3,0 c0,-4 6,-4 6,0 m-6,0 c0,4 6,4 6,0"});
+ chart11.addSeries("Series C", [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6], {stroke: {color: "green", width: 2}, fill: "lightgreen", marker: "m0,-3 l3,3 -3,3 -3,-3 z"});
+ chart11.render();
+
+ var chart12 = new dojox.charting.Chart2D("test12");
+ chart12.addAxis("x", {fixLower: "major", fixUpper: "major"});
+ chart12.addAxis("y", {vertical: true, fixLower: "major", fixUpper: "major"});
+ chart12.addPlot("default", {type: "StackedAreas", tension:3});
+ chart12.addSeries("Series A", [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6], {stroke: {color: "red", width: 2}, fill: "lightpink"});
+ chart12.addSeries("Series B", [1, 1.6, 1.3, 1.4, 1.1, 1.5, 1.1], {stroke: {color: "blue", width: 2}, fill: "lightblue"});
+ chart12.addSeries("Series C", [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6], {stroke: {color: "green", width: 2}, fill: "lightgreen"});
+ chart12.render();
+
+ var chart13 = new dojox.charting.Chart2D("test13");
+ chart13.addPlot("default", {type: "Columns"});
+ chart13.addSeries("Series A", [1, 2, 3, 4, 5], {stroke: {color: "red"}, fill: "lightpink"});
+ chart13.addSeries("Series B", [5, 4, 3, 2, 1], {stroke: {color: "blue"}, fill: "lightblue"});
+ chart13.render();
+
+ var chart14 = new dojox.charting.Chart2D("test14");
+ chart14.addAxis("y", {vertical: true, fixLower: "major", fixUpper: "major"});
+ chart14.addPlot("default", {type: "Columns", gap: 2});
+ chart14.addSeries("Series A", [1, 2, 3, 4, 5], {stroke: {color: "red"}, fill: "lightpink"});
+ chart14.addSeries("Series B", [5, 4, 3, 2, 1], {stroke: {color: "blue"}, fill: "lightblue"});
+ chart14.render();
+
+ var chart15 = new dojox.charting.Chart2D("test15");
+ chart15.addPlot("default", {type: "StackedColumns"});
+ chart15.addSeries("Series A", [1, 2, 3, 4, 5], {stroke: {color: "red"}, fill: "lightpink"});
+ chart15.addSeries("Series B", [2, 1, 2, 1, 2], {stroke: {color: "blue"}, fill: "lightblue"});
+ chart15.render();
+
+ var chart16 = new dojox.charting.Chart2D("test16");
+ chart16.addAxis("x", {fixLower: "major", fixUpper: "major", includeZero: true});
+ chart16.addAxis("y", {vertical: true, fixLower: "major", fixUpper: "major", natural: true});
+ chart16.addPlot("default", {type: "Bars"});
+ chart16.addSeries("Series A", [1, 2, 3, 4, 5], {stroke: {color: "red"}, fill: "lightpink"});
+ chart16.addSeries("Series B", [5, 4, 3, 2, 1], {stroke: {color: "blue"}, fill: "lightblue"});
+ chart16.render();
+
+ var chart17 = new dojox.charting.Chart2D("test17");
+ chart17.addPlot("default", {type: "StackedBars"});
+ chart17.addSeries("Series A", [1, 2, 3, 4, 5], {stroke: {color: "red"}, fill: "lightpink"});
+ chart17.addSeries("Series B", [2, 1, 2, 1, 2], {stroke: {color: "blue"}, fill: "lightblue"});
+ chart17.render();
+
+ var chart18 = new dojox.charting.Chart2D("test18");
+ chart18.addAxis("x", {fixLower: "minor", fixUpper: "minor", natural: true});
+ chart18.addAxis("y", {vertical: true, fixLower: "major", fixUpper: "major", includeZero: true});
+ chart18.addPlot("default", {type: "ClusteredColumns", gap: 10});
+ chart18.addSeries("Series A", [1, 2, 3, 4, 5], {stroke: {color: "red"}, fill: "lightpink"});
+ chart18.addSeries("Series B", [5, 4, 3, 2, 1], {stroke: {color: "blue"}, fill: "lightblue"});
+ chart18.render();
+
+ var chart19 = new dojox.charting.Chart2D("test19");
+ chart19.addAxis("x", {fixLower: "major", fixUpper: "major", includeZero: true});
+ chart19.addAxis("y", {vertical: true, fixLower: "minor", fixUpper: "minor", natural: true});
+ chart19.addPlot("default", {type: "ClusteredBars", gap: 5});
+ chart19.addSeries("Series A", [1, 2, 3, 4, 5], {stroke: {color: "red"}, fill: "lightpink"});
+ chart19.addSeries("Series B", [5, 4, 3, 2, 1], {stroke: {color: "blue"}, fill: "lightblue"});
+ chart19.render();
+
+ var chart20 = new dojox.charting.Chart2D("test20");
+ chart20.addAxis("x", {fixLower: "minor", fixUpper: "minor", natural: true});
+ chart20.addAxis("y", {vertical: true, fixLower: "major", fixUpper: "major", minorTicks: false, includeZero: true});
+ chart20.addPlot("front_grid", {type: "Grid", hMajorLines: true, vMajorLines: false});
+ chart20.addPlot("default", {type: "Columns", gap: 10});
+ chart20.addPlot("back_grid", {type: "Grid", hMajorLines: false, vMajorLines: true});
+ chart20.addSeries("Series A", [1, 2, 3, 4, 5], {stroke: {color: "red"}, fill: "lightpink"});
+ chart20.addSeries("Series B", [5, 4, 3, 2, 1], {stroke: {color: "blue"}, fill: "lightblue"});
+ chart20.render();
+
+ var chart21 = new dojox.charting.Chart2D("test21");
+ chart21.addAxis("x", {fixLower: "minor", fixUpper: "minor", natural: true});
+ chart21.addAxis("y", {vertical: true, fixLower: "major", fixUpper: "major",
+ includeZero: true, min: 0, max: 8, minorLabels: false,
+ majorTicks: true, minorTicks: true, microTicks: false,
+ majorTickStep: 2, minorTickStep: 1, microTickStep: 0.5});
+ chart21.addPlot("front_grid", {type: "Grid", hMajorLines: true, vMajorLines: false});
+ chart21.addPlot("default", {type: "Columns", gap: 10});
+ chart21.addPlot("back_grid", {type: "Grid", hMajorLines: false, vMajorLines: true});
+ chart21.addSeries("Series A", [1, 2, 3, 4, 5], {stroke: {color: "red"}, fill: "lightpink"});
+ chart21.addSeries("Series B", [5, 4, 3, 2, 1], {stroke: {color: "blue"}, fill: "lightblue"});
+ chart21.render();
+
+ var chart22 = new dojox.charting.Chart2D("test22");
+ chart22.addAxis("x");
+ chart22.addAxis("y", {vertical: true});
+ chart22.addPlot("default", {type: "Columns", gap: 10});
+ chart22.addPlot("grid", {type: "Grid"});
+ chart22.addSeries("Series A", [2, 1, 0.5, -1, -2], {stroke: {color: "red"}, fill: "lightpink"});
+ chart22.addSeries("Series B", [-2, -1, -0.5, 1, 2], {stroke: {color: "blue"}, fill: "lightblue"});
+ chart22.render();
+
+ var chart23 = new dojox.charting.Chart2D("test23");
+ chart23.addAxis("x");
+ chart23.addAxis("y", {vertical: true});
+ chart23.addPlot("default", {type: "ClusteredColumns", gap: 10});
+ chart23.addPlot("grid", {type: "Grid"});
+ chart23.addSeries("Series A", [2, 1, 0.5, -1, -2], {stroke: {color: "red"}, fill: "lightpink"});
+ chart23.addSeries("Series B", [-2, -1, -0.5, 1, 2], {stroke: {color: "blue"}, fill: "lightblue"});
+ chart23.addSeries("Series C", [1, 0.5, -1, -2, -3], {stroke: {color: "green"}, fill: "lightgreen"});
+ chart23.render();
+
+ var chart24 = new dojox.charting.Chart2D("test24");
+ chart24.addAxis("x");
+ chart24.addAxis("y", {vertical: true});
+ chart24.addPlot("default", {type: "Bars", gap: 10});
+ chart24.addPlot("grid", {type: "Grid"});
+ chart24.addSeries("Series A", [2, 1, 0.5, -1, -2], {stroke: {color: "red"}, fill: "lightpink"});
+ chart24.addSeries("Series B", [-2, -1, -0.5, 1, 2], {stroke: {color: "blue"}, fill: "lightblue"});
+ chart24.render();
+
+ var chart25 = new dojox.charting.Chart2D("test25");
+ chart25.addAxis("x");
+ chart25.addAxis("y", {vertical: true});
+ chart25.addPlot("default", {type: "ClusteredBars", gap: 10});
+ chart25.addPlot("grid", {type: "Grid"});
+ chart25.addSeries("Series A", [2, 1, 0.5, -1, -2], {stroke: {color: "red"}, fill: "lightpink"});
+ chart25.addSeries("Series B", [-2, -1, -0.5, 1, 2], {stroke: {color: "blue"}, fill: "lightblue"});
+ chart25.addSeries("Series C", [1, 0.5, -1, -2, -3], {stroke: {color: "green"}, fill: "lightgreen"});
+ chart25.render();
+
+ var chart26 = new dojox.charting.Chart2D("test26");
+ chart26.setTheme(dojox.charting.themes.PlotKit.red);
+ chart26.addAxis("x", {min: 0, max: 6, majorTick: {stroke: "black", length: 3}, minorTick: {stroke: "gray", length: 3}});
+ chart26.addAxis("y", {vertical: true, min: 0, max: 10, majorTick: {stroke: "black", length: 3}, minorTick: {stroke: "gray", length: 3}});
+ chart26.addSeries("Series A", [{x: 0.5, y: 5}, {x: 1.5, y: 1.5}, {x: 2, y: 9}, {x: 5, y: 0.3}]);
+ chart26.addSeries("Series B", [{x: 0.3, y: 8}, {x: 4, y: 6}, {x: 5.5, y: 2}]);
+ chart26.render();
+
+ var chart27 = new dojox.charting.Chart2D("test27");
+ chart27.setTheme(dojox.charting.themes.PlotKit.purple);
+ chart27.addPlot("default", {type: "Scatter"});
+ chart27.addAxis("x", {min: 0, max: 6, majorTick: {stroke: "black", length: 3}, minorTick: {stroke: "gray", length: 3}});
+ chart27.addAxis("y", {vertical: true, min: 0, max: 10, majorTick: {stroke: "black", length: 3}, minorTick: {stroke: "gray", length: 3}});
+ chart27.addSeries("Series A", [{x: 0.5, y: 5}, {x: 1.5, y: 1.5}, {x: 2, y: 9}, {x: 5, y: 0.3}]);
+ chart27.addSeries("Series B", [{x: 0.3, y: 8}, {x: 4, y: 6}, {x: 5.5, y: 2}]);
+ chart27.render();
+
+ var chart28 = new dojox.charting.Chart2D("test28");
+ chart28.setTheme(dojox.charting.themes.PlotKit.blue);
+ chart28.addPlot("default", {type: "Default", lines: true, markers: true, tension:2});
+ chart28.addAxis("x", {min: 0, max: 6, majorTick: {stroke: "black", length: 3}, minorTick: {stroke: "gray", length: 3}});
+ chart28.addAxis("y", {vertical: true, min: 0, max: 10, majorTick: {stroke: "black", length: 3}, minorTick: {stroke: "gray", length: 3}});
+ chart28.addSeries("Series A", [{x: 0.5, y: 5}, {x: 1.5, y: 1.5}, {x: 2, y: 9}, {x: 5, y: 0.3}]);
+ chart28.addSeries("Series B", [{x: 0.3, y: 8}, {x: 4, y: 6}, {x: 5.5, y: 2}]);
+ chart28.render();
+
+ var chart29 = new dojox.charting.Chart2D("test29");
+ chart29.setTheme(dojox.charting.themes.ET.greys);
+ chart29.addAxis("x", {fixLower: "minor", fixUpper: "minor", natural: true});
+ chart29.addAxis("y", {vertical: true, fixLower: "major", fixUpper: "major", includeZero: true});
+ chart29.addPlot("default", {type: "ClusteredColumns", gap: 10});
+ chart29.addSeries("Series A", [2, 1, 0.5, -1, -2] );
+ chart29.addSeries("Series B", [-2, -1, -0.5, 1, 2] );
+ chart29.addSeries("Series C", [1, 0.5, -1, -2, -3] );
+ chart29.addSeries("Series D", [0.7, 1.5, -1.2, -1.25, 3] );
+ chart29.render();
+
+};
+
+dojo.addOnLoad(makeObjects);
+
+</script>
+</head>
+<body>
+<h1>Chart 2D</h1>
+<!--<p><button onclick="makeObjects();">Go</button></p>-->
+<p>1: Defaults: lines, no axes.</p>
+<div id="test1" style="width: 400px; height: 200px;"></div>
+<p>2: Defaults: lines, no axes, and custom strokes.</p>
+<div id="test2" style="width: 200px; height: 200px;"></div>
+<p>3: Areas, orange theme, no axes.</p>
+<div id="test3" style="width: 400px; height: 400px;"></div>
+<p>4: Areas, no axes, custom strokes and fills.</p>
+<div id="test4" style="width: 400px; height: 200px;"></div>
+<p>5: Lines, axes, blue theme.</p>
+<div id="test5" style="width: 400px; height: 200px;"></div>
+<p>6: Lines, axes (aligned on minor ticks), cyan theme.</p>
+<div id="test6" style="width: 400px; height: 200px;"></div>
+<p>7: Lines, axes (aligned on major ticks), green theme.</p>
+<div id="test7" style="width: 400px; height: 200px;"></div>
+<p>8: Lines and markers, no axes, purple theme, custom min/max.</p>
+<div id="test8" style="width: 400px; height: 200px;"></div>
+<p>9: Markers only, no axes, custom theme, custom markers, custom min/max.</p>
+<div id="test9" style="width: 400px; height: 200px;"></div>
+<p>10: Lines and markers, shadows, no axes, custom theme, custom markers, custom min/max.</p>
+<div id="test10" style="width: 400px; height: 200px;"></div>
+<p>11: Stacked lines, markers, shadows, no axes, custom strokes, fills, and markers.</p>
+<div id="test11" style="width: 200px; height: 200px;"></div>
+<p>12: Stacked areas, axes (aligned on major ticks), custom strokes and fills.</p>
+<div id="test12" style="width: 400px; height: 200px;"></div>
+<p>13: Columns, no axes, custom strokes and fills.</p>
+<div id="test13" style="width: 400px; height: 200px;"></div>
+<p>14: Columns with gaps beetwen them, vertical axis aligned on major ticks, custom strokes, fills.</p>
+<div id="test14" style="width: 400px; height: 200px;"></div>
+<p>15: Stacked columns, no axes, custom strokes and fills.</p>
+<div id="test15" style="width: 400px; height: 200px;"></div>
+<p>16: Bars, axes aligned on major ticks, no minor ticks, custom strokes and fills.</p>
+<div id="test16" style="width: 400px; height: 200px;"></div>
+<p>17: Stacked bars, no axes, custom strokes and fills.</p>
+<div id="test17" style="width: 400px; height: 200px;"></div>
+<p>18: Clustered columns, custom axes, custom strokes, fills, and gap.</p>
+<div id="test18" style="width: 400px; height: 200px;"></div>
+<p>19: Clustered bars, custom axes, custom strokes, fills, and gap.</p>
+<div id="test19" style="width: 400px; height: 200px;"></div>
+<p>20: Columns with gaps beetwen them, grids, custom strokes, fills, axes.</p>
+<div id="test20" style="width: 400px; height: 200px;"></div>
+<p>21: Columns with gaps beetwen them, grids, custom strokes, fills, axes, with min=0, max=8, and manually specified ticks on the vertical axis.</p>
+<div id="test21" style="width: 400px; height: 200px;"></div>
+<p>22: Columns with positive and negative values, axes, and grid.</p>
+<div id="test22" style="width: 400px; height: 200px;"></div>
+<p>23: Clustered columns with positive and negative values, axes, and grid.</p>
+<div id="test23" style="width: 400px; height: 200px;"></div>
+<p>24: Bars with positive and negative values, axes, and grid.</p>
+<div id="test24" style="width: 400px; height: 200px;"></div>
+<p>25: Clustered bars with positive and negative values, axes, and grid.</p>
+<div id="test25" style="width: 400px; height: 200px;"></div>
+<p>26: Default lines with 2D data, custom axis, red theme.</p>
+<div id="test26" style="width: 400px; height: 200px;"></div>
+<p>27: Scatter chart, custom axis, purple theme.</p>
+<div id="test27" style="width: 400px; height: 200px;"></div>
+<p>28: Markers, lines, 2D data, custom axis, blue theme.</p>
+<div id="test28" style="width: 400px; height: 200px;"></div>
+<p>29: Clustered columns with positive and negative values, readable theme.</p>
+<div id="test29" style="width: 500px; height: 300px;"></div>
+<p>That's all Folks!</p>
+</body>
+</html>
diff --git a/includes/js/dojox/charting/tests/test_chart2d_updating.html b/includes/js/dojox/charting/tests/test_chart2d_updating.html
new file mode 100644
index 0000000..6a7641b
--- /dev/null
+++ b/includes/js/dojox/charting/tests/test_chart2d_updating.html
@@ -0,0 +1,80 @@
+<html>
+<head>
+<title>Chart 2D</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<style type="text/css">
+ @import "../../../dojo/resources/dojo.css";
+ @import "../../../dijit/tests/css/dijitTests.css";
+</style>
+<!--
+The next line should include Microsoft's Silverligth.js, if you plan to use the silverlight backend
+<script type="text/javascript" src="Silverlight.js"></script>
+-->
+<script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug: true"></script>
+<script type="text/javascript" src="../../lang/functional.js"></script>
+<script type="text/javascript" src="../Theme.js"></script>
+<script type="text/javascript" src="../scaler.js"></script>
+<script type="text/javascript" src="../Chart2D.js"></script>
+<script type="text/javascript">
+
+dojo.require("dojox.charting.Chart2D");
+dojo.require("dojox.charting.themes.PlotKit.orange");
+
+var chart, limit = 10, magnitude = 30;
+
+var randomValue = function(){
+ return Math.random() * magnitude;
+};
+
+var makeSeries = function(len){
+ var s = [];
+ do{
+ s.push(randomValue());
+ }while(s.length < len);
+ return s;
+};
+
+var seriesA = makeSeries(limit),
+ seriesB = makeSeries(limit),
+ seriesC = makeSeries(limit);
+
+var makeObjects = function(){
+ chart = new dojox.charting.Chart2D("test");
+ chart.setTheme(dojox.charting.themes.PlotKit.orange);
+ chart.addAxis("x", {fixLower: "minor", natural: true, min: 1, max: limit});
+ chart.addAxis("y", {vertical: true, min: 0, max: 30, majorTickStep: 5, minorTickStep: 1});
+ chart.addPlot("default", {type: "Areas"});
+ chart.addSeries("Series A", seriesA);
+ chart.addSeries("Series B", seriesB);
+ chart.addSeries("Series C", seriesC);
+ chart.addPlot("grid", {type: "Grid", hMinorLines: true});
+ chart.render();
+ setInterval(function(){updateTest();}, 200);
+};
+
+var updateTest = function(){
+ seriesA.shift();
+ seriesA.push(randomValue());
+ chart.updateSeries("Series A", seriesA);
+
+ seriesB.shift();
+ seriesB.push(randomValue());
+ chart.updateSeries("Series B", seriesB);
+
+ seriesC.shift();
+ seriesC.push(randomValue());
+ chart.updateSeries("Series C", seriesC);
+
+ chart.render();
+};
+
+dojo.addOnLoad(makeObjects);
+
+</script>
+</head>
+<body>
+<h1>Chart 2D Updating Data</h1>
+<p>Areas, orange theme, axes, grid. Very crude example to show a chart with updating values.</p>
+<div id="test" style="width: 400px; height: 400px;"></div>
+</body>
+</html>
diff --git a/includes/js/dojox/charting/tests/test_cylinders.html b/includes/js/dojox/charting/tests/test_cylinders.html
new file mode 100644
index 0000000..9a3cc66
--- /dev/null
+++ b/includes/js/dojox/charting/tests/test_cylinders.html
@@ -0,0 +1,65 @@
+<html>
+<head>
+<title>Cylinder chart</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<style type="text/css">
+ @import "../../../dojo/resources/dojo.css";
+ @import "../../../dijit/tests/css/dijitTests.css";
+</style>
+<!--
+The next line should include Microsoft's Silverligth.js, if you plan to use the silverlight backend
+<script type="text/javascript" src="Silverlight.js"></script>
+-->
+<script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug: true"></script>
+<script type="text/javascript" src="../Chart3D.js"></script>
+<script type="text/javascript" src="../plot3d/Base.js"></script>
+<script type="text/javascript" src="../plot3d/Cylinders.js"></script>
+<script type="text/javascript">
+
+dojo.require("dojox.charting.Chart3D");
+dojo.require("dojox.charting.plot3d.Cylinders");
+
+makeObjects = function(){
+ var m = dojox.gfx3d.matrix;
+ var chart = new dojox.charting.Chart3D("test",
+ {
+ lights: [{direction: {x: 5, y: 5, z: -5}, color: "white"}],
+ ambient: {color:"white", intensity: 2},
+ specular: "white"
+ },
+ [m.cameraRotateXg(10), m.cameraRotateYg(-10), m.scale(0.8), m.cameraTranslate(-50, -50, 0)]
+ );
+
+ var plot1 = new dojox.charting.plot3d.Cylinders(500, 500, {gap: 10, material: "yellow"});
+ plot1.setData([1,2,3,2,1,2,3,4,5]);
+ chart.addPlot(plot1);
+
+ var plot2 = new dojox.charting.plot3d.Cylinders(500, 500, {gap: 10, material: "red"});
+ plot2.setData([2,3,4,3,2,3,4,5,5]);
+ chart.addPlot(plot2);
+
+ var plot3 = new dojox.charting.plot3d.Cylinders(500, 500, {gap: 10, material: "blue"});
+ plot3.setData([3,4,5,4,3,4,5,5,5]);
+ chart.addPlot(plot3);
+
+ chart.generate().render();
+
+ //dojo.byId("out1").value = dojo.byId("test").innerHTML;
+ //dojo.byId("out2").value = dojox.gfx.utils.toJson(surface, true);
+};
+
+dojo.addOnLoad(makeObjects);
+
+</script>
+</head>
+<body>
+<h1>Cylinder chart</h1>
+<div id="test" style="width: 500px; height: 500px;"></div>
+<!--
+<p><button onclick="makeObjects();">Go</button></p>
+<p><textarea id="out1" cols="40" rows="5"></textarea></p>
+<p><textarea id="out2" cols="40" rows="5"></textarea></p>
+-->
+<p>That's all Folks!</p>
+</body>
+</html>
diff --git a/includes/js/dojox/charting/tests/test_labels2d.html b/includes/js/dojox/charting/tests/test_labels2d.html
new file mode 100644
index 0000000..299385e
--- /dev/null
+++ b/includes/js/dojox/charting/tests/test_labels2d.html
@@ -0,0 +1,90 @@
+<html>
+<head>
+<title>Chart 2D</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<style type="text/css">
+ @import "../../../dojo/resources/dojo.css";
+ @import "../../../dijit/tests/css/dijitTests.css";
+</style>
+<!--
+The next line should include Microsoft's Silverligth.js, if you plan to use the silverlight backend
+<script type="text/javascript" src="Silverlight.js"></script>
+-->
+<script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug: true"></script>
+<script type="text/javascript" src="../../lang/functional.js"></script>
+<script type="text/javascript" src="../../lang/utils.js"></script>
+<script type="text/javascript" src="../Theme.js"></script>
+<script type="text/javascript" src="../scaler.js"></script>
+<script type="text/javascript" src="../Element.js"></script>
+<script type="text/javascript" src="../axis2d/common.js"></script>
+<script type="text/javascript" src="../axis2d/Base.js"></script>
+<script type="text/javascript" src="../axis2d/Default.js"></script>
+<script type="text/javascript" src="../plot2d/common.js"></script>
+<script type="text/javascript" src="../plot2d/Base.js"></script>
+<script type="text/javascript" src="../plot2d/Default.js"></script>
+<script type="text/javascript" src="../plot2d/Lines.js"></script>
+<script type="text/javascript" src="../plot2d/Areas.js"></script>
+<script type="text/javascript" src="../plot2d/Markers.js"></script>
+<script type="text/javascript" src="../plot2d/MarkersOnly.js"></script>
+<script type="text/javascript" src="../plot2d/Stacked.js"></script>
+<script type="text/javascript" src="../plot2d/StackedLines.js"></script>
+<script type="text/javascript" src="../plot2d/StackedAreas.js"></script>
+<script type="text/javascript" src="../plot2d/Columns.js"></script>
+<script type="text/javascript" src="../plot2d/StackedColumns.js"></script>
+<script type="text/javascript" src="../plot2d/ClusteredColumns.js"></script>
+<script type="text/javascript" src="../plot2d/Bars.js"></script>
+<script type="text/javascript" src="../plot2d/StackedBars.js"></script>
+<script type="text/javascript" src="../plot2d/ClusteredBars.js"></script>
+<script type="text/javascript" src="../plot2d/Grid.js"></script>
+<script type="text/javascript" src="../plot2d/Pie.js"></script>
+<script type="text/javascript" src="../Chart2D.js"></script>
+<script type="text/javascript">
+
+dojo.require("dojox.charting.Chart2D");
+dojo.require("dojox.charting.themes.PlotKit.blue");
+dojo.require("dojox.charting.themes.PlotKit.cyan");
+dojo.require("dojox.charting.themes.PlotKit.green");
+dojo.require("dojox.charting.themes.PlotKit.orange");
+dojo.require("dojox.charting.themes.PlotKit.purple");
+dojo.require("dojox.charting.themes.PlotKit.red");
+
+makeObjects = function(){
+ var chart1 = new dojox.charting.Chart2D("test1");
+ chart1.addAxis("x", {fixLower: "major", fixUpper: "major", includeZero: true});
+ chart1.addAxis("y", {vertical: true, fixLower: "major", fixUpper: "major", natural: true});
+ chart1.addPlot("default", {type: "Bars"});
+ chart1.addSeries("Series A", [1, 2, 3, 4, 5], {stroke: {color: "red"}, fill: "lightpink"});
+ chart1.addSeries("Series B", [5, 4, 3, 2, 1], {stroke: {color: "blue"}, fill: "lightblue"});
+ chart1.render();
+
+ var chart2 = new dojox.charting.Chart2D("test2");
+ chart2.addAxis("x", {
+ fixLower: "major", fixUpper: "major", includeZero: true,
+ labels: [{value: 0, text: "zero"}, {value: 2, text: "two"}, {value: 4, text: "four"}]
+ });
+ chart2.addAxis("y", {
+ vertical: true, fixLower: "major", fixUpper: "major", natural: true,
+ labels: [{value: 0, text: ""}, {value: 1, text: "Jan"}, {value: 2, text: "Feb"},
+ {value: 3, text: "Mar"}, {value: 4, text: "Apr"},
+ {value: 5, text: "May"}, {value: 6, text: "Jun"}]
+ });
+ chart2.addPlot("default", {type: "Bars"});
+ chart2.addSeries("Series A", [1, 2, 3, 4, 5], {stroke: {color: "red"}, fill: "lightpink"});
+ chart2.addSeries("Series B", [5, 4, 3, 2, 1], {stroke: {color: "blue"}, fill: "lightblue"});
+ chart2.render();
+};
+
+dojo.addOnLoad(makeObjects);
+
+</script>
+</head>
+<body>
+<h1>Chart 2D</h1>
+<!--<p><button onclick="makeObjects();">Go</button></p>-->
+<p>1: Bars, axes aligned on major ticks, no minor ticks, custom strokes and fills.</p>
+<div id="test1" style="width: 200px; height: 200px;"></div>
+<p>2: Bars, axes aligned on major ticks, no minor ticks, custom strokes and fills, custom labels.</p>
+<div id="test2" style="width: 200px; height: 200px;"></div>
+<p>That's all Folks!</p>
+</body>
+</html>
diff --git a/includes/js/dojox/charting/tests/test_pie2d.html b/includes/js/dojox/charting/tests/test_pie2d.html
new file mode 100644
index 0000000..9fe6827
--- /dev/null
+++ b/includes/js/dojox/charting/tests/test_pie2d.html
@@ -0,0 +1,128 @@
+<html>
+<head>
+<title>Pie 2D</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<style type="text/css">
+ @import "../../../dojo/resources/dojo.css";
+ @import "../../../dijit/tests/css/dijitTests.css";
+</style>
+<!--
+The next line should include Microsoft's Silverligth.js, if you plan to use the silverlight backend
+<script type="text/javascript" src="Silverlight.js"></script>
+-->
+<script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug: true"></script>
+<script type="text/javascript" src="../../lang/functional.js"></script>
+<script type="text/javascript" src="../../lang/functional/fold.js"></script>
+<script type="text/javascript" src="../../lang/utils.js"></script>
+<script type="text/javascript" src="../Theme.js"></script>
+<script type="text/javascript" src="../scaler.js"></script>
+<script type="text/javascript" src="../Element.js"></script>
+<script type="text/javascript" src="../plot2d/Pie.js"></script>
+<script type="text/javascript" src="../Chart2D.js"></script>
+<script type="text/javascript">
+
+dojo.require("dojox.charting.Chart2D");
+dojo.require("dojox.charting.themes.PlotKit.blue");
+dojo.require("dojox.charting.themes.PlotKit.green");
+dojo.require("dojox.charting.themes.PlotKit.red");
+
+makeObjects = function(){
+ var chart1 = new dojox.charting.Chart2D("test1");
+ chart1.setTheme(dojox.charting.themes.PlotKit.blue);
+ chart1.addPlot("default", {
+ type: "Pie",
+ font: "normal normal bold 12pt Tahoma",
+ fontColor: "white",
+ labelOffset: 40
+ });
+ chart1.addSeries("Series A", [4, 2, 1, 1]);
+ chart1.render();
+
+ var chart2 = new dojox.charting.Chart2D("test2");
+ chart2.setTheme(dojox.charting.themes.PlotKit.blue);
+ chart2.addPlot("default", {
+ type: "Pie",
+ font: "normal normal bold 12pt Tahoma",
+ fontColor: "black",
+ labelOffset: -25,
+ precision: 0
+ });
+ chart2.addSeries("Series A", [4, 2, 1, 1]);
+ chart2.render();
+
+ var chart3 = new dojox.charting.Chart2D("test3");
+ chart3.setTheme(dojox.charting.themes.PlotKit.green);
+ chart3.addPlot("default", {
+ type: "Pie",
+ font: "normal normal bold 10pt Tahoma",
+ fontColor: "white",
+ labelOffset: 25,
+ radius: 90
+ });
+ chart3.addSeries("Series A", [4, 2, 1, 1]);
+ chart3.render();
+
+ var chart4 = new dojox.charting.Chart2D("test4");
+ chart4.setTheme(dojox.charting.themes.PlotKit.green);
+ chart4.addPlot("default", {
+ type: "Pie",
+ font: "normal normal bold 10pt Tahoma",
+ fontColor: "black",
+ labelOffset: -25,
+ radius: 90
+ });
+ chart4.addSeries("Series A", [4, 2, 1, 1]);
+ chart4.render();
+
+ var chart5 = new dojox.charting.Chart2D("test5");
+ chart5.setTheme(dojox.charting.themes.PlotKit.red);
+ chart5.addPlot("default", {
+ type: "Pie",
+ font: "normal normal bold 14pt Tahoma",
+ fontColor: "white",
+ labelOffset: 40
+ });
+ chart5.addSeries("Series A", [{y: 4, text: "Red"}, {y: 2, text: "Green"}, {y: 1, text: "Blue"}, {y: 1, text: "Other"}]);
+ chart5.render();
+
+ var chart6 = new dojox.charting.Chart2D("test6");
+ chart6.setTheme(dojox.charting.themes.PlotKit.red);
+ chart6.addPlot("default", {
+ type: "Pie",
+ font: "normal normal bold 14pt Tahoma",
+ fontColor: "white",
+ labelOffset: 40
+ });
+ chart6.addSeries("Series A", [
+ {y: 4, text: "Red", color: "red"},
+ {y: 2, text: "Green", color: "green"},
+ {y: 1, text: "Blue", color: "blue"},
+ {y: 1, text: "Other", color: "white", fontColor: "black"}
+ ]);
+ chart6.render();
+};
+
+dojo.addOnLoad(makeObjects);
+
+</script>
+</head>
+<body>
+<h1>Pie 2D</h1>
+<!--<p><button onclick="makeObjects();">Go</button></p>-->
+<p>1: Pie with internal labels.</p>
+<div id="test1" style="width: 300px; height: 300px;"></div>
+<p>2: Pie with external labels and precision=0.</p>
+<div id="test2" style="width: 300px; height: 300px;"></div>
+<p>3/4: Two pies with internal and external labels with a constant radius.</p>
+<table border="1"><tr>
+ <td><div id="test3" style="width: 300px; height: 300px;"></div></td>
+ <td><div id="test4" style="width: 300px; height: 300px;"></div></td>
+</tr></table>
+<p>5/6: Pie with internal custom labels and custom colors.</p>
+<table border="1"><tr>
+ <td><div id="test5" style="width: 300px; height: 300px;"></div></td>
+ <td><div id="test6" style="width: 300px; height: 300px;"></div></td>
+</tr></table>
+<p>That's all Folks!</p>
+</body>
+</html>
diff --git a/includes/js/dojox/charting/tests/test_scaler.html b/includes/js/dojox/charting/tests/test_scaler.html
new file mode 100644
index 0000000..f717f83
--- /dev/null
+++ b/includes/js/dojox/charting/tests/test_scaler.html
@@ -0,0 +1,97 @@
+<html>
+<head>
+<title>Scaler/tick generator</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<style type="text/css">
+ @import "../../../dojo/resources/dojo.css";
+ @import "../../../dijit/tests/css/dijitTests.css";
+</style>
+<!--
+The next line should include Microsoft's Silverligth.js, if you plan to use the silverlight backend
+<script type="text/javascript" src="Silverlight.js"></script>
+-->
+<script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug: true"></script>
+<script type="text/javascript" src="../scaler.js"></script>
+<script type="text/javascript">
+
+dojo.require("dojox.charting.scaler");
+
+calc = function(){
+ var min = parseFloat(dojo.byId("imin").value);
+ var max = parseFloat(dojo.byId("imax").value);
+ var span = parseFloat(dojo.byId("ispan").value);
+
+ var o = dojox.charting.scaler(
+ min, max, span, {
+ fixLower: dojo.byId("ifl").value,
+ fixUpper: dojo.byId("ifu").value,
+ natural: Boolean(dojo.byId("inat").checked)
+ }
+ );
+
+ dojo.byId("imin").value = min;
+ dojo.byId("imax").value = max;
+ dojo.byId("ispan").value = span;
+
+ dojo.byId("olb").innerHTML = o.bounds.lower;
+ dojo.byId("oub").innerHTML = o.bounds.upper;
+
+ dojo.byId("omajt").innerHTML = o.major.tick;
+ dojo.byId("omajs").innerHTML = o.major.start;
+ dojo.byId("omajc").innerHTML = o.major.count;
+ dojo.byId("omajp").innerHTML = o.major.prec;
+
+ dojo.byId("omint").innerHTML = o.minor.tick;
+ dojo.byId("omins").innerHTML = o.minor.start;
+ dojo.byId("ominc").innerHTML = o.minor.count;
+ dojo.byId("ominp").innerHTML = o.minor.prec;
+
+ dojo.byId("omict").innerHTML = o.micro.tick;
+ dojo.byId("omics").innerHTML = o.micro.start;
+ dojo.byId("omicc").innerHTML = o.micro.count;
+ dojo.byId("omicp").innerHTML = o.micro.prec;
+
+ dojo.byId("oscale").innerHTML = o.scale;
+};
+
+</script>
+</head>
+<body>
+<h1>Scaler/tick generator</h1>
+<h2>Input</h2>
+<table>
+ <tr><th>Name</th><th>Value</th></tr>
+ <tr><td>min</td><td><input type="text" id="imin" /></td></tr>
+ <tr><td>max</td><td><input type="text" id="imax" /></td></tr>
+ <tr><td>span</td><td><input type="text" id="ispan" /></td></tr>
+ <tr><td>natural</td><td><input type="checkbox" id="inat" /></td></tr>
+ <tr><td>fixLower</td><td><input type="text" id="ifl" /></td></tr>
+ <tr><td>fixUpper</td><td><input type="text" id="ifu" /></td></tr>
+</table>
+<p><button onclick="calc()">Calculate!</button></p>
+<h2>Output</h2>
+<table>
+ <tr><th>Name</th><th>Value</th></tr>
+
+ <tr><td>lowerBound</td><td><span id="olb">&nbsp;</span></td></tr>
+ <tr><td>upperBound</td><td><span id="oub">&nbsp;</span></td></tr>
+
+ <tr><td>major.tick</td><td><span id="omajt">&nbsp;</span></td></tr>
+ <tr><td>major.start</td><td><span id="omajs">&nbsp;</span></td></tr>
+ <tr><td>major.count</td><td><span id="omajc">&nbsp;</span></td></tr>
+ <tr><td>major.prec</td><td><span id="omajp">&nbsp;</span></td></tr>
+
+ <tr><td>minor.tick</td><td><span id="omint">&nbsp;</span></td></tr>
+ <tr><td>minor.start</td><td><span id="omins">&nbsp;</span></td></tr>
+ <tr><td>minor.count</td><td><span id="ominc">&nbsp;</span></td></tr>
+ <tr><td>minor.prec</td><td><span id="ominp">&nbsp;</span></td></tr>
+
+ <tr><td>micro.tick</td><td><span id="omict">&nbsp;</span></td></tr>
+ <tr><td>micro.start</td><td><span id="omics">&nbsp;</span></td></tr>
+ <tr><td>micro.count</td><td><span id="omicc">&nbsp;</span></td></tr>
+ <tr><td>micro.prec</td><td><span id="omicp">&nbsp;</span></td></tr>
+
+ <tr><td>scale</td><td><span id="oscale">&nbsp;</span></td></tr>
+</table>
+</body>
+</html>
diff --git a/includes/js/dojox/charting/tests/test_sparklines.html b/includes/js/dojox/charting/tests/test_sparklines.html
new file mode 100644
index 0000000..2d3a36f
--- /dev/null
+++ b/includes/js/dojox/charting/tests/test_sparklines.html
@@ -0,0 +1,180 @@
+<html>
+ <head>
+ <title>Chart 2D -- Sparklines Edition</title>
+ <style type="text/css">
+ @import "../../../dojo/resources/dojo.css";
+ @import "../../../dijit/tests/css/dijitTests.css";
+ .volume { color: #666666; }
+
+ .label {
+ text-align: right;
+ line-height: 1.5em;
+ }
+ </style>
+ <script type="text/javascript" src="../../../dojo/dojo.js"
+ djConfig="isDebug: false, parseOnLoad: true"></script>
+ <script type="text/javascript">
+ dojo.require("dojox.charting.widget.Chart2D");
+ dojo.require("dojox.charting.themes.ET.greys");
+ dojo.require("dojox.data.HtmlStore");
+ dojo.require("dojox.data.CsvStore");
+ dojo.require("dojo.parser");
+ </script>
+
+ </head>
+ <body>
+ <h1>Chart 2D</h1>
+ <p>Sparkline-style charts using dojox.charting</p>
+
+ <div dojoType="dojox.data.HtmlStore" dataId="tableExample" jsId="tableStore"></div>
+ <table id="tableExample" style="display: none;">
+ <thead>
+ <tr><th>value</th></tr>
+ </thead>
+ <tbody>
+ <tr><td>6.3</td></tr>
+ <tr><td>1.8</td></tr>
+ <tr><td>3 </td></tr>
+ <tr><td>0.5</td></tr>
+ <tr><td>4.4</td></tr>
+ <tr><td>2.7</td></tr>
+ <tr><td>2 </td></tr>
+ </tbody>
+ </table>
+
+ <table cellpadding="0" cellspacing="3" border="0">
+ <tr>
+ <td class="label">
+ Simple Sparkline:
+ </td>
+ <td>
+ <div dojoType="dojox.charting.widget.Chart2D"
+ theme="dojox.charting.themes.ET.greys"
+ margins="{ l: 0, r: 0, t: 0, b: 0 }"
+ style="width: 100px; height: 15px;">
+ <div class="plot" name="default" type="Lines"></div>
+ <div class="series" name="Series A" store="tableStore" valueFn="Number(x)"></div>
+ </div>
+ </td>
+ <td>
+ 7 arbitrary data points
+ </td>
+ </tr>
+ <tr>
+ <td class="label">
+ <a href="http://finance.google.com/finance?q=Google">Google </a> Closing Price &amp; <span class="volume">Volume</span>:
+ </td>
+ <td>
+
+ <div dojoType="dojox.data.CsvStore" jsId="googStore"
+ url="data/goog_prices.csv"></div>
+ <div dojoType="dojox.charting.widget.Chart2D"
+ theme="dojox.charting.themes.ET.greys"
+ margins="{ l: 0, r: 0, t: 0, b: 0 }"
+ style="width: 100px; height: 15px;">
+ <div class="plot" name="default" type="Lines"></div>
+ <div class="series"
+ name="Closing Price"
+ plot="default"
+ store="googStore"
+ count="Infinity"
+ field="Close"
+ sort="[{ attribute: 'Date', descending: false }]"
+ valueFn="Number(x)"></div>
+ <div class="plot" name="volume" type="Areas"></div>
+ <div class="series"
+ name="Volume"
+ plot="volume"
+ store="googStore"
+ count="Infinity"
+ field="Volume"
+ sort="[{ attribute: 'Date', descending: false }]"
+ stroke="{ color: '#666666', width: 0 }"
+ fill="'#b3b3b3'"
+ valueFn="Number(x/100000)"></div>
+ </div>
+
+ </td>
+ <td>
+ ~1400 data points, all trading days since Jan '05
+ </td>
+ </tr>
+ <tr>
+ <td class="label">
+ <a href="http://finance.google.com/finance?q=Yahoo">Yahoo</a> Closing Price &amp; <span class="volume">Volume</span>:
+ </td>
+ <td>
+
+ <div dojoType="dojox.data.CsvStore" jsId="yahooStore"
+ url="data/yahoo_prices.csv"></div>
+ <div dojoType="dojox.charting.widget.Chart2D"
+ theme="dojox.charting.themes.ET.greys"
+ margins="{ l: 0, r: 0, t: 0, b: 0 }"
+ style="width: 100px; height: 15px;">
+ <div class="plot" name="default" type="Lines"></div>
+ <div class="series"
+ name="Closing Price"
+ plot="default"
+ store="yahooStore"
+ count="Infinity"
+ field="Close"
+ sort="[{ attribute: 'Date', descending: false }]"
+ valueFn="Number(x)"></div>
+ <div class="plot" name="volume" type="Areas"></div>
+ <div class="series"
+ name="Volume"
+ plot="volume"
+ store="yahooStore"
+ count="Infinity"
+ field="Volume"
+ sort="[{ attribute: 'Date', descending: false }]"
+ stroke="{ color: '#666666', width: 0 }"
+ fill="'#b3b3b3'"
+ valueFn="Number(x/100000)"></div>
+ </div>
+
+ </td>
+ <td>
+ </td>
+ </tr>
+ <tr>
+ <td class="label">
+ <a href="http://finance.google.com/finance?q=Microsoft">Microsoft</a> Closing Price &amp; <span class="volume">Volume</span>:
+ </td>
+ <td>
+ <div dojoType="dojox.data.CsvStore" jsId="msftStore"
+ url="data/msft_prices.csv"></div>
+ <div dojoType="dojox.charting.widget.Chart2D"
+ theme="dojox.charting.themes.ET.greys"
+ margins="{ l: 0, r: 0, t: 0, b: 0 }"
+ style="width: 100px; height: 15px;">
+ <div class="plot" name="default" type="Lines"></div>
+ <div class="series"
+ name="Closing Price"
+ plot="default"
+ store="msftStore"
+ count="Infinity"
+ field="Close"
+ sort="[{ attribute: 'Date', descending: false }]"
+ valueFn="Number(x)"></div>
+ <div class="plot" name="volume" type="Areas"></div>
+ <div class="series"
+ name="Volume"
+ plot="volume"
+ store="msftStore"
+ count="Infinity"
+ field="Volume"
+ sort="[{ attribute: 'Date', descending: false }]"
+ stroke="{ color: '#666666', width: 0 }"
+ fill="'#b3b3b3'"
+ valueFn="Number(x/100000)"></div>
+ </div>
+
+ </td>
+ <td>
+ </td>
+ </tr>
+
+ </table>
+ </body>
+</html>
diff --git a/includes/js/dojox/charting/tests/test_widget2d.html b/includes/js/dojox/charting/tests/test_widget2d.html
new file mode 100644
index 0000000..f97719f
--- /dev/null
+++ b/includes/js/dojox/charting/tests/test_widget2d.html
@@ -0,0 +1,98 @@
+<html>
+<head>
+<title>Chart 2D</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<style type="text/css">
+ @import "../../../dojo/resources/dojo.css";
+ @import "../../../dijit/tests/css/dijitTests.css";
+</style>
+<!--
+The next line should include Microsoft's Silverligth.js, if you plan to use the silverlight backend
+<script type="text/javascript" src="Silverlight.js"></script>
+-->
+<script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug: true, parseOnLoad: true"></script>
+<script type="text/javascript" src="../../lang/functional.js"></script>
+<script type="text/javascript" src="../Theme.js"></script>
+<script type="text/javascript" src="../scaler.js"></script>
+<script type="text/javascript" src="../Chart2D.js"></script>
+<script type="text/javascript" src="../widget/Chart2D.js"></script>
+
+<script type="text/javascript">
+ dojo.require("dojox.charting.widget.Chart2D");
+ dojo.require("dojox.charting.themes.PlotKit.orange");
+ dojo.require("dojox.charting.themes.PlotKit.blue");
+ dojo.require("dojox.charting.themes.PlotKit.green");
+ dojo.require("dojox.data.HtmlStore");
+
+ seriesB = [2.6, 1.8, 2, 1, 1.4, 0.7, 2];
+
+ dojo.require("dojo.parser"); // scan page for widgets and instantiate them
+</script>
+
+</head>
+<body>
+<h1>Chart 2D</h1>
+<p>Examples of charts using widgets.</p>
+<div dojoType="dojox.data.HtmlStore" dataId="tableExample" jsId="tableStore"></div>
+<table id="tableExample" style="display: none;">
+ <thead>
+ <tr><th>value</th></tr>
+ </thead>
+ <tbody>
+ <tr><td>6.3</td></tr>
+ <tr><td>1.8</td></tr>
+ <tr><td>3 </td></tr>
+ <tr><td>0.5</td></tr>
+ <tr><td>4.4</td></tr>
+ <tr><td>2.7</td></tr>
+ <tr><td>2 </td></tr>
+ </tbody>
+</table>
+<table border="0" cellspacing="30">
+ <tr>
+ <td>
+ <div dojoType="dojox.charting.widget.Chart2D" style="width: 300px; height: 300px;">
+ <div class="axis" name="x" font="italic normal normal 8pt Tahoma"></div>
+ <div class="axis" name="y" vertical="true" fixUpper="major" includeZero="true"
+ font="italic normal normal 8pt Tahoma"></div>
+ <div class="plot" name="default" type="Areas"></div>
+ <div class="plot" name="grid" type="Grid"></div>
+ <div class="series" name="Series A" data="1, 2, 0.5, 1.5, 1, 2.8, 0.4"></div>
+ <div class="series" name="Series B" array="seriesB"></div>
+ <div class="series" name="Series C" store="tableStore" valueFn="Number(x)"></div>
+ </div>
+ </td>
+ <td>
+ <div dojoType="dojox.charting.widget.Chart2D" theme="dojox.charting.themes.PlotKit.orange"
+ fill="'lightgrey'" style="width: 300px; height: 300px;">
+ <div class="axis" name="x" font="italic normal bold 10pt Tahoma"></div>
+ <div class="axis" name="y" vertical="true" fixUpper="major" includeZero="true"
+ font="italic normal bold 10pt Tahoma"></div>
+ <div class="plot" name="default" type="Areas"></div>
+ <div class="plot" name="grid" type="Grid"></div>
+ <div class="series" name="Series A" data="1, 2, 0.5, 1.5, 1, 2.8, 0.4"></div>
+ <div class="series" name="Series B" array="seriesB"></div>
+ <div class="series" name="Series C" store="tableStore" valueFn="Number(x)" stroke="'#666666'" fill="'#b3b3b3'"></div>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div dojoType="dojox.charting.widget.Chart2D" theme="dojox.charting.themes.PlotKit.blue"
+ style="width: 300px; height: 300px;">
+ <div class="plot" name="default" type="Pie" radius="100" fontColor="white"></div>
+ <div class="series" name="Series B" array="seriesB"></div>
+ </div>
+ </td>
+ <td>
+ <div dojoType="dojox.charting.widget.Chart2D" theme="dojox.charting.themes.PlotKit.green"
+ style="width: 300px; height: 300px;">
+ <div class="plot" name="default" type="Pie" radius="100" fontColor="black" labelOffset="-20"></div>
+ <div class="series" name="Series C" store="tableStore" valueFn="Number(x)"></div>
+ </div>
+ </td>
+ </tr>
+</table>
+<p>That's all Folks!</p>
+</body>
+</html>
diff --git a/includes/js/dojox/charting/themes/ET/greys.js b/includes/js/dojox/charting/themes/ET/greys.js
new file mode 100644
index 0000000..de5e805
--- /dev/null
+++ b/includes/js/dojox/charting/themes/ET/greys.js
@@ -0,0 +1,63 @@
+if(!dojo._hasResource["dojox.charting.themes.ET.greys"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.themes.ET.greys"] = true;
+dojo.provide("dojox.charting.themes.ET.greys");
+dojo.require("dojox.charting.Theme");
+
+(function(){
+ var dxc=dojox.charting;
+ dxc.themes.ET.greys = new dxc.Theme({
+ antiAlias: false,
+ chart: {
+ stroke: null,
+ fill: "transparent"
+ },
+ plotarea: {
+ // stroke: { width: 0.2, color: "#666666" },
+ stroke: null,
+ fill: "transparent"
+ },
+ axis:{
+ stroke:{ width: 0 },
+ line:{ width: 0 },
+ majorTick:{
+ color: "#666666",
+ width: 1,
+ length: 5
+ },
+ minorTick: {
+ color: "black",
+ width: 0.5,
+ length: 2
+ },
+ font:"normal normal normal 8pt Tahoma",
+ fontColor:"#999999"
+ },
+ series:{
+ outline:{ width: 0, color: "black" },
+ stroke: { width: 1, color: "black" },
+ fill: dojo.colorFromHex("#3b444b"),
+ font: "normal normal normal 7pt Tahoma", // label
+ fontColor: "#717171"
+ },
+ marker:{ // any markers on a series.
+ stroke:{ width:1 },
+ fill:"#333",
+ font:"normal normal normal 7pt Tahoma", // label
+ fontColor:"#000"
+ },
+ colors:[]
+ });
+ dxc.themes.ET.greys.defineColors({
+ colors: [
+ // dojo.colorFromHex("#c3c3c3"),
+ dojo.colorFromHex("#8a8c8f"),
+ dojo.colorFromHex("#4b4b4b"),
+ dojo.colorFromHex("#3b444b"),
+ dojo.colorFromHex("#2e2d30"),
+ dojo.colorFromHex("#000000")
+ ]
+ });
+})();
+
+
+}
diff --git a/includes/js/dojox/charting/themes/GreySkies.js b/includes/js/dojox/charting/themes/GreySkies.js
new file mode 100644
index 0000000..da96edc
--- /dev/null
+++ b/includes/js/dojox/charting/themes/GreySkies.js
@@ -0,0 +1,11 @@
+if(!dojo._hasResource["dojox.charting.themes.GreySkies"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.themes.GreySkies"] = true;
+dojo.provide("dojox.charting.themes.GreySkies");
+dojo.require("dojox.charting.Theme");
+
+(function(){
+ var dxc=dojox.charting;
+ dxc.themes.GreySkies=new dxc.Theme(dxc.Theme._def);
+})();
+
+}
diff --git a/includes/js/dojox/charting/themes/PlotKit/README b/includes/js/dojox/charting/themes/PlotKit/README
new file mode 100644
index 0000000..dbf4c81
--- /dev/null
+++ b/includes/js/dojox/charting/themes/PlotKit/README
@@ -0,0 +1,11 @@
+This directory contains a set of themes for the DojoX Charting
+engine that are based on the visual stylings of the PlotKit
+chart kit, created by Alastair Tse:
+
+http://www.liquidx.net/plotkit/
+
+...whose work we admire. Consider these themes to not be a
+ripoff of his fine work, but instead a true homage: his charts
+are beautiful, and we stand in awe.
+
+--trt, 2007-06-08
diff --git a/includes/js/dojox/charting/themes/PlotKit/blue.js b/includes/js/dojox/charting/themes/PlotKit/blue.js
new file mode 100644
index 0000000..5ba63bc
--- /dev/null
+++ b/includes/js/dojox/charting/themes/PlotKit/blue.js
@@ -0,0 +1,43 @@
+if(!dojo._hasResource["dojox.charting.themes.PlotKit.blue"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.themes.PlotKit.blue"] = true;
+dojo.provide("dojox.charting.themes.PlotKit.blue");
+dojo.require("dojox.charting.Theme");
+
+(function(){
+ var dxc=dojox.charting;
+ dxc.themes.PlotKit.blue=new dxc.Theme({
+ chart:{
+ stroke:null,
+ fill: "white"
+ },
+ plotarea:{
+ stroke:null,
+ fill: "#e7eef6"
+ },
+ axis:{
+ stroke:{ color:"#fff",width:2 },
+ line:{ color:"#fff",width:1 },
+ majorTick:{ color:"#fff", width:2, length:12 },
+ minorTick:{ color:"#fff", width:1, length:8 },
+ font:"normal normal normal 8pt Tahoma",
+ fontColor:"#999"
+ },
+ series:{
+ outline:{ width: 0.1, color:"#fff" },
+ stroke:{ width: 1.5, color:"#666" },
+ fill:new dojo.Color([0x66, 0x66, 0x66, 0.8]),
+ font:"normal normal normal 7pt Tahoma", // label
+ fontColor:"#000"
+ },
+ marker:{ // any markers on a series.
+ stroke:{ width:2 },
+ fill:"#333",
+ font:"normal normal normal 7pt Tahoma", // label
+ fontColor:"#000"
+ },
+ colors:[]
+ });
+ dxc.themes.PlotKit.blue.defineColors({ hue:217, saturation:60, low:40, high:88 });
+})();
+
+}
diff --git a/includes/js/dojox/charting/themes/PlotKit/cyan.js b/includes/js/dojox/charting/themes/PlotKit/cyan.js
new file mode 100644
index 0000000..0f05638
--- /dev/null
+++ b/includes/js/dojox/charting/themes/PlotKit/cyan.js
@@ -0,0 +1,43 @@
+if(!dojo._hasResource["dojox.charting.themes.PlotKit.cyan"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.themes.PlotKit.cyan"] = true;
+dojo.provide("dojox.charting.themes.PlotKit.cyan");
+dojo.require("dojox.charting.Theme");
+
+(function(){
+ var dxc=dojox.charting;
+ dxc.themes.PlotKit.cyan=new dxc.Theme({
+ chart:{
+ stroke:null,
+ fill: "white"
+ },
+ plotarea:{
+ stroke:null,
+ fill: "#e6f1f5"
+ },
+ axis:{
+ stroke:{ color:"#fff",width:2 },
+ line:{ color:"#fff",width:1 },
+ majorTick:{ color:"#fff", width:2, length:12 },
+ minorTick:{ color:"#fff", width:1, length:8 },
+ font:"normal normal normal 8pt Tahoma",
+ fontColor:"#999"
+ },
+ series:{
+ outline:{ width:1, color:"#fff" },
+ stroke:{ width:2, color:"#666" },
+ fill:new dojo.Color([0x66, 0x66, 0x66, 0.8]),
+ font:"normal normal normal 7pt Tahoma", // label
+ fontColor:"#000"
+ },
+ marker:{ // any markers on a series.
+ stroke:{ width:2 },
+ fill:"#333",
+ font:"normal normal normal 7pt Tahoma", // label
+ fontColor:"#000"
+ },
+ colors:[]
+ });
+ dxc.themes.PlotKit.cyan.defineColors({ hue:194, saturation:60, low:40, high:88 });
+})();
+
+}
diff --git a/includes/js/dojox/charting/themes/PlotKit/green.js b/includes/js/dojox/charting/themes/PlotKit/green.js
new file mode 100644
index 0000000..7581a5a
--- /dev/null
+++ b/includes/js/dojox/charting/themes/PlotKit/green.js
@@ -0,0 +1,43 @@
+if(!dojo._hasResource["dojox.charting.themes.PlotKit.green"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.themes.PlotKit.green"] = true;
+dojo.provide("dojox.charting.themes.PlotKit.green");
+dojo.require("dojox.charting.Theme");
+
+(function(){
+ var dxc=dojox.charting;
+ dxc.themes.PlotKit.green=new dxc.Theme({
+ chart:{
+ stroke:null,
+ fill: "white"
+ },
+ plotarea:{
+ stroke:null,
+ fill: "#eff5e6"
+ },
+ axis:{
+ stroke:{ color:"#fff",width:2 },
+ line:{ color:"#fff",width:1 },
+ majorTick:{ color:"#fff", width:2, length:12 },
+ minorTick:{ color:"#fff", width:1, length:8 },
+ font:"normal normal normal 8pt Tahoma",
+ fontColor:"#999"
+ },
+ series:{
+ outline:{ width:1, color:"#fff" },
+ stroke:{ width:2, color:"#666" },
+ fill:new dojo.Color([0x66, 0x66, 0x66, 0.8]),
+ font:"normal normal normal 7pt Tahoma", // label
+ fontColor:"#000"
+ },
+ marker:{ // any markers on a series.
+ stroke:{ width:2 },
+ fill:"#333",
+ font:"normal normal normal 7pt Tahoma", // label
+ fontColor:"#000"
+ },
+ colors:[]
+ });
+ dxc.themes.PlotKit.green.defineColors({ hue:82, saturation:60, low:40, high:88 });
+})();
+
+}
diff --git a/includes/js/dojox/charting/themes/PlotKit/orange.js b/includes/js/dojox/charting/themes/PlotKit/orange.js
new file mode 100644
index 0000000..1693610
--- /dev/null
+++ b/includes/js/dojox/charting/themes/PlotKit/orange.js
@@ -0,0 +1,43 @@
+if(!dojo._hasResource["dojox.charting.themes.PlotKit.orange"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.themes.PlotKit.orange"] = true;
+dojo.provide("dojox.charting.themes.PlotKit.orange");
+dojo.require("dojox.charting.Theme");
+
+(function(){
+ var dxc=dojox.charting;
+ dxc.themes.PlotKit.orange=new dxc.Theme({
+ chart:{
+ stroke:null,
+ fill: "white"
+ },
+ plotarea:{
+ stroke:null,
+ fill: "#f5eee6"
+ },
+ axis:{
+ stroke:{ color:"#fff",width:2 },
+ line:{ color:"#fff",width:1 },
+ majorTick:{ color:"#fff", width:2, length:12 },
+ minorTick:{ color:"#fff", width:1, length:8 },
+ font:"normal normal normal 8pt Tahoma",
+ fontColor:"#999"
+ },
+ series:{
+ outline:{ width:0.15, color: "#fff" },
+ stroke:{ width:1.5, color: "#666" },
+ fill:new dojo.Color([0x66, 0x66, 0x66, 0.8]),
+ font:"normal normal normal 7pt Tahoma", // label
+ fontColor:"#000"
+ },
+ marker:{ // any markers on a series.
+ stroke:{ width:2 },
+ fill:"#333",
+ font:"normal normal normal 7pt Tahoma", // label
+ fontColor:"#000"
+ },
+ colors:[]
+ });
+ dxc.themes.PlotKit.orange.defineColors({ hue:31, saturation:60, low:40, high:88 });
+})();
+
+}
diff --git a/includes/js/dojox/charting/themes/PlotKit/purple.js b/includes/js/dojox/charting/themes/PlotKit/purple.js
new file mode 100644
index 0000000..a54d0cc
--- /dev/null
+++ b/includes/js/dojox/charting/themes/PlotKit/purple.js
@@ -0,0 +1,43 @@
+if(!dojo._hasResource["dojox.charting.themes.PlotKit.purple"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.themes.PlotKit.purple"] = true;
+dojo.provide("dojox.charting.themes.PlotKit.purple");
+dojo.require("dojox.charting.Theme");
+
+(function(){
+ var dxc=dojox.charting;
+ dxc.themes.PlotKit.purple=new dxc.Theme({
+ chart:{
+ stroke:null,
+ fill: "white"
+ },
+ plotarea:{
+ stroke:null,
+ fill: "#eee6f5"
+ },
+ axis:{
+ stroke:{ color:"#fff",width:2 },
+ line:{ color:"#fff",width:1 },
+ majorTick:{ color:"#fff", width:2, length:12 },
+ minorTick:{ color:"#fff", width:1, length:8 },
+ font:"normal normal normal 8pt Tahoma",
+ fontColor:"#999"
+ },
+ series:{
+ outline:{ width:1, color:"#fff" },
+ stroke:{ width:2, color:"#666" },
+ fill:new dojo.Color([0x66, 0x66, 0x66, 0.8]),
+ font:"normal normal normal 7pt Tahoma", // label
+ fontColor:"#000"
+ },
+ marker:{ // any markers on a series.
+ stroke:{ width:2 },
+ fill:"#333",
+ font:"normal normal normal 7pt Tahoma", // label
+ fontColor:"#000"
+ },
+ colors:[]
+ });
+ dxc.themes.PlotKit.purple.defineColors({ hue:271, saturation:60, low:40, high:88 });
+})();
+
+}
diff --git a/includes/js/dojox/charting/themes/PlotKit/red.js b/includes/js/dojox/charting/themes/PlotKit/red.js
new file mode 100644
index 0000000..607090b
--- /dev/null
+++ b/includes/js/dojox/charting/themes/PlotKit/red.js
@@ -0,0 +1,43 @@
+if(!dojo._hasResource["dojox.charting.themes.PlotKit.red"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.themes.PlotKit.red"] = true;
+dojo.provide("dojox.charting.themes.PlotKit.red");
+dojo.require("dojox.charting.Theme");
+
+(function(){
+ var dxc=dojox.charting;
+ dxc.themes.PlotKit.red=new dxc.Theme({
+ chart:{
+ stroke:null,
+ fill: "white"
+ },
+ plotarea:{
+ stroke:null,
+ fill: "#f5e6e6"
+ },
+ axis:{
+ stroke:{ color:"#fff",width:2 },
+ line:{ color:"#fff",width:1 },
+ majorTick:{ color:"#fff", width:2, length:12 },
+ minorTick:{ color:"#fff", width:1, length:8 },
+ font:"normal normal normal 8pt Tahoma",
+ fontColor:"#999"
+ },
+ series:{
+ outline:{ width:1, color:"#fff" },
+ stroke:{ width:2, color:"#666" },
+ fill:new dojo.Color([0x66, 0x66, 0x66, 0.8]),
+ font:"normal normal normal 7pt Tahoma", // label
+ fontColor:"#000"
+ },
+ marker:{ // any markers on a series.
+ stroke:{ width:2 },
+ fill:"#333",
+ font:"normal normal normal 7pt Tahoma", // label
+ fontColor:"#000"
+ },
+ colors:[]
+ });
+ dxc.themes.PlotKit.red.defineColors({ hue:1, saturation:60, low:40, high:88 });
+})();
+
+}
diff --git a/includes/js/dojox/charting/widget/Chart2D.js b/includes/js/dojox/charting/widget/Chart2D.js
new file mode 100644
index 0000000..08def5e
--- /dev/null
+++ b/includes/js/dojox/charting/widget/Chart2D.js
@@ -0,0 +1,215 @@
+if(!dojo._hasResource["dojox.charting.widget.Chart2D"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.widget.Chart2D"] = true;
+dojo.provide("dojox.charting.widget.Chart2D");
+
+dojo.require("dijit._Widget");
+dojo.require("dojox.charting.Chart2D");
+dojo.require("dojox.lang.functional");
+
+(function(){
+ var collectAxisParams, collectPlotParams, collectDataParams,
+ notNull = function(o){ return o; },
+ df = dojox.lang.functional,
+ du = dojox.lang.utils;
+
+ dojo.declare("dojox.charting.widget.Chart2D", dijit._Widget, {
+ // parameters for the markup
+
+ // theme for the chart
+ theme: null,
+
+ // margins for the chart: {l: 10, r: 10, t: 10, b: 10}
+ margins: null,
+
+ // chart area
+ stroke: null,
+ fill: null,
+
+ // methods
+
+ buildRendering: function(){
+ var n = this.domNode = this.srcNodeRef;
+
+ // collect chart parameters
+ var axes = dojo.filter(dojo.query("> .axis", n).map(collectAxisParams), notNull);
+ var plots = dojo.filter(dojo.query("> .plot", n).map(collectPlotParams), notNull);
+ var series = dojo.filter(dojo.query("> .series", n).map(collectDataParams), notNull);
+
+ // build the chart
+ n.innerHTML = "";
+ var c = this.chart = new dojox.charting.Chart2D(n, {
+ margins: this.margins,
+ stroke: this.stroke,
+ fill: this.fill
+ });
+
+ // add collected parameters
+ if(this.theme){
+ c.setTheme(this.theme);
+ }
+ dojo.forEach(axes, function(axis){
+ c.addAxis(axis.name, axis.kwArgs);
+ });
+ dojo.forEach(plots, function(plot){
+ c.addPlot(plot.name, plot.kwArgs);
+ });
+ var render = df.foldl(series, function(render, series){
+ if(series.type == "data"){
+ c.addSeries(series.name, series.data, series.kwArgs);
+ render = true;
+ }else{
+ c.addSeries(series.name, [0], series.kwArgs);
+ var kw = {};
+ du.updateWithPattern(
+ kw,
+ series.kwArgs,
+ {
+ "query": "",
+ "queryOptions": null,
+ "start": 0,
+ "count": 1 //,
+ // "sort": []
+ },
+ true
+ );
+ if(series.kwArgs.sort){
+ // sort is a complex object type and doesn't survive coercian
+ kw.sort = dojo.clone(series.kwArgs.sort);
+ }
+ dojo.mixin(kw, {
+ onComplete: function(data){
+ var values;
+ if("valueFn" in series.kwArgs){
+ var fn = series.kwArgs.valueFn;
+ values = dojo.map(data, function(x){
+ return fn(series.data.getValue(x, series.field, 0));
+ });
+ }else{
+ values = dojo.map(data, function(x){
+ return series.data.getValue(x, series.field, 0);
+ });
+ }
+ c.addSeries(series.name, values, series.kwArgs).render();
+ }
+ });
+ series.data.fetch(kw);
+ }
+ return render;
+ }, false);
+ if(render){ c.render(); }
+ },
+ resize: function(box){
+ dojo.marginBox(this.domNode, box);
+ this.chart.resize();
+ }
+ });
+
+ collectAxisParams = function(node){
+ var name = node.getAttribute("name"), type = node.getAttribute("type");
+ if(!name){ return null; }
+ var o = {name: name, kwArgs: {}}, kw = o.kwArgs;
+ if(type){
+ if(dojox.charting.axis2d[type]){
+ type = dojox._scopeName + ".charting.axis2d." + type;
+ }
+ var axis = eval("(" + type + ")");
+ if(axis){ kw.type = axis; }
+ }else{
+ type = dojox._scopeName + ".charting.axis2d.Default";
+ }
+ var dp = eval("(" + type + ".prototype.defaultParams)");
+ for(var x in dp){
+ if(x in kw){ continue; }
+ var attr = node.getAttribute(x);
+ kw[x] = du.coerceType(dp[x], attr == null ? dp[x] : attr);
+ }
+ var op = eval("(" + type + ".prototype.optionalParams)");
+ for(var x in op){
+ if(x in kw){ continue; }
+ var attr = node.getAttribute(x);
+ if(attr != null){
+ kw[x] = du.coerceType(op[x], attr);
+ }
+ }
+ return o;
+ };
+
+ collectPlotParams = function(node){
+ var name = node.getAttribute("name"), type = node.getAttribute("type");
+ if(!name){ return null; }
+ var o = {name: name, kwArgs: {}}, kw = o.kwArgs;
+ if(type){
+ if(dojox.charting.plot2d[type]){
+ type = dojox._scopeName + ".charting.plot2d." + type;
+ }
+ var plot = eval("(" + type + ")");
+ if(plot){ kw.type = plot; }
+ }else{
+ type = dojox._scopeName + ".charting.plot2d.Default";
+ }
+ var dp = eval("(" + type + ".prototype.defaultParams)");
+ for(var x in dp){
+ if(x in kw){ continue; }
+ var attr = node.getAttribute(x);
+ kw[x] = du.coerceType(dp[x], attr == null ? dp[x] : attr);
+ }
+ var op = eval("(" + type + ".prototype.optionalParams)");
+ for(var x in op){
+ if(x in kw){ continue; }
+ var attr = node.getAttribute(x);
+ if(attr != null){
+ kw[x] = du.coerceType(op[x], attr);
+ }
+ }
+ return o;
+ };
+
+ collectDataParams = function(node){
+ var name = node.getAttribute("name");
+ if(!name){ return null; }
+ var o = {name: name, kwArgs: {}}, kw = o.kwArgs, t;
+ t = node.getAttribute("plot");
+ if(t != null){ kw.plot = t; }
+ t = node.getAttribute("marker");
+ if(t != null){ kw.marker = t; }
+ t = node.getAttribute("stroke");
+ if(t != null){ kw.stroke = eval("(" + t + ")"); }
+ t = node.getAttribute("fill");
+ if(t != null){ kw.fill = eval("(" + t + ")"); }
+ t = node.getAttribute("data");
+ if(t != null){
+ o.type = "data";
+ o.data = dojo.map(String(t).split(','), Number);
+ return o;
+ }
+ t = node.getAttribute("array");
+ if(t != null){
+ o.type = "data";
+ o.data = eval("(" + t + ")");
+ return o;
+ }
+ t = node.getAttribute("store");
+ if(t != null){
+ o.type = "store";
+ o.data = eval("(" + t + ")");
+ t = node.getAttribute("field");
+ o.field = t != null ? t : "value";
+ t = node.getAttribute("query");
+ if(!!t){ kw.query = t; }
+ t = node.getAttribute("queryOptions");
+ if(!!t){ kw.queryOptions = eval("(" + t + ")"); }
+ t = node.getAttribute("start");
+ if(!!t){ kw.start = Number(t); }
+ t = node.getAttribute("count");
+ if(!!t){ kw.count = Number(t); }
+ t = node.getAttribute("sort");
+ if(!!t){ kw.sort = eval("("+t+")"); }
+ t = node.getAttribute("valueFn");
+ if(!!t){ kw.valueFn = df.lambda(t); }
+ return o;
+ }
+ return null;
+ };
+})();
+
+}