var count = 0;
var mouseX = 0;
var mouseY = 0;
var degToRad = 0.01745329251994329;

var imgs;
imgs = new Array();

var body;

imgs[0] = new Image();
imgs[0].src = "images/bee0.gif";
imgs[1] = new Image();
imgs[1].src = "images/bee1.gif";
imgs[2] = new Image();
imgs[2].src = "images/bee2.gif";
imgs[3] = new Image();
imgs[3].src = "images/bee3.gif";
imgs[4] = new Image();
imgs[4].src = "images/bee4.gif";
imgs[5] = new Image();
imgs[5].src = "images/bee5.gif";
imgs[6] = new Image();
imgs[6].src = "images/bee6.gif";
imgs[7] = new Image();
imgs[7].src = "images/bee7.gif";
imgs[8] = new Image();
imgs[8].src = "images/bee8.gif";

var ie = (document.all)?true:false;

var bees = new Array();
var hive;

function Hive(elParent, dx, dy) {
	this.dx = dx;
	this.dy = dy;
	this.id = "hive";
	this.dhtml = "<img src=\"images/hive.gif\" width=\"40px\" height=\"50px\" style=\"position: absolute; left: " +
								(dx-18) + "px; top: " + (dy-35) + "px; border: 0px; cursor: pointer;\" onclick=\"hive.spawnBee()\">";

	this.newElement = document.createElement('div');
	this.newElement.setAttribute('id', this.id);
	this.newElement.innerHTML = this.dhtml;
	elParent.appendChild(this.newElement);
}

function Bee(elPar, dx, dy) {
	this.dx = dx;
	this.dy = dy;
	this.vx = Math.random()*20-10;
	this.vy = Math.random()*20-10;
	this.ax = 0;
	this.ay = 0;
	this.speed = Math.random()*70;
	this.counter = 0;
	this.goHome = false;
	this.isActive = true;

	this.id = "bee" + count;
	count = count + 1;
	this.dhtml = "<img src= \"images/bee0.gif\" width=\"20px\" height=\"20px\" id=\"" + this.id +
								"\" style=\"position: absolute; left: " +	(dx-10) + "px; top: " + (dy-10) + "px; visibility: visible; z-index: 300;\">";

	this.divElement = document.createElement('div');
	this.divElement.innerHTML = this.dhtml;
	elPar.appendChild(this.divElement);

	this.newElement = getElement(this.id);
}
Bee.prototype.terminate = function() {
	this.isActive = false;
	this.divElement.parentNode.removeChild(this.divElement);
}
Bee.prototype.update = function() {
	var dist;
	var el = this.newElement;
	var len = Math.sqrt((this.vx*this.vx)+(this.vy*this.vy));
	var normX = this.vx/len;
	var normY = this.vy/len;

	if (this.goHome) {
		dist = Math.sqrt(((hive.dx-this.dx)*(hive.dx-this.dx))+((hive.dy-this.dy)*(hive.dy-this.dy)));
	
		this.ax = (hive.dx-this.dx)/(100+this.speed);
		this.ay = (hive.dy-this.dy)/(100+this.speed);
		
		if (dist < 10)
			this.terminate();
	}
	else {
		this.ax = (mouseX-this.dx-this.divElement.style.left)/(100+this.speed);
		this.ay = (mouseY-this.dy-this.divElement.style.top)/(100+this.speed);
	}

	this.vx += this.ax + (Math.random()-0.5);
	this.vy += this.ay + (Math.random()-0.5);
	
	this.vx *= 0.97;
	this.vy *= 0.97;

	this.dx += this.vx;
	this.dy += this.vy;

	this.newElement.style.left = (this.dx-10) + "px";
	this.newElement.style.top = (this.dy-10) + "px";
	
	if (normY > 0) {
		if (Math.acos(normX)/degToRad < 22.5)
			el.src = imgs[0].src;
		else if (Math.acos(normX)/degToRad < 67.5)
			el.src = imgs[6].src;
		else if (Math.acos(normX)/degToRad < 112.5)
			el.src = imgs[1].src;
		else if (Math.acos(normX)/degToRad < 157.5)
			el.src = imgs[4].src;
		else
			el.src = imgs[2].src;
	}
	else {
		if (Math.acos(normX)/degToRad < 22.5)
			el.src = imgs[0].src;
		else if (Math.acos(normX)/degToRad < 67.5)
			el.src = imgs[5].src;
		else if (Math.acos(normX)/degToRad < 112.5)
			el.src = imgs[3].src;
		else if (Math.acos(normX)/degToRad < 157.5)
			el.src = imgs[7].src;
		else
			el.src = imgs[2].src;
	}
	
	this.counter += 50;
	
	if (this.counter >= 10000) {
		this.goHome = true;
	}
}

Hive.prototype.spawnBee = function() {
	bees[bees.length] = new Bee(this.newElement.parentNode, hive.dx, hive.dy);
	bees[bees.length] = new Bee(this.newElement.parentNode, hive.dx, hive.dy);
	bees[bees.length] = new Bee(this.newElement.parentNode, hive.dx, hive.dy);
	bees[bees.length] = new Bee(this.newElement.parentNode, hive.dx, hive.dy);
	bees[bees.length] = new Bee(this.newElement.parentNode, hive.dx, hive.dy);
}

function update() {
	var bee;
	for (var i=0; i<bees.length; i++)
	{
		bee = bees[i];
		
		if (bee.isActive)
			bee.update();
		else {
			if (bees.length > 1)
				bees[i] = bees[bees.length-1];

			bees[bees.length-1] = null;
			bees.length = bees.length-1;
			delete bee;
		}
	}
	setTimeout('update()', 50);
}

function initBees() {
	body = getBody();

	if (!ie)
		document.captureEvents(Event.MOUSEMOVE);
	document.onmousemove = updateMousePos;
	
	hive = new Hive(getElement("container"), 302, 570);
	update();
}

function updateMousePos(e) {
	var ox = getElement("container").offsetLeft;
	var oy = getElement("container").offsetTop;
	
	if (ie) {
		mouseX = event.clientX + getScrollX() - ox;
		mouseY = event.clientY + getScrollY() - oy;
	}
	else {
		mouseX = e.pageX - ox;
		mouseY = e.pageY - oy;
	}
	return true;
}