var PI=Math.PI,PI_180=PI,PI_360=PI*2,PI_90=PI/2,PI_45=PI/4,PI_270=PI_360-PI_90,RAD=PI/180,FPS=0,FPS_string="";function vSet(a,b,c){a.x=b;a.y=c}function vSetv(a,b){a.x=b.x;a.y=b.y}function vAdd(a,b,c){c==0?(a.x+=b.x,a.y+=b.y):(c.x=a.x+b.x,c.y=a.y+b.y)}function vSub(a,b,c){c==0?(a.x-=b.x,a.y-=b.y):(c.x=a.x-b.x,c.y=a.y-b.y)}function vMul(a,b,c){c==0?(a.x*=b.x,a.y*=b.y):(c.x=a.x*b.x,c.y=a.y*b.y)}function vInvert(a){a.x*=-1;a.y*=-1}function vGetLength(a){return Math.sqrt(a.x*a.x+a.y*a.y)} function vNorm(a){var b;b=Math.sqrt(a.x*a.x+a.y*a.y);a.x/=b;a.y/=b}function vSetLength(a,b){var c;c=Math.sqrt(a.x*a.x+a.y*a.y);a.x/=c;a.y/=c;a.x*=b;a.y*=b}function vGetAngle(a){var b;b=Math.sqrt(a.x*a.x+a.y*a.y);if(a.x<=0&&a.y<=0)return(Math.acos(a.y/b)+PI_90)/RAD;else if(a.x>0&&a.y<=0)return(PI_360-Math.acos(a.x/b))/RAD;else if(a.x<=0&&a.y>0)return(Math.acos(a.y/b)+PI_90)/RAD;else if(a.x>0&&a.y>0)return Math.acos(a.x/b)/RAD} function vSetAngle(a,b){var c;b*=RAD;c=Math.sqrt(a.x*a.x+a.y*a.y);a.x=Math.cos(b)*c;a.y=Math.sin(b)*c}var fps=30,redraw=1,canvas,context,interval,Rects=[];$.getDocHeight=function(){return Math.max($(document).height(),$(window).height(),document.documentElement.clientHeight)};function GetRandom(a,b){return a>b?-1:a==b?a:a+parseInt(Math.random()*(b-a+1),10)} function click(){redraw=1;for(var a=0;a<Rects.length;a++)if(Rects[a].Mode=="implosion"){Rects[a].Mode="explosion";Rects[a].Done=0;$(Rects[a].Element).css("border-style","solid");$(Rects[a].Element).css("border-width","1px");$(Rects[a].Element).css("border-color","transparent");for(var b=0;b<Rects[a].Lines.length;b++){Rects[a].Lines[b].Dest.Center={x:GetRandom(0,window.innerWidth),y:GetRandom(0,window.innerHeight)};Rects[a].Lines[b].Dest.Angle=GetRandom(0,359);calcStartEnd(Rects[a].Lines[b].Dest); Rects[a].Lines[b].Step={x:0,y:0};Rects[a].Lines[b].AngleStep=0;Rects[a].Lines[b].Steps=fps*(Rects[a].Lines[b].Duration/4)/1E3;Rects[a].Lines[b].Counter=0;Rects[a].Lines[b].Done=0;var c={x:0,y:0};vSub(Rects[a].Lines[b].Dest.Center,Rects[a].Lines[b].Pos.Center,c);vSetLength(c,vGetLength(c)/Rects[a].Lines[b].Steps);vSetv(Rects[a].Lines[b].Step,c);Rects[a].Lines[b].AngleStep=(Rects[a].Lines[b].Dest.Angle-Rects[a].Lines[b].Pos.Angle+360)/Rects[a].Lines[b].Steps}}else{Rects[a].Mode="implosion";Rects[a].Done= 0;var c=$(Rects[a].Element).position(),b=c.left,c=c.top,e=$(Rects[a].Element).outerWidth(true),f=$(Rects[a].Element).outerHeight(true);Rects[a].Lines[0].Pos.Start.x=b;Rects[a].Lines[0].Pos.Start.y=c;Rects[a].Lines[0].Pos.End.x=b+e;Rects[a].Lines[0].Pos.End.y=c;Rects[a].Lines[1].Pos.Start.x=b+e;Rects[a].Lines[1].Pos.Start.y=c;Rects[a].Lines[1].Pos.End.x=b+e;Rects[a].Lines[1].Pos.End.y=c+f;Rects[a].Lines[2].Pos.Start.x=b+e;Rects[a].Lines[2].Pos.Start.y=c+f;Rects[a].Lines[2].Pos.End.x=b;Rects[a].Lines[2].Pos.End.y= c+f;Rects[a].Lines[3].Pos.Start.x=b;Rects[a].Lines[3].Pos.Start.y=c+f;Rects[a].Lines[3].Pos.End.x=b;Rects[a].Lines[3].Pos.End.y=c;for(b=0;b<Rects[a].Lines.length;b++)Rects[a].Lines[b].Pos.Center={x:0,y:0},Rects[a].Lines[b].Pos.Angle=0,Rects[a].Lines[b].Pos.Radius=0,calcCenter(Rects[a].Lines[b].Pos),Rects[a].Lines[b].Dest.Start=Rects[a].Lines[b].Pos.Start,Rects[a].Lines[b].Dest.End=Rects[a].Lines[b].Pos.End,Rects[a].Lines[b].Dest.Center=Rects[a].Lines[b].Pos.Center,Rects[a].Lines[b].Dest.Angle=Rects[a].Lines[b].Pos.Angle, Rects[a].Lines[b].Dest.Radius=Rects[a].Lines[b].Pos.Radius,Rects[a].Lines[b].Pos.Center=Rects[a].Lines[b].PrevCenter,Rects[a].Lines[b].Pos.Angle=Rects[a].Lines[b].PrevAngle,calcStartEnd(Rects[a].Lines[b].Pos),Rects[a].Lines[b].Step={x:0,y:0},Rects[a].Lines[b].AngleStep=0,Rects[a].Lines[b].Steps=fps*Rects[a].Lines[b].Duration/1E3,Rects[a].Lines[b].Counter=0,Rects[a].Lines[b].Done=0,c={x:0,y:0},vSub(Rects[a].Lines[b].Dest.Center,Rects[a].Lines[b].Pos.Center,c),vSetLength(c,vGetLength(c)/Rects[a].Lines[b].Steps), vSetv(Rects[a].Lines[b].Step,c),Rects[a].Lines[b].AngleStep=(Rects[a].Lines[b].Dest.Angle-Rects[a].Lines[b].Pos.Angle)/Rects[a].Lines[b].Steps}}function calcCenter(a){var b={x:0,y:0};vSub(a.End,a.Start,b);a.Angle=vGetAngle(b);a.Radius=vGetLength(b)/2;vSetLength(b,a.Radius);vAdd(a.Start,b,a.Center)}function calcStartEnd(a){var b={x:1E4,y:1E4};vSetLength(b,a.Radius);vSetAngle(b,a.Angle);vSub(a.Center,b,a.Start);vAdd(a.Center,b,a.End)} function addLine(a,b,c,e,f,h){var d=a.Lines.length;a.Lines[d]={};a.Lines[d].Pos={};a.Lines[d].Pos.Start={};a.Lines[d].Pos.End={};a.Lines[d].Pos.Center={};a.Lines[d].Pos.Angle={};a.Lines[d].Pos.Radius={};a.Lines[d].Dest={};a.Lines[d].Dest.Start={};a.Lines[d].Dest.End={};a.Lines[d].Dest.Center={};a.Lines[d].Dest.Angle={};a.Lines[d].Dest.Radius={};a.Lines[d].PrevCenter={};a.Lines[d].PrevAngle={};a.Lines[d].PrevCenter={x:0,y:0};a.Lines[d].PrevAngle={x:0,y:0};a.Lines[d].Pos.Start={x:b,y:c};a.Lines[d].Pos.End= {x:e,y:f};a.Lines[d].Pos.Center={x:0,y:0};a.Lines[d].Pos.Angle=0;a.Lines[d].Pos.Radius=0;calcCenter(a.Lines[d].Pos);a.Lines[d].Dest.Start=a.Lines[d].Pos.Start;a.Lines[d].Dest.End=a.Lines[d].Pos.End;a.Lines[d].Dest.Center=a.Lines[d].Pos.Center;a.Lines[d].Dest.Angle=a.Lines[d].Pos.Angle;a.Lines[d].Dest.Radius=a.Lines[d].Pos.Radius;a.Lines[d].Pos.Center={x:GetRandom(0,window.innerWidth),y:GetRandom(0,window.innerHeight)};a.Lines[d].Pos.Angle=GetRandom(0,359);calcStartEnd(a.Lines[d].Pos);a.Lines[d].PrevCenter= a.Lines[d].Pos.Center;a.Lines[d].PrevAngle=a.Lines[d].Pos.Angle;a.Lines[d].Step={x:0,y:0};a.Lines[d].AngleStep=0;a.Lines[d].Duration=h;a.Lines[d].Steps=fps*a.Lines[d].Duration/1E3;a.Lines[d].Counter=0;a.Lines[d].Done=0;b={x:0,y:0};vSub(a.Lines[d].Dest.Center,a.Lines[d].Pos.Center,b);vSetLength(b,vGetLength(b)/a.Lines[d].Steps);vSetv(a.Lines[d].Step,b);a.Lines[d].AngleStep=(a.Lines[d].Dest.Angle-a.Lines[d].Pos.Angle)/a.Lines[d].Steps} function createRect(a,b,c,e,f,h,d,i){var g=Rects.length;Rects[g]={};Rects[g].Lines=[];Rects[g].Element=f;Rects[g].Mode=h;Rects[g].Duration=d;Rects[g].FadeIn=i;Rects[g].HTML=$(Rects[g].Element).html();Rects[g].Done=0;addLine(Rects[g],a,b,a+c,b,d);addLine(Rects[g],a+c,b,a+c,b+e,d);addLine(Rects[g],a+c,b+e,a,b+e,d);addLine(Rects[g],a,b+e,a,b,d)} function drawLine(a){a.Counter<a.Steps?(vAdd(a.Pos.Center,a.Step,0),a.Counter++,a.Pos.Angle+=a.AngleStep,calcStartEnd(a.Pos)):(a.Done=1,a.Pos.Start=a.Dest.Start,a.Pos.End=a.Dest.End,a.Pos.Center=a.Dest.Center,a.Pos.Angle=a.Dest.Angle,a.Pos.Radius=a.Dest.Radius);a.PrevCenter=a.Pos.Center;a.PrevAngle=a.Pos.Angle;a.Pos.Start.x=~~(a.Pos.Start.x+0.5);a.Pos.Start.y=~~(a.Pos.Start.y+0.5);a.Pos.End.x=~~(a.Pos.End.x+0.5);a.Pos.End.y=~~(a.Pos.End.y+0.5);context.moveTo(a.Pos.Start.x,a.Pos.Start.y);context.lineTo(a.Pos.End.x, a.Pos.End.y)} function drawRect(a){if(a.Mode=="implosion"){var b=$(a.Element).position(),c=b.left,b=b.top,e=$(a.Element).outerWidth(true),f=$(a.Element).outerHeight(true);a.Lines[0].Dest.Start.x=c;a.Lines[0].Dest.Start.y=b;a.Lines[0].Dest.End.x=c+e;a.Lines[0].Dest.End.y=b;a.Lines[1].Dest.Start.x=c+e;a.Lines[1].Dest.Start.y=b;a.Lines[1].Dest.End.x=c+e;a.Lines[1].Dest.End.y=b+f;a.Lines[2].Dest.Start.x=c+e;a.Lines[2].Dest.Start.y=b+f;a.Lines[2].Dest.End.x=c;a.Lines[2].Dest.End.y=b+f;a.Lines[3].Dest.Start.x=c;a.Lines[3].Dest.Start.y= b+f;a.Lines[3].Dest.End.x=c;a.Lines[3].Dest.End.y=b}for(c=0;c<a.Lines.length;c++)drawLine(a.Lines[c]);if(a.Done==0&&a.Lines[3].Done==1&&(a.Done=1,a.FadeIn>0))$(a.Element).css("visibility","visible"),$(a.Element).fadeOut(1),$(a.Element).fadeIn(a.FadeIn),a.FadeIn=0} function clearAll(){context.clearRect(0,0,canvas.width,canvas.height);for(var a=0;a<Rects.length;a++)$(Rects[a].Element).css("border-style","solid"),$(Rects[a].Element).css("border-width","1px"),$(Rects[a].Element).css("border-color","#b22")} function drawRects(){var a=1;context.beginPath();for(var b=0;b<Rects.length;b++)drawRect(Rects[b]),Rects[b].Done==0&&(a=0);context.closePath();context.lineWidth=1;context.strokeStyle="#f00";context.stroke();a==1&&(redraw=0,Rects[0].Mode=="implosion"&&setTimeout("clearAll()",100))}function fpss(){FPS_string=FPS.toString();FPS=0}function draw(){if(redraw==1)canvas.width=window.innerWidth,canvas.height=$.getDocHeight(),context.clearRect(0,0,canvas.width,canvas.height),drawRects()} $(document).ready(function(){navigator.userAgent.indexOf("Linux")>-1?$("[implosion]").each(function(){$(this).css("border-style","solid");$(this).css("border-width","1px");$(this).css("border-color","#b22")}):(canvas=document.getElementById("cnvs"),context=canvas.getContext("2d"),interval=setInterval("draw()",1E3/fps),document.addEventListener("click",click,false),$("[implosion]").each(function(){var a=$(this).position(),b=a.left,a=a.top,c=$(this).outerWidth(true),e=$(this).outerHeight(true),f=$(this).attr("implosion"), h=$(this).attr("fadein");createRect(b,a,c,e,$(this),"implosion",f,h);h>0&&($(this).css("visibility","hidden"),$(this).fadeOut(1));$(this).css("border-style","solid");$(this).css("border-width","1px");$(this).css("border-color","transparent")}),$("#FSK18").hover(function(){$(this).addClass("hover").stop().animate({width:"500px"},330)},function(){$(this).removeClass("hover").stop().animate({width:"50px"},330)}))});
