+DateGraph.prototype.mouseMove_=function(_103){
+var _104=_103.mouse().page.x-PlotKit.Base.findPosX(this.hidden_);
+var _105=this.layout_.points;
+var _106=-1;
+var _107=-1;
+var _108=1e+100;
+var idx=-1;
+for(var i=0;i<_105.length;i++){
+var dist=Math.abs(_105[i].canvasx-_104);
+if(dist>_108){
+break;
+}
+_108=dist;
+idx=i;
+}
+if(idx>=0){
+_106=_105[idx].xval;
+}
+if(_104>_105[_105.length-1].canvasx){
+_106=_105[_105.length-1].xval;
+}
+var _111=[];
+for(var i=0;i<_105.length;i++){
+if(_105[i].xval==_106){
+_111.push(_105[i]);
+}
+}
+var _112=this.attrs_.highlightCircleSize;
+var ctx=this.canvas_.getContext("2d");
+if(this.previousVerticalX_>=0){
+var px=this.previousVerticalX_;
+ctx.clearRect(px-_112-1,0,2*_112+2,this.height_);
+}
+if(_111.length>0){
+var _104=_111[0].canvasx;
+var _113=this.xValueFormatter_(_106)+":";
+var clen=this.colors_.length;
+for(var i=0;i<_111.length;i++){
+if(this.labelsSeparateLines){
+_113+="<br/>";
+}
+var _115=_111[i];
+_113+=" <b><font color='"+this.colors_[i%clen].toHexString()+"'>"+_115.name+"</font></b>:"+this.round_(_115.yval,2);
+}
+this.labelsDiv_.innerHTML=_113;
+this.lastx_=_106;
+ctx.save();
+for(var i=0;i<_111.length;i++){
+ctx.beginPath();
+ctx.fillStyle=this.colors_[i%clen].toRGBString();
+ctx.arc(_104,_111[i%clen].canvasy,_112,0,360,false);
+ctx.fill();
+}
+ctx.restore();
+this.previousVerticalX_=_104;
+}
+};
+DateGraph.prototype.mouseOut_=function(_116){
+var ctx=this.canvas_.getContext("2d");
+ctx.clearRect(0,0,this.width_,this.height_);
+this.labelsDiv_.innerHTML="";
+};
+DateGraph.zeropad=function(x){
+if(x<10){
+return "0"+x;
+}else{
+return ""+x;
+}
+};
+DateGraph.prototype.hmsString_=function(date){
+var _118=DateGraph.zeropad;
+var d=new Date(date);
+if(d.getSeconds()){
+return _118(d.getHours())+":"+_118(d.getMinutes())+":"+_118(d.getSeconds());
+}else{
+if(d.getMinutes()){
+return _118(d.getHours())+":"+_118(d.getMinutes());
+}else{
+return _118(d.getHours());
+}
+}
+};
+DateGraph.prototype.dateString_=function(date){
+var _120=DateGraph.zeropad;
+var d=new Date(date);
+var year=""+d.getFullYear();
+var _122=_120(d.getMonth()+1);
+var day=_120(d.getDate());
+var ret="";
+var frac=d.getHours()*3600+d.getMinutes()*60+d.getSeconds();
+if(frac){
+ret=" "+this.hmsString_(date);
+}
+return year+"/"+_122+"/"+day+ret;
+};
+DateGraph.prototype.round_=function(num,_126){
+var _127=Math.pow(10,_126);
+return Math.round(num*_127)/_127;
+};
+DateGraph.prototype.loadedEvent_=function(data){
+this.rawData_=this.parseCSV_(data);
+this.drawGraph_(this.rawData_);
+};
+DateGraph.prototype.months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
+DateGraph.prototype.quarters=["Jan","Apr","Jul","Oct"];
+DateGraph.prototype.addXTicks_=function(){
+var _129,endDate;
+if(this.dateWindow_){
+_129=this.dateWindow_[0];
+endDate=this.dateWindow_[1];
+}else{
+_129=this.rawData_[0][0];
+endDate=this.rawData_[this.rawData_.length-1][0];
+}
+var _130=this.xTicker_(_129,endDate);
+this.layout_.updateOptions({xTicks:_130});
+};
+DateGraph.SECONDLY=0;
+DateGraph.TEN_SECONDLY=1;
+DateGraph.THIRTY_SECONDLY=2;
+DateGraph.MINUTELY=3;
+DateGraph.TEN_MINUTELY=4;
+DateGraph.THIRTY_MINUTELY=5;
+DateGraph.HOURLY=6;
+DateGraph.SIX_HOURLY=7;
+DateGraph.DAILY=8;
+DateGraph.WEEKLY=9;
+DateGraph.MONTHLY=10;
+DateGraph.QUARTERLY=11;
+DateGraph.BIANNUAL=12;
+DateGraph.ANNUAL=13;
+DateGraph.DECADAL=14;
+DateGraph.NUM_GRANULARITIES=15;
+DateGraph.SHORT_SPACINGS=[];
+DateGraph.SHORT_SPACINGS[DateGraph.SECONDLY]=1000*1;
+DateGraph.SHORT_SPACINGS[DateGraph.TEN_SECONDLY]=1000*10;
+DateGraph.SHORT_SPACINGS[DateGraph.THIRTY_SECONDLY]=1000*30;
+DateGraph.SHORT_SPACINGS[DateGraph.MINUTELY]=1000*60;
+DateGraph.SHORT_SPACINGS[DateGraph.TEN_MINUTELY]=1000*60*10;
+DateGraph.SHORT_SPACINGS[DateGraph.THIRTY_MINUTELY]=1000*60*30;
+DateGraph.SHORT_SPACINGS[DateGraph.HOURLY]=1000*3600;
+DateGraph.SHORT_SPACINGS[DateGraph.HOURLY]=1000*3600*6;
+DateGraph.SHORT_SPACINGS[DateGraph.DAILY]=1000*86400;
+DateGraph.SHORT_SPACINGS[DateGraph.WEEKLY]=1000*604800;
+DateGraph.prototype.NumXTicks=function(_131,_132,_133){
+if(_133<DateGraph.MONTHLY){
+var _134=DateGraph.SHORT_SPACINGS[_133];
+return Math.floor(0.5+1*(_132-_131)/_134);
+}else{
+var _135=1;
+var _136=12;
+if(_133==DateGraph.QUARTERLY){
+_136=3;
+}
+if(_133==DateGraph.BIANNUAL){
+_136=2;
+}
+if(_133==DateGraph.ANNUAL){
+_136=1;
+}
+if(_133==DateGraph.DECADAL){
+_136=1;
+_135=10;
+}
+var _137=365.2524*24*3600*1000;
+var _138=1*(_132-_131)/_137;
+return Math.floor(0.5+1*_138*_136/_135);
+}
+};
+DateGraph.prototype.GetXAxis=function(_139,_140,_141){
+var _142=[];
+if(_141<DateGraph.MONTHLY){
+var _143=DateGraph.SHORT_SPACINGS[_141];
+var _144="%d%b";
+if(_141<DateGraph.HOURLY){
+_139=_143*Math.floor(0.5+_139/_143);
+}
+for(var t=_139;t<=_140;t+=_143){
+var d=new Date(t);
+var frac=d.getHours()*3600+d.getMinutes()*60+d.getSeconds();
+if(frac==0||_141>=DateGraph.DAILY){
+_142.push({v:t,label:new Date(t+3600*1000).strftime(_144)});
+}else{
+_142.push({v:t,label:this.hmsString_(t)});
+}
+}
+}else{
+var _146;
+var _147=1;
+if(_141==DateGraph.MONTHLY){
+_146=[0,1,2,3,4,5,6,7,8,9,10,11,12];
+}else{
+if(_141==DateGraph.QUARTERLY){
+_146=[0,3,6,9];
+}else{
+if(_141==DateGraph.BIANNUAL){
+_146=[0,6];
+}else{
+if(_141==DateGraph.ANNUAL){
+_146=[0];
+}else{
+if(_141==DateGraph.DECADAL){
+_146=[0];
+_147=10;
+}
+}
+}
+}
+}
+var _148=new Date(_139).getFullYear();
+var _149=new Date(_140).getFullYear();
+var _150=DateGraph.zeropad;
+for(var i=_148;i<=_149;i++){
+if(i%_147!=0){
+continue;
+}
+for(var j=0;j<_146.length;j++){
+var _151=i+"/"+_150(1+_146[j])+"/01";
+var t=Date.parse(_151);
+if(t<_139||t>_140){
+continue;
+}
+_142.push({v:t,label:new Date(t).strftime("%b %y")});
+}
+}
+}
+return _142;