function Creeper(div,angle,minspeed,maxspeed){
  this.div     =div;
  this.width   =getDivWidth (div);
  this.height  =getDivHeight(div);
  this.minspeed=minspeed;
  this.maxspeed=maxspeed;
  this.angle   =angle;

  var rad = (angle%360)*Math.PI/180;
  var speed = (maxspeed-minspeed)*Math.random()+minspeed;
  this.speedx =  speed*Math.cos(rad);
  this.speedy = -speed*Math.sin(rad);
}
ww = 0; wh = 0;
creepers = new Array();
cId = null;
pnl = null; pnlOffsetX = 0; pnlOffsetY = 0;
pnlx = 0; pnly = 0; pnlw = 0; pnlh = 0;
wx1 = 0; wx2 = 0; wy1 = 0; wy2 = 0;
interval = 50;
function creepManager(){
  wx1=getWinXOffset(); wx2=wx1+ww;
  wy1=getWinYOffset(); wy2=wy1+wh;
  if(pnlx<=wx1 || (pnlx+pnlw)>=wx2 || pnly<=wy1 || (pnly+pnlh)>=wy2){
    pnlx=wx1+pnlOffsetX; pnly=wy1+pnlOffsetY;
    moveDivTo(pnl,pnlx,pnly);
  }
  for(var i=0; i<creepers.length; i++){
    var creeper=creepers[i];
    var div=creeper.div;
    moveDivBy(div,creeper.speedx,creeper.speedy);
    var x=getDivLeft(div),y=getDivTop(div);
    var calc=false;
    if(x<=wx1){
      if(y<=wy1){
        if(creeper.angle<=270){
          creeper.angle=90*Math.random()+270; calc=true;
        }
      } else if((y+creeper.height)>=wy2){
        if(creeper.angle>=90){
          creeper.angle=90*Math.random(); calc=true;
        }
      } else {
        if(creeper.angle>=90 && creeper.angle<=270){
          creeper.angle=180*Math.random()+270; calc=true;
        }
      }
    } else if((x+creeper.width)>=wx2){
      if(y<=wy1){
        if(creeper.angle<=180 || creeper.angle>=270){
          creeper.angle=90*Math.random()+180; calc=true;
        }
      } else if((y+creeper.height)>=wy2){
        if(creeper.angle<=90 || creeper.angle>=180){
          creeper.angle=90*Math.random()+90; calc=true;
        }
      } else {
        if(creeper.angle<=90 || creeper.angle>=270){
          creeper.angle=180*Math.random()+90; calc=true;
        }
      }
    } else {
      if(y<=wy1){
        if(creeper.angle<=180){
          creeper.angle=180*Math.random()+180; calc=true;
        }
      } else if((y+creeper.height)>=wy2){
        if(creeper.angle>=180){
          creeper.angle=180*Math.random(); calc=true;
        }
      }
    }
    if(calc){
      creeper.angle%=360;
      var rad = (creeper.angle%360)*Math.PI/180;
      var speed = (creeper.maxspeed-creeper.minspeed)*Math.random()+creeper.minspeed;
      creeper.speedx =  speed*Math.cos(rad);
      creeper.speedy = -speed*Math.sin(rad);
    }
  }
  cId=setTimeout('creepManager()',interval);
}
function createCreeper(x,y,sz,col,min,max,chr){
  var div=createLayer(x,y,sz+3,sz+3);
  writeDivHTML(div,true,true,'<font class="bl'+sz+'" color="'+col+'">'+chr+'</font>');
  return new Creeper(div,360*Math.random(),min,max);;
}
function init(){
  ww = getWindowWidth(); wh =getWindowHeight();
  wx1=getWinXOffset(); wx2=wx1+ww;
  wy1=getWinYOffset(); wy2=wy1+wh;
  var x=ww/2, y=wh/2;
  creepers[creepers.length]=createCreeper(x-12,y-12,24,'#FFB6C1',5,20,'');
  creepers[creepers.length]=createCreeper(x-12,y-12,24,'#FFD700',5,20,'');
  creepers[creepers.length]=createCreeper(x-12,y-12,24,'#DDA0DD',5,20,'');
  creepers[creepers.length]=createCreeper(x- 6,y- 6,12,'#00ffff',5,15,'');
  creepers[creepers.length]=createCreeper(x- 6,y- 6,12,'#ff00ff',5,15,'');
  creepers[creepers.length]=createCreeper(x- 6,y- 6,12,'#ffff00',5,15,'');
  creepers[creepers.length]=createCreeper(x-12,y-12,10,'#ffc100',5,20,'');
  creepers[creepers.length]=createCreeper(x-12,y-12,12,'pink',5,20,'');
  creepers[creepers.length]=createCreeper(x-12,y-12,12,'#ff0080',5,20,'');
  creepers[creepers.length]=createCreeper(x-12,y-12,12,'#c0c54d',5,20,'');
  creepers[creepers.length]=createCreeper(x-12,y-12,12,'#90F4F4',5,20,'');
  creepers[creepers.length]=createCreeper(x-12,y-12,12,'#688d7a',5,20,'');
  creepers[creepers.length]=createCreeper(x-12,y-12,12,'#7f4ab5',5,20,'');
  creepers[creepers.length]=createCreeper(x-12,y-12,12,'#ff0080',5,20,'');
  creepers[creepers.length]=createCreeper(x-12,y-12,24,'#FFE4E1',5,20,'');
  creepers[creepers.length]=createCreeper(x-12,y-12,24,'#87CEEB',5,20,'');
  creepers[creepers.length]=createCreeper(x-12,y-12,24,'pink',5,20,'');
  creepers[creepers.length]=createCreeper(x-12,y-12,24,'#85E5E1',5,20,'');
  creepers[creepers.length]=createCreeper(x-12,y-12,24,'#8af1ee',5,20,'');
  creepers[creepers.length]=createCreeper(x-12,y-12,24,'#b0f6c0',5,20,'');
  creepers[creepers.length]=createCreeper(x-12,y-12,24,'#fbe7ca',5,20,'');
  creepers[creepers.length]=createCreeper(x-12,y-12,24,'#ef8587',5,20,'');
  creepers[creepers.length]=createCreeper(x-12,y-12,24,'#e5c6aa',5,20,'');
  creepers[creepers.length]=createCreeper(x-12,y-12,24,'#ff0000',5,20,'');
  creepers[creepers.length]=createCreeper(x-12,y-12,24,'pink',5,20,'');
  creepers[creepers.length]=createCreeper(x- 6,y- 6,12,'#90F4F4',5,15,'');
  creepers[creepers.length]=createCreeper(x- 6,y- 6,12,'pink',5,15,'');
  creepers[creepers.length]=createCreeper(x- 6,y- 6,12,'pink',5,15,'');
  creepers[creepers.length]=createCreeper(x- 6,y- 6,12,'#ff8000',5,15,'');
  creepers[creepers.length]=createCreeper(x- 6,y- 6,12,'#ffc100',5,15,'');
  creepers[creepers.length]=createCreeper(x- 6,y- 6,12,'#bf60bf',5,15,'');
  creepers[creepers.length]=createCreeper(x- 6,y- 6,12,'#80b280',5,15,'');
  creepers[creepers.length]=createCreeper(x- 6,y- 6,12,'#ffffff',5,15,'');
  creepers[creepers.length]=createCreeper(x- 5,y- 5,10,'pink',5,10,'');
  creepers[creepers.length]=createCreeper(x- 5,y- 5,10,'pink',5,10,'');
  creepers[creepers.length]=createCreeper(x- 5,y- 5,10,'#bf60bf',5,10,'');
  creepers[creepers.length]=createCreeper(x- 5,y- 5,10,'#80bfff',5,10,'');
  creepers[creepers.length]=createCreeper(x- 5,y- 5,10,'#80b280',5,10,'');
  creepers[creepers.length]=createCreeper(x- 5,y- 5,10,'#a000e5',5, 8,'');
  creepers[creepers.length]=createCreeper(x- 5,y- 5,9,'pink',5, 8,'');
  creepers[creepers.length]=createCreeper(x- 5,y- 5,9,'pink',5, 8,'');
  creepers[creepers.length]=createCreeper(x- 5,y- 5,9,'#ffc100',5, 8,'');
  creepers[creepers.length]=createCreeper(x- 5,y- 5,9,'#ff8000',3,30,'');
  creepers[creepers.length]=createCreeper(x- 5,y- 5,9,'#80bfff',5, 8,'');
  creepers[creepers.length]=createCreeper(x- 5,y- 5,9,'#a000e5',3,30,'');
  creepers[creepers.length]=createCreeper(x- 5,y- 5,9,'#ff0000',3,30,'');
  creepers[creepers.length]=createCreeper(x- 5,y- 5,10,'#ffffff',3,30,'');
  pnl=getDivFromName('ctrl');
  initDivPos(pnl); initDivSize(pnl);
  pnlw = getDivWidth(pnl); pnlh = getDivHeight(pnl);
  pnlOffsetX=(ww-pnlw)/2; pnlOffsetY=getDivTop(pnl);
  pnlx = pnlOffsetX; pnly = pnlOffsetY;
  moveDivTo(pnl,pnlOffsetX,pnlOffsetY);
  setDivVisibility(pnl,true);
  for(var i=0; i<creepers.length; i++) setDivVisibility(creepers[i].div,true);
  cId=setTimeout('creepManager()',interval);
}
function cancel(){
  if(cId){ clearTimeout(cId); cId=null; }
}
