var isNetscape = navigator.appName=="Netscape";

if (!isNetscape) {

	document.write('<div id="dot0" style="position:absolute; visibility:hidden; height:4; width:4;">');
	document.write('<img src="images/arrow.gif" height=4 width=4>');
	document.write('</div>');
	document.write('<div id="dot1" style="position:absolute; height:13; width:31;z-index:9999;">');
	document.write('<img src="images/smallfish.gif" >');
	document.write('</div>');
	document.write('<div id="dot2" style="position:absolute; height:12; width:23;z-index:9999;">');
	
	document.write('</div>');

	if (top.frames['mainFrame']) {var doc = top.frames['mainFrame'].document;}
	else {var doc = document;}

	var nDots = 3;

	var Xpos = 500;
	var Ypos = -50;

	// fixed time step, no relation to real time
	var DELTAT = .01;

	// size of one spring in pixels
	var SEGLEN = 15;

	// spring constant, stiffness of springs
	var SPRINGK = 5;

	// all the physics is bogus, just picked stuff to
	// make it look okay
	var MASS = 5;

	// Positive XGRAVITY pulls right, negative pulls left
	// Positive YGRAVITY pulls down, negative up
	var XGRAVITY = 20;
	var YGRAVITY = 10;

	// RESISTANCE determines a slowing force proportional to velocity
	var RESISTANCE = 25;

	// stopping criterea to prevent endless jittering
	// doesn't work when sitting on bottom since floor
	// doesn't push back so acceleration always as big
	// as gravity
	var STOPVEL = 0.1;
	var STOPACC = 0.1;
	var DOTSIZE = 35;

	// BOUNCE is percent of velocity retained when bouncing off a wall
	var BOUNCE = 0.75;

	// always on for now, could be played with to
	// let dots fall to botton, get thrown, etc.
	var followmouse = true;

	var dots = new Array();
	init();

	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
		// since they're hiding on the real bullets
		setTimeout("startanimate()", 100);
		}
	}

	function dot(i)
	{
		this.X = Xpos;
		this.Y = Ypos;
		this.dx = 0;
		this.dy = 0;
		if (isNetscape) {
		this.obj = eval("doc.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
	// Had to add -DOTSIZE to X and 2*DOTSIZE to Y for IE 5, not sure why
	// Still doesn't work great
	function setInitPositions(dots)
	{
		// initialize dot positions to be on top
		// of the bullets in the <ul>
		var startloc = doc.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 + doc.body.scrollLeft;
		Ypos = window.event.y + doc.body.scrollTop;
	}

	if (isNetscape) {
		doc.captureEvents(Event.MOUSEMOVE);
		doc.onMouseMove = MoveHandler;
	} else {
		doc.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 + XGRAVITY,
			(spring.Y + resist.Y)/ MASS + YGRAVITY);

			// 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 + window.pageYOffset;
				width = window.innerWidth + window.pageXOffset;
			} else {
				height = doc.body.clientHeight + doc.body.scrollTop;
				width = doc.body.clientWidth + doc.body.scrollLeft;
			}

			// bounce off walls
			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].Y < 0) {
				if (dots[i].dy < 0) {
					dots[i].dy = BOUNCE * -dots[i].dy;
				}
				dots[i].Y = 0;
			}
			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;
		}
	}
}
