diff options
author | mensonge <mensonge@b3834d28-1941-0410-a4f8-b48e95affb8f> | 2008-11-13 09:49:11 +0000 |
---|---|---|
committer | mensonge <mensonge@b3834d28-1941-0410-a4f8-b48e95affb8f> | 2008-11-13 09:49:11 +0000 |
commit | e44a7e37b6c7b5961adaffc62b9042b8d442938e (patch) | |
tree | 95b67c356e93163467db2451f2b8cce84ed5d582 /includes/js/dojox/charting | |
parent | a62b9742ee5e28bcec6872d88f50f25b820914f6 (diff) | |
download | semanticscuttle-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')
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]+'> </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]+'> </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]+'> </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]+'> </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"> </span></td></tr> + <tr><td>upperBound</td><td><span id="oub"> </span></td></tr> + + <tr><td>major.tick</td><td><span id="omajt"> </span></td></tr> + <tr><td>major.start</td><td><span id="omajs"> </span></td></tr> + <tr><td>major.count</td><td><span id="omajc"> </span></td></tr> + <tr><td>major.prec</td><td><span id="omajp"> </span></td></tr> + + <tr><td>minor.tick</td><td><span id="omint"> </span></td></tr> + <tr><td>minor.start</td><td><span id="omins"> </span></td></tr> + <tr><td>minor.count</td><td><span id="ominc"> </span></td></tr> + <tr><td>minor.prec</td><td><span id="ominp"> </span></td></tr> + + <tr><td>micro.tick</td><td><span id="omict"> </span></td></tr> + <tr><td>micro.start</td><td><span id="omics"> </span></td></tr> + <tr><td>micro.count</td><td><span id="omicc"> </span></td></tr> + <tr><td>micro.prec</td><td><span id="omicp"> </span></td></tr> + + <tr><td>scale</td><td><span id="oscale"> </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 & <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 & <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 & <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; + }; +})(); + +} |