(function(i){function t(i){this.init(i)}t.prototype={value:0,size:100,startAngle:-Math.PI,thickness:"auto",fill:{gradient:["#3aeabb","#fdd250"]},emptyFill:"rgba(0, 0, 0, .1)",animation:{duration:1200,easing:"circleProgressEasing"},animationStartValue:0,reverse:!1,lineCap:"butt",constructor:t,el:null,canvas:null,ctx:null,radius:0,arcFill:null,lastFrameValue:0,init:function(t){i.extend(this,t);this.radius=this.size/2;this.initWidget();this.initFill();this.draw()},initWidget:function(){var t=this.canvas=this.canvas||i("").prependTo(this.el)[0];t.width=this.size;t.height=this.size;this.ctx=t.getContext("2d")},initFill:function(){var t=this,e=this.fill,a=this.ctx,r=this.size;if(!e)throw Error("The fill is not specified!");if(e.color)this.arcFill=e.color;if(e.gradient){var n=e.gradient;if(n.length==1){this.arcFill=n[0]}else if(n.length>1){var s=e.gradientAngle||0,l=e.gradientDirection||[r/2*(1-Math.cos(s)),r/2*(1+Math.sin(s)),r/2*(1+Math.cos(s)),r/2*(1-Math.sin(s))];var h=a.createLinearGradient.apply(a,l);for(var o=0;o")[0];e.width=t.size;e.height=t.size;e.getContext("2d").drawImage(f,0,0,r,r);t.arcFill=t.ctx.createPattern(e,"no-repeat");t.drawFrame(t.lastFrameValue)}},draw:function(){if(this.animation)this.drawAnimated(this.value);else this.drawFrame(this.value)},drawFrame:function(i){this.lastFrameValue=i;this.ctx.clearRect(0,0,this.size,this.size);this.drawEmptyArc(i);this.drawArc(i)},drawArc:function(i){var t=this.ctx,e=this.radius,a=this.getThickness(),r=this.startAngle;t.save();t.beginPath();if(!this.reverse){t.arc(e,e,e-a/2,r,r+Math.PI*2*i)}else{t.arc(e,e,e-a/2,r-Math.PI*2*i,r)}t.lineWidth=a;t.lineCap=this.lineCap;t.strokeStyle=this.arcFill;t.stroke();t.restore()},drawEmptyArc:function(i){var t=this.ctx,e=this.radius,a=this.getThickness(),r=this.startAngle;if(i<1){t.save();t.beginPath();if(i<=0){t.arc(e,e,e-a/2,0,Math.PI*2)}else{if(!this.reverse){t.arc(e,e,e-a/2,r+Math.PI*2*i,r)}else{t.arc(e,e,e-a/2,r,r-Math.PI*2*i)}}t.lineWidth=a;t.strokeStyle=this.emptyFill;t.stroke();t.restore()}},drawAnimated:function(t){var e=this,a=this.el,r=i(this.canvas);r.stop(!0,!1);a.trigger("circle-animation-start");r.css({animationProgress:0}).animate({animationProgress:1},i.extend({},this.animation,{step:function(i){var r=e.animationStartValue*(1-i)+t*i;e.drawFrame(r);a.trigger("circle-animation-progress",[i,r])}})).promise().always(function(){a.trigger("circle-animation-end")})},getThickness:function(){return i.isNumeric(this.thickness)?this.thickness:this.size/14},getValue:function(){return this.value},setValue:function(i){if(this.animation)this.animationStartValue=this.lastFrameValue;this.value=i;this.draw()}};i.circleProgress={defaults:t.prototype};i.easing.circleProgressEasing=function(i,t,e,a,r){if((t/=r/2)<1)return a/2*t*t*t+e;return a/2*((t-=2)*t*t+2)+e};i.fn.circleProgress=function(e,a){var r="circle-progress",n=this.data(r);if(e=="widget"){if(!n)throw Error('Calling "widget" method on not initialized instance is forbidden');return n.canvas}if(e=="value"){if(!n)throw Error('Calling "value" method on not initialized instance is forbidden');if(typeof a=="undefined"){return n.getValue()}else{var s=arguments[1];return this.each(function(){i(this).data(r).setValue(s)})}}return this.each(function(){var a=i(this),n=a.data(r),s=i.isPlainObject(e)?e:{};if(n){n.init(s)}else{var l=i.extend({},a.data());if(typeof l.fill=="string")l.fill=JSON.parse(l.fill);if(typeof l.animation=="string")l.animation=JSON.parse(l.animation);s=i.extend(l,s);s.el=a;n=new t(s);a.data(r,n)}})}})(jQuery);