"use strict";const awards_container=document.getElementById('awards-container') var startStationaryToggle=Date.now()+10000;var BugDispatch={options:{minDelay:500,maxDelay:10000,minBugs:2,maxBugs:20,minSpeed:5,maxSpeed:10,maxLargeTurnDeg:150,maxSmallTurnDeg:10,maxWiggleDeg:5,imageSprite:'fly-sprite.png',bugWidth:13,bugHeight:14,num_frames:5,zoom:10,canFly:true,canDie:true,numDeathTypes:3,monitorMouseMovement:false,eventDistanceToBug:40,minTimeBetweenMultipy:1000,mouseOver:'random'},initialize:function(options){this.options=mergeOptions(this.options,options);if(this.options.minBugs>this.options.maxBugs){this.options.minBugs=this.options.maxBugs;} this.modes=['multiply','nothing'];if(this.options.canFly){this.modes.push('fly','flyoff');} if(this.options.canDie){this.modes.push('die');} if(this.modes.indexOf(this.options.mouseOver)==-1){this.options.mouseOver='random';} this.transform=null;this.transforms={'Moz':function(s){this.bug.style.MozTransform=s;},'webkit':function(s){this.bug.style.webkitTransform=s;},'O':function(s){this.bug.style.OTransform=s;},'ms':function(s){this.bug.style.msTransform=s;},'Khtml':function(s){this.bug.style.KhtmlTransform=s;},'w3c':function(s){this.bug.style.transform=s;}};if('transform'in document.documentElement.style){this.transform=this.transforms.w3c;}else{var vendors=['Moz','webkit','O','ms','Khtml'],i=0;for(i=0;i0.5)?true:false):true,options.walkSpeed=this.random(this.options.minSpeed,this.options.maxSpeed),b.initialize(this.transform,options);this.bugs.push(b);} this.spawnDelay=[];for(i=0;i0.5)?true:false):true;options.walkSpeed=this.random(this.options.minSpeed,this.options.maxSpeed);b.initialize(this.transform,options);b.drawBug(pos.top,pos.left);if(options.canFly){b.flyRand();bug.flyRand();}else{b.go();bug.go();} this.bugs.push(b);this.multiplyDelay=true;setTimeout(function(){that.add_events_to_bug(b);that.multiplyDelay=false;},this.options.minTimeBetweenMultipy);}}},random:function(min,max,round){if(min==max)return((round)?Math.round(min):min);var result=((min-0.5)+(Math.random()*(max-min+1)));if(result>max){result=max;}else if(result200)delta=200;this._lastTimestamp=t;if(Date.now()>startStationaryToggle&&--this.toggle_stationary_counter<=0){this.toggleStationary();} if(this.stationary){return;} if(--this.edge_test_counter<=0&&this.bug_near_window_edge()){this.angle_deg%=360;if(this.angle_deg<0)this.angle_deg+=360;if(Math.abs(this.directions[this.near_edge]-this.angle_deg)>15){var angle1=this.directions[this.near_edge]-this.angle_deg;var angle2=(360-this.angle_deg)+this.directions[this.near_edge];this.large_turn_angle_deg=(Math.abs(angle1)0&&dangle<0)||(this.large_turn_angle_deg<0&&dangle>0)){dangle=-dangle;} this.large_turn_angle_deg-=dangle;this.angle_deg+=dangle;} this.angle_rad=this.deg2rad(this.angle_deg);var dx=Math.cos(this.angle_rad)*this.options.walkSpeed*(delta/100);var dy=-Math.sin(this.angle_rad)*this.options.walkSpeed*(delta/100);this.moveBug((this.bug.left+dx),(this.bug.top+dy),(90-this.angle_deg));this.walkFrame();},makeBug:function(){if(!this.bug&&this.active){var row=(this.wingsOpen)?'0':'-'+this.options.bugHeight+'px',bug=document.createElement('div');bug.className='bug';bug.style.background='transparent url('+this.options.imageSprite+') no-repeat 0 '+row;bug.style.width=this.options.bugWidth+'px';bug.style.height=this.options.bugHeight+'px';if(this.options.imageSprite=='/i/spider-sprite.webp') bug.style.position='fixed';else bug.style.position='absolute';this.bug=bug;this.setPos();}},setPos:function(top,left){this.bug.top=top||this.random(this.options.edge_resistance,document.documentElement.clientHeight-this.options.edge_resistance);this.bug.left=left||this.random(this.options.edge_resistance,document.documentElement.clientWidth-this.options.edge_resistance);this.moveBug(this.bug.left,this.bug.top,(90-this.angle_deg));},moveBug:function(x,y,deg){this.bug.left=x;this.bug.top=y;var trans="translate("+parseInt(x)+"px,"+parseInt(y)+"px)";if(deg){trans+=" rotate("+deg+"deg)";} trans+=" scale("+this.zoom+")";this.transform(trans);},drawBug:function(top,left){if(!this.bug){this.makeBug();} if(!this.bug)return;if(top&&left){this.setPos(top,left);}else{this.setPos(this.bug.top,this.bug.left)} if(!this.inserted){this.inserted=true;if(this.options.imageSprite=='/i/spider-sprite.webp') document.body.appendChild(this.bug);else awards_container.appendChild(this.bug);}},toggleStationary:function(){this.stationary=!this.stationary;this.next_stationary();var ypos=(this.wingsOpen)?'0':'-'+this.options.bugHeight+'px';if(this.stationary){this.bug.style.backgroundPosition='0 '+ypos;}else{this.bug.style.backgroundPosition='-'+this.options.bugWidth+'px '+ypos;}},walkFrame:function(){var xpos=(-1*(this.walkIndex*this.options.bugWidth))+'px',ypos=(this.wingsOpen)?'0':'-'+this.options.bugHeight+'px';this.bug.style.backgroundPosition=xpos+' '+ypos;this.walkIndex++;if(this.walkIndex>=this.options.num_frames)this.walkIndex=0;},fly:function(landingPosition){var currentTop=this.bug.top,currentLeft=this.bug.left,diffx=(currentLeft-landingPosition.left),diffy=(currentTop-landingPosition.top),angle=Math.atan(diffy/diffx);if(Math.abs(diffx)+Math.abs(diffy)<50){this.bug.style.backgroundPosition=(-2*this.options.bugWidth)+'px -'+(2*this.options.bugHeight)+'px';} if(Math.abs(diffx)+Math.abs(diffy)<30){this.bug.style.backgroundPosition=(-1*this.options.bugWidth)+'px -'+(2*this.options.bugHeight)+'px';} if(Math.abs(diffx)+Math.abs(diffy)<10){this.bug.style.backgroundPosition='0 0';this.stop();this.go();return;} var dx=Math.cos(angle)*this.options.flySpeed,dy=Math.sin(angle)*this.options.flySpeed;if((currentLeft>landingPosition.left&&dx>0)||(currentLeft>landingPosition.left&&dx<0)){dx=-1*dx;if(Math.abs(diffx)landingPosition.top&&dy>0)){dy=-1*dy;if(Math.abs(diffy)0){this.angle_deg=90+this.angle_deg;}else{this.angle_deg=270+this.angle_deg;} this.moveBug(currentLeft,currentTop,this.angle_deg);var that=this;this.flyperiodical=setInterval(function(){that.fly(landingPosition);},10);},flyIn:function(){if(!this.bug){this.makeBug();} if(!this.bug)return;this.stop();var side=Math.round(Math.random()*4-0.5),d=document,e=d.documentElement,g=d.getElementsByTagName('body')[0],windowX=innerWidth||e.clientWidth||g.clientWidth,windowY=innerHeight||e.clientHeight||g.clientHeight;if(side>3)side=3;if(side<0)side=0;var style={},s;if(side===0){style.top=(-2*this.options.bugHeight);style.left=Math.random()*windowX;}else if(side===1){style.top=Math.random()*windowY;style.left=windowX+(2*this.options.bugWidth);}else if(side===2){style.top=windowY+(2*this.options.bugHeight);style.left=Math.random()*windowX;}else{style.top=Math.random()*windowY;style.left=(-3*this.options.bugWidth);} var row=(this.wingsOpen)?'0':'-'+this.options.bugHeight+'px';this.bug.style.backgroundPosition=(-3*this.options.bugWidth)+'px '+row;this.bug.top=style.top this.bug.left=style.left this.drawBug();var landingPosition={};landingPosition.top=this.random(this.options.edge_resistance,document.documentElement.clientHeight-this.options.edge_resistance);landingPosition.left=this.random(this.options.edge_resistance,document.documentElement.clientWidth-this.options.edge_resistance);this.startFlying(landingPosition);},walkIn:function(){if(!this.bug){this.makeBug();} if(!this.bug)return;this.stop();var side=Math.round(Math.random()*4-0.5),d=document,e=d.documentElement,g=d.getElementsByTagName('body')[0],windowX=innerWidth||e.clientWidth||g.clientWidth,windowY=innerHeight||e.clientHeight||g.clientHeight;if(side>3)side=3;if(side<0)side=0;var style={},s;if(side===0){style.top=(-1.3*this.options.bugHeight);style.left=Math.random()*windowX;}else if(side===1){style.top=Math.random()*windowY;style.left=windowX+(0.3*this.options.bugWidth);}else if(side===2){style.top=windowY+(0.3*this.options.bugHeight);style.left=Math.random()*windowX;}else{style.top=Math.random()*windowY;style.left=(-1.3*this.options.bugWidth);} var row=(this.wingsOpen)?'0':'-'+this.options.bugHeight+'px';this.bug.style.backgroundPosition=(-3*this.options.bugWidth)+'px '+row;this.bug.top=style.top this.bug.left=style.left this.drawBug();this.go();},flyOff:function(){this.stop();var side=this.random(0,3),style={},d=document,e=d.documentElement,g=d.getElementsByTagName('body')[0],windowX=innerWidth||e.clientWidth||g.clientWidth,windowY=innerHeight||e.clientHeight||g.clientHeight;if(side===0){style.top=-200;style.left=Math.random()*windowX;}else if(side===1){style.top=Math.random()*windowY;style.left=windowX+200;}else if(side===2){style.top=windowY+200;style.left=Math.random()*windowX;}else{style.top=Math.random()*windowY;style.left=-200;} this.startFlying(style);},die:function(){this.stop();var deathType=this.random(0,this.options.numDeathTypes-1);this.alive=false;this.drop(deathType);},drop:function(deathType){var startPos=this.bug.top,d=document,e=d.documentElement,g=d.getElementsByTagName('body')[0],finalPos=innerHeight||e.clientHeight||g.clientHeight,finalPos=finalPos-this.options.bugHeight,rotationRate=this.random(0,20,true),startTime=Date.now(),that=this;this.bug.classList.add('bug-dead');this.dropTimer=requestAnimFrame(function(t){that._lastTimestamp=t;that.dropping(t,startPos,finalPos,rotationRate,deathType);});},dropping:function(t,startPos,finalPos,rotationRate,deathType){var elapsedTime=t-this._lastTimestamp,deltaPos=(0.002*(elapsedTime*elapsedTime)),newPos=startPos+deltaPos;var that=this;if(newPos>=finalPos){newPos=finalPos;clearTimeout(this.dropTimer);this.angle_deg=0;this.angle_rad=this.deg2rad(this.angle_deg);this.transform("rotate("+(90-this.angle_deg)+"deg) scale("+this.zoom+")");this.bug.style.top=null;var rotationOffset=((this.options.bugWidth*this.zoom)-(this.options.bugHeight*this.zoom))/2;var zoomOffset=((this.options.bugHeight)/2)*(1-this.zoom);this.bug.style.bottom=Math.ceil((rotationOffset-zoomOffset))+'px';this.bug.style.left=this.bug.left+'px';this.bug.style.backgroundPosition='-'+((deathType*2)*this.options.bugWidth)+'px 100%';this.twitch(deathType);return;} this.dropTimer=requestAnimFrame(function(t){that.dropping(t,startPos,finalPos,rotationRate,deathType);});if(elapsedTime<20)return;this.angle_deg=((this.angle_deg+rotationRate)%360);this.angle_rad=this.deg2rad(this.angle_deg);this.moveBug(this.bug.left,newPos,this.angle_deg);},twitch:function(deathType,legPos){if(!legPos)legPos=0;var that=this;if(deathType===0||deathType===1){that.twitchTimer=setTimeout(function(){that.bug.style.backgroundPosition='-'+((deathType*2+(legPos%2))*that.options.bugWidth)+'px 100%';that.twitchTimer=setTimeout(function(){legPos++;that.bug.style.backgroundPosition='-'+((deathType*2+(legPos%2))*that.options.bugWidth)+'px 100%';that.twitch(deathType,++legPos);},that.random(300,800));},this.random(1000,10000));}},rad2deg:function(rad){return rad*this.rad2deg_k;},deg2rad:function(deg){return deg*this.deg2rad_k;},random:function(min,max,plusminus){if(min==max)return min;var result=Math.round(min-0.5+(Math.random()*(max-min+1)));if(plusminus)return Math.random()>0.5?result:-result;return result;},next_small_turn:function(){this.small_turn_counter=Math.round(Math.random()*10);},next_large_turn:function(){this.large_turn_counter=Math.round(Math.random()*40);},next_stationary:function(){this.toggle_stationary_counter=this.random(50,300);},bug_near_window_edge:function(){this.near_edge=0;if(this.bug.topdocument.documentElement.clientHeight-this.options.edge_resistance) this.near_edge|=this.NEAR_BOTTOM_EDGE;if(this.bug.leftdocument.documentElement.clientWidth-this.options.edge_resistance) this.near_edge|=this.NEAR_RIGHT_EDGE;return this.near_edge;},getPos:function(){if(this.inserted&&this.bug&&this.bug.style){return{'top':parseInt(this.bug.top,10),'left':parseInt(this.bug.left,10)};} return null;}};var SpawnBug=function(){var newBug={},prop;for(prop in Bug){if(Bug.hasOwnProperty(prop)){newBug[prop]=Bug[prop];}} return newBug;};var mergeOptions=function(obj1,obj2,clone){if(typeof(clone)=='undefined'){clone=true;} var newobj=(clone)?cloneOf(obj1):obj1;for(var key in obj2){if(obj2.hasOwnProperty(key)){newobj[key]=obj2[key];}} return newobj;};var cloneOf=function(obj){if(obj==null||typeof(obj)!='object') return obj;var temp=obj.constructor();for(var key in obj){if(obj.hasOwnProperty(key)){temp[key]=cloneOf(obj[key]);}} return temp;} window.requestAnimFrame=(function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(callback,element){window.setTimeout(callback,1000/60);};})();