(function(){jQuery.color={};jQuery.color.make=function(E,D,B,C){var F={};F.r=E||0;F.g=D||0;F.b=B||0;F.a=C!=null?C:1;F.add=function(I,H){for(var G=0;G<I.length;++G){F[I.charAt(G)]+=H}return F.normalize()};F.scale=function(I,H){for(var G=0;G<I.length;++G){F[I.charAt(G)]*=H}return F.normalize()};F.toString=function(){if(F.a>=1){return"rgb("+[F.r,F.g,F.b].join(",")+")"}else{return"rgba("+[F.r,F.g,F.b,F.a].join(",")+")"}};F.normalize=function(){function G(I,J,H){return J<I?I:(J>H?H:J)}F.r=G(0,parseInt(F.r),255);F.g=G(0,parseInt(F.g),255);F.b=G(0,parseInt(F.b),255);F.a=G(0,F.a,1);return F};F.clone=function(){return jQuery.color.make(F.r,F.b,F.g,F.a)};return F.normalize()};jQuery.color.extract=function(C,B){var D;do{D=C.css(B).toLowerCase();if(D!=""&&D!="transparent"){break}C=C.parent()}while(!jQuery.nodeName(C.get(0),"body"));if(D=="rgba(0, 0, 0, 0)"){D="transparent"}return jQuery.color.parse(D)};jQuery.color.parse=function(E){var D,B=jQuery.color.make;if(D=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(E)){return B(parseInt(D[1],10),parseInt(D[2],10),parseInt(D[3],10))}if(D=/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(E)){return B(parseInt(D[1],10),parseInt(D[2],10),parseInt(D[3],10),parseFloat(D[4]))}if(D=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(E)){return B(parseFloat(D[1])*2.55,parseFloat(D[2])*2.55,parseFloat(D[3])*2.55)}if(D=/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(E)){return B(parseFloat(D[1])*2.55,parseFloat(D[2])*2.55,parseFloat(D[3])*2.55,parseFloat(D[4]))}if(D=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(E)){return B(parseInt(D[1],16),parseInt(D[2],16),parseInt(D[3],16))}if(D=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(E)){return B(parseInt(D[1]+D[1],16),parseInt(D[2]+D[2],16),parseInt(D[3]+D[3],16))}var C=jQuery.trim(E).toLowerCase();if(C=="transparent"){return B(255,255,255,0)}else{D=A[C];return B(D[0],D[1],D[2])}};var A={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]}})();(function($){function Plot(placeholder,data_,options_,plugins){var series=[],options={colors:["#edc240","#afd8f8","#cb4b4b","#4da74d","#9440ed"],legend:{show:true,noColumns:1,labelFormatter:null,labelBoxBorderColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgroundOpacity:0.7},xaxis:{mode:null,transform:null,inverseTransform:null,min:null,max:null,autoscaleMargin:null,ticks:null,tickFormatter:null,labelWidth:null,labelHeight:null,tickDecimals:null,tickSize:null,minTickSize:null,monthNames:null,timeformat:null,twelveHourClock:false},yaxis:{autoscaleMargin:0.02},x2axis:{autoscaleMargin:null},y2axis:{autoscaleMargin:0.02},series:{points:{show:false,radius:3,lineWidth:2,fill:true,fillColor:"#ffffff"},lines:{lineWidth:2,fill:false,fillColor:null,steps:false},bars:{show:false,lineWidth:2,barWidth:1,fill:true,fillColor:null,align:"left",horizontal:false},shadowSize:3},grid:{show:true,aboveData:false,color:"#545454",backgroundColor:null,tickColor:"rgba(0,0,0,0.15)",labelMargin:5,borderWidth:2,borderColor:null,markings:null,markingsColor:"#f4f4f4",markingsLineWidth:2,clickable:false,hoverable:false,autoHighlight:true,mouseActiveRadius:10},hooks:{}},canvas=null,overlay=null,eventHolder=null,ctx=null,octx=null,axes={xaxis:{},yaxis:{},x2axis:{},y2axis:{}},plotOffset={left:0,right:0,top:0,bottom:0},canvasWidth=0,canvasHeight=0,plotWidth=0,plotHeight=0,hooks={processOptions:[],processRawData:[],processDatapoints:[],draw:[],bindEvents:[],drawOverlay:[]},plot=this;plot.setData=setData;plot.setupGrid=setupGrid;plot.draw=draw;plot.getPlaceholder=function(){return placeholder};plot.getCanvas=function(){return canvas};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.top+=plotOffset.top;return o};plot.getData=function(){return series};plot.getAxes=function(){return axes};plot.getOptions=function(){return options};plot.highlight=highlight;plot.unhighlight=unhighlight;plot.triggerRedrawOverlay=triggerRedrawOverlay;plot.pointOffset=function(point){return{left:parseInt(axisSpecToRealAxis(point,"xaxis").p2c(+point.x)+plotOffset.left),top:parseInt(axisSpecToRealAxis(point,"yaxis").p2c(+point.y)+plotOffset.top)}};plot.hooks=hooks;initPlugins(plot);parseOptions(options_);constructCanvas();setData(data_);setupGrid();draw();bindEvents();function executeHooks(hook,args){args=[plot].concat(args);for(var i=0;i<hook.length;++i){hook[i].apply(this,args)}}function initPlugins(){for(var i=0;i<plugins.length;++i){var p=plugins[i];p.init(plot);if(p.options){$.extend(true,options,p.options)}}}function parseOptions(opts){$.extend(true,options,opts);if(options.grid.borderColor==null){options.grid.borderColor=options.grid.color}if(options.xaxis.noTicks&&options.xaxis.ticks==null){options.xaxis.ticks=options.xaxis.noTicks}if(options.yaxis.noTicks&&options.yaxis.ticks==null){options.yaxis.ticks=options.yaxis.noTicks}if(options.grid.coloredAreas){options.grid.markings=options.grid.coloredAreas}if(options.grid.coloredAreasColor){options.grid.markingsColor=options.grid.coloredAreasColor}if(options.lines){$.extend(true,options.series.lines,options.lines)}if(options.points){$.extend(true,options.series.points,options.points)}if(options.bars){$.extend(true,options.series.bars,options.bars)}if(options.shadowSize){options.series.shadowSize=options.shadowSize}for(var n in hooks){if(options.hooks[n]&&options.hooks[n].length){hooks[n]=hooks[n].concat(options.hooks[n])}}executeHooks(hooks.processOptions,[options])}function setData(d){series=parseData(d);fillInSeriesOptions();processData()}function parseData(d){var res=[];for(var i=0;i<d.length;++i){var s=$.extend(true,{},options.series);if(d[i].data){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 axisSpecToRealAxis(obj,attr){var a=obj[attr];if(!a||a==1){return axes[attr]}if(typeof a=="number"){return axes[attr.charAt(0)+a+attr.slice(1)]}return a}function fillInSeriesOptions(){var i;var neededColors=series.length,usedColors=[],assignedColors=[];for(i=0;i<series.length;++i){var sc=series[i].color;if(sc!=null){--neededColors;if(typeof sc=="number"){assignedColors.push(sc)}else{usedColors.push($.color.parse(series[i].color))}}}for(i=0;i<assignedColors.length;++i){neededColors=Math.max(neededColors,assignedColors[i]+1)}var colors=[],variation=0;i=0;while(colors.length<neededColors){var c;if(options.colors.length==i){c=$.color.make(100,100,100)}else{c=$.color.parse(options.colors[i])}var sign=variation%2==1?-1:1;c.scale("rgb",1+sign*Math.ceil(variation/2)*0.2);colors.push(c);++i;if(i>=options.colors.length){i=0;++variation}}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.color=colors[s.color].toString()}}if(s.lines.show==null){var v,show=true;for(v in s){if(s[v].show){show=false;break}}if(show){s.lines.show=true}}s.xaxis=axisSpecToRealAxis(s,"xaxis");s.yaxis=axisSpecToRealAxis(s,"yaxis")}}function processData(){var topSentry=Number.POSITIVE_INFINITY,bottomSentry=Number.NEGATIVE_INFINITY,i,j,k,m,length,s,points,ps,x,y,axis,val,f,p;for(axis in axes){axes[axis].datamin=topSentry;axes[axis].datamax=bottomSentry;axes[axis].used=false}function updateAxis(axis,min,max){if(min<axis.datamin){axis.datamin=min}if(max>axis.datamax){axis.datamax=max}}for(i=0;i<series.length;++i){s=series[i];s.datapoints={points:[]};executeHooks(hooks.processRawData,[s,s.data,s.datapoints])}for(i=0;i<series.length;++i){s=series[i];var data=s.data,format=s.datapoints.format;if(!format){format=[];format.push({x:true,number:true,required:true});format.push({y:true,number:true,required:true});if(s.bars.show){format.push({y:true,number:true,required:false,defaultValue:0})}s.datapoints.format=format}if(s.datapoints.pointsize!=null){continue}if(s.datapoints.pointsize==null){s.datapoints.pointsize=format.length}ps=s.datapoints.pointsize;points=s.datapoints.points;insertSteps=s.lines.show&&s.lines.steps;s.xaxis.used=s.yaxis.used=true;for(j=k=0;j<data.length;++j,k+=ps){p=data[j];var nullify=p==null;if(!nullify){for(m=0;m<ps;++m){val=p[m];f=format[m];if(f){if(f.number&&val!=null){val=+val;if(isNaN(val)){val=null}}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.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]!=null&&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.pointsize;var xmin=topSentry,ymin=topSentry,xmax=bottomSentry,ymax=bottomSentry;for(j=0;j<points.length;j+=ps){if(points[j]==null){continue}for(m=0;m<ps;++m){val=points[j+m];f=format[m];if(!f){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=s.bars.align=="left"?0:-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)}for(axis in axes){if(axes[axis].datamin==topSentry){axes[axis].datamin=null}if(axes[axis].datamax==bottomSentry){axes[axis].datamax=null}}}function constructCanvas(){function makeCanvas(width,height){var c=document.createElement("canvas");c.width=width;c.height=height;if($.browser.msie && parseFloat($.browser.version) < 9){c=window.G_vmlCanvasManager.initElement(c)}return c}canvasWidth=placeholder.width();canvasHeight=placeholder.height();placeholder.html("");if(placeholder.css("position")=="static"){placeholder.css("position","relative")}if(canvasWidth<=0||canvasHeight<=0){throw"Invalid dimensions for plot, width = "+canvasWidth+", height = "+canvasHeight}if($.browser.msie && parseInt($.browser.version) < 9){window.G_vmlCanvasManager.init_(document)}canvas=$(makeCanvas(canvasWidth,canvasHeight)).appendTo(placeholder).get(0);ctx=canvas.getContext("2d");overlay=$(makeCanvas(canvasWidth,canvasHeight)).css({position:"absolute",left:0,top:0}).appendTo(placeholder).get(0);octx=overlay.getContext("2d");octx.stroke()}function bindEvents(){eventHolder=$([overlay,canvas]);if(options.grid.hoverable){eventHolder.mousemove(onMouseMove)}if(options.grid.clickable){eventHolder.click(onClick)}executeHooks(hooks.bindEvents,[eventHolder])}function setupGrid(){function setTransformationHelpers(axis,o){function identity(x){return x}var s,m,t=o.transform||identity,it=o.inverseTransform;if(axis==axes.xaxis||axis==axes.x2axis){s=axis.scale=plotWidth/(t(axis.max)-t(axis.min));m=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)}}}else{s=axis.scale=plotHeight/(t(axis.max)-t(axis.min));m=t(axis.max);if(t==identity){axis.p2c=function(p){return(m-p)*s}}else{axis.p2c=function(p){return(m-t(p))*s}}if(!it){axis.c2p=function(c){return m-c/s}}else{axis.c2p=function(c){return it(m-c/s)}}}}function measureLabels(axis,axisOptions){var i,labels=[],l;axis.labelWidth=axisOptions.labelWidth;axis.labelHeight=axisOptions.labelHeight;if(axis==axes.xaxis||axis==axes.x2axis){if(axis.labelWidth==null){axis.labelWidth=canvasWidth/(axis.ticks.length>0?axis.ticks.length:1)}if(axis.labelHeight==null){labels=[];for(i=0;i<axis.ticks.length;++i){l=axis.ticks[i].label;if(l){labels.push('<div class="tickLabel" style="float:left;width:'+axis.labelWidth+'px">'+l+"</div>")}}if(labels.length>0){var dummyDiv=$('<div style="position:absolute;top:-10000px;width:10000px;font-size:10px">'+labels.join("")+'<div style="clear:left"></div></div>').appendTo(placeholder);axis.labelHeight=dummyDiv.height();dummyDiv.remove()}}}else{if(axis.labelWidth==null||axis.labelHeight==null){for(i=0;i<axis.ticks.length;++i){l=axis.ticks[i].label;if(l){labels.push('<div class="tickLabel">'+l+"</div>")}}if(labels.length>0){var dummyDiv=$('<div style="position:absolute;top:-10000px;font-size:10px">'+labels.join("")+"</div>").appendTo(placeholder);if(axis.labelWidth==null){axis.labelWidth=dummyDiv.width()}if(axis.labelHeight==null){axis.labelHeight=dummyDiv.find("div").height()}dummyDiv.remove()}}}if(axis.labelWidth==null){axis.labelWidth=0}if(axis.labelHeight==null){axis.labelHeight=0}}function setGridSpacing(){var maxOutset=options.grid.borderWidth;for(i=0;i<series.length;++i){maxOutset=Math.max(maxOutset,2*(series[i].points.radius+series[i].points.lineWidth/2))}plotOffset.left=plotOffset.right=plotOffset.top=plotOffset.bottom=maxOutset;var margin=options.grid.labelMargin+options.grid.borderWidth;if(axes.xaxis.labelHeight>0){plotOffset.bottom=Math.max(maxOutset,axes.xaxis.labelHeight+margin)}if(axes.yaxis.labelWidth>0){plotOffset.left=Math.max(maxOutset,axes.yaxis.labelWidth+margin)}if(axes.x2axis.labelHeight>0){plotOffset.top=Math.max(maxOutset,axes.x2axis.labelHeight+margin)}if(axes.y2axis.labelWidth>0){plotOffset.right=Math.max(maxOutset,axes.y2axis.labelWidth+margin)}plotWidth=canvasWidth-plotOffset.left-plotOffset.right;plotHeight=canvasHeight-plotOffset.bottom-plotOffset.top}var axis;for(axis in axes){setRange(axes[axis],options[axis])}if(options.grid.show){for(axis in axes){prepareTickGeneration(axes[axis],options[axis]);setTicks(axes[axis],options[axis]);measureLabels(axes[axis],options[axis])}setGridSpacing()}else{plotOffset.left=plotOffset.right=plotOffset.top=plotOffset.bottom=0;plotWidth=canvasWidth;plotHeight=canvasHeight}for(axis in axes){setTransformationHelpers(axes[axis],options[axis])}if(options.grid.show){insertLabels()}insertLegend()}function setRange(axis,axisOptions){var min=+(axisOptions.min!=null?axisOptions.min:axis.datamin),max=+(axisOptions.max!=null?axisOptions.max:axis.datamax),delta=max-min;if(delta==0){var widen=max==0?1:0.01;if(axisOptions.min==null){min-=widen}if(axisOptions.max==null||axisOptions.min!=null){max+=widen}}else{var margin=axisOptions.autoscaleMargin;if(margin!=null){if(axisOptions.min==null){min-=delta*margin;if(min<0&&axis.datamin!=null&&axis.datamin>=0){min=0}}if(axisOptions.max==null){max+=delta*margin;if(max>0&&axis.datamax!=null&&axis.datamax<=0){max=0}}}}axis.min=min;axis.max=max}function prepareTickGeneration(axis,axisOptions){var noTicks;if(typeof axisOptions.ticks=="number"&&axisOptions.ticks>0){noTicks=axisOptions.ticks}else{if(axis==axes.xaxis||axis==axes.x2axis){noTicks=0.3*Math.sqrt(canvasWidth)}else{noTicks=0.3*Math.sqrt(canvasHeight)}}var delta=(axis.max-axis.min)/noTicks,size,generator,unit,formatter,i,magn,norm;if(axisOptions.mode=="time"){var timeUnitSize={second:1000,minute:60*1000,hour:60*60*1000,day:24*60*60*1000,month:30*24*60*60*1000,year:365.2425*24*60*60*1000};var 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"]];var minSize=0;if(axisOptions.minTickSize!=null){if(typeof axisOptions.tickSize=="number"){minSize=axisOptions.tickSize}else{minSize=axisOptions.minTickSize[0]*timeUnitSize[axisOptions.minTickSize[1]]}}for(i=0;i<spec.length-1;++i){if(delta<(spec[i][0]*timeUnitSize[spec[i][1]]+spec[i+1][0]*timeUnitSize[spec[i+1][1]])/2&&spec[i][0]*timeUnitSize[spec[i][1]]>=minSize){break}}size=spec[i][0];unit=spec[i][1];if(unit=="year"){magn=Math.pow(10,Math.floor(Math.log(delta/timeUnitSize.year)/Math.LN10));norm=(delta/timeUnitSize.year)/magn;if(norm<1.5){size=1}else{if(norm<3){size=2}else{if(norm<7.5){size=5}else{size=10}}}size*=magn}if(axisOptions.tickSize){size=axisOptions.tickSize[0];unit=axisOptions.tickSize[1]}generator=function(axis){var ticks=[],tickSize=axis.tickSize[0],unit=axis.tickSize[1],d=new Date(axis.min);var step=tickSize*timeUnitSize[unit];if(unit=="second"){d.setUTCSeconds(floorInBase(d.getUTCSeconds(),tickSize))}if(unit=="minute"){d.setUTCMinutes(floorInBase(d.getUTCMinutes(),tickSize))}if(unit=="hour"){d.setUTCHours(floorInBase(d.getUTCHours(),tickSize))}if(unit=="month"){d.setUTCMonth(floorInBase(d.getUTCMonth(),tickSize))}if(unit=="year"){d.setUTCFullYear(floorInBase(d.getUTCFullYear(),tickSize))}d.setUTCMilliseconds(0);if(step>=timeUnitSize.minute){d.setUTCSeconds(0)}if(step>=timeUnitSize.hour){d.setUTCMinutes(0)}if(step>=timeUnitSize.day){d.setUTCHours(0)}if(step>=timeUnitSize.day*4){d.setUTCDate(1)}if(step>=timeUnitSize.year){d.setUTCMonth(0)}var carry=0,v=Number.NaN,prev;do{prev=v;v=d.getTime();ticks.push({v:v,label:axis.tickFormatter(v,axis)});if(unit=="month"){if(tickSize<1){d.setUTCDate(1);var start=d.getTime();d.setUTCMonth(d.getUTCMonth()+1);var end=d.getTime();d.setTime(v+carry*timeUnitSize.hour+(end-start)*tickSize);carry=d.getUTCHours();d.setUTCHours(0)}else{d.setUTCMonth(d.getUTCMonth()+tickSize)}}else{if(unit=="year"){d.setUTCFullYear(d.getUTCFullYear()+tickSize)}else{d.setTime(v+step)}}}while(v<axis.max&&v!=prev);return ticks};formatter=function(v,axis){var d=new Date(v);if(axisOptions.timeformat!=null){return $.plot.formatDate(d,axisOptions.timeformat,axisOptions.monthNames)}var t=axis.tickSize[0]*timeUnitSize[axis.tickSize[1]];var span=axis.max-axis.min;var suffix=(axisOptions.twelveHourClock)?" %p":"";if(t<timeUnitSize.minute){fmt="%h:%M:%S"+suffix}else{if(t<timeUnitSize.day){if(span<2*timeUnitSize.day){fmt="%h:%M"+suffix}else{fmt="%b %d %h:%M"+suffix}}else{if(t<timeUnitSize.month){fmt="%b %d"}else{if(t<timeUnitSize.year){if(span<timeUnitSize.year){fmt="%b"}else{fmt="%b %y"}}else{fmt="%y"}}}}return $.plot.formatDate(d,fmt,axisOptions.monthNames)}}else{var maxDec=axisOptions.tickDecimals;var dec=-Math.floor(Math.log(delta)/Math.LN10);if(maxDec!=null&&dec>maxDec){dec=maxDec}magn=Math.pow(10,-dec);norm=delta/magn;if(norm<1.5){size=1}else{if(norm<3){size=2;if(norm>2.25&&(maxDec==null||dec+1<=maxDec)){size=2.5;++dec}}else{if(norm<7.5){size=5}else{size=10}}}size*=magn;if(axisOptions.minTickSize!=null&&size<axisOptions.minTickSize){size=axisOptions.minTickSize}if(axisOptions.tickSize!=null){size=axisOptions.tickSize}axis.tickDecimals=Math.max(0,(maxDec!=null)?maxDec:dec);generator=function(axis){var ticks=[];var start=floorInBase(axis.min,axis.tickSize),i=0,v=Number.NaN,prev;do{prev=v;v=start+i*axis.tickSize;ticks.push({v:v,label:axis.tickFormatter(v,axis)});++i}while(v<axis.max&&v!=prev);return ticks};formatter=function(v,axis){return v.toFixed(axis.tickDecimals)}}axis.tickSize=unit?[size,unit]:size;axis.tickGenerator=generator;if($.isFunction(axisOptions.tickFormatter)){axis.tickFormatter=function(v,axis){return""+axisOptions.tickFormatter(v,axis)}}else{axis.tickFormatter=formatter}if($.isFunction(axisOptions.endValueFormatter)){axis.endValueFormatter=function(v,axis){return""+axisOptions.endValueFormatter(v,axis)}}else{axis.endValueFormatter=formatter}}function setTicks(axis,axisOptions){axis.ticks=[];if(!axis.used){return}if(axisOptions.ticks==null){axis.ticks=axis.tickGenerator(axis)}else{if(typeof axisOptions.ticks=="number"){if(axisOptions.ticks>0){axis.ticks=axis.tickGenerator(axis)}}else{if(axisOptions.ticks){var ticks=axisOptions.ticks;if($.isFunction(ticks)){ticks=ticks({min:axis.min,max:axis.max})}var i,v;for(i=0;i<ticks.length;++i){var label=null;var t=ticks[i];if(typeof t=="object"){v=t[0];if(t.length>1){label=t[1]}}else{v=t}if(label==null){label=axis.tickFormatter(v,axis)}axis.ticks[i]={v:v,label:label}}}}}if(axisOptions.autoscaleMargin!=null&&axis.ticks.length>0){if(axisOptions.min==null){axis.min=Math.min(axis.min,axis.ticks[0].v)}if(axisOptions.max==null&&axis.ticks.length>1){axis.max=Math.max(axis.max,axis.ticks[axis.ticks.length-1].v)}}}function draw(){ctx.clearRect(0,0,canvasWidth,canvasHeight);var grid=options.grid;if(grid.show&&!grid.aboveData){drawGrid()}for(var i=0;i<series.length;++i){drawSeries(series[i])}executeHooks(hooks.draw,[ctx]);if(grid.show&&grid.aboveData){drawGrid()}}function extractRange(ranges,coord){var firstAxis=coord+"axis",secondaryAxis=coord+"2axis",axis,from,to,reverse;if(ranges[firstAxis]){axis=axes[firstAxis];from=ranges[firstAxis].from;to=ranges[firstAxis].to}else{if(ranges[secondaryAxis]){axis=axes[secondaryAxis];from=ranges[secondaryAxis].from;to=ranges[secondaryAxis].to}else{axis=axes[firstAxis];from=ranges[coord+"1"];to=ranges[coord+"2"]}}if(from!=null&&to!=null&&from>to){return{from:to,to:from,axis:axis}}return{from:from,to:to,axis:axis}}function drawGrid(){var i;ctx.save();ctx.translate(plotOffset.left,plotOffset.top);if(options.grid.backgroundColor){ctx.fillStyle=getColorOrGradient(options.grid.backgroundColor,plotHeight,0,"rgba(255, 255, 255, 0)");ctx.fillRect(0,0,plotWidth,plotHeight)}var markings=options.grid.markings;if(markings){if($.isFunction(markings)){markings=markings({xmin:axes.xaxis.min,xmax:axes.xaxis.max,ymin:axes.yaxis.min,ymax:axes.yaxis.max,xaxis:axes.xaxis,yaxis:axes.yaxis,x2axis:axes.x2axis,y2axis:axes.y2axis})}for(i=0;i<markings.length;++i){var m=markings[i],xrange=extractRange(m,"x"),yrange=extractRange(m,"y");if(xrange.from==null){xrange.from=xrange.axis.min}if(xrange.to==null){xrange.to=xrange.axis.max}if(yrange.from==null){yrange.from=yrange.axis.min}if(yrange.to==null){yrange.to=yrange.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(xrange.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.axis.max);if(xrange.from==xrange.to&&yrange.from==yrange.to){continue}xrange.from=xrange.axis.p2c(xrange.from);xrange.to=xrange.axis.p2c(xrange.to);yrange.from=yrange.axis.p2c(yrange.from);yrange.to=yrange.axis.p2c(yrange.to);if(xrange.from==xrange.to||yrange.from==yrange.to){ctx.beginPath();ctx.strokeStyle=m.color||options.grid.markingsColor;ctx.lineWidth=m.lineWidth||options.grid.markingsLineWidth;ctx.moveTo(xrange.from,yrange.from);ctx.lineTo(xrange.to,yrange.to);ctx.stroke()}else{ctx.fillStyle=m.color||options.grid.markingsColor;ctx.fillRect(xrange.from,yrange.to,xrange.to-xrange.from,yrange.from-yrange.to)}}}ctx.lineWidth=1;ctx.strokeStyle=options.grid.tickColor;ctx.beginPath();var v,axis=axes.xaxis;for(i=0;i<axis.ticks.length;++i){v=axis.ticks[i].v;if(v<=axis.min||v>=axes.xaxis.max){continue}ctx.moveTo(Math.floor(axis.p2c(v))+ctx.lineWidth/2,0);ctx.lineTo(Math.floor(axis.p2c(v))+ctx.lineWidth/2,plotHeight)}axis=axes.yaxis;for(i=0;i<axis.ticks.length;++i){v=axis.ticks[i].v;if(v<=axis.min||v>=axis.max){continue}ctx.moveTo(0,Math.floor(axis.p2c(v))+ctx.lineWidth/2);ctx.lineTo(plotWidth,Math.floor(axis.p2c(v))+ctx.lineWidth/2)}axis=axes.x2axis;for(i=0;i<axis.ticks.length;++i){v=axis.ticks[i].v;if(v<=axis.min||v>=axis.max){continue}ctx.moveTo(Math.floor(axis.p2c(v))+ctx.lineWidth/2,-5);ctx.lineTo(Math.floor(axis.p2c(v))+ctx.lineWidth/2,5)}axis=axes.y2axis;for(i=0;i<axis.ticks.length;++i){v=axis.ticks[i].v;if(v<=axis.min||v>=axis.max){continue}ctx.moveTo(plotWidth-5,Math.floor(axis.p2c(v))+ctx.lineWidth/2);ctx.lineTo(plotWidth+5,Math.floor(axis.p2c(v))+ctx.lineWidth/2)}ctx.stroke();if(options.grid.borderWidth){var bw=options.grid.borderWidth;ctx.lineWidth=bw;ctx.strokeStyle=options.grid.borderColor;ctx.strokeRect(-bw/2,-bw/2,plotWidth+bw,plotHeight+bw)}ctx.restore()}function insertLabels(){placeholder.find(".tickLabels").remove();var html=['<div class="tickLabels" style="font-size:10px;color:'+options.grid.color+'">'];function addLabels(axis,labelGenerator){for(var i=0;i<axis.ticks.length;++i){var tick=axis.ticks[i];if(!tick.label||tick.v<axis.min||tick.v>axis.max){continue}html.push(labelGenerator(tick,axis))}}var margin=options.grid.labelMargin+options.grid.borderWidth;addLabels(axes.xaxis,function(tick,axis){return'<div style="position:absolute;top:'+(plotOffset.top+plotHeight+margin)+"px;left:"+Math.round(plotOffset.left+axis.p2c(tick.v)-axis.labelWidth/2)+"px;width:"+axis.labelWidth+'px;text-align:center" class="tickLabel x">'+tick.label+"</div>"});addLabels(axes.yaxis,function(tick,axis){return'<div style="position:absolute;top:'+Math.round(plotOffset.top+axis.p2c(tick.v)-axis.labelHeight/2)+"px;right:"+(plotOffset.right+plotWidth+margin)+"px;width:"+axis.labelWidth+'px;text-align:right" class="tickLabel y">'+tick.label+"</div>"});addLabels(axes.x2axis,function(tick,axis){return'<div style="position:absolute;bottom:'+(plotOffset.bottom+plotHeight+margin)+"px;left:"+Math.round(plotOffset.left+axis.p2c(tick.v)-axis.labelWidth/2)+"px;width:"+axis.labelWidth+'px;text-align:center" class="tickLabel">'+tick.label+"</div>"});addLabels(axes.y2axis,function(tick,axis){return'<div style="position:absolute;top:'+Math.round(plotOffset.top+axis.p2c(tick.v)-axis.labelHeight/2)+"px;left:"+(plotOffset.left+plotWidth+margin)+"px;width:"+axis.labelWidth+'px;text-align:left" class="tickLabel">'+tick.label+"</div>"});html.push("</div>");placeholder.append(html.join(""))}function drawSeries(series){if(series.lines.show){drawSeriesLines(series)}if(series.bars.show){drawSeriesBars(series)}if(series.points.show){drawSeriesPoints(series)}if(series.showEndValue==true){var top=series.yaxis.p2c(series.data[series.data.length-1][1]);var ev_width=series.endValueWidth;top=findEndValueEquilibrium(top);end_value="<div class='end_value' style='position:absolute;top:"+top+"px;right:-"+ev_width+"px;width:"+ev_width+"px;'><span style='float:left;margin-right:5px;display:block;width:10px;height:10px;padding:0;position:relative;top:0;left:0;background-color:"+series.color+"'></span> "+series.yaxis.endValueFormatter(series.data[series.data.length-1][1],series.yaxis)+"</div>";$(placeholder).append(end_value)}}function findEndValueEquilibrium(endValue){var minDistance=14;var min=0-minDistance/2;var max=minDistance/2;$(".end_value").each(function(){var curr_top=$(this).position().top;diff=curr_top-endValue;if(diff<max&&diff>min){if(diff>0){$(this).css("top",(curr_top+minDistance/2)+"px");endValue-=minDistance/2}else{$(this).css("top",(curr_top-minDistance/2)+"px");endValue+=minDistance/2}return findEndValueEquilibrium(endValue)}});return endValue}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=points[i-ps],y1=points[i-ps+1],x2=points[i],y2=points[i+1];if(x1==null||x2==null){continue}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(y2>axisy.max){continue}x1=(axisy.max-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.max}else{if(y2>=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.min){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)+xoffset,axisy.p2c(y1)+yoffset)}prevx=x2;prevy=y2;ctx.lineTo(axisx.p2c(x2)+xoffset,axisy.p2c(y2)+yoffset)}ctx.stroke()}function plotLineArea(datapoints,axisx,axisy){var points=datapoints.points,ps=datapoints.pointsize,bottom=Math.min(Math.max(0,axisy.min),axisy.max),top,lastX=0,areaOpen=false;for(var i=ps;i<points.length;i+=ps){var x1=points[i-ps],y1=points[i-ps+1],x2=points[i],y2=points[i+1];if(areaOpen&&x1!=null&&x2==null){ctx.lineTo(axisx.p2c(lastX),axisy.p2c(bottom));ctx.fill();areaOpen=false;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<axisx.min){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(!areaOpen){ctx.beginPath();ctx.moveTo(axisx.p2c(x1),axisy.p2c(bottom));areaOpen=true}if(y1>=axisy.max&&y2>=axisy.max){ctx.lineTo(axisx.p2c(x1),axisy.p2c(axisy.max));ctx.lineTo(axisx.p2c(x2),axisy.p2c(axisy.max));lastX=x2;continue}else{if(y1<=axisy.min&&y2<=axisy.min){ctx.lineTo(axisx.p2c(x1),axisy.p2c(axisy.min));ctx.lineTo(axisx.p2c(x2),axisy.p2c(axisy.min));lastX=x2;continue}}var x1old=x1,x2old=x2;if(y1<=y2&&y1<axisy.min&&y2>=axisy.min){x1=(axisy.min-y1)/(y2-y1)*(x2-x1)+x1;y1=axisy.min}else{if(y2<=y1&&y2<axisy.min&&y1>=axisy.min){x2=(axisy.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){if(y1<=axisy.min){top=axisy.min}else{top=axisy.max}ctx.lineTo(axisx.p2c(x1old),axisy.p2c(top));ctx.lineTo(axisx.p2c(x1),axisy.p2c(top))}ctx.lineTo(axisx.p2c(x1),axisy.p2c(y1));ctx.lineTo(axisx.p2c(x2),axisy.p2c(y2));if(x2!=x2old){if(y2<=axisy.min){top=axisy.min}else{top=axisy.max}ctx.lineTo(axisx.p2c(x2),axisy.p2c(top));ctx.lineTo(axisx.p2c(x2old),axisy.p2c(top))}lastX=Math.max(x2,x2old)}if(areaOpen){ctx.lineTo(axisx.p2c(lastX),axisy.p2c(bottom));ctx.fill()}}ctx.save();ctx.translate(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.lineWidth=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.color;var fillStyle=getFillStyle(series.lines,series.color,0,plotHeight);if(fillStyle){ctx.fillStyle=fillStyle;plotLineArea(series.datapoints,series.xaxis,series.yaxis)}if(lw>0){plotLine(series.datapoints,0,0,series.xaxis,series.yaxis)}ctx.restore()}function drawSeriesPoints(series){function plotPoints(datapoints,radius,fillStyle,offset,circumference,axisx,axisy){var points=datapoints.points,ps=datapoints.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.beginPath();ctx.arc(axisx.p2c(x),axisy.p2c(y)+offset,radius,0,circumference,false);if(fillStyle){ctx.fillStyle=fillStyle;ctx.fill()}ctx.stroke()}}ctx.save();ctx.translate(plotOffset.left,plotOffset.top);var lw=series.lines.lineWidth,sw=series.shadowSize,radius=series.points.radius;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,Math.PI,series.xaxis,series.yaxis);ctx.strokeStyle="rgba(0,0,0,0.2)";plotPoints(series.datapoints,radius,null,w/2,Math.PI,series.xaxis,series.yaxis)}ctx.lineWidth=lw;ctx.strokeStyle=series.color;plotPoints(series.datapoints,radius,getFillStyle(series.points,series.color),0,2*Math.PI,series.xaxis,series.yaxis);ctx.restore()}function drawBar(x,y,b,barLeft,barRight,offset,fillStyleCallback,axisx,axisy,c,horizontal){var left,right,bottom,top,drawLeft,drawRight,drawTop,drawBottom,tmp;if(horizontal){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;left=x+barLeft;right=x+barRight;bottom=b;top=y;if(top<bottom){tmp=top;top=bottom;bottom=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=false}if(right>axisx.max){right=axisx.max;drawRight=false}if(bottom<axisy.min){bottom=axisy.min;drawBottom=false}if(top>axisy.max){top=axisy.max;drawTop=false}left=axisx.p2c(left);bottom=axisy.p2c(bottom);right=axisx.p2c(right);top=axisy.p2c(top);if(fillStyleCallback){c.beginPath();c.moveTo(left,bottom);c.lineTo(left,top);c.lineTo(right,top);c.lineTo(right,bottom);c.fillStyle=fillStyleCallback(bottom,top);c.fill()}if(drawLeft||drawRight||drawTop||drawBottom){c.beginPath();c.moveTo(left,bottom+offset);if(drawLeft){c.lineTo(left,top+offset)}else{c.moveTo(left,top+offset)}if(drawTop){c.lineTo(right,top+offset)}else{c.moveTo(right,top+offset)}if(drawRight){c.lineTo(right,bottom+offset)}else{c.moveTo(right,bottom+offset)}if(drawBottom){c.lineTo(left,bottom+offset)}else{c.moveTo(left,bottom+offset)}c.stroke()}}function drawSeriesBars(series){function plotBars(datapoints,barLeft,barRight,offset,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,offset,fillStyleCallback,axisx,axisy,ctx,series.bars.horizontal)}}ctx.save();ctx.translate(plotOffset.left,plotOffset.top);ctx.lineWidth=series.bars.lineWidth;ctx.strokeStyle=series.color;var barLeft=series.bars.align=="left"?0:-series.bars.barWidth/2;var fillStyleCallback=series.bars.fill?function(bottom,top){return getFillStyle(series.bars,series.color,bottom,top)}:null;plotBars(series.datapoints,barLeft,barLeft+series.bars.barWidth,0,fillStyleCallback,series.xaxis,series.yaxis);ctx.restore()}function getFillStyle(filloptions,seriesColor,bottom,top){var fill=filloptions.fill;if(!fill){return null}if(filloptions.fillColor){return getColorOrGradient(filloptions.fillColor,bottom,top,seriesColor)}var c=$.color.parse(seriesColor);c.a=typeof fill=="number"?fill:0.4;c.normalize();return c.toString()}function insertLegend(){placeholder.find(".legend").remove();if(!options.legend.show){return}var fragments=[],rowStarted=false,lf=options.legend.labelFormatter,s,label;for(i=0;i<series.length;++i){s=series[i];label=s.label;if(!label){continue}if(i%options.legend.noColumns==0){if(rowStarted){fragments.push("</tr>")}fragments.push("<tr>");rowStarted=true}if(lf){label=lf(label,s)}fragments.push('<td class="legendColorBox"><div style="border:1px solid '+options.legend.labelBoxBorderColor+';padding:1px"><div style="width:4px;height:0;border:5px solid '+s.color+';overflow:hidden"></div></div></td><td class="legendLabel">'+label+"</td>")}if(rowStarted){fragments.push("</tr>")}if(fragments.length==0){return}var table='<table style="font-size:10px;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('style="','style="position:absolute;'+pos+";")+"</div>").appendTo(placeholder);if(options.legend.backgroundOpacity!=0){var c=options.legend.backgroundColor;if(c==null){c=options.grid.backgroundColor;if(c&&typeof c=="string"){c=$.color.parse(c)}else{c=$.color.extract(legend,"background-color")}c.a=1;c=c.toString()}var div=legend.children();$('<div style="position:absolute;width:'+div.width()+"px;height:"+div.height()+"px;"+pos+"background-color:"+c+';"> </div>').prependTo(legend).css("opacity",options.legend.backgroundOpacity)}}}var highlights=[],redrawTimeout=null;function findNearbyItem(mouseX,mouseY,seriesFilter){var maxDistance=options.grid.mouseActiveRadius,smallestDistance=maxDistance*maxDistance+1,item=null,foundPoint=false,i,j;for(i=0;i<series.length;++i){if(!seriesFilter(series[i])){continue}var s=series[i],axisx=s.xaxis,axisy=s.yaxis,points=s.datapoints.points,ps=s.datapoints.pointsize,mx=axisx.c2p(mouseX),my=axisy.c2p(mouseY),maxx=maxDistance/axisx.scale,maxy=maxDistance/axisy.scale;if(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),dist=dx*dx+dy*dy;if(dist<=smallestDistance){smallestDistance=dist;item=[i,j/ps]}}}if(s.bars.show&&!item){var barLeft=s.bars.align=="left"?0:-s.bars.barWidth/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.horizontal?(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]}}}}if(item){i=item[0];j=item[1];ps=series[i].datapoints.pointsize;return{datapoint:series[i].datapoints.points.slice(j*ps,(j+1)*ps),dataIndex:j,series:series[i],seriesIndex:i}}return null}function onMouseMove(e){if(options.grid.hoverable){triggerClickHoverEvent("plothover",e,function(s){return s.hoverable!=false})}}function onClick(e){triggerClickHoverEvent("plotclick",e,function(s){return s.clickable!=false})}function triggerClickHoverEvent(eventname,event,seriesFilter){var offset=eventHolder.offset(),pos={pageX:event.pageX,pageY:event.pageY},canvasX=event.pageX-offset.left-plotOffset.left,canvasY=event.pageY-offset.top-plotOffset.top;if(axes.xaxis.used){pos.x=axes.xaxis.c2p(canvasX)}if(axes.yaxis.used){pos.y=axes.yaxis.c2p(canvasY)}if(axes.x2axis.used){pos.x2=axes.x2axis.c2p(canvasX)}if(axes.y2axis.used){pos.y2=axes.y2axis.c2p(canvasY)}var item=findNearbyItem(canvasX,canvasY,seriesFilter);if(item){item.pageX=parseInt(item.series.xaxis.p2c(item.datapoint[0])+offset.left+plotOffset.left);item.pageY=parseInt(item.series.yaxis.p2c(item.datapoint[1])+offset.top+plotOffset.top)}if(options.grid.autoHighlight){for(var i=0;i<highlights.length;++i){var h=highlights[i];if(h.auto==eventname&&!(item&&h.series==item.series&&h.point==item.datapoint)){unhighlight(h.series,h.point)}}if(item){highlight(item.series,item.datapoint,eventname)}}placeholder.trigger(eventname,[pos,item])}function triggerRedrawOverlay(){if(!redrawTimeout){redrawTimeout=setTimeout(drawOverlay,30)}}function drawOverlay(){redrawTimeout=null;octx.save();octx.clearRect(0,0,canvasWidth,canvasHeight);octx.translate(plotOffset.left,plotOffset.top);var i,hi;for(i=0;i<highlights.length;++i){hi=highlights[i];if(hi.series.bars.show){drawBarHighlight(hi.series,hi.point)}else{drawPointHighlight(hi.series,hi.point)}}octx.restore();executeHooks(hooks.drawOverlay,[octx])}function highlight(s,point,auto){if(typeof s=="number"){s=series[s]}if(typeof point=="number"){point=s.data[point]}var i=indexOfHighlight(s,point);if(i==-1){highlights.push({series:s,point:point,auto:auto});triggerRedrawOverlay()}else{if(!auto){highlights[i].auto=false}}}function unhighlight(s,point){if(s==null&&point==null){highlights=[];triggerRedrawOverlay()}if(typeof s=="number"){s=series[s]}if(typeof point=="number"){point=s.data[point]}var i=indexOfHighlight(s,point);if(i!=-1){highlights.splice(i,1);triggerRedrawOverlay()}}function indexOfHighlight(s,p){for(var i=0;i<highlights.length;++i){var h=highlights[i];if(h.series==s&&h.point[0]==p[0]&&h.point[1]==p[1]){return i}}return -1}function drawPointHighlight(series,point){var x=point[0],y=point[1],axisx=series.xaxis,axisy=series.yaxis;if(x<axisx.min||x>axisx.max||y<axisy.min||y>axisy.max){return}var pointRadius=series.points.radius+series.points.lineWidth/2;octx.lineWidth=pointRadius;octx.strokeStyle=$.color.parse(series.color).scale("a",0.5).toString();var radius=1.5*pointRadius;octx.beginPath();octx.arc(axisx.p2c(x),axisy.p2c(y),radius,0,2*Math.PI,false);octx.stroke()}function drawBarHighlight(series,point){octx.lineWidth=series.bars.lineWidth;octx.strokeStyle=$.color.parse(series.color).scale("a",0.5).toString();var fillStyle=$.color.parse(series.color).scale("a",0.5).toString();var barLeft=series.bars.align=="left"?0:-series.bars.barWidth/2;drawBar(point[0],point[1],point[2]||0,barLeft,barLeft+series.bars.barWidth,0,function(){return fillStyle},series.xaxis,series.yaxis,octx,series.bars.horizontal)}function getColorOrGradient(spec,bottom,top,defaultColor){if(typeof spec=="string"){return spec}else{var gradient=ctx.createLinearGradient(0,top,0,bottom);for(var i=0,l=spec.colors.length;i<l;++i){var c=spec.colors[i];if(typeof c!="string"){c=$.color.parse(defaultColor).scale("rgb",c.brightness);c.a*=c.opacity;c=c.toString()}gradient.addColorStop(i/(l-1),c)}return gradient}}}$.plot=function(placeholder,data,options){var plot=new Plot($(placeholder),data,options,$.plot.plugins);return plot};$.plot.plugins=[];$.plot.formatDate=function(d,fmt,monthNames){var leftPad=function(n){n=""+n;return n.length==1?"0"+n:n};var r=[];var escape=false;var hours=d.getUTCHours();var isAM=hours<12;if(monthNames==null){monthNames=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}if(fmt.search(/%p|%P/)!=-1){if(hours>12){hours=hours-12}else{if(hours==0){hours=12}}}for(var i=0;i<fmt.length;++i){var c=fmt.charAt(i);if(escape){switch(c){case"h":c=""+hours;break;case"H":c=leftPad(hours);break;case"M":c=leftPad(d.getUTCMinutes());break;case"S":c=leftPad(d.getUTCSeconds());break;case"d":c=""+d.getUTCDate();break;case"m":c=""+(d.getUTCMonth()+1);break;case"y":c=""+d.getUTCFullYear();break;case"b":c=""+monthNames[d.getUTCMonth()];break;case"p":c=(isAM)?("am"):("pm");break;case"P":c=(isAM)?("AM"):("PM");break}r.push(c);escape=false}else{if(c=="%"){escape=true}else{r.push(c)}}}return r.join("")};function floorInBase(n,base){return base*Math.floor(n/base)}})(jQuery);(function($){function init(plot){var canvas=null;var target=null;var maxRadius=null;var centerLeft=null;var centerTop=null;var total=0;var redraw=true;var redrawAttempts=10;var shrink=0.95;var legendWidth=0;var processed=false;var raw=false;var highlights=[];plot.hooks.processOptions.push(checkPieEnabled);plot.hooks.bindEvents.push(bindEvents);function checkPieEnabled(plot,options){if(options.series.pie.show){options.grid.show=false;if(options.series.pie.label.show=="auto"){if(options.legend.show){options.series.pie.label.show=false}else{options.series.pie.label.show=true}}if(options.series.pie.radius=="auto"){if(options.series.pie.label.show){options.series.pie.radius=3/4}else{options.series.pie.radius=1}}if(options.series.pie.tilt>1){options.series.pie.tilt=1}if(options.series.pie.tilt<0){options.series.pie.tilt=0}plot.hooks.processDatapoints.push(processDatapoints);plot.hooks.drawOverlay.push(drawOverlay);plot.hooks.draw.push(draw)}}function bindEvents(plot,eventHolder){var options=plot.getOptions();if(options.series.pie.show&&options.grid.hoverable){eventHolder.unbind("mousemove").mousemove(onMouseMove)}if(options.series.pie.show&&options.grid.clickable){eventHolder.unbind("click").click(onClick)}}function alertObject(obj){var msg="";function traverse(obj,depth){if(!depth){depth=0}for(var i=0;i<obj.length;++i){for(var j=0;j<depth;j++){msg+="\t"}if(typeof obj[i]=="object"){msg+=""+i+":\n";traverse(obj[i],depth+1)}else{msg+=""+i+": "+obj[i]+"\n"}}}traverse(obj);alert(msg)}function calcTotal(data){for(var i=0;i<data.length;++i){var item=parseFloat(data[i].data[0][1]);if(item){total+=item}}}function processDatapoints(plot,series,data,datapoints){if(!processed){processed=true;canvas=plot.getCanvas();target=$(canvas).parent();options=plot.getOptions();plot.setData(combine(plot.getData()))}}function setupPie(){legendWidth=target.children().filter(".legend").children().width();maxRadius=Math.min(canvas.width,(canvas.height/options.series.pie.tilt))/2;centerTop=(canvas.height/2)+options.series.pie.offset.top;centerLeft=(canvas.width/2);if(options.series.pie.offset.left=="auto"){if(options.legend.position.match("w")){centerLeft+=legendWidth/2}else{centerLeft-=legendWidth/2}}else{centerLeft+=options.series.pie.offset.left}if(centerLeft<maxRadius){centerLeft=maxRadius}else{if(centerLeft>canvas.width-maxRadius){centerLeft=canvas.width-maxRadius}}}function fixData(data){for(var i=0;i<data.length;++i){if(typeof(data[i].data)=="number"){data[i].data=[[1,data[i].data]]}else{if(typeof(data[i].data)=="undefined"||typeof(data[i].data[0])=="undefined"){if(typeof(data[i].data)!="undefined"&&typeof(data[i].data.label)!="undefined"){data[i].label=data[i].data.label}data[i].data=[[1,0]]}}}return data}function combine(data){data=fixData(data);calcTotal(data);var combined=0;var numCombined=0;var color=options.series.pie.combine.color;var newdata=[];for(var i=0;i<data.length;++i){data[i].data[0][1]=parseFloat(data[i].data[0][1]);if(!data[i].data[0][1]){data[i].data[0][1]=0}if(data[i].data[0][1]/total<=options.series.pie.combine.threshold){combined+=data[i].data[0][1];numCombined++;if(!color){color=data[i].color}}else{newdata.push({data:[[1,data[i].data[0][1]]],color:data[i].color,label:data[i].label,angle:(data[i].data[0][1]*(Math.PI*2))/total,percent:(data[i].data[0][1]/total*100)})}}if(numCombined>0){newdata.push({data:[[1,combined]],color:color,label:options.series.pie.combine.label,angle:(combined*(Math.PI*2))/total,percent:(combined/total*100)})}return newdata}function draw(plot,newCtx){if(!target){return}ctx=newCtx;setupPie();var slices=plot.getData();var attempts=0;while(redraw&&attempts<redrawAttempts){redraw=false;if(attempts>0){maxRadius*=shrink}attempts+=1;clear();if(options.series.pie.tilt<=0.8){drawShadow()}drawPie()}if(attempts>=redrawAttempts){clear();target.prepend('<div class="error">Could not draw pie with labels contained inside canvas</div>')}if(plot.setSeries&&plot.insertLegend){plot.setSeries(slices);plot.insertLegend()}function clear(){ctx.clearRect(0,0,canvas.width,canvas.height);target.children().filter(".pieLabel, .pieLabelBackground").remove()}function drawShadow(){var shadowLeft=5;var shadowTop=15;var edge=10;var alpha=0.02;if(options.series.pie.radius>1){var radius=options.series.pie.radius}else{var radius=maxRadius*options.series.pie.radius}if(radius>=(canvas.width/2)-shadowLeft||radius*options.series.pie.tilt>=(canvas.height/2)-shadowTop||radius<=edge){return}ctx.save();ctx.translate(shadowLeft,shadowTop);ctx.globalAlpha=alpha;ctx.fillStyle="#000";ctx.translate(centerLeft,centerTop);ctx.scale(1,options.series.pie.tilt);for(var i=1;i<=edge;i++){ctx.beginPath();ctx.arc(0,0,radius,0,Math.PI*2,false);ctx.fill();radius-=i}ctx.restore()}function drawPie(){startAngle=Math.PI*options.series.pie.startAngle;if(options.series.pie.radius>1){var radius=options.series.pie.radius}else{var radius=maxRadius*options.series.pie.radius}ctx.save();ctx.translate(centerLeft,centerTop);ctx.scale(1,options.series.pie.tilt);ctx.save();var currentAngle=startAngle;for(var i=0;i<slices.length;++i){slices[i].startAngle=currentAngle;drawSlice(slices[i].angle,slices[i].color,true)}ctx.restore();ctx.save();ctx.lineWidth=options.series.pie.stroke.width;currentAngle=startAngle;for(var i=0;i<slices.length;++i){drawSlice(slices[i].angle,options.series.pie.stroke.color,false)}ctx.restore();drawDonutHole(ctx);if(options.series.pie.label.show){drawLabels()}ctx.restore();function drawSlice(angle,color,fill){if(angle<=0){return}if(fill){ctx.fillStyle=color}else{ctx.strokeStyle=color;ctx.lineJoin="round"}ctx.beginPath();if(angle!=Math.PI*2){ctx.moveTo(0,0)}else{if($.browser.msie){angle-=0.0001}}ctx.arc(0,0,radius,currentAngle,currentAngle+angle,false);ctx.closePath();currentAngle+=angle;if(fill){ctx.fill()}else{ctx.stroke()}}function drawLabels(){var currentAngle=startAngle;if(options.series.pie.label.radius>1){var radius=options.series.pie.label.radius}else{var radius=maxRadius*options.series.pie.label.radius}for(var i=0;i<slices.length;++i){if(slices[i].percent>=options.series.pie.label.threshold*100){drawLabel(slices[i],currentAngle,i)}currentAngle+=slices[i].angle}function drawLabel(slice,startAngle,index){if(slice.data[0][1]==0){return}var lf=options.legend.labelFormatter,text,plf=options.series.pie.label.formatter;if(lf){text=lf(slice.label,slice)}else{text=slice.label}if(plf){text=plf(text,slice)}var halfAngle=((startAngle+slice.angle)+startAngle)/2;var x=centerLeft+Math.round(Math.cos(halfAngle)*radius);var y=centerTop+Math.round(Math.sin(halfAngle)*radius)*options.series.pie.tilt;var html='<span class="pieLabel" id="pieLabel'+index+'" style="position:absolute;top:'+y+"px;left:"+x+'px;">'+text+"</span>";target.append(html);var label=target.children("#pieLabel"+index);var labelTop=(y-label.height()/2);var labelLeft=(x-label.width()/2);label.css("top",labelTop);label.css("left",labelLeft);if(0-labelTop>0||0-labelLeft>0||canvas.height-(labelTop+label.height())<0||canvas.width-(labelLeft+label.width())<0){redraw=true}if(options.series.pie.label.background.opacity!=0){var c=options.series.pie.label.background.color;if(c==null){c=slice.color}var pos="top:"+labelTop+"px;left:"+labelLeft+"px;";$('<div class="pieLabelBackground" style="position:absolute;width:'+label.width()+"px;height:"+label.height()+"px;"+pos+"background-color:"+c+';"> </div>').insertBefore(label).css("opacity",options.series.pie.label.background.opacity)}}}}}function drawDonutHole(layer){if(options.series.pie.innerRadius>0){layer.save();innerRadius=options.series.pie.innerRadius>1?options.series.pie.innerRadius:maxRadius*options.series.pie.innerRadius;layer.globalCompositeOperation="destination-out";layer.beginPath();layer.fillStyle=options.series.pie.stroke.color;layer.arc(0,0,innerRadius,0,Math.PI*2,false);layer.fill();layer.closePath();layer.restore();layer.save();layer.beginPath();layer.strokeStyle=options.series.pie.stroke.color;layer.arc(0,0,innerRadius,0,Math.PI*2,false);layer.stroke();layer.closePath();layer.restore()}}function isPointInPoly(poly,pt){for(var c=false,i=-1,l=poly.length,j=l-1;++i<l;j=i){((poly[i][1]<=pt[1]&&pt[1]<poly[j][1])||(poly[j][1]<=pt[1]&&pt[1]<poly[i][1]))&&(pt[0]<(poly[j][0]-poly[i][0])*(pt[1]-poly[i][1])/(poly[j][1]-poly[i][1])+poly[i][0])&&(c=!c)}return c}function findNearbySlice(mouseX,mouseY){var slices=plot.getData(),options=plot.getOptions(),radius=options.series.pie.radius>1?options.series.pie.radius:maxRadius*options.series.pie.radius;for(var i=0;i<slices.length;++i){var s=slices[i];if(s.pie.show){ctx.save();ctx.beginPath();ctx.moveTo(0,0);ctx.arc(0,0,radius,s.startAngle,s.startAngle+s.angle,false);ctx.closePath();x=mouseX-centerLeft;y=mouseY-centerTop;if(ctx.isPointInPath){if(ctx.isPointInPath(mouseX-centerLeft,mouseY-centerTop)){ctx.restore();return{datapoint:[s.percent,s.data],dataIndex:0,series:s,seriesIndex:i}}}else{p1X=(radius*Math.cos(s.startAngle));p1Y=(radius*Math.sin(s.startAngle));p2X=(radius*Math.cos(s.startAngle+(s.angle/4)));p2Y=(radius*Math.sin(s.startAngle+(s.angle/4)));p3X=(radius*Math.cos(s.startAngle+(s.angle/2)));p3Y=(radius*Math.sin(s.startAngle+(s.angle/2)));p4X=(radius*Math.cos(s.startAngle+(s.angle/1.5)));p4Y=(radius*Math.sin(s.startAngle+(s.angle/1.5)));p5X=(radius*Math.cos(s.startAngle+s.angle));p5Y=(radius*Math.sin(s.startAngle+s.angle));arrPoly=[[0,0],[p1X,p1Y],[p2X,p2Y],[p3X,p3Y],[p4X,p4Y],[p5X,p5Y]];arrPoint=[x,y];if(isPointInPoly(arrPoly,arrPoint)){ctx.restore();return{datapoint:[s.percent,s.data],dataIndex:0,series:s,seriesIndex:i}}}ctx.restore()}}return null}function onMouseMove(e){triggerClickHoverEvent("plothover",e)}function onClick(e){triggerClickHoverEvent("plotclick",e)}function triggerClickHoverEvent(eventname,e){var offset=plot.offset(),canvasX=parseInt(e.pageX-offset.left),canvasY=parseInt(e.pageY-offset.top),item=findNearbySlice(canvasX,canvasY);if(options.grid.autoHighlight){for(var i=0;i<highlights.length;++i){var h=highlights[i];if(h.auto==eventname&&!(item&&h.series==item.series)){unhighlight(h.series)}}}if(!item){return}highlight(item.series,eventname);var pos={pageX:e.pageX,pageY:e.pageY};target.trigger(eventname,[pos,item])}function highlight(s,auto){if(typeof s=="number"){s=series[s]}var i=indexOfHighlight(s);if(i==-1){highlights.push({series:s,auto:auto});plot.triggerRedrawOverlay()}else{if(!auto){highlights[i].auto=false}}}function unhighlight(s){if(s==null){highlights=[];plot.triggerRedrawOverlay()}if(typeof s=="number"){s=series[s]}var i=indexOfHighlight(s);if(i!=-1){highlights.splice(i,1);plot.triggerRedrawOverlay()}}function indexOfHighlight(s){for(var i=0;i<highlights.length;++i){var h=highlights[i];if(h.series==s){return i}}return -1}function drawOverlay(plot,octx){var options=plot.getOptions();var radius=options.series.pie.radius>1?options.series.pie.radius:maxRadius*options.series.pie.radius;octx.save();octx.translate(centerLeft,centerTop);octx.scale(1,options.series.pie.tilt);for(i=0;i<highlights.length;++i){drawHighlight(highlights[i].series)}drawDonutHole(octx);octx.restore();function drawHighlight(series){if(series.angle<0){return}octx.fillStyle="rgba(255, 255, 255, "+options.series.pie.highlight.opacity+")";octx.beginPath();if(series.angle!=Math.PI*2){octx.moveTo(0,0)}octx.arc(0,0,radius,series.startAngle,series.startAngle+series.angle,false);octx.closePath();octx.fill()}}}var options={series:{pie:{show:false,radius:"auto",innerRadius:0,startAngle:3/2,tilt:1,offset:{top:0,left:"auto"},stroke:{color:"#FFF",width:1},label:{show:"auto",formatter:function(label,slice){return'<div style="font-size:x-small;text-align:center;padding:2px;color:'+slice.color+';">'+label+"<br/>"+Math.round(slice.percent)+"%</div>"},radius:1,background:{color:null,opacity:0},threshold:0},combine:{threshold:-1,color:null,label:"Other"},highlight:{opacity:0.5}}}};$.plot.plugins.push({init:init,options:options,name:"pie",version:"1.0"})})(jQuery);if(!document.createElement("canvas").getContext){(function(){var m=Math;var mr=m.round;var ms=m.sin;var mc=m.cos;var abs=m.abs;var sqrt=m.sqrt;var Z=10;var Z2=Z/2;function getContext(){return this.context_||(this.context_=new CanvasRenderingContext2D_(this))}var slice=Array.prototype.slice;function bind(f,obj,var_args){var a=slice.call(arguments,2);return function(){return f.apply(obj,a.concat(slice.call(arguments)))}}function encodeHtmlAttribute(s){return String(s).replace(/&/g,"&amp;").replace(/"/g,"&quot;")}function addNamespacesAndStylesheet(doc){if(!doc.namespaces.g_vml_){doc.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML")}if(!doc.namespaces.g_o_){doc.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML")}if(!doc.styleSheets.ex_canvas_){var ss=doc.createStyleSheet();ss.owningElement.id="ex_canvas_";ss.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}addNamespacesAndStylesheet(document);var G_vmlCanvasManager_={init:function(opt_doc){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var doc=opt_doc||document;doc.createElement("canvas");doc.attachEvent("onreadystatechange",bind(this.init_,this,doc))}},init_:function(doc){var els=doc.getElementsByTagName("canvas");for(var i=0;i<els.length;i++){this.initElement(els[i])}},initElement:function(el){if(!el.getContext){el.getContext=getContext;addNamespacesAndStylesheet(el.ownerDocument);el.innerHTML="";el.attachEvent("onpropertychange",onPropertyChange);el.attachEvent("onresize",onResize);var attrs=el.attributes;if(attrs.width&&attrs.width.specified){el.style.width=attrs.width.nodeValue+"px"}else{el.width=el.clientWidth}if(attrs.height&&attrs.height.specified){el.style.height=attrs.height.nodeValue+"px"}else{el.height=el.clientHeight}}return el}};function onPropertyChange(e){var el=e.srcElement;switch(e.propertyName){case"width":el.getContext().clearRect();el.style.width=el.attributes.width.nodeValue+"px";el.firstChild.style.width=el.clientWidth+"px";break;case"height":el.getContext().clearRect();el.style.height=el.attributes.height.nodeValue+"px";el.firstChild.style.height=el.clientHeight+"px";break}}function onResize(e){var el=e.srcElement;if(el.firstChild){el.firstChild.style.width=el.clientWidth+"px";el.firstChild.style.height=el.clientHeight+"px"}}G_vmlCanvasManager_.init();var decToHex=[];for(var i=0;i<16;i++){for(var j=0;j<16;j++){decToHex[i*16+j]=i.toString(16)+j.toString(16)}}function createMatrixIdentity(){return[[1,0,0],[0,1,0],[0,0,1]]}function matrixMultiply(m1,m2){var result=createMatrixIdentity();for(var x=0;x<3;x++){for(var y=0;y<3;y++){var sum=0;for(var z=0;z<3;z++){sum+=m1[x][z]*m2[z][y]}result[x][y]=sum}}return result}function copyState(o1,o2){o2.fillStyle=o1.fillStyle;o2.lineCap=o1.lineCap;o2.lineJoin=o1.lineJoin;o2.lineWidth=o1.lineWidth;o2.miterLimit=o1.miterLimit;o2.shadowBlur=o1.shadowBlur;o2.shadowColor=o1.shadowColor;o2.shadowOffsetX=o1.shadowOffsetX;o2.shadowOffsetY=o1.shadowOffsetY;o2.strokeStyle=o1.strokeStyle;o2.globalAlpha=o1.globalAlpha;o2.font=o1.font;o2.textAlign=o1.textAlign;o2.textBaseline=o1.textBaseline;o2.arcScaleX_=o1.arcScaleX_;o2.arcScaleY_=o1.arcScaleY_;o2.lineScale_=o1.lineScale_}var colorData={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"};function getRgbHslContent(styleString){var start=styleString.indexOf("(",3);var end=styleString.indexOf(")",start+1);var parts=styleString.substring(start+1,end).split(",");if(parts.length==4&&styleString.substr(3,1)=="a"){alpha=Number(parts[3])}else{parts[3]=1}return parts}function percent(s){return parseFloat(s)/100}function clamp(v,min,max){return Math.min(max,Math.max(min,v))}function hslToRgb(parts){var r,g,b;h=parseFloat(parts[0])/360%360;if(h<0){h++}s=clamp(percent(parts[1]),0,1);l=clamp(percent(parts[2]),0,1);if(s==0){r=g=b=l}else{var q=l<0.5?l*(1+s):l+s-l*s;var p=2*l-q;r=hueToRgb(p,q,h+1/3);g=hueToRgb(p,q,h);b=hueToRgb(p,q,h-1/3)}return"#"+decToHex[Math.floor(r*255)]+decToHex[Math.floor(g*255)]+decToHex[Math.floor(b*255)]}function hueToRgb(m1,m2,h){if(h<0){h++}if(h>1){h--}if(6*h<1){return m1+(m2-m1)*6*h}else{if(2*h<1){return m2}else{if(3*h<2){return m1+(m2-m1)*(2/3-h)*6}else{return m1}}}}function processStyle(styleString){var str,alpha=1;styleString=String(styleString);if(styleString.charAt(0)=="#"){str=styleString}else{if(/^rgb/.test(styleString)){var parts=getRgbHslContent(styleString);var str="#",n;for(var i=0;i<3;i++){if(parts[i].indexOf("%")!=-1){n=Math.floor(percent(parts[i])*255)}else{n=Number(parts[i])}str+=decToHex[clamp(n,0,255)]}alpha=parts[3]}else{if(/^hsl/.test(styleString)){var parts=getRgbHslContent(styleString);str=hslToRgb(parts);alpha=parts[3]}else{str=colorData[styleString]||styleString}}}return{color:str,alpha:alpha}}var DEFAULT_STYLE={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var fontStyleCache={};function processFontStyle(styleString){if(fontStyleCache[styleString]){return fontStyleCache[styleString]}var el=document.createElement("div");var style=el.style;try{style.font=styleString}catch(ex){}return fontStyleCache[styleString]={style:style.fontStyle||DEFAULT_STYLE.style,variant:style.fontVariant||DEFAULT_STYLE.variant,weight:style.fontWeight||DEFAULT_STYLE.weight,size:style.fontSize||DEFAULT_STYLE.size,family:style.fontFamily||DEFAULT_STYLE.family}}function getComputedStyle(style,element){var computedStyle={};for(var p in style){computedStyle[p]=style[p]}var canvasFontSize=parseFloat(element.currentStyle.fontSize),fontSize=parseFloat(style.size);if(typeof style.size=="number"){computedStyle.size=style.size}else{if(style.size.indexOf("px")!=-1){computedStyle.size=fontSize}else{if(style.size.indexOf("em")!=-1){computedStyle.size=canvasFontSize*fontSize}else{if(style.size.indexOf("%")!=-1){computedStyle.size=(canvasFontSize/100)*fontSize}else{if(style.size.indexOf("pt")!=-1){computedStyle.size=fontSize/0.75}else{computedStyle.size=canvasFontSize}}}}}computedStyle.size*=0.981;return computedStyle}function buildStyle(style){return style.style+" "+style.variant+" "+style.weight+" "+style.size+"px "+style.family}function processLineCap(lineCap){switch(lineCap){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function CanvasRenderingContext2D_(surfaceElement){this.m_=createMatrixIdentity();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=Z*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=surfaceElement;var el=surfaceElement.ownerDocument.createElement("div");el.style.width=surfaceElement.clientWidth+"px";el.style.height=surfaceElement.clientHeight+"px";el.style.overflow="hidden";el.style.position="absolute";surfaceElement.appendChild(el);this.element_=el;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var contextPrototype=CanvasRenderingContext2D_.prototype;contextPrototype.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};contextPrototype.beginPath=function(){this.currentPath_=[]};contextPrototype.moveTo=function(aX,aY){var p=this.getCoords_(aX,aY);this.currentPath_.push({type:"moveTo",x:p.x,y:p.y});this.currentX_=p.x;this.currentY_=p.y};contextPrototype.lineTo=function(aX,aY){var p=this.getCoords_(aX,aY);this.currentPath_.push({type:"lineTo",x:p.x,y:p.y});this.currentX_=p.x;this.currentY_=p.y};contextPrototype.bezierCurveTo=function(aCP1x,aCP1y,aCP2x,aCP2y,aX,aY){var p=this.getCoords_(aX,aY);var cp1=this.getCoords_(aCP1x,aCP1y);var cp2=this.getCoords_(aCP2x,aCP2y);bezierCurveTo(this,cp1,cp2,p)};function bezierCurveTo(self,cp1,cp2,p){self.currentPath_.push({type:"bezierCurveTo",cp1x:cp1.x,cp1y:cp1.y,cp2x:cp2.x,cp2y:cp2.y,x:p.x,y:p.y});self.currentX_=p.x;self.currentY_=p.y}contextPrototype.quadraticCurveTo=function(aCPx,aCPy,aX,aY){var cp=this.getCoords_(aCPx,aCPy);var p=this.getCoords_(aX,aY);var cp1={x:this.currentX_+2/3*(cp.x-this.currentX_),y:this.currentY_+2/3*(cp.y-this.currentY_)};var cp2={x:cp1.x+(p.x-this.currentX_)/3,y:cp1.y+(p.y-this.currentY_)/3};bezierCurveTo(this,cp1,cp2,p)};contextPrototype.arc=function(aX,aY,aRadius,aStartAngle,aEndAngle,aClockwise){aRadius*=Z;var arcType=aClockwise?"at":"wa";var xStart=aX+mc(aStartAngle)*aRadius-Z2;var yStart=aY+ms(aStartAngle)*aRadius-Z2;var xEnd=aX+mc(aEndAngle)*aRadius-Z2;var yEnd=aY+ms(aEndAngle)*aRadius-Z2;if(xStart==xEnd&&!aClockwise){xStart+=0.125}var p=this.getCoords_(aX,aY);var pStart=this.getCoords_(xStart,yStart);var pEnd=this.getCoords_(xEnd,yEnd);this.currentPath_.push({type:arcType,x:p.x,y:p.y,radius:aRadius,xStart:pStart.x,yStart:pStart.y,xEnd:pEnd.x,yEnd:pEnd.y})};contextPrototype.rect=function(aX,aY,aWidth,aHeight){this.moveTo(aX,aY);this.lineTo(aX+aWidth,aY);this.lineTo(aX+aWidth,aY+aHeight);this.lineTo(aX,aY+aHeight);this.closePath()};contextPrototype.strokeRect=function(aX,aY,aWidth,aHeight){var oldPath=this.currentPath_;this.beginPath();this.moveTo(aX,aY);this.lineTo(aX+aWidth,aY);this.lineTo(aX+aWidth,aY+aHeight);this.lineTo(aX,aY+aHeight);this.closePath();this.stroke();this.currentPath_=oldPath};contextPrototype.fillRect=function(aX,aY,aWidth,aHeight){var oldPath=this.currentPath_;this.beginPath();this.moveTo(aX,aY);this.lineTo(aX+aWidth,aY);this.lineTo(aX+aWidth,aY+aHeight);this.lineTo(aX,aY+aHeight);this.closePath();this.fill();this.currentPath_=oldPath};contextPrototype.createLinearGradient=function(aX0,aY0,aX1,aY1){var gradient=new CanvasGradient_("gradient");gradient.x0_=aX0;gradient.y0_=aY0;gradient.x1_=aX1;gradient.y1_=aY1;return gradient};contextPrototype.createRadialGradient=function(aX0,aY0,aR0,aX1,aY1,aR1){var gradient=new CanvasGradient_("gradientradial");gradient.x0_=aX0;gradient.y0_=aY0;gradient.r0_=aR0;gradient.x1_=aX1;gradient.y1_=aY1;gradient.r1_=aR1;return gradient};contextPrototype.drawImage=function(image,var_args){var dx,dy,dw,dh,sx,sy,sw,sh;var oldRuntimeWidth=image.runtimeStyle.width;var oldRuntimeHeight=image.runtimeStyle.height;image.runtimeStyle.width="auto";image.runtimeStyle.height="auto";var w=image.width;var h=image.height;image.runtimeStyle.width=oldRuntimeWidth;image.runtimeStyle.height=oldRuntimeHeight;if(arguments.length==3){dx=arguments[1];dy=arguments[2];sx=sy=0;sw=dw=w;sh=dh=h}else{if(arguments.length==5){dx=arguments[1];dy=arguments[2];dw=arguments[3];dh=arguments[4];sx=sy=0;sw=w;sh=h}else{if(arguments.length==9){sx=arguments[1];sy=arguments[2];sw=arguments[3];sh=arguments[4];dx=arguments[5];dy=arguments[6];dw=arguments[7];dh=arguments[8]}else{throw Error("Invalid number of arguments")}}}var d=this.getCoords_(dx,dy);var w2=sw/2;var h2=sh/2;var vmlStr=[];var W=10;var H=10;vmlStr.push(" <g_vml_:group",' coordsize="',Z*W,",",Z*H,'"',' coordorigin="0,0"',' style="width:',W,"px;height:",H,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var filter=[];filter.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",mr(d.x/Z),",","Dy=",mr(d.y/Z),"");var max=d;var c2=this.getCoords_(dx+dw,dy);var c3=this.getCoords_(dx,dy+dh);var c4=this.getCoords_(dx+dw,dy+dh);max.x=m.max(max.x,c2.x,c3.x,c4.x);max.y=m.max(max.y,c2.y,c3.y,c4.y);vmlStr.push("padding:0 ",mr(max.x/Z),"px ",mr(max.y/Z),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",filter.join(""),", sizingmethod='clip');")}else{vmlStr.push("top:",mr(d.y/Z),"px;left:",mr(d.x/Z),"px;")}vmlStr.push(' ">','<g_vml_:image src="',image.src,'"',' style="width:',Z*dw,"px;"," height:",Z*dh,'px"',' cropleft="',sx/w,'"',' croptop="',sy/h,'"',' cropright="',(w-sx-sw)/w,'"',' cropbottom="',(h-sy-sh)/h,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",vmlStr.join(""))};contextPrototype.stroke=function(aFill){var W=10;var H=10;var chunkSize=5000;var min={x:null,y:null};var max={x:null,y:null};for(var j=0;j<this.currentPath_.length;j+=chunkSize){var lineStr=[];var lineOpen=false;lineStr.push("<g_vml_:shape",' filled="',!!aFill,'"',' style="position:absolute;width:',W,"px;height:",H,'px;"',' coordorigin="0,0"',' coordsize="',Z*W,",",Z*H,'"',' stroked="',!aFill,'"',' path="');var newSeq=false;for(var i=j;i<Math.min(j+chunkSize,this.currentPath_.length);i++){if(i%chunkSize==0&&i>0){lineStr.push(" m ",mr(this.currentPath_[i-1].x),",",mr(this.currentPath_[i-1].y))}var p=this.currentPath_[i];var c;switch(p.type){case"moveTo":c=p;lineStr.push(" m ",mr(p.x),",",mr(p.y));break;case"lineTo":lineStr.push(" l ",mr(p.x),",",mr(p.y));break;case"close":lineStr.push(" x ");p=null;break;case"bezierCurveTo":lineStr.push(" c ",mr(p.cp1x),",",mr(p.cp1y),",",mr(p.cp2x),",",mr(p.cp2y),",",mr(p.x),",",mr(p.y));break;case"at":case"wa":lineStr.push(" ",p.type," ",mr(p.x-this.arcScaleX_*p.radius),",",mr(p.y-this.arcScaleY_*p.radius)," ",mr(p.x+this.arcScaleX_*p.radius),",",mr(p.y+this.arcScaleY_*p.radius)," ",mr(p.xStart),",",mr(p.yStart)," ",mr(p.xEnd),",",mr(p.yEnd));break}if(p){if(min.x==null||p.x<min.x){min.x=p.x}if(max.x==null||p.x>max.x){max.x=p.x}if(min.y==null||p.y<min.y){min.y=p.y}if(max.y==null||p.y>max.y){max.y=p.y}}}lineStr.push(' ">');if(!aFill){appendStroke(this,lineStr)}else{appendFill(this,lineStr,min,max)}lineStr.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",lineStr.join(""))}};function appendStroke(ctx,lineStr){var a=processStyle(ctx.strokeStyle);var color=a.color;var opacity=a.alpha*ctx.globalAlpha;var lineWidth=ctx.lineScale_*ctx.lineWidth;if(lineWidth<1){opacity*=lineWidth}lineStr.push("<g_vml_:stroke",' opacity="',opacity,'"',' joinstyle="',ctx.lineJoin,'"',' miterlimit="',ctx.miterLimit,'"',' endcap="',processLineCap(ctx.lineCap),'"',' weight="',lineWidth,'px"',' color="',color,'" />')}function appendFill(ctx,lineStr,min,max){var fillStyle=ctx.fillStyle;var arcScaleX=ctx.arcScaleX_;var arcScaleY=ctx.arcScaleY_;var width=max.x-min.x;var height=max.y-min.y;if(fillStyle instanceof CanvasGradient_){var angle=0;var focus={x:0,y:0};var shift=0;var expansion=1;if(fillStyle.type_=="gradient"){var x0=fillStyle.x0_/arcScaleX;var y0=fillStyle.y0_/arcScaleY;var x1=fillStyle.x1_/arcScaleX;var y1=fillStyle.y1_/arcScaleY;var p0=ctx.getCoords_(x0,y0);var p1=ctx.getCoords_(x1,y1);var dx=p1.x-p0.x;var dy=p1.y-p0.y;angle=Math.atan2(dx,dy)*180/Math.PI;if(angle<0){angle+=360}if(angle<0.000001){angle=0}}else{var p0=ctx.getCoords_(fillStyle.x0_,fillStyle.y0_);focus={x:(p0.x-min.x)/width,y:(p0.y-min.y)/height};width/=arcScaleX*Z;height/=arcScaleY*Z;var dimension=m.max(width,height);shift=2*fillStyle.r0_/dimension;expansion=2*fillStyle.r1_/dimension-shift}var stops=fillStyle.colors_;stops.sort(function(cs1,cs2){return cs1.offset-cs2.offset});var length=stops.length;var color1=stops[0].color;var color2=stops[length-1].color;var opacity1=stops[0].alpha*ctx.globalAlpha;var opacity2=stops[length-1].alpha*ctx.globalAlpha;var colors=[];for(var i=0;i<length;i++){var stop=stops[i];colors.push(stop.offset*expansion+shift+" "+stop.color)}lineStr.push('<g_vml_:fill type="',fillStyle.type_,'"',' method="none" focus="100%"',' color="',color1,'"',' color2="',color2,'"',' colors="',colors.join(","),'"',' opacity="',opacity2,'"',' g_o_:opacity2="',opacity1,'"',' angle="',angle,'"',' focusposition="',focus.x,",",focus.y,'" />')}else{if(fillStyle instanceof CanvasPattern_){if(width&&height){var deltaLeft=-min.x;var deltaTop=-min.y;lineStr.push("<g_vml_:fill",' position="',deltaLeft/width*arcScaleX*arcScaleX,",",deltaTop/height*arcScaleY*arcScaleY,'"',' type="tile"',' src="',fillStyle.src_,'" />')}}else{var a=processStyle(ctx.fillStyle);var color=a.color;var opacity=a.alpha*ctx.globalAlpha;lineStr.push('<g_vml_:fill color="',color,'" opacity="',opacity,'" />')}}}contextPrototype.fill=function(){this.stroke(true)};contextPrototype.closePath=function(){this.currentPath_.push({type:"close"})};contextPrototype.getCoords_=function(aX,aY){var m=this.m_;return{x:Z*(aX*m[0][0]+aY*m[1][0]+m[2][0])-Z2,y:Z*(aX*m[0][1]+aY*m[1][1]+m[2][1])-Z2}};contextPrototype.save=function(){var o={};copyState(this,o);this.aStack_.push(o);this.mStack_.push(this.m_);this.m_=matrixMultiply(createMatrixIdentity(),this.m_)};contextPrototype.restore=function(){if(this.aStack_.length){copyState(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function matrixIsFinite(m){return isFinite(m[0][0])&&isFinite(m[0][1])&&isFinite(m[1][0])&&isFinite(m[1][1])&&isFinite(m[2][0])&&isFinite(m[2][1])}function setM(ctx,m,updateLineScale){if(!matrixIsFinite(m)){return}ctx.m_=m;if(updateLineScale){var det=m[0][0]*m[1][1]-m[0][1]*m[1][0];ctx.lineScale_=sqrt(abs(det))}}contextPrototype.translate=function(aX,aY){var m1=[[1,0,0],[0,1,0],[aX,aY,1]];setM(this,matrixMultiply(m1,this.m_),false)};contextPrototype.rotate=function(aRot){var c=mc(aRot);var s=ms(aRot);var m1=[[c,s,0],[-s,c,0],[0,0,1]];setM(this,matrixMultiply(m1,this.m_),false)};contextPrototype.scale=function(aX,aY){this.arcScaleX_*=aX;this.arcScaleY_*=aY;var m1=[[aX,0,0],[0,aY,0],[0,0,1]];setM(this,matrixMultiply(m1,this.m_),true)};contextPrototype.transform=function(m11,m12,m21,m22,dx,dy){var m1=[[m11,m12,0],[m21,m22,0],[dx,dy,1]];setM(this,matrixMultiply(m1,this.m_),true)};contextPrototype.setTransform=function(m11,m12,m21,m22,dx,dy){var m=[[m11,m12,0],[m21,m22,0],[dx,dy,1]];setM(this,m,true)};contextPrototype.drawText_=function(text,x,y,maxWidth,stroke){var m=this.m_,delta=1000,left=0,right=delta,offset={x:0,y:0},lineStr=[];var fontStyle=getComputedStyle(processFontStyle(this.font),this.element_);var fontStyleString=buildStyle(fontStyle);var elementStyle=this.element_.currentStyle;var textAlign=this.textAlign.toLowerCase();switch(textAlign){case"left":case"center":case"right":break;case"end":textAlign=elementStyle.direction=="ltr"?"right":"left";break;case"start":textAlign=elementStyle.direction=="rtl"?"right":"left";break;default:textAlign="left"}switch(this.textBaseline){case"hanging":case"top":offset.y=fontStyle.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":offset.y=-fontStyle.size/2.25;break}switch(textAlign){case"right":left=delta;right=0.05;break;case"center":left=right=delta/2;break}var d=this.getCoords_(x+offset.x,y+offset.y);lineStr.push('<g_vml_:line from="',-left,' 0" to="',right,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!stroke,'" stroked="',!!stroke,'" style="position:absolute;width:1px;height:1px;">');if(stroke){appendStroke(this,lineStr)}else{appendFill(this,lineStr,{x:-left,y:0},{x:right,y:fontStyle.size})}var skewM=m[0][0].toFixed(3)+","+m[1][0].toFixed(3)+","+m[0][1].toFixed(3)+","+m[1][1].toFixed(3)+",0,0";var skewOffset=mr(d.x/Z)+","+mr(d.y/Z);lineStr.push('<g_vml_:skew on="t" matrix="',skewM,'" ',' offset="',skewOffset,'" origin="',left,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',encodeHtmlAttribute(text),'" style="v-text-align:',textAlign,";font:",encodeHtmlAttribute(fontStyleString),'" /></g_vml_:line>');this.element_.insertAdjacentHTML("beforeEnd",lineStr.join(""))};contextPrototype.fillText=function(text,x,y,maxWidth){this.drawText_(text,x,y,maxWidth,false)};contextPrototype.strokeText=function(text,x,y,maxWidth){this.drawText_(text,x,y,maxWidth,true)};contextPrototype.measureText=function(text){if(!this.textMeasureEl_){var s='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",s);this.textMeasureEl_=this.element_.lastChild}var doc=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(doc.createTextNode(text));return{width:this.textMeasureEl_.offsetWidth}};contextPrototype.clip=function(){};contextPrototype.arcTo=function(){};contextPrototype.createPattern=function(image,repetition){return new CanvasPattern_(image,repetition)};function CanvasGradient_(aType){this.type_=aType;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}CanvasGradient_.prototype.addColorStop=function(aOffset,aColor){aColor=processStyle(aColor);this.colors_.push({offset:aOffset,color:aColor.color,alpha:aColor.alpha})};function CanvasPattern_(image,repetition){assertImageIsValid(image);switch(repetition){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=repetition;break;default:throwException("SYNTAX_ERR")}this.src_=image.src;this.width_=image.width;this.height_=image.height}function throwException(s){throw new DOMException_(s)}function assertImageIsValid(img){if(!img||img.nodeType!=1||img.tagName!="IMG"){throwException("TYPE_MISMATCH_ERR")}if(img.readyState!="complete"){throwException("INVALID_STATE_ERR")}}function DOMException_(s){this.code=this[s];this.message=s+": DOM Exception "+this.code}var p=DOMException_.prototype=new Error;p.INDEX_SIZE_ERR=1;p.DOMSTRING_SIZE_ERR=2;p.HIERARCHY_REQUEST_ERR=3;p.WRONG_DOCUMENT_ERR=4;p.INVALID_CHARACTER_ERR=5;p.NO_DATA_ALLOWED_ERR=6;p.NO_MODIFICATION_ALLOWED_ERR=7;p.NOT_FOUND_ERR=8;p.NOT_SUPPORTED_ERR=9;p.INUSE_ATTRIBUTE_ERR=10;p.INVALID_STATE_ERR=11;p.SYNTAX_ERR=12;p.INVALID_MODIFICATION_ERR=13;p.NAMESPACE_ERR=14;p.INVALID_ACCESS_ERR=15;p.VALIDATION_ERR=16;p.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=G_vmlCanvasManager_;CanvasRenderingContext2D=CanvasRenderingContext2D_;CanvasGradient=CanvasGradient_;CanvasPattern=CanvasPattern_;DOMException=DOMException_})()};

