update status div
[dygraphs.git] / dygraph-combined.js
CommitLineData
6219c9d6 1Date.ext={};Date.ext.util={};Date.ext.util.xPad=function(x,pad,r){if(typeof (r)=="undefined"){r=10}for(;parseInt(x,10)<r&&r>1;r/=10){x=pad.toString()+x}return x.toString()};Date.prototype.locale="en-GB";if(document.getElementsByTagName("html")&&document.getElementsByTagName("html")[0].lang){Date.prototype.locale=document.getElementsByTagName("html")[0].lang}Date.ext.locales={};Date.ext.locales.en={a:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],A:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],b:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],B:["January","February","March","April","May","June","July","August","September","October","November","December"],c:"%a %d %b %Y %T %Z",p:["AM","PM"],P:["am","pm"],x:"%d/%m/%y",X:"%T"};Date.ext.locales["en-US"]=Date.ext.locales.en;Date.ext.locales["en-US"].c="%a %d %b %Y %r %Z";Date.ext.locales["en-US"].x="%D";Date.ext.locales["en-US"].X="%r";Date.ext.locales["en-GB"]=Date.ext.locales.en;Date.ext.locales["en-AU"]=Date.ext.locales["en-GB"];Date.ext.formats={a:function(d){return Date.ext.locales[d.locale].a[d.getDay()]},A:function(d){return Date.ext.locales[d.locale].A[d.getDay()]},b:function(d){return Date.ext.locales[d.locale].b[d.getMonth()]},B:function(d){return Date.ext.locales[d.locale].B[d.getMonth()]},c:"toLocaleString",C:function(d){return Date.ext.util.xPad(parseInt(d.getFullYear()/100,10),0)},d:["getDate","0"],e:["getDate"," "],g:function(d){return Date.ext.util.xPad(parseInt(Date.ext.util.G(d)/100,10),0)},G:function(d){var y=d.getFullYear();var V=parseInt(Date.ext.formats.V(d),10);var W=parseInt(Date.ext.formats.W(d),10);if(W>V){y++}else{if(W===0&&V>=52){y--}}return y},H:["getHours","0"],I:function(d){var I=d.getHours()%12;return Date.ext.util.xPad(I===0?12:I,0)},j:function(d){var ms=d-new Date(""+d.getFullYear()+"/1/1 GMT");ms+=d.getTimezoneOffset()*60000;var doy=parseInt(ms/60000/60/24,10)+1;return Date.ext.util.xPad(doy,0,100)},m:function(d){return Date.ext.util.xPad(d.getMonth()+1,0)},M:["getMinutes","0"],p:function(d){return Date.ext.locales[d.locale].p[d.getHours()>=12?1:0]},P:function(d){return Date.ext.locales[d.locale].P[d.getHours()>=12?1:0]},S:["getSeconds","0"],u:function(d){var dow=d.getDay();return dow===0?7:dow},U:function(d){var doy=parseInt(Date.ext.formats.j(d),10);var rdow=6-d.getDay();var woy=parseInt((doy+rdow)/7,10);return Date.ext.util.xPad(woy,0)},V:function(d){var woy=parseInt(Date.ext.formats.W(d),10);var dow1_1=(new Date(""+d.getFullYear()+"/1/1")).getDay();var idow=woy+(dow1_1>4||dow1_1<=1?0:1);if(idow==53&&(new Date(""+d.getFullYear()+"/12/31")).getDay()<4){idow=1}else{if(idow===0){idow=Date.ext.formats.V(new Date(""+(d.getFullYear()-1)+"/12/31"))}}return Date.ext.util.xPad(idow,0)},w:"getDay",W:function(d){var doy=parseInt(Date.ext.formats.j(d),10);var rdow=7-Date.ext.formats.u(d);var woy=parseInt((doy+rdow)/7,10);return Date.ext.util.xPad(woy,0,10)},y:function(d){return Date.ext.util.xPad(d.getFullYear()%100,0)},Y:"getFullYear",z:function(d){var o=d.getTimezoneOffset();var H=Date.ext.util.xPad(parseInt(Math.abs(o/60),10),0);var M=Date.ext.util.xPad(o%60,0);return(o>0?"-":"+")+H+M},Z:function(d){return d.toString().replace(/^.*\(([^)]+)\)$/,"$1")},"%":function(d){return"%"}};Date.ext.aggregates={c:"locale",D:"%m/%d/%y",h:"%b",n:"\n",r:"%I:%M:%S %p",R:"%H:%M",t:"\t",T:"%H:%M:%S",x:"locale",X:"locale"};Date.ext.aggregates.z=Date.ext.formats.z(new Date());Date.ext.aggregates.Z=Date.ext.formats.Z(new Date());Date.ext.unsupported={};Date.prototype.strftime=function(fmt){if(!(this.locale in Date.ext.locales)){if(this.locale.replace(/-[a-zA-Z]+$/,"") in Date.ext.locales){this.locale=this.locale.replace(/-[a-zA-Z]+$/,"")}else{this.locale="en-GB"}}var d=this;while(fmt.match(/%[cDhnrRtTxXzZ]/)){fmt=fmt.replace(/%([cDhnrRtTxXzZ])/g,function(m0,m1){var f=Date.ext.aggregates[m1];return(f=="locale"?Date.ext.locales[d.locale][m1]:f)})}var str=fmt.replace(/%([aAbBCdegGHIjmMpPSuUVwWyY%])/g,function(m0,m1){var f=Date.ext.formats[m1];if(typeof (f)=="string"){return d[f]()}else{if(typeof (f)=="function"){return f.call(d,d)}else{if(typeof (f)=="object"&&typeof (f[0])=="string"){return Date.ext.util.xPad(d[f[0]](),f[1])}else{return m1}}}});d=null;return str};
efe0829a
DV
2DygraphLayout=function(_1,_2){
3this.dygraph_=_1;
4this.options={};
9c97d733 5Dygraph.update(this.options,_2?_2:{});
efe0829a
DV
6this.datasets=new Array();
7};
8DygraphLayout.prototype.attr_=function(_3){
9return this.dygraph_.attr_(_3);
10};
11DygraphLayout.prototype.addDataset=function(_4,_5){
12this.datasets[_4]=_5;
13};
14DygraphLayout.prototype.evaluate=function(){
15this._evaluateLimits();
16this._evaluateLineCharts();
17this._evaluateLineTicks();
18};
19DygraphLayout.prototype._evaluateLimits=function(){
20this.minxval=this.maxxval=null;
21for(var _6 in this.datasets){
1d54a333
DV
22if(!this.datasets.hasOwnProperty(_6)){
23continue;
24}
efe0829a
DV
25var _7=this.datasets[_6];
26var x1=_7[0][0];
27if(!this.minxval||x1<this.minxval){
28this.minxval=x1;
29}
30var x2=_7[_7.length-1][0];
31if(!this.maxxval||x2>this.maxxval){
32this.maxxval=x2;
33}
34}
35this.xrange=this.maxxval-this.minxval;
36this.xscale=(this.xrange!=0?1/this.xrange:1);
37this.minyval=this.options.yAxis[0];
38this.maxyval=this.options.yAxis[1];
39this.yrange=this.maxyval-this.minyval;
40this.yscale=(this.yrange!=0?1/this.yrange:1);
41};
42DygraphLayout.prototype._evaluateLineCharts=function(){
43this.points=new Array();
44for(var _10 in this.datasets){
1d54a333
DV
45if(!this.datasets.hasOwnProperty(_10)){
46continue;
47}
efe0829a
DV
48var _11=this.datasets[_10];
49for(var j=0;j<_11.length;j++){
50var _13=_11[j];
51var _14={x:((parseFloat(_13[0])-this.minxval)*this.xscale),y:1-((parseFloat(_13[1])-this.minyval)*this.yscale),xval:parseFloat(_13[0]),yval:parseFloat(_13[1]),name:_10};
52if(_14.y<=0){
53_14.y=0;
54}
55if(_14.y>=1){
56_14.y=1;
57}
58if((_14.x>=0)&&(_14.x<=1)){
59this.points.push(_14);
60}
61}
62}
63};
64DygraphLayout.prototype._evaluateLineTicks=function(){
65this.xticks=new Array();
66for(var i=0;i<this.options.xTicks.length;i++){
67var _16=this.options.xTicks[i];
68var _17=_16.label;
69var pos=this.xscale*(_16.v-this.minxval);
70if((pos>=0)&&(pos<=1)){
71this.xticks.push([pos,_17]);
72}
73}
74this.yticks=new Array();
75for(var i=0;i<this.options.yTicks.length;i++){
76var _16=this.options.yTicks[i];
77var _17=_16.label;
78var pos=1-(this.yscale*(_16.v-this.minyval));
79if((pos>=0)&&(pos<=1)){
80this.yticks.push([pos,_17]);
81}
82}
6a1aa64f 83};
285a6bda 84DygraphLayout.prototype.evaluateWithError=function(){
b2a516b8
DV
85this.evaluate();
86if(!this.options.errorBars){
87return;
88}
89var i=0;
efe0829a 90for(var _19 in this.datasets){
1d54a333
DV
91if(!this.datasets.hasOwnProperty(_19)){
92continue;
93}
b2a516b8 94var j=0;
efe0829a 95var _20=this.datasets[_19];
efe0829a
DV
96for(var j=0;j<_20.length;j++,i++){
97var _21=_20[j];
98var xv=parseFloat(_21[0]);
99var yv=parseFloat(_21[1]);
b2a516b8 100if(xv==this.points[i].xval&&yv==this.points[i].yval){
efe0829a
DV
101this.points[i].errorMinus=parseFloat(_21[2]);
102this.points[i].errorPlus=parseFloat(_21[3]);
b2a516b8
DV
103}
104}
105}
6a1aa64f 106};
285a6bda 107DygraphLayout.prototype.removeAllDatasets=function(){
b2a516b8
DV
108delete this.datasets;
109this.datasets=new Array();
6a1aa64f 110};
efe0829a 111DygraphLayout.prototype.updateOptions=function(_24){
9c97d733 112Dygraph.update(this.options,_24?_24:{});
b2a516b8 113};
efe0829a 114DygraphCanvasRenderer=function(_25,_26,_27,_28){
efe0829a 115this.dygraph_=_25;
f474c2a3 116this.options={"strokeWidth":0.5,"drawXAxis":true,"drawYAxis":true,"axisLineColor":"black","axisLineWidth":0.5,"axisTickSize":3,"axisLabelColor":"black","axisLabelFont":"Arial","axisLabelFontSize":9,"axisLabelWidth":50,"drawYGrid":true,"drawXGrid":true,"gridLineColor":"rgb(128,128,128)"};
9c97d733 117Dygraph.update(this.options,_28);
fbe31dc8 118this.layout=_27;
b0c3b730 119this.element=_26;
fbe31dc8 120this.container=this.element.parentNode;
fbe31dc8
DV
121this.height=this.element.height;
122this.width=this.element.width;
123if(!this.isIE&&!(DygraphCanvasRenderer.isSupported(this.element))){
124throw "Canvas is not supported.";
125}
126this.xlabels=new Array();
127this.ylabels=new Array();
128this.area={x:this.options.yAxisLabelWidth+2*this.options.axisTickSize,y:0};
129this.area.w=this.width-this.area.x-this.options.rightGap;
130this.area.h=this.height-this.options.axisLabelFontSize-2*this.options.axisTickSize;
b0c3b730
DV
131this.container.style.position="relative";
132this.container.style.width=this.width+"px";
fbe31dc8
DV
133};
134DygraphCanvasRenderer.prototype.clear=function(){
135if(this.isIE){
136try{
137if(this.clearDelay){
138this.clearDelay.cancel();
139this.clearDelay=null;
140}
141var _29=this.element.getContext("2d");
142}
143catch(e){
144this.clearDelay=MochiKit.Async.wait(this.IEDelay);
145this.clearDelay.addCallback(bind(this.clear,this));
146return;
147}
148}
149var _29=this.element.getContext("2d");
150_29.clearRect(0,0,this.width,this.height);
2160ed4a 151for(var i=0;i<this.xlabels.length;i++){
b0c3b730
DV
152var el=this.xlabels[i];
153el.parentNode.removeChild(el);
2160ed4a
DV
154}
155for(var i=0;i<this.ylabels.length;i++){
b0c3b730
DV
156var el=this.ylabels[i];
157el.parentNode.removeChild(el);
2160ed4a 158}
fbe31dc8
DV
159this.xlabels=new Array();
160this.ylabels=new Array();
161};
b0c3b730
DV
162DygraphCanvasRenderer.isSupported=function(_31){
163var _32=null;
fbe31dc8 164try{
21d3323f 165if(typeof (_31)=="undefined"||_31==null){
b0c3b730 166_32=document.createElement("canvas");
fbe31dc8 167}else{
b0c3b730 168_32=_31;
fbe31dc8 169}
b0c3b730 170var _33=_32.getContext("2d");
fbe31dc8
DV
171}
172catch(e){
173var ie=navigator.appVersion.match(/MSIE (\d\.\d)/);
b0c3b730
DV
174var _35=(navigator.userAgent.toLowerCase().indexOf("opera")!=-1);
175if((!ie)||(ie[1]<6)||(_35)){
fbe31dc8
DV
176return false;
177}
178return true;
179}
180return true;
b2a516b8 181};
285a6bda 182DygraphCanvasRenderer.prototype.render=function(){
b2a516b8
DV
183var ctx=this.element.getContext("2d");
184if(this.options.drawYGrid){
b0c3b730 185var _37=this.layout.yticks;
b2a516b8 186ctx.save();
f474c2a3 187ctx.strokeStyle=this.options.gridLineColor;
b2a516b8 188ctx.lineWidth=this.options.axisLineWidth;
b0c3b730 189for(var i=0;i<_37.length;i++){
b2a516b8 190var x=this.area.x;
b0c3b730 191var y=this.area.y+_37[i][0]*this.area.h;
b2a516b8
DV
192ctx.beginPath();
193ctx.moveTo(x,y);
194ctx.lineTo(x+this.area.w,y);
195ctx.closePath();
196ctx.stroke();
197}
198}
199if(this.options.drawXGrid){
b0c3b730 200var _37=this.layout.xticks;
b2a516b8 201ctx.save();
f474c2a3 202ctx.strokeStyle=this.options.gridLineColor;
b2a516b8 203ctx.lineWidth=this.options.axisLineWidth;
b0c3b730
DV
204for(var i=0;i<_37.length;i++){
205var x=this.area.x+_37[i][0]*this.area.w;
b2a516b8
DV
206var y=this.area.y+this.area.h;
207ctx.beginPath();
208ctx.moveTo(x,y);
209ctx.lineTo(x,this.area.y);
210ctx.closePath();
211ctx.stroke();
212}
213}
2ce09b19 214this._renderLineChart();
fbe31dc8 215this._renderAxis();
b2a516b8 216};
fbe31dc8
DV
217DygraphCanvasRenderer.prototype._renderAxis=function(){
218if(!this.options.drawXAxis&&!this.options.drawYAxis){
219return;
220}
b0c3b730 221var _40=this.element.getContext("2d");
f474c2a3 222var _41={"position":"absolute","fontSize":this.options.axisLabelFontSize+"px","zIndex":10,"color":this.options.axisLabelColor,"width":this.options.axisLabelWidth+"px","overflow":"hidden"};
bd597afc
DV
223var _42=function(txt){
224var div=document.createElement("div");
225for(var _45 in _41){
1d54a333 226if(_41.hasOwnProperty(_45)){
bd597afc
DV
227div.style[_45]=_41[_45];
228}
1d54a333 229}
bd597afc
DV
230div.appendChild(document.createTextNode(txt));
231return div;
232};
b0c3b730 233_40.save();
f474c2a3 234_40.strokeStyle=this.options.axisLineColor;
b0c3b730 235_40.lineWidth=this.options.axisLineWidth;
fbe31dc8 236if(this.options.drawYAxis){
d9369404 237if(this.layout.yticks&&this.layout.yticks.length>0){
2160ed4a 238for(var i=0;i<this.layout.yticks.length;i++){
bd597afc
DV
239var _46=this.layout.yticks[i];
240if(typeof (_46)=="function"){
fbe31dc8
DV
241return;
242}
243var x=this.area.x;
bd597afc 244var y=this.area.y+_46[0]*this.area.h;
b0c3b730
DV
245_40.beginPath();
246_40.moveTo(x,y);
247_40.lineTo(x-this.options.axisTickSize,y);
248_40.closePath();
249_40.stroke();
bd597afc 250var _47=_42(_46[1]);
fbe31dc8
DV
251var top=(y-this.options.axisLabelFontSize/2);
252if(top<0){
253top=0;
254}
255if(top+this.options.axisLabelFontSize+3>this.height){
bd597afc 256_47.style.bottom="0px";
fbe31dc8 257}else{
bd597afc 258_47.style.top=top+"px";
fbe31dc8 259}
bd597afc
DV
260_47.style.left="0px";
261_47.style.textAlign="right";
262_47.style.width=this.options.yAxisLabelWidth+"px";
263this.container.appendChild(_47);
264this.ylabels.push(_47);
2160ed4a 265}
bd597afc
DV
266var _49=this.ylabels[0];
267var _50=this.options.axisLabelFontSize;
268var _51=parseInt(_49.style.top)+_50;
269if(_51>this.height-_50){
270_49.style.top=(parseInt(_49.style.top)-_50/2)+"px";
fbe31dc8
DV
271}
272}
b0c3b730
DV
273_40.beginPath();
274_40.moveTo(this.area.x,this.area.y);
275_40.lineTo(this.area.x,this.area.y+this.area.h);
276_40.closePath();
277_40.stroke();
fbe31dc8
DV
278}
279if(this.options.drawXAxis){
280if(this.layout.xticks){
2160ed4a 281for(var i=0;i<this.layout.xticks.length;i++){
bd597afc 282var _46=this.layout.xticks[i];
fbe31dc8
DV
283if(typeof (dataset)=="function"){
284return;
285}
bd597afc 286var x=this.area.x+_46[0]*this.area.w;
fbe31dc8 287var y=this.area.y+this.area.h;
b0c3b730
DV
288_40.beginPath();
289_40.moveTo(x,y);
290_40.lineTo(x,y+this.options.axisTickSize);
291_40.closePath();
292_40.stroke();
bd597afc
DV
293var _47=_42(_46[1]);
294_47.style.textAlign="center";
295_47.style.bottom="0px";
296var _52=(x-this.options.axisLabelWidth/2);
297if(_52+this.options.axisLabelWidth>this.width){
298_52=this.width-this.options.xAxisLabelWidth;
299_47.style.textAlign="right";
b0c3b730 300}
bd597afc
DV
301if(_52<0){
302_52=0;
303_47.style.textAlign="left";
b0c3b730 304}
bd597afc
DV
305_47.style.left=_52+"px";
306_47.style.width=this.options.xAxisLabelWidth+"px";
307this.container.appendChild(_47);
308this.xlabels.push(_47);
b0c3b730
DV
309}
310}
311_40.beginPath();
312_40.moveTo(this.area.x,this.area.y+this.area.h);
313_40.lineTo(this.area.x+this.area.w,this.area.y+this.area.h);
314_40.closePath();
315_40.stroke();
316}
317_40.restore();
efe0829a 318};
fbe31dc8 319DygraphCanvasRenderer.prototype._renderLineChart=function(){
bd597afc
DV
320var _53=this.element.getContext("2d");
321var _54=this.options.colorScheme.length;
322var _55=this.options.colorScheme;
21d3323f 323var _56=this.layout.options.errorBars;
9c97d733
DV
324var _57=[];
325for(var _58 in this.layout.datasets){
1d54a333 326if(this.layout.datasets.hasOwnProperty(_58)){
9c97d733 327_57.push(_58);
21d3323f 328}
1d54a333 329}
9c97d733 330var _59=_57.length;
2160ed4a 331for(var i=0;i<this.layout.points.length;i++){
9c97d733
DV
332var _60=this.layout.points[i];
333_60.canvasx=this.area.w*_60.x+this.area.x;
334_60.canvasy=this.area.h*_60.y+this.area.y;
2160ed4a 335}
9c97d733 336var _61=function(x){
9317362d
DV
337return x&&!isNaN(x);
338};
9c97d733
DV
339var ctx=_53;
340if(_56){
341for(var i=0;i<_59;i++){
342var _62=_57[i];
343var _63=_55[i%_54];
344ctx.save();
345ctx.strokeStyle=_63;
f474c2a3 346ctx.lineWidth=this.options.strokeWidth;
9c97d733
DV
347var _64=-1;
348var _65=[-1,-1];
349var _66=0;
350var _67=this.layout.yscale;
351var rgb=new RGBColor(_63);
352var _69="rgba("+rgb.r+","+rgb.g+","+rgb.b+",0.15)";
353ctx.fillStyle=_69;
9317362d 354ctx.beginPath();
9c97d733
DV
355for(var j=0;j<this.layout.points.length;j++){
356var _60=this.layout.points[j];
357_66++;
358if(_60.name==_62){
359if(!_60.y||isNaN(_60.y)){
360_64=-1;
361continue;
362}
363var _70=[_60.y-_60.errorPlus*_67,_60.y+_60.errorMinus*_67];
364_70[0]=this.area.h*_70[0]+this.area.y;
365_70[1]=this.area.h*_70[1]+this.area.y;
366if(_64>=0){
367ctx.moveTo(_64,_65[0]);
368ctx.lineTo(_60.canvasx,_70[0]);
369ctx.lineTo(_60.canvasx,_70[1]);
370ctx.lineTo(_64,_65[1]);
371ctx.closePath();
9317362d 372}
9c97d733
DV
373_65[0]=_70[0];
374_65[1]=_70[1];
375_64=_60.canvasx;
b2a516b8 376}
648acd28 377}
9c97d733 378ctx.fill();
b2a516b8 379}
b2a516b8 380}
9c97d733
DV
381for(var i=0;i<_59;i++){
382var _62=_57[i];
383var _63=_55[i%_54];
bd597afc 384_53.save();
9c97d733
DV
385var _60=this.layout.points[0];
386var _71=this.dygraph_.attr_("pointSize");
387var _64=null,prevY=null;
388var _72=this.dygraph_.attr_("drawPoints");
389var _73=this.layout.points;
390for(var j=0;j<_73.length;j++){
391var _60=_73[j];
392if(_60.name==_62){
393if(!_61(_60.canvasy)){
394_64=prevY=null;
395}else{
396var _74=(!_64&&(j==_73.length-1||!_61(_73[j+1].canvasy)));
397if(!_64){
398_64=_60.canvasx;
399prevY=_60.canvasy;
400}else{
5fb1199a 401ctx.beginPath();
9c97d733
DV
402ctx.strokeStyle=_63;
403ctx.lineWidth=this.options.strokeWidth;
404ctx.moveTo(_64,prevY);
405_64=_60.canvasx;
406prevY=_60.canvasy;
407ctx.lineTo(_64,prevY);
408ctx.stroke();
648acd28 409}
9c97d733
DV
410if(_72||_74){
411ctx.beginPath();
412ctx.fillStyle=_63;
681a238e 413ctx.arc(_60.canvasx,_60.canvasy,_71,0,2*Math.PI,false);
9c97d733 414ctx.fill();
5fb1199a 415}
b2a516b8 416}
b2a516b8 417}
b2a516b8 418}
b2a516b8 419}
bd597afc 420_53.restore();
6a1aa64f 421};
9c97d733 422Dygraph=function(div,_75,_76){
b2a516b8 423if(arguments.length>0){
285a6bda
DV
424if(arguments.length==4){
425this.warn("Using deprecated four-argument dygraph constructor");
9c97d733 426this.__old_init__(div,_75,arguments[2],arguments[3]);
285a6bda 427}else{
9c97d733 428this.__init__(div,_75,_76);
285a6bda 429}
b2a516b8 430}
6a1aa64f 431};
285a6bda
DV
432Dygraph.NAME="Dygraph";
433Dygraph.VERSION="1.2";
434Dygraph.__repr__=function(){
b2a516b8 435return "["+this.NAME+" "+this.VERSION+"]";
6a1aa64f 436};
285a6bda 437Dygraph.toString=function(){
b2a516b8 438return this.__repr__();
6a1aa64f 439};
285a6bda
DV
440Dygraph.DEFAULT_ROLL_PERIOD=1;
441Dygraph.DEFAULT_WIDTH=480;
442Dygraph.DEFAULT_HEIGHT=320;
443Dygraph.AXIS_LINE_WIDTH=0.3;
aa8aa4e8 444Dygraph.DEFAULT_ATTRS={highlightCircleSize:3,pixelsPerXLabel:60,pixelsPerYLabel:30,labelsDivWidth:250,labelsDivStyles:{},labelsSeparateLines:false,labelsKMB:false,labelsKMG2:false,strokeWidth:1,axisTickSize:3,axisLabelFontSize:14,xAxisLabelWidth:50,yAxisLabelWidth:50,rightGap:5,showRoller:false,xValueFormatter:Dygraph.dateString_,xValueParser:Dygraph.dateParser,xTicker:Dygraph.dateTicker,delimiter:",",sigma:2,errorBars:false,fractions:false,wilsonInterval:true,customBars:false};
285a6bda
DV
445Dygraph.DEBUG=1;
446Dygraph.INFO=2;
447Dygraph.WARNING=3;
448Dygraph.ERROR=3;
9c97d733
DV
449Dygraph.prototype.__old_init__=function(div,_77,_78,_79){
450if(_78!=null){
451var _80=["Date"];
452for(var i=0;i<_78.length;i++){
453_80.push(_78[i]);
285a6bda 454}
9c97d733 455Dygraph.update(_79,{"labels":_80});
285a6bda 456}
9c97d733 457this.__init__(div,_77,_79);
285a6bda 458};
9c97d733
DV
459Dygraph.prototype.__init__=function(div,_81,_82){
460if(_82==null){
461_82={};
285a6bda 462}
b2a516b8 463this.maindiv_=div;
9c97d733
DV
464this.file_=_81;
465this.rollPeriod_=_82.rollPeriod||Dygraph.DEFAULT_ROLL_PERIOD;
b2a516b8 466this.previousVerticalX_=-1;
9c97d733
DV
467this.fractions_=_82.fractions||false;
468this.dateWindow_=_82.dateWindow||null;
469this.valueRange_=_82.valueRange||null;
470this.wilsonInterval_=_82.wilsonInterval||true;
caf49918 471div.innerHTML="";
285a6bda
DV
472if(div.style.width==""){
473div.style.width=Dygraph.DEFAULT_WIDTH+"px";
474}
475if(div.style.height==""){
476div.style.height=Dygraph.DEFAULT_HEIGHT+"px";
477}
b2a516b8
DV
478this.width_=parseInt(div.style.width,10);
479this.height_=parseInt(div.style.height,10);
285a6bda 480this.user_attrs_={};
9c97d733 481Dygraph.update(this.user_attrs_,_82);
b8339f6e 482this.attrs_={};
9c97d733 483Dygraph.update(this.attrs_,Dygraph.DEFAULT_ATTRS);
285a6bda 484this.labelsFromCSV_=(this.attr_("labels")==null);
b2a516b8 485this.createInterface_();
49a7d0d5 486this.layoutOptions_={"xOriginIsZero":false};
9c97d733
DV
487Dygraph.update(this.layoutOptions_,this.attrs_);
488Dygraph.update(this.layoutOptions_,this.user_attrs_);
49a7d0d5 489Dygraph.update(this.layoutOptions_,{"errorBars":(this.attr_("errorBars")||this.attr_("customBars"))});
efe0829a 490this.layout_=new DygraphLayout(this,this.layoutOptions_);
8846615a 491this.renderOptions_={colorScheme:this.colors_,strokeColor:null,axisLineWidth:Dygraph.AXIS_LINE_WIDTH};
9c97d733
DV
492Dygraph.update(this.renderOptions_,this.attrs_);
493Dygraph.update(this.renderOptions_,this.user_attrs_);
9317362d 494this.plotter_=new DygraphCanvasRenderer(this,this.hidden_,this.layout_,this.renderOptions_);
b2a516b8
DV
495this.createStatusMessage_();
496this.createRollInterface_();
497this.createDragInterface_();
b2a516b8 498this.start_();
6a1aa64f 499};
9c97d733
DV
500Dygraph.prototype.attr_=function(_83){
501if(typeof (this.user_attrs_[_83])!="undefined"){
502return this.user_attrs_[_83];
285a6bda 503}else{
9c97d733
DV
504if(typeof (this.attrs_[_83])!="undefined"){
505return this.attrs_[_83];
285a6bda
DV
506}else{
507return null;
508}
509}
510};
9c97d733 511Dygraph.prototype.log=function(_84,_85){
285a6bda 512if(typeof (console)!="undefined"){
9c97d733 513switch(_84){
285a6bda 514case Dygraph.DEBUG:
9c97d733 515console.debug("dygraphs: "+_85);
285a6bda
DV
516break;
517case Dygraph.INFO:
9c97d733 518console.info("dygraphs: "+_85);
285a6bda
DV
519break;
520case Dygraph.WARNING:
9c97d733 521console.warn("dygraphs: "+_85);
285a6bda
DV
522break;
523case Dygraph.ERROR:
9c97d733 524console.error("dygraphs: "+_85);
285a6bda
DV
525break;
526}
527}
528};
9c97d733
DV
529Dygraph.prototype.info=function(_86){
530this.log(Dygraph.INFO,_86);
285a6bda 531};
9c97d733
DV
532Dygraph.prototype.warn=function(_87){
533this.log(Dygraph.WARNING,_87);
285a6bda 534};
9c97d733
DV
535Dygraph.prototype.error=function(_88){
536this.log(Dygraph.ERROR,_88);
285a6bda
DV
537};
538Dygraph.prototype.rollPeriod=function(){
b2a516b8
DV
539return this.rollPeriod_;
540};
76171648 541Dygraph.addEvent=function(el,evt,fn){
9c97d733 542var _91=function(e){
76171648
DV
543if(!e){
544var e=window.event;
545}
546fn(e);
547};
548if(window.addEventListener){
9c97d733 549el.addEventListener(evt,_91,false);
76171648 550}else{
9c97d733 551el.attachEvent("on"+evt,_91);
76171648
DV
552}
553};
285a6bda 554Dygraph.prototype.createInterface_=function(){
9c97d733 555var _93=this.maindiv_;
b0c3b730
DV
556this.graphDiv=document.createElement("div");
557this.graphDiv.style.width=this.width_+"px";
558this.graphDiv.style.height=this.height_+"px";
9c97d733 559_93.appendChild(this.graphDiv);
681a238e 560this.canvas_=Dygraph.createCanvas();
b0c3b730
DV
561this.canvas_.style.position="absolute";
562this.canvas_.width=this.width_;
563this.canvas_.height=this.height_;
681a238e
DV
564this.canvas_.style.width=this.width_+"px";
565this.canvas_.style.height=this.height_+"px";
b0c3b730 566this.graphDiv.appendChild(this.canvas_);
b2a516b8 567this.hidden_=this.createPlotKitCanvas_(this.canvas_);
9c97d733 568var _94=this;
76171648 569Dygraph.addEvent(this.hidden_,"mousemove",function(e){
9c97d733 570_94.mouseMove_(e);
b2a516b8 571});
76171648 572Dygraph.addEvent(this.hidden_,"mouseout",function(e){
9c97d733 573_94.mouseOut_(e);
b2a516b8 574});
6a1aa64f 575};
9c97d733 576Dygraph.prototype.createPlotKitCanvas_=function(_95){
681a238e 577var h=Dygraph.createCanvas();
b2a516b8 578h.style.position="absolute";
9c97d733
DV
579h.style.top=_95.style.top;
580h.style.left=_95.style.left;
b2a516b8
DV
581h.width=this.width_;
582h.height=this.height_;
681a238e
DV
583h.style.width=this.width_+"px";
584h.style.height=this.height_+"px";
b0c3b730 585this.graphDiv.appendChild(h);
b2a516b8
DV
586return h;
587};
9c97d733 588Dygraph.hsvToRGB=function(hue,_98,_99){
f474c2a3 589var red;
9c97d733 590var _101;
f474c2a3 591var blue;
9c97d733
DV
592if(_98===0){
593red=_99;
594_101=_99;
595blue=_99;
f474c2a3
DV
596}else{
597var i=Math.floor(hue*6);
598var f=(hue*6)-i;
9c97d733
DV
599var p=_99*(1-_98);
600var q=_99*(1-(_98*f));
601var t=_99*(1-(_98*(1-f)));
f474c2a3
DV
602switch(i){
603case 1:
604red=q;
9c97d733 605_101=_99;
f474c2a3
DV
606blue=p;
607break;
608case 2:
609red=p;
9c97d733 610_101=_99;
f474c2a3
DV
611blue=t;
612break;
613case 3:
614red=p;
9c97d733
DV
615_101=q;
616blue=_99;
f474c2a3
DV
617break;
618case 4:
619red=t;
9c97d733
DV
620_101=p;
621blue=_99;
f474c2a3
DV
622break;
623case 5:
9c97d733
DV
624red=_99;
625_101=p;
f474c2a3
DV
626blue=q;
627break;
628case 6:
629case 0:
9c97d733
DV
630red=_99;
631_101=t;
f474c2a3
DV
632blue=p;
633break;
634}
635}
636red=Math.floor(255*red+0.5);
9c97d733 637_101=Math.floor(255*_101+0.5);
f474c2a3 638blue=Math.floor(255*blue+0.5);
9c97d733 639return "rgb("+red+","+_101+","+blue+")";
f474c2a3 640};
285a6bda
DV
641Dygraph.prototype.setColors_=function(){
642var num=this.attr_("labels").length-1;
b2a516b8 643this.colors_=[];
9c97d733
DV
644var _108=this.attr_("colors");
645if(!_108){
285a6bda
DV
646var sat=this.attr_("colorSaturation")||1;
647var val=this.attr_("colorValue")||0.5;
b2a516b8
DV
648for(var i=1;i<=num;i++){
649var hue=(1*i/(1+num));
f474c2a3 650this.colors_.push(Dygraph.hsvToRGB(hue,sat,val));
b2a516b8
DV
651}
652}else{
653for(var i=0;i<num;i++){
9c97d733
DV
654var _111=_108[i%_108.length];
655this.colors_.push(_111);
b2a516b8 656}
b2a516b8 657}
285a6bda 658this.renderOptions_.colorScheme=this.colors_;
9c97d733
DV
659Dygraph.update(this.plotter_.options,this.renderOptions_);
660Dygraph.update(this.layoutOptions_,this.user_attrs_);
661Dygraph.update(this.layoutOptions_,this.attrs_);
b2a516b8 662};
3df0ccf0 663Dygraph.findPosX=function(obj){
9c97d733 664var _113=0;
3df0ccf0
DV
665if(obj.offsetParent){
666while(obj.offsetParent){
9c97d733 667_113+=obj.offsetLeft;
3df0ccf0
DV
668obj=obj.offsetParent;
669}
670}else{
671if(obj.x){
9c97d733 672_113+=obj.x;
3df0ccf0
DV
673}
674}
9c97d733 675return _113;
3df0ccf0
DV
676};
677Dygraph.findPosY=function(obj){
9c97d733 678var _114=0;
3df0ccf0
DV
679if(obj.offsetParent){
680while(obj.offsetParent){
9c97d733 681_114+=obj.offsetTop;
3df0ccf0
DV
682obj=obj.offsetParent;
683}
684}else{
685if(obj.y){
9c97d733 686_114+=obj.y;
3df0ccf0
DV
687}
688}
9c97d733 689return _114;
3df0ccf0 690};
285a6bda
DV
691Dygraph.prototype.createStatusMessage_=function(){
692if(!this.attr_("labelsDiv")){
9c97d733
DV
693var _115=this.attr_("labelsDivWidth");
694var _116={"position":"absolute","fontSize":"14px","zIndex":10,"width":_115+"px","top":"0px","left":(this.width_-_115-2)+"px","background":"white","textAlign":"left","overflow":"hidden"};
695Dygraph.update(_116,this.attr_("labelsDivStyles"));
b0c3b730 696var div=document.createElement("div");
9c97d733 697for(var name in _116){
1d54a333 698if(_116.hasOwnProperty(name)){
9c97d733 699div.style[name]=_116[name];
b0c3b730 700}
1d54a333 701}
b0c3b730 702this.graphDiv.appendChild(div);
285a6bda
DV
703this.attrs_.labelsDiv=div;
704}
705};
706Dygraph.prototype.createRollInterface_=function(){
9c97d733
DV
707var _118=this.attr_("showRoller")?"block":"none";
708var _119={"position":"absolute","zIndex":10,"top":(this.plotter_.area.h-25)+"px","left":(this.plotter_.area.x+1)+"px","display":_118};
709var _120=document.createElement("input");
710_120.type="text";
711_120.size="2";
712_120.value=this.rollPeriod_;
713for(var name in _119){
1d54a333 714if(_119.hasOwnProperty(name)){
9c97d733 715_120.style[name]=_119[name];
b0c3b730 716}
1d54a333 717}
b2a516b8 718var pa=this.graphDiv;
9c97d733
DV
719pa.appendChild(_120);
720var _122=this;
721_120.onchange=function(){
722_122.adjustRoll(_120.value);
76171648 723};
9c97d733 724return _120;
76171648
DV
725};
726Dygraph.pageX=function(e){
727if(e.pageX){
728return (!e.pageX||e.pageX<0)?0:e.pageX;
729}else{
730var de=document;
731var b=document.body;
732return e.clientX+(de.scrollLeft||b.scrollLeft)-(de.clientLeft||0);
733}
734};
735Dygraph.pageY=function(e){
736if(e.pageY){
737return (!e.pageY||e.pageY<0)?0:e.pageY;
738}else{
739var de=document;
740var b=document.body;
741return e.clientY+(de.scrollTop||b.scrollTop)-(de.clientTop||0);
742}
285a6bda
DV
743};
744Dygraph.prototype.createDragInterface_=function(){
fbe31dc8 745var self=this;
9c97d733
DV
746var _126=false;
747var _127=null;
748var _128=null;
749var _129=null;
750var _130=null;
751var _131=null;
353a0294
DV
752var px=0;
753var py=0;
efe0829a 754var getX=function(e){
76171648 755return Dygraph.pageX(e)-px;
b2a516b8 756};
efe0829a 757var getY=function(e){
76171648 758return Dygraph.pageX(e)-py;
b2a516b8 759};
9c97d733
DV
760Dygraph.addEvent(this.hidden_,"mousemove",function(_136){
761if(_126){
762_129=getX(_136);
763_130=getY(_136);
764self.drawZoomRect_(_127,_129,_131);
765_131=_129;
6a1aa64f 766}
b2a516b8 767});
9c97d733
DV
768Dygraph.addEvent(this.hidden_,"mousedown",function(_137){
769_126=true;
3df0ccf0
DV
770px=Dygraph.findPosX(self.canvas_);
771py=Dygraph.findPosY(self.canvas_);
9c97d733
DV
772_127=getX(_137);
773_128=getY(_137);
b2a516b8 774});
9c97d733
DV
775Dygraph.addEvent(document,"mouseup",function(_138){
776if(_126){
777_126=false;
778_127=null;
779_128=null;
6a1aa64f 780}
b2a516b8 781});
9c97d733
DV
782Dygraph.addEvent(this.hidden_,"mouseout",function(_139){
783if(_126){
784_129=null;
785_130=null;
6a1aa64f 786}
b2a516b8 787});
9c97d733
DV
788Dygraph.addEvent(this.hidden_,"mouseup",function(_140){
789if(_126){
790_126=false;
791_129=getX(_140);
792_130=getY(_140);
793var _141=Math.abs(_129-_127);
794var _142=Math.abs(_130-_128);
795if(_141<2&&_142<2&&self.attr_("clickCallback")!=null&&self.lastx_!=undefined){
681a238e 796self.attr_("clickCallback")(_140,self.lastx_,self.selPoints_);
9c97d733
DV
797}
798if(_141>=10){
799self.doZoom_(Math.min(_127,_129),Math.max(_127,_129));
b2a516b8 800}else{
fbe31dc8 801self.canvas_.getContext("2d").clearRect(0,0,self.canvas_.width,self.canvas_.height);
b2a516b8 802}
9c97d733
DV
803_127=null;
804_128=null;
b2a516b8
DV
805}
806});
9c97d733 807Dygraph.addEvent(this.hidden_,"dblclick",function(_143){
681a238e
DV
808if(self.dateWindow_==null){
809return;
810}
fbe31dc8
DV
811self.dateWindow_=null;
812self.drawGraph_(self.rawData_);
9c97d733
DV
813var _144=self.rawData_[0][0];
814var _145=self.rawData_[self.rawData_.length-1][0];
fbe31dc8 815if(self.attr_("zoomCallback")){
9c97d733 816self.attr_("zoomCallback")(_144,_145);
67e650dc 817}
b2a516b8 818});
6a1aa64f 819};
9c97d733 820Dygraph.prototype.drawZoomRect_=function(_146,endX,_148){
b2a516b8 821var ctx=this.canvas_.getContext("2d");
9c97d733
DV
822if(_148){
823ctx.clearRect(Math.min(_146,_148),0,Math.abs(_146-_148),this.height_);
b2a516b8 824}
9c97d733 825if(endX&&_146){
b2a516b8 826ctx.fillStyle="rgba(128,128,128,0.33)";
9c97d733 827ctx.fillRect(Math.min(_146,endX),0,Math.abs(endX-_146),this.height_);
b2a516b8
DV
828}
829};
9c97d733
DV
830Dygraph.prototype.doZoom_=function(lowX,_150){
831var _151=this.layout_.points;
832var _152=null;
833var _153=null;
834for(var i=0;i<_151.length;i++){
835var cx=_151[i].canvasx;
836var x=_151[i].xval;
837if(cx<lowX&&(_152==null||x>_152)){
838_152=x;
b2a516b8 839}
9c97d733
DV
840if(cx>_150&&(_153==null||x<_153)){
841_153=x;
b2a516b8 842}
b2a516b8 843}
9c97d733
DV
844if(_152==null){
845_152=_151[0].xval;
b2a516b8 846}
9c97d733
DV
847if(_153==null){
848_153=_151[_151.length-1].xval;
b0c3b730 849}
9c97d733 850this.dateWindow_=[_152,_153];
b2a516b8 851this.drawGraph_(this.rawData_);
285a6bda 852if(this.attr_("zoomCallback")){
9c97d733 853this.attr_("zoomCallback")(_152,_153);
67e650dc 854}
b2a516b8 855};
9c97d733
DV
856Dygraph.prototype.mouseMove_=function(_155){
857var _156=Dygraph.pageX(_155)-Dygraph.findPosX(this.hidden_);
858var _157=this.layout_.points;
859var _158=-1;
860var _159=-1;
861var _160=1e+100;
b2a516b8 862var idx=-1;
9c97d733
DV
863for(var i=0;i<_157.length;i++){
864var dist=Math.abs(_157[i].canvasx-_156);
865if(dist>_160){
b2a516b8
DV
866break;
867}
9c97d733 868_160=dist;
b2a516b8
DV
869idx=i;
870}
871if(idx>=0){
9c97d733 872_158=_157[idx].xval;
b2a516b8 873}
9c97d733
DV
874if(_156>_157[_157.length-1].canvasx){
875_158=_157[_157.length-1].xval;
b2a516b8 876}
681a238e 877this.selPoints_=[];
9c97d733
DV
878for(var i=0;i<_157.length;i++){
879if(_157[i].xval==_158){
681a238e
DV
880this.selPoints_.push(_157[i]);
881}
b2a516b8 882}
681a238e
DV
883if(this.attr_("highlightCallback")){
884this.attr_("highlightCallback")(_155,_158,this.selPoints_);
b2a516b8 885}
681a238e 886var _163=this.attr_("highlightCircleSize");
b2a516b8
DV
887var ctx=this.canvas_.getContext("2d");
888if(this.previousVerticalX_>=0){
889var px=this.previousVerticalX_;
681a238e 890ctx.clearRect(px-_163-1,0,2*_163+2,this.height_);
b2a516b8 891}
648acd28
DV
892var isOK=function(x){
893return x&&!isNaN(x);
894};
681a238e
DV
895if(this.selPoints_.length>0){
896var _156=this.selPoints_[0].canvasx;
897var _165=this.attr_("xValueFormatter")(_158,this)+":";
b2a516b8 898var clen=this.colors_.length;
681a238e
DV
899for(var i=0;i<this.selPoints_.length;i++){
900if(!isOK(this.selPoints_[i].canvasy)){
648acd28
DV
901continue;
902}
285a6bda 903if(this.attr_("labelsSeparateLines")){
681a238e 904_165+="<br/>";
b2a516b8 905}
681a238e 906var _167=this.selPoints_[i];
f474c2a3 907var c=new RGBColor(this.colors_[i%clen]);
681a238e 908_165+=" <b><font color='"+c.toHex()+"'>"+_167.name+"</font></b>:"+this.round_(_167.yval,2);
b2a516b8 909}
681a238e 910this.attr_("labelsDiv").innerHTML=_165;
9c97d733 911this.lastx_=_158;
b2a516b8 912ctx.save();
681a238e
DV
913for(var i=0;i<this.selPoints_.length;i++){
914if(!isOK(this.selPoints_[i%clen].canvasy)){
648acd28
DV
915continue;
916}
b2a516b8 917ctx.beginPath();
f474c2a3 918ctx.fillStyle=this.colors_[i%clen];
681a238e 919ctx.arc(_156,this.selPoints_[i%clen].canvasy,_163,0,2*Math.PI,false);
b2a516b8
DV
920ctx.fill();
921}
922ctx.restore();
9c97d733 923this.previousVerticalX_=_156;
b2a516b8 924}
6a1aa64f 925};
681a238e 926Dygraph.prototype.mouseOut_=function(_169){
b2a516b8
DV
927var ctx=this.canvas_.getContext("2d");
928ctx.clearRect(0,0,this.width_,this.height_);
285a6bda 929this.attr_("labelsDiv").innerHTML="";
6a1aa64f 930};
285a6bda 931Dygraph.zeropad=function(x){
6372d433
DV
932if(x<10){
933return "0"+x;
934}else{
935return ""+x;
936}
937};
285a6bda 938Dygraph.prototype.hmsString_=function(date){
681a238e 939var _171=Dygraph.zeropad;
6372d433
DV
940var d=new Date(date);
941if(d.getSeconds()){
681a238e 942return _171(d.getHours())+":"+_171(d.getMinutes())+":"+_171(d.getSeconds());
6372d433
DV
943}else{
944if(d.getMinutes()){
681a238e 945return _171(d.getHours())+":"+_171(d.getMinutes());
6372d433 946}else{
681a238e 947return _171(d.getHours());
6372d433
DV
948}
949}
950};
285a6bda 951Dygraph.dateString_=function(date,self){
681a238e 952var _173=Dygraph.zeropad;
b2a516b8
DV
953var d=new Date(date);
954var year=""+d.getFullYear();
681a238e
DV
955var _175=_173(d.getMonth()+1);
956var day=_173(d.getDate());
6372d433
DV
957var ret="";
958var frac=d.getHours()*3600+d.getMinutes()*60+d.getSeconds();
959if(frac){
285a6bda 960ret=" "+self.hmsString_(date);
b2a516b8 961}
681a238e 962return year+"/"+_175+"/"+day+ret;
6a1aa64f 963};
681a238e
DV
964Dygraph.prototype.round_=function(num,_179){
965var _180=Math.pow(10,_179);
966return Math.round(num*_180)/_180;
6a1aa64f 967};
285a6bda 968Dygraph.prototype.loadedEvent_=function(data){
b2a516b8
DV
969this.rawData_=this.parseCSV_(data);
970this.drawGraph_(this.rawData_);
6a1aa64f 971};
285a6bda
DV
972Dygraph.prototype.months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
973Dygraph.prototype.quarters=["Jan","Apr","Jul","Oct"];
974Dygraph.prototype.addXTicks_=function(){
681a238e 975var _182,endDate;
b2a516b8 976if(this.dateWindow_){
681a238e 977_182=this.dateWindow_[0];
b2a516b8
DV
978endDate=this.dateWindow_[1];
979}else{
681a238e 980_182=this.rawData_[0][0];
b2a516b8
DV
981endDate=this.rawData_[this.rawData_.length-1][0];
982}
681a238e
DV
983var _183=this.attr_("xTicker")(_182,endDate,this);
984this.layout_.updateOptions({xTicks:_183});
285a6bda
DV
985};
986Dygraph.SECONDLY=0;
987Dygraph.TEN_SECONDLY=1;
988Dygraph.THIRTY_SECONDLY=2;
989Dygraph.MINUTELY=3;
990Dygraph.TEN_MINUTELY=4;
991Dygraph.THIRTY_MINUTELY=5;
992Dygraph.HOURLY=6;
993Dygraph.SIX_HOURLY=7;
994Dygraph.DAILY=8;
995Dygraph.WEEKLY=9;
996Dygraph.MONTHLY=10;
997Dygraph.QUARTERLY=11;
998Dygraph.BIANNUAL=12;
999Dygraph.ANNUAL=13;
1000Dygraph.DECADAL=14;
1001Dygraph.NUM_GRANULARITIES=15;
1002Dygraph.SHORT_SPACINGS=[];
1003Dygraph.SHORT_SPACINGS[Dygraph.SECONDLY]=1000*1;
1004Dygraph.SHORT_SPACINGS[Dygraph.TEN_SECONDLY]=1000*10;
1005Dygraph.SHORT_SPACINGS[Dygraph.THIRTY_SECONDLY]=1000*30;
1006Dygraph.SHORT_SPACINGS[Dygraph.MINUTELY]=1000*60;
1007Dygraph.SHORT_SPACINGS[Dygraph.TEN_MINUTELY]=1000*60*10;
1008Dygraph.SHORT_SPACINGS[Dygraph.THIRTY_MINUTELY]=1000*60*30;
1009Dygraph.SHORT_SPACINGS[Dygraph.HOURLY]=1000*3600;
1010Dygraph.SHORT_SPACINGS[Dygraph.HOURLY]=1000*3600*6;
1011Dygraph.SHORT_SPACINGS[Dygraph.DAILY]=1000*86400;
1012Dygraph.SHORT_SPACINGS[Dygraph.WEEKLY]=1000*604800;
681a238e
DV
1013Dygraph.prototype.NumXTicks=function(_184,_185,_186){
1014if(_186<Dygraph.MONTHLY){
1015var _187=Dygraph.SHORT_SPACINGS[_186];
1016return Math.floor(0.5+1*(_185-_184)/_187);
285a6bda 1017}else{
681a238e
DV
1018var _188=1;
1019var _189=12;
1020if(_186==Dygraph.QUARTERLY){
1021_189=3;
285a6bda 1022}
681a238e
DV
1023if(_186==Dygraph.BIANNUAL){
1024_189=2;
285a6bda 1025}
681a238e
DV
1026if(_186==Dygraph.ANNUAL){
1027_189=1;
285a6bda 1028}
681a238e
DV
1029if(_186==Dygraph.DECADAL){
1030_189=1;
1031_188=10;
285a6bda 1032}
681a238e
DV
1033var _190=365.2524*24*3600*1000;
1034var _191=1*(_185-_184)/_190;
1035return Math.floor(0.5+1*_191*_189/_188);
285a6bda
DV
1036}
1037};
681a238e
DV
1038Dygraph.prototype.GetXAxis=function(_192,_193,_194){
1039var _195=[];
1040if(_194<Dygraph.MONTHLY){
1041var _196=Dygraph.SHORT_SPACINGS[_194];
1042var _197="%d%b";
1043if(_194<Dygraph.HOURLY){
1044_192=_196*Math.floor(0.5+_192/_196);
bd597afc 1045}
681a238e 1046for(var t=_192;t<=_193;t+=_196){
36615faf
DV
1047var d=new Date(t);
1048var frac=d.getHours()*3600+d.getMinutes()*60+d.getSeconds();
681a238e
DV
1049if(frac==0||_194>=Dygraph.DAILY){
1050_195.push({v:t,label:new Date(t+3600*1000).strftime(_197)});
b2a516b8 1051}else{
681a238e 1052_195.push({v:t,label:this.hmsString_(t)});
36615faf
DV
1053}
1054}
b2a516b8 1055}else{
681a238e
DV
1056var _198;
1057var _199=1;
1058if(_194==Dygraph.MONTHLY){
1059_198=[0,1,2,3,4,5,6,7,8,9,10,11,12];
b2a516b8 1060}else{
681a238e
DV
1061if(_194==Dygraph.QUARTERLY){
1062_198=[0,3,6,9];
b2a516b8 1063}else{
681a238e
DV
1064if(_194==Dygraph.BIANNUAL){
1065_198=[0,6];
b2a516b8 1066}else{
681a238e
DV
1067if(_194==Dygraph.ANNUAL){
1068_198=[0];
6372d433 1069}else{
681a238e
DV
1070if(_194==Dygraph.DECADAL){
1071_198=[0];
1072_199=10;
b2a516b8
DV
1073}
1074}
1075}
1076}
6372d433 1077}
681a238e 1078var _200=new Date(_192).getFullYear();
9c97d733 1079var _201=new Date(_193).getFullYear();
681a238e
DV
1080var _202=Dygraph.zeropad;
1081for(var i=_200;i<=_201;i++){
1082if(i%_199!=0){
36615faf 1083continue;
6372d433 1084}
681a238e
DV
1085for(var j=0;j<_198.length;j++){
1086var _203=i+"/"+_202(1+_198[j])+"/01";
1087var t=Date.parse(_203);
1088if(t<_192||t>_193){
b2a516b8
DV
1089continue;
1090}
681a238e 1091_195.push({v:t,label:new Date(t).strftime("%b %y")});
b2a516b8
DV
1092}
1093}
b2a516b8 1094}
681a238e 1095return _195;
36615faf 1096};
681a238e
DV
1097Dygraph.dateTicker=function(_204,_205,self){
1098var _206=-1;
285a6bda 1099for(var i=0;i<Dygraph.NUM_GRANULARITIES;i++){
681a238e
DV
1100var _207=self.NumXTicks(_204,_205,i);
1101if(self.width_/_207>=self.attr_("pixelsPerXLabel")){
1102_206=i;
36615faf
DV
1103break;
1104}
b2a516b8 1105}
681a238e
DV
1106if(_206>=0){
1107return self.GetXAxis(_204,_205,_206);
36615faf 1108}else{
6372d433 1109}
6a1aa64f 1110};
285a6bda 1111Dygraph.numericTicks=function(minV,maxV,self){
681a238e
DV
1112var _210=[1,2,5];
1113var _211,low_val,high_val,nTicks;
1114var _212=self.attr_("pixelsPerYLabel");
2ce09b19 1115for(var i=-10;i<50;i++){
681a238e
DV
1116var _213=Math.pow(10,i);
1117for(var j=0;j<_210.length;j++){
1118_211=_213*_210[j];
1119low_val=Math.floor(minV/_211)*_211;
1120high_val=Math.ceil(maxV/_211)*_211;
1121nTicks=(high_val-low_val)/_211;
1122var _214=self.height_/nTicks;
1123if(_214>_212){
2ce09b19 1124break;
6a1aa64f 1125}
b2a516b8 1126}
681a238e 1127if(_214>_212){
2ce09b19 1128break;
b2a516b8 1129}
2ce09b19 1130}
681a238e 1131var _215=[];
aa8aa4e8
DV
1132var k;
1133var _217=[];
285a6bda 1134if(self.attr_("labelsKMB")){
aa8aa4e8
DV
1135k=1000;
1136_217=["K","M","B","T"];
1137}
1138if(self.attr_("labelsKMG2")){
1139if(k){
1140self.warn("Setting both labelsKMB and labelsKMG2. Pick one!");
b2a516b8 1141}
aa8aa4e8
DV
1142k=1024;
1143_217=["k","M","G","T"];
1144}
1145for(var i=0;i<nTicks;i++){
1146var _218=low_val+i*_211;
1147var _219=Math.abs(_218);
1148var _220=self.round_(_218,2);
1149if(_217.length){
1150var n=k*k*k*k;
1151for(var j=3;j>=0;j--,n/=k){
1152if(_219>=n){
1153_220=self.round_(_218/n,1)+_217[j];
1154break;
b2a516b8
DV
1155}
1156}
1157}
aa8aa4e8 1158_215.push({label:_220,v:_218});
b2a516b8 1159}
681a238e 1160return _215;
6a1aa64f 1161};
285a6bda 1162Dygraph.prototype.addYTicks_=function(minY,maxY){
aa8aa4e8
DV
1163var _224=Dygraph.numericTicks(minY,maxY,this);
1164this.layout_.updateOptions({yAxis:[minY,maxY],yTicks:_224});
6a1aa64f 1165};
aa8aa4e8 1166Dygraph.prototype.extremeValues_=function(_225){
e4007107 1167var minY=null,maxY=null;
b64a4f1a 1168var bars=this.attr_("errorBars")||this.attr_("customBars");
648acd28 1169if(bars){
aa8aa4e8
DV
1170for(var j=0;j<_225.length;j++){
1171var y=_225[j][1][0];
648acd28
DV
1172if(!y){
1173continue;
e4007107 1174}
aa8aa4e8
DV
1175var low=y-_225[j][1][1];
1176var high=y+_225[j][1][2];
648acd28
DV
1177if(low>y){
1178low=y;
b2a516b8 1179}
648acd28
DV
1180if(high<y){
1181high=y;
b2a516b8 1182}
648acd28
DV
1183if(maxY==null||high>maxY){
1184maxY=high;
285a6bda 1185}
648acd28
DV
1186if(minY==null||low<minY){
1187minY=low;
e4007107 1188}
285a6bda 1189}
b2a516b8 1190}else{
aa8aa4e8
DV
1191for(var j=0;j<_225.length;j++){
1192var y=_225[j][1];
648acd28
DV
1193if(!y){
1194continue;
285a6bda 1195}
b2a516b8 1196if(maxY==null||y>maxY){
285a6bda
DV
1197maxY=y;
1198}
e4007107
DV
1199if(minY==null||y<minY){
1200minY=y;
1201}
b2a516b8
DV
1202}
1203}
648acd28
DV
1204return [minY,maxY];
1205};
1206Dygraph.prototype.drawGraph_=function(data){
1207var minY=null,maxY=null;
1208this.layout_.removeAllDatasets();
1209this.setColors_();
9317362d 1210this.attrs_["pointSize"]=0.5*this.attr_("highlightCircleSize");
648acd28 1211for(var i=1;i<data[0].length;i++){
aa8aa4e8 1212var _229=[];
648acd28
DV
1213for(var j=0;j<data.length;j++){
1214var date=data[j][0];
aa8aa4e8 1215_229[j]=[date,data[j][i]];
648acd28 1216}
aa8aa4e8 1217_229=this.rollingAverage(_229,this.rollPeriod_);
b64a4f1a 1218var bars=this.attr_("errorBars")||this.attr_("customBars");
648acd28
DV
1219if(this.dateWindow_){
1220var low=this.dateWindow_[0];
1221var high=this.dateWindow_[1];
aa8aa4e8
DV
1222var _230=[];
1223for(var k=0;k<_229.length;k++){
1224if(_229[k][0]>=low&&_229[k][0]<=high){
1225_230.push(_229[k]);
648acd28
DV
1226}
1227}
aa8aa4e8 1228_229=_230;
648acd28 1229}
aa8aa4e8
DV
1230var _231=this.extremeValues_(_229);
1231var _232=_231[0];
1232var _233=_231[1];
1233if(!minY||_232<minY){
1234minY=_232;
648acd28 1235}
aa8aa4e8
DV
1236if(!maxY||_233>maxY){
1237maxY=_233;
b2a516b8
DV
1238}
1239if(bars){
1240var vals=[];
aa8aa4e8
DV
1241for(var j=0;j<_229.length;j++){
1242vals[j]=[_229[j][0],_229[j][1][0],_229[j][1][1],_229[j][1][2]];
b2a516b8 1243}
285a6bda 1244this.layout_.addDataset(this.attr_("labels")[i],vals);
b2a516b8 1245}else{
aa8aa4e8 1246this.layout_.addDataset(this.attr_("labels")[i],_229);
b2a516b8
DV
1247}
1248}
1249if(this.valueRange_!=null){
1250this.addYTicks_(this.valueRange_[0],this.valueRange_[1]);
1251}else{
e4007107 1252var span=maxY-minY;
aa8aa4e8
DV
1253var _236=maxY+0.1*span;
1254var _237=minY-0.1*span;
1255if(_237<0&&minY>=0){
1256_237=0;
e4007107 1257}
aa8aa4e8
DV
1258if(_236>0&&maxY<=0){
1259_236=0;
681a238e 1260}
e4007107
DV
1261if(this.attr_("includeZero")){
1262if(maxY<0){
aa8aa4e8 1263_236=0;
e4007107
DV
1264}
1265if(minY>0){
aa8aa4e8 1266_237=0;
e4007107 1267}
b2a516b8 1268}
aa8aa4e8 1269this.addYTicks_(_237,_236);
b2a516b8
DV
1270}
1271this.addXTicks_();
1272this.layout_.evaluateWithError();
1273this.plotter_.clear();
1274this.plotter_.render();
1275this.canvas_.getContext("2d").clearRect(0,0,this.canvas_.width,this.canvas_.height);
6a1aa64f 1276};
aa8aa4e8
DV
1277Dygraph.prototype.rollingAverage=function(_238,_239){
1278if(_238.length<2){
1279return _238;
b2a516b8 1280}
aa8aa4e8
DV
1281var _239=Math.min(_239,_238.length-1);
1282var _240=[];
1283var _241=this.attr_("sigma");
b2a516b8
DV
1284if(this.fractions_){
1285var num=0;
1286var den=0;
1287var mult=100;
aa8aa4e8
DV
1288for(var i=0;i<_238.length;i++){
1289num+=_238[i][1][0];
1290den+=_238[i][1][1];
1291if(i-_239>=0){
1292num-=_238[i-_239][1][0];
1293den-=_238[i-_239][1][1];
1294}
1295var date=_238[i][0];
1296var _244=den?num/den:0;
285a6bda 1297if(this.attr_("errorBars")){
b2a516b8
DV
1298if(this.wilsonInterval_){
1299if(den){
aa8aa4e8
DV
1300var p=_244<0?0:_244,n=den;
1301var pm=_241*Math.sqrt(p*(1-p)/n+_241*_241/(4*n*n));
1302var _246=1+_241*_241/den;
1303var low=(p+_241*_241/(2*den)-pm)/_246;
1304var high=(p+_241*_241/(2*den)+pm)/_246;
1305_240[i]=[date,[p*mult,(p-low)*mult,(high-p)*mult]];
b2a516b8 1306}else{
aa8aa4e8 1307_240[i]=[date,[0,0,0]];
b2a516b8
DV
1308}
1309}else{
aa8aa4e8
DV
1310var _247=den?_241*Math.sqrt(_244*(1-_244)/den):1;
1311_240[i]=[date,[mult*_244,mult*_247,mult*_247]];
b2a516b8
DV
1312}
1313}else{
aa8aa4e8 1314_240[i]=[date,mult*_244];
b2a516b8
DV
1315}
1316}
1317}else{
b64a4f1a 1318if(this.attr_("customBars")){
6372d433
DV
1319var low=0;
1320var mid=0;
1321var high=0;
aa8aa4e8
DV
1322var _249=0;
1323for(var i=0;i<_238.length;i++){
1324var data=_238[i][1];
b2a516b8 1325var y=data[1];
aa8aa4e8 1326_240[i]=[_238[i][0],[y,y-data[0],data[2]-y]];
e244a0d7 1327if(y!=null&&!isNaN(y)){
6372d433
DV
1328low+=data[0];
1329mid+=y;
1330high+=data[2];
aa8aa4e8 1331_249+=1;
49a7d0d5 1332}
aa8aa4e8
DV
1333if(i-_239>=0){
1334var prev=_238[i-_239];
e244a0d7 1335if(prev[1][1]!=null&&!isNaN(prev[1][1])){
6372d433
DV
1336low-=prev[1][0];
1337mid-=prev[1][1];
1338high-=prev[1][2];
aa8aa4e8 1339_249-=1;
6372d433 1340}
49a7d0d5 1341}
aa8aa4e8 1342_240[i]=[_238[i][0],[1*mid/_249,1*(mid-low)/_249,1*(high-mid)/_249]];
6372d433
DV
1343}
1344}else{
aa8aa4e8 1345var _251=Math.min(_239-1,_238.length-2);
285a6bda 1346if(!this.attr_("errorBars")){
aa8aa4e8
DV
1347if(_239==1){
1348return _238;
648acd28 1349}
aa8aa4e8 1350for(var i=0;i<_238.length;i++){
b2a516b8 1351var sum=0;
aa8aa4e8
DV
1352var _253=0;
1353for(var j=Math.max(0,i-_239+1);j<i+1;j++){
1354var y=_238[j][1];
e244a0d7 1355if(y==null||isNaN(y)){
648acd28 1356continue;
b2a516b8 1357}
aa8aa4e8
DV
1358_253++;
1359sum+=_238[j][1];
648acd28 1360}
aa8aa4e8
DV
1361if(_253){
1362_240[i]=[_238[i][0],sum/_253];
648acd28 1363}else{
aa8aa4e8 1364_240[i]=[_238[i][0],null];
b2a516b8 1365}
648acd28 1366}
2847c1cf 1367}else{
aa8aa4e8 1368for(var i=0;i<_238.length;i++){
b2a516b8 1369var sum=0;
aa8aa4e8
DV
1370var _254=0;
1371var _253=0;
1372for(var j=Math.max(0,i-_239+1);j<i+1;j++){
1373var y=_238[j][1][0];
e244a0d7 1374if(y==null||isNaN(y)){
648acd28 1375continue;
b2a516b8 1376}
aa8aa4e8
DV
1377_253++;
1378sum+=_238[j][1][0];
1379_254+=Math.pow(_238[j][1][1],2);
b2a516b8 1380}
aa8aa4e8
DV
1381if(_253){
1382var _247=Math.sqrt(_254)/_253;
1383_240[i]=[_238[i][0],[sum/_253,_241*_247,_241*_247]];
648acd28 1384}else{
aa8aa4e8 1385_240[i]=[_238[i][0],[null,null,null]];
b2a516b8
DV
1386}
1387}
1388}
648acd28
DV
1389}
1390}
aa8aa4e8 1391return _240;
6a1aa64f 1392};
aa8aa4e8
DV
1393Dygraph.dateParser=function(_255,self){
1394var _256;
285a6bda 1395var d;
aa8aa4e8
DV
1396if(_255.length==10&&_255.search("-")!=-1){
1397_256=_255.replace("-","/","g");
1398while(_256.search("-")!=-1){
1399_256=_256.replace("-","/");
353a0294 1400}
aa8aa4e8 1401d=Date.parse(_256);
8846615a 1402}else{
aa8aa4e8
DV
1403if(_255.length==8){
1404_256=_255.substr(0,4)+"/"+_255.substr(4,2)+"/"+_255.substr(6,2);
1405d=Date.parse(_256);
681a238e 1406}else{
aa8aa4e8 1407d=Date.parse(_255);
285a6bda 1408}
b2a516b8 1409}
285a6bda 1410if(!d||isNaN(d)){
aa8aa4e8 1411self.error("Couldn't parse "+_255+" as a date");
b2a516b8 1412}
285a6bda 1413return d;
6a1aa64f 1414};
285a6bda 1415Dygraph.prototype.detectTypeFromString_=function(str){
aa8aa4e8 1416var _258=false;
285a6bda 1417if(str.indexOf("-")>=0||str.indexOf("/")>=0||isNaN(parseFloat(str))){
aa8aa4e8 1418_258=true;
285a6bda
DV
1419}else{
1420if(str.length==8&&str>"19700101"&&str<"20371231"){
aa8aa4e8 1421_258=true;
285a6bda
DV
1422}
1423}
aa8aa4e8 1424if(_258){
285a6bda
DV
1425this.attrs_.xValueFormatter=Dygraph.dateString_;
1426this.attrs_.xValueParser=Dygraph.dateParser;
1427this.attrs_.xTicker=Dygraph.dateTicker;
1428}else{
1429this.attrs_.xValueFormatter=function(x){
1430return x;
1431};
1432this.attrs_.xValueParser=function(x){
1433return parseFloat(x);
1434};
1435this.attrs_.xTicker=Dygraph.numericTicks;
1436}
1437};
1438Dygraph.prototype.parseCSV_=function(data){
b2a516b8 1439var ret=[];
aa8aa4e8
DV
1440var _259=data.split("\n");
1441var _260=this.attr_("delimiter");
1442if(_259[0].indexOf(_260)==-1&&_259[0].indexOf("\t")>=0){
1443_260="\t";
681a238e 1444}
aa8aa4e8 1445var _261=0;
b2a516b8 1446if(this.labelsFromCSV_){
aa8aa4e8
DV
1447_261=1;
1448this.attrs_.labels=_259[0].split(_260);
1449}
1450var _262;
1451var _263=false;
1452var _264=this.attr_("labels").length;
1453for(var i=_261;i<_259.length;i++){
1454var line=_259[i];
b2a516b8
DV
1455if(line.length==0){
1456continue;
1457}
681a238e
DV
1458if(line[0]=="#"){
1459continue;
1460}
aa8aa4e8
DV
1461var _266=line.split(_260);
1462if(_266.length<2){
b2a516b8
DV
1463continue;
1464}
aa8aa4e8
DV
1465var _267=[];
1466if(!_263){
1467this.detectTypeFromString_(_266[0]);
1468_262=this.attr_("xValueParser");
1469_263=true;
285a6bda 1470}
aa8aa4e8 1471_267[0]=_262(_266[0],this);
b2a516b8 1472if(this.fractions_){
aa8aa4e8
DV
1473for(var j=1;j<_266.length;j++){
1474var vals=_266[j].split("/");
1475_267[j]=[parseFloat(vals[0]),parseFloat(vals[1])];
b2a516b8
DV
1476}
1477}else{
285a6bda 1478if(this.attr_("errorBars")){
aa8aa4e8
DV
1479for(var j=1;j<_266.length;j+=2){
1480_267[(j+1)/2]=[parseFloat(_266[j]),parseFloat(_266[j+1])];
b2a516b8
DV
1481}
1482}else{
b64a4f1a 1483if(this.attr_("customBars")){
aa8aa4e8
DV
1484for(var j=1;j<_266.length;j++){
1485var vals=_266[j].split(";");
1486_267[j]=[parseFloat(vals[0]),parseFloat(vals[1]),parseFloat(vals[2])];
b2a516b8
DV
1487}
1488}else{
aa8aa4e8
DV
1489for(var j=1;j<_266.length;j++){
1490_267[j]=parseFloat(_266[j]);
285a6bda 1491}
b2a516b8
DV
1492}
1493}
1494}
aa8aa4e8
DV
1495ret.push(_267);
1496if(_267.length!=_264){
1497this.error("Number of columns in line "+i+" ("+_267.length+") does not agree with number of labels ("+_264+") "+line);
b2a516b8 1498}
b2a516b8
DV
1499}
1500return ret;
6a1aa64f 1501};
285a6bda
DV
1502Dygraph.prototype.parseArray_=function(data){
1503if(data.length==0){
1504this.error("Can't plot empty data set");
1505return null;
1506}
1507if(data[0].length==0){
1508this.error("Data set cannot contain an empty row");
1509return null;
1510}
1511if(this.attr_("labels")==null){
1512this.warn("Using default labels. Set labels explicitly via 'labels' "+"in the options parameter");
1513this.attrs_.labels=["X"];
1514for(var i=1;i<data[0].length;i++){
1515this.attrs_.labels.push("Y"+i);
1516}
1517}
9c97d733 1518if(Dygraph.isDateLike(data[0][0])){
285a6bda
DV
1519this.attrs_.xValueFormatter=Dygraph.dateString_;
1520this.attrs_.xTicker=Dygraph.dateTicker;
aa8aa4e8 1521var _268=Dygraph.clone(data);
285a6bda 1522for(var i=0;i<data.length;i++){
aa8aa4e8 1523if(_268[i].length==0){
285a6bda
DV
1524this.error("Row "<<(1+i)<<" of data is empty");
1525return null;
1526}
aa8aa4e8 1527if(_268[i][0]==null||typeof (_268[i][0].getTime)!="function"){
285a6bda
DV
1528this.error("x value in row "<<(1+i)<<" is not a Date");
1529return null;
1530}
aa8aa4e8 1531_268[i][0]=_268[i][0].getTime();
285a6bda 1532}
aa8aa4e8 1533return _268;
285a6bda
DV
1534}else{
1535this.attrs_.xValueFormatter=function(x){
1536return x;
1537};
1538this.attrs_.xTicker=Dygraph.numericTicks;
1539return data;
1540}
1541};
1542Dygraph.prototype.parseDataTable_=function(data){
6219c9d6
DV
1543var cols=data.getNumberOfColumns();
1544var rows=data.getNumberOfRows();
aa8aa4e8 1545var _271=[];
6219c9d6 1546for(var i=0;i<cols;i++){
aa8aa4e8 1547_271.push(data.getColumnLabel(i));
e244a0d7
DV
1548if(i!=0&&this.attr_("errorBars")){
1549i+=1;
1550}
6219c9d6 1551}
aa8aa4e8
DV
1552this.attrs_.labels=_271;
1553cols=_271.length;
1554var _272=data.getColumnType(0);
1555if(_272=="date"){
285a6bda
DV
1556this.attrs_.xValueFormatter=Dygraph.dateString_;
1557this.attrs_.xValueParser=Dygraph.dateParser;
1558this.attrs_.xTicker=Dygraph.dateTicker;
1559}else{
aa8aa4e8 1560if(_272=="number"){
285a6bda
DV
1561this.attrs_.xValueFormatter=function(x){
1562return x;
1563};
1564this.attrs_.xValueParser=function(x){
1565return parseFloat(x);
1566};
1567this.attrs_.xTicker=Dygraph.numericTicks;
1568}else{
aa8aa4e8 1569this.error("only 'date' and 'number' types are supported for column 1 "+"of DataTable input (Got '"+_272+"')");
6219c9d6
DV
1570return null;
1571}
285a6bda 1572}
6219c9d6
DV
1573var ret=[];
1574for(var i=0;i<rows;i++){
1575var row=[];
b3b20e24
DV
1576if(!data.getValue(i,0)){
1577continue;
1578}
aa8aa4e8 1579if(_272=="date"){
6219c9d6 1580row.push(data.getValue(i,0).getTime());
36615faf
DV
1581}else{
1582row.push(data.getValue(i,0));
1583}
e244a0d7 1584if(!this.attr_("errorBars")){
6219c9d6
DV
1585for(var j=1;j<cols;j++){
1586row.push(data.getValue(i,j));
1587}
e244a0d7
DV
1588}else{
1589for(var j=0;j<cols-1;j++){
1590row.push([data.getValue(i,1+2*j),data.getValue(i,2+2*j)]);
1591}
1592}
6219c9d6
DV
1593ret.push(row);
1594}
1595return ret;
1596};
9c97d733
DV
1597Dygraph.update=function(self,o){
1598if(typeof (o)!="undefined"&&o!==null){
1599for(var k in o){
1d54a333 1600if(o.hasOwnProperty(k)){
9c97d733
DV
1601self[k]=o[k];
1602}
1603}
1d54a333 1604}
9c97d733
DV
1605return self;
1606};
1607Dygraph.isArrayLike=function(o){
1608var typ=typeof (o);
1609if((typ!="object"&&!(typ=="function"&&typeof (o.item)=="function"))||o===null||typeof (o.length)!="number"||o.nodeType===3){
1610return false;
1611}
1612return true;
1613};
1614Dygraph.isDateLike=function(o){
1615if(typeof (o)!="object"||o===null||typeof (o.getTime)!="function"){
1616return false;
1617}
1618return true;
1619};
1620Dygraph.clone=function(o){
1621var r=[];
1622for(var i=0;i<o.length;i++){
1623if(Dygraph.isArrayLike(o[i])){
1624r.push(Dygraph.clone(o[i]));
1625}else{
1626r.push(o[i]);
1627}
1628}
1629return r;
1630};
285a6bda 1631Dygraph.prototype.start_=function(){
b2a516b8
DV
1632if(typeof this.file_=="function"){
1633this.loadedEvent_(this.file_());
1634}else{
9c97d733 1635if(Dygraph.isArrayLike(this.file_)){
285a6bda
DV
1636this.rawData_=this.parseArray_(this.file_);
1637this.drawGraph_(this.rawData_);
1638}else{
6219c9d6
DV
1639if(typeof this.file_=="object"&&typeof this.file_.getColumnRange=="function"){
1640this.rawData_=this.parseDataTable_(this.file_);
1641this.drawGraph_(this.rawData_);
1642}else{
285a6bda
DV
1643if(typeof this.file_=="string"){
1644if(this.file_.indexOf("\n")>=0){
1645this.loadedEvent_(this.file_);
1646}else{
b2a516b8 1647var req=new XMLHttpRequest();
aa8aa4e8 1648var _278=this;
b2a516b8
DV
1649req.onreadystatechange=function(){
1650if(req.readyState==4){
1651if(req.status==200){
aa8aa4e8 1652_278.loadedEvent_(req.responseText);
b2a516b8
DV
1653}
1654}
6a1aa64f 1655};
b2a516b8
DV
1656req.open("GET",this.file_,true);
1657req.send(null);
1658}
285a6bda
DV
1659}else{
1660this.error("Unknown data format: "+(typeof this.file_));
6219c9d6 1661}
b2a516b8 1662}
b2a516b8 1663}
b2a516b8 1664}
285a6bda 1665};
aa8aa4e8
DV
1666Dygraph.prototype.updateOptions=function(_279){
1667if(_279.rollPeriod){
1668this.rollPeriod_=_279.rollPeriod;
b2a516b8 1669}
aa8aa4e8
DV
1670if(_279.dateWindow){
1671this.dateWindow_=_279.dateWindow;
b2a516b8 1672}
aa8aa4e8
DV
1673if(_279.valueRange){
1674this.valueRange_=_279.valueRange;
b2a516b8 1675}
aa8aa4e8 1676Dygraph.update(this.user_attrs_,_279);
285a6bda
DV
1677this.labelsFromCSV_=(this.attr_("labels")==null);
1678this.layout_.updateOptions({"errorBars":this.attr_("errorBars")});
aa8aa4e8
DV
1679if(_279["file"]&&_279["file"]!=this.file_){
1680this.file_=_279["file"];
b2a516b8
DV
1681this.start_();
1682}else{
1683this.drawGraph_(this.rawData_);
1684}
6a1aa64f 1685};
aa8aa4e8
DV
1686Dygraph.prototype.adjustRoll=function(_280){
1687this.rollPeriod_=_280;
b2a516b8 1688this.drawGraph_(this.rawData_);
6a1aa64f 1689};
681a238e 1690Dygraph.createCanvas=function(){
aa8aa4e8 1691var _281=document.createElement("canvas");
681a238e
DV
1692isIE=(/MSIE/.test(navigator.userAgent)&&!window.opera);
1693if(isIE){
aa8aa4e8 1694_281=G_vmlCanvasManager.initElement(_281);
681a238e 1695}
aa8aa4e8 1696return _281;
681a238e 1697};
aa8aa4e8
DV
1698Dygraph.GVizChart=function(_282){
1699this.container=_282;
6219c9d6 1700};
aa8aa4e8 1701Dygraph.GVizChart.prototype.draw=function(data,_283){
6219c9d6 1702this.container.innerHTML="";
aa8aa4e8 1703this.date_graph=new Dygraph(this.container,data,_283);
6219c9d6 1704};
285a6bda 1705DateGraph=Dygraph;
aa8aa4e8 1706function RGBColor(_284){
f474c2a3 1707this.ok=false;
aa8aa4e8
DV
1708if(_284.charAt(0)=="#"){
1709_284=_284.substr(1,6);
f474c2a3 1710}
aa8aa4e8
DV
1711_284=_284.replace(/ /g,"");
1712_284=_284.toLowerCase();
1713var _285={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dodgerblue:"1e90ff",feldspar:"d19275",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgrey:"d3d3d3",lightgreen:"90ee90",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslateblue:"8470ff",lightslategray:"778899",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"00ff00",limegreen:"32cd32",linen:"faf0e6",magenta:"ff00ff",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370d8",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"d87093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"ff0000",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",violetred:"d02090",wheat:"f5deb3",white:"ffffff",whitesmoke:"f5f5f5",yellow:"ffff00",yellowgreen:"9acd32"};
1714for(var key in _285){
1715if(_284==key){
1716_284=_285[key];
f474c2a3
DV
1717}
1718}
aa8aa4e8 1719var _287=[{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:["rgb(123, 234, 45)","rgb(255,234,245)"],process:function(bits){
f474c2a3
DV
1720return [parseInt(bits[1]),parseInt(bits[2]),parseInt(bits[3])];
1721}},{re:/^(\w{2})(\w{2})(\w{2})$/,example:["#00ff00","336699"],process:function(bits){
1722return [parseInt(bits[1],16),parseInt(bits[2],16),parseInt(bits[3],16)];
1723}},{re:/^(\w{1})(\w{1})(\w{1})$/,example:["#fb0","f0f"],process:function(bits){
1724return [parseInt(bits[1]+bits[1],16),parseInt(bits[2]+bits[2],16),parseInt(bits[3]+bits[3],16)];
1725}}];
aa8aa4e8
DV
1726for(var i=0;i<_287.length;i++){
1727var re=_287[i].re;
1728var _290=_287[i].process;
1729var bits=re.exec(_284);
f474c2a3 1730if(bits){
aa8aa4e8 1731channels=_290(bits);
f474c2a3
DV
1732this.r=channels[0];
1733this.g=channels[1];
1734this.b=channels[2];
1735this.ok=true;
1736}
1737}
1738this.r=(this.r<0||isNaN(this.r))?0:((this.r>255)?255:this.r);
1739this.g=(this.g<0||isNaN(this.g))?0:((this.g>255)?255:this.g);
1740this.b=(this.b<0||isNaN(this.b))?0:((this.b>255)?255:this.b);
1741this.toRGB=function(){
1742return "rgb("+this.r+", "+this.g+", "+this.b+")";
1743};
1744this.toHex=function(){
1745var r=this.r.toString(16);
1746var g=this.g.toString(16);
1747var b=this.b.toString(16);
1748if(r.length==1){
1749r="0"+r;
1750}
1751if(g.length==1){
1752g="0"+g;
1753}
1754if(b.length==1){
1755b="0"+b;
1756}
1757return "#"+r+g+b;
1758};
1759}
b2a516b8 1760