bodyColor = '#aadec0';
flashCnt = 0;
flashTimeoutId = undefined;
function flashCloud(_internal) {
	document.body.style.backgroundColor = '#000000';
	if ((_internal == 2) || (flashCnt == 0)) { flashCnt++; flashTimeoutId = setTimeout("unflashCloud()", 50); }
}

function unflashCloud() {
	document.body.style.backgroundColor = bodyColor;
	if (flashCnt < 2) { setTimeout("flashCloud(2)", 50); }
}

function flashReset() {
	document.body.style.backgroundColor = bodyColor;
	if (flashTimeoutId) { clearTimeout(flashTimeoutId); }
	flashCnt = 0;
}

var pi = 3.14159265;
var circle = 2 * pi;
var quarter = pi / 2;

// 		<move>
// 			<type>wander</type>
// 			<speed>7</speed>
// 			<bounds>0 400 200 100</bounds>
// 			<curve>.2</curve>
// 			<straight>8</straight>
// 		</move>

function FloatingElements(_moveList) {
	this.move = _moveObjects;
	this.moveList = [ {
		element:	document.getElementById('cloud1'),
		speedMax:	.5,
		speedMin:	.2,
		accelLimit:	5,
		accel:		1.1,
		bounds:		[5, 180, 120, 5],
		direction:	0,
		move:		{ curve: 0.2, straight: 1 }
	}, {
		element:	document.getElementById('cloud2'),
		speedMax:	.5,
		speedMin:	.2,
		accelLimit:	10,
		accel:		1.1,
		bounds:		[5, 180, 120, 5],
		direction:	180,
		move:		{ curve: 0.2, straight: 1 },
		long:		56,
		rightSide:	true
	}, {
		element:	document.getElementById('cloud3'),
		speedMax:	.5,
		speedMin:	.2,
		accelLimit:	10,
		accel:		1.1,
		bounds:		[350, 50, 600, -150],
		direction:	30,
		move:		{ curve: 0.2, straight: 1 }
	} ];
	this.cnt = 0;
	for (var i = 0; i < this.moveList.length; i++) {
		var object = this.moveList[i];
		object.type = 'wander';
		object.speed = object.speedMax;
		if (!object.lat) { object.lat = object.element.offsetTop; }
		if (!object.long) {
			if (object.rightSide) { object.long = object.element.offsetRight; }
			else { object.long = object.element.offsetLeft; }
		}
	}
}

function radiansToDegrees(_radians) {
	var degrees = Math.floor((_radians / pi) * 180);
	return degrees;
}

function degreesToRadians(_degrees) {
	var radians = (_degrees / 180) * pi;
	return radians;
}

function flipDegreesVertical(_degrees) {
	var degrees = 0;
	if (_degrees >= 180) { degrees = fixDegrees(_degrees - 360); }
	else { degrees = fixDegrees(_degrees + 360); }
	return degrees;
}

function fixDegrees(_degrees) {
	var degrees = Number(_degrees);
	if (_degrees < 0) {
		degrees = (_degrees % 360) + 360;
	} else if (_degrees >= 360) {
		degrees = _degrees % 360;
	}
	return degrees;
}

function fixRadians(_radians) {
	var radians = Number(_radians);
	if (_radians < 0) {
		radians = (_radians % circle) + circle;
	} else if (_radians >= circle) {
		radians = _radians % circle;
	}
	return radians;
}

function _moveObjects() {
	this.cnt++;
//	if (this.cnt == 1) { console.dir(this.moveList); }
	for (var i = 0; i < this.moveList.length; i++) {
		var object = this.moveList[i];
		if (object.move.straight < Math.random() * 10) {
			var slowDown = false;
			if (object.bounds) {
				var travelUp = false;
				var travelLeft = false;
				if ((object.direction >= pi) && (object.direction < circle)) { travelUp = true; }
				else if ((object.direction >= 0) && (object.direction < pi))  { travelUp = false; }
				if ((object.direction >= quarter) && (object.direction < (pi + quarter))) { travelLeft = true; }
				else if ((object.direction < quarter) || (object.direction >= (pi + quarter))) { travelLeft = false; }
				
				if ((Number(object.lat - object.speed) < Number(object.bounds[0])) && travelUp) {
// 					console.info('hit top ' + Math.floor(object.lat) + ' - ' + object.speed + ' = ' + Math.floor(object.lat - object.speed));
					object.direction = circle - Number(object.direction);
				}
				else if ((Number(object.lat + object.speed) > Number(object.bounds[2])) && !travelUp) {
// 					console.info('hit bottom ' + Math.floor(object.lat) + ' + ' + object.speed + ' = ' + Math.floor(object.lat + object.speed));
					object.direction = circle - Number(object.direction);
				}
				else if (Number(object.lat - object.speed) < (Number(object.bounds[0]) + object.accelLimit)) { // Near top
					if (travelUp && (object.speed > object.speedMin)) { slowDown = true; }
				}
				else if (Number(object.lat + object.speed) > (Number(object.bounds[2]) - object.accelLimit)) { // Near bottom
					if (!travelUp && (object.speed > object.speedMin)) { slowDown = true; }
				}
				
				object.direction = fixRadians(object.direction);
				if ((Number(object.long - object.speed) < Number(object.bounds[3])) && (object.direction >= quarter) && travelLeft) {
// 					console.info('hit left ' + Math.floor(object.long) + ' - ' + object.speed + ' = ' + Math.floor(object.long - object.speed));
					object.direction = pi - Number(object.direction);
				}
				else if ((Number(object.long + object.speed) > Number(object.bounds[1])) && !travelLeft) {
// 					console.info('hit right ' + Math.floor(object.long) + ' + ' + object.speed + ' = ' + Math.floor(object.long + object.speed));
					object.direction = pi - Number(object.direction);
				}
				else if (Number(object.long - object.speed) < (Number(object.bounds[3]) + object.accelLimit)) { // Near left
					if (travelLeft && (object.speed > object.speedMin)) { slowDown = true; }
				}
				else if (Number(object.long + object.speed) > (Number(object.bounds[1]) - object.accelLimit)) { // Near right
					if (!travelLeft && (object.speed > object.speedMin)) { slowDown = true; }
				}
				object.direction = fixRadians(object.direction);
				
				if (slowDown) { object.speed = (object.speed / object.accel); }
				else { object.speed = object.speed * object.accel; }
			}
			var dirChange = (Math.random() * 2 * object.move.curve) - object.move.curve;
			object.direction = Number(object.direction) + dirChange;
			if (object.direction < 0) { object.direction = Number(object.direction) + circle; }
			else if (object.direction >= circle) { object.direction = Number(object.direction) - circle; }
		}
		if (object.speed > object.speedMax) { object.speed = object.speedMax; }
		else if (object.speed < object.speedMin) { object.speed = object.speedMin; }
		
		var latChange = Math.sin(object.direction) * object.speed / 2;
		var longChange = Math.cos(object.direction) * object.speed / 2;
		object.lat = Number(object.lat) + latChange;
		object.long = Number(object.long) + longChange;
		object.top = Math.floor(object.lat);
		object.left = Math.floor(object.long);
		object.element.style.top = object.top + 'px';
		if (object.rightSide) { object.element.style.right = object.left + 'px'; }
		else { object.element.style.left = object.left + 'px'; }
	}
}


