(function(c,d){var b=c.document;var a=(function(){var e=function(g,j,k,i,h,f){return new e.fn.init(g,j,k,i,h,f)};e.fn=e.prototype={contructor:e,version:"1.2",renderCallback:null,canvasContext:"2d",autostart:true,autoResize:false,layerParent:null,drawOnly:false,canvasElement:null,c:null,targetFPS:0,targetFrameDuration:null,fps:0,fpsTime:0,fpsCounter:0,fpsDynamicWait:0,width:0,height:0,layerX:null,layerY:null,layerWidth:null,layerHeight:null,layerContainer:null,looping:false,touchEmulatesMouse:false,firstFrame:true,layers:{},previousTouchInfo:{},lastLayerZIndex:0,startTime:0,totalDuration:0,lastTotalDuration:0,lastFrameDuration:0,frameCount:0,scene:{canvas:null},kb:{down:[],ctrl:false,shift:false,alt:false,isDown:function(g){for(var f=0;f<this.down.length;f++){if(this.down[f]["code"]==g){return true}}return false}},mouse:{left:false,right:false,middle:false,x:0,y:0,scroll:0},init:function(h,l,m,k,i,f){this.autostart=k==null?true:k;this.layerParent=i;this.drawOnly=f!=null?f:false;this.targetFPS=l!=null?l:0;this.targetFrameDuration=this.targetFPS>0?1000/this.targetFPS:0;this.scene.canvas=this;if(m!=null){this.setRenderCallback(m)}if(typeof(h)=="object"){this.canvasElement=h}else{if(typeof(h)=="string"){this.canvasElement=b.getElementById(h)}else{this.handleError("Invalid canvas reference given, expected canvas element or id");return}}if(this.canvasElement==null){this.handleError("Canvas element could not be found");return}this.c=this.canvasElement.getContext(this.canvasContext);if(this.c==null){this.handleError("Given canvas element does not seem to be of canvas type, context not found");return}if(typeof(h)=="object"){this.width=h.width;this.height=h.height}else{this.width=this.getWidth();this.height=this.getHeight();this.canvasElement.width=this.width;this.canvasElement.height=this.height}var g=this;if(this.drawOnly!=true){if(this.layerParent==null){c.onresize=function(){g.handleWindowResize()};b.onkeydown=function(p){if(p==null){p=c.event}var r=p.keyCode;var q=p.which==null?String.fromCharCode(p.keyCode):String.fromCharCode(p.which);var t=p.ctrlKey?true:false;var o=p.shiftKey?true:false;var s=p.altKey?true:false;if(!g.kb.isDown(r)){g.kb.down.push({code:r,character:q})}g.kb.ctrl=t;g.kb.shift=o;g.kb.alt=s;for(var n in g.layers){g.layers[n].kb=g.kb;g.layers[n].onKeyDown(r,q,t,o,s)}return g.onKeyDown(r,q,t,o,s)};b.onkeyup=function(n){if(n==null){n=c.event}var v=n.keyCode;var s=n.which==null?String.fromCharCode(n.keyCode):String.fromCharCode(n.which);var r=n.ctrlKey?true:false;var o=n.shiftKey?true:false;var u=n.altKey?true:false;var t=[];for(var p=0;p<g.kb.down.length;p++){if(g.kb.down[p]["code"]!=v){t.push({code:g.kb.down[p]["code"],character:g.kb.down[p]["character"]})}}g.kb.down=t;g.kb.ctrl=r;g.kb.shift=o;g.kb.alt=u;for(var q in g.layers){g.layers[q].kb=g.kb;g.layers[q].onKeyUp(v,s,r,o,u)}return g.onKeyUp(v,s,r,o,u)};b.onkeypress=function(p){if(p==null){p=c.event}var r=p.charCode;var q=p.which==null?String.fromCharCode(p.keyCode):String.fromCharCode(p.which);var t=p.ctrlKey?true:false;var o=p.shiftKey?true:false;var s=p.altKey?true:false;for(var n in g.layers){g.layers[n].kb=g.kb;g.layers[n].onKeyPress(r,q,t,o,s)}return g.onKeyPress(r,q,t,o,s)}}this.canvasElement.addEventListener("touchstart",function(r){var o=r.changedTouches.length;var s=[];var u=null;for(var p=0;p<o;p++){u=r.changedTouches[p];var q={pageX:u.pageX,pageY:u.pageY,clientX:u.clientX,clientY:u.clientY,screenX:u.screenX,screenY:u.screenY,target:u.target,identifier:u.identifier};g.onTouchStart(q,p,o,r);s.push(q);g.previousTouchInfo[u.identifier]=q}if(o==1){u=r.changedTouches[0];var n=u.clientX;var t=u.clientY;if(g.touchEmulatesMouse){g.mouse.x=n;g.mouse.y=t;g.mouse.left=true;if(g.layerParent!=null){g.layerParent.onMouseDown(n,t,0)}g.onMouseDown(n,t,0)}}else{g.onMultiTouchStart(s,r)}},false);this.canvasElement.addEventListener("touchmove",function(n){var t=n.changedTouches.length;var r=[];var p=null;for(var q=0;q<t;q++){p=n.changedTouches[q];var s={pageX:p.pageX,pageY:p.pageY,clientX:p.clientX,clientY:p.clientY,screenX:p.screenX,screenY:p.screenY,target:p.target,identifier:p.identifier};g.onTouchMove(s,q,t,(typeof(g.previousTouchInfo[p.identifier])!="undefined"?g.previousTouchInfo[p.identifier]:null),n);r.push(s)}if(t==1){p=n.changedTouches[0];var v=p.clientX;var u=p.clientY;if(g.touchEmulatesMouse){g.mouse.x=v;g.mouse.y=u;g.mouse.left=true;if(g.layerParent!=null){g.layerParent.onMouseMove(v,u)}g.onMouseMove(v,u)}}else{g.onMultiTouchMove(r,g.previousTouchInfo,n)}for(var o=0;o<r.length;o++){g.previousTouchInfo[r[o].identifier]=r[o]}},false);this.canvasElement.addEventListener("touchend",function(r){var o=r.changedTouches.length;var s=[];var u=null;for(var p=0;p<o;p++){u=r.changedTouches[p];var q={pageX:u.pageX,pageY:u.pageY,clientX:u.clientX,clientY:u.clientY,screenX:u.screenX,screenY:u.screenY,target:u.target,identifier:u.identifier};g.onTouchEnd(q,p,o,r);s.push(q);g.previousTouchInfo[u.identifier]=null}if(o==1){u=r.changedTouches[0];var n=u.clientX;var t=u.clientY;if(g.touchEmulatesMouse){g.mouse.x=n;g.mouse.y=t;g.mouse.left=false;if(g.layerParent!=null){g.layerParent.onMouseUp(n,t,0)}g.onMouseUp(n,t,0)}}else{g.onMultiTouchEnd(s,r)}},false);this.canvasElement.addEventListener("mousedown",function(r){var n=null;var s=null;if(typeof(r.layerX)!="undefined"){n=r.layerX;s=r.layerY}else{if(typeof(r.offsetX)!="undefined"){n=r.offsetX;s=r.offsetY}}var q=typeof(r.which)!="undefined"?r.which:r.button;if(q==1){g.mouse.left=true}else{if(q==3){g.mouse.right=true}else{if(q==2){g.mouse.middle=true}}}g.mouse.x=n;g.mouse.y=s;for(var o in g.layers){g.layers[o].mouse=g.mouse;g.layers[o].onMouseDown(n,s,q)}if(g.layerParent!=null){g.layerParent.mouse=g.mouse;g.layerParent.onMouseDown(n,s,q);for(o in g.layerParent.layers){var p=g.layerParent.layers[o];if(p!=this){p.mouse=g.mouse;p.onMouseDown(n,s,q)}}}g.onMouseDown(n,s,q);return true},false);this.canvasElement.addEventListener("mouseup",function(r){var n=null;var s=null;if(typeof(r.layerX)!="undefined"){n=r.layerX;s=r.layerY}else{if(typeof(r.offsetX)!="undefined"){n=r.offsetX;s=r.offsetY}}var q=typeof(r.which)!="undefined"?r.which:r.button;if(q==1){g.mouse.left=false}else{if(q==3){g.mouse.right=false}else{if(q==2){g.mouse.middle=false}}}g.mouse.x=n;g.mouse.y=s;for(var o in g.layers){g.layers[o].mouse=g.mouse;g.layers[o].onMouseUp(n,s,q)}if(g.layerParent!=null){g.layerParent.mouse=g.mouse;g.layerParent.onMouseUp(n,s,q);for(o in g.layerParent.layers){var p=g.layerParent.layers[o];if(p!=this){p.mouse=g.mouse;p.onMouseUp(n,s,q)}}}g.onMouseUp(n,s,q);return true},false);this.canvasElement.addEventListener("mousemove",function(q){var n=null;var r=null;if(typeof(q.layerX)!="undefined"){n=q.layerX;r=q.layerY}else{if(typeof(q.offsetX)!="undefined"){n=q.offsetX;r=q.offsetY}}g.mouse.x=n;g.mouse.y=r;for(var o in g.layers){g.layers[o].mouse=g.mouse;g.layers[o].onMouseMove(n,r)}if(g.layerParent!=null){g.layerParent.mouse=g.mouse;g.layerParent.onMouseMove(n,r);for(o in g.layerParent.layers){var p=g.layerParent.layers[o];if(p!=this){p.mouse=g.mouse;p.onMouseMove(n,r)}}}g.onMouseMove(n,r);return true},false);this.canvasElement.oncontextmenu=function(n){if(!n){n=c.event}if(g.onContextMenu(n)===false){return false}return true};var j=function(n){var o=0;if(!n){n=c.event}if(n.wheelDelta){o=n.wheelDelta/120;if(c.opera){o=-o}}else{if(n.detail){o=-n.detail/3}}if(o!=0){g.mouse.scroll+=o;g.onMouseScroll(o,g.mouse.scroll)}if(n.preventDefault){n.preventDefault()}n.returnValue=false};this.canvasElement.addEventListener("DOMMouseScroll",j,false);this.canvasElement.onmousewheel=j}this.applyDefaultStyles();if(this.autostart){if(this.targetFPS!=0){this.start()}else{this.renderSingleFrame()}}return this},getVersion:function(){return this.version},getWidth:function(){if(this.layerWidth!=null){return this.layerWidth}else{return this.canvasElement.clientWidth}},getHeight:function(){if(this.layerHeight!=null){return this.layerHeight}else{return this.canvasElement.clientHeight}},setRenderCallback:function(f){if(typeof(f)=="function"){this.renderCallback=f}else{this.handleError("Invalid render callback given, expected a function")}return this},setTouchEmulatesMouse:function(f){this.touchEmulatesMouse=f;return this},setAutoResize:function(f){this.autoResize=f?true:false;return this},handleWindowResize:function(){if(this.autoResize&&this.onWindowResize(this.getWidth(),this.getHeight())!==false){if(this.layerParent==null){this.width=this.getWidth();this.height=this.getHeight();this.canvasElement.width=this.width;this.canvasElement.height=this.height;this.c.width=this.width;this.c.height=this.height;this.applyDefaultStyles();for(var f in this.layers){this.layers[f].handleWindowResize()}if(!this.looping){this.renderSingleFrame()}}}},onWindowResize:function(){},onContextMenu:function(f){},onKeyDown:function(h,g,j,f,i){},onKeyUp:function(h,g,j,f,i){},onKeyPress:function(h,g,j,f,i){},onMouseDown:function(f,h,g){},onMouseUp:function(f,h,g){},onMouseMove:function(f,g){},onMouseScroll:function(g,f){},onTouchStart:function(i,f,h,g){},onMultiTouchStart:function(g,f){},onTouchMove:function(j,g,i,f,h){},onMultiTouchMove:function(g,h,f){},onTouchEnd:function(i,f,h,g){},onMultiTouchEnd:function(g,f){},applyDefaultStyles:function(){this.fillStyle("#FF0000");this.strokeStyle("#00FF00");this.translate(0.5,0.5);this.font("12px Courier");return this},setTargetFramerate:function(f){this.targetFPS=f||60;this.targetFrameDuration=this.targetFPS>0?1000/this.targetFPS:0;this.looping=this.targetFPS!=0?true:false;return this},getTargetFramerate:function(){return this.targetFPS},getFPS:function(){return this.fps},createLayer:function(f,h,j,i,g){return this.createLayerAt(f,0,0,this.getWidth(),this.getHeight(),h,j,i,g)},createLayerAt:function(f,m,k,g,p,h,n,l,q){h=h||0;l=l||this.lastLayerZIndex+1;q=q==null?true:q;var j=b.createElement("div");j.style.position="relative";j.style.marginLeft=m+"px";j.style.width=g+"px";j.style.height=p+"px";j.style.marginTop=(k-p)+"px";j.style.zIndex=l;var i=b.createElement("canvas");i.id="canvas-layer-"+f;i.width=g;i.height=p;j.appendChild(i);this.canvasElement.parentNode.insertBefore(j,this.canvasElement.nextSibling);var o=new e(i,h,n,false,this);o.layerX=m;o.layerY=k;o.layerWidth=g;o.layerHeight=p;this.layers[f]=o;this.lastLayerZIndex=l;if(q){if(h!=0){o.start()}else{o.renderSingleFrame()}}return o},getLayer:function(f){if(typeof(this.layers[f])!="undefined"){return this.layers[f]}else{return null}},renderToCanvas:function(i,f,j,k){var g=b.createElement("canvas");g.width=i;g.height=f;var h=new e(g,j,k,null,true);return h.canvasElement},loadImage:function(i,h,g){var j=new Image();var f=this;j.onload=function(){if(typeof(h)=="function"){h.apply(f,[this])}};j.onerror=function(){if(typeof(g)=="function"){g.apply(f,[this])}};j.src=i},drawImage:function(g,r,q,p,o,n,m,l,k,i,f){var j=null;var s=null;var h=null;if(n==null){j=p;s=o;h=this.resolveRenderParameters(r,q,g.width,g.height,j,s);this.save();this.translate(h.tx,h.ty);if(h.r!=0){this.rotate(h.r*(Math.PI/180))}this.c.drawImage(g,h.sx,h.sy);this.restore()}else{if(l==null){j=n;s=m;h=this.resolveRenderParameters(r,q,g.width,g.height,j,s);this.save();this.translate(h.tx,h.ty);if(h.r!=0){this.rotate(h.r*(Math.PI/180))}this.c.drawImage(g,h.sx,h.sy,p,o);this.restore()}else{j=i;s=f;h=this.resolveRenderParameters(n,m,g.width,g.height,j,s);this.save();this.translate(h.tx,h.ty);if(h.r!=0){this.rotate(h.r*(Math.PI/180))}this.c.drawImage(g,r,q,p,o,h.sx,h.sy,l,k);this.restore()}}return this},getParent:function(){return this.layerParent},setZIndex:function(f){this.canvasElement.style.zIndex=f;return this},renderFrame:function(h,g,f){if(this.renderCallback!=null){this.save();this.renderCallback.apply(this,[h,g,f]);this.restore();if(this.firstFrame==true){this.firstFrame=false}}return this},renderSingleFrame:function(){return this.renderFrame(null,null,1)},start:function(){this.looping=true;this.startTime=this.millis();this.fpsTime=this.millis();this.loop();return this},stop:function(){this.looping=false;return this},loop:function(){if(!this.looping){return}var g=this.millis();this.totalDuration=g-this.startTime;this.lastFrameDuration=Math.max(this.totalDuration-this.lastTotalDuration,1);this.frameCount++;this.renderFrame(this.lastFrameDuration,this.totalDuration,this.frameCount);this.lastTotalDuration=this.totalDuration;this.fpsCounter++;if(g-this.fpsTime>=1000){this.fps=this.fpsCounter;this.fpsCounter=0;this.fpsTime=g}if(this.targetFPS!=-1){if(this.fps>this.targetFPS){this.fpsDynamicWait+=(this.fps-this.targetFPS)/100}else{if(this.fps<this.targetFPS&&this.fpsDynamicWait>=1){this.fpsDynamicWait-=(this.targetFPS-this.fps)/100}}}else{this.fpsDynamicWait=0}var f=this;c.setTimeout(function(){f.loop()},Math.max(this.targetFrameDuration-this.lastFrameDuration+this.fpsDynamicWait,0))},millis:function(){return(new Date()).getTime()},save:function(){this.c.save();return this},restore:function(){this.c.restore();return this},scale:function(f,g){this.c.scale(f,g);return this},rotate:function(f){this.c.rotate(f);return this},translate:function(f,g){this.c.translate(f,g);return this},transform:function(h,g,l,k,j,i){this.c.transform(h,g,l,k,j,i);return this},setTransform:function(h,g,l,k,j,i){this.c.setTransform(h,g,l,k,j,i);return this},setGlobalAlpha:function(f){this.c.globalAlpha=f;return this},setCompositeOperation:function(f){this.c.globalCompositeOperation=f;return this},beginComposite:function(f){this.save();this.setCompositeOperation(f)},endComposite:function(){this.restore()},fillStyle:function(f){this.c.fillStyle=f;return this},fillColor:function(f){this.c.fillStyle=f;return this},strokeStyle:function(g,f,h){this.c.strokeStyle=g;if(f!=null){this.c.lineWidth=f}if(h!=null){this.c.lineCap=h}return this},strokeColor:function(f){this.c.strokeStyle=f;return this},lineWidth:function(f){this.c.lineWidth=f;return this},lineCap:function(f){this.c.lineCap=f;return this},lineJoin:function(f){this.c.lineJoin=f;return this},color:function(g,f){if(g!=null){this.fillColor(g)}if(f!=null){this.strokeColor(f)}return this},shadowStyle:function(f,i,h,g){this.c.shadowOffsetX=f;this.c.shadowOffsetY=i;if(h!=null){this.c.shadowBlur=h}if(!g!=null){this.c.shadowColor=g}return this},beginShadow:function(f,i,h,g){this.save();this.shadowStyle(f,i,h,g);return this},endShadow:function(){this.restore()},createLinearGradient:function(h,g,k,i,j){var l=this.c.createLinearGradient(h,g,k,i);if(j!=null){for(var f in j){l.addColorStop(parseFloat(f),j[f])}}return l},beginLinearGradientFill:function(g,f,j,h,i){this.save();var k=this.createLinearGradient(g,f,j,h,i);this.fillStyle(k);return k},beginLinearGradientStroke:function(g,f,j,h,i){this.save();var k=this.createLinearGradient(g,f,j,h,i);this.strokeStyle(k);return k},beginLinearGradient:function(g,f,j,h,i){this.save();var k=this.createLinearGradient(g,f,j,h,i);this.fillStyle(k);this.strokeStyle(k);return k},createRadialGradient:function(g,j,m,f,h,k,n){var i=this.c.createRadialGradient(g,j,m,f,h,k);if(n!=null){for(var l in n){i.addColorStop(parseFloat(l),n[l])}}return i},beginRadialGradientFill:function(h,k,j,f,i,g,l){this.save();var m=this.createRadialGradient(h,k,j,f,i,g,l);this.fillStyle(m);return m},beginRadialGradientStroke:function(h,k,j,f,i,g,l){this.save();var m=this.createRadialGradient(h,k,j,f,i,g,l);this.strokeStyle(m);return m},beginRadialGradient:function(h,k,j,f,i,g,l){this.save();var m=this.createRadialGradient(h,k,j,f,i,g,l);this.fillStyle(m);this.strokeStyle(m);return m},endGradient:function(){this.restore();return this},fill:function(){this.c.fill();return this},stroke:function(){this.c.stroke();return this},beginPath:function(){this.c.beginPath();return this},closePath:function(){this.c.closePath();return this},moveTo:function(f,g){this.c.moveTo(f,g);return this},lineTo:function(f,g){this.c.lineTo(f,g);return this},quadraticCurveTo:function(h,g,f,i){this.c.quadraticCurveTo(h,g,f,i);return this},bezierCurveTo:function(h,j,i,g,f,k){this.c.bezierCurveTo(h,j,i,g,f,k);return this},font:function(f){this.c.font=f;return this},textAlign:function(f){this.c.textAlign=f;return this},textBaseline:function(f){this.c.textBaseline=f;return this},clearRect:function(g,l,i,f,k,h){var j=this.resolveRenderParameters(g,l,i,f,k,h);this.save();this.translate(j.tx,j.ty);if(j.r!=0){this.rotate(j.r*(Math.PI/180))}this.c.clearRect(j.sx,j.sy,j.w,j.h);this.restore();return this},clear:function(){return this.clearRect(0,0,this.getWidth(),this.getHeight())},text:function(k,f,m,l,i){i=i||0;l=l||"start-top";var j=l.split("-");var g=j[0];var h=j[1];this.save();this.translate(f,m);if(i!=0){this.rotate(i*(Math.PI/180))}this.textAlign(g);this.textBaseline(h);this.c.fillText(k,0,0);this.restore();return this},fillText:function(k,f,m,l,i){i=i||0;l=l||"start-top";var j=l.split("-");var g=j[0];var h=j[1];this.save();this.translate(f,m);this.beginPath();if(i!=0){this.rotate(i*(Math.PI/180))}this.textAlign(g);this.textBaseline(h);this.c.fillText(k,0,0);this.fill();this.restore();return this},strokeText:function(k,f,m,l,i){i=i||0;l=l||"start-top";var j=l.split("-");var g=j[0];var h=j[1];this.save();this.translate(f,m);this.rotate(i*(Math.PI/180));this.textAlign(g);this.textBaseline(h);this.c.strokeText(k,0,0);this.stroke();this.restore();return this},rect:function(g,l,i,f,k,h){var j=this.resolveRenderParameters(g,l,i,f,k,h);this.save();this.translate(j.tx,j.ty);if(j.r!=0){this.rotate(j.r*(Math.PI/180))}this.c.rect(j.sx,j.sy,j.w,j.h);this.restore();return this},fillRect:function(g,l,i,f,k,h){var j=this.resolveRenderParameters(g,l,i,f,k,h);this.save();this.translate(j.tx,j.ty);if(j.r!=0){this.rotate(j.r*(Math.PI/180))}this.c.fillRect(j.sx,j.sy,j.w,j.h);this.restore();return this},strokeRect:function(g,l,i,f,k,h){var j=this.resolveRenderParameters(g,l,i,f,k,h);this.save();this.translate(j.tx,j.ty);if(j.r!=0){this.rotate(j.r*(Math.PI/180))}this.c.strokeRect(j.sx,j.sy,j.w,j.h);this.restore();return this},roundedRect:function(h,m,j,g,f,l,i){var k=this.resolveRenderParameters(h,m,j,g,l,i);this.save();this.translate(k.tx,k.ty);this.moveTo(k.sx+f,k.sy);this.lineTo(k.sx+j-f,k.sy);this.quadraticCurveTo(k.sx+j,k.sy,k.sx+j,k.sy+f);this.lineTo(k.sx+j,k.sy+g-f);this.quadraticCurveTo(k.sx+j,k.sy+g,k.sx+j-f,k.sy+g);this.lineTo(k.sx+f,k.sy+g);this.quadraticCurveTo(k.sx,k.sy+g,k.sx,k.sy+g-f);this.lineTo(k.sx,k.sy+f);this.quadraticCurveTo(k.sx,k.sy,k.sx+f,k.sy);this.restore();return this},fillRoundedRect:function(h,l,j,g,f,k,i){this.beginPath();this.roundedRect(h,l,j,g,f,k,i);this.closePath();this.fill();return this},strokeRoundedRect:function(h,l,j,g,f,k,i){this.beginPath();this.roundedRect(h,l,j,g,f,k,i);this.closePath();this.stroke();return this},line:function(g,i,f,h){this.moveTo(g,i);this.lineTo(f,h);return this},strokeLine:function(g,i,f,h){this.beginPath();this.line(g,i,f,h);this.stroke();return this},arc:function(m,l,i,k,f,g,j,n){var h=this.resolveRenderParameters(m,l,i*2,i*2,j,n);this.save();this.translate(h.tx+i,h.ty+i);if(h.r!=0){this.rotate(h.r*(Math.PI/180))}this.c.arc(h.sx,h.sy,i,k*(Math.PI/180),f*(Math.PI/180),g);this.restore();return this},fillArc:function(m,l,i,k,f,g,j,n){var h=this.resolveRenderParameters(m,l,i*2,i*2,j,n);this.save();this.translate(h.tx+i,h.ty+i);if(h.r!=0){this.rotate(h.r*(Math.PI/180))}this.beginPath();this.c.arc(h.sx,h.sy,i,k*(Math.PI/180),f*(Math.PI/180),g);this.fill();this.restore();return this},strokeArc:function(m,l,i,k,f,g,o,j,n){o=o||false;var h=this.resolveRenderParameters(m,l,i*2,i*2,j,n);this.save();this.translate(h.tx+i,h.ty+i);if(h.r!=0){this.rotate(h.r*(Math.PI/180))}this.beginPath();this.c.arc(h.sx,h.sy,i,k*(Math.PI/180),f*(Math.PI/180),g);if(o){this.closePath()}this.stroke();this.restore();return this},circle:function(g,i,f,h){this.arc(g,i,f,0,360,false,h);return this},fillCircle:function(g,i,f,h){this.fillArc(g,i,f,0,360,false,h);return this},strokeCircle:function(g,i,f,h){this.strokeArc(g,i,f,0,360,false,true,h);return this},ellipse:function(n,m,h,o,l,q){var k=this.resolveRenderParameters(n,m,h,o,l,q);var p=(h/2)*0.5522848,g=(o/2)*0.5522848,f=k.sx+h,r=k.sy+o,j=k.sx+h/2,i=k.sy+o/2;this.save();this.translate(k.tx,k.ty);if(k.r!=0){this.rotate(k.r*(Math.PI/180))}this.moveTo(k.sx,i);this.bezierCurveTo(k.sx,i-g,j-p,k.sy,j,k.sy);this.bezierCurveTo(j+p,k.sy,f,i-g,f,i);this.bezierCurveTo(f,i+g,j+p,r,j,r);this.bezierCurveTo(j-p,r,k.sx,i+g,k.sx,i);this.restore();return this},fillEllipse:function(n,m,h,o,l,q){var k=this.resolveRenderParameters(n,m,h,o,l,q);var p=(h/2)*0.5522848,g=(o/2)*0.5522848,f=k.sx+h,r=k.sy+o,j=k.sx+h/2,i=k.sy+o/2;this.save();this.translate(k.tx,k.ty);if(k.r!=0){this.rotate(k.r*(Math.PI/180))}this.beginPath();this.moveTo(k.sx,i);this.bezierCurveTo(k.sx,i-g,j-p,k.sy,j,k.sy);this.bezierCurveTo(j+p,k.sy,f,i-g,f,i);this.bezierCurveTo(f,i+g,j+p,r,j,r);this.bezierCurveTo(j-p,r,k.sx,i+g,k.sx,i);this.closePath();this.fill();this.restore();return this},strokeEllipse:function(n,m,h,o,l,q){var k=this.resolveRenderParameters(n,m,h,o,l,q);var p=(h/2)*0.5522848,g=(o/2)*0.5522848,f=k.sx+h,r=k.sy+o,j=k.sx+h/2,i=k.sy+o/2;this.save();this.translate(k.tx,k.ty);if(k.r!=0){this.rotate(k.r*(Math.PI/180))}this.beginPath();this.moveTo(k.sx,i);this.bezierCurveTo(k.sx,i-g,j-p,k.sy,j,k.sy);this.bezierCurveTo(j+p,k.sy,f,i-g,f,i);this.bezierCurveTo(f,i+g,j+p,r,j,r);this.bezierCurveTo(j-p,r,k.sx,i+g,k.sx,i);this.closePath();this.stroke();this.restore();return this},grid:function(h,f,l,k,i,m,n){h=h||50;f=f||50;l=l||0;k=k||0;i=i||this.getWidth();m=m||this.getHeight();n=n||0;this.save();this.translate(l,k);this.rotate(n*(Math.PI/180));for(var j=h;j<i;j+=h){for(var g=f;g<m;g+=f){this.strokeLine(j,0,j,m);this.strokeLine(0,g,i,g)}}this.restore()},resolveRenderParameters:function(p,n,g,q,m,r){m=m||ALIGN.LEFT.TOP;r=r||0;var f=m.split("-");var l=p;var k=n;var j=0;var i=0;var h=g;var o=q;if(f[0]=="center"){j=-g/2}else{if(f[0]=="right"){j=-g}}if(f[1]=="middle"){i=-q/2}else{if(f[1]=="bottom"){k=n-q}}return{tx:l,ty:k,sx:j,sy:i,w:h,h:o,r:r}},errorHandler:function(f){alert('Canvas error: "'+f+'"')},setErrorHandler:function(f){if(typeof(f)=="function"||f==null){this.errorHandler=f}else{this.handleError("Trying to set invalid error handler, a function expected but got a "+typeof(f))}return this},handleError:function(f){if(typeof(this.errorHandler)=="function"){this.errorHandler(f)}},isWindow:function(f){return f&&typeof f==="object"&&"setInterval" in f},isPlainObject:function(g){if(!g||typeof(g)!=="object"||g.nodeType||e.isWindow(g)){return false}if(g.constructor&&!Object.prototype.hasOwnProperty.call(g,"constructor")&&!Object.prototype.hasOwnProperty.call(g.constructor.prototype,"isPrototypeOf")){return false}var f;for(f in g){}return f===d||Object.prototype.hasOwnProperty.call(g,f)},isArray:Array.isArray||function(f){return typeof(f)==="array"}};return e})();a.fn.init.prototype=a.fn;a.extend=a.fn.extend=function(){var o,g,e,f,l,m,k=arguments[0]||{},j=1,h=arguments.length,n=false;if(typeof k==="boolean"){n=k;k=arguments[1]||{};j=2}if(typeof k!=="object"&&typeof(k)!="function"){k={}}if(h===j){k=this;--j}for(;j<h;j++){if((o=arguments[j])!=null){for(g in o){e=k[g];f=o[g];if(k===f){continue}if(n&&f&&(a.isPlainObject(f)||(l=a.isArray(f)))){if(l){l=false;m=e&&a.isArray(e)?e:[]}else{m=e&&a.isPlainObject(e)?e:{}}k[g]=a.extend(n,m,f)}else{if(f!==d){k[g]=f}}}}}return k};c.Canvas=a})(window);var rad=function(a){return a*180/Math.PI};var CAP={ROUND:"round",SQUARE:"square",BUTT:"butt"};var JOIN={BEVEL:"bevel",ROUND:"round",MITER:"miter"};var ALIGN={LEFT:{TOP:"left-top",MIDDLE:"left-middle",BOTTOM:"left-bottom",HANGING:"left-hanging",ALPHABETIC:"left-alphabetic",IDEOGRAPHIC:"left-ideographic"},CENTER:{TOP:"center-top",MIDDLE:"center-middle",BOTTOM:"center-bottom",HANGING:"center-hanging",ALPHABETIC:"center-alphabetic",IDEOGRAPHIC:"center-ideographic"},RIGHT:{TOP:"right-top",MIDDLE:"right-middle",BOTTOM:"right-bottom",HANGING:"right-hanging",ALPHABETIC:"right-alphabetic",IDEOGRAPHIC:"right-ideographic"},START:{TOP:"start-top",MIDDLE:"start-middle",BOTTOM:"start-bottom",HANGING:"start-hanging",ALPHABETIC:"start-alphabetic",IDEOGRAPHIC:"start-ideographic"},END:{TOP:"end-top",MIDDLE:"end-middle",BOTTOM:"end-bottom",HANGING:"end-hanging",ALPHABETIC:"end-alphabetic",IDEOGRAPHIC:"end-ideographic"}};var OP={SOURCE_OVER:"source-over",SOURCE_IN:"source-in",SOURCE_OUT:"source-out",SOURCE_ATOP:"source-atop",DESTINATION_OVER:"destination-over",DESTINATION_IN:"destination-in",DESTINATION_OUT:"destination-out",DESTINATION_ATOP:"destination-atop",LIGHTER:"lighter",COPY:"copy",XOR:"xor"};var KC={CANCEL:3,HELP:6,BACK_SPACE:8,TAB:9,CLEAR:12,RETURN:13,ENTER:14,SHIFT:16,CONTROL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESCAPE:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINTSCREEN:44,INSERT:45,DELETE:46,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,SEMICOLON:59,EQUALS:61,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,CONTEXT_MENU:93,NUMPAD0:96,NUMPAD1:97,NUMPAD2:98,NUMPAD3:99,NUMPAD4:100,NUMPAD5:101,NUMPAD6:102,NUMPAD7:103,NUMPAD8:104,NUMPAD9:105,MULTIPLY:106,ADD:107,SEPARATOR:108,SUBTRACT:109,DECIMAL:110,DIVIDE:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,F13:124,F14:125,F15:126,F16:127,F17:128,F18:129,F19:130,F20:131,F21:132,F22:133,F23:134,F24:135,NUM_LOCK:144,SCROLL_LOCK:145,COMMA:188,PERIOD:190,SLASH:191,BACK_QUOTE:192,OPEN_BRACKET:219,BACK_SLASH:220,CLOSE_BRACKET:221,QUOTE:222,META:224};
