var	COMPLIANT	= (window.Event)?	true: false;

/************************************************
**  BUMBLE
************************************************/
var mousePosition	= new Array(0,0);
var bumbles		= new Array();
var buttons		= new Array();
var num			= 5;

function init() {
	initMouse();

	for (var i = 0; i < num; i++) {
		if (COMPLIANT) {
			bumbles.push(new Bumble(0.25 + 0.5 * Math.random(), 0.25 + 0.25 * Math.random(), (num-i), 1/(i+1) ));
		} else {
			bumbles[bumbles.length] = new Bumble(0.25 + 0.5 * Math.random(), 0.25 + 0.25 * Math.random(), (num-i), 1/(i+1) );
		}
	}


	for (var i = 0; i < bumbles.length; i++) {
		bumbles[i].init();
	}


	addButton('button_enter');	

	move();
}

function initMouse () {
	if (COMPLIANT) {
		document.captureEvents(Event.MOUSEMOVE)
		document.onmousemove = mouseEvent;
	} else {
		document.onmousemove = mouseEvent;
	}
}

function addButton(idString) {
	if (COMPLIANT) {
		buttons.push(new Button(idString));
	} else {
		buttons[buttons.length] = new Button(idString);
	}
	buttons[buttons.length - 1].init();
}


var moveActive = false;
function move() {
	if (moveActive) return;
	moveActive = true;
	setTimeout('move()', 1000/60);

	for (var i = 0; i < bumbles.length; i++) {
		bumbles[i].move();
	}

	for (var i = 0; i < buttons.length; i++) {
		buttons[i].move();
	}

	moveActive = false;
}

function Bumble (x, y, z, s) {
	var element		= document.createElement("DIV");
	element.className	= "bumble";
	var coord		= new Array(x, y, z);
	var scale		= s;
	var origin		= new Array((293.0 * scale) / 2.0, (202.0 * scale) / 2.0);
	var coord_scale		= 5.0 * scale;
	var coord_offset	= 2.5 * scale;

	this.init	= init;
	this.move	= move;

	function init() {
		element.style.zIndex	= z;
		element.style.width	= 293.0 * scale;
		element.style.height	= 202.0 * scale;


		element.innerHTML	= "<IMG SRC='bee.png' WIDTH=100% HEIGHT=100%>";
		document.body.appendChild(element);
	}

	function move () {
		if (COMPLIANT) {
			element.style.left	= window.innerWidth * coord[0] - origin[0] + (Math.random() * coord_scale) - coord_offset;
			element.style.top	= window.innerHeight * coord[1] - origin[1] + (Math.random() * coord_scale) - coord_offset;
		} else {
			element.style.left	= document.body.offsetWidth * coord[0] - origin[0] + (Math.random() * coord_scale) - coord_offset;
			element.style.top	= document.body.offsetHeight * coord[1] - origin[1] + (Math.random() * coord_scale) - coord_offset;
		}
	}
}

function Button (idString) {
	var buttonElement	= document.getElementById(idString);
	buttonElement.className	= "button";
	var buttonSize		= new Array(202.0, 151.0);
	var buttonOrigin	= new Array(buttonSize[0] / 2.0, buttonSize[1] / 2.0);
	var buttonCoord		= new Array(0, 0, 0);

	var shadowElement	= document.createElement("DIV");
	shadowElement.className	= "shadow";
	var shadowSize		= new Array(216.0, 165.0);
	var shadowOrigin	= new Array(shadowSize[0] / 2.0, shadowSize[1] / 2.0);
	var shadowCoord		= new Array(0, 0, 0);

	this.init	= init;
	this.move	= move;

	function init() {
		var windowSize	= getWindowSize();
		var origin	= new Array(windowSize[0] / 2.0, 2.0 * windowSize[1] / 3.0);

		shadowElement.innerHTML	= "<IMG SRC='shadow.png'>";
		shadowElement.style.position = 'absolute';
		shadowElement.style.zIndex = 999;
		document.body.appendChild(shadowElement);

		this.move();
	}

	function move () {
		var windowSize	= getWindowSize();
		var origin	= new Array(windowSize[0] / 2.0, 3.0 * windowSize[1] / 4.0);

		buttonCoord[0]	= origin[0] - buttonOrigin[0];
		buttonCoord[1]	= origin[1] - buttonOrigin[1];
		buttonCoord = clampWindow(buttonCoord, buttonSize);

		var displacement = new Array(0,0);
		displacement[0] = buttonCoord[0] + buttonOrigin[0] - mousePosition[0];
		displacement[1] = buttonCoord[1] + buttonOrigin[1] - mousePosition[1];

		shadowCoord[0]	= buttonCoord[0] + buttonOrigin[0] - shadowOrigin[0] + displacement[0] / 35.0;
		shadowCoord[1]	= buttonCoord[1] + buttonOrigin[1] - shadowOrigin[1] + displacement[1] / 35.0;
		
		moveElement(buttonElement, buttonCoord);
		moveElement(shadowElement, shadowCoord);
	}
}

function getWindowSize () {
	if (COMPLIANT) {
		return new Array (window.innerWidth, window.innerHeight);
	} else {
		return new Array (document.body.offsetWidth, document.body.offsetHeight);
	}
}

function mouseEvent (e) {
	if (COMPLIANT) {
		mousePosition[0] = e.pageX;
		mousePosition[1] = e.pageY
	} else {
		mousePosition[0] = event.clientX + document.body.scrollLeft;
		mousePosition[1] = event.clientY + document.body.scrollTop;
	}
}

function moveElement (element, coord) {
	element.style.left = coord[0];
	element.style.top = coord[1];
}

function clampWindow (coord, size) {
	var windowSize	= getWindowSize();
	var newCoord	= new Array (coord[0], coord[1]);

	if (coord[0] < 0) {
		newCoord[0]	= 0;
	} else if ((coord[0] + size[0]) > windowSize[0]) {
		newCoord[0]	= windowSize[0] - size[0];
	}

	if (coord[1] < 0) {
		newCoord[1]	= 0;
	} else if ((coord[1] + size[1]) > windowSize[1]) {
		newCoord[1]	= windowSize[1] - size[1];
	}

	return newCoord;
}

