var Flotr={version:"0.2.0-test",author:"Bas Wenneker",website:"http://www.solutoire.com",_registeredTypes:{lines:"drawSeriesLines",points:"drawSeriesPoints",bars:"drawSeriesBars",candles:"drawSeriesCandles",pie:"drawSeriesPie"},register:function(a,b){Flotr._registeredTypes[a]=b+""},draw:function(b,d,a,c){c=c||Flotr.Graph;return new c(b,d,a)},getSeries:function(a){return a.collect(function(c){var b;c=(c.data)?Object.clone(c):{data:c};for(b=c.data.length-1;b>-1;--b){c.data[b][1]=(c.data[b][1]===null?null:parseFloat(c.data[b][1]))}return c})},merge:function(d,b){var a=b||{};for(var c in d){a[c]=(d[c]!=null&&typeof(d[c])=="object"&&!(d[c].constructor==Array||d[c].constructor==RegExp)&&!Object.isElement(d[c]))?Flotr.merge(d[c],b[c]):a[c]=d[c]}return a},getTickSize:function(e,d,a,b){var h=(a-d)/e;var g=Flotr.getMagnitude(h);var c=h/g;var f=10;if(c<1.5){f=1}else{if(c<2.25){f=2}else{if(c<3){f=((b==0)?2:2.5)}else{if(c<7.5){f=5}}}}return f*g},defaultTickFormatter:function(a){return a+""},defaultTrackFormatter:function(a){return"("+a.x+", "+a.y+")"},defaultPieLabelFormatter:function(a){return(a.fraction*100).toFixed(2)+"%"},convertToBytes:function(e,a,d){var c=["Y","Z","E","P","T","G","M","k",""],b=c.length;d=d||1024;a=a||2;while(b--&&e>1024){e/=d}return(Math.round(e*a)/a)+c[b]},getMagnitude:function(a){return Math.pow(10,Math.floor(Math.log(a)/Math.LN10))},toPixel:function(a){return Math.floor(a)+0.5},toRad:function(a){return -a*(Math.PI/180)},parseColor:function(d){if(d instanceof Flotr.Color){return d}var a,c=Flotr.Color;if((a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(d))){return new c(parseInt(a[1]),parseInt(a[2]),parseInt(a[3]))}if((a=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(d))){return new c(parseInt(a[1]),parseInt(a[2]),parseInt(a[3]),parseFloat(a[4]))}if((a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(d))){return new c(parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55)}if((a=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(d))){return new c(parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55,parseFloat(a[4]))}if((a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(d))){return new c(parseInt(a[1],16),parseInt(a[2],16),parseInt(a[3],16))}if((a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(d))){return new c(parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16))}var b=d.strip().toLowerCase();if(b=="transparent"){return new c(255,255,255,0)}return((a=c.lookupColors[b]))?new c(a[0],a[1],a[2]):false},extractColor:function(b){var a;do{a=b.getStyle("background-color").toLowerCase();if(!(a==""||a=="transparent")){break}b=b.up(0)}while(!b.nodeName.match(/^body$/i));return(a=="rgba(0, 0, 0, 0)")?"transparent":a}};Flotr.Graph=Class.create({initialize:function(b,c,a){this.el=$(b);if(!this.el){throw"The target container doesn't exist"}this.data=c;this.series=Flotr.getSeries(c);this.setOptions(a);this.lastMousePos={pageX:null,pageY:null};this.selection={first:{x:-1,y:-1},second:{x:-1,y:-1}};this.plotOffset={left:0,right:0,top:0,bottom:0};this.prevSelection=null;this.selectionInterval=null;this.ignoreClick=false;this.prevHit=null;this.constructCanvas();this.initEvents();this.findDataRanges();this.calculateTicks(this.axes.x);this.calculateTicks(this.axes.x2);this.calculateTicks(this.axes.y);this.calculateTicks(this.axes.y2);this.calculateSpacing();this.draw();this.insertLegend();if(this.options.spreadsheet.show){this.constructTabs()}},setOptions:function(b){var t={colors:["#00A8F0","#C0D800","#CB4B4B","#4DA74D","#9440ED"],title:null,subtitle:null,legend:{show:true,noColumns:1,labelFormatter:Prototype.K,labelBoxBorderColor:"#CCCCCC",labelBoxWidth:14,labelBoxHeight:10,labelBoxMargin:5,container:null,position:"nw",margin:5,backgroundColor:null,backgroundOpacity:0.85},xaxis:{ticks:null,showLabels:true,labelsAngle:0,title:null,titleAngle:0,noTicks:5,tickFormatter:Flotr.defaultTickFormatter,tickDecimals:null,min:null,max:null,autoscaleMargin:0,color:null},x2axis:{},yaxis:{ticks:null,showLabels:true,labelsAngle:0,title:null,titleAngle:90,noTicks:5,tickFormatter:Flotr.defaultTickFormatter,tickDecimals:null,min:null,max:null,autoscaleMargin:0,color:null},y2axis:{titleAngle:270},points:{show:false,radius:3,lineWidth:2,fill:true,fillColor:"#FFFFFF",fillOpacity:0.4},lines:{show:false,lineWidth:2,fill:false,fillColor:null,fillOpacity:0.4},bars:{show:false,lineWidth:2,barWidth:1,fill:true,fillColor:null,fillOpacity:0.4,horizontal:false,stacked:false,centered:true},candles:{show:false,lineWidth:1,wickLineWidth:1,candleWidth:0.6,fill:true,upFillColor:"#00A8F0",downFillColor:"#CB4B4B",fillOpacity:0.5,barcharts:false},pie:{show:false,lineWidth:1,fill:true,fillColor:null,fillOpacity:0.6,explode:6,sizeRatio:0.6,startAngle:Math.PI/4,labelFormatter:Flotr.defaultPieLabelFormatter,pie3D:false,pie3DviewAngle:(Math.PI/2*0.8),pie3DspliceThickness:20},grid:{color:"#545454",backgroundColor:null,tickColor:"#DDDDDD",labelMargin:3,verticalLines:true,horizontalLines:true,outlineWidth:2},selection:{mode:null,color:"#B6D9FF",fps:20},crosshair:{mode:null,color:"#FF0000",hideCursor:true},mouse:{track:false,position:"se",relative:false,trackFormatter:Flotr.defaultTrackFormatter,margin:5,lineColor:"#FF3F19",trackDecimals:1,sensibility:2,radius:3},shadowSize:4,defaultType:"lines",HtmlText:true,fontSize:7.5,spreadsheet:{show:false,tabGraphLabel:"Graph",tabDataLabel:"Data",toolbarDownload:"Download CSV",toolbarSelectAll:"Select all"}};t.x2axis=Object.extend(Object.clone(t.xaxis),t.x2axis);t.y2axis=Object.extend(Object.clone(t.yaxis),t.y2axis);this.options=Flotr.merge((b||{}),t);this.axes={x:{options:this.options.xaxis,n:1},x2:{options:this.options.x2axis,n:2},y:{options:this.options.yaxis,n:1},y2:{options:this.options.y2axis,n:2}};var k=[],d=[],n=this.series.length,q=this.series.length,e=this.options.colors,a=[],h=0,p,m,l,r,f;for(m=q-1;m>-1;--m){p=this.series[m].color;if(p!=null){--q;if(Object.isNumber(p)){k.push(p)}else{a.push(Flotr.parseColor(p))}}}for(m=k.length-1;m>-1;--m){q=Math.max(q,k[m]+1)}for(m=0;d.length<q;){p=(e.length==m)?new Flotr.Color(100,100,100):Flotr.parseColor(e[m]);var g=h%2==1?-1:1;var o=1+g*Math.ceil(h/2)*0.2;p.scale(o,o,o);d.push(p);if(++m>=e.length){m=0;++h}}for(m=0,l=0;m<n;++m){r=this.series[m];if(r.color==null){r.color=d[l++].toString()}else{if(Object.isNumber(r.color)){r.color=d[r.color].toString()}}if(!r.xaxis){r.xaxis=this.axes.x}if(r.xaxis==1){r.xaxis=this.axes.x}else{if(r.xaxis==2){r.xaxis=this.axes.x2}}if(!r.yaxis){r.yaxis=this.axes.y}if(r.yaxis==1){r.yaxis=this.axes.y}else{if(r.yaxis==2){r.yaxis=this.axes.y2}}r.lines=Object.extend(Object.clone(this.options.lines),r.lines);r.points=Object.extend(Object.clone(this.options.points),r.points);r.bars=Object.extend(Object.clone(this.options.bars),r.bars);r.candles=Object.extend(Object.clone(this.options.candles),r.candles);r.pie=Object.extend(Object.clone(this.options.pie),r.pie);r.mouse=Object.extend(Object.clone(this.options.mouse),r.mouse);if(r.shadowSize==null){r.shadowSize=this.options.shadowSize}}},constructCanvas:function(){var d=this.el,b,e,a;this.canvas=d.select(".flotr-canvas")[0];this.overlay=d.select(".flotr-overlay")[0];d.childElements().invoke("remove");d.setStyle({position:"relative",cursor:"default"});this.canvasWidth=d.getWidth();this.canvasHeight=d.getHeight();b={width:this.canvasWidth,height:this.canvasHeight};if(this.canvasWidth<=0||this.canvasHeight<=0){throw"Invalid dimensions for plot, width = "+this.canvasWidth+", height = "+this.canvasHeight}if(!this.canvas){e=this.canvas=$(document.createElement("canvas"));e.className="flotr-canvas";e=e.writeAttribute("style","position:absolute;left:0px;top:0px;")}e=this.canvas.writeAttribute(b).show();d.insert(e);if(!this.overlay){a=this.overlay=$(document.createElement("canvas"));a.className="flotr-overlay";a=a.writeAttribute("style","position:absolute;left:0px;top:0px;")}a=this.overlay.writeAttribute(b).show();d.insert(a);if(Prototype.Browser.IE){e=window.G_vmlCanvasManager.initElement(e);a=window.G_vmlCanvasManager.initElement(a)}this.ctx=e.getContext("2d");this.octx=a.getContext("2d");this.textEnabled=!!this.ctx.drawText},getTextDimensions:function(f,c,b,d){if(!f){return{width:0,height:0}}if(!this.options.HtmlText&&this.textEnabled){var e=this.ctx.getTextBounds(f,c);return{width:e.width+2,height:e.height+6}}else{var a=this.el.insert('<div style="position:absolute;top:-10000px;'+b+'" class="'+d+' flotr-dummy-div">'+f+"</div>").select(".flotr-dummy-div")[0];dim=a.getDimensions();a.remove();return dim}},loadDataGrid:function(){if(this.seriesData){return this.seriesData}var a=this.series,b=[];for(i=0;i<a.length;++i){a[i].data.each(function(d){var c=d[0],g=d[1],f=b.find(function(h){return h[0]==c});if(f){f[i+1]=g}else{var e=[];e[0]=c;e[i+1]=g;b.push(e)}})}b=b.sortBy(function(c){return c[0]});return this.seriesData=b},showTab:function(b){var a="canvas, .flotr-labels, .flotr-legend, .flotr-legend-bg, .flotr-title, .flotr-subtitle";switch(b){case"graph":this.datagrid.up().hide();this.el.select(a).invoke("show");this.tabs.data.removeClassName("selected");this.tabs.graph.addClassName("selected");break;case"data":this.constructDataGrid();this.datagrid.up().show();this.el.select(a).invoke("hide");this.tabs.data.addClassName("selected");this.tabs.graph.removeClassName("selected");break}},constructTabs:function(){var a=new Element("div",{className:"flotr-tabs-group",style:"position:absolute;left:0px;top:"+this.canvasHeight+"px;width:"+this.canvasWidth+"px;"});this.el.insert({bottom:a});this.tabs={graph:new Element("div",{className:"flotr-tab selected",style:"float:left;"}).update(this.options.spreadsheet.tabGraphLabel),data:new Element("div",{className:"flotr-tab",style:"float:left;"}).update(this.options.spreadsheet.tabDataLabel)};a.insert(this.tabs.graph).insert(this.tabs.data);this.el.setStyle({height:this.canvasHeight+this.tabs.data.getHeight()+2+"px"});this.tabs.graph.observe("click",(function(){this.showTab("graph")}).bind(this));this.tabs.data.observe("click",(function(){this.showTab("data")}).bind(this))},constructDataGrid:function(){if(this.datagrid){return this.datagrid}var d,b,n=this.series,l=this.loadDataGrid(),m=this.datagrid=new Element("table",{className:"flotr-datagrid",style:"height:100px;"}),c=["<colgroup><col />"];var f=['<tr class="first-row">'];f.push("<th>&nbsp;</th>");for(d=0;d<n.length;++d){f.push('<th scope="col">'+(n[d].label||String.fromCharCode(65+d))+"</th>");c.push("<col />")}f.push("</tr>");for(b=0;b<l.length;++b){f.push("<tr>");for(d=0;d<n.length+1;++d){var o="td";var g=(l[b][d]!=null?Math.round(l[b][d]*100000)/100000:"");if(d==0){o="th";var k;if(this.options.xaxis.ticks){var e=this.options.xaxis.ticks.find(function(p){return p[0]==l[b][d]});if(e){k=e[1]}}else{k=this.options.xaxis.tickFormatter(g)}if(k){g=k}}f.push("<"+o+(o=="th"?' scope="row"':"")+">"+g+"</"+o+">")}f.push("</tr>")}c.push("</colgroup>");m.update(c.join("")+f.join(""));if(!Prototype.Browser.IE){m.select("td").each(function(p){p.observe("mouseover",function(q){p=q.element();var r=p.previousSiblings();m.select("th[scope=col]")[r.length-1].addClassName("hover");m.select("colgroup col")[r.length].addClassName("hover")});p.observe("mouseout",function(){m.select("colgroup col.hover, th.hover").each(function(q){q.removeClassName("hover")})})})}var h=new Element("div",{className:"flotr-datagrid-toolbar"}).insert(new Element("button",{type:"button",className:"flotr-datagrid-toolbar-button"}).update(this.options.spreadsheet.toolbarDownload).observe("click",this.downloadCSV.bind(this))).insert(new Element("button",{type:"button",className:"flotr-datagrid-toolbar-button"}).update(this.options.spreadsheet.toolbarSelectAll).observe("click",this.selectAllData.bind(this)));var a=new Element("div",{className:"flotr-datagrid-container",style:"left:0px;top:0px;width:"+this.canvasWidth+"px;height:"+this.canvasHeight+"px;overflow:auto;"});a.insert(h);m.wrap(a.hide());this.el.insert(a);return m},selectAllData:function(){if(this.tabs){var b,a,e,d,c=this.constructDataGrid();this.showTab("data");(function(){if((e=c.ownerDocument)&&(d=e.defaultView)&&d.getSelection&&e.createRange&&(b=window.getSelection())&&b.removeAllRanges){a=e.createRange();a.selectNode(c);b.removeAllRanges();b.addRange(a)}else{if(document.body&&document.body.createTextRange&&(a=document.body.createTextRange())){a.moveToElementText(c);a.select()}}}).defer();return true}else{return false}},downloadCSV:function(){var d,a='"x"',c=this.series,e=this.loadDataGrid();for(d=0;d<c.length;++d){a+='%09"'+(c[d].label||String.fromCharCode(65+d))+'"'}a+="%0D%0A";for(d=0;d<e.length;++d){if(this.options.xaxis.ticks){var b=this.options.xaxis.ticks.find(function(f){return f[0]==e[d][0]});if(b){e[d][0]=b[1]}}else{e[d][0]=this.options.xaxis.tickFormatter(e[d][0])}a+=e[d].join("%09")+"%0D%0A"}if(Prototype.Browser.IE){a=a.gsub("%09","\t").gsub("%0A","\n").gsub("%0D","\r");window.open().document.write(a)}else{window.open("data:text/csv,"+a)}},initEvents:function(){this.overlay.stopObserving();this.overlay.observe("mousedown",this.mouseDownHandler.bind(this));this.overlay.observe("mousemove",this.mouseMoveHandler.bind(this));this.overlay.observe("click",this.clickHandler.bind(this))},findDataRanges:function(){var n=this.series,k=this.axes;k.x.datamin=k.x.datamax=k.x2.datamin=k.x2.datamax=k.y.datamin=k.y.datamax=k.y2.datamin=k.y2.datamax=0;if(n.length>0){var d,b,e,l,g,c,m,f;for(d=0;d<n.length;++d){c=n[d].data,m=n[d].xaxis,f=n[d].yaxis;if(c.length>0&&!n[d].hide){if(!m.used){m.datamin=m.datamax=c[0][0]}if(!f.used){f.datamin=f.datamax=c[0][1]}m.used=true;f.used=true;for(e=c.length-1;e>-1;--e){l=c[e][0];if(l<m.datamin){m.datamin=l}else{if(l>m.datamax){m.datamax=l}}for(b=1;b<c[e].length;b++){g=c[e][b];if(g<f.datamin){f.datamin=g}else{if(g>f.datamax){f.datamax=g}}}}}}}this.findXAxesValues();this.calculateRange(k.x);this.extendXRangeIfNeededByBar(k.x);if(k.x2.used){this.calculateRange(k.x2);this.extendXRangeIfNeededByBar(k.x2)}this.calculateRange(k.y);this.extendYRangeIfNeededByBar(k.y);if(k.y2.used){this.calculateRange(k.y2);this.extendYRangeIfNeededByBar(k.y2)}},calculateRange:function(d){var f=d.options,c=f.min!=null?f.min:d.datamin,a=f.max!=null?f.max:d.datamax,e;if(a-c==0){var b=(a==0)?1:0.01;c-=b;a+=b}d.tickSize=Flotr.getTickSize(f.noTicks,c,a,f.tickDecimals);if(f.min==null){e=f.autoscaleMargin;if(e!=0){c-=d.tickSize*e;if(c<0&&d.datamin>=0){c=0}c=d.tickSize*Math.floor(c/d.tickSize)}}if(f.max==null){e=f.autoscaleMargin;if(e!=0){a+=d.tickSize*e;if(a>0&&d.datamax<=0){a=0}a=d.tickSize*Math.ceil(a/d.tickSize)}}d.min=c;d.max=a},extendXRangeIfNeededByBar:function(a){if(a.options.max==null){var d=a.min,g=a.max,e,n,k,h,m=[],f=null;for(e=0;e<this.series.length;++e){n=this.series[e];k=n.bars;h=n.candles;if(n.xaxis==a){if(h.show||(k.centered&&k.show)){g=Math.max(a.datamax+0.5,g);d=Math.min(a.datamin-0.5,d)}if(k.show){if(!k.horizontal&&(k.barWidth+a.datamax>g)){g=a.max+(k.centered?k.barWidth/2:k.barWidth)}if(k.stacked&&k.horizontal){for(j=0;j<n.data.length;j++){if(k.show&&k.stacked){var l=n.data[j][0];m[l]=(m[l]||0)+n.data[j][1];f=n}}for(j=0;j<m.length;j++){g=Math.max(m[j],g)}}}}}a.lastSerie=f;a.max=g;a.min=d}},extendYRangeIfNeededByBar:function(a){if(a.options.max==null){var f=a.max,d,m,h,g,l=[],e=null;for(d=0;d<this.series.length;++d){m=this.series[d];h=m.bars;g=m.candles;if(m.yaxis==a&&h.show&&!m.hide){if(h.horizontal&&(h.barWidth+a.datamax>f)||(g.candleWidth+a.datamax>f)){f=a.max+h.barWidth}if(h.stacked&&!h.horizontal){for(j=0;j<m.data.length;j++){if(m.bars.show&&m.bars.stacked){var k=m.data[j][0];l[k]=(l[k]||0)+m.data[j][1];e=m}}for(j=0;j<l.length;j++){f=Math.max(l[j],f)}}}}a.lastSerie=e;a.max=f}},findXAxesValues:function(){for(i=this.series.length-1;i>-1;--i){s=this.series[i];s.xaxis.values=s.xaxis.values||[];for(j=s.data.length-1;j>-1;--j){s.xaxis.values[s.data[j][0]]={}}}},calculateTicks:function(d){var b=d.options,e,h;d.ticks=[];if(b.ticks){var g=b.ticks,k,f;if(Object.isFunction(g)){g=g({min:d.min,max:d.max})}for(e=0;e<g.length;++e){k=g[e];if(typeof(k)=="object"){h=k[0];f=(k.length>1)?k[1]:b.tickFormatter(h)}else{h=k;f=b.tickFormatter(h)}d.ticks[e]={v:h,label:f}}}else{var a=d.tickSize*Math.ceil(d.min/d.tickSize),c;for(e=0;a+e*d.tickSize<=d.max;++e){h=a+e*d.tickSize;c=b.tickDecimals;if(c==null){c=1-Math.floor(Math.log(d.tickSize)/Math.LN10)}if(c<0){c=0}h=h.toFixed(c);d.ticks.push({v:h,label:b.tickFormatter(h)})}}},calculateSpacing:function(){var q=this.axes,t=this.options,k=this.series,e=t.grid.labelMargin,r=q.x,b=q.x2,n=q.y,o=q.y2,g=2,h,f,d,m;[r,b,n,o].each(function(l){var a="";if(l.options.showLabels){for(h=0;h<l.ticks.length;++h){d=l.ticks[h].label.length;if(d>a.length){a=l.ticks[h].label}}}l.maxLabel=this.getTextDimensions(a,{size:t.fontSize,angle:Flotr.toRad(l.options.labelsAngle)},"font-size:smaller;","flotr-grid-label");l.titleSize=this.getTextDimensions(l.options.title,{size:t.fontSize*1.2,angle:Flotr.toRad(l.options.titleAngle)},"font-weight:bold;","flotr-axis-title")},this);m=this.getTextDimensions(t.title,{size:t.fontSize*1.5},"font-size:1em;font-weight:bold;","flotr-title");this.titleHeight=m.height;m=this.getTextDimensions(t.subtitle,{size:t.fontSize},"font-size:smaller;","flotr-subtitle");this.subtitleHeight=m.height;if(t.show){g=Math.max(g,t.points.radius+t.points.lineWidth/2)}for(f=0;f<t.length;++f){if(k[f].points.show){g=Math.max(g,k[f].points.radius+k[f].points.lineWidth/2)}}var c=this.plotOffset;c.bottom+=(r.options.showLabels?(r.maxLabel.height+e):0)+(r.options.title?(r.titleSize.height+e):0)+g;c.top+=(b.options.showLabels?(b.maxLabel.height+e):0)+(b.options.title?(b.titleSize.height+e):0)+this.subtitleHeight+this.titleHeight+g;c.left+=(n.options.showLabels?(n.maxLabel.width+e):0)+(n.options.title?(n.titleSize.width+e):0)+g;c.right+=(o.options.showLabels?(o.maxLabel.width+e):0)+(o.options.title?(o.titleSize.width+e):0)+g;c.top=Math.floor(c.top);this.plotWidth=this.canvasWidth-c.left-c.right;this.plotHeight=this.canvasHeight-c.bottom-c.top;r.scale=this.plotWidth/(r.max-r.min);b.scale=this.plotWidth/(b.max-b.min);n.scale=this.plotHeight/(n.max-n.min);o.scale=this.plotHeight/(o.max-o.min)},draw:function(){this.drawGrid();this.drawLabels();this.drawTitles();if(this.series.length){this.el.fire("flotr:beforedraw",[this.series,this]);for(var a=0;a<this.series.length;a++){if(!this.series[a].hide){this.drawSeries(this.series[a])}}}this.el.fire("flotr:afterdraw",[this.series,this])},tHoz:function(a,b){b=b||this.axes.x;return(a-b.min)*b.scale},tVert:function(b,a){a=a||this.axes.y;return this.plotHeight-(b-a.min)*a.scale},drawGrid:function(){var b,e=this.options,a=this.ctx;if(e.grid.verticalLines||e.grid.horizontalLines){this.el.fire("flotr:beforegrid",[this.axes.x,this.axes.y,e,this])}a.save();a.translate(this.plotOffset.left,this.plotOffset.top);if(e.grid.backgroundColor!=null){a.fillStyle=e.grid.backgroundColor;a.fillRect(0,0,this.plotWidth,this.plotHeight)}a.lineWidth=1;a.strokeStyle=e.grid.tickColor;a.beginPath();if(e.grid.verticalLines){for(var d=0;d<this.axes.x.ticks.length;++d){b=this.axes.x.ticks[d].v;if((b==this.axes.x.min||b==this.axes.x.max)&&e.grid.outlineWidth!=0){continue}a.moveTo(Math.floor(this.tHoz(b))+a.lineWidth/2,0);a.lineTo(Math.floor(this.tHoz(b))+a.lineWidth/2,this.plotHeight)}}if(e.grid.horizontalLines){for(var c=0;c<this.axes.y.ticks.length;++c){b=this.axes.y.ticks[c].v;if((b==this.axes.y.min||b==this.axes.y.max)&&e.grid.outlineWidth!=0){continue}a.moveTo(0,Math.floor(this.tVert(b))+a.lineWidth/2);a.lineTo(this.plotWidth,Math.floor(this.tVert(b))+a.lineWidth/2)}}a.stroke();if(e.grid.outlineWidth!=0){a.lineWidth=e.grid.outlineWidth;a.strokeStyle=e.grid.color;a.lineJoin="round";a.strokeRect(0,0,this.plotWidth,this.plotHeight)}a.restore();if(e.grid.verticalLines||e.grid.horizontalLines){this.el.fire("flotr:aftergrid",[this.axes.x,this.axes.y,e,this])}},drawLabels:function(){var d=0,e,c,f,g,h,m=this.options,l=this.ctx,k=this.axes;for(f=0;f<k.x.ticks.length;++f){if(k.x.ticks[f].label){++d}}c=this.plotWidth/d;if(!m.HtmlText&&this.textEnabled){var b={size:m.fontSize,adjustAlign:true};e=k.x;b.color=e.options.color||m.grid.color;for(f=0;f<e.ticks.length&&e.options.showLabels&&e.used;++f){h=e.ticks[f];if(!h.label||h.label.length==0){continue}b.angle=Flotr.toRad(e.options.labelsAngle);b.halign="c";b.valign="t";l.drawText(h.label,this.plotOffset.left+this.tHoz(h.v,e),this.plotOffset.top+this.plotHeight+m.grid.labelMargin,b)}e=k.x2;b.color=e.options.color||m.grid.color;for(f=0;f<e.ticks.length&&e.options.showLabels&&e.used;++f){h=e.ticks[f];if(!h.label||h.label.length==0){continue}b.angle=Flotr.toRad(e.options.labelsAngle);b.halign="c";b.valign="b";l.drawText(h.label,this.plotOffset.left+this.tHoz(h.v,e),this.plotOffset.top+m.grid.labelMargin,b)}e=k.y;b.color=e.options.color||m.grid.color;for(f=0;f<e.ticks.length&&e.options.showLabels&&e.used;++f){h=e.ticks[f];if(!h.label||h.label.length==0){continue}b.angle=Flotr.toRad(e.options.labelsAngle);b.halign="r";b.valign="m";l.drawText(h.label,this.plotOffset.left-m.grid.labelMargin,this.plotOffset.top+this.tVert(h.v,e),b)}e=k.y2;b.color=e.options.color||m.grid.color;for(f=0;f<e.ticks.length&&e.options.showLabels&&e.used;++f){h=e.ticks[f];if(!h.label||h.label.length==0){continue}b.angle=Flotr.toRad(e.options.labelsAngle);b.halign="l";b.valign="m";l.drawText(h.label,this.plotOffset.left+this.plotWidth+m.grid.labelMargin,this.plotOffset.top+this.tVert(h.v,e),b);l.save();l.strokeStyle=b.color;l.beginPath();l.moveTo(this.plotOffset.left+this.plotWidth-8,this.plotOffset.top+this.tVert(h.v,e));l.lineTo(this.plotOffset.left+this.plotWidth,this.plotOffset.top+this.tVert(h.v,e));l.stroke();l.restore()}}else{if(k.x.options.showLabels||k.x2.options.showLabels||k.y.options.showLabels||k.y2.options.showLabels){g=['<div style="font-size:smaller;color:'+m.grid.color+';" class="flotr-labels">'];e=k.x;if(e.options.showLabels){for(f=0;f<e.ticks.length;++f){h=e.ticks[f];if(!h.label||h.label.length==0||(this.plotOffset.left+this.tHoz(h.v,e)<0)||(this.plotOffset.left+this.tHoz(h.v,e)>this.canvasWidth)){continue}g.push('<div style="position:absolute;top:'+(this.plotOffset.top+this.plotHeight+m.grid.labelMargin)+"px;left:"+(this.plotOffset.left+this.tHoz(h.v,e)-c/2)+"px;width:"+c+"px;text-align:center;"+(e.options.color?("color:"+e.options.color+";"):"")+'" class="flotr-grid-label">'+h.label+"</div>")}}e=k.x2;if(e.options.showLabels&&e.used){for(f=0;f<e.ticks.length;++f){h=e.ticks[f];if(!h.label||h.label.length==0||(this.plotOffset.left+this.tHoz(h.v,e)<0)||(this.plotOffset.left+this.tHoz(h.v,e)>this.canvasWidth)){continue}g.push('<div style="position:absolute;top:'+(this.plotOffset.top-m.grid.labelMargin-e.maxLabel.height)+"px;left:"+(this.plotOffset.left+this.tHoz(h.v,e)-c/2)+"px;width:"+c+"px;text-align:center;"+(e.options.color?("color:"+e.options.color+";"):"")+'" class="flotr-grid-label">'+h.label+"</div>")}}e=k.y;if(e.options.showLabels){for(f=0;f<e.ticks.length;++f){h=e.ticks[f];if(!h.label||h.label.length==0||(this.plotOffset.top+this.tVert(h.v,e)<0)||(this.plotOffset.top+this.tVert(h.v,e)>this.canvasHeight)){continue}g.push('<div style="position:absolute;top:'+(this.plotOffset.top+this.tVert(h.v,e)-e.maxLabel.height/2)+"px;left:0;width:"+(this.plotOffset.left-m.grid.labelMargin)+"px;text-align:right;"+(e.options.color?("color:"+e.options.color+";"):"")+'" class="flotr-grid-label">'+h.label+"</div>")}}e=k.y2;if(e.options.showLabels&&e.used){l.save();l.strokeStyle=e.options.color||m.grid.color;l.beginPath();for(f=0;f<e.ticks.length;++f){h=e.ticks[f];if(!h.label||h.label.length==0||(this.plotOffset.top+this.tVert(h.v,e)<0)||(this.plotOffset.top+this.tVert(h.v,e)>this.canvasHeight)){continue}g.push('<div style="position:absolute;top:'+(this.plotOffset.top+this.tVert(h.v,e)-e.maxLabel.height/2)+"px;right:0;width:"+(this.plotOffset.right-m.grid.labelMargin)+"px;text-align:left;"+(e.options.color?("color:"+e.options.color+";"):"")+'" class="flotr-grid-label">'+h.label+"</div>");l.moveTo(this.plotOffset.left+this.plotWidth-8,this.plotOffset.top+this.tVert(h.v,e));l.lineTo(this.plotOffset.left+this.plotWidth,this.plotOffset.top+this.tVert(h.v,e))}l.stroke();l.restore()}g.push("</div>");this.el.insert(g.join(""))}}},drawTitles:function(){var e,d=this.options,g=d.grid.labelMargin,c=this.ctx,b=this.axes;if(!d.HtmlText&&this.textEnabled){var f={size:d.fontSize,color:d.grid.color,halign:"c"};if(d.subtitle){c.drawText(d.subtitle,this.plotOffset.left+this.plotWidth/2,this.titleHeight+this.subtitleHeight-2,f)}f.weight=1.5;f.size*=1.5;if(d.title){c.drawText(d.title,this.plotOffset.left+this.plotWidth/2,this.titleHeight-2,f)}f.weight=1.8;f.size*=0.8;f.adjustAlign=true;if(b.x.options.title&&b.x.used){f.halign="c";f.valign="t";f.angle=Flotr.toRad(b.x.options.titleAngle);c.drawText(b.x.options.title,this.plotOffset.left+this.plotWidth/2,this.plotOffset.top+b.x.maxLabel.height+this.plotHeight+2*g,f)}if(b.x2.options.title&&b.x2.used){f.halign="c";f.valign="b";f.angle=Flotr.toRad(b.x2.options.titleAngle);c.drawText(b.x2.options.title,this.plotOffset.left+this.plotWidth/2,this.plotOffset.top-b.x2.maxLabel.height-2*g,f)}if(b.y.options.title&&b.y.used){f.halign="r";f.valign="m";f.angle=Flotr.toRad(b.y.options.titleAngle);c.drawText(b.y.options.title,this.plotOffset.left-b.y.maxLabel.width-2*g,this.plotOffset.top+this.plotHeight/2,f)}if(b.y2.options.title&&b.y2.used){f.halign="l";f.valign="m";f.angle=Flotr.toRad(b.y2.options.titleAngle);c.drawText(b.y2.options.title,this.plotOffset.left+this.plotWidth+b.y2.maxLabel.width+2*g,this.plotOffset.top+this.plotHeight/2,f)}}else{e=['<div style="color:'+d.grid.color+';" class="flotr-titles">'];if(d.title){e.push('<div style="position:absolute;top:0;left:'+this.plotOffset.left+"px;font-size:1em;font-weight:bold;text-align:center;width:"+this.plotWidth+'px;" class="flotr-title">'+d.title+"</div>")}if(d.subtitle){e.push('<div style="position:absolute;top:'+this.titleHeight+"px;left:"+this.plotOffset.left+"px;font-size:smaller;text-align:center;width:"+this.plotWidth+'px;" class="flotr-subtitle">'+d.subtitle+"</div>")}e.push("</div>");e.push('<div class="flotr-axis-title" style="font-weight:bold;">');if(b.x.options.title&&b.x.used){e.push('<div style="position:absolute;top:'+(this.plotOffset.top+this.plotHeight+d.grid.labelMargin+b.x.titleSize.height)+"px;left:"+this.plotOffset.left+"px;width:"+this.plotWidth+'px;text-align:center;" class="flotr-axis-title">'+b.x.options.title+"</div>")}if(b.x2.options.title&&b.x2.used){e.push('<div style="position:absolute;top:0;left:'+this.plotOffset.left+"px;width:"+this.plotWidth+'px;text-align:center;" class="flotr-axis-title">'+b.x2.options.title+"</div>")}if(b.y.options.title&&b.y.used){e.push('<div style="position:absolute;top:'+(this.plotOffset.top+this.plotHeight/2-b.y.titleSize.height/2)+'px;left:0;text-align:right;" class="flotr-axis-title">'+b.y.options.title+"</div>")}if(b.y2.options.title&&b.y2.used){e.push('<div style="position:absolute;top:'+(this.plotOffset.top+this.plotHeight/2-b.y.titleSize.height/2)+'px;right:0;text-align:right;" class="flotr-axis-title">'+b.y2.options.title+"</div>")}e.push("</div>");this.el.insert(e.join(""))}},drawSeries:function(a){a=a||this.series;var c=false;for(var b in Flotr._registeredTypes){if(a[b]&&a[b].show){this[Flotr._registeredTypes[b]](a);c=true}}if(!c){this[Flotr._registeredTypes[this.options.defaultType]](a)}},plotLine:function(k,f){var q=this.ctx,a=k.xaxis,m=k.yaxis,l=this.tHoz.bind(this),o=this.tVert.bind(this),h=k.data;if(h.length<2){return}var e=l(h[0][0],a),d=o(h[0][1],m)+f;q.beginPath();q.moveTo(e,d);for(var g=0;g<h.length-1;++g){var c=h[g][0],p=h[g][1],b=h[g+1][0],n=h[g+1][1];if(p===null||n===null){continue}if(p<=n&&p<m.min){if(n<m.min){continue}c=(m.min-p)/(n-p)*(b-c)+c;p=m.min}else{if(n<=p&&n<m.min){if(p<m.min){continue}b=(m.min-p)/(n-p)*(b-c)+c;n=m.min}}if(p>=n&&p>m.max){if(n>m.max){continue}c=(m.max-p)/(n-p)*(b-c)+c;p=m.max}else{if(n>=p&&n>m.max){if(p>m.max){continue}b=(m.max-p)/(n-p)*(b-c)+c;n=m.max}}if(c<=b&&c<a.min){if(b<a.min){continue}p=(a.min-c)/(b-c)*(n-p)+p;c=a.min}else{if(b<=c&&b<a.min){if(c<a.min){continue}n=(a.min-c)/(b-c)*(n-p)+p;b=a.min}}if(c>=b&&c>a.max){if(b>a.max){continue}p=(a.max-c)/(b-c)*(n-p)+p;c=a.max}else{if(b>=c&&b>a.max){if(c>a.max){continue}n=(a.max-c)/(b-c)*(n-p)+p;b=a.max}}if(e!=l(c,a)||d!=o(p,m)+f){q.moveTo(l(c,a),o(p,m)+f)}e=l(b,a);d=o(n,m)+f;q.lineTo(e,d)}q.stroke()},plotLineArea:function(l,d){var v=l.data;if(v.length<2){return}var n,g=0,p=this.ctx,t=l.xaxis,b=l.yaxis,e=this.tHoz.bind(this),o=this.tVert.bind(this),h=Math.min(Math.max(0,b.min),b.max),f=true;p.beginPath();for(var q=0;q<v.length-1;++q){var u=v[q][0],c=v[q][1],r=v[q+1][0],a=v[q+1][1];if(u<=r&&u<t.min){if(r<t.min){continue}c=(t.min-u)/(r-u)*(a-c)+c;u=t.min}else{if(r<=u&&r<t.min){if(u<t.min){continue}a=(t.min-u)/(r-u)*(a-c)+c;r=t.min}}if(u>=r&&u>t.max){if(r>t.max){continue}c=(t.max-u)/(r-u)*(a-c)+c;u=t.max}else{if(r>=u&&r>t.max){if(u>t.max){continue}a=(t.max-u)/(r-u)*(a-c)+c;r=t.max}}if(f){p.moveTo(e(u,t),o(h,b)+d);f=false}if(c>=b.max&&a>=b.max){p.lineTo(e(u,t),o(b.max,b)+d);p.lineTo(e(r,t),o(b.max,b)+d);continue}else{if(c<=b.min&&a<=b.min){p.lineTo(e(u,t),o(b.min,b)+d);p.lineTo(e(r,t),o(b.min,b)+d);continue}}var k=u,m=r;if(c<=a&&c<b.min&&a>=b.min){u=(b.min-c)/(a-c)*(r-u)+u;c=b.min}else{if(a<=c&&a<b.min&&c>=b.min){r=(b.min-c)/(a-c)*(r-u)+u;a=b.min}}if(c>=a&&c>b.max&&a<=b.max){u=(b.max-c)/(a-c)*(r-u)+u;c=b.max}else{if(a>=c&&a>b.max&&c<=b.max){r=(b.max-c)/(a-c)*(r-u)+u;a=b.max}}if(u!=k){n=(c<=b.min)?n=b.min:b.max;p.lineTo(e(k,t),o(n,b)+d);p.lineTo(e(u,t),o(n,b)+d)}p.lineTo(e(u,t),o(c,b)+d);p.lineTo(e(r,t),o(a,b)+d);if(r!=m){n=(a<=b.min)?b.min:b.max;p.lineTo(e(m,t),o(n,b)+d);p.lineTo(e(r,t),o(n,b)+d)}g=Math.max(r,m)}p.lineTo(e(g,t),o(h,b)+d);p.closePath();p.fill()},drawSeriesLines:function(c){c=c||this.series;var b=this.ctx;b.save();b.translate(this.plotOffset.left,this.plotOffset.top);b.lineJoin="round";var d=c.lines.lineWidth;var a=c.shadowSize;if(a>0){b.lineWidth=a/2;var e=d/2+b.lineWidth/2;b.strokeStyle="rgba(0,0,0,0.1)";this.plotLine(c,e+a/2);b.strokeStyle="rgba(0,0,0,0.2)";this.plotLine(c,e);if(c.lines.fill){b.fillStyle="rgba(0,0,0,0.05)";this.plotLineArea(c,e+a/2)}}b.lineWidth=d;b.strokeStyle=c.color;if(c.lines.fill){b.fillStyle=c.lines.fillColor!=null?c.lines.fillColor:Flotr.parseColor(c.color).scale(null,null,null,c.lines.fillOpacity).toString();this.plotLineArea(c,0)}this.plotLine(c,0);b.restore()},drawSeriesPoints:function(c){var b=this.ctx;b.save();b.translate(this.plotOffset.left,this.plotOffset.top);var d=c.lines.lineWidth;var a=c.shadowSize;if(a>0){b.lineWidth=a/2;b.strokeStyle="rgba(0,0,0,0.1)";this.plotPointShadows(c,a/2+b.lineWidth/2,c.points.radius);b.strokeStyle="rgba(0,0,0,0.2)";this.plotPointShadows(c,b.lineWidth/2,c.points.radius)}b.lineWidth=c.points.lineWidth;b.strokeStyle=c.color;b.fillStyle=c.points.fillColor!=null?c.points.fillColor:c.color;this.plotPoints(c,c.points.radius,c.points.fill);b.restore()},plotPoints:function(c,e,k){var a=c.xaxis,f=c.yaxis,l=this.ctx,d,b=c.data;for(d=b.length-1;d>-1;--d){var h=b[d][0],g=b[d][1];if(g===null||h<a.min||h>a.max||g<f.min||g>f.max){continue}l.beginPath();l.arc(this.tHoz(h,a),this.tVert(g,f),e,0,2*Math.PI,true);if(k){l.fill()}l.stroke()}},plotPointShadows:function(d,b,f){var a=d.xaxis,g=d.yaxis,l=this.ctx,e,c=d.data;for(e=c.length-1;e>-1;--e){var k=c[e][0],h=c[e][1];if(h===null||k<a.min||k>a.max||h<g.min||h>g.max){continue}l.beginPath();l.arc(this.tHoz(k,a),this.tVert(h,g)+b,f,0,Math.PI,false);l.stroke()}},drawSeriesBars:function(b){var a=this.ctx,d=b.bars.barWidth,c=Math.min(b.bars.lineWidth,d);a.save();a.translate(this.plotOffset.left,this.plotOffset.top);a.lineJoin="miter";a.lineWidth=c;a.strokeStyle=b.color;this.plotBarsShadows(b,d,0,b.bars.fill);if(b.bars.fill){a.fillStyle=b.bars.fillColor!=null?b.bars.fillColor:Flotr.parseColor(b.color).scale(null,null,null,b.bars.fillOpacity).toString()}this.plotBars(b,d,0,b.bars.fill);a.restore()},plotBars:function(m,p,d,t){var z=m.data;if(z.length<1){return}var v=m.xaxis,b=m.yaxis,r=this.ctx,f=this.tHoz.bind(this),q=this.tVert.bind(this);for(var u=0;u<z.length;u++){var l=z[u][0],k=z[u][1],e=true,n=true,a=true;if(k===null){continue}var h=0;if(m.bars.stacked){v.values.each(function(y,x){if(x==l){h=y.stack||0;y.stack=h+k}})}if(m.bars.horizontal){var c=h,w=l+h,g=k,o=k+p}else{var c=l-(m.bars.centered?p/2:0),w=l+p-(m.bars.centered?p/2:0),g=h,o=k+h}if(w<v.min||c>v.max||o<b.min||g>b.max){continue}if(c<v.min){c=v.min;e=false}if(w>v.max){w=v.max;if(v.lastSerie!=m&&m.bars.horizontal){n=false}}if(g<b.min){g=b.min}if(o>b.max){o=b.max;if(b.lastSerie!=m&&!m.bars.horizontal){n=false}}if(t){r.beginPath();r.moveTo(f(c,v),q(g,b)+d);r.lineTo(f(c,v),q(o,b)+d);r.lineTo(f(w,v),q(o,b)+d);r.lineTo(f(w,v),q(g,b)+d);r.fill()}if(m.bars.lineWidth!=0&&(e||a||n)){r.beginPath();r.moveTo(f(c,v),q(g,b)+d);r[e?"lineTo":"moveTo"](f(c,v),q(o,b)+d);r[n?"lineTo":"moveTo"](f(w,v),q(o,b)+d);r[a?"lineTo":"moveTo"](f(w,v),q(g,b)+d);r.stroke()}}},plotBarsShadows:function(k,m,c){var w=k.data;if(w.length<1){return}var u=k.xaxis,a=k.yaxis,r=this.ctx,d=this.tHoz.bind(this),o=this.tVert.bind(this),p=this.options.shadowSize;for(var t=0;t<w.length;t++){var h=w[t][0],g=w[t][1];if(g===null){continue}var e=0;if(k.bars.stacked){u.values.each(function(y,x){if(x==h){e=y.stackShadow||0;y.stackShadow=e+g}})}if(k.bars.horizontal){var b=e,v=h+e,f=g,l=g+m}else{var b=h-(k.bars.centered?m/2:0),v=h+m-(k.bars.centered?m/2:0),f=e,l=g+e}if(v<u.min||b>u.max||l<a.min||f>a.max){continue}if(b<u.min){b=u.min}if(v>u.max){v=u.max}if(f<a.min){f=a.min}if(l>a.max){l=a.max}var q=d(v,u)-d(b,u)-((d(v,u)+p<=this.plotWidth)?0:p);var n=Math.max(0,o(f,a)-o(l,a)-((o(f,a)+p<=this.plotHeight)?0:p));r.fillStyle="rgba(0,0,0,0.05)";r.fillRect(Math.min(d(b,u)+p,this.plotWidth),Math.min(o(l,a)+p,this.plotWidth),q,n)}},drawSeriesCandles:function(b){var a=this.ctx,c=b.candles.candleWidth;a.save();a.translate(this.plotOffset.left,this.plotOffset.top);a.lineJoin="miter";a.lineWidth=b.candles.lineWidth;this.plotCandlesShadows(b,c/2);this.plotCandles(b,c/2);a.restore()},plotCandles:function(n,e){var C=n.data;if(C.length<1){return}var z=n.xaxis,b=n.yaxis,t=this.ctx,f=this.tHoz.bind(this),r=this.tVert.bind(this);for(var w=0;w<C.length;w++){var A=C[w],m=A[0],o=A[1],l=A[2],D=A[3],q=A[4];var c=m-n.candles.candleWidth/2,B=m+n.candles.candleWidth/2,h=Math.max(b.min,D),p=Math.min(b.max,l),a=Math.max(b.min,Math.min(o,q)),v=Math.min(b.max,Math.max(o,q));if(B<z.min||c>z.max||p<b.min||h>b.max){continue}var u=n.candles[o>q?"downFillColor":"upFillColor"];if(n.candles.fill&&!n.candles.barcharts){t.fillStyle=Flotr.parseColor(u).scale(null,null,null,n.candles.fillOpacity).toString();t.fillRect(f(c,z),r(v,b)+e,f(B,z)-f(c,z),r(a,b)-r(v,b))}if(n.candles.lineWidth||n.candles.wickLineWidth){var m,k,g=(n.candles.wickLineWidth%2)/2;m=Math.floor(f((c+B)/2),z)+g;t.save();t.strokeStyle=u;t.lineWidth=n.candles.wickLineWidth;t.lineCap="butt";if(n.candles.barcharts){t.beginPath();t.moveTo(m,Math.floor(r(p,b)+e));t.lineTo(m,Math.floor(r(h,b)+e));k=Math.floor(r(o,b)+e)+0.5;t.moveTo(Math.floor(f(c,z))+g,k);t.lineTo(m,k);k=Math.floor(r(q,b)+e)+0.5;t.moveTo(Math.floor(f(B,z))+g,k);t.lineTo(m,k)}else{t.strokeRect(f(c,z),r(v,b)+e,f(B,z)-f(c,z),r(a,b)-r(v,b));t.beginPath();t.moveTo(m,Math.floor(r(v,b)+e));t.lineTo(m,Math.floor(r(p,b)+e));t.moveTo(m,Math.floor(r(a,b)+e));t.lineTo(m,Math.floor(r(h,b)+e))}t.stroke();t.restore()}}},plotCandlesShadows:function(k,c){var y=k.data;if(y.length<1||k.candles.barcharts){return}var u=k.xaxis,a=k.yaxis,e=this.tHoz.bind(this),p=this.tVert.bind(this),q=this.options.shadowSize;for(var t=0;t<y.length;t++){var v=y[t],h=v[0],l=v[1],g=v[2],z=v[3],n=v[4];var b=h-k.candles.candleWidth/2,w=h+k.candles.candleWidth/2,f=Math.max(a.min,Math.min(l,n)),m=Math.min(a.max,Math.max(l,n));if(w<u.min||b>u.max||m<a.min||f>a.max){continue}var r=e(w,u)-e(b,u)-((e(w,u)+q<=this.plotWidth)?0:q);var o=Math.max(0,p(f,a)-p(m,a)-((p(f,a)+q<=this.plotHeight)?0:q));this.ctx.fillStyle="rgba(0,0,0,0.05)";this.ctx.fillRect(Math.min(e(b,u)+q,this.plotWidth),Math.min(p(m,a)+q,this.plotWidth),r,o)}},drawSeriesPie:function(g){if(this.options.pie.drawn){return}var n=this.ctx,c=this.options,e=g.pie.lineWidth,l=g.shadowSize,v=g.data,h=this.plotOffset,d=(Math.min(this.canvasWidth,this.canvasHeight)*g.pie.sizeRatio)/2,k=[],o=1,t=Math.sin(g.pie.viewAngle)*g.pie.spliceThickness/o,p={size:c.fontSize*1.2,color:c.grid.color,weight:1.5},u={x:h.left+(this.plotWidth)/2,y:h.top+(this.plotHeight)/2},r=this.series.collect(function(x,w){if(x.pie.show&&x.data[0][1]!==null){return{name:(x.label||x.data[0][1]),value:[w,x.data[0][1]],options:x.pie,series:x}}}),b=r.pluck("value").pluck(1).inject(0,function(w,x){return w+x}),f=0,q=g.pie.startAngle,m=0;var a=r.collect(function(w){q+=f;m=parseFloat(w.value[1]);f=m/b;return{name:w.name,fraction:f,x:w.value[0],y:m,options:w.options,series:w.series,startAngle:2*q*Math.PI,endAngle:2*(q+f)*Math.PI}});n.save();if(l>0){a.each(function(z){if(z.startAngle==z.endAngle){return}var w=(z.startAngle+z.endAngle)/2,x=u.x+Math.cos(w)*z.options.explode+l,y=u.y+Math.sin(w)*z.options.explode+l;this.plotSlice(x,y,d,z.startAngle,z.endAngle,false,o);if(g.pie.fill){n.fillStyle="rgba(0,0,0,0.1)";n.fill()}},this)}if(c.HtmlText||!this.textEnabled){k=['<div style="color:'+this.options.grid.color+'" class="flotr-labels">']}a.each(function(H,C){if(H.startAngle==H.endAngle){return}var B=(H.startAngle+H.endAngle)/2,A=H.series.color,x=H.options.fillColor||A,D=u.x+Math.cos(B)*H.options.explode,z=u.y+Math.sin(B)*H.options.explode;this.plotSlice(D,z,d,H.startAngle,H.endAngle,false,o);if(g.pie.fill){n.fillStyle=Flotr.parseColor(x).scale(null,null,null,g.pie.fillOpacity).toString();n.fill()}n.lineWidth=e;n.strokeStyle=A;n.stroke();var G=c.pie.labelFormatter(H),w=(Math.cos(B)<0),F=D+Math.cos(B)*(g.pie.explode+d),E=z+Math.sin(B)*(g.pie.explode+d);if(H.fraction&&G){if(c.HtmlText||!this.textEnabled){var y="position:absolute;top:"+(E-5)+"px;";if(w){y+="right:"+(this.canvasWidth-F)+"px;text-align:right;"}else{y+="left:"+F+"px;text-align:left;"}k.push('<div style="'+y+'" class="flotr-grid-label">'+G+"</div>")}else{p.halign=w?"r":"l";n.drawText(G,F,E+p.size/2,p)}}},this);if(c.HtmlText||!this.textEnabled){k.push("</div>");this.el.insert(k.join(""))}n.restore();c.pie.drawn=true},plotSlice:function(b,h,a,e,d,f,g){var c=this.ctx;g=g||1;c.scale(1,g);c.beginPath();c.moveTo(b,h);c.arc(b,h,a,e,d,f);c.lineTo(b,h);c.closePath()},insertLegend:function(){if(!this.options.legend.show){return}var k=this.series,l=this.plotOffset,b=this.options,J=[],a=false,u=this.ctx,z;var w=k.findAll(function(c){return(c.label&&!c.hide)}).size();if(w){if(!b.HtmlText&&this.textEnabled){var B={size:b.fontSize*1.1,color:b.grid.color};var r=b.legend.position,t=b.legend.margin,q=b.legend.labelBoxWidth,H=b.legend.labelBoxHeight,A=b.legend.labelBoxMargin,E=l.left+t,C=l.top+t;var I=0;for(z=k.length-1;z>-1;--z){if(!k[z].label||k[z].hide){continue}var f=b.legend.labelFormatter(k[z].label);I=Math.max(I,u.measureText(f,B))}var o=Math.round(q+A*3+I),d=Math.round(w*(A+H)+A);if(r.charAt(0)=="s"){C=l.top+this.plotHeight-(t+d)}if(r.charAt(1)=="e"){E=l.left+this.plotWidth-(t+o)}var v=Flotr.parseColor(b.legend.backgroundColor||"rgb(240,240,240)").scale(null,null,null,b.legend.backgroundOpacity||0.1).toString();u.fillStyle=v;u.fillRect(E,C,o,d);u.strokeStyle=b.legend.labelBoxBorderColor;u.strokeRect(Flotr.toPixel(E),Flotr.toPixel(C),o,d);var h=E+A;var g=C+A;for(z=0;z<k.length;z++){if(!k[z].label||k[z].hide){continue}var f=b.legend.labelFormatter(k[z].label);u.fillStyle=k[z].color;u.fillRect(h,g,q-1,H-1);u.strokeStyle=b.legend.labelBoxBorderColor;u.lineWidth=1;u.strokeRect(Math.ceil(h)-1.5,Math.ceil(g)-1.5,q+2,H+2);u.drawText(f,h+q+A,g+(H+B.size-u.fontDescent(B))/2,B);g+=H+A}}else{for(z=0;z<k.length;++z){if(!k[z].label||k[z].hide){continue}if(z%b.legend.noColumns==0){J.push(a?"</tr><tr>":"<tr>");a=true}var f=b.legend.labelFormatter(k[z].label);J.push('<td class="flotr-legend-color-box"><div style="border:1px solid '+b.legend.labelBoxBorderColor+';padding:1px"><div style="width:'+b.legend.labelBoxWidth+"px;height:"+b.legend.labelBoxHeight+"px;background-color:"+k[z].color+'"></div></div></td><td class="flotr-legend-label">'+f+"</td>")}if(a){J.push("</tr>")}if(J.length>0){var D='<table style="font-size:smaller;color:'+b.grid.color+'">'+J.join("")+"</table>";if(b.legend.container!=null){$(b.legend.container).update(D)}else{var e="",r=b.legend.position,t=b.legend.margin;if(r.charAt(0)=="n"){e+="top:"+(t+l.top)+"px;"}else{if(r.charAt(0)=="s"){e+="bottom:"+(t+l.bottom)+"px;"}}if(r.charAt(1)=="e"){e+="right:"+(t+l.right)+"px;"}else{if(r.charAt(1)=="w"){e+="left:"+(t+l.left)+"px;"}}var n=this.el.insert('<div class="flotr-legend" style="position:absolute;z-index:2;'+e+'">'+D+"</div>").select("div.flotr-legend").first();if(b.legend.backgroundOpacity!=0){var G=b.legend.backgroundColor;if(G==null){var F=(b.grid.backgroundColor!=null)?b.grid.backgroundColor:Flotr.extractColor(n);G=Flotr.parseColor(F).adjust(null,null,null,1).toString()}this.el.insert('<div class="flotr-legend-bg" style="position:absolute;width:'+n.getWidth()+"px;height:"+n.getHeight()+"px;"+e+"background-color:"+G+';"> </div>').select("div.flotr-legend-bg").first().setStyle({opacity:b.legend.backgroundOpacity})}}}}}},getEventPosition:function(d){var h=this.overlay.cumulativeOffset(),g=(d.pageX-h.left-this.plotOffset.left),f=(d.pageY-h.top-this.plotOffset.top),e=0,c=0;if(d.pageX==null&&d.clientX!=null){var k=document.documentElement,a=document.body;e=d.clientX+(k&&k.scrollLeft||a.scrollLeft||0);c=d.clientY+(k&&k.scrollTop||a.scrollTop||0)}else{e=d.pageX;c=d.pageY}return{x:this.axes.x.min+g/this.axes.x.scale,x2:this.axes.x2.min+g/this.axes.x2.scale,y:this.axes.y.max-f/this.axes.y.scale,y2:this.axes.y2.max-f/this.axes.y2.scale,relX:g,relY:f,absX:e,absY:c}},clickHandler:function(a){if(this.ignoreClick){this.ignoreClick=false;return}this.el.fire("flotr:click",[this.getEventPosition(a),this])},mouseMoveHandler:function(a){var b=this.getEventPosition(a);this.lastMousePos.pageX=b.absX;this.lastMousePos.pageY=b.absY;if(this.options.crosshair.mode){this.clearCrosshair()}if(this.selectionInterval==null&&(this.options.mouse.track||this.series.any(function(c){return c.mouse&&c.mouse.track}))){this.hit(b)}if(this.options.crosshair.mode){this.drawCrosshair(b)}this.el.fire("flotr:mousemove",[a,b,this])},mouseDownHandler:function(c){if(c.isRightClick()){c.stop();var b=this.overlay;b.hide();function a(){b.show();$(document).stopObserving("mousemove",a)}$(document).observe("mousemove",a);return}if(!this.options.selection.mode||!c.isLeftClick()){return}this.setSelectionPos(this.selection.first,c);if(this.selectionInterval!=null){clearInterval(this.selectionInterval)}this.lastMousePos.pageX=null;this.selectionInterval=setInterval(this.updateSelection.bind(this),1000/this.options.selection.fps);this.mouseUpHandler=this.mouseUpHandler.bind(this);$(document).observe("mouseup",this.mouseUpHandler)},fireSelectEvent:function(){var b=this.axes,g=this.selection,d=(g.first.x<=g.second.x)?g.first.x:g.second.x,c=(g.first.x<=g.second.x)?g.second.x:g.first.x,f=(g.first.y>=g.second.y)?g.first.y:g.second.y,e=(g.first.y>=g.second.y)?g.second.y:g.first.y;d=b.x.min+d/b.x.scale;c=b.x.min+c/b.x.scale;f=b.y.max-f/b.y.scale;e=b.y.max-e/b.y.scale;this.el.fire("flotr:select",[{x1:d,y1:f,x2:c,y2:e},this])},mouseUpHandler:function(a){$(document).stopObserving("mouseup",this.mouseUpHandler);a.stop();if(this.selectionInterval!=null){clearInterval(this.selectionInterval);this.selectionInterval=null}this.setSelectionPos(this.selection.second,a);this.clearSelection();if(this.selectionIsSane()){this.drawSelection();this.fireSelectEvent();this.ignoreClick=true}},setSelectionPos:function(d,b){var a=this.options,c=$(this.overlay).cumulativeOffset();if(a.selection.mode.indexOf("x")==-1){d.x=(d==this.selection.first)?0:this.plotWidth}else{d.x=b.pageX-c.left-this.plotOffset.left;d.x=Math.min(Math.max(0,d.x),this.plotWidth)}if(a.selection.mode.indexOf("y")==-1){d.y=(d==this.selection.first)?0:this.plotHeight}else{d.y=b.pageY-c.top-this.plotOffset.top;d.y=Math.min(Math.max(0,d.y),this.plotHeight)}},updateSelection:function(){if(this.lastMousePos.pageX==null){return}this.setSelectionPos(this.selection.second,this.lastMousePos);this.clearSelection();if(this.selectionIsSane()){this.drawSelection()}},clearSelection:function(){if(this.prevSelection==null){return}var g=this.prevSelection,e=this.octx.lineWidth,c=this.plotOffset,a=Math.min(g.first.x,g.second.x),f=Math.min(g.first.y,g.second.y),b=Math.abs(g.second.x-g.first.x),d=Math.abs(g.second.y-g.first.y);this.octx.clearRect(a+c.left-e/2+0.5,f+c.top-e/2+0.5,b+e,d+e);this.prevSelection=null},setSelection:function(g){var b=this.options,h=this.axes.x,a=this.axes.y,f=a.scale,d=h.scale,e=b.selection.mode.indexOf("x")!=-1,c=b.selection.mode.indexOf("y")!=-1;this.clearSelection();this.selection.first.y=e?0:(a.max-g.y1)*f;this.selection.second.y=e?this.plotHeight:(a.max-g.y2)*f;this.selection.first.x=c?0:(g.x1-h.min)*d;this.selection.second.x=c?this.plotWidth:(g.x2-h.min)*d;this.drawSelection();this.fireSelectEvent()},drawSelection:function(){var c=this.prevSelection,f=this.selection,k=this.octx,l=this.options,a=this.plotOffset;if(c!=null&&f.first.x==c.first.x&&f.first.y==c.first.y&&f.second.x==c.second.x&&f.second.y==c.second.y){return}k.save();k.strokeStyle=Flotr.parseColor(l.selection.color).scale(null,null,null,0.8).toString();k.lineWidth=1;k.lineJoin="miter";k.fillStyle=Flotr.parseColor(l.selection.color).scale(null,null,null,0.4).toString();this.prevSelection={first:{x:f.first.x,y:f.first.y},second:{x:f.second.x,y:f.second.y}};var e=Math.min(f.first.x,f.second.x),d=Math.min(f.first.y,f.second.y),g=Math.abs(f.second.x-f.first.x),b=Math.abs(f.second.y-f.first.y);k.fillRect(e+a.left+0.5,d+a.top+0.5,g,b);k.strokeRect(e+a.left+0.5,d+a.top+0.5,g,b);k.restore()},drawCrosshair:function(h){var f=this.octx,e=this.options,d=this.plotOffset,b=d.left+h.relX+0.5,g=d.top+h.relY+0.5,c=e.crosshair.mode.indexOf("x")!=-1,a=e.crosshair.mode.indexOf("y")!=-1;if(h.relX<0||h.relY<0||h.relX>this.plotWidth||h.relY>this.plotHeight){this.el.style.cursor=null;this.el.removeClassName("flotr-crosshair");return}this.lastMousePos.relX=null;this.lastMousePos.relY=null;if(e.crosshair.hideCursor){this.el.style.cursor="url(blank.cur), crosshair";this.el.addClassName("flotr-crosshair")}f.save();f.strokeStyle=e.crosshair.color;f.lineWidth=1;f.beginPath();if(c){f.moveTo(b,d.top);f.lineTo(b,d.top+this.plotHeight);this.lastMousePos.relX=b}if(a){f.moveTo(d.left,g);f.lineTo(d.left+this.plotWidth,g);this.lastMousePos.relY=g}f.stroke();f.restore()},clearCrosshair:function(){if(this.lastMousePos.relX!=null){this.octx.clearRect(this.lastMousePos.relX-0.5,this.plotOffset.top,1,this.plotHeight+1)}if(this.lastMousePos.relY!=null){this.octx.clearRect(this.plotOffset.left,this.lastMousePos.relY-0.5,this.plotWidth+1,1)}},selectionIsSane:function(){return Math.abs(this.selection.second.x-this.selection.first.x)>=5&&Math.abs(this.selection.second.y-this.selection.first.y)>=5},clearHit:function(){if(this.prevHit){var b=this.options,a=this.plotOffset,c=this.prevHit;this.octx.clearRect(this.tHoz(c.x,c.xaxis)+a.left-b.points.radius*2,this.tVert(c.y,c.yaxis)+a.top-b.points.radius*2,b.points.radius*3+b.points.lineWidth*3,b.points.radius*3+b.points.lineWidth*3);this.prevHit=null}},drawHit:function(c){var b=this.octx,a=this.options;if(c.mouse.lineColor!=null){b.save();b.translate(this.plotOffset.left,this.plotOffset.top);b.lineWidth=a.points.lineWidth;b.strokeStyle=c.mouse.lineColor;b.fillStyle="#ffffff";b.beginPath();b.arc(this.tHoz(c.x,c.xaxis),this.tVert(c.y,c.yaxis),a.mouse.radius,0,2*Math.PI,true);b.fill();b.stroke();b.restore()}this.prevHit=c},hit:function(q){var l=this.series,f=this.options,D=this.prevHit,o=this.plotOffset,h=this.octx,F,a,y,E,c,t,r,C,x={dist:Number.MAX_VALUE,x:null,y:null,relX:q.relX,relY:q.relY,absX:q.absX,absY:q.absY,mouse:null,xaxis:null,yaxis:null};for(C=0;C<l.length;C++){s=l[C];if(!s.mouse.track){continue}F=s.data;E=s.xaxis;c=s.yaxis;a=(2*f.points.lineWidth)/E.scale;y=(2*f.points.lineWidth)/c.scale;t=q.relX/E.scale+E.min;r=-q.relY/c.scale+c.max;for(var B=0,b,g;B<F.length;B++){if(F[B][1]===null||E.min>F[B][0]||E.max<F[B][0]||c.min>F[B][1]||c.max<F[B][1]){continue}var u=Math.abs(F[B][0]-t),e=Math.abs(F[B][1]-r);if(u<a&&e<y){var d=Math.sqrt(u*u+e*e);if(d<x.dist){x.dist=d;x.x=F[B][0];x.y=F[B][1];x.xaxis=E;x.yaxis=c;x.mouse=s.mouse}}}}if(x.mouse&&x.mouse.track&&!D||(D)){var w=this.mouseTrack||this.el.select(".flotr-mouse-value")[0],k="",v=f.mouse.position,z=f.mouse.margin,A="opacity:0.7;background-color:#000;color:#fff;display:none;position:absolute;padding:2px 8px;-moz-border-radius:4px;border-radius:4px;white-space:nowrap;";if(!f.mouse.relative){if(v.charAt(0)=="n"){k+="top:"+(z+o.top)+"px;"}else{if(v.charAt(0)=="s"){k+="bottom:"+(z+o.bottom)+"px;"}}if(v.charAt(1)=="e"){k+="right:"+(z+o.right)+"px;"}else{if(v.charAt(1)=="w"){k+="left:"+(z+o.left)+"px;"}}}else{if(v.charAt(0)=="n"){k+="bottom:"+(z-o.top-this.tVert(x.y)+this.canvasHeight)+"px;"}else{if(v.charAt(0)=="s"){k+="top:"+(z+o.top+this.tVert(x.y))+"px;"}}if(v.charAt(1)=="e"){k+="left:"+(z+o.left+this.tHoz(x.x))+"px;"}else{if(v.charAt(1)=="w"){k+="right:"+(z-o.left-this.tHoz(x.x)+this.canvasWidth)+"px;"}}}A+=k;if(!w){this.el.insert('<div class="flotr-mouse-value" style="'+A+'"></div>');w=this.mouseTrack=this.el.select(".flotr-mouse-value").first()}else{this.mouseTrack=w.setStyle(A)}if(x.x!==null&&x.y!==null){w.show();this.clearHit();this.drawHit(x);var G=x.mouse.trackDecimals;if(G==null||G<0){G=0}w.innerHTML=x.mouse.trackFormatter({x:x.x.toFixed(G),y:x.y.toFixed(G)});w.fire("flotr:hit",[x,this])}else{if(D){w.hide();this.clearHit()}}}},saveImage:function(d,c,a,b){var e=null;switch(d){case"jpeg":case"jpg":e=Canvas2Image.saveAsJPEG(this.canvas,b,c,a);break;default:case"png":e=Canvas2Image.saveAsPNG(this.canvas,b,c,a);break;case"bmp":e=Canvas2Image.saveAsBMP(this.canvas,b,c,a);break}if(Object.isElement(e)&&b){this.restoreCanvas();this.canvas.hide();this.overlay.hide();this.el.insert(e.setStyle({position:"absolute"}))}},restoreCanvas:function(){this.canvas.show();this.overlay.show();this.el.select("img").invoke("remove")}});Flotr.Color=Class.create({initialize:function(h,f,d,e){this.rgba=["r","g","b","a"];var c=4;while(-1<--c){this[this.rgba[c]]=arguments[c]||((c==3)?1:0)}this.normalize()},adjust:function(d,c,e,b){var a=4;while(-1<--a){if(arguments[a]!=null){this[this.rgba[a]]+=arguments[a]}}return this.normalize()},clone:function(){return new Flotr.Color(this.r,this.b,this.g,this.a)},limit:function(b,a,c){return Math.max(Math.min(b,c),a)},normalize:function(){var a=this.limit;this.r=a(parseInt(this.r),0,255);this.g=a(parseInt(this.g),0,255);this.b=a(parseInt(this.b),0,255);this.a=a(this.a,0,1);return this},scale:function(d,c,e,b){var a=4;while(-1<--a){if(arguments[a]!=null){this[this.rgba[a]]*=arguments[a]}}return this.normalize()},distance:function(b){if(!b){return}b=new Flotr.parseColor(b);var c=0,a=3;while(-1<--a){c+=Math.abs(this[this.rgba[a]]-b[this.rgba[a]])}return c},toString:function(){return(this.a>=1)?"rgb("+[this.r,this.g,this.b].join(",")+")":"rgba("+[this.r,this.g,this.b,this.a].join(",")+")"}});Flotr.Color.lookupColors={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]};Flotr.Date={format:function(h,g){if(!h){return}var a=function(c){c=c.toString();return c.length==1?"0"+c:c};var f=[],k,e=false;for(var b=0;b<g.length;++b){k=g.charAt(b);if(e){switch(k){case"h":k=h.getUTCHours().toString();break;case"H":k=a(h.getUTCHours());break;case"M":k=a(h.getUTCMinutes());break;case"S":k=a(h.getUTCSeconds());break;case"d":k=h.getUTCDate().toString();break;case"m":k=(h.getUTCMonth()+1).toString();break;case"y":k=h.getUTCFullYear().toString();break;case"b":k=Flotr.Date.monthNames[h.getUTCMonth()];break}f.push(k);e=false}else{if(k=="%"){e=true}else{f.push(k)}}}return f.join("")},formatter:function(a,e){var f=new Date(a);if(e.options.timeformat!=null){return Flotr.Date.format(f,e.options.timeformat)}var b=e.tickSize[0]*Flotr.Date.timeUnits[e.tickSize[1]],c=e.max-e.min;if(b<Flotr.Date.timeUnits.minute){fmt="%h:%M:%S"}else{if(b<Flotr.Date.timeUnits.day){fmt=(c<2*Flotr.Date.timeUnits.day)?"%h:%M":"%b %d %h:%M"}else{if(b<Flotr.Date.timeUnits.month){fmt="%b %d"}else{if(b<Flotr.Date.timeUnits.year){fmt=(c<Flotr.Date.timeUnits.year)?"%b":"%b %y"}else{fmt="%y"}}}}return Flotr.Date.format(f,fmt)},generator:function(c){var k=[],g=c.tickSize[0],l=c.tickSize[1],h=new Date(c.min),b=g*timeUnitSize[l];switch(l){case"second":h.setUTCSeconds(floorInBase(h.getUTCSeconds(),g));break;case"minute":h.setUTCMinutes(floorInBase(h.getUTCMinutes(),g));break;case"hour":h.setUTCHours(floorInBase(h.getUTCHours(),g));break;case"month":h.setUTCMonth(floorInBase(h.getUTCMonth(),g));break;case"year":h.setUTCFullYear(floorInBase(h.getUTCFullYear(),g));break}h.setUTCMilliseconds(0);if(b>=timeUnitSize.minute){h.setUTCSeconds(0)}if(b>=timeUnitSize.hour){h.setUTCMinutes(0)}if(b>=timeUnitSize.day){h.setUTCHours(0)}if(b>=timeUnitSize.day*4){h.setUTCDate(1)}if(b>=timeUnitSize.year){h.setUTCMonth(0)}var n=0,m=Number.NaN,e;do{e=m;m=h.getTime();k.push({v:m,label:c.tickFormatter(m,c)});if(l=="month"){if(g<1){h.setUTCDate(1);var a=h.getTime();h.setUTCMonth(h.getUTCMonth()+1);var f=h.getTime();h.setTime(m+n*timeUnitSize.hour+(f-a)*g);n=h.getUTCHours();h.setUTCHours(0)}else{h.setUTCMonth(h.getUTCMonth()+g)}}else{if(l=="year"){h.setUTCFullYear(h.getUTCFullYear()+g)}else{h.setTime(m+b)}}}while(m<c.max&&m!=e);return k},timeUnits:{second:1000,minute:1000*60,hour:1000*60*60,day:1000*60*60*24,month:1000*60*60*24*30,year:1000*60*60*24*30*365.2425},spec:[[1,"second"],[2,"second"],[5,"second"],[10,"second"],[30,"second"],[1,"minute"],[2,"minute"],[5,"minute"],[10,"minute"],[30,"minute"],[1,"hour"],[2,"hour"],[4,"hour"],[8,"hour"],[12,"hour"],[1,"day"],[2,"day"],[3,"day"],[0.25,"month"],[0.5,"month"],[1,"month"],[2,"month"],[3,"month"],[6,"month"],[1,"year"]],monthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]};