if(window.PlotJax.PieChart==null){registerNS("PlotJax.PieChart");PlotJax.PieChart=function(a,b,d,e){if(arguments.length>0){this.plot=b;this.chartdesc=a;this.points=[];this.balloon=b.getBalloon();this.gesture=b.getGesture();this.xType=b.getXType();this.yType=b.getYType();this.myid=a.PlotID;this.helper=b.getHelper();this.ctx=b.getCanvas();if(!(this.xType instanceof PlotJax.SymbolType)){alert("Invalid datatype for piechart domain (must be symbol type).");return null}this.colors=(a.Style[0].Color!=null)?a.Style[0].Color.slice(0):['red','blue','orange','green','purple','yellow'];for(var c=0;c<this.colors.length;c++){this.colors[c]=b.getColor(this.colors[c])}var f=a.Data;if((f!=null)&&(f.length>0)){var i=0;f=a.Data;for(i=0;i<f.length;i++){var g=f[i];if(g[0]==null){alert("Missing domain value at element "+i);return null}if(g[1]!=null){this.points.push([this.xType.normalize(g[0]),this.yType.normalize(g[1])])}}}if(this.gesture!=null){this.gesture.observe(this)}}};PlotJax.PieChart.LABEL_OFFSET=8;PlotJax.PieChart.SEGMENT_OFFSET=8;PlotJax.PieChart.prototype={getChartID:function(){return this.myid},addPoint:function(x,y){this.points.push([x,y]);return true},getElement:function(i){return[this.xType.display(this.points[i][0]),this.yType.display(this.points[i][1])]},getElements:function(){return this.points},layout:function(a,b){if((this.helper!=null)&&(this.helper.onlayout!=null)){this.helper.onlayout(this.plot,this)}return this.points.length},redraw:function(a){if((this.helper!=null)&&(this.helper.ondraw!=null)){this.helper.ondraw(this.plot,this)}var b=this.plot.getChartWidth();var c=this.plot.getChartHeight();var d=this.plot.getTopMargin();var e=this.plot.getBottomMargin();var f=this.plot.getLeftMargin();var g=this.plot.getRightMargin();var i;var h=this.plot.getTickFont();var k=Number.MIN_VALUE;var l=0;for(i=0;i<this.points.length;i++){var m=h.getBounds(this.xType.display(this.points[i][0]),0,0,0,0);k=Math.max(k,m[2]);l+=this.points[i][1]}this.visible_coords=[];var n=Math.min(b,c);var o=n-((k+PlotJax.PieChart.LABEL_OFFSET)*2);if(this.chartdesc.PlotKind=="segpie"){o-=(PlotJax.PieChart.LABEL_OFFSET*2)}var p=(g+f+b)>>1;var q=(d+c)>>1;this.cx=p;this.cy=q;var j=0;this.radius=o/2;var r=0;var s=PlotJax.PieChart.SEGMENT_OFFSET/o;for(i=0;i<this.points.length;i++){this.ctx.fillStyle=this.colors[j++];if(j>=this.colors.length){j=0}var t=(r/l)*Math.PI*2;var u=((r+this.points[i][1])/l)*Math.PI*2;var v=t+((u-t)/2);var w=p;var x=q;if((this.chartdesc.PlotKind=="segpie")&&(this.points.length>1)){t+=s;v+=(s/2);w=p+(PlotJax.PieChart.LABEL_OFFSET*Math.cos(v));x=q+(PlotJax.PieChart.LABEL_OFFSET*Math.sin(v))}this.ctx.beginPath();this.ctx.moveTo(w,x);this.ctx.arc(w,x,this.radius,t,u,false);this.ctx.closePath();this.ctx.fill();this.ctx.beginPath();this.ctx.lineWidth=1;this.ctx.strokeStyle="black";this.ctx.moveTo(w+((2*this.radius/3)*Math.cos(v)),x+((2*this.radius/3)*Math.sin(v)));var y=x+((this.radius+PlotJax.PieChart.LABEL_OFFSET)*Math.sin(v));this.ctx.lineTo(w+((this.radius+PlotJax.PieChart.LABEL_OFFSET)*Math.cos(v)),y);var z=((v<Math.PI/2)||(v>=3*Math.PI/2))?w+this.radius+PlotJax.PieChart.LABEL_OFFSET:w-this.radius-PlotJax.PieChart.LABEL_OFFSET;this.ctx.lineTo(z,y);this.ctx.stroke();if((v<Math.PI/2)||(v>=3*Math.PI/2)){h.drawRightOf(this.xType.display(this.points[i][0]),z,y,4)}else{h.drawLeftOf(this.xType.display(this.points[i][0]),z,y,4)}r+=this.points[i][1];this.visible_coords.push([t,u])}},getVisibleElements:function(){return this.points.slice(0)},onclick:function(a,b,c,d){var e=[];var i;var f=this.cx-a;var g=this.cy-b;var h=Math.sqrt((f*f)+(g*g));if((h>this.radius)||((this.chartdesc.PlotKind=="segpie")&&(h<PlotJax.PieChart.SEGMENT_OFFSET))){return false}var j=Math.atan(Math.abs(g)/Math.abs(f));if(b<this.cy){j=(a<this.cx)?(j+Math.PI):((Math.PI*2)-j)}else if(a<this.cx){j=Math.PI-j}for(i=0;i<this.visible_coords.length;i++){if((this.visible_coords[i][0]<=j)&&(this.visible_coords[i][1]>j)){break}}if(i==this.visible_coords.length){return false}if(this.balloon!=null){var k=this.helper.getBalloonContent(this.plot,this,this.points[i]);if(k!=null){this.balloon.openBalloon(c,d,k)}}return true},onhover:function(x,y){var i;var a=this.cx-x;var b=this.cy-y;var c=Math.sqrt((a*a)+(b*b));if((c>this.radius)||((this.chartdesc.PlotKind=="segpie")&&(c<PlotJax.PieChart.SEGMENT_OFFSET))){return null}var d=Math.atan(Math.abs(b)/Math.abs(a));if(y<this.cy){d=(x<this.cx)?(d+Math.PI):((Math.PI*2)-d)}else if(x<this.cx){d=Math.PI-d}for(i=0;i<this.visible_coords.length;i++){if((this.visible_coords[i][0]<=d)&&(this.visible_coords[i][1]>d)){return this.helper.onhover(this.plot,this,i)}}return null},clear:function(){this.points=null;this.visible_coords=null;this.plot=null;this.helper=null;this.balloon=null;this.gesture=null},observe:function(a){var b=[];return b}}}