function init() {

var i = 0;

for (i = 0; i < nDots; i++) {

dots[i] = new dot(i);

}



if (!isNetscape) {

// I only know how to read the locations of the 

// <LI> items in IE

//skip this for now

// setInitPositions(dots)

}



// set their positions

for (i = 0; i < nDots; i++) {

dots[i].obj.left = dots[i].X;

dots[i].obj.top = dots[i].Y;

}



// if (isNetscape) {

// start right away since they are positioned

// at 0, 0

startanimate();

// } else {

// let dots sit there for a few seconds

// sincey they're hiding on the real bullets

//setTimeout("startanimate()", 3000);

//   }

//   }

}

   function dot(i) {

   this.X = Xpos;

   this.Y = Ypos;

   this.dx = 0;

   this.dy = 0;

   if (isNetscape) {

   this.obj = eval("document.dot" + i);

   } else {

   this.obj = eval("dot" + i + ".style");

      }

	  }



	  function startanimate() {

	  setInterval("animate()", 20);

	  }



	  // This is to line up the bullets with actual LI tags on the page

	  function setInitPositions(dots) {

	  // initialize dot positions to be on top 

	  // of the bullets in the <ul>

	  var startloc = document.all.tags("LI");

	  var i = 0;

	  for (i = 0; i < startloc.length && i < (nDots - 1); i++) {

	  dots[i+1].X = startloc[i].offsetLeft

	  startloc[i].offsetParent.offsetLeft - DOTSIZE;

	  dots[i+1].Y = startloc[i].offsetTop +

	  startloc[i].offsetParent.offsetTop + 2*DOTSIZE;

	  }

	  // put 0th dot above 1st (it is hidden)

	  dots[0].X = dots[1].X;

	  dots[0].Y = dots[1].Y - SEGLEN;

	  }



	  // just save mouse position for animate() to use

	  function MoveHandler(e)

	  {

	  Xpos = e.pageX;

	  Ypos = e.pageY;  

	  return true;

	  }



	  // just save mouse position for animate() to use

	  function MoveHandlerIE() {

	  Xpos = window.event.x;

	  Ypos = window.event.y;  

	  }



//	  if (isNetscape) {

//	  document.captureEvents(Event.MOUSEMOVE);

//	  document.onMouseMove = MoveHandler;

//	  } else {

	  document.onmousemove = MoveHandlerIE;

//	  }



	  function vec(X, Y) {

	  this.X = X;

	  this.Y = Y;

	  }



	  // adds force in X and Y to spring for dot[i] on dot[j]

	  function springForce(i, j, spring) {

	  var dx = (dots[i].X - dots[j].X);

	  var dy = (dots[i].Y - dots[j].Y);

	  var len = Math.sqrt(dx*dx + dy*dy);

	  if (len > SEGLEN) {

	  var springF = SPRINGK * (len - SEGLEN);

	  spring.X += (dx / len) * springF;

	  spring.Y += (dy / len) * springF;

	     }

		 }



		 function animate() {

		 // dots[0] follows the mouse,

		 // though no dot is drawn there

		 var start = 0;

		 if (followmouse) {

		 dots[0].X = Xpos;

		 dots[0].Y = Ypos;

		 start = 1;

		 }



		 for (i = start ; i < nDots; i++ ) {

		 var spring = new vec(0, 0);

		 if (i > 0) {

		 springForce(i-1, i, spring);

		 }

		 if (i < (nDots - 1)) {

		 springForce(i+1, i, spring);

		 }



		 // air resisitance/friction

		 var resist = new vec(-dots[i].dx * RESISTANCE, -dots[i].dy *
		 RESISTANCE);



		 // compute new accel, including gravity

		 var accel = new vec((spring.X + resist.X)/ MASS, (spring.Y +
		 resist.Y)/ MASS + GRAVITY);



		 // compute new velocity

		 dots[i].dx += (DELTAT * accel.X);

		 dots[i].dy += (DELTAT * accel.Y);



		 // stop dead so it doesn't jitter when nearly still

		 if (Math.abs(dots[i].dx) < STOPVEL &&

		 Math.abs(dots[i].dy) < STOPVEL &&

		 Math.abs(accel.X) < STOPACC &&

		 Math.abs(accel.Y) < STOPACC) {

		 dots[i].dx = 0;

		 dots[i].dy = 0;

		 }



		 // move to new position

		 dots[i].X += dots[i].dx;

		 dots[i].Y += dots[i].dy;



		 // get size of window

		 var height, width;

		 if (isNetscape) {

		 height = window.innerHeight;

		 width = window.innerWidth;

		 } else {

		 height = document.body.clientHeight;

		 width = document.body.clientWidth;

		 }



		 // bounce of 3 walls (leave ceiling open)

		 if (dots[i].Y >=  height - DOTSIZE - 1) {

		 if (dots[i].dy > 0) {

		 dots[i].dy = BOUNCE * -dots[i].dy;

		 }

		 dots[i].Y = height - DOTSIZE - 1;

		 }

		 if (dots[i].X >= width - DOTSIZE) {

		 if (dots[i].dx > 0) {

		 dots[i].dx = BOUNCE * -dots[i].dx;

		 }

		 dots[i].X = width - DOTSIZE - 1;

		 }

		 if (dots[i].X < 0) {

		 if (dots[i].dx < 0) {

		 dots[i].dx = BOUNCE * -dots[i].dx;

		 }

		 dots[i].X = 0;

		 }

		 // move img to new position

		 dots[i].obj.left = dots[i].X;

		 dots[i].obj.top =  dots[i].Y;

		 }

		 }

