//merci evolve
message=new String("............................");
var np=80;
var pi=Math.PI;
var db=document.body;
var phase=0;t=0;
var cx=480;
var cy=302;
var dotsWide=13;
var dotsHigh=message.length;
var dotSep=10;
//viewpoint distance from screen
var vp=850;

var dots=new Array();

function init(){
  var i;
  for(i=0;i<dotsHigh;i++){
    for(j=0;j<dotsWide;j++){
      dots[i*dotsWide+j]=new dot(i,j);
    }
  }
  dots.sort(dot_compare);
  for(i in dots)dots[i].n=i;
  setInterval("anim();",25);
}

function anim(){
  var i,f1,f2;
  t++;
  for(i in dots)dots[i].anim();
}

function fnX(){
  return(600*Math.sin((t-5*this.i)/20));
}
function fnY(){
  return(600*Math.cos((t-6*this.i)/25));
}
function fnZ(){
  return(800*this.j);
}

function dot_compare(a,b){
  var r=(b.i)*(b.i)+(b.j)*(b.j)-(a.i)*(a.i)-(a.j)*(a.j);
  if(Math.abs(r)<=0.1)r=Math.atan2(a.i,a.j)-Math.atan2(b.i,b.j);
  return(r)
}

function dot_anim(){
  var pf;
  this.x=this.fnX();
  this.y=this.fnY();
  this.z=this.fnZ();
  pf=vp/(vp-this.z);
  this.ss.posLeft=cx+pf*this.x;
  this.ss.posTop=cy+pf*this.y;
}

function dot(i,j){
  this.n=-1;
  this.i=i-(dotsWide-1)/2;
  this.j=j-(dotsHigh-1)/2;
  this.x=0;
  this.y=0;
  this.z=0;
  db.insertAdjacentHTML("AfterBegin","<span class=dot style='font-size:"+(5+2*j)+";'>"+(message.charAt(i))+"</span>")
  this.ss=db.all.tags("span")[0].style;
  this.fnX=fnX;
  this.fnY=fnY;
  this.fnZ=fnZ;
  if(j==dotsWide-1){this.ss.color="#ffffff";this.ss.fontWeight="normal"}
  this.anim=dot_anim;
}


