// Three animated bats that circle the mouse cursor
//
// by Chris Laurel (claurel@shatters.net)

batImage = new Image();
batImage.src = "images/flybat.gif";

document.onmousemove = getMousePosition;
document.onmouseout = pauseBat;
document.write("<div id=\"animDiv1\" style=\"position:absolute\">");
document.write("<img name=\"pic1\"src=" + batImage.src + "></div>");
document.write("<div id=\"animDiv2\" style=\"position:absolute\">");
document.write("<img name=\"pic2\"src=" + batImage.src + "></div>");
document.write("<div id=\"animDiv3\" style=\"position:absolute\">");
document.write("<img name=\"pic3\"src=" + batImage.src + "></div>");

var updateInterval = 50;
var mouseX = 0;
var mouseY = 0;
var mouseOut = true;

var bat1 = new Object();
var bat2 = new Object();
var bat3 = new Object();

bat1.x = 20;
bat1.y = 100;
bat1.speed = 10;
bat1.attractTheta = 0;
bat1.attractRadius = 100;
bat1.circleCCW = true;
bat1.circleSpeed = 0.3;

bat2.x = 200;
bat2.y = 120;
bat2.speed = 13;
bat2.attractTheta = 3.14;
bat2.attractRadius = 200;
bat2.circleCCW = true;
bat2.circleSpeed = 0.2;

bat3.x = 150;
bat3.y = 320;
bat3.speed = 5;
bat3.attractTheta = 1.57;
bat3.attractRadius = 150;
bat3.circleCCW = false;
bat3.circleSpeed = 0.15;

myInterval = setInterval('moveBat()', updateInterval);

function pauseBat()
{
	mouseOut = true;
}

function getMousePosition(e)
{
	mouseX = window.event.x + document.body.scrollLeft;
	mouseY = window.event.y + document.body.scrollTop;
	mouseOut = false;
}

function updatePosition(b)
{
	targetX = mouseX + b.attractRadius * Math.cos(b.attractTheta);
	targetY = mouseY + b.attractRadius * Math.sin(b.attractTheta);

	dx = targetX - b.x;
	dy = targetY - b.y;
	distance = Math.sqrt(dx * dx + dy * dy);
	if (distance > 0)
	{
		b.x += dx / distance * b.speed;
		b.y += dy / distance * b.speed;
	}

	if (b.circleCCW == true)
		b.attractTheta += Math.random() * b.circleSpeed;
	else
		b.attractTheta -= Math.random() * b.circleSpeed;
	if (Math.random() < 0.04)
		b.circleCCW = !b.circleCCW;
}

function moveBat()
{
	if (!mouseOut)
	{
		updatePosition(bat1);
		updatePosition(bat2);
		updatePosition(bat3);
	}
	animDiv1.style.left = bat1.x - pic1.width / 2;
	animDiv1.style.top = bat1.y - pic1.height / 2;
	animDiv2.style.left = bat2.x - pic2.width / 2;
	animDiv2.style.top = bat2.y - pic2.height / 2;
	animDiv3.style.left = bat3.x - pic3.width / 2;
	animDiv3.style.top = bat3.y - pic3.height / 2;
}
