//>>built define("dojox/charting/Chart",["dojo/_base/lang","dojo/_base/array","dojo/_base/declare","dojo/_base/html","dojo/dom","dojo/dom-geometry","dojo/dom-construct","dojo/_base/Color","dojo/_base/sniff","./Element","./Theme","./Series","./axis2d/common","dojox/gfx","dojox/lang/functional","dojox/lang/functional/fold","dojox/lang/functional/reversed"],function(_1,_2,_3,_4,_5,_6,_7,_8,_9,_a,_b,_c,_d,g,_e,_f,_10){ var dc=dojox.charting,_11=_e.lambda("item.clear()"),_12=_e.lambda("item.purgeGroup()"),_13=_e.lambda("item.destroy()"),_14=_e.lambda("item.dirty = false"),_15=_e.lambda("item.dirty = true"),_16=_e.lambda("item.name"); _3("dojox.charting.Chart",null,{constructor:function(_17,_18){ if(!_18){ _18={}; } this.margins=_18.margins?_18.margins:{l:10,t:10,r:10,b:10}; this.stroke=_18.stroke; this.fill=_18.fill; this.delayInMs=_18.delayInMs||200; this.title=_18.title; this.titleGap=_18.titleGap; this.titlePos=_18.titlePos; this.titleFont=_18.titleFont; this.titleFontColor=_18.titleFontColor; this.chartTitle=null; this.theme=null; this.axes={}; this.stack=[]; this.plots={}; this.series=[]; this.runs={}; this.dirty=true; this.coords=null; this.node=_5.byId(_17); var box=_6.getMarginBox(_17); this.surface=g.createSurface(this.node,box.w||400,box.h||300); },destroy:function(){ _2.forEach(this.series,_13); _2.forEach(this.stack,_13); _e.forIn(this.axes,_13); if(this.chartTitle&&this.chartTitle.tagName){ _7.destroy(this.chartTitle); } this.surface.destroy(); },getCoords:function(){ return _4.coords(this.node,true); },setTheme:function(_19){ this.theme=_19.clone(); this.dirty=true; return this; },addAxis:function(_1a,_1b){ var _1c,_1d=_1b&&_1b.type||"Default"; if(typeof _1d=="string"){ if(!dc.axis2d||!dc.axis2d[_1d]){ throw Error("Can't find axis: "+_1d+" - Check "+"require() dependencies."); } _1c=new dc.axis2d[_1d](this,_1b); }else{ _1c=new _1d(this,_1b); } _1c.name=_1a; _1c.dirty=true; if(_1a in this.axes){ this.axes[_1a].destroy(); } this.axes[_1a]=_1c; this.dirty=true; return this; },getAxis:function(_1e){ return this.axes[_1e]; },removeAxis:function(_1f){ if(_1f in this.axes){ this.axes[_1f].destroy(); delete this.axes[_1f]; this.dirty=true; } return this; },addPlot:function(_20,_21){ var _22,_23=_21&&_21.type||"Default"; if(typeof _23=="string"){ if(!dc.plot2d||!dc.plot2d[_23]){ throw Error("Can't find plot: "+_23+" - didn't you forget to dojo"+".require() it?"); } _22=new dc.plot2d[_23](this,_21); }else{ _22=new _23(this,_21); } _22.name=_20; _22.dirty=true; if(_20 in this.plots){ this.stack[this.plots[_20]].destroy(); this.stack[this.plots[_20]]=_22; }else{ this.plots[_20]=this.stack.length; this.stack.push(_22); } this.dirty=true; return this; },getPlot:function(_24){ return this.stack[this.plots[_24]]; },removePlot:function(_25){ if(_25 in this.plots){ var _26=this.plots[_25]; delete this.plots[_25]; this.stack[_26].destroy(); this.stack.splice(_26,1); _e.forIn(this.plots,function(idx,_27,_28){ if(idx>_26){ _28[_27]=idx-1; } }); var ns=_2.filter(this.series,function(run){ return run.plot!=_25; }); if(ns.length_3e){ _40[_3f]=idx-1; } }); this.dirty=true; } return this; },updateSeries:function(_41,_42){ if(_41 in this.runs){ var run=this.series[this.runs[_41]]; run.update(_42); this._invalidateDependentPlots(run.plot,false); this._invalidateDependentPlots(run.plot,true); } return this; },getSeriesOrder:function(_43){ return _e.map(_e.filter(this.series,function(run){ return run.plot==_43; }),_16); },setSeriesOrder:function(_44){ var _45,_46={},_47=_e.filter(_44,function(_48){ if(!(_48 in this.runs)||(_48 in _46)){ return false; } var run=this.series[this.runs[_48]]; if(_45){ if(run.plot!=_45){ return false; } }else{ _45=run.plot; } _46[_48]=1; return true; },this); _e.forEach(this.series,function(run){ var _49=run.name; if(!(_49 in _46)&&run.plot==_45){ _47.push(_49); } }); var _4a=_e.map(_47,function(_4b){ return this.series[this.runs[_4b]]; },this); this.series=_4a.concat(_e.filter(this.series,function(run){ return run.plot!=_45; })); _e.forEach(this.series,function(run,i){ this.runs[run.name]=i; },this); this.dirty=true; return this; },moveSeriesToFront:function(_4c){ if(_4c in this.runs){ var _4d=this.runs[_4c],_4e=this.getSeriesOrder(this.series[_4d].plot); if(_4c!=_4e[0]){ _4e.splice(_4d,1); _4e.unshift(_4c); return this.setSeriesOrder(_4e); } } return this; },moveSeriesToBack:function(_4f){ if(_4f in this.runs){ var _50=this.runs[_4f],_51=this.getSeriesOrder(this.series[_50].plot); if(_4f!=_51[_51.length-1]){ _51.splice(_50,1); _51.push(_4f); return this.setSeriesOrder(_51); } } return this; },resize:function(_52,_53){ var box; switch(arguments.length){ case 1: box=_1.mixin({},_52); _6.setMarginBox(this.node,box); break; case 2: box={w:_52,h:_53}; _6.setMarginBox(this.node,box); break; } box=_6.getMarginBox(this.node); var d=this.surface.getDimensions(); if(d.width!=box.w||d.height!=box.h){ this.surface.setDimensions(box.w,box.h); this.dirty=true; return this.render(); }else{ return this; } },getGeometry:function(){ var ret={}; _e.forIn(this.axes,function(_54){ if(_54.initialized()){ ret[_54.name]={name:_54.name,vertical:_54.vertical,scaler:_54.scaler,ticks:_54.ticks}; } }); return ret; },setAxisWindow:function(_55,_56,_57,_58){ var _59=this.axes[_55]; if(_59){ _59.setWindow(_56,_57); _2.forEach(this.stack,function(_5a){ if(_5a.hAxis==_55||_5a.vAxis==_55){ _5a.zoom=_58; } }); } return this; },setWindow:function(sx,sy,dx,dy,_5b){ if(!("plotArea" in this)){ this.calculateGeometry(); } _e.forIn(this.axes,function(_5c){ var _5d,_5e,_5f=_5c.getScaler().bounds,s=_5f.span/(_5f.upper-_5f.lower); if(_5c.vertical){ _5d=sy; _5e=dy/s/_5d; }else{ _5d=sx; _5e=dx/s/_5d; } _5c.setWindow(_5d,_5e); }); _2.forEach(this.stack,function(_60){ _60.zoom=_5b; }); return this; },zoomIn:function(_61,_62){ var _63=this.axes[_61]; if(_63){ var _64,_65,_66=_63.getScaler().bounds; var _67=Math.min(_62[0],_62[1]); var _68=Math.max(_62[0],_62[1]); _67=_62[0]<_66.lower?_66.lower:_67; _68=_62[1]>_66.upper?_66.upper:_68; _64=(_66.upper-_66.lower)/(_68-_67); _65=_67-_66.lower; this.setAxisWindow(_61,_64,_65); this.render(); } },calculateGeometry:function(){ if(this.dirty){ return this.fullGeometry(); } var _69=_2.filter(this.stack,function(_6a){ return _6a.dirty||(_6a.hAxis&&this.axes[_6a.hAxis].dirty)||(_6a.vAxis&&this.axes[_6a.vAxis].dirty); },this); _6b(_69,this.plotArea); return this; },fullGeometry:function(){ this._makeDirty(); _2.forEach(this.stack,_11); if(!this.theme){ this.setTheme(new _b(dojox.charting._def)); } _2.forEach(this.series,function(run){ if(!(run.plot in this.plots)){ if(!dc.plot2d||!dc.plot2d.Default){ throw Error("Can't find plot: Default - didn't you forget to dojo"+".require() it?"); } var _6c=new dc.plot2d.Default(this,{}); _6c.name=run.plot; this.plots[run.plot]=this.stack.length; this.stack.push(_6c); } this.stack[this.plots[run.plot]].addSeries(run); },this); _2.forEach(this.stack,function(_6d){ if(_6d.hAxis){ _6d.setAxis(this.axes[_6d.hAxis]); } if(_6d.vAxis){ _6d.setAxis(this.axes[_6d.vAxis]); } },this); var dim=this.dim=this.surface.getDimensions(); dim.width=g.normalizedLength(dim.width); dim.height=g.normalizedLength(dim.height); _e.forIn(this.axes,_11); _6b(this.stack,dim); var _6e=this.offsets={l:0,r:0,t:0,b:0}; _e.forIn(this.axes,function(_6f){ _e.forIn(_6f.getOffsets(),function(o,i){ _6e[i]+=o; }); }); if(this.title){ this.titleGap=(this.titleGap==0)?0:this.titleGap||this.theme.chart.titleGap||20; this.titlePos=this.titlePos||this.theme.chart.titlePos||"top"; this.titleFont=this.titleFont||this.theme.chart.titleFont; this.titleFontColor=this.titleFontColor||this.theme.chart.titleFontColor||"black"; var _70=g.normalizedLength(g.splitFontString(this.titleFont).size); _6e[this.titlePos=="top"?"t":"b"]+=(_70+this.titleGap); } _e.forIn(this.margins,function(o,i){ _6e[i]+=o; }); this.plotArea={width:dim.width-_6e.l-_6e.r,height:dim.height-_6e.t-_6e.b}; _e.forIn(this.axes,_11); _6b(this.stack,this.plotArea); return this; },render:function(){ if(this.theme){ this.theme.clear(); } if(this.dirty){ return this.fullRender(); } this.calculateGeometry(); _e.forEachRev(this.stack,function(_71){ _71.render(this.dim,this.offsets); },this); _e.forIn(this.axes,function(_72){ _72.render(this.dim,this.offsets); },this); this._makeClean(); if(this.surface.render){ this.surface.render(); } return this; },fullRender:function(){ this.fullGeometry(); var _73=this.offsets,dim=this.dim,_74; _2.forEach(this.series,_12); _e.forIn(this.axes,_12); _2.forEach(this.stack,_12); if(this.chartTitle&&this.chartTitle.tagName){ _7.destroy(this.chartTitle); } this.surface.clear(); this.chartTitle=null; var t=this.theme,_75=t.plotarea&&t.plotarea.fill,_76=t.plotarea&&t.plotarea.stroke,w=Math.max(0,dim.width-_73.l-_73.r),h=Math.max(0,dim.height-_73.t-_73.b),_74={x:_73.l-1,y:_73.t-1,width:w+2,height:h+2}; if(_75){ _75=_a.prototype._shapeFill(_a.prototype._plotFill(_75,dim,_73),_74); this.surface.createRect(_74).setFill(_75); } if(_76){ this.surface.createRect({x:_73.l,y:_73.t,width:w+1,height:h+1}).setStroke(_76); } _e.foldr(this.stack,function(z,_77){ return _77.render(dim,_73),0; },0); _75=this.fill!==undefined?this.fill:(t.chart&&t.chart.fill); _76=this.stroke!==undefined?this.stroke:(t.chart&&t.chart.stroke); if(_75=="inherit"){ var _78=this.node,_75=new _8(_4.style(_78,"backgroundColor")); while(_75.a==0&&_78!=document.documentElement){ _75=new _8(_4.style(_78,"backgroundColor")); _78=_78.parentNode; } } if(_75){ _75=_a.prototype._plotFill(_75,dim,_73); if(_73.l){ _74={width:_73.l,height:dim.height+1}; this.surface.createRect(_74).setFill(_a.prototype._shapeFill(_75,_74)); } if(_73.r){ _74={x:dim.width-_73.r,width:_73.r+1,height:dim.height+2}; this.surface.createRect(_74).setFill(_a.prototype._shapeFill(_75,_74)); } if(_73.t){ _74={width:dim.width+1,height:_73.t}; this.surface.createRect(_74).setFill(_a.prototype._shapeFill(_75,_74)); } if(_73.b){ _74={y:dim.height-_73.b,width:dim.width+1,height:_73.b+2}; this.surface.createRect(_74).setFill(_a.prototype._shapeFill(_75,_74)); } } if(_76){ this.surface.createRect({width:dim.width-1,height:dim.height-1}).setStroke(_76); } if(this.title){ var _79=(g.renderer=="canvas"),_7a=_79||!_9("ie")&&!_9("opera")?"html":"gfx",_7b=g.normalizedLength(g.splitFontString(this.titleFont).size); this.chartTitle=_d.createText[_7a](this,this.surface,dim.width/2,this.titlePos=="top"?_7b+this.margins.t:dim.height-this.margins.b,"middle",this.title,this.titleFont,this.titleFontColor); } _e.forIn(this.axes,function(_7c){ _7c.render(dim,_73); }); this._makeClean(); if(this.surface.render){ this.surface.render(); } return this; },delayedRender:function(){ if(!this._delayedRenderHandle){ this._delayedRenderHandle=setTimeout(_1.hitch(this,function(){ clearTimeout(this._delayedRenderHandle); this._delayedRenderHandle=null; this.render(); }),this.delayInMs); } return this; },connectToPlot:function(_7d,_7e,_7f){ return _7d in this.plots?this.stack[this.plots[_7d]].connect(_7e,_7f):null; },fireEvent:function(_80,_81,_82){ if(_80 in this.runs){ var _83=this.series[this.runs[_80]].plot; if(_83 in this.plots){ var _84=this.stack[this.plots[_83]]; if(_84){ _84.fireEvent(_80,_81,_82); } } } return this; },_makeClean:function(){ _2.forEach(this.axes,_14); _2.forEach(this.stack,_14); _2.forEach(this.series,_14); this.dirty=false; },_makeDirty:function(){ _2.forEach(this.axes,_15); _2.forEach(this.stack,_15); _2.forEach(this.series,_15); this.dirty=true; },_invalidateDependentPlots:function(_85,_86){ if(_85 in this.plots){ var _87=this.stack[this.plots[_85]],_88,_89=_86?"vAxis":"hAxis"; if(_87[_89]){ _88=this.axes[_87[_89]]; if(_88&&_88.dependOnData()){ _88.dirty=true; _2.forEach(this.stack,function(p){ if(p[_89]&&p[_89]==_87[_89]){ p.dirty=true; } }); } }else{ _87.dirty=true; } } }}); function _8a(_8b){ return {min:_8b.hmin,max:_8b.hmax}; }; function _8c(_8d){ return {min:_8d.vmin,max:_8d.vmax}; }; function _8e(_8f,h){ _8f.hmin=h.min; _8f.hmax=h.max; }; function _90(_91,v){ _91.vmin=v.min; _91.vmax=v.max; }; function _92(_93,_94){ if(_93&&_94){ _93.min=Math.min(_93.min,_94.min); _93.max=Math.max(_93.max,_94.max); } return _93||_94; }; function _6b(_95,_96){ var _97={},_98={}; _2.forEach(_95,function(_99){ var _9a=_97[_99.name]=_99.getSeriesStats(); if(_99.hAxis){ _98[_99.hAxis]=_92(_98[_99.hAxis],_8a(_9a)); } if(_99.vAxis){ _98[_99.vAxis]=_92(_98[_99.vAxis],_8c(_9a)); } }); _2.forEach(_95,function(_9b){ var _9c=_97[_9b.name]; if(_9b.hAxis){ _8e(_9c,_98[_9b.hAxis]); } if(_9b.vAxis){ _90(_9c,_98[_9b.vAxis]); } _9b.initializeScalers(_96,_9c); }); }; return dojox.charting.Chart; });