(function(c){c.fn.visualize=function(B,r){return c(this).each(function(){var b=c.extend({type:"bar",width:c(this).width(),height:c(this).height(),appendTitle:!0,title:null,appendKey:!0,rowFilter:" ",colFilter:" ",colors:"#be1e2d,#666699,#92d5ea,#ee8310,#8d10ee,#5a3b16,#26a4ed,#f45a90,#e9e744".split(","),textColors:[],parseDirection:"x",pieMargin:20,pieLabelsAsPercent:!0,pieLabelPos:"inside",lineWeight:4,barGroupMargin:10,barMargin:1,yLabelInterval:30},B);b.width=parseFloat(b.width);b.height=parseFloat(b.height);
var h=c(this),y={pie:function(){o.addClass("visualize-pie");b.pieLabelPos=="outside"&&o.addClass("visualize-pie-outside");var j=Math.round(f.width()/2),k=Math.round(f.height()/2),a=k-b.pieMargin,l=0,g=c('<ul class="visualize-labels"></ul>').insertAfter(f);c.each(C,function(e){var f=this<=0||isNaN(this)?0:this/D;d.beginPath();d.moveTo(j,k);d.arc(j,k,a,l*Math.PI*2-Math.PI*0.5,(l+f)*Math.PI*2-Math.PI*0.5,!1);d.lineTo(j,k);d.closePath();d.fillStyle=n[e].color;d.fill();var t=l+f/2,p=b.pieLabelPos=="inside"?
a/1.5:a+a/5,h=Math.round(j+Math.sin(t*Math.PI*2)*p)+10,t=Math.round(k-Math.cos(t*Math.PI*2)*p)+5,p=h>j?"right":"left",i=t>k?"bottom":"top",q=parseFloat((f*100).toFixed(2));q&&((q=c('<span class="visualize-label">'+(b.pieLabelsAsPercent?q+"%":this)+"</span>").css(p,0).css(i,0))&&c('<li class="visualize-label-pos"></li>').appendTo(g).css({left:h,top:t}).append(q),q.css("font-size",a/8).css("margin-"+p,-q.width()/2).css("margin-"+i,-q.outerHeight()/2),n[e].textColor&&q.css("color",n[e].textColor));l+=
f})},line:function(j){j?o.addClass("visualize-area"):o.addClass("visualize-line");var k=f.width()/(u.length-1),a=c('<ul class="visualize-labels-x"></ul>').width(f.width()).height(f.height()).insertBefore(f);c.each(u,function(b){var e=c("<li><span>"+this+"</span></li>").prepend('<span class="line" />').css("left",k*b).appendTo(a).find("span:not(.line)"),d=e.width()/-2;b==0?d=0:b==u.length-1&&(d=-e.width());e.css("margin-left",d).addClass("label")});var l=f.height()/v,g=f.height()/(s.length-1),e=c('<ul class="visualize-labels-y"></ul>').width(f.width()).height(f.height()).insertBefore(f);
c.each(s,function(a){var b=c("<li><span>"+this+"</span></li>").prepend('<span class="line"  />').css("bottom",g*a).prependTo(e).find("span:not(.line)"),d=b.height()/-2;a==0?d=-b.height():a==s.length-1&&(d=0);b.css("margin-top",d).addClass("label")});d.translate(0,x);c.each(n,function(){d.beginPath();d.lineWidth=b.lineWeight;d.lineJoin="round";var a=this.points,e=0;d.moveTo(0,-(a[0]*l));c.each(a,function(){d.lineTo(e,-(this*l));e+=k});d.strokeStyle=this.color;d.stroke();j?(d.lineTo(e,0),d.lineTo(0,
0),d.closePath(),d.fillStyle=this.color,d.globalAlpha=0.3,d.fill(),d.globalAlpha=1):d.closePath()})},area:function(){y.line(!0)},bar:function(){o.addClass("visualize-bar");var j=f.width()/u.length,k=c('<ul class="visualize-labels-x"></ul>').width(f.width()).height(f.height()).insertBefore(f);c.each(u,function(a){c('<li><span class="label">'+this+"</span></li>").prepend('<span class="line" />').css("left",j*a).width(j).appendTo(k).find("span.label").addClass("label")});var a=f.height()/v,l=f.height()/
(s.length-1),g=c('<ul class="visualize-labels-y"></ul>').width(f.width()).height(f.height()).insertBefore(f);c.each(s,function(a){var b=c("<li><span>"+this+"</span></li>").prepend('<span class="line"  />').css("bottom",l*a).prependTo(g).find("span:not(.line)"),e=b.height()/-2;a==0?e=-b.height():a==s.length-1&&(e=0);b.css("margin-top",e).addClass("label")});d.translate(0,x);for(var e=0;e<n.length;e++){d.beginPath();var h=(j-b.barGroupMargin*2)/n.length;d.lineWidth=h-b.barMargin*2;for(var i=n[e].points,
p=0,m=0;m<i.length;m++){var r=p-b.barGroupMargin+e*h+h/2;r+=b.barGroupMargin*2;d.moveTo(r,0);d.lineTo(r,Math.round(-i[m]*a));p+=j}d.strokeStyle=n[e].color;d.stroke();d.closePath()}}},m=document.createElement("canvas");m.setAttribute("height",b.height);m.setAttribute("width",b.width);var f=c(m),m=b.title||h.find("caption").text(),o=(r||c('<div class="visualize" role="img" aria-label="Chart representing data from the table: '+m+'" />')).height(b.height).width(b.width).append(f),i=function(){var d=b.colors,
f=b.textColors;return{dataGroups:function(){var a=[];if(b.parseDirection=="x")h.find("tr:gt(0)").filter(b.rowFilter).each(function(e){a[e]={};a[e].points=[];a[e].color=d[e];if(f[e])a[e].textColor=f[e];c(this).find("td").filter(b.colFilter).each(function(){a[e].points.push(parseFloat(c(this).text()))})});else for(var l=h.find("tr:eq(1) td").filter(b.colFilter).size(),g=0;g<l;g++){a[g]={};a[g].points=[];a[g].color=d[g];if(f[g])a[g].textColor=f[g];h.find("tr:gt(0)").filter(b.rowFilter).each(function(){a[g].points.push(c(this).find("td").filter(b.colFilter).eq(g).text()*
1)})}return a},allData:function(){var a=[];c(this.dataGroups()).each(function(){a.push(this.points)});return a},dataSum:function(){var a=0,b=this.allData().join(",").split(",");c(b).each(function(){a+=parseFloat(this)});return a},topValue:function(){var a=0,b=this.allData().join(",").split(",");c(b).each(function(){parseFloat(this,10)>a&&(a=parseFloat(this))});return a},bottomValue:function(){var a=0,b=this.allData().join(",").split(",");c(b).each(function(){this<a&&(a=parseFloat(this))});return a},
memberTotals:function(){var a=[],b=this.dataGroups();c(b).each(function(d){var e=0;c(b[d].points).each(function(a){e+=b[d].points[a]});a.push(e)});return a},yTotals:function(){for(var a=[],b=this.dataGroups(),d=this.xLabels().length,e=0;e<d;e++){a[e]=[];var f=0;c(b).each(function(){a[e].push(this.points[e])});a[e].join(",").split(",");c(a[e]).each(function(){f+=parseFloat(this)});a[e]=f}return a},topYtotal:function(){var a=0,b=this.yTotals().join(",").split(",");c(b).each(function(){parseFloat(this,
10)>a&&(a=parseFloat(this))});return a},totalYRange:function(){return this.topValue()-this.bottomValue()},xLabels:function(){var a=[];b.parseDirection=="x"?h.find("tr:eq(0) th").filter(b.colFilter).each(function(){a.push(c(this).html())}):h.find("tr:gt(0) th").filter(b.rowFilter).each(function(){a.push(c(this).html())});return a},yLabels:function(){var a=[];a.push(E);for(var c=Math.round(b.height/b.yLabelInterval),c=Math.ceil(v/c)||1;a[a.length-1]<w-c;)a.push(a[a.length-1]+c);a.push(w);return a}}}(),
n=i.dataGroups();i.allData();var D=i.dataSum(),w=i.topValue(),E=i.bottomValue(),C=i.memberTotals(),v=i.totalYRange(),x=b.height*(w/v),u=i.xLabels(),s=i.yLabels();if(b.appendTitle||b.appendKey)var z=c('<div class="visualize-info"></div>').appendTo(o);b.appendTitle&&c('<div class="visualize-title">'+m+"</div>").appendTo(z);if(b.appendKey){var A=c('<ul class="visualize-key"></ul>');(b.parseDirection=="x"?h.find("tr:gt(0) th").filter(b.rowFilter):h.find("tr:eq(0) th").filter(b.colFilter)).each(function(b){c('<li><span class="visualize-key-color" style="background: '+
n[b].color+'"></span><span class="visualize-key-label">'+c(this).text()+"</span></li>").appendTo(A)});A.appendTo(z)}r||o.insertAfter(this);typeof G_vmlCanvasManager!="undefined"&&(G_vmlCanvasManager.init(),G_vmlCanvasManager.initElement(f[0]));var d=f[0].getContext("2d");y[b.type]();c(".visualize-line li:first-child span.line, .visualize-line li:last-child span.line, .visualize-area li:first-child span.line, .visualize-area li:last-child span.line, .visualize-bar li:first-child span.line,.visualize-bar .visualize-labels-y li:last-child span.line").css("border",
"none");r||o.bind("visualizeRefresh",function(){h.visualize(b,c(this).empty())})}).next()}})(jQuery);

