/* Copyright (c) 2004-2006, The Dojo Foundation All Rights Reserved. Licensed under the Academic Free License version 2.1 or above OR the modified BSD license. For more information on Dojo licensing, see: http://dojotoolkit.org/community/licensing.shtml */ dojo.provide("dojo.widget.Chart"); dojo.provide("dojo.widget.Chart.PlotTypes"); dojo.provide("dojo.widget.Chart.DataSeries"); dojo.require("dojo.widget.*"); dojo.require("dojo.graphics.color"); dojo.require("dojo.graphics.color.hsl"); dojo.widget.tags.addParseTreeHandler("dojo:chart"); dojo.widget.Chart = function(){ dojo.widget.Widget.call(this); this.widgetType = "Chart"; this.isContainer = false; this.series = []; // FIXME: why is this a mixin method? this.assignColors = function(){ var hue=30; var sat=120; var lum=120; var steps = Math.round(330/this.series.length); for(var i=0; i=range.start; i--){ var n = parseFloat(this.values[i].value); if(!isNaN(n)){ t += n; c++; } } t /= Math.max(c,1); return t; }, getMovingAverage: function(len){ var range = this.createRange(len); if(range.index<0){ return 0; } var t = 0; var c = 0; for(var i=range.index; i>=range.start; i--){ var n = parseFloat(this.values[i].value); if(!isNaN(n)){ t += n; c++; } } t /= Math.max(c,1); return t; }, getVariance: function(len){ var range = this.createRange(len); if(range.index < 0){ return 0; } var t = 0; // FIXME: for tom: wtf are t, c, and s? var s = 0; var c = 0; for(var i=range.index; i>=range.start; i--){ var n = parseFloat(this.values[i].value); if(!isNaN(n)){ t += n; s += Math.pow(n,2); c++; } } return (s/c)-Math.pow(t/c,2); }, getStandardDeviation: function(len){ return Math.sqrt(this.getVariance(len)); }, getMax: function(len){ var range = this.createRange(len); if(range.index < 0){ return 0; } var t = 0; for (var i=range.index; i>=range.start; i--){ var n=parseFloat(this.values[i].value); if (!isNaN(n)){ t=Math.max(n,t); } } return t; }, getMin: function(len){ var range=this.createRange(len); if(range.index < 0){ return 0; } var t = 0; for(var i=range.index; i>=range.start; i--){ var n = parseFloat(this.values[i].value); if(!isNaN(n)){ t=Math.min(n,t); } } return t; }, getMedian: function(len){ var range = this.createRange(len); if(range.index<0){ return 0; } var a = []; for (var i=range.index; i>=range.start; i--){ var n=parseFloat(this.values[i].value); if (!isNaN(n)){ var b=false; for(var j=0; j0){ return a[Math.ceil(a.length/2)]; } return 0; }, getMode: function(len){ var range=this.createRange(len); if(range.index<0){ return 0; } var o = {}; var ret = 0 var m = 0; for(var i=range.index; i>=range.start; i--){ var n=parseFloat(this.values[i].value); if(!isNaN(n)){ if (!o[this.values[i].value]) o[this.values[i].value] = 1; else o[this.values[i].value]++; } } for(var p in o){ if(m