(function($){function init(t){var u=null;var v=null;var w=null;var z=null;var A=null;var B=0;var C=true;var D=10;var E=0.95;var F=0;var G=false;var H=false;var I=[];t.hooks.processOptions.push(checkPieEnabled);t.hooks.bindEvents.push(bindEvents);function checkPieEnabled(a,b){if(b.series.pie.show){b.grid.show=false;if(b.series.pie.label.show=='auto')if(b.legend.show)b.series.pie.label.show=false;else b.series.pie.label.show=true;if(b.series.pie.radius=='auto')if(b.series.pie.label.show)b.series.pie.radius=3/4;else b.series.pie.radius=1;if(b.series.pie.tilt>1)b.series.pie.tilt=1;if(b.series.pie.tilt<0)b.series.pie.tilt=0;a.hooks.processDatapoints.push(processDatapoints);a.hooks.drawOverlay.push(drawOverlay);a.hooks.draw.push(draw)}}function bindEvents(a,b){var c=a.getOptions();if(c.series.pie.show&&c.grid.hoverable)b.unbind('mousemove').mousemove(onMouseMove);if(c.series.pie.show&&c.grid.clickable)b.unbind('click').click(onClick)}function alertObject(c){var d='';function traverse(a,b){if(!b)b=0;for(var i=0;i<a.length;++i){for(var j=0;j<b;j++)d+='\t';if(typeof a[i]=="object"){d+=''+i+':\n';traverse(a[i],b+1)}else{d+=''+i+': '+a[i]+'\n'}}}traverse(c);alert(d)}function calcTotal(a){for(var i=0;i<a.length;++i){var b=parseFloat(a[i].data[0][1]);if(b)B+=b}}function processDatapoints(a,b,c,d){if(!G){G=true;u=a.getCanvas();v=$(u).parent();J=a.getOptions();a.setData(combine(a.getData()))}}function setupPie(){F=v.children().filter('.legend').children().width();w=Math.min(u.width,(u.height/J.series.pie.tilt))/2;A=(u.height/2)+J.series.pie.offset.top;z=(u.width/2);if(J.series.pie.offset.left=='auto')if(J.legend.position.match('w'))z+=F/2;else z-=F/2;else z+=J.series.pie.offset.left;if(z<w)z=w;else if(z>u.width-w)z=u.width-w}function fixData(a){for(var i=0;i<a.length;++i){if(typeof(a[i].data)=='number')a[i].data=[[1,a[i].data]];else if(typeof(a[i].data)=='undefined'||typeof(a[i].data[0])=='undefined'){if(typeof(a[i].data)!='undefined'&&typeof(a[i].data.label)!='undefined')a[i].label=a[i].data.label;a[i].data=[[1,0]]}}return a}function combine(a){a=fixData(a);calcTotal(a);var b=0;var c=0;var d=J.series.pie.combine.color;var e=[];for(var i=0;i<a.length;++i){a[i].data[0][1]=parseFloat(a[i].data[0][1]);if(!a[i].data[0][1])a[i].data[0][1]=0;if(a[i].data[0][1]/B<=J.series.pie.combine.threshold){b+=a[i].data[0][1];c++;if(!d)d=a[i].color}else{e.push({data:[[1,a[i].data[0][1]]],color:a[i].color,label:a[i].label,angle:(a[i].data[0][1]*(Math.PI*2))/B,percent:(a[i].data[0][1]/B*100)})}}if(c>0)e.push({data:[[1,b]],color:d,label:J.series.pie.combine.label,angle:(b*(Math.PI*2))/B,percent:(b/B*100)});return e}function draw(p,q){if(!v)return;ctx=q;setupPie();var r=p.getData();var s=0;while(C&&s<D){C=false;if(s>0)w*=E;s+=1;clear();if(J.series.pie.tilt<=0.8)drawShadow();drawPie()}if(s>=D){clear();v.prepend('<div class="error">Could not draw pie with labels contained inside canvas</div>')}if(p.setSeries&&p.insertLegend){p.setSeries(r);p.insertLegend()}function clear(){ctx.clearRect(0,0,u.width,u.height);v.children().filter('.pieLabel, .pieLabelBackground').remove()}function drawShadow(){var a=5;var b=15;var c=10;var d=0.02;if(J.series.pie.radius>1)var e=J.series.pie.radius;else var e=w*J.series.pie.radius;if(e>=(u.width/2)-a||e*J.series.pie.tilt>=(u.height/2)-b||e<=c)return;ctx.save();ctx.translate(a,b);ctx.globalAlpha=d;ctx.fillStyle='#000';ctx.translate(z,A);ctx.scale(1,J.series.pie.tilt);for(var i=1;i<=c;i++){ctx.beginPath();ctx.arc(0,0,e,0,Math.PI*2,false);ctx.fill();e-=i}ctx.restore()}function drawPie(){startAngle=Math.PI*J.series.pie.startAngle;if(J.series.pie.radius>1)var n=J.series.pie.radius;else var n=w*J.series.pie.radius;ctx.save();ctx.translate(z,A);ctx.scale(1,J.series.pie.tilt);ctx.save();var o=startAngle;for(var i=0;i<r.length;++i){r[i].startAngle=o;drawSlice(r[i].angle,r[i].color,true)}ctx.restore();ctx.save();ctx.lineWidth=J.series.pie.stroke.width;o=startAngle;for(var i=0;i<r.length;++i)drawSlice(r[i].angle,J.series.pie.stroke.color,false);ctx.restore();drawDonutHole(ctx);if(J.series.pie.label.show)drawLabels();ctx.restore();function drawSlice(a,b,c){if(a<=0)return;if(c)ctx.fillStyle=b;else{ctx.strokeStyle=b;ctx.lineJoin='round'}ctx.beginPath();if(a!=Math.PI*2)ctx.moveTo(0,0);else if($.browser.msie)a-=0.0001;ctx.arc(0,0,n,o,o+a,false);ctx.closePath();o+=a;if(c)ctx.fill();else ctx.stroke()}function drawLabels(){var l=startAngle;if(J.series.pie.label.radius>1)var m=J.series.pie.label.radius;else var m=w*J.series.pie.label.radius;for(var i=0;i<r.length;++i){if(r[i].percent>=J.series.pie.label.threshold*100)drawLabel(r[i],l,i);l+=r[i].angle}function drawLabel(a,b,d){if(a.data[0][1]==0)return;var e=J.legend.labelFormatter,text,plf=J.series.pie.label.formatter;if(e)text=e(a.label,a);else text=a.label;if(plf)text=plf(text,a);var f=((b+a.angle)+b)/2;var x=z+Math.round(Math.cos(f)*m);var y=A+Math.round(Math.sin(f)*m)*J.series.pie.tilt;var g='<span class="pieLabel" id="pieLabel'+d+'" style="position:absolute;top:'+y+'px;left:'+x+'px;">'+text+"</span>";v.append(g);var h=v.children('#pieLabel'+d);var i=(y-h.height()/2);var j=(x-h.width()/2);h.css('top',i);h.css('left',j);if(0-i>0||0-j>0||u.height-(i+h.height())<0||u.width-(j+h.width())<0)C=true;if(J.series.pie.label.background.opacity!=0){var c=J.series.pie.label.background.color;if(c==null){c=a.color}var k='top:'+i+'px;left:'+j+'px;';$('<div class="pieLabelBackground" style="position:absolute;width:'+h.width()+'px;height:'+h.height()+'px;'+k+'background-color:'+c+';"> </div>').insertBefore(h).css('opacity',J.series.pie.label.background.opacity)}}}}}function drawDonutHole(a){if(J.series.pie.innerRadius>0){a.save();innerRadius=J.series.pie.innerRadius>1?J.series.pie.innerRadius:w*J.series.pie.innerRadius;a.globalCompositeOperation='destination-out';a.beginPath();a.fillStyle=J.series.pie.stroke.color;a.arc(0,0,innerRadius,0,Math.PI*2,false);a.fill();a.closePath();a.restore();a.save();a.beginPath();a.strokeStyle=J.series.pie.stroke.color;a.arc(0,0,innerRadius,0,Math.PI*2,false);a.stroke();a.closePath();a.restore()}}function isPointInPoly(a,b){for(var c=false,i=-1,l=a.length,j=l-1;++i<l;j=i)((a[i][1]<=b[1]&&b[1]<a[j][1])||(a[j][1]<=b[1]&&b[1]<a[i][1]))&&(b[0]<(a[j][0]-a[i][0])*(b[1]-a[i][1])/(a[j][1]-a[i][1])+a[i][0])&&(c=!c);return c}function findNearbySlice(a,b){var c=t.getData(),J=t.getOptions(),radius=J.series.pie.radius>1?J.series.pie.radius:w*J.series.pie.radius;for(var i=0;i<c.length;++i){var s=c[i];if(s.pie.show){ctx.save();ctx.beginPath();ctx.moveTo(0,0);ctx.arc(0,0,radius,s.startAngle,s.startAngle+s.angle,false);ctx.closePath();x=a-z;y=b-A;if(ctx.isPointInPath){if(ctx.isPointInPath(a-z,b-A)){ctx.restore();return{datapoint:[s.percent,s.data],dataIndex:0,series:s,seriesIndex:i}}}else{p1X=(radius*Math.cos(s.startAngle));p1Y=(radius*Math.sin(s.startAngle));p2X=(radius*Math.cos(s.startAngle+(s.angle/4)));p2Y=(radius*Math.sin(s.startAngle+(s.angle/4)));p3X=(radius*Math.cos(s.startAngle+(s.angle/2)));p3Y=(radius*Math.sin(s.startAngle+(s.angle/2)));p4X=(radius*Math.cos(s.startAngle+(s.angle/1.5)));p4Y=(radius*Math.sin(s.startAngle+(s.angle/1.5)));p5X=(radius*Math.cos(s.startAngle+s.angle));p5Y=(radius*Math.sin(s.startAngle+s.angle));arrPoly=[[0,0],[p1X,p1Y],[p2X,p2Y],[p3X,p3Y],[p4X,p4Y],[p5X,p5Y]];arrPoint=[x,y];if(isPointInPoly(arrPoly,arrPoint)){ctx.restore();return{datapoint:[s.percent,s.data],dataIndex:0,series:s,seriesIndex:i}}}ctx.restore()}}return null}function onMouseMove(e){triggerClickHoverEvent('plothover',e)}function onClick(e){triggerClickHoverEvent('plotclick',e)}function triggerClickHoverEvent(a,e){var b=t.offset(),canvasX=parseInt(e.pageX-b.left),canvasY=parseInt(e.pageY-b.top),item=findNearbySlice(canvasX,canvasY);if(J.grid.autoHighlight){for(var i=0;i<I.length;++i){var h=I[i];if(h.auto==a&&!(item&&h.series==item.series))unhighlight(h.series)}}if(!item)return;highlight(item.series,a);var c={pageX:e.pageX,pageY:e.pageY};v.trigger(a,[c,item])}function highlight(s,a){if(typeof s=="number")s=series[s];var i=indexOfHighlight(s);if(i==-1){I.push({series:s,auto:a});t.triggerRedrawOverlay()}else if(!a)I[i].auto=false}function unhighlight(s){if(s==null){I=[];t.triggerRedrawOverlay()}if(typeof s=="number")s=series[s];var i=indexOfHighlight(s);if(i!=-1){I.splice(i,1);t.triggerRedrawOverlay()}}function indexOfHighlight(s){for(var i=0;i<I.length;++i){var h=I[i];if(h.series==s)return i}return-1}function drawOverlay(b,c){var d=b.getOptions();var e=d.series.pie.radius>1?d.series.pie.radius:w*d.series.pie.radius;c.save();c.translate(z,A);c.scale(1,d.series.pie.tilt);for(i=0;i<I.length;++i)drawHighlight(I[i].series);drawDonutHole(c);c.restore();function drawHighlight(a){if(a.angle<0)return;c.fillStyle="rgba(255, 255, 255, "+d.series.pie.highlight.opacity+")";c.beginPath();if(a.angle!=Math.PI*2)c.moveTo(0,0);c.arc(0,0,e,a.startAngle,a.startAngle+a.angle,false);c.closePath();c.fill()}}}var J={series:{pie:{show:false,radius:'auto',innerRadius:0,startAngle:3/2,tilt:1,offset:{top:0,left:'auto'},stroke:{color:'#FFF',width:1},label:{show:'auto',formatter:function(a,b){return'<div style="font-size:x-small;text-align:center;padding:2px;color:'+b.color+';">'+a+'<br/>'+Math.round(b.percent)+'%</div>'},radius:1,background:{color:null,opacity:0},threshold:0},combine:{threshold:-1,color:null,label:'Other'},highlight:{opacity:0.5}}}};$.plot.plugins.push({init:init,options:J,name:"pie",version:"1.0"})})(jQuery);

