function JS3(e){var n,r,o,a,s,c=this,u=document.getElementById(e),f=u.getContext("2d"),d=[],l=[],h=[],g=[],y=!0,S="#ffffff",w="My Canvas",m=0,J=!1,b=!1;Object.defineProperty(this,"width",{get:function(){return u.width}}),Object.defineProperty(this,"height",{get:function(){return u.height}}),Object.defineProperty(this,"numChildren",{get:function(){return d.length}}),Object.defineProperty(this,"mousePressed",{get:function(){return null!=n}}),Object.defineProperty(this,"interactive",{get:function(){return b},set:function(e){b=e,e?v():x()}}),Object.defineProperty(this,"position",{get:function(){for(var e=0,t=0,n=u;null!=n;)e+=n.offsetLeft,t+=n.offsetTop,n=n.offsetParent;return{x:e,y:t}}}),Object.defineProperty(this,"drawClean",{set:function(e){y=e}}),Object.defineProperty(this,"radial",{set:function(e){a=e,s=S=void 0,L()}}),Object.defineProperty(this,"linear",{set:function(e){s=e,a=S=void 0,L()}}),Object.defineProperty(this,"background",{set:function(e){S=e,s=a=void 0,L()}}),Object.defineProperty(this,"windowTitle",{set:function(e){w=e}}),JS3setStageEvents(this),this.setSize=function(e,t){u.width=e,u.height=t},this.addChild=function(e){e.parent=c,e.stage=f,d.push(e)},this.addChildAt=function(e,t){t<=d.length&&(e.parent=c),e.stage=f,d.splice(t,0,e)},this.getChildAt=function(e){return d[e]},this.getChildAtRandom=function(){return d[Math.floor(Math.random()*d.length)]},this.removeChild=function(e){for(var t=d.length-1;t>=0;t--)if(d[t]==e){removeChildAt(t);break}},this.removeChildAt=function(e){d[e].parent=null,d[e].stage=null,d.splice(e,1)},this.run=function(e,t,n,i){for(var r=h.length-1;r>=0;r--)if(e==h[r].f)return;var o=new JS3Runner(e,t,n,i);return h.push(o),o},this.stop=function(e){G(e)},this.tween=function(e,t,n){if(!e.isTweening){e.isTweening=!0;var i=new JS3Tween(e,t,n);void 0==i.delay?D(i):setTimeout(function(){D(i)},1e3*i.delay)}},this.clear=function(){for(;d.length;)d[0]=null,d.splice(0,1);for(;l.length;)l[0]=null,l.splice(0,1);d=[],l=[],L()},this.reset=function(){for(;g.length;)g[0]=null,g.splice(0,1);for(;h.length;)h[0]=null,h.splice(0,1);g=[],h=[],this.clear()},this.save=function(){var e=u.toDataURL("image/png"),t=window.open("","_blank","width="+u.width+", height="+u.height);t.document.write(''+w+""),t.document.write(''),t.document.write(''),t.document.write(""),t.document.close()},this.drawLine=function(e){e.stage=f,l.push(new JS3Line(e))},this.drawArc=function(e){e.stage=f,l.push(new JS3Arc(e))},this.drawRect=function(e){e.stage=f,l.push(new JS3Rect(e))},this.drawCircle=function(e){e.stage=f,l.push(new JS3Circle(e))},this.drawTri=function(e){e.stage=f,l.push(new JS3Tri(e))},this.drawText=function(e){e.stage=f,l.push(new JS3Text(e))};var v=function(){u.addEventListener("mousedown",C),window.addEventListener("mouseup",O),window.addEventListener("mousemove",P)},x=function(){u.removeEventListener("mousedown",C),window.removeEventListener("mouseup",O),window.removeEventListener("mousemove",P)},P=function(e){_(e)?(0==J&&j(c,"stageEnter"),J=!0,T(e)):(1==J&&j(c,"stageLeave"),J=!1)},O=function(e){if(_(e))if(o)j(o,"dragComplete"),o=n=void 0;else{var t=Date.now();t-m>200?F():k(),m=t}r&&j(r,"mouseUp")},_=function(e){return e=e||window.event,e.target==u},C=function(e){f.dx=f.mx,f.dy=f.my,n=r,j(r,"mouseDown")},T=function(e){R(e);var t=I();t!=r&&(j(t,"mouseOver"),j(r,"mouseOut")),r=t,window.document.body.style.cursor=r!=c?"pointer":"default",n&&n.draggable&&(void 0==o?(o=n,j(n,"dragStart")):(n.x+=f.mx-f.dx,n.y+=f.my-f.dy,f.dy=f.my,f.dx=f.mx,j(n,"dragChange"))),j(t,"mouseMove")},j=function(e,t){for(var n=e;e;)e["_"+t]&&e["_"+t](A(t,n,e)),e=e.parent},F=function(){r==n&&j(r,"click"),n=void 0},k=function(){r==n&&j(r,"doubleClick"),n=void 0},I=function(){for(var e=d.length-1;e>=0;e--)if(d[e].mouse&&d[e].enabled)return d[e];return c},A=function(e,t,n){var i=new JS3Event(e,t,n,f.mx,f.my);return t==c&&(i.target.name="Stage"),i},R=function(e){var t=0,n=0,i=u;do t+=i.offsetLeft,n+=i.offsetTop;while(i=i.offsetParent);f.mx=e.pageX-t,f.my=e.pageY-n},M=function(){c._windowFocusIn&&c._windowFocusIn(new JS3Event("focusIn",c,c))},E=function(){c._windowFocusOut&&c._windowFocusOut(new JS3Event("focusOut",c,c))};window.onfocus=M,window.onblur=E;var L=function(){a?B():s?q():z(),f.fillRect(0,0,u.width,u.height)},z=function(){f.fillStyle=S||"#ffffff"},B=function(){var e=f.createRadialGradient(u.width/2,u.height/2,0,u.width/2,u.height/2,u.width/2);f.fillStyle=JS3.drawGradient(a,e)},q=function(){var e=f.createLinearGradient(0,0,u.width,0);f.fillStyle=JS3.drawGradient(s,e)},D=function(e){e.start=Date.now(),g.push(e)},G=function(e){for(var t=h.length-1;t>=0;t--)e==h[t].f&&h.splice(t,1)},Q=function(){for(i=0;i=t.duration){g.splice(e,1),t.object.isTweening=!1;for(p in t.props)t.object[p]=t.props[p].a+t.props[p].b;void 0!=t.onComplete&&t.onComplete()}}},W=function(){for(var e=Date.now(),t=0;t1e3*n.d)&&(n.f(),n.t=e,void 0!=n.r&&(n.r--,0==n.r&&(G(n.f),void 0!=n.o&&n.o())))}};JS3.func.push(N)}function JS3Line(e){JS3getBaseProps(this),JS3getLineProps(this),this.update=JS3.drawLine,e&&JS3.copyProps(e,this)}function JS3Arc(e){JS3getBaseProps(this),JS3getLineProps(this),this.update=JS3.drawArc,e&&JS3.copyProps(e,this)}function JS3Tri(e){JS3getBaseProps(this),JS3getPolyProps(this),this.update=JS3.drawTri,e&&JS3.copyProps(e,this)}function JS3Rect(e){JS3getBaseProps(this),this.update=JS3.drawRect,e&&JS3.copyProps(e,this)}function JS3Circle(e){JS3getBaseProps(this),this.update=JS3.drawCirc,e&&JS3.copyProps(e,this)}function JS3Text(e){JS3getBaseProps(this),JS3getTextProps(this),this.update=JS3.drawText,e&&JS3.copyProps(e,this)}function JS3Image(e){JS3getImageProps(this),this.update=JS3.drawImage,this.fill=this.stroke=!1,e&&JS3.copyProps(e,this)}function JS3getBaseProps(e){Object.defineProperty(e,"size",{get:function(){return e._size},set:function(t){e._size=e.width=e.height=t}}),Object.defineProperty(e,"width",{get:function(){return e._width},set:function(t){e._width=t,e.pts=[]}}),Object.defineProperty(e,"height",{get:function(){return e._height},set:function(t){e._height=t,e.pts=[]}}),Object.defineProperty(e,"linear",{set:function(t){e._gradient=t,e.drawGradient=JS3.drawLinear}}),Object.defineProperty(e,"radial",{set:function(t){e._gradient=t,e.drawGradient=JS3.drawRadial}}),e.x=e.y=e.rotation=0,e._size=25,e.fillColor="#ddd",e.strokeColor="#ccc",e.fill=e.stroke=!0,e.alpha=e.scaleX=e.scaleY=e.fillAlpha=e.strokeAlpha=1,e.strokeWidth=2,JS3setObjEvents(e)}function JS3getLineProps(e){e.capStyle="butt",e.x1=e.y1=e.cx=e.cy=e.x2=e.y2=0,Object.defineProperty(e,"color",{set:function(t){e.strokeColor=t}}),Object.defineProperty(e,"thickness",{set:function(t){e.strokeWidth=t}})}function JS3getPolyProps(e){e.pts=[],Object.defineProperty(e,"x1",{set:function(t){e.pts[0]=t}}),Object.defineProperty(e,"y1",{set:function(t){e.pts[1]=t}}),Object.defineProperty(e,"x2",{set:function(t){e.pts[2]=t}}),Object.defineProperty(e,"y2",{set:function(t){e.pts[3]=t}}),Object.defineProperty(e,"x3",{set:function(t){e.pts[4]=t}}),Object.defineProperty(e,"y3",{set:function(t){e.pts[5]=t}})}function JS3getImageProps(e){e.image=new Image,Object.defineProperty(e,"src",{set:function(t){e.image.src=t}}),Object.defineProperty(e,"ready",{set:function(t){e.image.onload=t}}),Object.defineProperty(e,"width",{get:function(){return e.image.width}}),Object.defineProperty(e,"height",{get:function(){return e.image.height}}),e.x=e.y=e.rotation=0,e.fillColor="#ddd",e.strokeColor="#ccc",e.fill=e.stroke=!0,e.alpha=e.scaleX=e.scaleY=e.fillAlpha=e.strokeAlpha=1,e.strokeWidth=2,JS3setObjEvents(e)}function JS3getTextProps(e){e.size=12,e.font="Arial",e.color="#333",e.stroke=e.bold=e.italic=!1}function JS3getTextHeight(e){var t=document.getElementsByTagName("body")[0],n=document.createElement("div");n.appendChild(document.createTextNode("M")),n.setAttribute("style","font-family:"+e.font+"; font-size:"+e.size+"pt; line-height:normal"),t.appendChild(n);var i=n.offsetHeight;return t.removeChild(n),i}function JS3setObjEvents(e){Object.defineProperty(e,"down",{set:function(t){e._mouseDown=t,e.enabled=!0}}),Object.defineProperty(e,"up",{set:function(t){e._mouseUp=t,e.enabled=!0}}),Object.defineProperty(e,"over",{set:function(t){e._mouseOver=t,e.enabled=!0}}),Object.defineProperty(e,"out",{set:function(t){e._mouseOut=t,e.enabled=!0}}),Object.defineProperty(e,"click",{set:function(t){e._click=t,e.enabled=!0}}),Object.defineProperty(e,"dclick",{set:function(t){e._doubleClick=t,e.enabled=!0}}),Object.defineProperty(e,"draggable",{get:function(){return e._draggable},set:function(t){e._draggable=t,1==t&&(e.enabled=!0)}}),Object.defineProperty(e,"dragStart",{set:function(t){e._dragStart=t,e.draggable=!0}}),Object.defineProperty(e,"dragChange",{set:function(t){e._dragChange=t,e.draggable=!0}}),Object.defineProperty(e,"dragComplete",{set:function(t){e._dragComplete=t,e.draggable=!0}})}function JS3setStageEvents(e){Object.defineProperty(e,"down",{set:function(t){e._mouseDown=t}}),Object.defineProperty(e,"up",{set:function(t){e._mouseUp=t}}),Object.defineProperty(e,"move",{set:function(t){e._mouseMove=t}}),Object.defineProperty(e,"click",{set:function(t){e._click=t}}),Object.defineProperty(e,"dclick",{set:function(t){e._doubleClick=t}}),Object.defineProperty(e,"enter",{set:function(t){e._stageEnter=t}}),Object.defineProperty(e,"leave",{set:function(t){e._stageLeave=t}}),Object.defineProperty(e,"focusIn",{set:function(t){e._windowFocusIn=t}}),Object.defineProperty(e,"focusOut",{set:function(t){e._windowFocusOut=t}})}function JS3Event(e,t,n,i,r){this.x=i,this.y=r,this.type=e,this.target=t,this.owner=n}function JS3Tween(e,t,n){this.object=e,this.duration=1e3*t,this.delay=n.delay,this.start=0,this.elapsed=0,this.onStart=n.onStart,this.onComplete=n.onComplete,this.easeFunc=n.ease||linear,this.props={};for(var i in n)JS3isNumber(n[i])&&(this.props[i]={a:e[i],b:n[i]-e[i]})}function JS3Runner(e,t,n,i){this.f=e,this.d=t,this.r=n,this.o=i,this.t=Date.now(),Object.defineProperty(this,"delay",{set:function(e){this.d=e}}),Object.defineProperty(this,"onComplete",{set:function(e){this.o=e}}),Object.defineProperty(this,"repeatCount",{set:function(e){this.r=e}})}function JS3Trace(e){try{console.log(e)}catch(t){return}}function JS3isNumber(e){return!isNaN(parseFloat(e))&&isFinite(e)}if(JS3.getRandomColor=function(){return"#"+Math.round(16777215*Math.random()).toString(16)},JS3.getRandomValue=function(e,t){return void 0==e?Math.random():void 0==t?Math.random()*e:Math.random()*(t-e)+e},JS3.drawLine=function(e){e.cx=(e.x1+e.x2)/2,e.cy=(e.y1+e.y2)/2,JS3.openShape(e),e.stage.moveTo(e.x1-e.cx,e.y1-e.cy),e.stage.lineTo(e.x2-e.cx,e.y2-e.cy),JS3.drawShape(e)},JS3.drawArc=function(e){e.cx=(e.x1+e.x2)/2,e.cy=(e.y1+e.y2)/2,JS3.openShape(e),e.stage.moveTo(e.x1-e.cx,e.y1-e.cy),e.stage.quadraticCurveTo(e.xc-e.cx,e.yc-e.cy,e.x2-e.cx,e.y2-e.cy),e.mouse=e.stage.isPointInPath(e.stage.mx,e.stage.my),JS3.stroke(e),e.stage.restore()},JS3.drawRect=function(e){JS3.getCntrPt(e),JS3.openShape(e),e.stage.rect(-e.cx,-e.cy,2*e.cx,2*e.cy),JS3.drawShape(e)},JS3.drawCirc=function(e){JS3.getCntrPt(e);var t=.5522848*e.cx,n=.5522848*e.cy;JS3.openShape(e),e.stage.moveTo(-e.cx,0),e.stage.bezierCurveTo(-e.cx,-n,-t,-e.cy,0,-e.cy),e.stage.bezierCurveTo(t,-e.cy,e.cx,-n,e.cx,0),e.stage.bezierCurveTo(e.cx,n,t,e.cy,0,e.cy),e.stage.bezierCurveTo(-t,e.cy,-e.cx,n,-e.cx,0),JS3.drawShape(e)},JS3.drawTri=function(e){6==e.pts.length?JS3.drawTriByPoints(e):e.width==e.height?JS3.drawTriEquilateral(e):JS3.drawTriDistorted(e),JS3.openShape(e),e.stage.moveTo(e._x1,e._y1),e.stage.lineTo(e._x2,e._y2),e.stage.lineTo(e._x3,e._y3),e.stage.lineTo(e._x1,e._y1),JS3.drawShape(e)},JS3.drawTriEquilateral=function(e){var t=e.width||e.size,n=(e.height||e.size)*(Math.sqrt(3)/2);e._x1=0,e._y1=-2*n/3,e._x2=t/2,e._y2=n/3,e._x3=-t/2,e._y3=n/3,e.cx=t/2,e.cy=n/2+n/2/3},JS3.drawTriDistorted=function(e){var t=e.width||e.size,n=e.height||e.size;e._x1=0,e._y1=-n/2,e._x2=t/2,e._y2=n/2,e._x3=-t/2,e._y3=n/2,e.cx=t/2,e.cy=n/2},JS3.drawTriByPoints=function(e){e.cx=(e.pts[0]+e.pts[2]+e.pts[4])/3,e.cy=(e.pts[1]+e.pts[3]+e.pts[5])/3,e._x1=e.pts[0]-e.cx,e._y1=e.pts[1]-e.cy,e._x2=e.pts[2]-e.cx,e._y2=e.pts[3]-e.cy,e._x3=e.pts[4]-e.cx,e._y3=e.pts[5]-e.cy},JS3.drawImage=function(e){0!=e.image.src&&(e.cx=e.image.width/2,e.cy=e.image.height/2,JS3.openShape(e),e.stage.rect(-e.cx,-e.cy,2*e.cx,2*e.cy),e.stage.drawImage(e.image,-e.cx,-e.cy),JS3.drawShape(e))},JS3.drawText=function(e){var t=e.bold?"Bold ":"";t+=e.italic?"Italic ":"",e.stage.font=t+e.size+"pt "+e.font,e.stage.textAlign="left",e.stage.textBaseline="top",e.cy=JS3getTextHeight(e)/2,e.cx=e.stage.measureText(e.text).width/2,JS3.openShape(e),e.fill&&JS3.fill(e),e.stroke&&JS3.stroke(e),JS3.drawShape(e)},JS3.fill=function(e){e._gradient&&e.drawGradient(e),e.stage.globalAlpha=e.alpha*e.fillAlpha,e.stage.fillStyle=e.color||e.fillColor,e instanceof JS3Text?e.stage.fillText(e.text,-e.cx,-e.cy):e.stage.fill(),e.stage.globalAlpha=1},JS3.stroke=function(e){e.stage.globalAlpha=e.alpha*e.strokeAlpha,e.stage.lineCap=e.capStyle,e.stage.lineWidth=e.strokeWidth,e.stage.strokeStyle=e.strokeColor,e instanceof JS3Text?e.stage.strokeText(e.text,-e.cx,-e.cy):e.stage.stroke(),e.stage.globalAlpha=1},JS3.getCntrPt=function(e){e.cx=e.width/2||e.size/2,e.cy=e.height/2||e.size/2},JS3.openShape=function(e){e.stage.save(),e.stage.globalAlpha=e.alpha,e.stage.translate(e.x+e.cx,e.y+e.cy),e.stage.scale(e.scaleX,e.scaleY),e.stage.rotate(e.rotation*Math.PI/180),e.stage.beginPath()},JS3.drawShape=function(e){e.stage.closePath(),e.mouse=e.stage.isPointInPath(e.stage.mx,e.stage.my),e.fill&&JS3.fill(e),e.stroke&&JS3.stroke(e),e.stage.restore()},JS3.drawRadial=function(e){var t=e.stage.createRadialGradient(0,0,0,0,0,e.size/2);e.color=JS3.drawGradient(e._gradient,t)},JS3.drawLinear=function(e){var t=e.stage.createLinearGradient(-e.width/2,0,e.width/2,0);e.color=JS3.drawGradient(e._gradient,t)},JS3.drawGradient=function(e,t){var n=e.length;if(1==n)return e[0];for(var i=0;n>i;i++){var r=e[i];t.addColorStop(1/(n-1)*i,JS3.ToRGB(r))}return t},JS3.copyProps=function(e,t){for(var n in e)t[n]=e[n];e=null},JS3.ToRGB=function(e){e=JS3.getHexFromName(e),"#"==e.charAt(0)&&(e=e.substring(1,7));var t=parseInt(e.substring(0,2),16),n=parseInt(e.substring(2,4),16),i=parseInt(e.substring(4,6),16);return"rgba("+t+","+n+","+i+", 1)"},JS3.getHexFromName=function(e){switch(e){case"aqua":return"#00FFFF";case"black":return"#000000";case"blue":return"#0000FF";case"fuchsia":return"#FF00FF";case"gray":return"#000000";case"grey":return"#808080";case"green":return"#808080";case"lime":return"#00FF00";case"maroon":return"#800000";case"navy":return"#000080";case"olive":return"#808000";case"purple":return"#800080";case"red":return"#ff0000";case"silver":return"#C0C0C0";case"teal":return"#008080";case"white":return"#ffffff";case"yellow":return"#FFFF00"}return e},linear=function(e,t,n,i){return n*e/i+t},easeInQuad=function(e,t,n,i){return e/=i,n*e*e+t},easeOutQuad=function(e,t,n,i){return e/=i,-n*e*(e-2)+t},easeInOutQuad=function(e,t,n,i){return e/=i/2,1>e?n/2*e*e+t:(e--,-n/2*(e*(e-2)-1)+t)},easeInCubic=function(e,t,n,i){return e/=i,n*e*e*e+t},easeOutCubic=function(e,t,n,i){return e/=i,e--,n*(e*e*e+1)+t},easeInOutCubic=function(e,t,n,i){return e/=i/2,1>e?n/2*e*e*e+t:(e-=2,n/2*(e*e*e+2)+t)},easeInQuart=function(e,t,n,i){return e/=i,n*e*e*e*e+t},easeOutQuart=function(e,t,n,i){return e/=i,e--,-n*(e*e*e*e-1)+t},easeInOutQuart=function(e,t,n,i){return e/=i/2,1>e?n/2*e*e*e*e+t:(e-=2,-n/2*(e*e*e*e-2)+t)},easeInQuint=function(e,t,n,i){return e/=i,n*e*e*e*e*e+t},easeOutQuint=function(e,t,n,i){return e/=i,e--,n*(e*e*e*e*e+1)+t},easeInOutQuint=function(e,t,n,i){return e/=i/2,1>e?n/2*e*e*e*e*e+t:(e-=2,n/2*(e*e*e*e*e+2)+t)},easeInSine=function(e,t,n,i){return-n*Math.cos(e/i*(Math.PI/2))+n+t},easeOutSine=function(e,t,n,i){return n*Math.sin(e/i*(Math.PI/2))+t},easeInOutSine=function(e,t,n,i){return-n/2*(Math.cos(Math.PI*e/i)-1)+t},easeInExpo=function(e,t,n,i){return n*Math.pow(2,10*(e/i-1))+t},easeOutExpo=function(e,t,n,i){return n*(-Math.pow(2,-10*e/i)+1)+t},easeInOutExpo=function(e,t,n,i){return e/=i/2,1>e?n/2*Math.pow(2,10*(e-1))+t:(e--,n/2*(-Math.pow(2,-10*e)+2)+t)},easeInCirc=function(e,t,n,i){return e/=i,-n*(Math.sqrt(1-e*e)-1)+t},easeOutCirc=function(e,t,n,i){return e/=i,e--,n*Math.sqrt(1-e*e)+t},easeInOutCirc=function(e,t,n,i){return e/=i/2,1>e?-n/2*(Math.sqrt(1-e*e)-1)+t:(e-=2,n/2*(Math.sqrt(1-e*e)+1)+t)},JS3.func=[],JS3.loop=function(){JS3.getFrameRate();for(var e=0;e5&&(JS3.FR=1e3/(e-JS3.FT),JS3.FT=e)},JS3.showFrameRate=function(e,t,n){if(!document.getElementById("JS3FR")){var i=0;yy=0,n&&(i=n.position.x,yy=n.position.y),e&&(i+=e),t&&(yy+=t);var r=document.createElement("div");r.setAttribute("id","JS3FR"),r.style.position="absolute",r.style.left=i+"px",r.style.top=yy+"px",r.style.background="#333",r.style.border="1px solid #555",r.style.color="#00ff00",r.style.padding="10px",r.style.fontSize="16px",r.style.fontFamily="Arial,sans-serif",r.style.textShadow="1px 1px 0 #000",r.innerHTML="60.0 fps",document.body.appendChild(r),setInterval(function(){var e=JS3.FR.toFixed(1);r.innerHTML=e+" fps",15>e?r.style.color="#ff0000":e>=15&&30>=e?r.style.color="#ffff00":r.style.color="#00ff00"},1e3)}},JS3.FR=0,JS3.FT=Date.now()-1,window.getAnimFrame(JS3.loop),void 0==trace)var trace=JS3Trace;