function check_strokeTextCapability(){if(document.namespaces["v"]==null){var e=["shape","shapetype","group","background","path","formulas","handles","fill","stroke","shadow","textbox","textpath","imagedata","line","polyline","curve","roundrect","oval","rect","arc","image"],s=document.createStyleSheet();for(var i=0;i<e.length;i++){s.addRule("v\\:"+e[i],"behavior: url(#default#VML);");}document.namespaces.add("v","urn:schemas-microsoft-com:vml");}if(typeof get_strokeText=="function"&&document.namespaces["v"]!=null){return true;}else{return false;}}function get_boundingBox(x,y,baseline,lineheight,linewidth,weight,color,opacity,rotation){rotation=typeof(rotation)!="undefined"?rotation:0;color=typeof(color)!="undefined"?color:"#000000";opacity=typeof(opacity)!="undefined"?opacity:1;id=typeof(id)!="undefined"?'id="'+id+'"':"";var w=parseInt(linewidth),b=parseInt(baseline),h=parseInt(lineheight);return"<v:shape "+id+' filled="f" stroked="t" coordorigin="0,0" coordsize="'+w+","+h+'" path="m 0,'+b+" l 0,0,"+w+",0,"+w+","+b+",0,"+b+",0,"+h+","+w+","+h+","+w+","+b+' e" style="rotation:'+rotation+";position:absolute;margin:0px;top:"+Math.round(y)+"px;left:"+Math.round(x)+"px;width:"+w+"px;height:"+h+'px;"><v:stroke color="'+color+'" opacity="'+opacity+'" weight="'+weight+'" /></v:shape>';}function get_strokeText(string,x,y,size,weight,width,space,font,color,opacity,rotation,id){function qC(cX,cY,CPx,CPy,aX,aY){var t=new Array(6);t[0]=cX+2/3*(CPx-cX);t[1]=cY+2/3*(CPy-cY);t[2]=t[0]+(aX-cX)/3;t[3]=t[1]+(aY-cY)/3;t[4]=aX;t[5]=aY;return t;}size=typeof(size)!="undefined"?size:12;weight=typeof(weight)!="undefined"?weight:100;width=typeof(width)!="undefined"?width:100;space=typeof(space)!="undefined"?space:100;font=typeof(font)!="undefined"?font:"sans-serif";string=typeof(string)!="undefined"?string:" ";var xx=typeof(x)!="undefined"?x:0;var yy=typeof(y)!="undefined"?y:0;rotation=typeof(rotation)!="undefined"?rotation:0;color=typeof(color)!="undefined"?color:"#000000";opacity=typeof(opacity)!="undefined"?opacity:1;id=typeof(id)!="undefined"?'id="'+id+'"':"";var i=0,j=0,f=10,path="",a,b,z,k,c,p,o,len=string.length,mag=size/25,fac=Math.max(Math.min(weight,400),1)/40,faw=Math.max(Math.min(width,400),10)/100;var spc=Math.max(Math.min(space,1000),10)/100,mx=((mag*16*faw)*spc)-(mag*16*faw),lw=(fac*mag);x=0;y=size;var ww=Math.round(get_textWidth(string,size,width,space,font)),hh=Math.round(get_textHeight(size));var out="<v:shape "+id+' filled="f" stroked="t" coordorigin="0,0" coordsize="'+parseInt(ww*f)+","+parseInt(hh*f)+'"';for(i=0;i<len;i++){c=strokeFont[font][string.charAt(i)];if(!c){continue;}o=0;for(j=0;j<c.n;j++){if(typeof(c.d[o])!="string"){o++;continue;}p=c.d[o];o++;a=c.d[o];if(p=="m"){path+=" m "+parseInt((x+a[0]*mag*faw)*f)+","+parseInt((y-a[1]*mag)*f);o++;}else{if(p=="q"){z=c.d[o-2];o++;b=c.d[o];k=qC(z[0],z[1],a[0],a[1],b[0],b[1]);path+=" c "+parseInt((x+k[0]*mag*faw)*f)+","+parseInt((y-k[1]*mag)*f)+","+parseInt((x+k[2]*mag*faw)*f)+","+parseInt((y-k[3]*mag)*f)+","+parseInt((x+k[4]*mag*faw)*f)+","+parseInt((y-k[5]*mag)*f);o++;}else{if(p=="b"){o++;b=c.d[o];o++;z=c.d[o];path+=" c "+parseInt((x+a[0]*mag*faw)*f)+","+parseInt((y-a[1]*mag)*f)+","+parseInt((x+a[0]*mag*faw)*f)+","+parseInt((y-a[1]*mag)*f)+","+parseInt((x+z[0]*mag*faw)*f)+","+parseInt((y-z[1]*mag)*f);o++;}else{if(p=="l"){path+=" l "+parseInt((x+a[0]*mag*faw)*f)+","+parseInt((y-a[1]*mag)*f);o++;while(typeof(c.d[o])!="string"&&o<c.d.length){a=c.d[o];path+=" l "+parseInt((x+a[0]*mag*faw)*f)+","+parseInt((y-a[1]*mag)*f);o++;}}}}}}x+=((c.w*faw)*mag)+mx;}out+=' path="'+path+' e" style="rotation:'+rotation+";position:absolute;margin:0px;top:"+Math.round(yy)+"px;left:"+Math.round(xx)+"px;width:"+ww+"px;height:"+hh+'px;"><v:stroke color="'+color+'" opacity="'+opacity+'" weight="'+lw+'" miterlimit="0" endcap="round" joinstyle="round" /></v:shape>';return out;}function get_baseLine(size){return size;}function get_textHeight(size){size=typeof(size)!="undefined"?size:12;return 32*(size/25);}function get_textWidth(string,size,width,space,font){size=typeof(size)!="undefined"?size:12;width=typeof(width)!="undefined"?width:100;space=typeof(space)!="undefined"?space:100;string=typeof(string)!="undefined"?string:" ";font=typeof(font)!="undefined"?font:"sans-serif";var total=0,len=string.length,mg=size/25,fw=Math.max(Math.min(width,400),10)/100,sp=Math.max(Math.min(space,1000),10)/100,m=((mg*16*fw)*sp)-(mg*16*fw);for(var i=0;i<len;i++){var c=strokeFont[font][string.charAt(i)];if(c){total+=((c.w*fw)*mg)+m;}}return total-(m);}function get_widthText(string,width,size,fontwidth,space,font){size=typeof(size)!="undefined"?size:12;fontwidth=typeof(fontwidth)!="undefined"?fontwidth:100;space=typeof(space)!="undefined"?space:100;string=typeof(string)!="undefined"?string:" ";width=typeof(width)!="undefined"?width:100;font=typeof(font)!="undefined"?font:"sans-serif";var cur=0,total=0,len=string.length,mg=size/25,fw=Math.max(Math.min(fontwidth,400),10)/100,sp=Math.max(Math.min(space,1000),10)/100,m=((mg*16*fw)*sp)-(mg*16*fw);for(var i=0;i<len;i++){var c=strokeFont[font][string.charAt(i)];if(c){cur=((c.w*fw)*mg)+m;if((total+cur-(m))<=width){total+=cur;}else{break;}}else{break;}}return string.substring(0,i);}function draw_boundingBox(ctx,x,y,baseline,lineheight,linewidth){ctx.strokeRect(x,y+baseline,linewidth,lineheight-baseline);ctx.strokeRect(x,y,linewidth,baseline);}function do_drawText(string,x,y,size,weight,width,space,font){size=typeof(size)!="undefined"?size:12;weight=typeof(weight)!="undefined"?weight:100;width=typeof(width)!="undefined"?width:100;space=typeof(space)!="undefined"?space:100;font=typeof(font)!="undefined"?font:"sans-serif";x=typeof(x)!="undefined"?x:0;y=typeof(y)!="undefined"?y+size:0+size;string=typeof(string)!="undefined"?string:" ";var i=0,j=0,a,b,z,c,p,o,len=string.length,mag=size/25,fac=Math.max(Math.min(weight,400),1)/40,faw=Math.max(Math.min(width,400),10)/100;var spc=Math.max(Math.min(space,1000),10)/100,mx=((mag*16*faw)*spc)-(mag*16*faw),lw=this.lineWidth,ml=this.miterLimit,lj=this.lineJoin,lc=this.lineCap;this.lineWidth=(fac*mag);this.miterLimit=0;this.lineJoin="round";this.lineCap="round";for(i=0;i<len;i++){c=strokeFont[font][string.charAt(i)];if(!c){continue;}o=0;this.beginPath();for(j=0;j<c.n;j++){if(typeof(c.d[o])!="string"){o++;continue;}p=c.d[o];o++;a=c.d[o];if(p=="m"){this.moveTo(x+a[0]*mag*faw,y-a[1]*mag);o++;}else{if(p=="q"){o++;b=c.d[o];this.quadraticCurveTo(x+a[0]*mag*faw,y-a[1]*mag,x+b[0]*mag*faw,y-b[1]*mag);o++;}else{if(p=="b"){o++;b=c.d[o];o++;z=c.d[o];this.bezierCurveTo(x+a[0]*mag*faw,y-a[1]*mag,x+b[0]*mag*faw,y-b[1]*mag,x+z[0]*mag*faw,y-z[1]*mag);o++;}else{if(p=="l"){this.lineTo(x+a[0]*mag*faw,y-a[1]*mag);o++;while(typeof(c.d[o])!="string"&&o<c.d.length){a=c.d[o];this.lineTo(x+a[0]*mag*faw,y-a[1]*mag);o++;}}}}}}this.stroke();x+=((c.w*faw)*mag)+mx;}this.lineWidth=lw;this.miterLimit=ml;this.lineJoin=lj;this.lineCap=lc;}function set_textRenderContext(ctx){if(typeof CanvasRenderingContext2D=="undefined"){ctx.strokeText=do_drawText;}}function check_textRenderContext(ctx){if(typeof ctx.strokeText=="function"){return true;}else{return false;}}if(typeof CanvasRenderingContext2D!="undefined"){CanvasRenderingContext2D.prototype.strokeText=do_drawText;}var strokeFont=new Array();strokeFont["sans-serif"]={" ":{w:16,n:1,d:[]},"!":{w:10,n:4,d:["m",[5,21],"l",[5,7],"m",[5,2],"l",[4,1],[5,0],[6,1],[5,2]]},'"':{w:14,n:4,d:["m",[4,21],"l",[4,14],"m",[10,21],"l",[10,14]]},"#":{w:21,n:8,d:["m",[11,25],"l",[4,-7],"m",[17,25],"l",[10,-7],"m",[4,12],"l",[18,12],"m",[3,6],"l",[17,6]]},"$":{w:20,n:12,d:["m",[16,18],"q",[15,21],[10,21],"q",[5,21],[4,17],"q",[3,12],[7,11],"l",[13,10],"q",[18,9],[17,4],"q",[16,0],[10,0],"q",[4,0],[3,4],"m",[8,25],"l",[6,-4],"m",[14,25],"l",[12,-4]]},"%":{w:24,n:12,d:["m",[21,21],"l",[3,0],"m",[7,21],"q",[3,21],[3,17],"q",[3,13],[7,13],"q",[11,13],[11,17],"q",[11,21],[7,21],"m",[17,8],"q",[13,8],[13,4],"q",[13,0],[17,0],"q",[21,0],[21,4],"q",[21,8],[17,8]]},"&":{w:26,n:14,d:["m",[23,12],"q",[23,14],[22,14],"q",[20,14],[19,11],"l",[17,6],"q",[15,0],[9,0],"q",[3,0],[3,5],"q",[3,8],[7,10],"l",[12,13],"q",[14,15],[14,17],"q",[14,21],[11,21],"q",[8,21],[8,17],"q",[8,14],[12,8],"q",[17,0],[21,0],"q",[23,0],[23,2]]},"'":{w:10,n:2,d:["m",[5,19],"l",[4,20],[5,21],[6,20],[6,18],[5,16],[4,15]]},"(":{w:14,n:3,d:["m",[11,25],"q",[4,19],[4,9],"q",[4,-1],[11,-7]]},")":{w:14,n:3,d:["m",[3,25],"q",[10,19],[10,9],"q",[10,-1],[3,-7]]},"*":{w:16,n:6,d:["m",[8,21],"l",[8,9],"m",[3,18],"l",[13,12],"m",[13,18],"l",[3,12]]},"+":{w:26,n:4,d:["m",[13,18],"l",[13,0],"m",[4,9],"l",[22,9]]},",":{w:10,n:2,d:["m",[6,1],"l",[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]]},"-":{w:26,n:2,d:["m",[4,9],"l",[22,9]]},".":{w:10,n:2,d:["m",[5,2],"l",[4,1],[5,0],[6,1],[5,2]]},"/":{w:22,n:2,d:["m",[20,25],"l",[2,-7]]},"0":{w:20,n:7,d:["m",[10,21],"q",[3,21],[3,12],"l",[3,9],"q",[3,0],[10,0],"q",[17,0],[17,9],"l",[17,12],"q",[17,21],[10,21]]},"1":{w:20,n:3,d:["m",[6,17],"q",[8,18],[11,21],"l",[11,0]]},"2":{w:20,n:5,d:["m",[17,0],"l",[3,0],[13,10],"q",[16,13],[16,16],"q",[16,21],[10,21],"q",[4,21],[4,16]]},"3":{w:20,n:5,d:["m",[5,21],"l",[16,21],[10,14],"q",[17,14],[17,7],"q",[17,0],[10,0],"q",[5,0],[3,4]]},"4":{w:20,n:2,d:["m",[13,0],"l",[13,21],[3,7],[18,7]]},"5":{w:20,n:6,d:["m",[15,21],"l",[5,21],[4,12],"q",[5,14],[10,14],"q",[17,14],[17,7],"q",[17,0],[10,0],"q",[5,0],[3,4]]},"6":{w:20,n:8,d:["m",[16,18],"q",[15,21],[10,21],"q",[3,21],[3,12],"l",[3,7],"q",[3,0],[10,0],"q",[17,0],[17,7],"q",[17,13],[10,13],"q",[3,13],[3,7]]},"7":{w:20,n:2,d:["m",[3,21],"l",[17,21],[7,0]]},"8":{w:20,n:9,d:["m",[10,13],"q",[15,13],[15,17],"q",[15,21],[10,21],"q",[5,21],[5,17],"q",[5,13],[10,13],"q",[3,13],[3,7],"q",[3,0],[10,0],"q",[17,0],[17,7],"q",[17,13],[10,13]]},"9":{w:20,n:8,d:["m",[17,14],"q",[17,8],[10,8],"q",[3,8],[3,14],"q",[3,21],[10,21],"q",[17,21],[17,14],"l",[17,9],"q",[17,0],[10,0],"q",[5,0],[4,3]]},":":{w:10,n:4,d:["m",[5,14],"l",[4,13],[5,12],[6,13],[5,14],"m",[5,2],"l",[4,1],[5,0],[6,1],[5,2]]},";":{w:10,n:4,d:["m",[5,14],"l",[4,13],[5,12],[6,13],[5,14],"m",[6,1],"l",[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]]},"<":{w:24,n:2,d:["m",[20,18],"l",[4,9],[20,0]]},"=":{w:26,n:4,d:["m",[4,12],"l",[22,12],"m",[4,6],"l",[22,6]]},">":{w:24,n:2,d:["m",[4,18],"l",[20,9],[4,0]]},"?":{w:18,n:8,d:["m",[3,16],"q",[3,21],[9,21],"q",[15,21],[15,16],"q",[15,11],[10,11],"q",[9,11],[9,10],"l",[9,7],"m",[9,2],"l",[8,1],[9,0],[10,1],[9,2]]},"@":{w:27,n:17,d:["m",[21,3],"q",[20,1],[14,0],"l",[13,0],"q",[4,1],[3,10],"l",[3,11],"q",[4,20],[13,21],"l",[14,21],"q",[23,20],[24,11],"l",[24,10],"q",[24,6],[20,6],"q",[17,6],[18,10],"q",[18,6],[13,6],"q",[8,6],[9,11],"q",[10,15],[14,15],"q",[19,15],[18,10],"m",[18,10],"l",[19,14]]},"A":{w:18,n:6,d:["m",[1,0],"l",[9,21],[17,0],"m",[4,7],"l",[14,7]]},"B":{w:21,n:9,d:["m",[4,11],"l",[12,11],"m",[13,0],"l",[4,0],[4,21],[12,21],"q",[17,21],[17,16],"q",[17,11],[12,11],"q",[18,11],[18,6],"l",[18,5],"q",[18,0],[13,0]]},"C":{w:21,n:7,d:["m",[11,21],"q",[17,21],[18,16],"m",[18,5],"q",[17,0],[11,0],"q",[3,0],[3,9],"l",[3,12],"q",[3,21],[11,21]]},"D":{w:21,n:5,d:["m",[11,0],"l",[4,0],[4,21],[11,21],"q",[18,21],[18,12],"l",[18,9],"q",[18,0],[11,0]]},"E":{w:19,n:4,d:["m",[17,21],"l",[4,21],[4,0],[17,0],"m",[4,11],"l",[12,11]]},"F":{w:18,n:4,d:["m",[17,21],"l",[4,21],[4,0],"m",[4,11],"l",[12,11]]},"G":{w:21,n:8,d:["m",[11,21],"q",[17,21],[18,16],"m",[13,8],"l",[18,8],[18,5],"q",[17,0],[11,0],"q",[3,0],[3,9],"l",[3,12],"q",[3,21],[11,21]]},"H":{w:22,n:6,d:["m",[4,21],"l",[4,0],"m",[18,21],"l",[18,0],"m",[4,11],"l",[18,11]]},"I":{w:8,n:2,d:["m",[4,21],"l",[4,0]]},"J":{w:16,n:5,d:["m",[12,21],"l",[12,5],"q",[12,0],[7,0],"q",[2,0],[2,5],"l",[2,7]]},"K":{w:21,n:6,d:["m",[4,21],"l",[4,0],"m",[18,21],"l",[4,7],"m",[9,12],"l",[18,0]]},"L":{w:17,n:2,d:["m",[4,21],"l",[4,0],[16,0]]},"M":{w:24,n:2,d:["m",[4,0],"l",[4,21],[12,0],[20,21],[20,0]]},"N":{w:22,n:2,d:["m",[4,0],"l",[4,21],[18,0],[18,21]]},"O":{w:22,n:7,d:["m",[11,21],"q",[19,21],[19,12],"l",[19,9],"q",[19,0],[11,0],"q",[3,0],[3,9],"l",[3,12],"q",[3,21],[11,21]]},"P":{w:21,n:6,d:["m",[4,10],"l",[13,10],"q",[18,10],[18,15],"l",[18,16],"q",[18,21],[13,21],"l",[4,21],[4,0]]},"Q":{w:22,n:9,d:["m",[11,21],"q",[19,21],[19,12],"l",[19,9],"q",[19,0],[11,0],"q",[3,0],[3,9],"l",[3,12],"q",[3,21],[11,21],"m",[12,4],"l",[18,-2]]},"R":{w:21,n:8,d:["m",[4,10],"l",[13,10],"q",[18,10],[18,15],"l",[18,16],"q",[18,21],[13,21],"l",[4,21],[4,0],"m",[13,10],"l",[18,0]]},"S":{w:20,n:8,d:["m",[16,18],"q",[15,21],[10,21],"q",[5,21],[4,17],"q",[3,12],[7,11],"l",[13,10],"q",[18,9],[17,4],"q",[16,0],[10,0],"q",[4,0],[3,4]]},"T":{w:16,n:4,d:["m",[8,21],"l",[8,0],"m",[1,21],"l",[15,21]]},"U":{w:22,n:5,d:["m",[4,21],"l",[4,6],"q",[4,0],[11,0],"q",[18,0],[18,6],"l",[18,21]]},"V":{w:18,n:2,d:["m",[1,21],"l",[9,0],[17,21]]},"W":{w:24,n:2,d:["m",[2,21],"l",[7,0],[12,21],[17,0],[22,21]]},"X":{w:20,n:4,d:["m",[3,21],"l",[17,0],"m",[17,21],"l",[3,0]]},"Y":{w:18,n:4,d:["m",[1,21],"l",[9,11],[17,21],"m",[9,11],"l",[9,0]]},"Z":{w:20,n:2,d:["m",[3,21],"l",[17,21],[3,0],[17,0]]},"[":{w:14,n:2,d:["m",[11,25],"l",[4,25],[4,-7],[11,-7]]},"\\":{w:14,n:2,d:["m",[0,21],"l",[14,-3]]},"]":{w:14,n:2,d:["m",[3,25],"l",[10,25],[10,-7],[3,-7]]},"^":{w:16,n:2,d:["m",[3,16],"l",[8,21],[13,16]]},"_":{w:16,n:2,d:["m",[0,-2],"l",[16,-2]]},"`":{w:10,n:2,d:["m",[6,21],"l",[5,20],[4,18],[4,16],[5,15],[6,16],[5,17]]},"a":{w:19,n:10,d:["m",[15,14],"l",[15,0],"m",[10,14],"l",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[13,0],[15,2],"m",[15,12],"q",[13,14],[10,14]]},"b":{w:19,n:10,d:["m",[4,21],"l",[4,0],"m",[10,14],"l",[9,14],"q",[6,14],[4,12],"m",[4,2],"q",[6,0],[9,0],"l",[10,0],"q",[16,0],[16,7],"q",[16,14],[10,14]]},"c":{w:18,n:10,d:["m",[10,14],"l",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[14,0],[15,3],"m",[15,11],"q",[14,14],[10,14]]},"d":{w:19,n:10,d:["m",[15,21],"l",[15,0],"m",[10,14],"l",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[13,0],[15,2],"m",[15,12],"q",[13,14],[10,14]]},"e":{w:18,n:8,d:["m",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[14,0],[15,3],"m",[3,8],"l",[15,8],"q",[15,14],[9,14]]},"f":{w:12,n:5,d:["m",[10,21],"q",[5,21],[5,17],"l",[5,0],"m",[2,14],"l",[9,14]]},"g":{w:19,n:12,d:["m",[15,14],"l",[15,-2],"q",[15,-7],[10,-7],"q",[7,-7],[6,-6],"m",[10,14],"l",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[13,0],[15,2],"m",[15,12],"q",[13,14],[10,14]]},"h":{w:19,n:6,d:["m",[4,21],"l",[4,0],"m",[4,10],"q",[6,14],[11,14],"q",[15,14],[15,10],"l",[15,0]]},"i":{w:8,n:4,d:["m",[3,21],"l",[4,20],[5,21],[4,22],[3,21],"m",[4,14],"l",[4,0]]},"j":{w:10,n:5,d:["m",[5,21],"l",[6,20],[7,21],[6,22],[5,21],"m",[6,14],"l",[6,-3],"q",[6,-8],[1,-7]]},"k":{w:17,n:6,d:["m",[4,21],"l",[4,0],"m",[14,14],"l",[4,4],"m",[8,8],"l",[15,0]]},"l":{w:8,n:2,d:["m",[4,21],"l",[4,0]]},"m":{w:26,n:10,d:["m",[4,14],"l",[4,0],"m",[4,10],"q",[6,14],[10,14],"q",[13,14],[13,10],"l",[13,0],"m",[13,10],"q",[15,14],[19,14],"q",[22,14],[22,10],"l",[22,0]]},"n":{w:19,n:6,d:["m",[4,14],"l",[4,0],"m",[4,10],"q",[6,14],[11,14],"q",[15,14],[15,10],"l",[15,0]]},"o":{w:19,n:7,d:["m",[10,14],"l",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[16,0],[16,7],"q",[16,14],[10,14]]},"p":{w:19,n:10,d:["m",[4,14],"l",[4,-7],"m",[10,14],"l",[9,14],"q",[6,14],[4,12],"m",[4,2],"q",[6,0],[9,0],"l",[10,0],"q",[16,0],[16,7],"q",[16,14],[10,14]]},"q":{w:19,n:10,d:["m",[15,14],"l",[15,-7],"m",[10,14],"l",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[13,0],[15,2],"m",[15,12],"q",[13,14],[10,14]]},"r":{w:13,n:4,d:["m",[4,14],"l",[4,0],"m",[4,8],"q",[5,14],[12,14]]},"s":{w:16,n:7,d:["m",[13,11],"q",[13,14],[8,14],"q",[3,14],[3,11],"q",[3,8],[8,7],"q",[13,6],[13,3],"q",[13,0],[8,0],"q",[3,0],[3,3]]},"t":{w:12,n:5,d:["m",[5,21],"l",[5,4],"q",[5,-1],[10,0],"m",[2,14],"l",[9,14]]},"u":{w:19,n:6,d:["m",[4,14],"l",[4,4],"q",[4,0],[8,0],"q",[13,0],[15,4],"m",[15,14],"l",[15,0]]},"v":{w:16,n:2,d:["m",[2,14],"l",[8,0],[14,14]]},"w":{w:22,n:2,d:["m",[3,14],"l",[7,0],[11,14],[15,0],[19,14]]},"x":{w:17,n:4,d:["m",[3,14],"l",[14,0],"m",[14,14],"l",[3,0]]},"y":{w:16,n:5,d:["m",[2,14],"l",[8,0],"m",[14,14],"l",[8,0],"q",[5,-7],[1,-7]]},"z":{w:17,n:2,d:["m",[3,14],"l",[14,14],[3,0],[14,0]]},"{":{w:14,n:9,d:["m",[9,25],"q",[5,24],[5,20],"q",[5,17],[7,16],"q",[9,15],[8,12],"q",[7,9],[4,9],"q",[7,9],[8,6],"q",[9,3],[7,2],"q",[5,1],[5,-2],"q",[5,-6],[9,-7]]},"|":{w:8,n:2,d:["m",[4,25],"l",[4,-7]]},"}":{w:14,n:9,d:["m",[5,25],"q",[9,24],[9,20],"q",[9,17],[7,16],"q",[5,15],[6,12],"q",[7,9],[10,9],"q",[7,9],[6,6],"q",[5,3],[7,2],"q",[9,1],[9,-2],"q",[9,-6],[5,-7]]},"~":{w:24,n:4,d:["m",[3,6],"q",[3,12],[10,10],"l",[14,8],"q",[21,4],[21,10]]}," ":{w:16,n:1,d:[]},"¡":{w:10,n:4,d:["m",[5,10],"l",[5,-4],"m",[5,17],"l",[4,16],[5,15],[6,16],[5,17]]},"¢":{w:18,n:14,d:["m",[9,14],"l",[9,18],"m",[9,0],"l",[9,-4],"m",[10,14],"l",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[14,0],[15,3],"m",[15,11],"q",[14,14],[10,14]]},"£":{w:18,n:8,d:["m",[4,11],"l",[13,11],"m",[16,18],"q",[15,21],[11,21],"q",[5,21],[6,16],"q",[7,8],[6,2],"q",[5,0],[4,0],"l",[16,0]]},"¤":{w:19,n:13,d:["m",[15,3],"l",[17,1],"m",[15,13],"l",[17,15],"m",[5,3],"l",[3,1],"m",[5,13],"l",[3,15],"m",[10,14],"q",[4,14],[4,8],"q",[4,2],[10,2],"q",[16,2],[16,8],"q",[16,14],[10,14]]},"¥":{w:18,n:8,d:["m",[4,7],"l",[14,7],"m",[4,11],"l",[14,11],"m",[1,21],"l",[9,11],[17,21],"m",[9,11],"l",[9,0]]},"¦":{w:8,n:4,d:["m",[4,25],"l",[4,12],"m",[4,6],"l",[4,-7]]},"§":{w:20,n:12,d:["m",[16,18],"q",[16,21],[10,21],"q",[4,21],[4,18],"q",[4,15],[10,14],"q",[16,13],[16,10],"q",[16,6],[10,7],"m",[10,14],"q",[4,15],[4,11],"q",[4,8],[10,7],"q",[16,6],[16,3],"q",[16,0],[10,0],"q",[4,0],[4,3]]},"¨":{w:16,n:4,d:["m",[4,25],"l",[4,23],"m",[12,25],"l",[12,23]]},"©":{w:27,n:15,d:["m",[18,13],"q",[17,15],[14,15],"q",[9,15],[9,11],"l",[9,10],"q",[9,6],[14,6],"q",[17,6],[18,8],"m",[24,10],"q",[24,0],[14,0],"l",[13,0],"q",[3,0],[3,10],"l",[3,11],"q",[3,21],[13,21],"l",[14,21],"q",[24,21],[24,11],"l",[24,10]]},"ª":{w:14,n:9,d:["m",[4,12],"l",[10,12],"m",[10,21],"l",[10,15],"m",[4,18],"q",[4,15],[7,15],"q",[10,15],[10,18],"q",[10,21],[7,21],"q",[4,21],[4,18]]},"«":{w:24,n:4,d:["m",[12,16],"l",[3,9],[12,2],"m",[21,16],"l",[12,9],[21,2]]},"¬":{w:22,n:2,d:["m",[4,12],"l",[18,12],[18,8]]},"­":{w:22,n:2,d:["m",[4,9],"l",[18,9]]},"®":{w:27,n:17,d:["m",[9,6],"l",[9,15],[16,15],"m",[9,10],"l",[16,10],[18,6],"m",[16,10],"q",[18,10],[18,12],"l",[18,13],"q",[18,15],[16,15],"m",[24,10],"q",[24,0],[14,0],"l",[13,0],"q",[3,0],[3,10],"l",[3,11],"q",[3,21],[13,21],"l",[14,21],"q",[24,21],[24,11],"l",[24,10]]},"¯":{w:16,n:2,d:["m",[0,24],"l",[16,24]]},"°":{w:10,n:5,d:["m",[3,23],"q",[3,21],[5,21],"q",[7,21],[7,23],"q",[7,25],[5,25],"q",[3,25],[3,23]]},"±":{w:22,n:6,d:["m",[11,18],"l",[11,6],"m",[4,12],"l",[18,12],"m",[4,2],"l",[18,2]]},"²":{w:14,n:6,d:["m",[10,11],"l",[4,11],"q",[4,15],[7,15],"q",[10,15],[10,18],"q",[10,21],[7,21],"q",[4,21],[4,18]]},"³":{w:14,n:5,d:["m",[4,14],"q",[4,11],[7,11],"q",[10,11],[10,14],"q",[10,17],[7,17],"l",[10,21],[4,21]]},"´":{w:19,n:2,d:["m",[9,18],"l",[12,20]]},"µ":{w:19,n:7,d:["m",[4,14],"l",[4,-6],"m",[4,4],"q",[4,0],[8,0],"q",[13,0],[15,4],"m",[15,14],"l",[15,0]]},"¶":{w:18,n:5,d:["m",[8,11],"q",[3,11],[3,16],"q",[3,21],[9,21],"m",[9,0],"l",[9,21],[15,21],[15,0]]},"·":{w:10,n:2,d:["m",[5,14],"l",[4,13],[5,12],[6,13],[5,14]]},"¸":{w:18,n:2,d:["m",[10,0],"l",[10,-2],[7,-4]]},"¹":{w:10,n:2,d:["m",[4,19],"l",[6,21],[6,11]]},"º":{w:14,n:7,d:["m",[4,12],"l",[10,12],"m",[4,18],"q",[4,15],[7,15],"q",[10,15],[10,18],"q",[10,21],[7,21],"q",[4,21],[4,18]]},"»":{w:24,n:4,d:["m",[3,16],"l",[12,9],[3,2],"m",[12,16],"l",[21,9],[12,2]]},"¼":{w:24,n:6,d:["m",[4,19],"l",[6,21],[6,11],"m",[16,15],"l",[6,5],"m",[19,0],"l",[19,10],[14,4],[20,4]]},"½":{w:24,n:10,d:["m",[4,19],"l",[6,21],[6,11],"m",[16,15],"l",[6,5],"m",[20,0],"l",[14,0],"q",[14,4],[17,4],"q",[20,4],[20,7],"q",[20,10],[17,10],"q",[14,10],[14,7]]},"¾":{w:24,n:10,d:["m",[4,14],"q",[4,11],[7,11],"q",[10,11],[10,14],"q",[10,17],[7,17],"l",[10,21],[4,21],"m",[18,15],"l",[8,5],"m",[19,0],"l",[19,10],[14,4],[20,4]]},"¿":{w:18,n:7,d:["m",[9,21],"l",[8,20],[9,19],[10,20],[9,21],"m",[9,14],"l",[9,10],"q",[3,10],[3,5],"q",[3,0],[9,0],"q",[15,0],[15,5]]},"À":{w:18,n:6,d:["m",[7,25],"l",[10,23],"m",[1,0],"l",[9,21],[17,0],"m",[4,7],"l",[14,7]]},"Á":{w:18,n:6,d:["m",[8,23],"l",[11,25],"m",[1,0],"l",[9,21],[17,0],"m",[4,7],"l",[14,7]]},"Â":{w:18,n:6,d:["m",[7,23],"l",[9,25],[11,23],"m",[1,0],"l",[9,21],[17,0],"m",[4,7],"l",[14,7]]},"Ã":{w:18,n:6,d:["m",[6,23],"l",[8,25],[10,23],[12,25],"m",[1,0],"l",[9,21],[17,0],"m",[4,7],"l",[14,7]]},"Ä":{w:18,n:10,d:["m",[5,25],"l",[5,23],"m",[13,25],"l",[13,23],"m",[1,0],"l",[9,21],[17,0],"m",[4,7],"l",[14,7]]},"Å":{w:18,n:10,d:["m",[7,23],"q",[7,21],[9,21],"q",[11,21],[11,23],"q",[11,25],[9,25],"q",[7,25],[7,23],"m",[1,0],"l",[9,21],[17,0],"m",[4,7],"l",[14,7]]},"Æ":{w:18,n:12,d:["m",[9,21],"l",[1,0],"m",[4,7],"l",[9,7],"m",[9,21],"l",[9,0],"m",[9,21],"l",[17,21],"m",[9,11],"l",[17,11],"m",[9,0],"l",[17,0]]},"Ç":{w:21,n:9,d:["m",[11,0],"l",[11,-2],[8,-4],"m",[11,21],"q",[17,21],[18,16],"m",[18,5],"q",[17,0],[11,0],"q",[3,0],[3,9],"l",[3,12],"q",[3,21],[11,21]]},"È":{w:19,n:8,d:["m",[7,25],"l",[10,23],"m",[17,21],"l",[4,21],[4,0],[17,0],"m",[4,11],"l",[12,11]]},"É":{w:19,n:8,d:["m",[9,23],"l",[12,25],"m",[17,21],"l",[4,21],[4,0],[17,0],"m",[4,11],"l",[12,11]]},"Ê":{w:19,n:8,d:["m",[8,23],"l",[10,25],[12,23],"m",[17,21],"l",[4,21],[4,0],[17,0],"m",[4,11],"l",[12,11]]},"Ë":{w:19,n:10,d:["m",[6,25],"l",[6,23],"m",[15,25],"l",[15,23],"m",[17,21],"l",[4,21],[4,0],[17,0],"m",[4,11],"l",[12,11]]},"Ì":{w:8,n:4,d:["m",[3,25],"l",[6,23],"m",[4,21],"l",[4,0]]},"Í":{w:8,n:4,d:["m",[2,23],"l",[5,25],"m",[4,21],"l",[4,0]]},"Î":{w:8,n:4,d:["m",[2,23],"l",[4,25],[6,23],"m",[4,21],"l",[4,0]]},"Ï":{w:8,n:6,d:["m",[2,25],"l",[2,23],"m",[6,25],"l",[6,23],"m",[4,21],"l",[4,0]]},"Ð":{w:21,n:7,d:["m",[2,10],"l",[11,10],"m",[11,0],"l",[4,0],[4,21],[11,21],"q",[18,21],[18,12],"l",[18,9],"q",[18,0],[11,0]]},"Ñ":{w:22,n:4,d:["m",[8,23],"l",[10,25],[12,23],[14,25],"m",[4,0],"l",[4,21],[18,0],[18,21]]},"Ò":{w:22,n:9,d:["m",[8,25],"l",[11,23],"m",[11,21],"q",[19,21],[19,12],"l",[19,9],"q",[19,0],[11,0],"q",[3,0],[3,9],"l",[3,12],"q",[3,21],[11,21]]},"Ó":{w:22,n:9,d:["m",[10,23],"l",[13,25],"m",[11,21],"q",[19,21],[19,12],"l",[19,9],"q",[19,0],[11,0],"q",[3,0],[3,9],"l",[3,12],"q",[3,21],[11,21]]},"Ô":{w:22,n:9,d:["m",[9,23],"l",[11,25],[13,23],"m",[11,21],"q",[19,21],[19,12],"l",[19,9],"q",[19,0],[11,0],"q",[3,0],[3,9],"l",[3,12],"q",[3,21],[11,21]]},"Õ":{w:22,n:9,d:["m",[8,23],"l",[10,25],[12,23],[14,25],"m",[11,21],"q",[19,21],[19,12],"l",[19,9],"q",[19,0],[11,0],"q",[3,0],[3,9],"l",[3,12],"q",[3,21],[11,21]]},"Ö":{w:22,n:13,d:["m",[6,25],"l",[6,23],"m",[16,25],"l",[16,23],"m",[11,21],"q",[19,21],[19,12],"l",[19,9],"q",[19,0],[11,0],"q",[3,0],[3,9],"l",[3,12],"q",[3,21],[11,21]]},"×":{w:12,n:4,d:["m",[2,16],"l",[10,6],"m",[10,16],"l",[2,6]]},"Ø":{w:22,n:9,d:["m",[3,1],"l",[19,20],"m",[11,21],"q",[19,21],[19,12],"l",[19,9],"q",[19,0],[11,0],"q",[3,0],[3,9],"l",[3,12],"q",[3,21],[11,21]]},"Ù":{w:22,n:7,d:["m",[8,25],"l",[11,23],"m",[4,21],"l",[4,6],"q",[4,0],[11,0],"q",[18,0],[18,6],"l",[18,21]]},"Ú":{w:22,n:7,d:["m",[10,23],"l",[13,25],"m",[4,21],"l",[4,6],"q",[4,0],[11,0],"q",[18,0],[18,6],"l",[18,21]]},"Û":{w:22,n:7,d:["m",[9,23],"l",[11,25],[13,23],"m",[4,21],"l",[4,6],"q",[4,0],[11,0],"q",[18,0],[18,6],"l",[18,21]]},"Ü":{w:22,n:9,d:["m",[7,25],"l",[7,23],"m",[15,25],"l",[15,23],"m",[4,21],"l",[4,6],"q",[4,0],[11,0],"q",[18,0],[18,6],"l",[18,21]]},"Ý":{w:18,n:6,d:["m",[8,23],"l",[11,25],"m",[1,21],"l",[9,11],[9,0],"m",[17,21],"l",[9,11]]},"Þ":{w:19,n:7,d:["m",[4,18],"l",[4,-5],"m",[4,14],"l",[9,14],"q",[16,14],[16,7],"q",[16,0],[9,0],"l",[4,0]]},"ß":{w:21,n:9,d:["m",[8,0],"l",[11,0],"q",[17,0],[17,5],"l",[17,6],"q",[17,10],[11,12],"q",[16,13],[16,16],"q",[16,21],[10,21],"q",[4,21],[4,16],"l",[4,0]]},"à":{w:19,n:12,d:["m",[7,20],"l",[10,18],"m",[15,14],"l",[15,0],"m",[10,14],"l",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[13,0],[15,2],"m",[15,12],"q",[13,14],[10,14]]},"á":{w:19,n:12,d:["m",[9,18],"l",[12,20],"m",[15,14],"l",[15,0],"m",[10,14],"l",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[13,0],[15,2],"m",[15,12],"q",[13,14],[10,14]]},"â":{w:19,n:12,d:["m",[7,18],"l",[9,20],[11,18],"m",[15,14],"l",[15,0],"m",[10,14],"l",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[13,0],[15,2],"m",[15,12],"q",[13,14],[10,14]]},"ã":{w:19,n:12,d:["m",[7,18],"l",[9,20],[11,18],[13,20],"m",[15,14],"l",[15,0],"m",[10,14],"l",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[13,0],[15,2],"m",[15,12],"q",[13,14],[10,14]]},"ä":{w:19,n:14,d:["m",[4,20],"l",[4,18],"m",[15,20],"l",[15,18],"m",[15,14],"l",[15,0],"m",[10,14],"l",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[13,0],[15,2],"m",[15,12],"q",[13,14],[10,14]]},"å":{w:19,n:15,d:["m",[7,18],"q",[7,16],[9,16],"q",[11,16],[11,18],"q",[11,20],[9,20],"q",[7,20],[7,18],"m",[15,14],"l",[15,0],"m",[10,14],"l",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[13,0],[15,2],"m",[15,12],"q",[13,14],[10,14]]},"æ":{w:21,n:10,d:["m",[11,14],"l",[11,0],"m",[11,8],"l",[18,8],"q",[18,14],[12,14],"l",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[13,0],"q",[17,0],[18,3]]},"ç":{w:18,n:10,d:["m",[10,0],"l",[10,-2],[7,-4],"m",[10,14],"l",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[14,0],[15,3],"m",[15,11],"q",[14,14],[10,14]]},"è":{w:18,n:10,d:["m",[7,20],"l",[10,18],"m",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[14,0],[15,3],"m",[3,8],"l",[15,8],"q",[15,14],[9,14]]},"é":{w:18,n:10,d:["m",[9,18],"l",[12,20],"m",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[14,0],[15,3],"m",[3,8],"l",[15,8],"q",[15,14],[9,14]]},"ê":{w:18,n:10,d:["m",[7,18],"l",[9,20],[11,18],"m",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[14,0],[15,3],"m",[3,8],"l",[15,8],"q",[15,14],[9,14]]},"ë":{w:18,n:12,d:["m",[4,20],"l",[4,18],"m",[15,20],"l",[15,18],"m",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[14,0],[15,3],"m",[3,8],"l",[15,8],"q",[15,14],[9,14]]},"ì":{w:8,n:4,d:["m",[3,20],"l",[6,18],"m",[4,14],"l",[4,0]]},"í":{w:8,n:4,d:["m",[2,18],"l",[5,20],"m",[4,14],"l",[4,0]]},"î":{w:8,n:4,d:["m",[2,18],"l",[4,20],[6,18],"m",[4,14],"l",[4,0]]},"ï":{w:8,n:6,d:["m",[2,20],"l",[2,18],"m",[6,20],"l",[6,18],"m",[4,14],"l",[4,0]]},"ð":{w:19,n:12,d:["m",[8,17],"l",[10,21],"m",[7,20],"l",[11,18],"q",[16,16],[16,8],"m",[10,14],"l",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[16,0],[16,7],"q",[16,14],[10,14]]},"ñ":{w:19,n:8,d:["m",[7,18],"l",[9,20],[11,18],[13,20],"m",[4,14],"l",[4,0],"m",[4,10],"q",[6,14],[11,14],"q",[15,14],[15,10],"l",[15,0]]},"ò":{w:19,n:9,d:["m",[7,20],"l",[10,18],"m",[10,14],"l",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[16,0],[16,7],"q",[16,14],[10,14]]},"ó":{w:19,n:9,d:["m",[9,18],"l",[12,20],"m",[10,14],"l",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[16,0],[16,7],"q",[16,14],[10,14]]},"ô":{w:19,n:9,d:["m",[7,18],"l",[9,20],[11,18],"m",[10,14],"l",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[16,0],[16,7],"q",[16,14],[10,14]]},"õ":{w:19,n:9,d:["m",[7,18],"l",[9,20],[11,18],[13,20],"m",[10,14],"l",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[16,0],[16,7],"q",[16,14],[10,14]]},"ö":{w:19,n:11,d:["m",[4,20],"l",[4,18],"m",[15,20],"l",[15,18],"m",[10,14],"l",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[16,0],[16,7],"q",[16,14],[10,14]]},"÷":{w:18,n:6,d:["m",[9,15],"l",[9,14],"m",[4,9],"l",[14,9],"m",[9,4],"l",[9,3]]},"ø":{w:19,n:9,d:["m",[3,1],"l",[15,14],"m",[10,14],"l",[9,14],"q",[3,14],[3,7],"q",[3,0],[9,0],"l",[10,0],"q",[16,0],[16,7],"q",[16,14],[10,14]]},"ù":{w:19,n:8,d:["m",[7,20],"l",[10,18],"m",[4,14],"l",[4,4],"q",[4,0],[8,0],"q",[13,0],[15,4],"m",[15,14],"l",[15,0]]},"ú":{w:19,n:8,d:["m",[9,18],"l",[12,20],"m",[4,14],"l",[4,4],"q",[4,0],[8,0],"q",[13,0],[15,4],"m",[15,14],"l",[15,0]]},"û":{w:19,n:8,d:["m",[7,18],"l",[9,20],[11,18],"m",[4,14],"l",[4,4],"q",[4,0],[8,0],"q",[13,0],[15,4],"m",[15,14],"l",[15,0]]},"ü":{w:19,n:10,d:["m",[4,20],"l",[4,18],"m",[15,20],"l",[15,18],"m",[4,14],"l",[4,4],"q",[4,0],[8,0],"q",[13,0],[15,4],"m",[15,14],"l",[15,0]]},"ý":{w:16,n:7,d:["m",[7,18],"l",[10,20],"m",[2,14],"l",[8,0],"m",[14,14],"l",[8,0],"q",[5,-7],[1,-7]]},"þ":{w:19,n:10,d:["m",[4,21],"l",[4,-7],"m",[10,14],"l",[9,14],"q",[6,14],[4,12],"m",[4,2],"q",[6,0],[9,0],"l",[10,0],"q",[16,0],[16,7],"q",[16,14],[10,14]]},"ÿ":{w:16,n:9,d:["m",[2,20],"l",[2,18],"m",[14,20],"l",[14,18],"m",[2,14],"l",[8,0],"m",[14,14],"l",[8,0],"q",[5,-7],[1,-7]]}};(function($){function Plot(target,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.85},xaxis:{mode: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},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:0},grid:{show:true,color:"#545454",backgroundColor:null,tickColor:"#dddddd",labelMargin:5,borderWidth:2,borderColor:null,markings:null,markingsColor:"#f4f4f4",markingsLineWidth:2,clickable:false,hoverable:false,autoHighlight:true,mouseActiveRadius:10,xaxisLabel:true,yaxisLabel:true,x2axisLabel:true,y2axisLabel:true},selection:{mode:null,color:"#e8cfac"}},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,workarounds={};plot.setData=setData;plot.setupGrid=setupGrid;plot.draw=draw;plot.clearSelection=clearSelection;plot.setSelection=setSelection;plot.getSelection=getSelection;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;}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(parseColor(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=new Color(100,100,100);}else{c=parseColor(options.colors[i]);}var sign=variation%2==1?-1:1;var factor=1+sign*Math.ceil(variation/2)*0.2;c.scale(factor,factor,factor);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&&!s.bars.show&&!s.points.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;for(axis in axes){axes[axis].datamin=topSentry;axes[axis].datamax=bottomSentry;axes[axis].min=options[axis].min;axes[axis].max=options[axis].max;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];if(s.datapoints.pointsize!=null){continue;}var data=s.data,format=[],p;if(s.bars.show){s.datapoints.pointsize=3;format.push({d:0});}else{s.datapoints.pointsize=2;}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];if(p!=null){x=p[0];y=p[1];}else{y=x=null;}if(x!=null){x=+x;if(isNaN(x)){x=null;}}if(y!=null){y=+y;if(isNaN(y)){y=null;}}if(x==null&&y!=null){updateAxis(s.yaxis,y,y);y=null;}if(y==null&&x!=null){updateAxis(s.xaxis,x,x);x=null;}if(insertSteps&&x!=null&&k>0&&points[k-ps]!=null&&points[k-ps]!=x&&points[k-ps+1]!=y){points[k+1]=points[k-ps+1];points[k]=x;for(m=2;m<ps;++m){points[k+m]=p[m]==null?format[m-2].d:p[m];}k+=ps;}for(m=2;m<ps;++m){points[k+m]=p==null||p[m]==null?format[m-2].d:p[m];}points[k]=x;points[k+1]=y;}}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){x=points[j];if(x==null){continue;}if(x<xmin){xmin=x;}if(x>xmax){xmax=x;}y=points[j+1];if(y<ymin){ymin=y;}if(y>ymax){ymax=y;}}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(!c.getContext){c=window.G_vmlCanvasManager.initElement(c);}return c;}canvasWidth=target.width();canvasHeight=target.height();target.html("");if(target.css("position")=="static"){target.css("position","relative");}if(canvasWidth<=0||canvasHeight<=0){throw"Invalid dimensions for plot, width = "+canvasWidth+", height = "+canvasHeight;}if(window.G_vmlCanvasManager){window.G_vmlCanvasManager.init_(document);}canvas=$(makeCanvas(canvasWidth,canvasHeight)).appendTo(target).get(0);ctx=canvas.getContext("2d");overlay=$(makeCanvas(canvasWidth,canvasHeight)).css({position:"absolute",left:0,top:0}).appendTo(target).get(0);octx=overlay.getContext("2d");octx.stroke();}function bindEvents(){eventHolder=$([overlay,canvas]);if(options.selection.mode!=null||options.grid.hoverable){eventHolder.mousemove(onMouseMove);}if(options.selection.mode!=null){eventHolder.mousedown(onMouseDown);}if(options.grid.clickable){eventHolder.click(onClick);}executeHooks(hooks.bindEvents,[eventHolder]);}function setupGrid(){function setTransformationHelpers(axis){var s,m;if(axis==axes.xaxis||axis==axes.x2axis){s=axis.scale=plotWidth/(axis.max-axis.min);m=axis.min;axis.p2c=function(p){return(p-m)*s;};axis.c2p=function(c){return m+c/s;};}else{s=axis.scale=plotHeight/(axis.max-axis.min);m=axis.max;axis.p2c=function(p){return(m-p)*s;};axis.c2p=function(p){return m-p/s;};}}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]);}setGridSpacing();}else{plotOffset.left=plotOffset.right=plotOffset.top=plotOffset.bottom=0;plotWidth=canvasWidth;plotHeight=canvasHeight;}for(axis in axes){setTransformationHelpers(axes[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);if(max-min==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-=(max-min)*margin;if(min<0&&axis.datamin!=null&&axis.datamin>=0){min=0;}}if(axisOptions.max==null){max+=(max-min)*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=canvasWidth/100;}else{noTicks=canvasHeight/60;}}var delta=(axis.max-axis.min)/noTicks;var 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;if(t<timeUnitSize.minute){fmt="%h:%M:%S";}else{if(t<timeUnitSize.day){if(span<2*timeUnitSize.day){fmt="%h:%M";}else{fmt="%b %d %h:%M";}}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(axisOptions.labelWidth!=null){axis.labelWidth=axisOptions.labelWidth;}if(axisOptions.labelHeight!=null){axis.labelHeight=axisOptions.labelHeight;}}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.min(axis.max,axis.ticks[axis.ticks.length-1].v);}}}function setGridSpacing(){function measureXLabels(axis){if(axis.labelWidth==null){axis.labelWidth=canvasWidth/6;}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>");}}axis.labelHeight=0;if(labels.length>0){var dummyDiv=$('<div style="position:absolute;top:-10000px;width:10000px;font-size:smaller">'+labels.join("")+'<div style="clear:left"></div></div>').appendTo(target);axis.labelHeight=dummyDiv.height();dummyDiv.remove();}}}function measureYLabels(axis){if(axis.labelWidth==null||axis.labelHeight==null){var i,labels=[],l;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:smaller">'+labels.join("")+"</div>").appendTo(target);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;}}}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;measureXLabels(axes.xaxis);measureYLabels(axes.yaxis);measureXLabels(axes.x2axis);measureYLabels(axes.y2axis);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;}function draw(){if(options.grid.show){drawGrid();}for(var i=series.length-1;i>=0;i--){if(series[i].lines.show){drawSeriesLines(series[i]);}if(series[i].bars.show){drawSeriesBars(series[i]);}}for(var i=series.length-1;i>=0;i--){if(series[i].points.show){drawSeriesPoints(series[i]);}}executeHooks(hooks.draw,[ctx]);}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.clearRect(0,0,canvasWidth,canvasHeight);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.strokeStyle=m.color||options.grid.markingsColor;ctx.beginPath();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(){target.find(".tickLabels").remove();var html=['<div class="tickLabels" style="font-size:smaller;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;if(options.grid.xaxisLabel){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">'+tick.label+"</div>";});}if(options.grid.yaxisLabel){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">'+tick.label+"</div>";});}if(options.grid.x2axisLabel){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>";});}if(options.grid.y2axisLabel){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>");target.append(html.join(""));}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;}if(series.pointRenderer){series.pointRenderer.drawCustomDataPoint(ctx,axisx,axisy,x,y,series.customDataPoints[i/ps],series.pointStyle);}else{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=parseColor(seriesColor);c.a=typeof fill=="number"?fill:0.4;c.normalize();return c.toString();}function insertLegend(){target.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: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('style="','style="position:absolute;'+pos+";")+"</div>").appendTo(target);if(options.legend.backgroundOpacity!=0){var c=options.legend.backgroundColor;if(c==null){var tmp;if(options.grid.backgroundColor&&typeof options.grid.backgroundColor=="string"){tmp=options.grid.backgroundColor;}else{tmp=extractColor(legend);}c=parseColor(tmp).adjust(null,null,null,1).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 lastMousePos={pageX:null,pageY:null},selection={first:{x:-1,y:-1},second:{x:-1,y:-1},show:false,active:false},highlights=[],clickIsMouseUp=false,redrawTimeout=null,hoverTimeout=null;function findNearbyItem(mouseX,mouseY,seriesFilter){var maxDistance=options.grid.mouseActiveRadius,lowestDistance=maxDistance*maxDistance+1,item=null,foundPoint=false,i,j;for(var 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<lowestDistance){lowestDistance=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];return{datapoint:series[i].datapoints.points.slice(j*ps,(j+1)*ps),dataIndex:j,series:series[i],seriesIndex:i};}return null;}function onMouseMove(e){lastMousePos.pageX=e.pageX;lastMousePos.pageY=e.pageY;if(options.grid.hoverable){triggerClickHoverEvent("plothover",lastMousePos,function(s){return s["hoverable"]!=false;});}if(selection.active){target.trigger("plotselecting",[getSelection()]);updateSelection(lastMousePos);}}function onMouseDown(e){if(e.which!=1){return;}document.body.focus();if(document.onselectstart!==undefined&&workarounds.onselectstart==null){workarounds.onselectstart=document.onselectstart;document.onselectstart=function(){return false;};}if(document.ondrag!==undefined&&workarounds.ondrag==null){workarounds.ondrag=document.ondrag;document.ondrag=function(){return false;};}setSelectionPos(selection.first,e);lastMousePos.pageX=null;selection.active=true;$(document).one("mouseup",onSelectionMouseUp);}function onClick(e){if(clickIsMouseUp){clickIsMouseUp=false;return;}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);}}target.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=highlights.length;i>0;i--){hi=highlights[i-1];if(hi.series.bars.show){drawBarHighlight(hi.series,hi.point);}else{drawPointHighlight(hi.series,hi.point);}}if(selection.show&&selectionIsSane()){octx.strokeStyle=parseColor(options.selection.color).scale(null,null,null,0.8).toString();octx.lineWidth=1;ctx.lineJoin="round";octx.fillStyle=parseColor(options.selection.color).scale(null,null,null,0.4).toString();var x=Math.min(selection.first.x,selection.second.x),y=Math.min(selection.first.y,selection.second.y),w=Math.abs(selection.second.x-selection.first.x),h=Math.abs(selection.second.y-selection.first.y);octx.fillRect(x,y,w,h);octx.strokeRect(x,y,w,h);}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){if(series.pointRenderer){series.pointRenderer.highlightCustomDataPoint(octx,series,point);}else{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=parseColor(series.color).scale(1,1,1,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=parseColor(series.color).scale(1,1,1,0.5).toString();var fillStyle=parseColor(series.color).scale(1,1,1,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 getSelection(){if(!selectionIsSane()){return null;}var x1=Math.min(selection.first.x,selection.second.x),x2=Math.max(selection.first.x,selection.second.x),y1=Math.max(selection.first.y,selection.second.y),y2=Math.min(selection.first.y,selection.second.y);var r={};if(axes.xaxis.used){r.xaxis={from:axes.xaxis.c2p(x1),to:axes.xaxis.c2p(x2)};}if(axes.x2axis.used){r.x2axis={from:axes.x2axis.c2p(x1),to:axes.x2axis.c2p(x2)};}if(axes.yaxis.used){r.yaxis={from:axes.yaxis.c2p(y1),to:axes.yaxis.c2p(y2)};}if(axes.y2axis.used){r.y2axis={from:axes.y2axis.c2p(y1),to:axes.y2axis.c2p(y2)};}return r;}function triggerSelectedEvent(){var r=getSelection();target.trigger("plotselected",[r]);if(axes.xaxis.used&&axes.yaxis.used){target.trigger("selected",[{x1:r.xaxis.from,y1:r.yaxis.from,x2:r.xaxis.to,y2:r.yaxis.to}]);}}function onSelectionMouseUp(e){if(document.onselectstart!==undefined){document.onselectstart=workarounds.onselectstart;}if(document.ondrag!==undefined){document.ondrag=workarounds.ondrag;}selection.active=false;updateSelection(e);if(selectionIsSane()){triggerSelectedEvent();clickIsMouseUp=true;}else{target.trigger("plotunselected",[]);target.trigger("plotselecting",[null]);}return false;}function setSelectionPos(pos,e){var offset=eventHolder.offset();pos.x=clamp(0,e.pageX-offset.left-plotOffset.left,plotWidth);pos.y=clamp(0,e.pageY-offset.top-plotOffset.top,plotHeight);if(options.selection.mode=="y"){if(pos==selection.first){pos.x=0;}else{pos.x=plotWidth;}}if(options.selection.mode=="x"){if(pos==selection.first){pos.y=0;}else{pos.y=plotHeight;}}}function updateSelection(pos){if(pos.pageX==null){return;}setSelectionPos(selection.second,pos);if(selectionIsSane()){selection.show=true;triggerRedrawOverlay();}else{clearSelection(true);}}function clearSelection(preventEvent){if(selection.show){selection.show=false;triggerRedrawOverlay();if(!preventEvent){target.trigger("plotunselected",[]);}}}function setSelection(ranges,preventEvent){var range;if(options.selection.mode=="y"){selection.first.x=0;selection.second.x=plotWidth;}else{range=extractRange(ranges,"x");selection.first.x=range.axis.p2c(range.from);selection.second.x=range.axis.p2c(range.to);}if(options.selection.mode=="x"){selection.first.y=0;selection.second.y=plotHeight;}else{range=extractRange(ranges,"y");selection.first.y=range.axis.p2c(range.from);selection.second.y=range.axis.p2c(range.to);}selection.show=true;triggerRedrawOverlay();if(!preventEvent){triggerSelectedEvent();}}function selectionIsSane(){var minSize=5;return Math.abs(selection.second.x-selection.first.x)>=minSize&&Math.abs(selection.second.y-selection.first.y)>=minSize;}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];gradient.addColorStop(i/(l-1),typeof c=="string"?c:parseColor(defaultColor).scale(c.brightness,c.brightness,c.brightness,c.opacity));}return gradient;}}}$.plot=function(target,data,options){var plot=new Plot($(target),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;if(monthNames==null){monthNames=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];}for(var i=0;i<fmt.length;++i){var c=fmt.charAt(i);if(escape){switch(c){case"h":c=""+d.getUTCHours();break;case"H":c=leftPad(d.getUTCHours());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;}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);}function clamp(min,value,max){if(value<min){return min;}else{if(value>max){return max;}else{return value;}}}function Color(r,g,b,a){var rgba=["r","g","b","a"];var x=4;while(-1<--x){this[rgba[x]]=arguments[x]||((x==3)?1:0);}this.toString=function(){if(this.a>=1){return"rgb("+[this.r,this.g,this.b].join(",")+")";}else{return"rgba("+[this.r,this.g,this.b,this.a].join(",")+")";}};this.scale=function(rf,gf,bf,af){x=4;while(-1<--x){if(arguments[x]!=null){this[rgba[x]]*=arguments[x];}}return this.normalize();};this.adjust=function(rd,gd,bd,ad){x=4;while(-1<--x){if(arguments[x]!=null){this[rgba[x]]+=arguments[x];}}return this.normalize();};this.clone=function(){return new Color(this.r,this.b,this.g,this.a);};var limit=function(val,minVal,maxVal){return Math.max(Math.min(val,maxVal),minVal);};this.normalize=function(){this.r=clamp(0,parseInt(this.r),255);this.g=clamp(0,parseInt(this.g),255);this.b=clamp(0,parseInt(this.b),255);this.a=clamp(0,this.a,1);return this;};this.normalize();}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],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 extractColor(element){var color,elem=element;do{color=elem.css("background-color").toLowerCase();if(color!=""&&color!="transparent"){break;}elem=elem.parent();}while(!$.nodeName(elem.get(0),"body"));if(color=="rgba(0, 0, 0, 0)"){return"transparent";}return color;}function parseColor(str){var result;if(result=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str)){return new Color(parseInt(result[1],10),parseInt(result[2],10),parseInt(result[3],10));}if(result=/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 new Color(parseInt(result[1],10),parseInt(result[2],10),parseInt(result[3],10),parseFloat(result[4]));}if(result=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str)){return new Color(parseFloat(result[1])*2.55,parseFloat(result[2])*2.55,parseFloat(result[3])*2.55);}if(result=/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 new Color(parseFloat(result[1])*2.55,parseFloat(result[2])*2.55,parseFloat(result[3])*2.55,parseFloat(result[4]));}if(result=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str)){return new Color(parseInt(result[1],16),parseInt(result[2],16),parseInt(result[3],16));}if(result=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str)){return new Color(parseInt(result[1]+result[1],16),parseInt(result[2]+result[2],16),parseInt(result[3]+result[3],16));}var name=$.trim(str).toLowerCase();if(name=="transparent"){return new Color(255,255,255,0);}else{result=lookupColors[name];return new Color(result[0],result[1],result[2]);}}})(jQuery);(function($){var options={crosshair:{mode:null,color:"rgba(170, 0, 0, 0.80)"}};function init(plot){var crosshair={x:-1,y:-1};plot.setCrosshair=function setCrosshair(pos){if(!pos){crosshair.x=-1;}else{var axes=plot.getAxes();crosshair.x=Math.max(0,Math.min(pos.x!=null?axes.xaxis.p2c(pos.x):axes.x2axis.p2c(pos.x2),plot.width()));crosshair.y=Math.max(0,Math.min(pos.y!=null?axes.yaxis.p2c(pos.y):axes.y2axis.p2c(pos.y2),plot.height()));}plot.triggerRedrawOverlay();};plot.clearCrosshair=plot.setCrosshair;plot.hooks.bindEvents.push(function(plot,eventHolder){if(!plot.getOptions().crosshair.mode){return;}eventHolder.mouseout(function(){if(crosshair.x!=-1){crosshair.x=-1;plot.triggerRedrawOverlay();}});eventHolder.mousemove(function(e){if(!plot.getSelection()){var offset=plot.offset();crosshair.x=Math.max(0,Math.min(e.pageX-offset.left,plot.width()));crosshair.y=Math.max(0,Math.min(e.pageY-offset.top,plot.height()));plot.triggerRedrawOverlay();}else{crosshair.x=-1;}});});plot.hooks.drawOverlay.push(function(plot,ctx){var c=plot.getOptions().crosshair;if(!c.mode){return;}var plotOffset=plot.getPlotOffset();ctx.save();ctx.translate(plotOffset.left,plotOffset.top);if(crosshair.x!=-1){ctx.strokeStyle=c.color;ctx.lineWidth=1;ctx.lineJoin="round";ctx.beginPath();if(c.mode.indexOf("x")!=-1){ctx.moveTo(crosshair.x,0);ctx.lineTo(crosshair.x,plot.height());}if(c.mode.indexOf("y")!=-1){ctx.moveTo(0,crosshair.y);ctx.lineTo(plot.width(),crosshair.y);}ctx.stroke();}ctx.restore();});}$.plot.plugins.push({init:init,options:options,name:"crosshair",version:"1.0"});})(jQuery);(function($){var options={dataTooltips:{dataPoints:null,pointRange:0,tooltips:null}};function init(plot){plot.clearDataTooltip=function(){var dataTooltips=plot.getOptions().dataTooltips;dataTooltips.activeDataPoint=null;for(tooltip in dataTooltips.tooltips){$("#"+dataTooltips.tooltips[tooltip].id).hide();}var data=plot.getData();for(var i=0;i<data.length;i++){var points=data[i].customDataPoints;for(p in points){var point=points[p];plot.unhighlight(i,[point.x,point.y]);}}};plot.hooks.bindEvents.push(function(plot,eventHolder){if(!plot.getOptions().dataTooltips.tooltips){return;}var dataTooltips=plot.getOptions().dataTooltips;for(tooltip in dataTooltips.tooltips){var tooltip=dataTooltips.tooltips[tooltip];if($("#"+tooltip.id).length==0){var el='<div id="'+tooltip.id+'"';if(dataTooltips.dataPointerClass){el=el+' class="'+dataTooltips.dataPointerClass+'"';}el=el+'><div class="inner"></div></div>';$("body").append(el);}}eventHolder.mouseout(function(){plot.getOptions().dataTooltips.out=true;plot.clearDataTooltip();});eventHolder.mouseover(function(){plot.getOptions().dataTooltips.out=false;});eventHolder.mousemove(function(e){var dataTooltips=plot.getOptions().dataTooltips;dataTooltips.activeDataPoints=[];var offset=plot.offset();dataTooltips.xCoord=Math.max(0,Math.min(e.pageX-offset.left,plot.width()));var xaxisCoord=plot.getAxes().xaxis.c2p(dataTooltips.xCoord);dataTooltips.canvasSector=dataTooltips.xCoord<plot.width()/2?"right":"left";var data=plot.getData();for(d in data){var points=data[d].customDataPoints;for(var i=0;i<points.length;i++){var point=points[i];if(i===0){continue;}else{if(point.x>=xaxisCoord&&dataTooltips.xCoord<plot.width()){dataTooltips.activeDataPoints.push(point);break;}}}}plot.triggerRedrawOverlay();});});plot.hooks.drawOverlay.push(function(plot,ctx){var plotOptions=plot.getOptions();if(!plotOptions.dataTooltips.tooltips){return;}var dataTooltips=plotOptions.dataTooltips;var canvas=plot.getCanvas();if(!dataTooltips.out&&dataTooltips.activeDataPoints.length>0&&canvas.parentNode){var data=plot.getData();for(var i=0;i<data.length;i++){var points=data[i].customDataPoints;for(p in points){var point=points[p];plot.unhighlight(i,[point.x,point.y]);}}var primaryActiveDataPoint=null;for(var i=0;i<dataTooltips.activeDataPoints.length;i++){if(i==0){primaryActiveDataPoint=dataTooltips.activeDataPoints[i];}plot.highlight(i,[dataTooltips.activeDataPoints[i].x,dataTooltips.activeDataPoints[i].y],"plothover");continue;}var targetPlot=$("#"+canvas.parentNode.id);for(var i=0;i<dataTooltips.tooltips.length;i++){var tooltip=dataTooltips.tooltips[i];var top=0;var left=0;if(tooltip.type==="tp"){top=targetPlot.position().top+plot.height()+7;left=dataTooltips.xCoord+targetPlot.position().left;if(dataTooltips.canvasSector=="left"){left-=82;}else{left+=45;}}else{if(tooltip.type==="dp"){top=plot.getAxes().yaxis.p2c(primaryActiveDataPoint.y)+targetPlot.position().top-2;left=dataTooltips.xCoord+targetPlot.position().left;if(dataTooltips.canvasSector=="left"){var dpc=dataTooltips.dataPointerClass;if(dpc==="short"){left-=47;}else{if(dpc==="medium"||dpc===""){left-=165;}else{if(dpc==="long"){left-=226;}}}}else{if(dataTooltips.canvasSector=="right"){var dpc=dataTooltips.dataPointerClass;if(dpc==="short"){left+=47;}else{if(dpc==="medium"||dpc===""){left+=60;}else{if(dpc==="long"){left+=60;}}}}}}}$("#"+tooltip.id+" .inner").html('<div class="'+dataTooltips.canvasSector+'">'+tooltip.render(primaryActiveDataPoint)+"</div>");$("#"+tooltip.id).css({top:top,left:left}).show();}}else{plot.clearDataTooltip();}});}$.plot.plugins.push({init:init,options:options,name:"tooltip",version:"1.0"});})(jQuery);(function($){function init(plot){function customDraw(plot,ctx){var options=plot.getOptions();if(options.customDraw){var customDraw=options.customDraw;var tm=customDraw.timeMeridiem;if(tm){var config=plot.getOptions();var fragments=[];var plotOffset=plot.getPlotOffset();fragments.push('<div style="position:absolute;top:',plotOffset.top+2,"px;left:",plotOffset.left,"px;font-size:",tm.fontSize,'">');fragments.push('<table style="text-align:center;color:',tm.color,";width:",plot.width(),'px">');fragments.push("<tr>");for(var i=0;i<(tm.days*2);i++){var text=i%2==0?"AM":"PM";fragments.push("<td>");fragments.push(text);fragments.push("</td>");}fragments.push("</tr></table></div>");$(fragments.join("")).appendTo(options.targetId);}for(var l in customDraw.labels){var label=customDraw.labels[l];var x=0,y=215,rotate=270;if(label.yaxis>1){x=plot.getCanvas().width,y=95,rotate=90;}var text=label.mesConfig.label+" ("+label.mesConfig.type+")";var ctx=plot.getCanvas().getContext("2d");set_textRenderContext(ctx);ctx.save();ctx.translate(x,y);ctx.rotate(rotate*Math.PI/180);ctx.strokeStyle="#666";ctx.strokeText(text,0,0,10);ctx.restore();}var ctx=plot.getCanvas().getContext("2d");ctx.save();set_textRenderContext(ctx);for(var t in customDraw.text){var item=customDraw.text[t];ctx.strokeStyle=item.color;ctx.strokeText(item.text,item.x,item.y,10);}ctx.restore();}}plot.hooks.draw.push(customDraw);}$.plot.plugins.push({init:init,options:{},name:"timemeridiem",version:"0.1"});})(jQuery);ww.FlotForecast=function(){return{init:function(dataConfig,flotConfig){this.initFlotChart(dataConfig,flotConfig);if(this.keyBoxPath){$(this.forecastId+" "+this.keyBoxPath+" .checkbox").click();}},lazyInit:function(flotConfig){var series=[];for(var mes in flotConfig.mesTypeConfig){series[series.length]=flotConfig.mesTypeConfig[mes].series;}$.getJSON(this.dataUrl,{weatherTypes:series.join(",")},this.lazyInitCallback.createDelegate(this,[flotConfig],true));},lazyInitCallback:function(dataConfig,response,jqxhr,flotConfig){$(flotConfig.forecastId+"-canvas").removeClass("chart-load");this.initFlotChart(dataConfig,flotConfig);},initFlotChart:function(dataConfig,flotConfig){this.dataUrl=flotConfig.url.replace("target","flotForecastData");this.reloadUrl=flotConfig.url.replace("target","flotForecastReload");this.forecastId=flotConfig.forecastId;this.keyBoxPath=flotConfig.keyBoxPath;this.mesTypeConfig=flotConfig.mesTypeConfig;this.flotCanvasId=flotConfig.forecastId+"-canvas";this.forecastSize=flotConfig.forecastSize;this.navIndex=flotConfig.startIndex;this.visible=flotConfig.visible;this.graph=!flotConfig.graph?"ww.FlotGraph":flotConfig.graph;this.dataConfig=dataConfig;if(ww.Utils.ie6()){this.dataPointerClass="";}else{if(!flotConfig.dataPointerClass){this.dataPointerClass="medium";}else{this.dataPointerClass=flotConfig.dataPointerClass;}}if(this.keyBoxPath){$(this.forecastId+" "+this.keyBoxPath+" .checkbox").click(this.keyBoxCheckHandler.createDelegate(this));$(this.forecastId+" "+this.keyBoxPath+" .key-toggle").click(function(){var el=$(this.forecastId+" "+this.keyBoxPath+" .key");el.is(":visible")?el.hide():el.show();}.createDelegate(this));}this.initMeasurementsEvents(this.mesTypeConfig);$(this.forecastId+" .jump-to input").change(this.jumpToHandler.createDelegate(this));this.render(true);this.reload.interval(1800000,this);},render:function(full){var mesConfig=this.getMeasurementTypeConfig(this.getPrimarySeries().config.id);if(full){this.drawForecastDays();this.resetNavigation();this.convertDataForAllSeries();}eval("new "+this.graph+"(this.getGraphConfig(this.getSelectedSeries()))");},getGraphConfig:function(seriesIds){var graphConfig={flotCanvasId:this.flotCanvasId,xaxisStart:this.dataConfig.xaxisStart,xaxisEnd:this.dataConfig.xaxisEnd,dataPointerClass:this.dataPointerClass,series:[]};for(index in this.dataConfig.series){var series=this.dataConfig.series[index];for(var id in seriesIds){if(seriesIds[id]===series.config.id){var mesConfig=this.getMeasurementTypeConfig(series.config.id);var currentMes=mesConfig.currentMesType?mesConfig.currentMesType:mesConfig.dataMesType;var yAxisRatio=this.getYAxisRatioForMeasurementTypeConfig(mesConfig,currentMes);var yAxisDataMax=mesConfig.converter?mesConfig.converter.apply(this,[series.yAxisDataMax,mesConfig.dataMesType,currentMes]):series.yAxisDataMax;series.mesConfig={type:currentMes,label:mesConfig.label,yAxisRatio:parseFloat(yAxisRatio),yAxisDataMax:parseFloat(yAxisDataMax)};graphConfig.series.push(series);}}}return graphConfig;},drawForecastDays:function(){var series=this.getPrimarySeries();var forecastDays=[];for(var i=0;i<series.groups.length;i++){var group=series.groups[i];var isToday=group.isToday?" heading-today":"";var isFirst=i==0?" first":"";var isLast=i+1==series.groups.length?" last":"";var date=group["dateTime"]*1000;forecastDays.push('<div class="day"><div class="heading',isToday,isFirst,isLast,'">','<div class="day-title">',ww.Utils.formatTimeStamp(date,"D"),'</div><div class="date-title">',ww.Utils.formatTimeStamp(date,"M j"),"</div></div></div>");}$(this.forecastId+" .days").html(forecastDays.join(""));},resetNavigation:function(){for(var index in this.dataConfig.series){var series=this.dataConfig.series[index];if(series.config.primary){var prev=this.forecastId+" .prev";var next=this.forecastId+" .next";$(prev).addClass("prev-disabled").unbind();$(next).addClass("next-disabled").unbind();if(series.groups.length==0){$(prev).addClass("prev-disabled");$(next).addClass("next-disabled");}else{if(this.navIndex>1){$(prev).removeClass("prev-disabled").bind("click",this.scrollToHandler.createDelegate(this,["prev"]));}if(this.navIndex+this.visible<=this.forecastSize){$(next).removeClass("next-disabled").bind("click",this.scrollToHandler.createDelegate(this,["next"]));}}break;}}},scrollToHandler:function(dir){this.showLoading();this.load(ww.Utils.formatTimeStamp(this.getPrimarySeries().groups[0]["dateTime"]*1000,"Y-m-d 00:00:00"),this.calculateDateOffset(dir,this.forecastSize,this.navIndex));},jumpToHandler:function(e){var targetDate=ww.Utils.getDate(e.target.value);var startDate=ww.Utils.getDate(ww.Utils.formatTimeStamp(this.getPrimarySeries().groups[0]["dateTime"]*1000,"Y-m-d"));var msPerDay=24*60*60*1000;var offset=0;if(targetDate.valueOf()<startDate.valueOf()){offset=Math.round((startDate.valueOf()-targetDate.valueOf())/msPerDay)*-1;}else{offset=Math.round((targetDate.valueOf()-startDate.valueOf())/msPerDay);if(this.forecastSize-this.navIndex-offset<5){offset=this.forecastSize-this.navIndex-4;}}this.navIndex=this.navIndex+offset;this.showLoading();this.load(startDate.format("Y-m-d 00:00:00"),offset);},showLoading:function(){this.showLoadingCallback();},showLoadingCallback:function(){var dayFiller=[];for(var i=0;i<this.visible;i++){dayFiller.push('<div class="day"><div class="heading" style="background-color: #fff"></div></div>');}$(this.forecastId+" .forecast .days").html(dayFiller.join("")).css("left","0px");$(this.flotCanvasId).html('<div class="chart-load"></div>').css("left","0px");},load:function(startDate,offset){$.getJSON(this.dataUrl,{"startDate":startDate,"offset":offset,"weatherTypes":this.getSelectedSeries().join(","),"daysInForecast":this.visible},this.loadCallback.createDelegate(this));},loadCallback:function(config){this.dataConfig=config;this.render(true);},reload:function(){this.showLoading();$.getJSON(this.reloadUrl,{"weatherTypes":this.getSelectedSeries().join(","),"daysInForecast":this.visible},this.reloadCallback.createDelegate(this));},reloadCallback:function(config){this.forecastSize=config.flotConfig.forecastSize;this.navIndex=config.flotConfig.startIndex;this.loadCallback(config.dataConfig);},calculateDateOffset:function(dir,size,start){var view=this.visible;var offset=0;if(dir==="prev"){offset=-view;if(start-view<=0){offset=1-start;}this.navIndex=this.navIndex-Math.abs(offset);}else{if(dir==="next"){offset=view;if((size-start-view)<view){offset=size-start-(view-1);}this.navIndex=this.navIndex+offset;}}return offset;},keyBoxCheckHandler:function(e){var optionName=e.currentTarget.attributes["name"].nodeValue;var option=$(this.keyBoxPath+' .checkbox[name="'+optionName+'"] span');option.toggleClass("checked").toggleClass("unchecked");var mesTypeConfig=this.getMeasurementTypeConfig(optionName);$(this.forecastId+" ."+mesTypeConfig.ref).toggleClass("hide");if(this.getSeries(optionName)){this.render(false);}else{this.load(ww.Utils.formatTimeStamp(this.getPrimarySeries().groups[0]["dateTime"]*1000,"Y-m-d 00:00:00"),0);}},initMeasurementsEvents:function(mesTypeConfig){for(var i=0;i<mesTypeConfig.length;i++){var config=mesTypeConfig[i];if(config.ref){ww.MeasurementObserver.register(config.ref,config.cookie,this);}}},toggleMeasurements:function(currentMes,mesClass){var mesData={name:null,value:null};var mesConfig=this.getMeasurementTypeConfig(mesClass);for(var j=0;j<mesConfig.types.length;j++){if(currentMes==mesConfig.types[j].name){var index=j+1;index=index>mesConfig.types.length-1?0:index;var newMes=mesConfig.types[index].name;mesConfig.currentMesType=newMes;this.updateDisplay(mesConfig,currentMes,newMes);mesData.name=mesConfig.cookie;mesData.value=newMes;break;}}return mesData;},reloadMeasurement:function(){for(var m in this.mesTypeConfig){var mesConfig=this.mesTypeConfig[m];if(mesConfig.cookie){var currentMes=mesConfig.currentMesType;var newMes=ww.Utils.getCookie(mesConfig.cookie);if(currentMes!=newMes){mesConfig.currentMesType=newMes;this.updateDisplay(mesConfig,currentMes,newMes);}}}},updateDisplay:function(mesConfig,currentMes,toMes){$(this.forecastId+" ."+mesConfig.ref+" .current-measure").html(toMes);this.convertData(mesConfig,currentMes,toMes);this.render(false);},convertData:function(mesConfig,from,to){for(index in this.dataConfig.series){var series=this.dataConfig.series[index];if(series.config.id===mesConfig.series){for(g in series.groups){var group=series.groups[g];for(p in group.points){var point=group.points[p];point.y=mesConfig.converter.apply(this,[point.y,from,to]);}}}}},convertDataForAllSeries:function(){for(index in this.dataConfig.series){var series=this.dataConfig.series[index];var mesConfig=this.getMeasurementTypeConfig(series.config.id);if(mesConfig.converter&&mesConfig.cookie){var from=mesConfig.dataMesType;var to=mesConfig.currentMesType;if(from!=to){for(g in series.groups){var group=series.groups[g];for(p in group.points){var point=group.points[p];point.y=mesConfig.converter.apply(this,[point.y,from,to]);}}}}}},getSelectedSeries:function(){var selectedSeries=[];if(this.keyBoxPath){selectedSeries.push(this.getPrimarySeries().config.id);$(this.keyBoxPath+" .checkbox").children().each(function(){if($(this).hasClass("checked")){selectedSeries.push($(this).parent().attr("name"));}});}else{for(var s in this.dataConfig.series){selectedSeries.push(this.dataConfig.series[s].config.id);}}return selectedSeries;},getPrimarySeries:function(){for(var s in this.dataConfig.series){if(this.dataConfig.series[s].config.primary){return this.dataConfig.series[s];}}},getSeries:function(id){for(s in this.dataConfig.series){if(this.dataConfig.series[s].config.id===id){return this.dataConfig.series[s];}}return null;},getMeasurementTypeConfig:function(refOrSeries){for(m in this.mesTypeConfig){if(this.mesTypeConfig[m].ref===refOrSeries||this.mesTypeConfig[m].series===refOrSeries){return this.mesTypeConfig[m];}}},getYAxisRatioForMeasurementTypeConfig:function(mesConfig,currentMeasurement){for(t in mesConfig.types){if(mesConfig.types[t].name==currentMeasurement){return mesConfig.types[t].yAxisRatio;}}}};};ww.FlotGraph=Class.extend({_init:function(config){this.config=config;this.options=this.getOptions(this.getDualYaxisMax());this.configCustomDraw();$.plot($(this.config.flotCanvasId),this.getPointLocations(),this.options);},getMarkings:function(){var markings=[];var markingWidth=24*3600000;var series=this.config.series[0];for(var i=0;i<series.groups.length;i++){var group=series.groups[i];var amColor=group.isToday?"#EEF3FB":"#FFF";var pmColor=group.isToday?"#E1E8F7":"#F7F7F7";var fromAm=this.config.xaxisStart+(markingWidth*i);var toAm=this.config.xaxisEnd+((markingWidth*i)+(markingWidth/2));markings.push({xaxis:{from:fromAm,to:toAm},color:amColor,lineWidth:1});var fromPm=this.config.xaxisStart+(markingWidth*i+(markingWidth/2));var toPm=this.config.xaxisEnd+((markingWidth*i)+(markingWidth));markings.push({xaxis:{from:fromPm,to:toPm},color:pmColor,lineWidth:1});}return markings;},getPointLocations:function(color){var seriesDataList=[];for(var i=0;i<this.config.series.length;i++){var series=this.config.series[i];var seriesData=[];for(var j=0;j<series.groups.length;j++){var group=series.groups[j];for(var k=0;k<group.points.length;k++){var point=group.points[k];seriesData.push([point.x*1000,point.y]);}}seriesDataList.push({data:seriesData,color:series.config.color,yaxis:series.config.yaxis,lines:{lineWidth:series.config.lineWidth,fill:series.config.lineFill},points:{show:series.config.showPoints},pointStyle:series.config.pointStyle,pointRenderer:series.config.pointRenderer?eval("new ww."+series.config.pointRenderer+"()"):null,customDataPoints:this.getCustomDataPoints(series)});}return seriesDataList;},getOptions:function(dualYaxisMax){var options={grid:{color:"#666666",hoverable:true,tickColor:"#BBCCEE",borderColor:"#BBCCEE",borderWidth:1,markings:this.getMarkings(),autoHighlight:false,xaxisLabel:true},customDraw:{timeMeridiem:{days:5,color:"#CCC",fontSize:"10px"}},dataTooltips:{xaxisStart:this.config.xaxisStart,xaxisEnd:this.config.xaxisEnd,dataPointerClass:this.config.dataPointerClass,tooltips:[{id:"data-pointer",type:"dp",render:function(data){var val=['<span class="direction">',data.directionLabel,'</span><span class="fill"> </span><span class="speed">',ww.Utils.roundNumber(data.y,1)," ",data.mesType,"</span>"];if(data.description&&data.description!=""){val[val.length]='<span class="fill"> - </span><span class="description">';val[val.length]=data.description;val[val.length]="</span>";}return val.join("");}},{id:"time-pointer",type:"tp",render:function(data){var val=['<span class="day">',ww.Utils.formatTimeStamp(data.x,"D"),'</span><span class="fill"> - </span><span class="time">',ww.Utils.formatTimeStamp(data.x,"g:i a"),"</span>"];return val.join("");}}]},crosshair:{mode:"x",color:"#003366"},lines:{show:true},yaxis:{tickSize:dualYaxisMax[0]/4,tickDecimals:1,min:0,max:dualYaxisMax[0],labelWidth:40},xaxis:{ticks:[],min:this.config.xaxisStart,max:this.config.xaxisEnd},y2axis:{tickSize:dualYaxisMax[1]/4,tickDecimals:1,min:0,max:dualYaxisMax[1],labelWidth:40}};return options;},getCustomDataPoints:function(series){var data=[];for(var i=0;i<series.groups.length;i++){var group=series.groups[i];for(var j=0;j<group.points.length;j++){var point=group.points[j];data.push({x:point.x*1000,y:point.y,mesType:series.mesConfig.type,direction:point.direction,directionLabel:point.directionLabel,description:point.description,pointStyle:point.pointStyle});}}return data;},getDualYaxisMax:function(){var results=[];for(var i=0;i<this.config.series.length;i++){var series=this.config.series[i];var maxYAxis=series.mesConfig.yAxisDataMax>series.mesConfig.yAxisRatio?series.mesConfig.yAxisDataMax+(series.mesConfig.yAxisDataMax/100*10):series.mesConfig.yAxisRatio;if(series.config.primary){results[0]=maxYAxis;}else{results[1]=results[1]>maxYAxis?results[1]:maxYAxis;}}return results;},configCustomDraw:function(){var customDraw=this.options.customDraw;customDraw.labels=[];for(s in this.config.series){var series=this.config.series[s];customDraw.labels.push({yaxis:series.config.yaxis,mesConfig:series.mesConfig});}}});ww.ArrowDataPointRenderer=function(){return{drawCustomDataPoint:function(ctx,axisx,axisy,x,y,customDataPoint,pointStyle){if(axisx.min!=x&&axisx.max!=x){if(!pointStyle){pointStyle=customDataPoint.pointStyle;}this.updateCustomDataPoint(ctx,axisx.p2c(x),axisy.p2c(y),customDataPoint.direction,pointStyle.fill,pointStyle.stroke);}},highlightCustomDataPoint:function(ctx,series,point){var x=point[0],y=point[1],axisx=series.xaxis,axisy=series.yaxis;if(axisx.min!=x&&axisx.max!=x){var customPoint=null;for(var i=0;i<series.customDataPoints.length;i++){if(series.customDataPoints[i].x==x&&series.customDataPoints[i].y==y){customPoint=series.customDataPoints[i];break;}}var fill="#FF3333";var stroke="#CC0000";if(series.pointStyle){fill=series.pointStyle.fill;stroke=series.pointStyle.stroke;}if(customPoint){this.updateCustomDataPoint(ctx,axisx.p2c(x),axisy.p2c(y),customPoint.direction,fill,stroke);}}},updateCustomDataPoint:function(ctx,x,y,direction,fill,stroke){direction=parseInt(direction);ctx.save();ctx.translate(x,y);ctx.rotate(direction*Math.PI/180);ctx.lineWidth=1;ctx.fillStyle=fill;ctx.beginPath();ctx.moveTo(-8,0);ctx.lineTo(0,9);ctx.lineTo(8,0);ctx.lineTo(2.5,1.5);ctx.lineTo(0,-15);ctx.lineTo(-2.5,1.5);ctx.closePath();ctx.closePath();ctx.fill();ctx.strokeStyle=stroke;ctx.beginPath();ctx.moveTo(-8,0);ctx.lineTo(0,9);ctx.lineTo(8,0);ctx.lineTo(2.5,1.5);ctx.lineTo(0,-15);ctx.lineTo(-2.5,1.5);ctx.closePath();ctx.stroke();ctx.restore();}};};ww.Clock={localTime:null,initialise:function(utcTimeStamp,timezoneOffset){this.utcTimeStamp=utcTimeStamp;this.timezoneOffset=timezoneOffset;this.utcDate=ww.Utils.formatTimeStamp(this.utcTimeStamp);this.localDate=ww.Utils.formatTimeStamp(this.utcTimeStamp);this.localDate.setSeconds(this.localDate.getSeconds()+this.timezoneOffset);this.date=$("#date");this.hour=$("#time .hour");this.minutes=$("#time .minutes");this.seconds=$("#time .seconds");this.displayTime();this.updateTimeIndicator.interval(1000,this);this.updateTime.interval(60000,this);},displayTime:function(){this.date.html(this.localDate.format("jS F Y"));this.hour.html(this.localDate.format("g"));this.minutes.html(this.localDate.format("i a"));},updateTime:function(){this.utcDate.setMinutes(this.utcDate.getMinutes()+1);this.localDate.setMinutes(this.localDate.getMinutes()+1);this.displayTime();},updateTimeIndicator:function(){this.seconds.hasClass("hide")?this.seconds.removeClass("hide"):this.seconds.addClass("hide");},getDate:function(){return new Date(this.localDate.getTime());},getUtcDate:function(){return new Date(this.utcDate.getTime());}};ww.TideForecast=ww.BaseCarouselForecast.extend({toggleMeasurements:function(currentMes){return ww.Measurement.toggleHeight("#tide-forecast .current-measure","#tide-forecast .tide-height",this.config.cookie.id,currentMes);},reloadMeasurement:function(){ww.Measurement.reloadHeight("#tide-forecast .current-measure","#tide-forecast .tide-height",this.config.cookie.id);}});ww.TideClock=function(config){return{config:config,initialise:function(){this.width=190;this.height=190;$("#tide-clock").removeClass("no-display");var canvas=ww.Utils.createCanvas(this.width,this.height);canvas.appendTo("#tide-clock .reader");this.ctx=canvas.get(0).getContext("2d");this.imgNeedle=new Image();this.imgBg=new Image();this.imgBg.onload=function(){this.imgNeedle.onload=function(){this.render();}.createDelegate(this);this.imgNeedle.src=this.config.resUrl+"/tideclock-needle.png";}.createDelegate(this);this.imgBg.src=this.config.resUrl+"/tideclock-bg.jpg";this.render.interval(60000,this);},render:function(){this.setNextTides();this.rotation=0;var nextTide=this.nextTides[0];if(nextTide.type=="high"){this.rotation=12;}else{if(nextTide.type=="low"){this.rotation=192;}}var diff=nextTide.hours*60+nextTide.minutes;if(diff>360){diff=0;}else{diff=(diff/2.142-168);if(diff<-168){diff=-168;}this.rotation-=diff;}this.renderTideClock();this.renderHighLowTideTimes();},renderTideClock:function(){this.ctx.save();this.ctx.clearRect(0,0,this.width,this.height);this.ctx.drawImage(this.imgBg,0,0);this.ctx.translate(this.width/2,this.height/2);this.ctx.rotate(this.rotation*(Math.PI/180));this.ctx.drawImage(this.imgNeedle,-4.5,-16);this.ctx.restore();},renderHighLowTideTimes:function(){for(var t in this.nextTides){var tide=this.nextTides[t];$("#tide-clock .next-"+tide.type+" .reading").html(tide.hours+"hr "+tide.minutes+"min");}},setNextTides:function(){var currentDate=ww.Clock.getDate();currentDate.setSeconds(0);this.nextTides=new Array();outer:for(var i=0;i<this.config.tideData.length;i++){var dayData=this.config.tideData[i].day;for(var j=0;j<dayData.length;j++){if(dayData[j].time){var tideDate=ww.Utils.formatTimeStamp(dayData[j].time);if(tideDate.getTime()>currentDate.getTime()){var millis=tideDate.getTime()-currentDate.getTime();var hours=parseInt(millis/(1000*60*60));var minutes=parseInt((millis%(1000*60*60))/(1000*60));this.nextTides.push({"type":dayData[j].tideType.toLowerCase(),"date":tideDate,"hours":hours,"minutes":minutes});}}if(this.nextTides.length==2){break outer;}}}}};};ww.WeatherExtremes=function(config){return{cache:{},config:config,target:"#weather-extremes",initialise:function(){this.targetEl=$(this.target);this.listEl=$(this.target+" .dropdown-list");this.dataEl=$(this.target+" .data");this.typeEl=$(this.target+" .type");$(this.target+" .dropdown-arrow").click(this.listHandler.createDelegate(this));$(this.target+" .dropdown-list li").click(this.listItemHandler.createDelegate(this));this.listEl.mouseleave(function(){this.listEl.hide();}.createDelegate(this));this.typeEl.html(this.listEl.find("."+this.config.dataType).html());this.cache[this.config.dataType]=this.dataEl.html();this.reload.interval(600000,this);},load:function(dataType){if(!this.cache[dataType]){this.targetEl.mask(" ");var url=this.config.url.replace("target","weatherExtremesData");$.post(url,{"dataType":dataType},this.loadCallback.createDelegate(this,[dataType],true));}else{this.loadCallback(this.cache[dataType],null,dataType);}},loadCallback:function(data,success,jqxhr,dataType){this.targetEl.unmask();this.cache[dataType]=data,this.dataEl.html(this.cache[dataType]);this.typeEl.html(this.listEl.find("."+dataType).html());},listItemHandler:function(e){this.listEl.hide();this.load($(e.currentTarget).attr("class"));},listHandler:function(){if(this.listEl.is(":hidden")){this.listEl.show();}else{this.listEl.hide();}},reload:function(){this.cache={};this.load(this.config.dataType);}};};
