/*
jCanvas v3.5
Copyright 2011, Caleb Evans

Licensed under the MIT license
http://calebevans.me/projects/jcanvas/license.html
*/
(function(e,b,d,f){function c(g,h){if(g===f){c.prefs=c.defaults}else{if(h===true){c.defaults=e.extend({},c.defaults,g);c.prefs=e.extend({},c.defaults)}else{c.prefs=e.extend({},c.prefs,g)}}return this}c.defaults={width:0,height:0,cornerRadius:0,fillStyle:"transparent",strokeStyle:"transparent",strokeWidth:1,strokeCap:"butt",strokeJoin:"miter",rounded:false,shadowX:0,shadowY:0,shadowBlur:3,shadowColor:"transparent",opacity:1,compositing:"source-over",mask:false,x:0,y:0,x1:0,y1:0,x2:0,y2:0,radius:0,start:0,end:360,ccw:false,inDegrees:true,fromCenter:true,closed:false,sides:3,points:5,angle:0,text:"",font:"normal 12pt sans-serif",align:"center",baseline:"middle",source:"",repeat:"repeat"};c.prefs=e.extend({},c.defaults);c.retro=false;c.setGlobals=function(g,h){g.fillStyle=h.fillColor||h.fillStyle;g.strokeStyle=h.strokeColor||h.strokeStyle;g.lineWidth=h.strokeWidth;g.lineCap=h.strokeCap;g.lineJoin=h.strokeJoin;if(h.rounded===true){g.lineCap="round";g.lineJoin="round"}g.shadowOffsetX=h.shadowX;g.shadowOffsetY=h.shadowY;g.shadowBlur=h.shadowBlur;g.shadowColor=h.shadowColor;g.globalAlpha=h.globalAlpha||h.opacity;g.globalCompositeOperation=h.compositing};c.closePath=function(g,h){if(h.mask===true){g.save();g.clip()}if(h.closed===true){g.closePath();g.fill();g.stroke()}else{g.fill();g.stroke();g.closePath()}};c.checkUnits=function(g){if(g.inDegrees===true){return d.PI/180}else{return 1}};c.rotate=function(h,j,i,g){if(j.fromCenter===false){j.x+=i/2;j.y+=g/2}j.toRad=c.checkUnits(j);h.save();h.translate(j.x,j.y);h.rotate(j.angle*j.toRad);h.translate(-j.x,-j.y)};e.fn.loadCanvas=function(g){return this[0].getContext(g||"2d")};e.fn.draw=function(i){var g,h;for(h=0;h<this.length;h+=1){g=this[h].getContext("2d");i.call(this[h],g)}};e.fn.gradient=function(h){var g=this.loadCanvas(),n=e.extend({},c.prefs,h),m,l=0,k,j=1;if(n.r1!==f&&n.r2!==f){m=g.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2)}else{m=g.createLinearGradient(n.x1,n.y1,n.x2,n.y2)}while(n["c"+j]!==f){l+=1;j+=1}for(j=1;j<=l;j+=1){k=d.round((100/(l-1))*(j-1))/100;if(n["s"+j]===f){n["s"+j]=k}m.addColorStop(n["s"+j],n["c"+j])}return m};e.fn.pattern=function(i){var g=this.loadCanvas(),m=e.extend({},c.prefs,i),k,h=b.createElement("img");h.src=m.source;function j(){if(h.complete===true){k=g.createPattern(h,m.repeat);return true}else{return false}}function l(){j();if(m.load){m.load.call(this[0],k)}}if(m.load){h.onload=l}else{if(j()===false){h.onload=l}}return k};e.fn.clearCanvas=function(h){var g,i,j=e.extend({},c.prefs,h);for(i=0;i<this.length;i+=1){g=this[i].getContext("2d");c.setGlobals(g,j);c.rotate(g,j,j.width,j.height);if(h===f){g.clearRect(0,0,this[i].width,this[i].height)}else{g.clearRect(j.x-j.width/2,j.y-j.height/2,j.width,j.height)}}return this};e.fn.saveCanvas=function(){var g,h;for(h=0;h<this.length;h+=1){g=this[h].getContext("2d");g.save()}return this};e.fn.restoreCanvas=function(){var g,h;for(h=0;h<this.length;h+=1){g=this[h].getContext("2d");g.restore()}return this};e.fn.scaleCanvas=function(h){var g,i,j=e.extend({},c.prefs,h);for(i=0;i<this.length;i+=1){g=this[i].getContext("2d");g.save();g.translate(j.x,j.y);g.scale(j.width,j.height);g.translate(-j.x,-j.y)}return this};e.fn.translateCanvas=function(h){var g,i,j=e.extend({},c.prefs,h);for(i=0;i<this.length;i+=1){g=this[i].getContext("2d");g.save();g.translate(j.x,j.y)}return this};e.fn.rotateCanvas=function(h){var g,i,j=e.extend({},c.prefs,h);j.toRad=c.checkUnits(j);for(i=0;i<this.length;i+=1){g=this[i].getContext("2d");g.save();g.translate(j.x,j.y);g.rotate(j.angle*j.toRad);g.translate(-j.x,-j.y)}return this};e.fn.drawRect=function(l){var o,k,j=e.extend({},c.prefs,l),i,n,h,m,g;for(k=0;k<this.length;k+=1){o=this[k].getContext("2d");c.setGlobals(o,j);c.rotate(o,j,j.width,j.height);if(j.cornerRadius>0){i=j.x-j.width/2;n=j.y-j.height/2;h=j.x+j.width/2;m=j.y+j.height/2;g=j.cornerRadius;if((h-i)-(2*g)<0){g=(h-i)/2}if((m-n)-(2*g)<0){g=(m-n)/2}o.beginPath();o.moveTo(i+g,n);o.lineTo(h-g,n);o.arc(h-g,n+g,g,3*d.PI/2,d.PI*2,false);o.lineTo(h,m-g);o.arc(h-g,m-g,g,0,d.PI/2,false);o.lineTo(i+g,m);o.arc(i+g,m-g,g,d.PI/2,d.PI,false);o.lineTo(i,n+g);o.arc(i+g,n+g,g,d.PI,3*d.PI/2,false);o.fill();o.stroke();o.closePath()}else{o.beginPath();o.rect(j.x-j.width/2,j.y-j.height/2,j.width,j.height);o.restore();c.closePath(o,j)}}return this};e.fn.drawArc=function(h){var g,i,j=e.extend({},c.prefs,h);if(j.inDegrees===false&&j.end===360){j.end=d.PI*2}for(i=0;i<this.length;i+=1){g=this[i].getContext("2d");c.setGlobals(g,j);c.rotate(g,j,j.radius,j.radius);g.beginPath();g.arc(j.x,j.y,j.radius,(j.start*j.toRad)-(d.PI/2),(j.end*j.toRad)-(d.PI/2),j.ccw);g.restore();c.closePath(g,j)}return this};e.fn.drawEllipse=function(h){var g,j,k=e.extend({},c.prefs,h),i=k.width*(4/3);for(j=0;j<this.length;j+=1){g=this[j].getContext("2d");c.setGlobals(g,k);c.rotate(g,k,k.width,k.height);g.beginPath();g.moveTo(k.x,k.y-k.height/2);g.bezierCurveTo(k.x-i/2,k.y-k.height/2,k.x-i/2,k.y+k.height/2,k.x,k.y+k.height/2);g.bezierCurveTo(k.x+i/2,k.y+k.height/2,k.x+i/2,k.y-k.height/2,k.x,k.y-k.height/2);g.restore();c.closePath(g,k)}return this};e.fn.drawLine=function(i){var h,m,n=e.extend({},c.prefs,i),g=2,k=0,j=0;for(m=0;m<this.length;m+=1){h=this[m].getContext("2d");c.setGlobals(h,n);h.beginPath();h.moveTo(n.x1,n.y1);while(1){k=n["x"+g];j=n["y"+g];if(k!==f&&j!==f){h.lineTo(k,j)}else{break}g+=1}c.closePath(h,n)}return this};e.fn.drawQuad=function(m){var p,k,j=e.extend({},c.prefs,m),i=2,h=0,g=0,o=0,n=0;for(k=0;k<this.length;k+=1){p=this[k].getContext("2d");c.setGlobals(p,j);p.beginPath();p.moveTo(j.x1,j.y1);while(1){h=j["x"+i];g=j["y"+i];o=j["cx"+(i-1)];n=j["cy"+(i-1)];if(h!==f&&g!==f&&o!==f&&n!==f){p.quadraticCurveTo(o,n,h,g)}else{break}i+=1}c.closePath(p,j)}return this};e.fn.drawBezier=function(r){var s,q,n=e.extend({},c.prefs,r),m=2,i=1,k=0,j=0,p=0,h=0,o=0,g=0;for(q=0;q<this.length;q+=1){s=this[q].getContext("2d");c.setGlobals(s,n);s.beginPath();s.moveTo(n.x1,n.y1);while(1){k=n["x"+m];j=n["y"+m];p=n["cx"+i];h=n["cy"+i];o=n["cx"+(i+1)];g=n["cy"+(i+1)];if(k!==f&&j!==f&&p!==f&&h!==f&&o!==f&&g!==f){s.bezierCurveTo(p,h,o,g,k,j)}else{break}m+=1;i+=2}c.closePath(s,n)}return this};e.fn.drawText=function(h){var g,i,j=e.extend({},c.prefs,h);for(i=0;i<this.length;i+=1){g=this[i].getContext("2d");c.setGlobals(g,j);g.textBaseline=j.baseline;g.textAlign=j.align;g.font=j.font;g.strokeText(j.text,j.x,j.y);g.fillText(j.text,j.x,j.y);g.restore()}return this};e.fn.drawImage=function(m){var o,h,l,j=e.extend({},c.prefs,m),k=b.createElement("img"),g;k.src=j.source;function n(p){if(k.complete===true){g=k.width/k.height;if(j.width&&j.height){k.width=j.width;k.height=j.height}else{if(j.width&&!j.height){k.width=j.width;k.height=k.width/g}else{if(!j.width&&j.height){k.height=j.height;k.width=k.height*g}}}c.rotate(p,j,k.width,k.height);p.drawImage(k,j.x-k.width/2,j.y-k.height/2,k.width,k.height);p.restore();return true}else{return false}}function i(q,p){n(p);if(j.load){j.load.call(q)}}for(l=0;l<this.length;l+=1){h=this[l];o=h.getContext("2d");c.setGlobals(o,j);if(j.load){k.onload=function(){i(h,o)}}else{if(n(o)===false){k.onload=function(){i(h,o)}}}}return this};e.fn.drawPolygon=function(n){var r,m,k=e.extend({},c.prefs,n),j,q,s,h,p,g,o,l;s=d.PI/k.sides;j=(d.PI/2)+s;q=(d.PI*2)/k.sides;k.apothem=d.cos(q/2)*k.radius;k.closed=true;if(k.sides>=3){for(m=0;m<this.length;m+=1){r=this[m].getContext("2d");c.setGlobals(r,k);c.rotate(r,k,k.radius,k.radius);r.beginPath();for(l=0;l<k.sides;l+=1){h=k.x+(k.radius*d.cos(j));p=k.y+(k.radius*d.sin(j));g=k.x+(k.apothem*k.projection*d.cos(j+s));o=k.y+(k.apothem*k.projection*d.sin(j+s));if(l===0){r.moveTo(h,p)}else{r.lineTo(h,p)}if(k.projection!==f){r.lineTo(g,o)}j+=q}r.restore();c.closePath(r,k)}}return this};e.fn.setPixels=function(o){var q,h,n,l,j=e.extend({},c.prefs,o),g,k,m,p;for(n=0;n<this.length;n+=1){h=this[n];q=h.getContext("2d");if(!j.x&&!j.y&&!j.width&&!j.height){j.width=h.width;j.height=h.height;j.x=j.width/2;j.y=j.height/2}c.rotate(q,j,j.width,j.height);g=q.getImageData(j.x-j.width/2,j.y-j.height/2,j.width,j.height);k=g.data;m=k.length;p=[];if(j.each!==f){for(l=0;l<m;l+=4){p=j.each.call(h,k[l],k[l+1],k[l+2],k[l+3]);k[l]=p[0];k[l+1]=p[1];k[l+2]=p[2];k[l+3]=p[3]}}q.putImageData(g,j.x-j.width/2,j.y-j.height/2);q.restore()}return this};c.queue=[];c.create=function(g){var h=e.extend({},c.prefs,g);c.queue.push(h);return h};e.fn.drawQueue=function(g){var h,j=c.queue.length,m,l,k;for(l=0;l<this.length;l+=1){h=this[l].getContext("2d");if(g===true){h.clearRect(0,0,this[l].width,this[l].height)}for(k=0;k<j;k+=1){m=c.queue[k];if(m.fn){e.fn[m.fn].call(this,m)}}}return this};var a=e.event.fix;e.event.fix=function(g){g=a.call(e.event,g);if(g.layerX===f&&g.layerY===f){g.layerX=g.offsetX;g.layerY=g.offsetY}return g};c.retrofit=function(){c.retro=true;e.fn.drawQuadCurve=e.fn.drawQuad;e.fn.drawBezierCurve=e.fn.drawBezier;e.fn.canvasDefaults=c;e.fn.canvas=c;return e};c.retrofit();return(e.jCanvas=c)}(jQuery,document,Math));
