| 7 (function($){$.color={};$.color.make=function(r,g,b,a){var o={};o.r=r||0;o.g=g||
0;o.b=b||0;o.a=a!=null?a:1;o.add=function(c,d){for(var i=0;i<c.length;++i)o[c.ch
arAt(i)]+=d;return o.normalize()};o.scale=function(c,f){for(var i=0;i<c.length;+
+i)o[c.charAt(i)]*=f;return o.normalize()};o.toString=function(){if(o.a>=1){retu
rn"rgb("+[o.r,o.g,o.b].join(",")+")"}else{return"rgba("+[o.r,o.g,o.b,o.a].join("
,")+")"}};o.normalize=function(){function clamp(min,value,max){return value<min?
min:value>max?max:value}o.r=clamp(0,parseInt(o.r),255);o.g=clamp(0,parseInt(o.g)
,255);o.b=clamp(0,parseInt(o.b),255);o.a=clamp(0,o.a,1);return o};o.clone=functi
on(){return $.color.make(o.r,o.b,o.g,o.a)};return o.normalize()};$.color.extract
=function(elem,css){var c;do{c=elem.css(css).toLowerCase();if(c!=""&&c!="transpa
rent")break;elem=elem.parent()}while(elem.length&&!$.nodeName(elem.get(0),"body"
));if(c=="rgba(0, 0, 0, 0)")c="transparent";return $.color.parse(c)};$.color.par
se=function(str){var res,m=$.color.make;if(res=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9
]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt
(res[2],10),parseInt(res[3],10));if(res=/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(str))return m(parseI
nt(res[1],10),parseInt(res[2],10),parseInt(res[3],10),parseFloat(res[4]));if(res
=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:
\.[0-9]+)?)\%\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2]
)*2.55,parseFloat(res[3])*2.55);if(res=/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(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseF
loat(res[3])*2.55,parseFloat(res[4]));if(res=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})(
[a-fA-F0-9]{2})/.exec(str))return m(parseInt(res[1],16),parseInt(res[2],16),pars
eInt(res[3],16));if(res=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))ret
urn m(parseInt(res[1]+res[1],16),parseInt(res[2]+res[2],16),parseInt(res[3]+res[
3],16));var name=$.trim(str).toLowerCase();if(name=="transparent")return m(255,2
55,255,0);else{res=lookupColors[name]||[0,0,0];return m(res[0],res[1],res[2])}};
var 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],da
rkcyan:[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:[1
48,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,2
55,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:[12
8,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,
0]}})(jQuery);(function($){var hasOwnProperty=Object.prototype.hasOwnProperty;if
(!$.fn.detach){$.fn.detach=function(){return this.each(function(){if(this.parent
Node){this.parentNode.removeChild(this)}})}}function Canvas(cls,container){var e
lement=container.children("."+cls)[0];if(element==null){element=document.createE
lement("canvas");element.className=cls;$(element).css({direction:"ltr",position:
"absolute",left:0,top:0}).appendTo(container);if(!element.getContext){if(window.
G_vmlCanvasManager){element=window.G_vmlCanvasManager.initElement(element)}else{
throw new Error("Canvas is not available. If you're using IE with a fall-back su
ch as Excanvas, then there's either a mistake in your conditional include, or th
e page has no DOCTYPE and is rendering in Quirks Mode.")}}}this.element=element;
var context=this.context=element.getContext("2d");var devicePixelRatio=window.de
vicePixelRatio||1,backingStoreRatio=context.webkitBackingStorePixelRatio||contex
t.mozBackingStorePixelRatio||context.msBackingStorePixelRatio||context.oBackingS
torePixelRatio||context.backingStorePixelRatio||1;this.pixelRatio=devicePixelRat
io/backingStoreRatio;this.resize(container.width(),container.height());this.text
Container=null;this.text={};this._textCache={}}Canvas.prototype.resize=function(
width,height){if(width<=0||height<=0){throw new Error("Invalid dimensions for pl
ot, width = "+width+", height = "+height)}var element=this.element,context=this.
context,pixelRatio=this.pixelRatio;if(this.width!=width){element.width=width*pix
elRatio;element.style.width=width+"px";this.width=width}if(this.height!=height){
element.height=height*pixelRatio;element.style.height=height+"px";this.height=he
ight}context.restore();context.save();context.scale(pixelRatio,pixelRatio)};Canv
as.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)
};Canvas.prototype.render=function(){var cache=this._textCache;for(var layerKey
in cache){if(hasOwnProperty.call(cache,layerKey)){var layer=this.getTextLayer(la
yerKey),layerCache=cache[layerKey];layer.hide();for(var styleKey in layerCache){
if(hasOwnProperty.call(layerCache,styleKey)){var styleCache=layerCache[styleKey]
;for(var key in styleCache){if(hasOwnProperty.call(styleCache,key)){var position
s=styleCache[key].positions;for(var i=0,position;position=positions[i];i++){if(p
osition.active){if(!position.rendered){layer.append(position.element);position.r
endered=true}}else{positions.splice(i--,1);if(position.rendered){position.elemen
t.detach()}}}if(positions.length==0){delete styleCache[key]}}}}}layer.show()}}};
Canvas.prototype.getTextLayer=function(classes){var layer=this.text[classes];if(
layer==null){if(this.textContainer==null){this.textContainer=$("<div class='flot
-text'></div>").css({position:"absolute",top:0,left:0,bottom:0,right:0,"font-siz
e":"smaller",color:"#545454"}).insertAfter(this.element)}layer=this.text[classes
]=$("<div></div>").addClass(classes).css({position:"absolute",top:0,left:0,botto
m:0,right:0}).appendTo(this.textContainer)}return layer};Canvas.prototype.getTex
tInfo=function(layer,text,font,angle,width){var textStyle,layerCache,styleCache,
info;text=""+text;if(typeof font==="object"){textStyle=font.style+" "+font.varia
nt+" "+font.weight+" "+font.size+"px/"+font.lineHeight+"px "+font.family}else{te
xtStyle=font}layerCache=this._textCache[layer];if(layerCache==null){layerCache=t
his._textCache[layer]={}}styleCache=layerCache[textStyle];if(styleCache==null){s
tyleCache=layerCache[textStyle]={}}info=styleCache[text];if(info==null){var elem
ent=$("<div></div>").html(text).css({position:"absolute","max-width":width,top:-
9999}).appendTo(this.getTextLayer(layer));if(typeof font==="object"){element.css
({font:textStyle,color:font.color})}else if(typeof font==="string"){element.addC
lass(font)}info=styleCache[text]={width:element.outerWidth(true),height:element.
outerHeight(true),element:element,positions:[]};element.detach()}return info};Ca
nvas.prototype.addText=function(layer,x,y,text,font,angle,width,halign,valign){v
ar info=this.getTextInfo(layer,text,font,angle,width),positions=info.positions;i
f(halign=="center"){x-=info.width/2}else if(halign=="right"){x-=info.width}if(va
lign=="middle"){y-=info.height/2}else if(valign=="bottom"){y-=info.height}for(va
r i=0,position;position=positions[i];i++){if(position.x==x&&position.y==y){posit
ion.active=true;return}}position={active:true,rendered:false,element:positions.l
ength?info.element.clone():info.element,x:x,y:y};positions.push(position);positi
on.element.css({top:Math.round(y),left:Math.round(x),"text-align":halign})};Canv
as.prototype.removeText=function(layer,x,y,text,font,angle){if(text==null){var l
ayerCache=this._textCache[layer];if(layerCache!=null){for(var styleKey in layerC
ache){if(hasOwnProperty.call(layerCache,styleKey)){var styleCache=layerCache[sty
leKey];for(var key in styleCache){if(hasOwnProperty.call(styleCache,key)){var po
sitions=styleCache[key].positions;for(var i=0,position;position=positions[i];i++
){position.active=false}}}}}}}else{var positions=this.getTextInfo(layer,text,fon
t,angle).positions;for(var i=0,position;position=positions[i];i++){if(position.x
==x&&position.y==y){position.active=false}}}};function Plot(placeholder,data_,op
tions_,plugins){var series=[],options={colors:["#edc240","#afd8f8","#cb4b4b","#4
da74d","#9440ed"],legend:{show:true,noColumns:1,labelFormatter:null,labelBoxBord
erColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgr
oundOpacity:.85,sorted:null},xaxis:{show:null,position:"bottom",mode:null,font:n
ull,color:null,tickColor:null,transform:null,inverseTransform:null,min:null,max:
null,autoscaleMargin:null,ticks:null,tickFormatter:null,labelWidth:null,labelHei
ght:null,reserveSpace:null,tickLength:null,alignTicksWithAxis:null,tickDecimals:
null,tickSize:null,minTickSize:null},yaxis:{autoscaleMargin:.02,position:"left"}
,xaxes:[],yaxes:[],series:{points:{show:false,radius:3,lineWidth:2,fill:true,fil
lColor:"#ffffff",symbol:"circle"},lines:{lineWidth:2,fill:false,fillColor:null,s
teps:false},bars:{show:false,lineWidth:2,barWidth:1,fill:true,fillColor:null,ali
gn:"left",horizontal:false,zero:true},shadowSize:3,highlightColor:null},grid:{sh
ow:true,aboveData:false,color:"#545454",backgroundColor:null,borderColor:null,ti
ckColor:null,margin:0,labelMargin:5,axisMargin:8,borderWidth:2,minBorderMargin:n
ull,markings:null,markingsColor:"#f4f4f4",markingsLineWidth:2,clickable:false,ho
verable:false,autoHighlight:true,mouseActiveRadius:10},interaction:{redrawOverla
yInterval:1e3/60},hooks:{}},surface=null,overlay=null,eventHolder=null,ctx=null,
octx=null,xaxes=[],yaxes=[],plotOffset={left:0,right:0,top:0,bottom:0},plotWidth
=0,plotHeight=0,hooks={processOptions:[],processRawData:[],processDatapoints:[],
processOffset:[],drawBackground:[],drawSeries:[],draw:[],bindEvents:[],drawOverl
ay:[],shutdown:[]},plot=this;plot.setData=setData;plot.setupGrid=setupGrid;plot.
draw=draw;plot.getPlaceholder=function(){return placeholder};plot.getCanvas=func
tion(){return surface.element};plot.getPlotOffset=function(){return plotOffset};
plot.width=function(){return plotWidth};plot.height=function(){return plotHeight
};plot.offset=function(){var o=eventHolder.offset();o.left+=plotOffset.left;o.to
p+=plotOffset.top;return o};plot.getData=function(){return series};plot.getAxes=
function(){var res={},i;$.each(xaxes.concat(yaxes),function(_,axis){if(axis)res[
axis.direction+(axis.n!=1?axis.n:"")+"axis"]=axis});return res};plot.getXAxes=fu
nction(){return xaxes};plot.getYAxes=function(){return yaxes};plot.c2p=canvasToA
xisCoords;plot.p2c=axisToCanvasCoords;plot.getOptions=function(){return options}
;plot.highlight=highlight;plot.unhighlight=unhighlight;plot.triggerRedrawOverlay
=triggerRedrawOverlay;plot.pointOffset=function(point){return{left:parseInt(xaxe
s[axisNumber(point,"x")-1].p2c(+point.x)+plotOffset.left,10),top:parseInt(yaxes[
axisNumber(point,"y")-1].p2c(+point.y)+plotOffset.top,10)}};plot.shutdown=shutdo
wn;plot.destroy=function(){shutdown();placeholder.removeData("plot").empty();ser
ies=[];options=null;surface=null;overlay=null;eventHolder=null;ctx=null;octx=nul
l;xaxes=[];yaxes=[];hooks=null;highlights=[];plot=null};plot.resize=function(){v
ar width=placeholder.width(),height=placeholder.height();surface.resize(width,he
ight);overlay.resize(width,height)};plot.hooks=hooks;initPlugins(plot);parseOpti
ons(options_);setupCanvases();setData(data_);setupGrid();draw();bindEvents();fun
ction executeHooks(hook,args){args=[plot].concat(args);for(var i=0;i<hook.length
;++i)hook[i].apply(this,args)}function initPlugins(){var classes={Canvas:Canvas}
;for(var i=0;i<plugins.length;++i){var p=plugins[i];p.init(plot,classes);if(p.op
tions)$.extend(true,options,p.options)}}function parseOptions(opts){$.extend(tru
e,options,opts);if(opts&&opts.colors){options.colors=opts.colors}if(options.xaxi
s.color==null)options.xaxis.color=$.color.parse(options.grid.color).scale("a",.2
2).toString();if(options.yaxis.color==null)options.yaxis.color=$.color.parse(opt
ions.grid.color).scale("a",.22).toString();if(options.xaxis.tickColor==null)opti
ons.xaxis.tickColor=options.grid.tickColor||options.xaxis.color;if(options.yaxis
.tickColor==null)options.yaxis.tickColor=options.grid.tickColor||options.yaxis.c
olor;if(options.grid.borderColor==null)options.grid.borderColor=options.grid.col
or;if(options.grid.tickColor==null)options.grid.tickColor=$.color.parse(options.
grid.color).scale("a",.22).toString();var i,axisOptions,axisCount,fontSize=place
holder.css("font-size"),fontSizeDefault=fontSize?+fontSize.replace("px",""):13,f
ontDefaults={style:placeholder.css("font-style"),size:Math.round(.8*fontSizeDefa
ult),variant:placeholder.css("font-variant"),weight:placeholder.css("font-weight
"),family:placeholder.css("font-family")};axisCount=options.xaxes.length||1;for(
i=0;i<axisCount;++i){axisOptions=options.xaxes[i];if(axisOptions&&!axisOptions.t
ickColor){axisOptions.tickColor=axisOptions.color}axisOptions=$.extend(true,{},o
ptions.xaxis,axisOptions);options.xaxes[i]=axisOptions;if(axisOptions.font){axis
Options.font=$.extend({},fontDefaults,axisOptions.font);if(!axisOptions.font.col
or){axisOptions.font.color=axisOptions.color}if(!axisOptions.font.lineHeight){ax
isOptions.font.lineHeight=Math.round(axisOptions.font.size*1.15)}}}axisCount=opt
ions.yaxes.length||1;for(i=0;i<axisCount;++i){axisOptions=options.yaxes[i];if(ax
isOptions&&!axisOptions.tickColor){axisOptions.tickColor=axisOptions.color}axisO
ptions=$.extend(true,{},options.yaxis,axisOptions);options.yaxes[i]=axisOptions;
if(axisOptions.font){axisOptions.font=$.extend({},fontDefaults,axisOptions.font)
;if(!axisOptions.font.color){axisOptions.font.color=axisOptions.color}if(!axisOp
tions.font.lineHeight){axisOptions.font.lineHeight=Math.round(axisOptions.font.s
ize*1.15)}}}if(options.xaxis.noTicks&&options.xaxis.ticks==null)options.xaxis.ti
cks=options.xaxis.noTicks;if(options.yaxis.noTicks&&options.yaxis.ticks==null)op
tions.yaxis.ticks=options.yaxis.noTicks;if(options.x2axis){options.xaxes[1]=$.ex
tend(true,{},options.xaxis,options.x2axis);options.xaxes[1].position="top";if(op
tions.x2axis.min==null){options.xaxes[1].min=null}if(options.x2axis.max==null){o
ptions.xaxes[1].max=null}}if(options.y2axis){options.yaxes[1]=$.extend(true,{},o
ptions.yaxis,options.y2axis);options.yaxes[1].position="right";if(options.y2axis
.min==null){options.yaxes[1].min=null}if(options.y2axis.max==null){options.yaxes
[1].max=null}}if(options.grid.coloredAreas)options.grid.markings=options.grid.co
loredAreas;if(options.grid.coloredAreasColor)options.grid.markingsColor=options.
grid.coloredAreasColor;if(options.lines)$.extend(true,options.series.lines,optio
ns.lines);if(options.points)$.extend(true,options.series.points,options.points);
if(options.bars)$.extend(true,options.series.bars,options.bars);if(options.shado
wSize!=null)options.series.shadowSize=options.shadowSize;if(options.highlightCol
or!=null)options.series.highlightColor=options.highlightColor;for(i=0;i<options.
xaxes.length;++i)getOrCreateAxis(xaxes,i+1).options=options.xaxes[i];for(i=0;i<o
ptions.yaxes.length;++i)getOrCreateAxis(yaxes,i+1).options=options.yaxes[i];for(
var n in hooks)if(options.hooks[n]&&options.hooks[n].length)hooks[n]=hooks[n].co
ncat(options.hooks[n]);executeHooks(hooks.processOptions,[options])}function set
Data(d){series=parseData(d);fillInSeriesOptions();processData()}function parseDa
ta(d){var res=[];for(var i=0;i<d.length;++i){var s=$.extend(true,{},options.seri
es);if(d[i].data!=null){s.data=d[i].data;delete d[i].data;$.extend(true,s,d[i]);
d[i].data=s.data}else s.data=d[i];res.push(s)}return res}function axisNumber(obj
,coord){var a=obj[coord+"axis"];if(typeof a=="object")a=a.n;if(typeof a!="number
")a=1;return a}function allAxes(){return $.grep(xaxes.concat(yaxes),function(a){
return a})}function canvasToAxisCoords(pos){var res={},i,axis;for(i=0;i<xaxes.le
ngth;++i){axis=xaxes[i];if(axis&&axis.used)res["x"+axis.n]=axis.c2p(pos.left)}fo
r(i=0;i<yaxes.length;++i){axis=yaxes[i];if(axis&&axis.used)res["y"+axis.n]=axis.
c2p(pos.top)}if(res.x1!==undefined)res.x=res.x1;if(res.y1!==undefined)res.y=res.
y1;return res}function axisToCanvasCoords(pos){var res={},i,axis,key;for(i=0;i<x
axes.length;++i){axis=xaxes[i];if(axis&&axis.used){key="x"+axis.n;if(pos[key]==n
ull&&axis.n==1)key="x";if(pos[key]!=null){res.left=axis.p2c(pos[key]);break}}}fo
r(i=0;i<yaxes.length;++i){axis=yaxes[i];if(axis&&axis.used){key="y"+axis.n;if(po
s[key]==null&&axis.n==1)key="y";if(pos[key]!=null){res.top=axis.p2c(pos[key]);br
eak}}}return res}function getOrCreateAxis(axes,number){if(!axes[number-1])axes[n
umber-1]={n:number,direction:axes==xaxes?"x":"y",options:$.extend(true,{},axes==
xaxes?options.xaxis:options.yaxis)};return axes[number-1]}function fillInSeriesO
ptions(){var neededColors=series.length,maxIndex=-1,i;for(i=0;i<series.length;++
i){var sc=series[i].color;if(sc!=null){neededColors--;if(typeof sc=="number"&&sc
>maxIndex){maxIndex=sc}}}if(neededColors<=maxIndex){neededColors=maxIndex+1}var
c,colors=[],colorPool=options.colors,colorPoolSize=colorPool.length,variation=0;
for(i=0;i<neededColors;i++){c=$.color.parse(colorPool[i%colorPoolSize]||"#666");
if(i%colorPoolSize==0&&i){if(variation>=0){if(variation<.5){variation=-variation
-.2}else variation=0}else variation=-variation}colors[i]=c.scale("rgb",1+variati
on)}var colori=0,s;for(i=0;i<series.length;++i){s=series[i];if(s.color==null){s.
color=colors[colori].toString();++colori}else if(typeof s.color=="number")s.colo
r=colors[s.color].toString();if(s.lines.show==null){var v,show=true;for(v in s)i
f(s[v]&&s[v].show){show=false;break}if(show)s.lines.show=true}if(s.lines.zero==n
ull){s.lines.zero=!!s.lines.fill}s.xaxis=getOrCreateAxis(xaxes,axisNumber(s,"x")
);s.yaxis=getOrCreateAxis(yaxes,axisNumber(s,"y"))}}function processData(){var t
opSentry=Number.POSITIVE_INFINITY,bottomSentry=Number.NEGATIVE_INFINITY,fakeInfi
nity=Number.MAX_VALUE,i,j,k,m,length,s,points,ps,x,y,axis,val,f,p,data,format;fu
nction updateAxis(axis,min,max){if(min<axis.datamin&&min!=-fakeInfinity)axis.dat
amin=min;if(max>axis.datamax&&max!=fakeInfinity)axis.datamax=max}$.each(allAxes(
),function(_,axis){axis.datamin=topSentry;axis.datamax=bottomSentry;axis.used=fa
lse});for(i=0;i<series.length;++i){s=series[i];s.datapoints={points:[]};executeH
ooks(hooks.processRawData,[s,s.data,s.datapoints])}for(i=0;i<series.length;++i){
s=series[i];data=s.data;format=s.datapoints.format;if(!format){format=[];format.
push({x:true,number:true,required:true});format.push({y:true,number:true,require
d:true});if(s.bars.show||s.lines.show&&s.lines.fill){var autoscale=!!(s.bars.sho
w&&s.bars.zero||s.lines.show&&s.lines.zero);format.push({y:true,number:true,requ
ired:false,defaultValue:0,autoscale:autoscale});if(s.bars.horizontal){delete for
mat[format.length-1].y;format[format.length-1].x=true}}s.datapoints.format=forma
t}if(s.datapoints.pointsize!=null)continue;s.datapoints.pointsize=format.length;
ps=s.datapoints.pointsize;points=s.datapoints.points;var insertSteps=s.lines.sho
w&&s.lines.steps;s.xaxis.used=s.yaxis.used=true;for(j=k=0;j<data.length;++j,k+=p
s){p=data[j];var nullify=p==null;if(!nullify){for(m=0;m<ps;++m){val=p[m];f=forma
t[m];if(f){if(f.number&&val!=null){val=+val;if(isNaN(val))val=null;else if(val==
Infinity)val=fakeInfinity;else if(val==-Infinity)val=-fakeInfinity}if(val==null)
{if(f.required)nullify=true;if(f.defaultValue!=null)val=f.defaultValue}}points[k
+m]=val}}if(nullify){for(m=0;m<ps;++m){val=points[k+m];if(val!=null){f=format[m]
;if(f.autoscale!==false){if(f.x){updateAxis(s.xaxis,val,val)}if(f.y){updateAxis(
s.yaxis,val,val)}}}points[k+m]=null}}else{if(insertSteps&&k>0&&points[k-ps]!=nul
l&&points[k-ps]!=points[k]&&points[k-ps+1]!=points[k+1]){for(m=0;m<ps;++m)points
[k+ps+m]=points[k+m];points[k+1]=points[k-ps+1];k+=ps}}}}for(i=0;i<series.length
;++i){s=series[i];executeHooks(hooks.processDatapoints,[s,s.datapoints])}for(i=0
;i<series.length;++i){s=series[i];points=s.datapoints.points;ps=s.datapoints.poi
ntsize;format=s.datapoints.format;var xmin=topSentry,ymin=topSentry,xmax=bottomS
entry,ymax=bottomSentry;for(j=0;j<points.length;j+=ps){if(points[j]==null)contin
ue;for(m=0;m<ps;++m){val=points[j+m];f=format[m];if(!f||f.autoscale===false||val
==fakeInfinity||val==-fakeInfinity)continue;if(f.x){if(val<xmin)xmin=val;if(val>
xmax)xmax=val}if(f.y){if(val<ymin)ymin=val;if(val>ymax)ymax=val}}}if(s.bars.show
){var delta;switch(s.bars.align){case"left":delta=0;break;case"right":delta=-s.b
ars.barWidth;break;default:delta=-s.bars.barWidth/2}if(s.bars.horizontal){ymin+=
delta;ymax+=delta+s.bars.barWidth}else{xmin+=delta;xmax+=delta+s.bars.barWidth}}
updateAxis(s.xaxis,xmin,xmax);updateAxis(s.yaxis,ymin,ymax)}$.each(allAxes(),fun
ction(_,axis){if(axis.datamin==topSentry)axis.datamin=null;if(axis.datamax==bott
omSentry)axis.datamax=null})}function setupCanvases(){placeholder.css("padding",
0).children().filter(function(){return!$(this).hasClass("flot-overlay")&&!$(this
).hasClass("flot-base")}).remove();if(placeholder.css("position")=="static")plac
eholder.css("position","relative");surface=new Canvas("flot-base",placeholder);o
verlay=new Canvas("flot-overlay",placeholder);ctx=surface.context;octx=overlay.c
ontext;eventHolder=$(overlay.element).unbind();var existing=placeholder.data("pl
ot");if(existing){existing.shutdown();overlay.clear()}placeholder.data("plot",pl
ot)}function bindEvents(){if(options.grid.hoverable){eventHolder.mousemove(onMou
seMove);eventHolder.bind("mouseleave",onMouseLeave)}if(options.grid.clickable)ev
entHolder.click(onClick);executeHooks(hooks.bindEvents,[eventHolder])}function s
hutdown(){if(redrawTimeout)clearTimeout(redrawTimeout);eventHolder.unbind("mouse
move",onMouseMove);eventHolder.unbind("mouseleave",onMouseLeave);eventHolder.unb
ind("click",onClick);executeHooks(hooks.shutdown,[eventHolder])}function setTran
sformationHelpers(axis){function identity(x){return x}var s,m,t=axis.options.tra
nsform||identity,it=axis.options.inverseTransform;if(axis.direction=="x"){s=axis
.scale=plotWidth/Math.abs(t(axis.max)-t(axis.min));m=Math.min(t(axis.max),t(axis
.min))}else{s=axis.scale=plotHeight/Math.abs(t(axis.max)-t(axis.min));s=-s;m=Mat
h.max(t(axis.max),t(axis.min))}if(t==identity)axis.p2c=function(p){return(p-m)*s
};else axis.p2c=function(p){return(t(p)-m)*s};if(!it)axis.c2p=function(c){return
m+c/s};else axis.c2p=function(c){return it(m+c/s)}}function measureTickLabels(a
xis){var opts=axis.options,ticks=axis.ticks||[],labelWidth=opts.labelWidth||0,la
belHeight=opts.labelHeight||0,maxWidth=labelWidth||(axis.direction=="x"?Math.flo
or(surface.width/(ticks.length||1)):null),legacyStyles=axis.direction+"Axis "+ax
is.direction+axis.n+"Axis",layer="flot-"+axis.direction+"-axis flot-"+axis.direc
tion+axis.n+"-axis "+legacyStyles,font=opts.font||"flot-tick-label tickLabel";fo
r(var i=0;i<ticks.length;++i){var t=ticks[i];if(!t.label)continue;var info=surfa
ce.getTextInfo(layer,t.label,font,null,maxWidth);labelWidth=Math.max(labelWidth,
info.width);labelHeight=Math.max(labelHeight,info.height)}axis.labelWidth=opts.l
abelWidth||labelWidth;axis.labelHeight=opts.labelHeight||labelHeight}function al
locateAxisBoxFirstPhase(axis){var lw=axis.labelWidth,lh=axis.labelHeight,pos=axi
s.options.position,isXAxis=axis.direction==="x",tickLength=axis.options.tickLeng
th,axisMargin=options.grid.axisMargin,padding=options.grid.labelMargin,innermost
=true,outermost=true,first=true,found=false;$.each(isXAxis?xaxes:yaxes,function(
i,a){if(a&&(a.show||a.reserveSpace)){if(a===axis){found=true}else if(a.options.p
osition===pos){if(found){outermost=false}else{innermost=false}}if(!found){first=
false}}});if(outermost){axisMargin=0}if(tickLength==null){tickLength=first?"full
":5}if(!isNaN(+tickLength))padding+=+tickLength;if(isXAxis){lh+=padding;if(pos==
"bottom"){plotOffset.bottom+=lh+axisMargin;axis.box={top:surface.height-plotOffs
et.bottom,height:lh}}else{axis.box={top:plotOffset.top+axisMargin,height:lh};plo
tOffset.top+=lh+axisMargin}}else{lw+=padding;if(pos=="left"){axis.box={left:plot
Offset.left+axisMargin,width:lw};plotOffset.left+=lw+axisMargin}else{plotOffset.
right+=lw+axisMargin;axis.box={left:surface.width-plotOffset.right,width:lw}}}ax
is.position=pos;axis.tickLength=tickLength;axis.box.padding=padding;axis.innermo
st=innermost}function allocateAxisBoxSecondPhase(axis){if(axis.direction=="x"){a
xis.box.left=plotOffset.left-axis.labelWidth/2;axis.box.width=surface.width-plot
Offset.left-plotOffset.right+axis.labelWidth}else{axis.box.top=plotOffset.top-ax
is.labelHeight/2;axis.box.height=surface.height-plotOffset.bottom-plotOffset.top
+axis.labelHeight}}function adjustLayoutForThingsStickingOut(){var minMargin=opt
ions.grid.minBorderMargin,axis,i;if(minMargin==null){minMargin=0;for(i=0;i<serie
s.length;++i)minMargin=Math.max(minMargin,2*(series[i].points.radius+series[i].p
oints.lineWidth/2))}var margins={left:minMargin,right:minMargin,top:minMargin,bo
ttom:minMargin};$.each(allAxes(),function(_,axis){if(axis.reserveSpace&&axis.tic
ks&&axis.ticks.length){if(axis.direction==="x"){margins.left=Math.max(margins.le
ft,axis.labelWidth/2);margins.right=Math.max(margins.right,axis.labelWidth/2)}el
se{margins.bottom=Math.max(margins.bottom,axis.labelHeight/2);margins.top=Math.m
ax(margins.top,axis.labelHeight/2)}}});plotOffset.left=Math.ceil(Math.max(margin
s.left,plotOffset.left));plotOffset.right=Math.ceil(Math.max(margins.right,plotO
ffset.right));plotOffset.top=Math.ceil(Math.max(margins.top,plotOffset.top));plo
tOffset.bottom=Math.ceil(Math.max(margins.bottom,plotOffset.bottom))}function se
tupGrid(){var i,axes=allAxes(),showGrid=options.grid.show;for(var a in plotOffse
t){var margin=options.grid.margin||0;plotOffset[a]=typeof margin=="number"?margi
n:margin[a]||0}executeHooks(hooks.processOffset,[plotOffset]);for(var a in plotO
ffset){if(typeof options.grid.borderWidth=="object"){plotOffset[a]+=showGrid?opt
ions.grid.borderWidth[a]:0}else{plotOffset[a]+=showGrid?options.grid.borderWidth
:0}}$.each(axes,function(_,axis){var axisOpts=axis.options;axis.show=axisOpts.sh
ow==null?axis.used:axisOpts.show;axis.reserveSpace=axisOpts.reserveSpace==null?a
xis.show:axisOpts.reserveSpace;setRange(axis)});if(showGrid){var allocatedAxes=$
.grep(axes,function(axis){return axis.show||axis.reserveSpace});$.each(allocated
Axes,function(_,axis){setupTickGeneration(axis);setTicks(axis);snapRangeToTicks(
axis,axis.ticks);measureTickLabels(axis)});for(i=allocatedAxes.length-1;i>=0;--i
)allocateAxisBoxFirstPhase(allocatedAxes[i]);adjustLayoutForThingsStickingOut();
$.each(allocatedAxes,function(_,axis){allocateAxisBoxSecondPhase(axis)})}plotWid
th=surface.width-plotOffset.left-plotOffset.right;plotHeight=surface.height-plot
Offset.bottom-plotOffset.top;$.each(axes,function(_,axis){setTransformationHelpe
rs(axis)});if(showGrid){drawAxisLabels()}insertLegend()}function setRange(axis){
var opts=axis.options,min=+(opts.min!=null?opts.min:axis.datamin),max=+(opts.max
!=null?opts.max:axis.datamax),delta=max-min;if(delta==0){var widen=max==0?1:.01;
if(opts.min==null)min-=widen;if(opts.max==null||opts.min!=null)max+=widen}else{v
ar margin=opts.autoscaleMargin;if(margin!=null){if(opts.min==null){min-=delta*ma
rgin;if(min<0&&axis.datamin!=null&&axis.datamin>=0)min=0}if(opts.max==null){max+
=delta*margin;if(max>0&&axis.datamax!=null&&axis.datamax<=0)max=0}}}axis.min=min
;axis.max=max}function setupTickGeneration(axis){var opts=axis.options;var noTic
ks;if(typeof opts.ticks=="number"&&opts.ticks>0)noTicks=opts.ticks;else noTicks=
.3*Math.sqrt(axis.direction=="x"?surface.width:surface.height);var delta=(axis.m
ax-axis.min)/noTicks,dec=-Math.floor(Math.log(delta)/Math.LN10),maxDec=opts.tick
Decimals;if(maxDec!=null&&dec>maxDec){dec=maxDec}var magn=Math.pow(10,-dec),norm
=delta/magn,size;if(norm<1.5){size=1}else if(norm<3){size=2;if(norm>2.25&&(maxDe
c==null||dec+1<=maxDec)){size=2.5;++dec}}else if(norm<7.5){size=5}else{size=10}s
ize*=magn;if(opts.minTickSize!=null&&size<opts.minTickSize){size=opts.minTickSiz
e}axis.delta=delta;axis.tickDecimals=Math.max(0,maxDec!=null?maxDec:dec);axis.ti
ckSize=opts.tickSize||size;if(opts.mode=="time"&&!axis.tickGenerator){throw new
Error("Time mode requires the flot.time plugin.")}if(!axis.tickGenerator){axis.t
ickGenerator=function(axis){var ticks=[],start=floorInBase(axis.min,axis.tickSiz
e),i=0,v=Number.NaN,prev;do{prev=v;v=start+i*axis.tickSize;ticks.push(v);++i}whi
le(v<axis.max&&v!=prev);return ticks};axis.tickFormatter=function(value,axis){va
r factor=axis.tickDecimals?Math.pow(10,axis.tickDecimals):1;var formatted=""+Mat
h.round(value*factor)/factor;if(axis.tickDecimals!=null){var decimal=formatted.i
ndexOf(".");var precision=decimal==-1?0:formatted.length-decimal-1;if(precision<
axis.tickDecimals){return(precision?formatted:formatted+".")+(""+factor).substr(
1,axis.tickDecimals-precision)}}return formatted}}if($.isFunction(opts.tickForma
tter))axis.tickFormatter=function(v,axis){return""+opts.tickFormatter(v,axis)};i
f(opts.alignTicksWithAxis!=null){var otherAxis=(axis.direction=="x"?xaxes:yaxes)
[opts.alignTicksWithAxis-1];if(otherAxis&&otherAxis.used&&otherAxis!=axis){var n
iceTicks=axis.tickGenerator(axis);if(niceTicks.length>0){if(opts.min==null)axis.
min=Math.min(axis.min,niceTicks[0]);if(opts.max==null&&niceTicks.length>1)axis.m
ax=Math.max(axis.max,niceTicks[niceTicks.length-1])}axis.tickGenerator=function(
axis){var ticks=[],v,i;for(i=0;i<otherAxis.ticks.length;++i){v=(otherAxis.ticks[
i].v-otherAxis.min)/(otherAxis.max-otherAxis.min);v=axis.min+v*(axis.max-axis.mi
n);ticks.push(v)}return ticks};if(!axis.mode&&opts.tickDecimals==null){var extra
Dec=Math.max(0,-Math.floor(Math.log(axis.delta)/Math.LN10)+1),ts=axis.tickGenera
tor(axis);if(!(ts.length>1&&/\..*0$/.test((ts[1]-ts[0]).toFixed(extraDec))))axis
.tickDecimals=extraDec}}}}function setTicks(axis){var oticks=axis.options.ticks,
ticks=[];if(oticks==null||typeof oticks=="number"&&oticks>0)ticks=axis.tickGener
ator(axis);else if(oticks){if($.isFunction(oticks))ticks=oticks(axis);else ticks
=oticks}var i,v;axis.ticks=[];for(i=0;i<ticks.length;++i){var label=null;var t=t
icks[i];if(typeof t=="object"){v=+t[0];if(t.length>1)label=t[1]}else v=+t;if(lab
el==null)label=axis.tickFormatter(v,axis);if(!isNaN(v))axis.ticks.push({v:v,labe
l:label})}}function snapRangeToTicks(axis,ticks){if(axis.options.autoscaleMargin
&&ticks.length>0){if(axis.options.min==null)axis.min=Math.min(axis.min,ticks[0].
v);if(axis.options.max==null&&ticks.length>1)axis.max=Math.max(axis.max,ticks[ti
cks.length-1].v)}}function draw(){surface.clear();executeHooks(hooks.drawBackgro
und,[ctx]);var grid=options.grid;if(grid.show&&grid.backgroundColor)drawBackgrou
nd();if(grid.show&&!grid.aboveData){drawGrid()}for(var i=0;i<series.length;++i){
executeHooks(hooks.drawSeries,[ctx,series[i]]);drawSeries(series[i])}executeHook
s(hooks.draw,[ctx]);if(grid.show&&grid.aboveData){drawGrid()}surface.render();tr
iggerRedrawOverlay()}function extractRange(ranges,coord){var axis,from,to,key,ax
es=allAxes();for(var i=0;i<axes.length;++i){axis=axes[i];if(axis.direction==coor
d){key=coord+axis.n+"axis";if(!ranges[key]&&axis.n==1)key=coord+"axis";if(ranges
[key]){from=ranges[key].from;to=ranges[key].to;break}}}if(!ranges[key]){axis=coo
rd=="x"?xaxes[0]:yaxes[0];from=ranges[coord+"1"];to=ranges[coord+"2"]}if(from!=n
ull&&to!=null&&from>to){var tmp=from;from=to;to=tmp}return{from:from,to:to,axis:
axis}}function drawBackground(){ctx.save();ctx.translate(plotOffset.left,plotOff
set.top);ctx.fillStyle=getColorOrGradient(options.grid.backgroundColor,plotHeigh
t,0,"rgba(255, 255, 255, 0)");ctx.fillRect(0,0,plotWidth,plotHeight);ctx.restore
()}function drawGrid(){var i,axes,bw,bc;ctx.save();ctx.translate(plotOffset.left
,plotOffset.top);var markings=options.grid.markings;if(markings){if($.isFunction
(markings)){axes=plot.getAxes();axes.xmin=axes.xaxis.min;axes.xmax=axes.xaxis.ma
x;axes.ymin=axes.yaxis.min;axes.ymax=axes.yaxis.max;markings=markings(axes)}for(
i=0;i<markings.length;++i){var m=markings[i],xrange=extractRange(m,"x"),yrange=e
xtractRange(m,"y");if(xrange.from==null)xrange.from=xrange.axis.min;if(xrange.to
==null)xrange.to=xrange.axis.max; |
| 8 if(yrange.from==null)yrange.from=yrange.axis.min;if(yrange.to==null)yrange.to=yr
ange.axis.max;if(xrange.to<xrange.axis.min||xrange.from>xrange.axis.max||yrange.
to<yrange.axis.min||yrange.from>yrange.axis.max)continue;xrange.from=Math.max(xr
ange.from,xrange.axis.min);xrange.to=Math.min(xrange.to,xrange.axis.max);yrange.
from=Math.max(yrange.from,yrange.axis.min);yrange.to=Math.min(yrange.to,yrange.a
xis.max);var xequal=xrange.from===xrange.to,yequal=yrange.from===yrange.to;if(xe
qual&&yequal){continue}xrange.from=Math.floor(xrange.axis.p2c(xrange.from));xran
ge.to=Math.floor(xrange.axis.p2c(xrange.to));yrange.from=Math.floor(yrange.axis.
p2c(yrange.from));yrange.to=Math.floor(yrange.axis.p2c(yrange.to));if(xequal||ye
qual){var lineWidth=m.lineWidth||options.grid.markingsLineWidth,subPixel=lineWid
th%2?.5:0;ctx.beginPath();ctx.strokeStyle=m.color||options.grid.markingsColor;ct
x.lineWidth=lineWidth;if(xequal){ctx.moveTo(xrange.to+subPixel,yrange.from);ctx.
lineTo(xrange.to+subPixel,yrange.to)}else{ctx.moveTo(xrange.from,yrange.to+subPi
xel);ctx.lineTo(xrange.to,yrange.to+subPixel)}ctx.stroke()}else{ctx.fillStyle=m.
color||options.grid.markingsColor;ctx.fillRect(xrange.from,yrange.to,xrange.to-x
range.from,yrange.from-yrange.to)}}}axes=allAxes();bw=options.grid.borderWidth;f
or(var j=0;j<axes.length;++j){var axis=axes[j],box=axis.box,t=axis.tickLength,x,
y,xoff,yoff;if(!axis.show||axis.ticks.length==0)continue;ctx.lineWidth=1;if(axis
.direction=="x"){x=0;if(t=="full")y=axis.position=="top"?0:plotHeight;else y=box
.top-plotOffset.top+(axis.position=="top"?box.height:0)}else{y=0;if(t=="full")x=
axis.position=="left"?0:plotWidth;else x=box.left-plotOffset.left+(axis.position
=="left"?box.width:0)}if(!axis.innermost){ctx.strokeStyle=axis.options.color;ctx
.beginPath();xoff=yoff=0;if(axis.direction=="x")xoff=plotWidth+1;else yoff=plotH
eight+1;if(ctx.lineWidth==1){if(axis.direction=="x"){y=Math.floor(y)+.5}else{x=M
ath.floor(x)+.5}}ctx.moveTo(x,y);ctx.lineTo(x+xoff,y+yoff);ctx.stroke()}ctx.stro
keStyle=axis.options.tickColor;ctx.beginPath();for(i=0;i<axis.ticks.length;++i){
var v=axis.ticks[i].v;xoff=yoff=0;if(isNaN(v)||v<axis.min||v>axis.max||t=="full"
&&(typeof bw=="object"&&bw[axis.position]>0||bw>0)&&(v==axis.min||v==axis.max))c
ontinue;if(axis.direction=="x"){x=axis.p2c(v);yoff=t=="full"?-plotHeight:t;if(ax
is.position=="top")yoff=-yoff}else{y=axis.p2c(v);xoff=t=="full"?-plotWidth:t;if(
axis.position=="left")xoff=-xoff}if(ctx.lineWidth==1){if(axis.direction=="x")x=M
ath.floor(x)+.5;else y=Math.floor(y)+.5}ctx.moveTo(x,y);ctx.lineTo(x+xoff,y+yoff
)}ctx.stroke()}if(bw){bc=options.grid.borderColor;if(typeof bw=="object"||typeof
bc=="object"){if(typeof bw!=="object"){bw={top:bw,right:bw,bottom:bw,left:bw}}i
f(typeof bc!=="object"){bc={top:bc,right:bc,bottom:bc,left:bc}}if(bw.top>0){ctx.
strokeStyle=bc.top;ctx.lineWidth=bw.top;ctx.beginPath();ctx.moveTo(0-bw.left,0-b
w.top/2);ctx.lineTo(plotWidth,0-bw.top/2);ctx.stroke()}if(bw.right>0){ctx.stroke
Style=bc.right;ctx.lineWidth=bw.right;ctx.beginPath();ctx.moveTo(plotWidth+bw.ri
ght/2,0-bw.top);ctx.lineTo(plotWidth+bw.right/2,plotHeight);ctx.stroke()}if(bw.b
ottom>0){ctx.strokeStyle=bc.bottom;ctx.lineWidth=bw.bottom;ctx.beginPath();ctx.m
oveTo(plotWidth+bw.right,plotHeight+bw.bottom/2);ctx.lineTo(0,plotHeight+bw.bott
om/2);ctx.stroke()}if(bw.left>0){ctx.strokeStyle=bc.left;ctx.lineWidth=bw.left;c
tx.beginPath();ctx.moveTo(0-bw.left/2,plotHeight+bw.bottom);ctx.lineTo(0-bw.left
/2,0);ctx.stroke()}}else{ctx.lineWidth=bw;ctx.strokeStyle=options.grid.borderCol
or;ctx.strokeRect(-bw/2,-bw/2,plotWidth+bw,plotHeight+bw)}}ctx.restore()}functio
n drawAxisLabels(){$.each(allAxes(),function(_,axis){var box=axis.box,legacyStyl
es=axis.direction+"Axis "+axis.direction+axis.n+"Axis",layer="flot-"+axis.direct
ion+"-axis flot-"+axis.direction+axis.n+"-axis "+legacyStyles,font=axis.options.
font||"flot-tick-label tickLabel",tick,x,y,halign,valign;surface.removeText(laye
r);if(!axis.show||axis.ticks.length==0)return;for(var i=0;i<axis.ticks.length;++
i){tick=axis.ticks[i];if(!tick.label||tick.v<axis.min||tick.v>axis.max)continue;
if(axis.direction=="x"){halign="center";x=plotOffset.left+axis.p2c(tick.v);if(ax
is.position=="bottom"){y=box.top+box.padding}else{y=box.top+box.height-box.paddi
ng;valign="bottom"}}else{valign="middle";y=plotOffset.top+axis.p2c(tick.v);if(ax
is.position=="left"){x=box.left+box.width-box.padding;halign="right"}else{x=box.
left+box.padding}}surface.addText(layer,x,y,tick.label,font,null,null,halign,val
ign)}})}function drawSeries(series){if(series.lines.show)drawSeriesLines(series)
;if(series.bars.show)drawSeriesBars(series);if(series.points.show)drawSeriesPoin
ts(series)}function drawSeriesLines(series){function plotLine(datapoints,xoffset
,yoffset,axisx,axisy){var points=datapoints.points,ps=datapoints.pointsize,prevx
=null,prevy=null;ctx.beginPath();for(var i=ps;i<points.length;i+=ps){var x1=poin
ts[i-ps],y1=points[i-ps+1],x2=points[i],y2=points[i+1];if(x1==null||x2==null)con
tinue;if(y1<=y2&&y1<axisy.min){if(y2<axisy.min)continue;x1=(axisy.min-y1)/(y2-y1
)*(x2-x1)+x1;y1=axisy.min}else if(y2<=y1&&y2<axisy.min){if(y1<axisy.min)continue
;x2=(axisy.min-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.min}if(y1>=y2&&y1>axisy.max){if(y
2>axisy.max)continue;x1=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.max}else if(y
2>=y1&&y2>axisy.max){if(y1>axisy.max)continue;x2=(axisy.max-y1)/(y2-y1)*(x2-x1)+
x1;y2=axisy.max}if(x1<=x2&&x1<axisx.min){if(x2<axisx.min)continue;y1=(axisx.min-
x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.min}else if(x2<=x1&&x2<axisx.min){if(x1<axisx.mi
n)continue;y2=(axisx.min-x1)/(x2-x1)*(y2-y1)+y1;x2=axisx.min}if(x1>=x2&&x1>axisx
.max){if(x2>axisx.max)continue;y1=(axisx.max-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.max
}else if(x2>=x1&&x2>axisx.max){if(x1>axisx.max)continue;y2=(axisx.max-x1)/(x2-x1
)*(y2-y1)+y1;x2=axisx.max}if(x1!=prevx||y1!=prevy)ctx.moveTo(axisx.p2c(x1)+xoffs
et,axisy.p2c(y1)+yoffset);prevx=x2;prevy=y2;ctx.lineTo(axisx.p2c(x2)+xoffset,axi
sy.p2c(y2)+yoffset)}ctx.stroke()}function plotLineArea(datapoints,axisx,axisy){v
ar points=datapoints.points,ps=datapoints.pointsize,bottom=Math.min(Math.max(0,a
xisy.min),axisy.max),i=0,top,areaOpen=false,ypos=1,segmentStart=0,segmentEnd=0;w
hile(true){if(ps>0&&i>points.length+ps)break;i+=ps;var x1=points[i-ps],y1=points
[i-ps+ypos],x2=points[i],y2=points[i+ypos];if(areaOpen){if(ps>0&&x1!=null&&x2==n
ull){segmentEnd=i;ps=-ps;ypos=2;continue}if(ps<0&&i==segmentStart+ps){ctx.fill()
;areaOpen=false;ps=-ps;ypos=1;i=segmentStart=segmentEnd+ps;continue}}if(x1==null
||x2==null)continue;if(x1<=x2&&x1<axisx.min){if(x2<axisx.min)continue;y1=(axisx.
min-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx.min}else if(x2<=x1&&x2<axisx.min){if(x1<axis
x.min)continue;y2=(axisx.min-x1)/(x2-x1)*(y2-y1)+y1;x2=axisx.min}if(x1>=x2&&x1>a
xisx.max){if(x2>axisx.max)continue;y1=(axisx.max-x1)/(x2-x1)*(y2-y1)+y1;x1=axisx
.max}else if(x2>=x1&&x2>axisx.max){if(x1>axisx.max)continue;y2=(axisx.max-x1)/(x
2-x1)*(y2-y1)+y1;x2=axisx.max}if(!areaOpen){ctx.beginPath();ctx.moveTo(axisx.p2c
(x1),axisy.p2c(bottom));areaOpen=true}if(y1>=axisy.max&&y2>=axisy.max){ctx.lineT
o(axisx.p2c(x1),axisy.p2c(axisy.max));ctx.lineTo(axisx.p2c(x2),axisy.p2c(axisy.m
ax));continue}else if(y1<=axisy.min&&y2<=axisy.min){ctx.lineTo(axisx.p2c(x1),axi
sy.p2c(axisy.min));ctx.lineTo(axisx.p2c(x2),axisy.p2c(axisy.min));continue}var x
1old=x1,x2old=x2;if(y1<=y2&&y1<axisy.min&&y2>=axisy.min){x1=(axisy.min-y1)/(y2-y
1)*(x2-x1)+x1;y1=axisy.min}else if(y2<=y1&&y2<axisy.min&&y1>=axisy.min){x2=(axis
y.min-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.min}if(y1>=y2&&y1>axisy.max&&y2<=axisy.max
){x1=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.max}else if(y2>=y1&&y2>axisy.max
&&y1<=axisy.max){x2=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y2=axisy.max}if(x1!=x1old)
{ctx.lineTo(axisx.p2c(x1old),axisy.p2c(y1))}ctx.lineTo(axisx.p2c(x1),axisy.p2c(y
1));ctx.lineTo(axisx.p2c(x2),axisy.p2c(y2));if(x2!=x2old){ctx.lineTo(axisx.p2c(x
2),axisy.p2c(y2));ctx.lineTo(axisx.p2c(x2old),axisy.p2c(y2))}}}ctx.save();ctx.tr
anslate(plotOffset.left,plotOffset.top);ctx.lineJoin="round";var lw=series.lines
.lineWidth,sw=series.shadowSize;if(lw>0&&sw>0){ctx.lineWidth=sw;ctx.strokeStyle=
"rgba(0,0,0,0.1)";var angle=Math.PI/18;plotLine(series.datapoints,Math.sin(angle
)*(lw/2+sw/2),Math.cos(angle)*(lw/2+sw/2),series.xaxis,series.yaxis);ctx.lineWid
th=sw/2;plotLine(series.datapoints,Math.sin(angle)*(lw/2+sw/4),Math.cos(angle)*(
lw/2+sw/4),series.xaxis,series.yaxis)}ctx.lineWidth=lw;ctx.strokeStyle=series.co
lor;var fillStyle=getFillStyle(series.lines,series.color,0,plotHeight);if(fillSt
yle){ctx.fillStyle=fillStyle;plotLineArea(series.datapoints,series.xaxis,series.
yaxis)}if(lw>0)plotLine(series.datapoints,0,0,series.xaxis,series.yaxis);ctx.res
tore()}function drawSeriesPoints(series){function plotPoints(datapoints,radius,f
illStyle,offset,shadow,axisx,axisy,symbol){var points=datapoints.points,ps=datap
oints.pointsize;for(var i=0;i<points.length;i+=ps){var x=points[i],y=points[i+1]
;if(x==null||x<axisx.min||x>axisx.max||y<axisy.min||y>axisy.max)continue;ctx.beg
inPath();x=axisx.p2c(x);y=axisy.p2c(y)+offset;if(symbol=="circle")ctx.arc(x,y,ra
dius,0,shadow?Math.PI:Math.PI*2,false);else symbol(ctx,x,y,radius,shadow);ctx.cl
osePath();if(fillStyle){ctx.fillStyle=fillStyle;ctx.fill()}ctx.stroke()}}ctx.sav
e();ctx.translate(plotOffset.left,plotOffset.top);var lw=series.points.lineWidth
,sw=series.shadowSize,radius=series.points.radius,symbol=series.points.symbol;if
(lw==0)lw=1e-4;if(lw>0&&sw>0){var w=sw/2;ctx.lineWidth=w;ctx.strokeStyle="rgba(0
,0,0,0.1)";plotPoints(series.datapoints,radius,null,w+w/2,true,series.xaxis,seri
es.yaxis,symbol);ctx.strokeStyle="rgba(0,0,0,0.2)";plotPoints(series.datapoints,
radius,null,w/2,true,series.xaxis,series.yaxis,symbol)}ctx.lineWidth=lw;ctx.stro
keStyle=series.color;plotPoints(series.datapoints,radius,getFillStyle(series.poi
nts,series.color),0,false,series.xaxis,series.yaxis,symbol);ctx.restore()}functi
on drawBar(x,y,b,barLeft,barRight,fillStyleCallback,axisx,axisy,c,horizontal,lin
eWidth){var left,right,bottom,top,drawLeft,drawRight,drawTop,drawBottom,tmp;if(h
orizontal){drawBottom=drawRight=drawTop=true;drawLeft=false;left=b;right=x;top=y
+barLeft;bottom=y+barRight;if(right<left){tmp=right;right=left;left=tmp;drawLeft
=true;drawRight=false}}else{drawLeft=drawRight=drawTop=true;drawBottom=false;lef
t=x+barLeft;right=x+barRight;bottom=b;top=y;if(top<bottom){tmp=top;top=bottom;bo
ttom=tmp;drawBottom=true;drawTop=false}}if(right<axisx.min||left>axisx.max||top<
axisy.min||bottom>axisy.max)return;if(left<axisx.min){left=axisx.min;drawLeft=fa
lse}if(right>axisx.max){right=axisx.max;drawRight=false}if(bottom<axisy.min){bot
tom=axisy.min;drawBottom=false}if(top>axisy.max){top=axisy.max;drawTop=false}lef
t=axisx.p2c(left);bottom=axisy.p2c(bottom);right=axisx.p2c(right);top=axisy.p2c(
top);if(fillStyleCallback){c.fillStyle=fillStyleCallback(bottom,top);c.fillRect(
left,top,right-left,bottom-top)}if(lineWidth>0&&(drawLeft||drawRight||drawTop||d
rawBottom)){c.beginPath();c.moveTo(left,bottom);if(drawLeft)c.lineTo(left,top);e
lse c.moveTo(left,top);if(drawTop)c.lineTo(right,top);else c.moveTo(right,top);i
f(drawRight)c.lineTo(right,bottom);else c.moveTo(right,bottom);if(drawBottom)c.l
ineTo(left,bottom);else c.moveTo(left,bottom);c.stroke()}}function drawSeriesBar
s(series){function plotBars(datapoints,barLeft,barRight,fillStyleCallback,axisx,
axisy){var points=datapoints.points,ps=datapoints.pointsize;for(var i=0;i<points
.length;i+=ps){if(points[i]==null)continue;drawBar(points[i],points[i+1],points[
i+2],barLeft,barRight,fillStyleCallback,axisx,axisy,ctx,series.bars.horizontal,s
eries.bars.lineWidth)}}ctx.save();ctx.translate(plotOffset.left,plotOffset.top);
ctx.lineWidth=series.bars.lineWidth;ctx.strokeStyle=series.color;var barLeft;swi
tch(series.bars.align){case"left":barLeft=0;break;case"right":barLeft=-series.ba
rs.barWidth;break;default:barLeft=-series.bars.barWidth/2}var fillStyleCallback=
series.bars.fill?function(bottom,top){return getFillStyle(series.bars,series.col
or,bottom,top)}:null;plotBars(series.datapoints,barLeft,barLeft+series.bars.barW
idth,fillStyleCallback,series.xaxis,series.yaxis);ctx.restore()}function getFill
Style(filloptions,seriesColor,bottom,top){var fill=filloptions.fill;if(!fill)ret
urn null;if(filloptions.fillColor)return getColorOrGradient(filloptions.fillColo
r,bottom,top,seriesColor);var c=$.color.parse(seriesColor);c.a=typeof fill=="num
ber"?fill:.4;c.normalize();return c.toString()}function insertLegend(){if(option
s.legend.container!=null){$(options.legend.container).html("")}else{placeholder.
find(".legend").remove()}if(!options.legend.show){return}var fragments=[],entrie
s=[],rowStarted=false,lf=options.legend.labelFormatter,s,label;for(var i=0;i<ser
ies.length;++i){s=series[i];if(s.label){label=lf?lf(s.label,s):s.label;if(label)
{entries.push({label:label,color:s.color})}}}if(options.legend.sorted){if($.isFu
nction(options.legend.sorted)){entries.sort(options.legend.sorted)}else if(optio
ns.legend.sorted=="reverse"){entries.reverse()}else{var ascending=options.legend
.sorted!="descending";entries.sort(function(a,b){return a.label==b.label?0:a.lab
el<b.label!=ascending?1:-1})}}for(var i=0;i<entries.length;++i){var entry=entrie
s[i];if(i%options.legend.noColumns==0){if(rowStarted)fragments.push("</tr>");fra
gments.push("<tr>");rowStarted=true}fragments.push('<td class="legendColorBox"><
div style="border:1px solid '+options.legend.labelBoxBorderColor+';padding:1px">
<div style="width:4px;height:0;border:5px solid '+entry.color+';overflow:hidden"
></div></div></td>'+'<td class="legendLabel">'+entry.label+"</td>")}if(rowStarte
d)fragments.push("</tr>");if(fragments.length==0)return;var table='<table style=
"font-size:smaller;color:'+options.grid.color+'">'+fragments.join("")+"</table>"
;if(options.legend.container!=null)$(options.legend.container).html(table);else{
var pos="",p=options.legend.position,m=options.legend.margin;if(m[0]==null)m=[m,
m];if(p.charAt(0)=="n")pos+="top:"+(m[1]+plotOffset.top)+"px;";else if(p.charAt(
0)=="s")pos+="bottom:"+(m[1]+plotOffset.bottom)+"px;";if(p.charAt(1)=="e")pos+="
right:"+(m[0]+plotOffset.right)+"px;";else if(p.charAt(1)=="w")pos+="left:"+(m[0
]+plotOffset.left)+"px;";var legend=$('<div class="legend">'+table.replace('styl
e="','style="position:absolute;'+pos+";")+"</div>").appendTo(placeholder);if(opt
ions.legend.backgroundOpacity!=0){var c=options.legend.backgroundColor;if(c==nul
l){c=options.grid.backgroundColor;if(c&&typeof c=="string")c=$.color.parse(c);el
se c=$.color.extract(legend,"background-color");c.a=1;c=c.toString()}var div=leg
end.children();$('<div style="position:absolute;width:'+div.width()+"px;height:"
+div.height()+"px;"+pos+"background-color:"+c+';"> </div>').prependTo(legend).cs
s("opacity",options.legend.backgroundOpacity)}}}var highlights=[],redrawTimeout=
null;function findNearbyItem(mouseX,mouseY,seriesFilter){var maxDistance=options
.grid.mouseActiveRadius,smallestDistance=maxDistance*maxDistance+1,item=null,fou
ndPoint=false,i,j,ps;for(i=series.length-1;i>=0;--i){if(!seriesFilter(series[i])
)continue;var s=series[i],axisx=s.xaxis,axisy=s.yaxis,points=s.datapoints.points
,mx=axisx.c2p(mouseX),my=axisy.c2p(mouseY),maxx=maxDistance/axisx.scale,maxy=max
Distance/axisy.scale;ps=s.datapoints.pointsize;if(axisx.options.inverseTransform
)maxx=Number.MAX_VALUE;if(axisy.options.inverseTransform)maxy=Number.MAX_VALUE;i
f(s.lines.show||s.points.show){for(j=0;j<points.length;j+=ps){var x=points[j],y=
points[j+1];if(x==null)continue;if(x-mx>maxx||x-mx<-maxx||y-my>maxy||y-my<-maxy)
continue;var dx=Math.abs(axisx.p2c(x)-mouseX),dy=Math.abs(axisy.p2c(y)-mouseY),d
ist=dx*dx+dy*dy;if(dist<smallestDistance){smallestDistance=dist;item=[i,j/ps]}}}
if(s.bars.show&&!item){var barLeft,barRight;switch(s.bars.align){case"left":barL
eft=0;break;case"right":barLeft=-s.bars.barWidth;break;default:barLeft=-s.bars.b
arWidth/2}barRight=barLeft+s.bars.barWidth;for(j=0;j<points.length;j+=ps){var x=
points[j],y=points[j+1],b=points[j+2];if(x==null)continue;if(series[i].bars.hori
zontal?mx<=Math.max(b,x)&&mx>=Math.min(b,x)&&my>=y+barLeft&&my<=y+barRight:mx>=x
+barLeft&&mx<=x+barRight&&my>=Math.min(b,y)&&my<=Math.max(b,y))item=[i,j/ps]}}}i
f(item){i=item[0];j=item[1];ps=series[i].datapoints.pointsize;return{datapoint:s
eries[i].datapoints.points.slice(j*ps,(j+1)*ps),dataIndex:j,series:series[i],ser
iesIndex:i}}return null}function onMouseMove(e){if(options.grid.hoverable)trigge
rClickHoverEvent("plothover",e,function(s){return s["hoverable"]!=false})}functi
on onMouseLeave(e){if(options.grid.hoverable)triggerClickHoverEvent("plothover",
e,function(s){return false})}function onClick(e){triggerClickHoverEvent("plotcli
ck",e,function(s){return s["clickable"]!=false})}function triggerClickHoverEvent
(eventname,event,seriesFilter){var offset=eventHolder.offset(),canvasX=event.pag
eX-offset.left-plotOffset.left,canvasY=event.pageY-offset.top-plotOffset.top,pos
=canvasToAxisCoords({left:canvasX,top:canvasY});pos.pageX=event.pageX;pos.pageY=
event.pageY;var item=findNearbyItem(canvasX,canvasY,seriesFilter);if(item){item.
pageX=parseInt(item.series.xaxis.p2c(item.datapoint[0])+offset.left+plotOffset.l
eft,10);item.pageY=parseInt(item.series.yaxis.p2c(item.datapoint[1])+offset.top+
plotOffset.top,10)}if(options.grid.autoHighlight){for(var i=0;i<highlights.lengt
h;++i){var h=highlights[i];if(h.auto==eventname&&!(item&&h.series==item.series&&
h.point[0]==item.datapoint[0]&&h.point[1]==item.datapoint[1]))unhighlight(h.seri
es,h.point)}if(item)highlight(item.series,item.datapoint,eventname)}placeholder.
trigger(eventname,[pos,item])}function triggerRedrawOverlay(){var t=options.inte
raction.redrawOverlayInterval;if(t==-1){drawOverlay();return}if(!redrawTimeout)r
edrawTimeout=setTimeout(drawOverlay,t)}function drawOverlay(){redrawTimeout=null
;octx.save();overlay.clear();octx.translate(plotOffset.left,plotOffset.top);var
i,hi;for(i=0;i<highlights.length;++i){hi=highlights[i];if(hi.series.bars.show)dr
awBarHighlight(hi.series,hi.point);else drawPointHighlight(hi.series,hi.point)}o
ctx.restore();executeHooks(hooks.drawOverlay,[octx])}function highlight(s,point,
auto){if(typeof s=="number")s=series[s];if(typeof point=="number"){var ps=s.data
points.pointsize;point=s.datapoints.points.slice(ps*point,ps*(point+1))}var i=in
dexOfHighlight(s,point);if(i==-1){highlights.push({series:s,point:point,auto:aut
o});triggerRedrawOverlay()}else if(!auto)highlights[i].auto=false}function unhig
hlight(s,point){if(s==null&&point==null){highlights=[];triggerRedrawOverlay();re
turn}if(typeof s=="number")s=series[s];if(typeof point=="number"){var ps=s.datap
oints.pointsize;point=s.datapoints.points.slice(ps*point,ps*(point+1))}var i=ind
exOfHighlight(s,point);if(i!=-1){highlights.splice(i,1);triggerRedrawOverlay()}}
function indexOfHighlight(s,p){for(var i=0;i<highlights.length;++i){var h=highli
ghts[i];if(h.series==s&&h.point[0]==p[0]&&h.point[1]==p[1])return i}return-1}fun
ction drawPointHighlight(series,point){var x=point[0],y=point[1],axisx=series.xa
xis,axisy=series.yaxis,highlightColor=typeof series.highlightColor==="string"?se
ries.highlightColor:$.color.parse(series.color).scale("a",.5).toString();if(x<ax
isx.min||x>axisx.max||y<axisy.min||y>axisy.max)return;var pointRadius=series.poi
nts.radius+series.points.lineWidth/2;octx.lineWidth=pointRadius;octx.strokeStyle
=highlightColor;var radius=1.5*pointRadius;x=axisx.p2c(x);y=axisy.p2c(y);octx.be
ginPath();if(series.points.symbol=="circle")octx.arc(x,y,radius,0,2*Math.PI,fals
e);else series.points.symbol(octx,x,y,radius,false);octx.closePath();octx.stroke
()}function drawBarHighlight(series,point){var highlightColor=typeof series.high
lightColor==="string"?series.highlightColor:$.color.parse(series.color).scale("a
",.5).toString(),fillStyle=highlightColor,barLeft;switch(series.bars.align){case
"left":barLeft=0;break;case"right":barLeft=-series.bars.barWidth;break;default:b
arLeft=-series.bars.barWidth/2}octx.lineWidth=series.bars.lineWidth;octx.strokeS
tyle=highlightColor;drawBar(point[0],point[1],point[2]||0,barLeft,barLeft+series
.bars.barWidth,function(){return fillStyle},series.xaxis,series.yaxis,octx,serie
s.bars.horizontal,series.bars.lineWidth)}function getColorOrGradient(spec,bottom
,top,defaultColor){if(typeof spec=="string")return spec;else{var gradient=ctx.cr
eateLinearGradient(0,top,0,bottom);for(var i=0,l=spec.colors.length;i<l;++i){var
c=spec.colors[i];if(typeof c!="string"){var co=$.color.parse(defaultColor);if(c
.brightness!=null)co=co.scale("rgb",c.brightness);if(c.opacity!=null)co.a*=c.opa
city;c=co.toString()}gradient.addColorStop(i/(l-1),c)}return gradient}}}$.plot=f
unction(placeholder,data,options){var plot=new Plot($(placeholder),data,options,
$.plot.plugins);return plot};$.plot.version="0.8.3";$.plot.plugins=[];$.fn.plot=
function(data,options){return this.each(function(){$.plot(this,data,options)})};
function floorInBase(n,base){return base*Math.floor(n/base)}})(jQuery); |