Subversion Repositories Applications.papyrus

Rev

Rev 1318 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1318 Rev 1422
1
/*
1
/*
2
	Copyright (c) 2004-2006, The Dojo Foundation
2
	Copyright (c) 2004-2006, The Dojo Foundation
3
	All Rights Reserved.
3
	All Rights Reserved.
4
 
4
 
5
	Licensed under the Academic Free License version 2.1 or above OR the
5
	Licensed under the Academic Free License version 2.1 or above OR the
6
	modified BSD license. For more information on Dojo licensing, see:
6
	modified BSD license. For more information on Dojo licensing, see:
7
 
7
 
8
		http://dojotoolkit.org/community/licensing.shtml
8
		http://dojotoolkit.org/community/licensing.shtml
9
*/
9
*/
-
 
10
 
-
 
11
 
10
 
12
 
11
dojo.provide("dojo.charting.svg.Plotters");
13
dojo.provide("dojo.charting.svg.Plotters");
12
dojo.require("dojo.lang.common");
14
dojo.require("dojo.lang.common");
13
if (dojo.render.svg.capable) {
15
if (dojo.render.svg.capable) {
14
	dojo.require("dojo.svg");
16
	dojo.require("dojo.svg");
15
	dojo.mixin(dojo.charting.Plotters, {Bar:function (plotarea, plot, kwArgs, applyTo) {
17
	dojo.mixin(dojo.charting.Plotters, {Bar:function (plotarea, plot, kwArgs, applyTo) {
16
		var area = plotarea.getArea();
18
		var area = plotarea.getArea();
17
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
19
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
18
		var n = plot.series.length;
20
		var n = plot.series.length;
19
		var data = [];
21
		var data = [];
20
		for (var i = 0; i < n; i++) {
22
		for (var i = 0; i < n; i++) {
21
			var tmp = plot.series[i].data.evaluate(kwArgs);
23
			var tmp = plot.series[i].data.evaluate(kwArgs);
22
			data.push(tmp);
24
			data.push(tmp);
23
		}
25
		}
24
		var space = 8;
26
		var space = 8;
25
		var nPoints = data[0].length;
27
		var nPoints = data[0].length;
26
		if (nPoints == 0) {
28
		if (nPoints == 0) {
27
			return group;
29
			return group;
28
		}
30
		}
29
		var width = ((area.right - area.left) - (space * (nPoints - 1))) / nPoints;
31
		var width = ((area.right - area.left) - (space * (nPoints - 1))) / nPoints;
30
		var barWidth = width / n;
32
		var barWidth = width / n;
31
		var yOrigin = plot.axisY.getCoord(plot.axisX.origin, plotarea, plot);
33
		var yOrigin = plot.axisY.getCoord(plot.axisX.origin, plotarea, plot);
32
		for (var i = 0; i < nPoints; i++) {
34
		for (var i = 0; i < nPoints; i++) {
33
			var xStart = area.left + (width * i) + (space * i);
35
			var xStart = area.left + (width * i) + (space * i);
34
			for (var j = 0; j < n; j++) {
36
			for (var j = 0; j < n; j++) {
35
				var value = data[j][i].y;
37
				var value = data[j][i].y;
36
				var yA = yOrigin;
38
				var yA = yOrigin;
37
				var x = xStart + (barWidth * j);
39
				var x = xStart + (barWidth * j);
38
				var y = plot.axisY.getCoord(value, plotarea, plot);
40
				var y = plot.axisY.getCoord(value, plotarea, plot);
39
				var h = Math.abs(yA - y);
41
				var h = Math.abs(yA - y);
40
				if (value < plot.axisX.origin) {
42
				if (value < plot.axisX.origin) {
41
					yA = y;
43
					yA = y;
42
					y = yOrigin;
44
					y = yOrigin;
43
				}
45
				}
44
				var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
46
				var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
45
				bar.setAttribute("fill", data[j][i].series.color);
47
				bar.setAttribute("fill", data[j][i].series.color);
46
				bar.setAttribute("stroke-width", "0");
48
				bar.setAttribute("stroke-width", "0");
47
				bar.setAttribute("x", x);
49
				bar.setAttribute("x", x);
48
				bar.setAttribute("y", y);
50
				bar.setAttribute("y", y);
49
				bar.setAttribute("width", barWidth);
51
				bar.setAttribute("width", barWidth);
50
				bar.setAttribute("height", h);
52
				bar.setAttribute("height", h);
51
				bar.setAttribute("fill-opacity", "0.6");
53
				bar.setAttribute("fill-opacity", "0.6");
52
				if (applyTo) {
54
				if (applyTo) {
53
					applyTo(bar, data[j][i].src);
55
					applyTo(bar, data[j][i].src);
54
				}
56
				}
55
				group.appendChild(bar);
57
				group.appendChild(bar);
56
			}
58
			}
57
		}
59
		}
58
		return group;
60
		return group;
59
	}, HorizontalBar:function (plotarea, plot, kwArgs, applyTo) {
61
	}, HorizontalBar:function (plotarea, plot, kwArgs, applyTo) {
60
		var area = plotarea.getArea();
62
		var area = plotarea.getArea();
61
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
63
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
62
		var n = plot.series.length;
64
		var n = plot.series.length;
63
		var data = [];
65
		var data = [];
64
		for (var i = 0; i < n; i++) {
66
		for (var i = 0; i < n; i++) {
65
			var tmp = plot.series[i].data.evaluate(kwArgs);
67
			var tmp = plot.series[i].data.evaluate(kwArgs);
66
			data.push(tmp);
68
			data.push(tmp);
67
		}
69
		}
68
		var space = 6;
70
		var space = 6;
69
		var nPoints = data[0].length;
71
		var nPoints = data[0].length;
70
		if (nPoints == 0) {
72
		if (nPoints == 0) {
71
			return group;
73
			return group;
72
		}
74
		}
73
		var h = ((area.bottom - area.top) - (space * (nPoints - 1))) / nPoints;
75
		var h = ((area.bottom - area.top) - (space * (nPoints - 1))) / nPoints;
74
		var barH = h / n;
76
		var barH = h / n;
75
		var xOrigin = plot.axisX.getCoord(0, plotarea, plot);
77
		var xOrigin = plot.axisX.getCoord(0, plotarea, plot);
76
		for (var i = 0; i < nPoints; i++) {
78
		for (var i = 0; i < nPoints; i++) {
77
			var yStart = area.top + (h * i) + (space * i);
79
			var yStart = area.top + (h * i) + (space * i);
78
			for (var j = 0; j < n; j++) {
80
			for (var j = 0; j < n; j++) {
79
				var value = data[j][i].y;
81
				var value = data[j][i].y;
80
				var y = yStart + (barH * j);
82
				var y = yStart + (barH * j);
81
				var xA = xOrigin;
83
				var xA = xOrigin;
82
				var x = plot.axisX.getCoord(value, plotarea, plot);
84
				var x = plot.axisX.getCoord(value, plotarea, plot);
83
				var w = Math.abs(x - xA);
85
				var w = Math.abs(x - xA);
84
				if (value > 0) {
86
				if (value > 0) {
85
					x = xOrigin;
87
					x = xOrigin;
86
				}
88
				}
87
				var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
89
				var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
88
				bar.setAttribute("fill", data[j][i].series.color);
90
				bar.setAttribute("fill", data[j][i].series.color);
89
				bar.setAttribute("stroke-width", "0");
91
				bar.setAttribute("stroke-width", "0");
90
				bar.setAttribute("x", xA);
92
				bar.setAttribute("x", xA);
91
				bar.setAttribute("y", y);
93
				bar.setAttribute("y", y);
92
				bar.setAttribute("width", w);
94
				bar.setAttribute("width", w);
93
				bar.setAttribute("height", barH);
95
				bar.setAttribute("height", barH);
94
				bar.setAttribute("fill-opacity", "0.6");
96
				bar.setAttribute("fill-opacity", "0.6");
95
				if (applyTo) {
97
				if (applyTo) {
96
					applyTo(bar, data[j][i].src);
98
					applyTo(bar, data[j][i].src);
97
				}
99
				}
98
				group.appendChild(bar);
100
				group.appendChild(bar);
99
			}
101
			}
100
		}
102
		}
101
		return group;
103
		return group;
102
	}, Gantt:function (plotarea, plot, kwArgs, applyTo) {
104
	}, Gantt:function (plotarea, plot, kwArgs, applyTo) {
103
		var area = plotarea.getArea();
105
		var area = plotarea.getArea();
104
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
106
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
105
		var n = plot.series.length;
107
		var n = plot.series.length;
106
		var data = [];
108
		var data = [];
107
		for (var i = 0; i < n; i++) {
109
		for (var i = 0; i < n; i++) {
108
			var tmp = plot.series[i].data.evaluate(kwArgs);
110
			var tmp = plot.series[i].data.evaluate(kwArgs);
109
			data.push(tmp);
111
			data.push(tmp);
110
		}
112
		}
111
		var space = 2;
113
		var space = 2;
112
		var nPoints = data[0].length;
114
		var nPoints = data[0].length;
113
		if (nPoints == 0) {
115
		if (nPoints == 0) {
114
			return group;
116
			return group;
115
		}
117
		}
116
		var h = ((area.bottom - area.top) - (space * (nPoints - 1))) / nPoints;
118
		var h = ((area.bottom - area.top) - (space * (nPoints - 1))) / nPoints;
117
		var barH = h / n;
119
		var barH = h / n;
118
		for (var i = 0; i < nPoints; i++) {
120
		for (var i = 0; i < nPoints; i++) {
119
			var yStart = area.top + (h * i) + (space * i);
121
			var yStart = area.top + (h * i) + (space * i);
120
			for (var j = 0; j < n; j++) {
122
			for (var j = 0; j < n; j++) {
121
				var high = data[j][i].high;
123
				var high = data[j][i].high;
122
				var low = data[j][i].low;
124
				var low = data[j][i].low;
123
				if (low > high) {
125
				if (low > high) {
124
					var t = high;
126
					var t = high;
125
					high = low;
127
					high = low;
126
					low = t;
128
					low = t;
127
				}
129
				}
128
				var x = plot.axisX.getCoord(low, plotarea, plot);
130
				var x = plot.axisX.getCoord(low, plotarea, plot);
129
				var w = plot.axisX.getCoord(high, plotarea, plot) - x;
131
				var w = plot.axisX.getCoord(high, plotarea, plot) - x;
130
				var y = yStart + (barH * j);
132
				var y = yStart + (barH * j);
131
				var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
133
				var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
132
				bar.setAttribute("fill", data[j][i].series.color);
134
				bar.setAttribute("fill", data[j][i].series.color);
133
				bar.setAttribute("stroke-width", "0");
135
				bar.setAttribute("stroke-width", "0");
134
				bar.setAttribute("x", x);
136
				bar.setAttribute("x", x);
135
				bar.setAttribute("y", y);
137
				bar.setAttribute("y", y);
136
				bar.setAttribute("width", w);
138
				bar.setAttribute("width", w);
137
				bar.setAttribute("height", barH);
139
				bar.setAttribute("height", barH);
138
				bar.setAttribute("fill-opacity", "0.6");
140
				bar.setAttribute("fill-opacity", "0.6");
139
				if (applyTo) {
141
				if (applyTo) {
140
					applyTo(bar, data[j][i].src);
142
					applyTo(bar, data[j][i].src);
141
				}
143
				}
142
				group.appendChild(bar);
144
				group.appendChild(bar);
143
			}
145
			}
144
		}
146
		}
145
		return group;
147
		return group;
146
	}, StackedArea:function (plotarea, plot, kwArgs, applyTo) {
148
	}, StackedArea:function (plotarea, plot, kwArgs, applyTo) {
147
		var area = plotarea.getArea();
149
		var area = plotarea.getArea();
148
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
150
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
149
		var n = plot.series.length;
151
		var n = plot.series.length;
150
		var data = [];
152
		var data = [];
151
		var totals = [];
153
		var totals = [];
152
		for (var i = 0; i < n; i++) {
154
		for (var i = 0; i < n; i++) {
153
			var tmp = plot.series[i].data.evaluate(kwArgs);
155
			var tmp = plot.series[i].data.evaluate(kwArgs);
154
			for (var j = 0; j < tmp.length; j++) {
156
			for (var j = 0; j < tmp.length; j++) {
155
				if (i == 0) {
157
				if (i == 0) {
156
					totals.push(tmp[j].y);
158
					totals.push(tmp[j].y);
157
				} else {
159
				} else {
158
					totals[j] += tmp[j].y;
160
					totals[j] += tmp[j].y;
159
				}
161
				}
160
				tmp[j].y = totals[j];
162
				tmp[j].y = totals[j];
161
			}
163
			}
162
			data.push(tmp);
164
			data.push(tmp);
163
		}
165
		}
164
		for (var i = n - 1; i >= 0; i--) {
166
		for (var i = n - 1; i >= 0; i--) {
165
			var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
167
			var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
166
			path.setAttribute("fill", data[i][0].series.color);
168
			path.setAttribute("fill", data[i][0].series.color);
167
			path.setAttribute("fill-opacity", "0.4");
169
			path.setAttribute("fill-opacity", "0.4");
168
			path.setAttribute("stroke", data[i][0].series.color);
170
			path.setAttribute("stroke", data[i][0].series.color);
169
			path.setAttribute("stroke-width", "1");
171
			path.setAttribute("stroke-width", "1");
170
			path.setAttribute("stroke-opacity", "0.85");
172
			path.setAttribute("stroke-opacity", "0.85");
171
			var cmd = [];
173
			var cmd = [];
172
			var r = 3;
174
			var r = 3;
173
			for (var j = 0; j < data[i].length; j++) {
175
			for (var j = 0; j < data[i].length; j++) {
174
				var values = data[i];
176
				var values = data[i];
175
				var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
177
				var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
176
				var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
178
				var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
177
				if (j == 0) {
179
				if (j == 0) {
178
					cmd.push("M");
180
					cmd.push("M");
179
				} else {
181
				} else {
180
					cmd.push("L");
182
					cmd.push("L");
181
				}
183
				}
182
				cmd.push(x + "," + y);
184
				cmd.push(x + "," + y);
183
				var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
185
				var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
184
				c.setAttribute("cx", x);
186
				c.setAttribute("cx", x);
185
				c.setAttribute("cy", y);
187
				c.setAttribute("cy", y);
186
				c.setAttribute("r", "3");
188
				c.setAttribute("r", "3");
187
				c.setAttribute("fill", values[j].series.color);
189
				c.setAttribute("fill", values[j].series.color);
188
				c.setAttribute("fill-opacity", "0.6");
190
				c.setAttribute("fill-opacity", "0.6");
189
				c.setAttribute("stroke-width", "1");
191
				c.setAttribute("stroke-width", "1");
190
				c.setAttribute("stroke-opacity", "0.85");
192
				c.setAttribute("stroke-opacity", "0.85");
191
				group.appendChild(c);
193
				group.appendChild(c);
192
				if (applyTo) {
194
				if (applyTo) {
193
					applyTo(c, data[i].src);
195
					applyTo(c, data[i].src);
194
				}
196
				}
195
			}
197
			}
196
			if (i == 0) {
198
			if (i == 0) {
197
				cmd.push("L");
199
				cmd.push("L");
198
				cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
200
				cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
199
				cmd.push("L");
201
				cmd.push("L");
200
				cmd.push(plot.axisX.getCoord(data[0][0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
202
				cmd.push(plot.axisX.getCoord(data[0][0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
201
				cmd.push("Z");
203
				cmd.push("Z");
202
			} else {
204
			} else {
203
				var values = data[i - 1];
205
				var values = data[i - 1];
204
				cmd.push("L");
206
				cmd.push("L");
205
				cmd.push(x + "," + Math.round(plot.axisY.getCoord(values[values.length - 1].y, plotarea, plot)));
207
				cmd.push(x + "," + Math.round(plot.axisY.getCoord(values[values.length - 1].y, plotarea, plot)));
206
				for (var j = values.length - 2; j >= 0; j--) {
208
				for (var j = values.length - 2; j >= 0; j--) {
207
					var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
209
					var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
208
					var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
210
					var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
209
					cmd.push("L");
211
					cmd.push("L");
210
					cmd.push(x + "," + y);
212
					cmd.push(x + "," + y);
211
				}
213
				}
212
			}
214
			}
213
			path.setAttribute("d", cmd.join(" ") + " Z");
215
			path.setAttribute("d", cmd.join(" ") + " Z");
214
			group.appendChild(path);
216
			group.appendChild(path);
215
		}
217
		}
216
		return group;
218
		return group;
217
	}, StackedCurvedArea:function (plotarea, plot, kwArgs, applyTo) {
219
	}, StackedCurvedArea:function (plotarea, plot, kwArgs, applyTo) {
218
		var tension = 3;
220
		var tension = 3;
219
		var area = plotarea.getArea();
221
		var area = plotarea.getArea();
220
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
222
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
221
		var n = plot.series.length;
223
		var n = plot.series.length;
222
		var data = [];
224
		var data = [];
223
		var totals = [];
225
		var totals = [];
224
		for (var i = 0; i < n; i++) {
226
		for (var i = 0; i < n; i++) {
225
			var tmp = plot.series[i].data.evaluate(kwArgs);
227
			var tmp = plot.series[i].data.evaluate(kwArgs);
226
			for (var j = 0; j < tmp.length; j++) {
228
			for (var j = 0; j < tmp.length; j++) {
227
				if (i == 0) {
229
				if (i == 0) {
228
					totals.push(tmp[j].y);
230
					totals.push(tmp[j].y);
229
				} else {
231
				} else {
230
					totals[j] += tmp[j].y;
232
					totals[j] += tmp[j].y;
231
				}
233
				}
232
				tmp[j].y = totals[j];
234
				tmp[j].y = totals[j];
233
			}
235
			}
234
			data.push(tmp);
236
			data.push(tmp);
235
		}
237
		}
236
		for (var i = n - 1; i >= 0; i--) {
238
		for (var i = n - 1; i >= 0; i--) {
237
			var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
239
			var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
238
			path.setAttribute("fill", data[i][0].series.color);
240
			path.setAttribute("fill", data[i][0].series.color);
239
			path.setAttribute("fill-opacity", "0.4");
241
			path.setAttribute("fill-opacity", "0.4");
240
			path.setAttribute("stroke", data[i][0].series.color);
242
			path.setAttribute("stroke", data[i][0].series.color);
241
			path.setAttribute("stroke-width", "1");
243
			path.setAttribute("stroke-width", "1");
242
			path.setAttribute("stroke-opacity", "0.85");
244
			path.setAttribute("stroke-opacity", "0.85");
243
			var cmd = [];
245
			var cmd = [];
244
			var r = 3;
246
			var r = 3;
245
			for (var j = 0; j < data[i].length; j++) {
247
			for (var j = 0; j < data[i].length; j++) {
246
				var values = data[i];
248
				var values = data[i];
247
				var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
249
				var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
248
				var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
250
				var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
249
				var dx = area.left + 1;
251
				var dx = area.left + 1;
250
				var dy = area.bottom;
252
				var dy = area.bottom;
251
				if (j > 0) {
253
				if (j > 0) {
252
					dx = x - plot.axisX.getCoord(values[j - 1].x, plotarea, plot);
254
					dx = x - plot.axisX.getCoord(values[j - 1].x, plotarea, plot);
253
					dy = plot.axisY.getCoord(values[j - 1].y, plotarea, plot);
255
					dy = plot.axisY.getCoord(values[j - 1].y, plotarea, plot);
254
				}
256
				}
255
				if (j == 0) {
257
				if (j == 0) {
256
					cmd.push("M");
258
					cmd.push("M");
257
				} else {
259
				} else {
258
					cmd.push("C");
260
					cmd.push("C");
259
					var cx = x - (tension - 1) * (dx / tension);
261
					var cx = x - (tension - 1) * (dx / tension);
260
					cmd.push(cx + "," + dy);
262
					cmd.push(cx + "," + dy);
261
					cx = x - (dx / tension);
263
					cx = x - (dx / tension);
262
					cmd.push(cx + "," + y);
264
					cmd.push(cx + "," + y);
263
				}
265
				}
264
				cmd.push(x + "," + y);
266
				cmd.push(x + "," + y);
265
				var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
267
				var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
266
				c.setAttribute("cx", x);
268
				c.setAttribute("cx", x);
267
				c.setAttribute("cy", y);
269
				c.setAttribute("cy", y);
268
				c.setAttribute("r", "3");
270
				c.setAttribute("r", "3");
269
				c.setAttribute("fill", values[j].series.color);
271
				c.setAttribute("fill", values[j].series.color);
270
				c.setAttribute("fill-opacity", "0.6");
272
				c.setAttribute("fill-opacity", "0.6");
271
				c.setAttribute("stroke-width", "1");
273
				c.setAttribute("stroke-width", "1");
272
				c.setAttribute("stroke-opacity", "0.85");
274
				c.setAttribute("stroke-opacity", "0.85");
273
				group.appendChild(c);
275
				group.appendChild(c);
274
				if (applyTo) {
276
				if (applyTo) {
275
					applyTo(c, data[i].src);
277
					applyTo(c, data[i].src);
276
				}
278
				}
277
			}
279
			}
278
			if (i == 0) {
280
			if (i == 0) {
279
				cmd.push("L");
281
				cmd.push("L");
280
				cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
282
				cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
281
				cmd.push("L");
283
				cmd.push("L");
282
				cmd.push(plot.axisX.getCoord(data[0][0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
284
				cmd.push(plot.axisX.getCoord(data[0][0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
283
				cmd.push("Z");
285
				cmd.push("Z");
284
			} else {
286
			} else {
285
				var values = data[i - 1];
287
				var values = data[i - 1];
286
				cmd.push("L");
288
				cmd.push("L");
287
				cmd.push(x + "," + Math.round(plot.axisY.getCoord(values[values.length - 1].y, plotarea, plot)));
289
				cmd.push(x + "," + Math.round(plot.axisY.getCoord(values[values.length - 1].y, plotarea, plot)));
288
				for (var j = values.length - 2; j >= 0; j--) {
290
				for (var j = values.length - 2; j >= 0; j--) {
289
					var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
291
					var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
290
					var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
292
					var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
291
					var dx = x - plot.axisX.getCoord(values[j + 1].x, plotarea, plot);
293
					var dx = x - plot.axisX.getCoord(values[j + 1].x, plotarea, plot);
292
					var dy = plot.axisY.getCoord(values[j + 1].y, plotarea, plot);
294
					var dy = plot.axisY.getCoord(values[j + 1].y, plotarea, plot);
293
					cmd.push("C");
295
					cmd.push("C");
294
					var cx = x - (tension - 1) * (dx / tension);
296
					var cx = x - (tension - 1) * (dx / tension);
295
					cmd.push(cx + "," + dy);
297
					cmd.push(cx + "," + dy);
296
					cx = x - (dx / tension);
298
					cx = x - (dx / tension);
297
					cmd.push(cx + "," + y);
299
					cmd.push(cx + "," + y);
298
					cmd.push(x + "," + y);
300
					cmd.push(x + "," + y);
299
				}
301
				}
300
			}
302
			}
301
			path.setAttribute("d", cmd.join(" ") + " Z");
303
			path.setAttribute("d", cmd.join(" ") + " Z");
302
			group.appendChild(path);
304
			group.appendChild(path);
303
		}
305
		}
304
		return group;
306
		return group;
305
	}, DataBar:function (data, plotarea, plot, applyTo) {
307
	}, DataBar:function (data, plotarea, plot, applyTo) {
306
		var area = plotarea.getArea();
308
		var area = plotarea.getArea();
307
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
309
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
308
		var n = data.length;
310
		var n = data.length;
309
		var w = (area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower);
311
		var w = (area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower);
310
		var yOrigin = plot.axisY.getCoord(plot.axisX.origin, plotarea, plot);
312
		var yOrigin = plot.axisY.getCoord(plot.axisX.origin, plotarea, plot);
311
		for (var i = 0; i < n; i++) {
313
		for (var i = 0; i < n; i++) {
312
			var value = data[i].y;
314
			var value = data[i].y;
313
			var yA = yOrigin;
315
			var yA = yOrigin;
314
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
316
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
315
			var y = plot.axisY.getCoord(value, plotarea, plot);
317
			var y = plot.axisY.getCoord(value, plotarea, plot);
316
			var h = Math.abs(yA - y);
318
			var h = Math.abs(yA - y);
317
			if (value < plot.axisX.origin) {
319
			if (value < plot.axisX.origin) {
318
				yA = y;
320
				yA = y;
319
				y = yOrigin;
321
				y = yOrigin;
320
			}
322
			}
321
			var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
323
			var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
322
			bar.setAttribute("fill", data[i].series.color);
324
			bar.setAttribute("fill", data[i].series.color);
323
			bar.setAttribute("stroke-width", "0");
325
			bar.setAttribute("stroke-width", "0");
324
			bar.setAttribute("x", x);
326
			bar.setAttribute("x", x);
325
			bar.setAttribute("y", y);
327
			bar.setAttribute("y", y);
326
			bar.setAttribute("width", w);
328
			bar.setAttribute("width", w);
327
			bar.setAttribute("height", h);
329
			bar.setAttribute("height", h);
328
			bar.setAttribute("fill-opacity", "0.6");
330
			bar.setAttribute("fill-opacity", "0.6");
329
			if (applyTo) {
331
			if (applyTo) {
330
				applyTo(bar, data[i].src);
332
				applyTo(bar, data[i].src);
331
			}
333
			}
332
			group.appendChild(bar);
334
			group.appendChild(bar);
333
		}
335
		}
334
		return group;
336
		return group;
335
	}, Line:function (data, plotarea, plot, applyTo) {
337
	}, Line:function (data, plotarea, plot, applyTo) {
336
		var area = plotarea.getArea();
338
		var area = plotarea.getArea();
337
		var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
339
		var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
338
		if (data.length == 0) {
340
		if (data.length == 0) {
339
			return line;
341
			return line;
340
		}
342
		}
341
		var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
343
		var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
342
		line.appendChild(path);
344
		line.appendChild(path);
343
		path.setAttribute("fill", "none");
345
		path.setAttribute("fill", "none");
344
		path.setAttribute("stroke", data[0].series.color);
346
		path.setAttribute("stroke", data[0].series.color);
345
		path.setAttribute("stroke-width", "2");
347
		path.setAttribute("stroke-width", "2");
346
		path.setAttribute("stroke-opacity", "0.85");
348
		path.setAttribute("stroke-opacity", "0.85");
347
		if (data[0].series.label != null) {
349
		if (data[0].series.label != null) {
348
			path.setAttribute("title", data[0].series.label);
350
			path.setAttribute("title", data[0].series.label);
349
		}
351
		}
350
		var cmd = [];
352
		var cmd = [];
351
		for (var i = 0; i < data.length; i++) {
353
		for (var i = 0; i < data.length; i++) {
352
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
354
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
353
			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
355
			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
354
			if (i == 0) {
356
			if (i == 0) {
355
				cmd.push("M");
357
				cmd.push("M");
356
			} else {
358
			} else {
357
				cmd.push("L");
359
				cmd.push("L");
358
			}
360
			}
359
			cmd.push(x + "," + y);
361
			cmd.push(x + "," + y);
360
			var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
362
			var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
361
			c.setAttribute("cx", x);
363
			c.setAttribute("cx", x);
362
			c.setAttribute("cy", y);
364
			c.setAttribute("cy", y);
363
			c.setAttribute("r", "3");
365
			c.setAttribute("r", "3");
364
			c.setAttribute("fill", data[i].series.color);
366
			c.setAttribute("fill", data[i].series.color);
365
			c.setAttribute("fill-opacity", "0.6");
367
			c.setAttribute("fill-opacity", "0.6");
366
			c.setAttribute("stroke-width", "1");
368
			c.setAttribute("stroke-width", "1");
367
			c.setAttribute("stroke-opacity", "0.85");
369
			c.setAttribute("stroke-opacity", "0.85");
368
			line.appendChild(c);
370
			line.appendChild(c);
369
			if (applyTo) {
371
			if (applyTo) {
370
				applyTo(c, data[i].src);
372
				applyTo(c, data[i].src);
371
			}
373
			}
372
		}
374
		}
373
		path.setAttribute("d", cmd.join(" "));
375
		path.setAttribute("d", cmd.join(" "));
374
		return line;
376
		return line;
375
	}, CurvedLine:function (data, plotarea, plot, applyTo) {
377
	}, CurvedLine:function (data, plotarea, plot, applyTo) {
376
		var tension = 3;
378
		var tension = 3;
377
		var area = plotarea.getArea();
379
		var area = plotarea.getArea();
378
		var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
380
		var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
379
		if (data.length == 0) {
381
		if (data.length == 0) {
380
			return line;
382
			return line;
381
		}
383
		}
382
		var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
384
		var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
383
		line.appendChild(path);
385
		line.appendChild(path);
384
		path.setAttribute("fill", "none");
386
		path.setAttribute("fill", "none");
385
		path.setAttribute("stroke", data[0].series.color);
387
		path.setAttribute("stroke", data[0].series.color);
386
		path.setAttribute("stroke-width", "2");
388
		path.setAttribute("stroke-width", "2");
387
		path.setAttribute("stroke-opacity", "0.85");
389
		path.setAttribute("stroke-opacity", "0.85");
388
		if (data[0].series.label != null) {
390
		if (data[0].series.label != null) {
389
			path.setAttribute("title", data[0].series.label);
391
			path.setAttribute("title", data[0].series.label);
390
		}
392
		}
391
		var cmd = [];
393
		var cmd = [];
392
		for (var i = 0; i < data.length; i++) {
394
		for (var i = 0; i < data.length; i++) {
393
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
395
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
394
			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
396
			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
395
			var dx = area.left + 1;
397
			var dx = area.left + 1;
396
			var dy = area.bottom;
398
			var dy = area.bottom;
397
			if (i > 0) {
399
			if (i > 0) {
398
				dx = x - plot.axisX.getCoord(data[i - 1].x, plotarea, plot);
400
				dx = x - plot.axisX.getCoord(data[i - 1].x, plotarea, plot);
399
				dy = plot.axisY.getCoord(data[i - 1].y, plotarea, plot);
401
				dy = plot.axisY.getCoord(data[i - 1].y, plotarea, plot);
400
			}
402
			}
401
			if (i == 0) {
403
			if (i == 0) {
402
				cmd.push("M");
404
				cmd.push("M");
403
			} else {
405
			} else {
404
				cmd.push("C");
406
				cmd.push("C");
405
				var cx = x - (tension - 1) * (dx / tension);
407
				var cx = x - (tension - 1) * (dx / tension);
406
				cmd.push(cx + "," + dy);
408
				cmd.push(cx + "," + dy);
407
				cx = x - (dx / tension);
409
				cx = x - (dx / tension);
408
				cmd.push(cx + "," + y);
410
				cmd.push(cx + "," + y);
409
			}
411
			}
410
			cmd.push(x + "," + y);
412
			cmd.push(x + "," + y);
411
			var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
413
			var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
412
			c.setAttribute("cx", x);
414
			c.setAttribute("cx", x);
413
			c.setAttribute("cy", y);
415
			c.setAttribute("cy", y);
414
			c.setAttribute("r", "3");
416
			c.setAttribute("r", "3");
415
			c.setAttribute("fill", data[i].series.color);
417
			c.setAttribute("fill", data[i].series.color);
416
			c.setAttribute("fill-opacity", "0.6");
418
			c.setAttribute("fill-opacity", "0.6");
417
			c.setAttribute("stroke-width", "1");
419
			c.setAttribute("stroke-width", "1");
418
			c.setAttribute("stroke-opacity", "0.85");
420
			c.setAttribute("stroke-opacity", "0.85");
419
			line.appendChild(c);
421
			line.appendChild(c);
420
			if (applyTo) {
422
			if (applyTo) {
421
				applyTo(c, data[i].src);
423
				applyTo(c, data[i].src);
422
			}
424
			}
423
		}
425
		}
424
		path.setAttribute("d", cmd.join(" "));
426
		path.setAttribute("d", cmd.join(" "));
425
		return line;
427
		return line;
426
	}, Area:function (data, plotarea, plot, applyTo) {
428
	}, Area:function (data, plotarea, plot, applyTo) {
427
		var area = plotarea.getArea();
429
		var area = plotarea.getArea();
428
		var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
430
		var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
429
		if (data.length == 0) {
431
		if (data.length == 0) {
430
			return line;
432
			return line;
431
		}
433
		}
432
		var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
434
		var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
433
		line.appendChild(path);
435
		line.appendChild(path);
434
		path.setAttribute("fill", data[0].series.color);
436
		path.setAttribute("fill", data[0].series.color);
435
		path.setAttribute("fill-opacity", "0.4");
437
		path.setAttribute("fill-opacity", "0.4");
436
		path.setAttribute("stroke", data[0].series.color);
438
		path.setAttribute("stroke", data[0].series.color);
437
		path.setAttribute("stroke-width", "1");
439
		path.setAttribute("stroke-width", "1");
438
		path.setAttribute("stroke-opacity", "0.85");
440
		path.setAttribute("stroke-opacity", "0.85");
439
		if (data[0].series.label != null) {
441
		if (data[0].series.label != null) {
440
			path.setAttribute("title", data[0].series.label);
442
			path.setAttribute("title", data[0].series.label);
441
		}
443
		}
442
		var cmd = [];
444
		var cmd = [];
443
		for (var i = 0; i < data.length; i++) {
445
		for (var i = 0; i < data.length; i++) {
444
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
446
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
445
			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
447
			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
446
			if (i == 0) {
448
			if (i == 0) {
447
				cmd.push("M");
449
				cmd.push("M");
448
			} else {
450
			} else {
449
				cmd.push("L");
451
				cmd.push("L");
450
			}
452
			}
451
			cmd.push(x + "," + y);
453
			cmd.push(x + "," + y);
452
			var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
454
			var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
453
			c.setAttribute("cx", x);
455
			c.setAttribute("cx", x);
454
			c.setAttribute("cy", y);
456
			c.setAttribute("cy", y);
455
			c.setAttribute("r", "3");
457
			c.setAttribute("r", "3");
456
			c.setAttribute("fill", data[i].series.color);
458
			c.setAttribute("fill", data[i].series.color);
457
			c.setAttribute("fill-opacity", "0.6");
459
			c.setAttribute("fill-opacity", "0.6");
458
			c.setAttribute("stroke-width", "1");
460
			c.setAttribute("stroke-width", "1");
459
			c.setAttribute("stroke-opacity", "0.85");
461
			c.setAttribute("stroke-opacity", "0.85");
460
			line.appendChild(c);
462
			line.appendChild(c);
461
			if (applyTo) {
463
			if (applyTo) {
462
				applyTo(c, data[i].src);
464
				applyTo(c, data[i].src);
463
			}
465
			}
464
		}
466
		}
465
		cmd.push("L");
467
		cmd.push("L");
466
		cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
468
		cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
467
		cmd.push("L");
469
		cmd.push("L");
468
		cmd.push(plot.axisX.getCoord(data[0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
470
		cmd.push(plot.axisX.getCoord(data[0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
469
		cmd.push("Z");
471
		cmd.push("Z");
470
		path.setAttribute("d", cmd.join(" "));
472
		path.setAttribute("d", cmd.join(" "));
471
		return line;
473
		return line;
472
	}, CurvedArea:function (data, plotarea, plot, applyTo) {
474
	}, CurvedArea:function (data, plotarea, plot, applyTo) {
473
		var tension = 3;
475
		var tension = 3;
474
		var area = plotarea.getArea();
476
		var area = plotarea.getArea();
475
		var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
477
		var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
476
		if (data.length == 0) {
478
		if (data.length == 0) {
477
			return line;
479
			return line;
478
		}
480
		}
479
		var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
481
		var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
480
		line.appendChild(path);
482
		line.appendChild(path);
481
		path.setAttribute("fill", data[0].series.color);
483
		path.setAttribute("fill", data[0].series.color);
482
		path.setAttribute("fill-opacity", "0.4");
484
		path.setAttribute("fill-opacity", "0.4");
483
		path.setAttribute("stroke", data[0].series.color);
485
		path.setAttribute("stroke", data[0].series.color);
484
		path.setAttribute("stroke-width", "1");
486
		path.setAttribute("stroke-width", "1");
485
		path.setAttribute("stroke-opacity", "0.85");
487
		path.setAttribute("stroke-opacity", "0.85");
486
		if (data[0].series.label != null) {
488
		if (data[0].series.label != null) {
487
			path.setAttribute("title", data[0].series.label);
489
			path.setAttribute("title", data[0].series.label);
488
		}
490
		}
489
		var cmd = [];
491
		var cmd = [];
490
		for (var i = 0; i < data.length; i++) {
492
		for (var i = 0; i < data.length; i++) {
491
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
493
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
492
			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
494
			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
493
			var dx = area.left + 1;
495
			var dx = area.left + 1;
494
			var dy = area.bottom;
496
			var dy = area.bottom;
495
			if (i > 0) {
497
			if (i > 0) {
496
				dx = x - plot.axisX.getCoord(data[i - 1].x, plotarea, plot);
498
				dx = x - plot.axisX.getCoord(data[i - 1].x, plotarea, plot);
497
				dy = plot.axisY.getCoord(data[i - 1].y, plotarea, plot);
499
				dy = plot.axisY.getCoord(data[i - 1].y, plotarea, plot);
498
			}
500
			}
499
			if (i == 0) {
501
			if (i == 0) {
500
				cmd.push("M");
502
				cmd.push("M");
501
			} else {
503
			} else {
502
				cmd.push("C");
504
				cmd.push("C");
503
				var cx = x - (tension - 1) * (dx / tension);
505
				var cx = x - (tension - 1) * (dx / tension);
504
				cmd.push(cx + "," + dy);
506
				cmd.push(cx + "," + dy);
505
				cx = x - (dx / tension);
507
				cx = x - (dx / tension);
506
				cmd.push(cx + "," + y);
508
				cmd.push(cx + "," + y);
507
			}
509
			}
508
			cmd.push(x + "," + y);
510
			cmd.push(x + "," + y);
509
			var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
511
			var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
510
			c.setAttribute("cx", x);
512
			c.setAttribute("cx", x);
511
			c.setAttribute("cy", y);
513
			c.setAttribute("cy", y);
512
			c.setAttribute("r", "3");
514
			c.setAttribute("r", "3");
513
			c.setAttribute("fill", data[i].series.color);
515
			c.setAttribute("fill", data[i].series.color);
514
			c.setAttribute("fill-opacity", "0.6");
516
			c.setAttribute("fill-opacity", "0.6");
515
			c.setAttribute("stroke-width", "1");
517
			c.setAttribute("stroke-width", "1");
516
			c.setAttribute("stroke-opacity", "0.85");
518
			c.setAttribute("stroke-opacity", "0.85");
517
			line.appendChild(c);
519
			line.appendChild(c);
518
			if (applyTo) {
520
			if (applyTo) {
519
				applyTo(c, data[i].src);
521
				applyTo(c, data[i].src);
520
			}
522
			}
521
		}
523
		}
522
		cmd.push("L");
524
		cmd.push("L");
523
		cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
525
		cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
524
		cmd.push("L");
526
		cmd.push("L");
525
		cmd.push(plot.axisX.getCoord(data[0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
527
		cmd.push(plot.axisX.getCoord(data[0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
526
		cmd.push("Z");
528
		cmd.push("Z");
527
		path.setAttribute("d", cmd.join(" "));
529
		path.setAttribute("d", cmd.join(" "));
528
		return line;
530
		return line;
529
	}, HighLow:function (data, plotarea, plot, applyTo) {
531
	}, HighLow:function (data, plotarea, plot, applyTo) {
530
		var area = plotarea.getArea();
532
		var area = plotarea.getArea();
531
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
533
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
532
		var n = data.length;
534
		var n = data.length;
533
		var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4;
535
		var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4;
534
		var w = part * 2;
536
		var w = part * 2;
535
		for (var i = 0; i < n; i++) {
537
		for (var i = 0; i < n; i++) {
536
			var high = data[i].high;
538
			var high = data[i].high;
537
			var low = data[i].low;
539
			var low = data[i].low;
538
			if (low > high) {
540
			if (low > high) {
539
				var t = low;
541
				var t = low;
540
				low = high;
542
				low = high;
541
				high = t;
543
				high = t;
542
			}
544
			}
543
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
545
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
544
			var y = plot.axisY.getCoord(high, plotarea, plot);
546
			var y = plot.axisY.getCoord(high, plotarea, plot);
545
			var h = plot.axisY.getCoord(low, plotarea, plot) - y;
547
			var h = plot.axisY.getCoord(low, plotarea, plot) - y;
546
			var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
548
			var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
547
			bar.setAttribute("fill", data[i].series.color);
549
			bar.setAttribute("fill", data[i].series.color);
548
			bar.setAttribute("stroke-width", "0");
550
			bar.setAttribute("stroke-width", "0");
549
			bar.setAttribute("x", x);
551
			bar.setAttribute("x", x);
550
			bar.setAttribute("y", y);
552
			bar.setAttribute("y", y);
551
			bar.setAttribute("width", w);
553
			bar.setAttribute("width", w);
552
			bar.setAttribute("height", h);
554
			bar.setAttribute("height", h);
553
			bar.setAttribute("fill-opacity", "0.6");
555
			bar.setAttribute("fill-opacity", "0.6");
554
			if (applyTo) {
556
			if (applyTo) {
555
				applyTo(bar, data[i].src);
557
				applyTo(bar, data[i].src);
556
			}
558
			}
557
			group.appendChild(bar);
559
			group.appendChild(bar);
558
		}
560
		}
559
		return group;
561
		return group;
560
	}, HighLowClose:function (data, plotarea, plot, applyTo) {
562
	}, HighLowClose:function (data, plotarea, plot, applyTo) {
561
		var area = plotarea.getArea();
563
		var area = plotarea.getArea();
562
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
564
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
563
		var n = data.length;
565
		var n = data.length;
564
		var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4;
566
		var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4;
565
		var w = part * 2;
567
		var w = part * 2;
566
		for (var i = 0; i < n; i++) {
568
		for (var i = 0; i < n; i++) {
567
			var high = data[i].high;
569
			var high = data[i].high;
568
			var low = data[i].low;
570
			var low = data[i].low;
569
			if (low > high) {
571
			if (low > high) {
570
				var t = low;
572
				var t = low;
571
				low = high;
573
				low = high;
572
				high = t;
574
				high = t;
573
			}
575
			}
574
			var c = data[i].close;
576
			var c = data[i].close;
575
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
577
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
576
			var y = plot.axisY.getCoord(high, plotarea, plot);
578
			var y = plot.axisY.getCoord(high, plotarea, plot);
577
			var h = plot.axisY.getCoord(low, plotarea, plot) - y;
579
			var h = plot.axisY.getCoord(low, plotarea, plot) - y;
578
			var close = plot.axisY.getCoord(c, plotarea, plot);
580
			var close = plot.axisY.getCoord(c, plotarea, plot);
579
			var g = document.createElementNS(dojo.svg.xmlns.svg, "g");
581
			var g = document.createElementNS(dojo.svg.xmlns.svg, "g");
580
			var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
582
			var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
581
			bar.setAttribute("fill", data[i].series.color);
583
			bar.setAttribute("fill", data[i].series.color);
582
			bar.setAttribute("stroke-width", "0");
584
			bar.setAttribute("stroke-width", "0");
583
			bar.setAttribute("x", x);
585
			bar.setAttribute("x", x);
584
			bar.setAttribute("y", y);
586
			bar.setAttribute("y", y);
585
			bar.setAttribute("width", w);
587
			bar.setAttribute("width", w);
586
			bar.setAttribute("height", h);
588
			bar.setAttribute("height", h);
587
			bar.setAttribute("fill-opacity", "0.6");
589
			bar.setAttribute("fill-opacity", "0.6");
588
			g.appendChild(bar);
590
			g.appendChild(bar);
589
			var line = document.createElementNS(dojo.svg.xmlns.svg, "line");
591
			var line = document.createElementNS(dojo.svg.xmlns.svg, "line");
590
			line.setAttribute("x1", x);
592
			line.setAttribute("x1", x);
591
			line.setAttribute("x2", x + w + (part * 2));
593
			line.setAttribute("x2", x + w + (part * 2));
592
			line.setAttribute("y1", close);
594
			line.setAttribute("y1", close);
593
			line.setAttribute("y2", close);
595
			line.setAttribute("y2", close);
594
			line.setAttribute("style", "stroke:" + data[i].series.color + ";stroke-width:1px;stroke-opacity:0.6;");
596
			line.setAttribute("style", "stroke:" + data[i].series.color + ";stroke-width:1px;stroke-opacity:0.6;");
595
			g.appendChild(line);
597
			g.appendChild(line);
596
			if (applyTo) {
598
			if (applyTo) {
597
				applyTo(g, data[i].src);
599
				applyTo(g, data[i].src);
598
			}
600
			}
599
			group.appendChild(g);
601
			group.appendChild(g);
600
		}
602
		}
601
		return group;
603
		return group;
602
	}, HighLowOpenClose:function (data, plotarea, plot, applyTo) {
604
	}, HighLowOpenClose:function (data, plotarea, plot, applyTo) {
603
		var area = plotarea.getArea();
605
		var area = plotarea.getArea();
604
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
606
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
605
		var n = data.length;
607
		var n = data.length;
606
		var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4;
608
		var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4;
607
		var w = part * 2;
609
		var w = part * 2;
608
		for (var i = 0; i < n; i++) {
610
		for (var i = 0; i < n; i++) {
609
			var high = data[i].high;
611
			var high = data[i].high;
610
			var low = data[i].low;
612
			var low = data[i].low;
611
			if (low > high) {
613
			if (low > high) {
612
				var t = low;
614
				var t = low;
613
				low = high;
615
				low = high;
614
				high = t;
616
				high = t;
615
			}
617
			}
616
			var o = data[i].open;
618
			var o = data[i].open;
617
			var c = data[i].close;
619
			var c = data[i].close;
618
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
620
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
619
			var y = plot.axisY.getCoord(high, plotarea, plot);
621
			var y = plot.axisY.getCoord(high, plotarea, plot);
620
			var h = plot.axisY.getCoord(low, plotarea, plot) - y;
622
			var h = plot.axisY.getCoord(low, plotarea, plot) - y;
621
			var open = plot.axisY.getCoord(o, plotarea, plot);
623
			var open = plot.axisY.getCoord(o, plotarea, plot);
622
			var close = plot.axisY.getCoord(c, plotarea, plot);
624
			var close = plot.axisY.getCoord(c, plotarea, plot);
623
			var g = document.createElementNS(dojo.svg.xmlns.svg, "g");
625
			var g = document.createElementNS(dojo.svg.xmlns.svg, "g");
624
			var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
626
			var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
625
			bar.setAttribute("fill", data[i].series.color);
627
			bar.setAttribute("fill", data[i].series.color);
626
			bar.setAttribute("stroke-width", "0");
628
			bar.setAttribute("stroke-width", "0");
627
			bar.setAttribute("x", x);
629
			bar.setAttribute("x", x);
628
			bar.setAttribute("y", y);
630
			bar.setAttribute("y", y);
629
			bar.setAttribute("width", w);
631
			bar.setAttribute("width", w);
630
			bar.setAttribute("height", h);
632
			bar.setAttribute("height", h);
631
			bar.setAttribute("fill-opacity", "0.6");
633
			bar.setAttribute("fill-opacity", "0.6");
632
			g.appendChild(bar);
634
			g.appendChild(bar);
633
			var line = document.createElementNS(dojo.svg.xmlns.svg, "line");
635
			var line = document.createElementNS(dojo.svg.xmlns.svg, "line");
634
			line.setAttribute("x1", x - (part * 2));
636
			line.setAttribute("x1", x - (part * 2));
635
			line.setAttribute("x2", x + w);
637
			line.setAttribute("x2", x + w);
636
			line.setAttribute("y1", open);
638
			line.setAttribute("y1", open);
637
			line.setAttribute("y2", open);
639
			line.setAttribute("y2", open);
638
			line.setAttribute("style", "stroke:" + data[i].series.color + ";stroke-width:1px;stroke-opacity:0.6;");
640
			line.setAttribute("style", "stroke:" + data[i].series.color + ";stroke-width:1px;stroke-opacity:0.6;");
639
			g.appendChild(line);
641
			g.appendChild(line);
640
			var line = document.createElementNS(dojo.svg.xmlns.svg, "line");
642
			var line = document.createElementNS(dojo.svg.xmlns.svg, "line");
641
			line.setAttribute("x1", x);
643
			line.setAttribute("x1", x);
642
			line.setAttribute("x2", x + w + (part * 2));
644
			line.setAttribute("x2", x + w + (part * 2));
643
			line.setAttribute("y1", close);
645
			line.setAttribute("y1", close);
644
			line.setAttribute("y2", close);
646
			line.setAttribute("y2", close);
645
			line.setAttribute("style", "stroke:" + data[i].series.color + ";stroke-width:1px;stroke-opacity:0.6;");
647
			line.setAttribute("style", "stroke:" + data[i].series.color + ";stroke-width:1px;stroke-opacity:0.6;");
646
			g.appendChild(line);
648
			g.appendChild(line);
647
			if (applyTo) {
649
			if (applyTo) {
648
				applyTo(g, data[i].src);
650
				applyTo(g, data[i].src);
649
			}
651
			}
650
			group.appendChild(g);
652
			group.appendChild(g);
651
		}
653
		}
652
		return group;
654
		return group;
653
	}, Scatter:function (data, plotarea, plot, applyTo) {
655
	}, Scatter:function (data, plotarea, plot, applyTo) {
654
		var r = 7;
656
		var r = 7;
655
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
657
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
656
		for (var i = 0; i < data.length; i++) {
658
		for (var i = 0; i < data.length; i++) {
657
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
659
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
658
			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
660
			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
659
			var point = document.createElementNS(dojo.svg.xmlns.svg, "path");
661
			var point = document.createElementNS(dojo.svg.xmlns.svg, "path");
660
			point.setAttribute("fill", data[i].series.color);
662
			point.setAttribute("fill", data[i].series.color);
661
			point.setAttribute("stroke-width", "0");
663
			point.setAttribute("stroke-width", "0");
662
			point.setAttribute("d", "M " + x + "," + (y - r) + " " + "Q " + x + "," + y + " " + (x + r) + "," + y + " " + "Q " + x + "," + y + " " + x + "," + (y + r) + " " + "Q " + x + "," + y + " " + (x - r) + "," + y + " " + "Q " + x + "," + y + " " + x + "," + (y - r) + " " + "Z");
664
			point.setAttribute("d", "M " + x + "," + (y - r) + " " + "Q " + x + "," + y + " " + (x + r) + "," + y + " " + "Q " + x + "," + y + " " + x + "," + (y + r) + " " + "Q " + x + "," + y + " " + (x - r) + "," + y + " " + "Q " + x + "," + y + " " + x + "," + (y - r) + " " + "Z");
663
			if (applyTo) {
665
			if (applyTo) {
664
				applyTo(point, data[i].src);
666
				applyTo(point, data[i].src);
665
			}
667
			}
666
			group.appendChild(point);
668
			group.appendChild(point);
667
		}
669
		}
668
		return group;
670
		return group;
669
	}, Bubble:function (data, plotarea, plot, applyTo) {
671
	}, Bubble:function (data, plotarea, plot, applyTo) {
670
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
672
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
671
		var sizeFactor = 1;
673
		var sizeFactor = 1;
672
		for (var i = 0; i < data.length; i++) {
674
		for (var i = 0; i < data.length; i++) {
673
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
675
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
674
			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
676
			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
675
			if (i == 0) {
677
			if (i == 0) {
676
				var raw = data[i].size;
678
				var raw = data[i].size;
677
				var dy = plot.axisY.getCoord(data[i].y + raw, plotarea, plot) - y;
679
				var dy = plot.axisY.getCoord(data[i].y + raw, plotarea, plot) - y;
678
				sizeFactor = dy / raw;
680
				sizeFactor = dy / raw;
679
			}
681
			}
680
			if (sizeFactor < 1) {
682
			if (sizeFactor < 1) {
681
				sizeFactor = 1;
683
				sizeFactor = 1;
682
			}
684
			}
683
			var point = document.createElementNS(dojo.svg.xmlns.svg, "circle");
685
			var point = document.createElementNS(dojo.svg.xmlns.svg, "circle");
684
			point.setAttribute("fill", data[i].series.color);
686
			point.setAttribute("fill", data[i].series.color);
685
			point.setAttribute("fill-opacity", "0.8");
687
			point.setAttribute("fill-opacity", "0.8");
686
			point.setAttribute("stroke", data[i].series.color);
688
			point.setAttribute("stroke", data[i].series.color);
687
			point.setAttribute("stroke-width", "1");
689
			point.setAttribute("stroke-width", "1");
688
			point.setAttribute("cx", x);
690
			point.setAttribute("cx", x);
689
			point.setAttribute("cy", y);
691
			point.setAttribute("cy", y);
690
			point.setAttribute("r", (data[i].size / 2) * sizeFactor);
692
			point.setAttribute("r", (data[i].size / 2) * sizeFactor);
691
			if (applyTo) {
693
			if (applyTo) {
692
				applyTo(point, data[i].src);
694
				applyTo(point, data[i].src);
693
			}
695
			}
694
			group.appendChild(point);
696
			group.appendChild(point);
695
		}
697
		}
696
		return group;
698
		return group;
697
	}});
699
	}});
698
	dojo.charting.Plotters["Default"] = dojo.charting.Plotters.Line;
700
	dojo.charting.Plotters["Default"] = dojo.charting.Plotters.Line;
699
}
701
}
700
 
702