var SignaturePad=function(n){"use strict";var t=function(n,t){var r=this,i=t||{};this.velocityFilterWeight=i.velocityFilterWeight||.7;this.minWidth=i.minWidth||.5;this.maxWidth=i.maxWidth||2.5;this.dotSize=i.dotSize||function(){return(this.minWidth+this.maxWidth)/2};this.penColor=i.penColor||"black";this.backgroundColor=i.backgroundColor||"rgba(0,0,0,0)";this.onEnd=i.onEnd;this.onBegin=i.onBegin;this._canvas=n;this._ctx=n.getContext("2d");this.clear();this._handleMouseEvents();this._handleTouchEvents()},i,r;return t.prototype.clear=function(){var t=this._ctx,n=this._canvas;t.fillStyle=this.backgroundColor;t.clearRect(0,0,n.width,n.width);t.fillRect(0,0,n.width,n.width);this._reset()},t.prototype.toDataURL=function(){var n=this._canvas;return n.toDataURL.apply(n,arguments)},t.prototype.fromDataURL=function(n){var i=this,t;typeof FlashCanvas!="undefined"?(t={},t.src=n,i._ctx.drawImage(t,0,0,i._canvas.width,i._canvas.height)):(t=new Image,this._reset(),t.src=n,t.onload=function(){i._ctx.drawImage(t,0,0,i._canvas.width,i._canvas.height)});this._isEmpty=!1},t.prototype._strokeUpdate=function(n){var t=this._createPoint(n);this._addPoint(t)},t.prototype._strokeBegin=function(n){if($(this._canvas).attr("rotated")!=undefined?this._rotateCanvas():this._undoRotateCanvas(),this._reset(),this._strokeUpdate(n),typeof this.onBegin=="function")this.onBegin(n)},t.prototype._strokeDraw=function(n){var t=this._ctx,i=typeof this.dotSize=="function"?this.dotSize():this.dotSize;t.beginPath();this._drawPoint(n.x,n.y,i);t.closePath();t.fill()},t.prototype._strokeEnd=function(n){var i=this.points.length>2,t=this.points[0];if(!i&&t&&this._strokeDraw(t),typeof this.onEnd=="function")this.onEnd(n)},t.prototype._handleMouseEvents=function(){var t=this;this._mouseButtonDown=!1;this._canvas.addEventListener("mousedown",function(n){n.which===1&&(t._mouseButtonDown=!0,t._strokeBegin(n))});this._canvas.addEventListener("mousemove",function(n){t._mouseButtonDown&&t._strokeUpdate(n)});n.addEventListener("mouseup",function(n){n.which===1&&t._mouseButtonDown&&(t._mouseButtonDown=!1,t._strokeEnd(n))})},t.prototype._handleTouchEvents=function(){var t=this;this._canvas.style.msTouchAction="none";this._canvas.addEventListener("touchstart",function(n){var i=n.changedTouches[0];t._strokeBegin(i)});this._canvas.addEventListener("touchmove",function(n){n.preventDefault();var i=n.changedTouches[0];t._strokeUpdate(i)});n.addEventListener("touchend",function(n){var i=n.target===t._canvas;i&&t._strokeEnd(n)})},t.prototype.isEmpty=function(){return this._isEmpty},t.prototype._reset=function(){this.points=[];this._lastVelocity=0;this._lastWidth=(this.minWidth+this.maxWidth)/2;this._isEmpty=!0;this._ctx.fillStyle=this.penColor},t.prototype._createPoint=function(n){var t=this._canvas.getBoundingClientRect();return new i(n.clientX-t.left,n.clientY-t.top)},t.prototype._addPoint=function(n){var t=this.points,u,f,e,i;t.push(n);t.length>2&&(t.length===3&&t.unshift(t[0]),i=this._calculateCurveControlPoints(t[0],t[1],t[2]),u=i.c2,i=this._calculateCurveControlPoints(t[1],t[2],t[3]),f=i.c1,e=new r(t[1],u,f,t[2]),this._addCurve(e),t.shift())},t.prototype._calculateCurveControlPoints=function(n,t,r){var e=n.x-t.x,o=n.y-t.y,s=t.x-r.x,h=t.y-r.y,f={x:(n.x+t.x)/2,y:(n.y+t.y)/2},u={x:(t.x+r.x)/2,y:(t.y+r.y)/2},p=Math.sqrt(e*e+o*o),c=Math.sqrt(s*s+h*h),w=f.x-u.x,b=f.y-u.y,l=c/(p+c),a={x:u.x+w*l,y:u.y+b*l},v=t.x-a.x,y=t.y-a.y;return{c1:new i(f.x+v,f.y+y),c2:new i(u.x+v,u.y+y)}},t.prototype._addCurve=function(n){var r=n.startPoint,u=n.endPoint,t,i;t=u.velocityFrom(r);t=this.velocityFilterWeight*t+(1-this.velocityFilterWeight)*this._lastVelocity;i=this._strokeWidth(t);this._drawCurve(n,this._lastWidth,i);this._lastVelocity=t;this._lastWidth=i},t.prototype._drawPoint=function(n,t,i){var r=this._ctx;r.moveTo(n,t);r.arc(n,t,i,0,2*Math.PI,!1);this._isEmpty=!1},t.prototype._drawCurve=function(n,t,i){var l=this._ctx,p=i-t,a,y,o,r,s,h,u,c,v,f,e;for(a=Math.floor(n.length()),l.beginPath(),o=0;o<a;o++)r=o/a,s=r*r,h=s*r,u=1-r,c=u*u,v=c*u,f=v*n.startPoint.x,f+=3*c*r*n.control1.x,f+=3*u*s*n.control2.x,f+=h*n.endPoint.x,e=v*n.startPoint.y,e+=3*c*r*n.control1.y,e+=3*u*s*n.control2.y,e+=h*n.endPoint.y,y=t+h*p,this._drawPoint(f,e,y);l.closePath();l.fill()},t.prototype._strokeWidth=function(n){return Math.max(this.maxWidth/(n+1),this.minWidth)},i=function(n,t,i){this.x=n;this.y=t;this.time=i||(new Date).getTime()},i.prototype.velocityFrom=function(n){return this.time!==n.time?this.distanceTo(n)/(this.time-n.time):1},i.prototype.distanceTo=function(n){return Math.sqrt(Math.pow(this.x-n.x,2)+Math.pow(this.y-n.y,2))},r=function(n,t,i,r){this.startPoint=n;this.control1=t;this.control2=i;this.endPoint=r},r.prototype.length=function(){for(var e=10,o=0,t,i,r,s,h,u,f,n=0;n<=e;n++)t=n/e,i=this._point(t,this.startPoint.x,this.control1.x,this.control2.x,this.endPoint.x),r=this._point(t,this.startPoint.y,this.control1.y,this.control2.y,this.endPoint.y),n>0&&(u=i-s,f=r-h,o+=Math.sqrt(u*u+f*f)),s=i,h=r;return o},r.prototype._point=function(n,t,i,r,u){return t*(1-n)*(1-n)*(1-n)+3*i*(1-n)*(1-n)*n+3*r*(1-n)*n*n+u*n*n*n},t.prototype._rotateCanvas=function(){this._ctx.setTransform(1,0,0,1,0,0);this._ctx.rotate(Math.PI/-2);this._ctx.translate(-this._canvas.height,0)},t.prototype._undoRotateCanvas=function(){this._ctx.setTransform(1,0,0,1,0,0)},t}(document)