var Clay=(function(){var A='function';var B='string';var C=Math.sin;var D=Math.cos;var E=Math.sqrt;var $={namespace:function(a,b){var c=a.split('.');var l=c.length;var d=this;for(var i=0;i<l;i++){var e=c[i];var f=i===(l-1);if(f){d[e]=b}d=d[e]}}};Function.prototype.bind=function(a){var b=this;return function(){return b.apply(a,arguments)}};var F={extend:function(a,constructor,b){var c=function(){a.apply(this,arguments);if(constructor){constructor.apply(this,arguments)}};this.implement(c,a.prototype);if(b){this.implement(c,b)}c.prototype.constructor=c;return c},implement:function(a,b){for(var i in b){if(typeof i===B){a.prototype[i]=b[i]}}}};$.namespace('Class',F);var G=function(w,h,a){this.renderer=new $.Renderer(w,h,a);this.world=new $.Group(0,0,0);this.camera=new $.Camera(0,0,1024);this.materials=[];this.resizeTo(w,h)};G.prototype={resizeTo:function(w,h){this.renderer.setResolution(w,h);this.camera.setResolution(w,h)},getWorld:function(){return this.world},run:function(){clearInterval(this.tick);clearInterval(this.fps);this.framesRendered=0;this.startTime=(new Date()).getTime();this.world.totalShapes=this.world.getEntitiesOf($.Shape);this.totalLights=this.world.getEntitiesOf($.Light);this.tick=setInterval(this.render.bind(this),40)},stop:function(){clearInterval(this.tick);clearInterval(this.fps)},render:function(){this.enterFrame(this);this.currentTime=(new Date()).getTime();this.renderer.render(this.world,this.camera);this.framesRendered++},getFPS:function(){var a=(this.currentTime-this.startTime)/1000;window.console&&console.log('fps: '+(this.framesRendered/a));this.framesRendered=0;this.startTime=(new Date()).getTime()},setCamera:function(a){this.camera=a},getCamera:function(){return this.camera},setAmbientLight:function(a,b,c){this.world.addLight(new $.Light(a.x,a.y,a.z,b,c))},getLightFactor:function(a){var b=this.totalLights;var c=[0,0,0];var l=b.length;for(var i=0;i<l;i++){b[i].getFactor(a,c)}return c},setBackground:function(a){this.renderer.setBackground(a)},addMaterial:function(a){this.materials.push(a);a.setStage(this)},enterFrame:function(a){},addEvent:function(a,b){switch(a){case'click':this.renderer.addEvent(a,b);break;case'enterframe':this.enterFrame=b;break;case'prerender':this.renderer.preRender=b;break;case'postrender':this.renderer.postRender=b;break}}};$.namespace('Stage',G);var H=function(x,y,z){this.x=x;this.y=y;this.z=z};H.prototype={set:function(x,y,z){this.x=x;this.y=y;this.z=z},add:function(b){return new H(this.x+b.x,this.y+b.y,this.z+b.z)},subtract:function(b){return new H(this.x-b.x,this.y-b.y,this.z-b.z)},multiply:function(b){return new H(this.x*b.x,this.y*b.y,this.z*b.z)},divide:function(b){return new H(this.x/b.x,this.y/b.y,this.z/b.z)},dot:function(b){var d=this.multiply(b);return(d.x+d.y+d.z)},magnitude:function(){var x=this.x;var y=this.y;var z=this.z;return E(x*x+y*y+z*z)},normal:function(b){return new H((this.y*b.z)-(this.z*b.y),-((this.x*b.z)-(this.z*b.x)),(this.x*b.y)-(this.y*b.x))},normalize:function(){var m=this.magnitude();return new H(this.x/m,this.y/m,this.z/m)},transform:function(a){var m=a.base;var x=this.x;var y=this.y;var z=this.z;return new H(m[0]*x+m[1]*y+m[2]*z+m[3],m[4]*x+m[5]*y+m[6]*z+m[7],m[8]*x+m[9]*y+m[10]*z+m[11])}};H.INVERT=new H(-1,-1,-1);H.ZERO=new H(0,0,0);$.namespace('Vector',H);var I=function(a){this.base=a||[1,0,0,0,0,1,0,0,0,0,1,0]};I.prototype={_multiply:function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x){return new I([a*m+b*q+c*u,a*n+b*r+c*v,a*o+b*s+c*w,a*p+b*t+c*x+d,e*m+f*q+g*u,e*n+f*r+g*v,e*o+f*s+g*w,e*p+f*t+g*x+h,i*m+j*q+k*u,i*n+j*r+k*v,i*o+j*s+k*w,i*p+j*t+k*x+l])},multiply:function(b){return this._multiply.apply(this,this.base.concat(b))},scale:function(a,b,c){return this.multiply([a,0,0,0,0,b,0,0,0,0,c,0])},translate:function(a,b,c){return this.multiply([1,0,0,a,0,1,0,b,0,0,1,c])},rotateX:function(a){var s=C(a);var c=D(a);return this.multiply([1,0,0,0,0,c,s,0,0,-s,c,0])},rotateY:function(a){var s=C(a);var c=D(a);return this.multiply([c,0,-s,0,0,1,0,0,s,0,c,0])},rotateXY:function(a,b){var c=C(a);var d=D(a);var e=C(b);var f=D(b);return this.multiply([f,0,-e,0,c*e,d,c*f,0,d*e,-c,d*f,0])},rotateZ:function(a){var s=C(a);var c=D(a);return this.multiply([c,s,0,0,-s,c,0,0,0,0,1,0])}};$.namespace('Matrix',I);var J=$.Class.extend(H,function(){},{iterate:function(a){a.push(this)}});$.namespace('Entity',J);return $})();
(function($){var g=Math.floor;var j=Math.min;var k=Math.max;var m=function(w,h,a){this.zBuffer=new n();this.canvas=document.createElement('canvas');this.canvas.className='canvas3D';(a||document.body).appendChild(this.canvas);this.setResolution(w,h)};m.prototype={setResolution:function(w,h){this.width=w;this.height=h;this.cx=w/2;this.cy=h/2;this.canvas.width=this.width;this.canvas.height=this.height;this.context=this.canvas.getContext('2d')},setBackground:function(a){this.canvas.style.background=a},render:function(a,b){var c=this.context;this.preRender(this,c);var d=this.zBuffer.sort(b.render(a));var l=d.length;for(var i=0;i<l;i++){d[i].draw(c)}this.postRender(this,c)},preRender:function(a,b){b.clearRect(0,0,this.width,this.height)},postRender:function(a,b){},addEvent:function(a,b){this.canvas.addEventListener(a,function(e){this.handleEvent(e,b)}.bind(this),false)},handleEvent:function(e,a){var x=e.layerX;var y=e.layerY;var b,polies=this.zBuffer.getPolygons();var l=polies.length-1;for(var i=l;i>=0;i--){b=polies[i];if(s(x,y,b)){var c={targetPolygon:b,targetShape:b.shape,clientX:x,clientY:y};a(c);break}}}};$.namespace('Renderer',m);var n=function(){this.polygons=[];this.visiblePolygons=[];this.hash=null};n.prototype={getPolygons:function(){return this.visiblePolygons},sort:function(a){if(this.hash!=a.length){var b=[];var l=a.length;for(var i=0;i<l;i++){b=b.concat(a[i].polygons)}this.hash=a.length;this.polygons=b}this.visiblePolygons=this.polygons.filter(o);var v=this.visiblePolygons.length;if(v>1){r(this.visiblePolygons,0,v-1)}return this.visiblePolygons}};var o=function(e){var p=e.screen;var a=p[0];var b=p[1];var c=p[2];var d=p[3];if(a.behindScreen||b.behindScreen||c.behindScreen||(d&&d.behindScreen)||((c.screenX-a.screenX)*(b.screenY-c.screenY))>((c.screenY-a.screenY)*(b.screenX-c.screenX))){return false}e.depth=d?(a.z+b.z+c.z+d.z)/4:(a.z+b.z+c.z)/3;return true};var q=function(a,b){return a.depth<b.depth};var r=function(a,b,c){var d,bot,top,t;if(c-b==1){if(a[b].depth<a[c].depth){t=a[b];a[b]=a[c];a[c]=t}return}t=g((b+c)/2);d=a[t];a[t]=a[b];a[b]=d;bot=b+1;top=c;do{while(bot<=top&&a[bot].depth>=d.depth){bot++}while(a[top].depth<d.depth){top--}if(bot<top){t=a[bot];a[bot]=a[top];a[top]=t}}while(bot<top);a[b]=a[top];a[top]=d;if(b<top-1){r(a,b,top-1)}if(top+1<c){r(a,top+1,c)}};var s=function(x,y,a){var b=a.screen;var l=b.length;var c=b[0].screenX;var d=c;var e=b[0].screenY;var f=e;var p;for(var i=1;i<l;i++){p=b[i];c=j(c,p.screenX);d=k(d,p.screenX);e=j(e,p.screenY);f=k(f,p.screenY)}return(x>c&&x<d&&y>e&&y<f)?true:false};$.namespace('ZBuffer',n)})(Clay);
(function($){var e=$.Class;var g=$.Vector;var j=$.Matrix;var k=$.Entity;var m=$.Dynamics;var n=Math.sqrt;var o=Math.atan2;var q=e.extend(k,function(x,y,z){this.display=new j();this.setDirection(new g(0,0,-1));this.focus=9;this.zoom=90;this.zoomFocus=this.zoom*this.focus;this.rotX=0;this.rotY=0},{setResolution:function(w,h){this.width=w;this.height=h;this.cx=w/2;this.cy=h/2},setTarget:function(a){this.target=a},setZoom:function(a){this.zoom=a;this.zoomFocus=this.zoom*this.focus},setDirection:function(a){this.direction=a.normalize()},moveBy:function(a){this.set(this.x+a.x,this.y+a.y,this.z+a.z)},render:function(a){if(this.target){var b=this.direction=this.target.subtract(this).normalize();var d=n(b.x*b.x+b.z*b.z);this.rotX=-o(b.y,d);this.rotY=o(b.x,b.z)}var c=this.display.rotateXY(this.rotX,this.rotY).translate(-this.x,-this.y,-this.z);a.transform(c);return a.totalShapes.filter(this.renderShape,this)},renderShape:function(a){var b=a.screen;var l=b.length;a.offScreen=true;for(var i=0;i<l;i++){this.renderPoint(b[i],a)}return!a.offScreen},renderPoint:function(p,a){var f=this.zoomFocus/-(p.z+this.focus);var x=this.cx+(p.x*f);var y=this.cy+(p.y*f);p.screenX=x;p.screenY=y;p.behindScreen=(p.z<-this.focus)?true:false;if(a.offScreen){p.offScreen=(x<0||y<0||x>this.width||y>this.height)?true:false;a.offScreen&=(p.behindScreen||p.offScreen)}}});e.implement(q,m);$.namespace('Camera',q)})(Clay);
(function($){var n=$.Vector;var o=Math.sin;var q=Math.cos;var s=Math.atan2;var u=Math.sqrt;var v=Math.floor;var z=function(r,g,b,a,c){this.r=r;this.g=g;this.b=b;this.a=a;this.stage=c;this.prefix='rgba(';this.suffix=')'};z.prototype={preRender:function(a){return z.BLACK},setStage:function(a){this.stage=a},setStroke:function(a){this.strokeStyle=a},animate:function(){},render:function(a){var b=this.stage.getLightFactor(a.getNormal()),c=',';return[this.prefix,v(this.r*b[0]),c,v(this.g*b[1]),c,v(this.b*b[2]),c,this.a,this.suffix].join('')},drawPolygon:function(a,b){var d=this.render(a);var e=a.screen;var p=e[0];var l=e.length;var f=0;var g=0;var c;for(var j=0;j<l;j++){c=e[j];f+=c.screenX;g+=c.screenY}f/=l;g/=l;var h=p.screenX-f;var k=p.screenY-g;var m=u((h*h)+(k*k));var x=p.screenX+(h/m);var y=p.screenY+(k/m);b.fillStyle=d;b.beginPath();b.moveTo(x,y);for(var i=1;i<l;i++){p=e[i];h=p.screenX-f;k=p.screenY-g;m=u((h*h)+(k*k));x=p.screenX+(h/m);y=p.screenY+(k/m);b.lineTo(x,y)}b.closePath();if(this.strokeStyle){b.strokeStyle=this.strokeStyle;b.stroke()}b.fill()}};z.BLACK='rgb(0,0,0)';z.WHITE='rgb(255,255,255)';z.TRANS='rgba(0,0,0,0)';$.namespace('Material',z);var A=function(a,b){this.image=new Image();this.stage=b;var c=this.canvas=document.createElement('canvas');c.width=128;c.height=128;this.image.addEventListener('load',this.renderImage.bind(this),false);this.image.setAttribute('src',a)};A.prototype={renderImage:function(){var w=this.image.width;var h=this.image.height;var a=this.canvas;var b=a.getContext('2d');a.width=w;a.height=h;b.drawImage(this.image,0,0);this.complete=true},setStage:function(a){this.stage=a},animate:function(){},preRender:function(e,f){var g=this;function parseTexCoords(){var a=g.image.width;var b=g.image.height;var c=f;var d=[];for(var i=0;i<c.length;i++){d[i]={x:c[i].x*a,y:c[i].y*b}}e.baseA=B(d);if(e.triangleB){e.baseB=B([d[2],d[3],d[0]])}}if(this.image.complete){parseTexCoords()}else{this.image.addEventListener('load',parseTexCoords,false)}return this.canvas},render:function(a,b){return this.canvas},drawPolygon:function(a,b){var c=this.render(a,b);this.drawTriangle(a.triangleA,c,b,a.baseA);if(a.triangleB){this.drawTriangle(a.triangleB,c,b,a.baseB)}},drawTriangle:function(a,b,c,d){var e=0;var f=0;var l=3;var t;for(var i=0;i<l;i++){t=a[i];e+=t.screenX;f+=t.screenY}e/=l;f/=l;var g,dy,dd,expanded=[];for(i=0;i<l;i++){t=a[i];g=t.screenX-e;dy=t.screenY-f;dd=u((g*g)+(dy*dy));expanded.push({x:t.screenX+(g/dd),y:t.screenY+(dy/dd)})}c.save();c.beginPath();c.moveTo(expanded[0].x,expanded[0].y);c.lineTo(expanded[1].x,expanded[1].y);c.lineTo(expanded[2].x,expanded[2].y);c.clip();var h=B(expanded);var j=h.w/d.w;var k=h.p-(j*d.p);c.translate(h.x,h.y);c.rotate(h.r);c.transform(j,0,1/(d.h/k),h.h/d.h,0,0);c.rotate(-d.r);c.drawImage(b,-d.x,-d.y);c.restore()}};A.DEFAULT_MAP=[{x:0,y:0},{x:1,y:0},{x:1,y:1},{x:0,y:1}];$.namespace('Texture',A);var B=function(e){var a=e[0];var b=e[1];var c=e[2];var f=b.x-a.x;var g=b.y-a.y;var i=c.x-b.x;var j=c.y-b.y;var k=s(g,f);var l=s(j,i);var m=l-k;var w=u(f*f+g*g);var d=u(i*i+j*j);var h=o(m)*d;var p=q(m)*d;return{x:a.x,y:a.y,r:k,w:w,h:h,p:p}}})(Clay);
(function($){var e=$.Class;var h=$.Vector;var j=$.Entity;var k=Math.PI/2;var l=Math.acos;var m=e.extend(j,function(x,y,z,b,i){this.direction=new h(x,y,z).normalize();this.light=new h(x,y,z);this.setBrightness(b||1);this.setIntensity(i||1);this.setColor(255,255,255)},{transform:function(a){},setColor:function(r,g,b){this.r=r/255;this.g=g/255;this.b=b/255},setBrightness:function(b){this.brightness=b*k},setIntensity:function(i){this.intensity=i/k},getFactor:function(a,b){var c=a.dot(this.direction);var d=l(c);var f=(this.brightness-d)*this.intensity;b[0]+=(this.r*f);b[1]+=(this.g*f);b[2]+=(this.b*f)},iterate:function(a){a.push(this)}});$.namespace('Light',m);$.namespace('AmbientLight',e.extend(m,null,{getFactor:function(){var f=this.brightness*this.intensity;factors[0]+=(this.r*f);factors[1]+=(this.g*f);factors[2]+=(this.b*f)}}));$.namespace('DirectionalLight',e.extend(m,null,{getFactor:function(){var a=normal.dot(this.direction);var b=l(a);var f=(this.brightness-b)*this.intensity;factors[0]+=(this.r*f);factors[1]+=(this.g*f);factors[2]+=(this.b*f)}}))})(Clay);
(function($){var q=$.Class;var s=$.Vector;var u=$.Entity;var v=function(a,b){this.indices=a;this.shape=b;this.screen=[];this.points=[];for(var i=0;i<a.length;i++){this.points.push(b.points[a[i]]);this.screen.push(b.screen[a[i]])}var c=this.screen;this.triangleA=[c[0],c[1],c[2]];if(c[3]){this.triangleB=[c[2],c[3],c[0]]}};v.prototype={getNormal:function(){var a=this.screen[0];var b=this.screen[1];var c=this.screen[2];var d=b.subtract(a);var e=c.subtract(b);return d.normal(e).normalize()},setMaterial:function(a,b){this.material=a;this.texCoords=b||$.Texture.DEFAULT_MAP;this.texture=a.preRender(this,this.texCoords)},draw:function(a){this.material.drawPolygon(this,a)},invert:function(){this.screen.reverse();this.points.reverse();this.getNormal()}};$.namespace('Polygon',v);var A={setDynamics:function(a){this.hasDynamics=true;this.dynamics=a},applyDynamics:function(a){var l=this.dynamics.length;for(var d,i=0;i<l;i++){d=this.dynamics[i];d.value+=d.increment;a=a[d.type](d.value)}return a}};$.namespace('Dynamics',A);var B=q.extend(u,function(x,y,z,a,b,c,d){this.points=[];this.polygons=[];this.screen=[];this.texturemap=d;for(var p,i=0;i<a.length;i++){p=a[i];this.points.push(new s(p.x,p.y,p.z));this.screen.push(new s(p.x,p.y,p.z))}var e=d||[];var l=b.length;var f;for(i=0;i<l;i++){f=new v(b[i],this);f.setMaterial(c,e[i]);this.polygons.push(f)}},{setMaterial:function(a,b){var c=b||this.texturemap;var l=this.polygons.length;for(var i=0;i<l;i++){this.polygons[i].setMaterial(a,c[i])}},transform:function(a){var b=a.translate(this.x,this.y,this.z);if(this.dynamics){b=this.applyDynamics(b)}var t;var c=this.points;var d=this.screen;var l=c.length;for(var i=0;i<l;i++){t=c[i].transform(b);d[i].set(t.x,t.y,t.z)}},invert:function(){var l=this.polygons.length;for(var i=0;i<l;i++){this.polygons[i].invert()}}});q.implement(B,A);$.namespace('Shape',B);var C=q.extend(u,function(x,y,z){this.entities=[]},{add:function(a){this.entities.push(a)},remove:function(a){var l=this.entities.length;for(var i=0;i<l;i++){if(this.entities[i]==a){this.entities.splice(i,1);return}}},removeAll:function(){this.entities=[]},getEntities:function(){return this.entities},getEntitiesOf:function(a){var b=this.iterate([]);var c=[];var l=b.length;for(var i=0;i<l;i++){var d=b[i];if(d.constructor===a){c.push(d)}}return c},iterate:function(a){var l=this.entities.length;for(var i=0;i<l;i++){this.entities[i].iterate(a)}return a},transform:function(a){var b=a.translate(this.x,this.y,this.z);if(this.dynamics){b=this.applyDynamics(b)}var l=this.entities.length;for(var i=0;i<l;i++){this.entities[i].transform(b)}}});q.implement(C,A);$.namespace('Group',C);$.namespace('Cube',function(x,y,z,w,h,b,a,c){var d=[[0,3,7,4],[3,2,6,7],[2,1,5,6],[1,0,4,5],[1,2,3,0],[4,7,6,5]];var e=w/2,ch=h/2,cb=b/2;var f=[{x:-e,y:ch,z:-cb},{x:e,y:ch,z:-cb},{x:e,y:ch,z:cb},{x:-e,y:ch,z:cb},{x:-e,y:-ch,z:-cb},{x:e,y:-ch,z:-cb},{x:e,y:-ch,z:cb},{x:-e,y:-ch,z:cb}];return new $.Shape(x,y,z,f,d,a,c)});$.namespace('Sheet',function(x,y,z,w,b,a,c){var d=[[0,1,2,3]];var e=w/2,cb=b/2;var f=[{x:e,y:0,z:cb},{x:-e,y:0,z:cb},{x:-e,y:0,z:-cb},{x:e,y:0,z:-cb}];return new $.Shape(x,y,z,f,d,a,c)});$.namespace('Pyramid',function(x,y,z,w,h,b,a,c){var d=[[4,3,2,1],[1,0,4],[4,0,3],[3,0,2],[2,0,1]];var e=w/2,cb=b/2;var f=[{x:0,y:h,z:0},{x:-e,y:0,z:cb},{x:-e,y:0,z:-cb},{x:e,y:0,z:-cb},{x:e,y:0,z:cb}];return new $.Shape(x,y,z,f,d,a,c)});$.namespace('Cylinder',function(x,y,z,h,r,l,e,f){var g=[];var j=[];var k,sz,sr,cap=[],bot=[];var m=(Math.PI*2)/l;for(var i=0;i<l;i++){sr=m*i;k=Math.sin(sr)*r;sz=Math.cos(sr)*r;var n=j.push({x:k,y:-h/2,z:sz})-1,pb=j.push({x:k,y:h/2,z:sz})-1;bot.push(n);cap.push(pb);var a=n,b=pb,c=(pb+2)%(l*2),d=(pb+1)%(l*2);g.push([a,b,c,d])}g.push(cap.reverse(),bot);return new $.Shape(x,y,z,j,g,e,f)});$.namespace('Cone',function(x,y,z,h,r,l,d,e){var f=[];var g=[];var j,sz,sr,bot=[];var k=(Math.PI*2)/l;g.push({x:0,y:h,z:0});for(var i=0;i<l;i++){sr=k*i;j=Math.sin(sr)*r;sz=Math.cos(sr)*r;var a=g.push({x:j,y:0,z:sz})-1,b=0,c=(a%l+1);bot.push(a);f.push([a,b,c])}f.push(bot);return new $.Shape(x,y,z,g,f,d,e)});$.namespace('Sphere',function(x,y,z,r,l,e,f){var g=[];var h=[];var k,sy,sz,sr;var m=(Math.PI*2)/l;var n=l-1;var o=l*l-n;var a,b,c,d;for(var i=0;i<l;i++){for(var j=0;j<l;j++){sr=Math.sin(m/2*i)*r;k=Math.sin(m*j)*sr;sz=Math.cos(m*j)*sr;sy=Math.cos(m/2*i)*r;h.push({x:k,y:sy,z:sz});if(i===0){break}else if(i==1){a=(i*l)+j-n;b=(i*l)+(j+1)%l-n;c=0;g.push([c,b,a])}else if(i>1){a=(i*l)+j-n;b=(i*l)+(j+1)%l-n;c=b-l;d=a-l;g.push([d,c,b,a]);if(i==l-1){a=(i*l)+j-n;b=(i*l)+(j+1)%l-n;c=o;g.push([a,b,c])}}}}h.push({x:0,y:-r,z:0});return new $.Shape(x,y,z,h,g,e,f)});$.namespace('Tube',function(x,y,z,h,r,w,l,e,f){var g=[];var j=[];var k,sx2,sz1,sz2,sr1,sr2;var m=(Math.PI*2)/l;var a,b,c,d;for(var i=0;i<l;i++){sr=m*i;k=Math.sin(sr)*r;sz1=Math.cos(sr)*r;sx2=Math.sin(sr)*(r-w);sz2=Math.cos(sr)*(r-w);var n=j.push({x:k,y:-h/2,z:sz1})-1,pb=j.push({x:k,y:h/2,z:sz1})-1,pc=j.push({x:sx2,y:-h/2,z:sz2})-1,pd=j.push({x:sx2,y:h/2,z:sz2})-1;a=n;b=pb;c=(n+5)%(l*4);d=(n+4)%(l*4);g.push([a,b,c,d]);a=pc;b=pd;c=(pc+5)%(l*4);d=(pc+4)%(l*4);g.push([d,c,b,a]);a=pb;b=pd;c=(pd+4)%(l*4);d=(pb+4)%(l*4);g.push([a,b,c,d]);a=n;b=pc;c=(pc+4)%(l*4);d=(n+4)%(l*4);g.push([d,c,b,a])}return new $.Shape(x,y,z,j,g,e,f)})})(Clay);
(function(){function rand(a){return Math.random()*(a||1)}function ProfileApp(){var a=$('#user-profile .user-header')[0];a.innerHTML='';this.stage=new Clay.Stage(940,400,a);this.world=this.stage.getWorld();this.camera=this.stage.getCamera();var b=this;var c=this.stage.renderer.canvas;c.style.marginBottom='-115px';c.addEventListener('click',function(e){e.preventDefault();b.reset()},false);c.addEventListener('contextmenu',function(e){e.preventDefault();b.setRenderMode(true)},false);this.reset()}ProfileApp.prototype={reset:function(){this.camera.set(0,0,-25);this.camera.setTarget(Clay.Vector.ZERO);this.world.removeAll();this.setModes();this.setLighting();this.addShapes();this.resetCamera();this.resetRendering();this.stage.run()},setLighting:function(){var a=new Clay.Light(0,-5,1,1.5,1);a.setColor(255,255,255);this.world.add(a)},setShapeMode:function(){this.shapeMode=Math.floor(rand(2))},setRenderMode:function(a){var b=2;this.stage.renderer.context.setTransform(1,0,0,1,0,0);if(a){this.renderMode=(this.renderMode+1)%b}else{this.renderMode=Math.floor(rand(b))}},setModes:function(){this.setShapeMode();this.setRenderMode()},addShapes:function(){var a=1+rand(255);var b=1+rand(255);var c=1+rand(255);var d=2+Math.round(rand()*2);var e=512+rand(5000);var f=rand()<0.5;var g=(f&&rand(3)>1)?255:0;this.stage.setBackground('rgb('+g+','+g+','+g+')');var i=0,j=0,k=0;var x,y,z,alpha,material,shape;for(i=0;i<d;i++){for(j=0;j<d;j++){for(k=0;k<d;k++){x=(e*i)-(e*(d-1))/2;y=(e*j)-(e*(d-1))/2;z=(e*k)-(e*(d-1))/2;alpha=rand(1);material=new Clay.Material(rand(255),rand(255),rand(255),alpha,this.stage);if(f){var h=g;var l='rgba('+h+','+h+','+h+','+alpha+')';material.setStroke(l)}switch(this.shapeMode){case 0:shape=new Clay.Cube(x,y,z,a,b,c,material);shape.setDynamics([{type:'rotateX',value:0,increment:0.05}]);break;case 1:shape=new Clay.Tube(0,0,0,64,2000,64,64,material);this.world.add(shape);material=new Clay.Material(rand(255),rand(255),rand(255),alpha,this.stage);shape=new Clay.Tube(0,0,0,64,1800,64,64,material);this.world.add(shape);return;break}this.world.add(shape)}}}},resetCamera:function(){var x,y,z,t=0,tick=0.01-rand(0.02),radius=1280;var n,cx,cy,camrad=rand(640);var a=this.camera;this.stage.addEvent('enterframe',function(){t+=tick;x=Math.sin(t)*radius*2;y=Math.cos(t)*radius;z=Math.cos(t)*radius;a.set(x,y,z);n=2*t;cx=Math.sin(n)*camrad;cz=Math.cos(n)*camrad;a.setTarget(new Clay.Vector(cx,-cx,cz))})},resetRendering:function(){var f=0;var g=0.005-rand(0.01);var i=Math.PI/2;var j=this;this.stage.addEvent('prerender',function(a){var b=a.context;var w=a.width;var h=a.height;switch(j.renderMode){case 0:b.fillStyle='rgba(255,255,255,0.01)';b.fillRect(0,0,w,h);break}});this.stage.addEvent('postrender',function(a){var b=a.context;var c=a.canvas;var w=a.width;var h=a.height;f+=g;switch(j.renderMode){case 0:b.save();b.translate(w/2,h/2);b.rotate(g);b.translate(-w/2,-h/2);b.drawImage(c,-1,-1,w+2,h+2);b.restore();break;case 1:b.save();b.scale(0.95,0.95);b.drawImage(c,0,0,w,h);b.scale(1,-1);b.drawImage(c,0,0,w,h);b.drawImage(c,0,-h*2,w,h);b.restore();var d=w/2;var e=h/2;b.translate(d,e);b.rotate(g);b.translate(-d,-e);break}})}};window.addEventListener('load',function(){window.profileApp=new ProfileApp()},false)})();

