var tassmjau=tassmjau||{};tassmjau.random=function(a,b){return a+Math.random()*(b-a)};tassmjau.has_class=function(a,b){return a.className.match(RegExp("(\\s|^)"+b+"(\\s|$)"))};tassmjau.add_class=function(a,b){tassmjau.has_class(a,b)||(a.className+=" "+b)};tassmjau.remove_class=function(a,b){if(tassmjau.has_class(a,b))a.className=a.className.replace(RegExp("(\\s|^)"+b+"(\\s|$)")," ")};tassmjau.replace_class=function(a,b,c){tassmjau.has_class(a,b)&&(remove_class(a,b),add_class(a,c))};
tassmjau.toggle_class=function(a,b,c){tassmjau.has_class(a,b)?replace_class(a,b,c):tassmjau.has_class(a,c)?replace_class(a,c,b):add_class(a,b)};tassmjau.css=function(a,b){for(key in b)a.style[key]=b[key]};tassmjau.id=function(a,b){a.setAttribute("id",b)};tassmjau.dom_create=function(a,b,c,d){var e=document.getElementById(b);e||(e=document.createElement(a));tassmjau.id(e,b);c!==null&&tassmjau.add_class(e,c);tassmjau.css(e,d);return e};
tassmjau.EventTarget=function(){var a={};this.addEventListener=function(b,c){a[b]==void 0&&(a[b]=[]);a[b].indexOf(c)===-1&&a[b].push(c)};this.dispatchEvent=function(b){for(var c in a[b.type])a[b.type][c](b)};this.removeEventListener=function(b,c){var d=a[b].indexOf(c);d!==-1&&a[b].splice(d,1)}};
(function(){var a=false,b=/xyz/.test(function(){})?/\b_super\b/:/.*/;this.Class=function(){};Class.extend=function(c){function d(){!a&&this.init&&this.init.apply(this,arguments)}var e=this.prototype;a=true;var g=new this;a=false;for(var f in c)g[f]=typeof c[f]=="function"&&typeof e[f]=="function"&&b.test(c[f])?function(a,b){return function(){var c=this._super;this._super=e[a];var d=b.apply(this,arguments);this._super=c;return d}}(f,c[f]):c[f];d.prototype=g;d.prototype.constructor=d;d.extend=arguments.callee;
return d}})();tassmjau.Class=Class.extend({init:function(){this.before_init&&this.before_init();tassmjau.EventTarget.call(this)},trigger:function(a,b){this.dispatchEvent({type:a,body:b})},bind:function(a,b){this.addEventListener(a,b)}});tassmjau.AbstractWebgl=tassmjau.Class.extend({before_init:function(){},init:function(){},setup_viewport:function(){},update:function(){},render:function(){},destroy:function(){}});tassmjau.Waves=tassmjau.AbstractWebgl.extend({amount:400,container:null,camera:null,scene:null,geometry:null,parameters:null,materials:[],PI2:Math.PI*2,camera_settings:{fov:200,near:2,far:3E3,target:null,x:0,y:0,z:-1E3},setup_viewport:function(a,b){this.container=a;this.scene=b;this.create()},create:function(){this.geometry=new THREE.Geometry;for(var a=0;a<this.amount;a++)vector=new THREE.Vector3(tassmjau.random(-2E3,1E3),tassmjau.random(-2E3,1E3),tassmjau.random(-2E3,1E3)),this.geometry.vertices.push(new THREE.Vertex(vector));
this.parameters=[[[1,1,1],2],[[0.95,1,1],1],[[0.9,1,1],0.7],[[0.85,1,1],0.5],[[0.8,1,1],0.3]];for(a=0;a<this.parameters.length;a++)size=this.parameters[a][1],color=this.parameters[a][0],generateTexture(),this.materials[a]=new THREE.ParticleBasicMaterial({size:100,opacity:0.7,blending:THREE.AdditiveBlending}),this.materials[a].color.setHSV(color[0],color[1],color[2]),particles=new THREE.ParticleSystem(this.geometry,this.materials[a]),particles.rotation.x=tassmjau.random(0,6),particles.rotation.y=tassmjau.random(0,
6),particles.rotation.z=tassmjau.random(0,6),this.scene.addObject(particles)},update:function(){var a=(new Date).getTime()*5.0E-5;for(i=0;i<this.scene.objects.length;i++)this.scene.objects[i].rotation.y=a*(i<4?i+1:-(i+1)),this.scene.objects[i].rotation.z=a*(i<4?i+1:-(i+1));for(i=0;i<this.materials.length;i++)color=this.parameters[i][0],h=360*(color[0]+a)%360/360,this.materials[i].color.setHSV(h,color[1]/3,color[2])}});tassmjau.Jelly=tassmjau.AbstractWebgl.extend({amount:1500,container:null,scene:null,geometry:null,parameters:null,materials:[],PI2:Math.PI*2,camera_settings:{fov:80,near:2,far:3E3,target:null,x:0,y:0,z:1E3},setup_viewport:function(a,b){this.container=a;this.scene=b;this.create()},create:function(){var a=new THREE.SphereGeometry(420,32,32),a=new THREE.Mesh(a,new THREE.MeshPhongMaterial({ambient:2302755,color:1381653,specular:4473924,shininess:150,opacity:0.7,transparent:true}));a.overdraw=true;a.updateMatrix();
this.scene.addObject(a);this.parameters=[[0.45,6724044,1,1.25],[0.5,16746117,1,0.25]];this.geometry=new THREE.Geometry;for(var b=a=null,c=0;c<this.amount;c++)a=new THREE.Vector3(tassmjau.random(-1,1),tassmjau.random(-1,1),tassmjau.random(-1,1)),a.normalize(),a.multiplyScalar(900),b=a.clone(),b.multiplyScalar(Math.random()*0.1+1),this.geometry.vertices.push(new THREE.Vertex(a)),this.geometry.vertices.push(new THREE.Vertex(b));for(c=0;c<this.parameters.length;c++)p=this.parameters[c],material=new THREE.LineBasicMaterial({color:p[1],
opacity:p[2],linewidth:p[3]}),line=new THREE.Line(this.geometry,material,THREE.LinePieces),line.scale.x=line.scale.y=line.scale.z=p[0],line.originalScale=p[0],line.rotation.y=Math.random()*Math.PI,line.updateMatrix(),this.scene.addObject(line)},update:function(){var a=(new Date).getTime()*2.0E-4,b=0;scene.objects[1].rotation.y=a*(b<4?b+1:-(b+1));for(b=2;b<scene.objects.length;b++)if(scene.objects[b].rotation.y=a*(b<4?b+1:-(b+1)),b<5)scene.objects[b].rotation.x=a*(b<4?b-0.4:-(b-0.4)),scene.objects[b].scale.x=
scene.objects[b].scale.y=scene.objects[b].scale.z=scene.objects[b].originalScale*(b/5+1)*(0.14+0.5*Math.sin(8*a))}});var viewport_width=window.innerWidth,viewport_height=window.innerHeight,aspect_ratio=viewport_width/viewport_height,startTime=Date.now(),container=null,camera=null,scene=null,renderer=null,directionalLight=null,current_exp=null,current_exp=tassmjau.random(0,10)>5?new tassmjau.Waves:new tassmjau.Jelly;
function onDomContentReady(){if(Detector.webgl){var a=current_exp.camera_settings;camera=new THREE.Camera(a.fov,aspect_ratio,a.near,a.far);camera.position.z=a.z;scene=new THREE.Scene;current_exp.setup_viewport(container,scene);a=new THREE.AmbientLight(328965);scene.addLight(a);directionalLight=new THREE.DirectionalLight(16777215);directionalLight.position.x=6;directionalLight.position.y=4;directionalLight.position.z=1;directionalLight.position.normalize();scene.addLight(directionalLight);container=
document.getElementById("viewport");renderer=new THREE.WebGLRenderer;renderer.setSize(window.innerWidth,window.innerHeight);container.appendChild(renderer.domElement);window.addEventListener("resize",windowResizeHandler,false);animate()}else shit_browser()}function animate(){render();requestAnimationFrame(animate)}function render(){current_exp.update();renderer.render(scene,camera)}
function windowResizeHandler(){viewport_width=window.innerWidth;viewport_height=window.innerHeight;aspect_ratio=viewport_width/viewport_height;renderer.setSize(viewport_width,viewport_height);camera.aspect=aspect_ratio;camera.updateProjectionMatrix()}
function generateTexture(){var a=document.createElement("canvas");a.width=256;a.height=256;for(var b=a.getContext("2d"),c=b.getImageData(0,0,256,256),d=0,e=0,g=0,f=0,j=c.data.length;g<j;g+=4,f++)d=f%256,e=d==0?e+1:e,c.data[g+2]=Math.floor(d^e),c.data[g+3]=255;b.putImageData(c,0,0);return a}
function shit_browser(){var a=document.createElement("div");a.style.position="absolute";a.style.width="760px";a.style.height="160px";a.style.left="50%";a.style.top="50%";a.style.marginLeft="-390px";a.style.marginTop="-80px";a.style.background="#fff";a.style.textAlign="center";a.style.padding="20px";a.innerHTML='<h1>oops!</h1><br /><p>you\'re on a device or browser that does\'t support webgl</p><p>if you were you should see some pretty neat animations instead of this boring old box...</p><br /><p>you could dowload <a href="http://firefox.com" target="_blank">Firefox</a> or <a href="https://www.google.com/chrome" target="_blank">Chrome</a> and come back here too see it</p><p>or if you just wanna get in touch with me - mail me at <a href="mailto:martin.wijk@gmail.com" target="_blank">martin.wijk@gmail.com</a></p><br /><p>farewell!</p>';
document.body.appendChild(a)}document.addEventListener("DOMContentLoaded",onDomContentReady,false);

