/////////////////////////////// Environment Variables //////////////////////////////
var browser = new browser();
var width;
var height;
var simultaneous = 0;
var nTimeout = 500;
var animating = 1;

onState = "visible"; 
offState = "hidden";

function browser()
{
    var agent = navigator.userAgent.toLowerCase();
    this.NN  = ((agent.indexOf('mozilla')!=-1) && ((agent.indexOf('spoofer')==-1) && (agent.indexOf('compatible') == -1)));
    this.IE   = (agent.indexOf("msie") != -1);
    this.WIN = (agent.indexOf("win") != -1);
    this.IE5 = (this.IE && (agent.indexOf('5') != -1));
}

////////////////////////////// Preload functions //////////////////////////////////
function preloadImages()
{
	if (document.images) 
	{
		var the_images_array = new Array('bottomCurve.gif','dot.gif','logo.gif', 'transparent.gif',
		'web.gif');
		
		loadImages(the_images_array);
	}
	hideLayer(getLayerStyle('loading'));
}

function loadImages(imageArray)
{	
	for(var loop = 0; loop < imageArray.length; loop++)
	{
 		var an_image = new Image();
		an_image.src = "images/" + imageArray[loop];
	}
}
////////////////////////////// Helper Functions ///////////////////////////////////
function getDimensions()
{
	if (browser.NN)
	{
		width = window.innerWidth;
		height = window.innerHeight;
	}
	else
	{
		width = document.body.clientWidth;
		height = document.body.clientHeight;
	}
}

function getLayerStyle(layerID)
{
	var layer = getObjectRef(layerID);
	return layer.style;
}

function showLayer(object)
{
	object.visibility = onState;
}

function hideLayer(object)
{
	object.visibility = offState;
}

function changeImage(imageName, image ) 
{
		document[imageName].src = image;
}

function getImage(imageName) 
{
		return document[imageName].src;	
}

function setImageHeight(layerName, imageName, heightChange)
{
		document[imageName].height = heightChange;
}

function setImageWidth(layerName, imageName, widthChange)
{
		document[imageName].width = widthChange;
}

function setPos(x, y, layerID, show)
{
	hideLayer(getLayerStyle(layerID));
	
	getLayerStyle(layerID).left = x + "px";
	getLayerStyle(layerID).top = y + "px";

	if(show)
		showLayer(getLayerStyle(layerID));
}

function getWidth(name) 
{
	var el = getObjectRef(name);
  	if(browser.NN)
		return el.clip.width;
	else
  		return el.offsetWidth;
}

function getHeight(name) 
{
	var el = getObjectRef(name);
  	if(browser.NN)
		return el.clip.height;
	else
  		return el.offsetHeight;
}

function getObjectRef(layerID) {
	return document.getElementById(layerID);
}

/////////////////////////// Animation Stuff //////////////////////////////////////
function layerInfo(layerName,xStart, yStart, xEnd, yEnd)
{
	this.nameRef = layerName;
	this.xStart = xStart;
	this.yStart = yStart;
	this.xEnd = xEnd;
	this.yEnd = yEnd;
}

function setUpAnimation()
{
	for (i = 0; i < animLayer.length; i++)
	{
		var moveLayer = new String(animLayer[i].xStart);

		if(moveLayer.length > 0)
		{
			layer = getLayerStyle(animLayer[i].nameRef);

			layer.left = animLayer[i].xStart;
			layer.top = animLayer[i].yStart;
			
			layer.visibility = onState;
		}
		else
		{
			
			layer = getLayerStyle(animLayer[i].nameRef);

			animLayer[i].xStart = layer.posLeft;
			animLayer[i].yStart = layer.posTop;
		}
	}
	textAnimate();
}

var goNum = 0;

function textAnimate ()
{
	if (goNum >= animLayer.length)
	{
		//post animation stuff goes here
		return;
	} 
	else 
	{
		// calculate angle
		var xDist = animLayer[goNum].xEnd - animLayer[goNum].xStart;
		var yDist = animLayer[goNum].yEnd - animLayer[goNum].yStart;
		var state = 1;
		var angle = 0;
		if(yDist != 0)
		{
			angle = Math.atan(xDist/yDist);
			if(yDist < 0)
				state = -1;
		}
		else
		{
			angle = Math.PI/2;
			if(xDist < 0)
				state = -1;
		}
		animateLayer(animLayer[goNum].nameRef, Math.round(Math.sqrt((xDist*xDist) + (yDist*yDist))), radToDeg(angle), state, 1, 0, 0);
		goNum++;
	}
	if(simultaneous)
		textAnimate();
	else
		setTimeout("textAnimate()", nTimeout);
	
}

function animateLayer(layer, length, angle, state, animate, xOver, yOver)
{
	this.angle = degToRad(angle);
	var speed = Math.round(length/9);
		
	if(speed < 1) speed = 1;
	var xTravel = Math.sin(this.angle)*speed*state;
	var yTravel = Math.cos(this.angle)*speed*state;

	var deltaX = Math.round(xTravel);
	var deltaY = Math.round(yTravel);
		
	xOver = (xTravel - deltaX) + xOver;

	if(xOver > 1 || xOver < 1)
	{
		deltaX = deltaX + Math.round(xOver);	
		xOver = xOver - Math.round(xOver);
	}
	
	yOver = (yTravel - deltaY) + yOver;
	
	if(yOver > 1 || yOver < 1)
	{
		deltaY = deltaY + Math.round(yOver);	
		yOver = yOver - Math.round(yOver);
	}

	moveBy(layer, deltaX, deltaY);
	length = length - speed;

	if(length > 0 && animate)
	{
		
		setTimeout("animateLayer('" + layer + "'," + length + "," + angle + ", " + state + "," 
		+ animate + "," + xOver + "," + yOver + ");", 2);
	}
	else if(length > 0 && !animate)
		animateLayer(layer, length, angle, state, animate, xOver, yOver);
	else
	{
		//post animation
		if(animating >= animLayer.length)
			postAnimate();
		else
			animating++;
	}
}

function moveBy(name, x, y) 
{
	var el = getObjectRef(name); 	

	el.style.top = parseInt(el.style.top) + parseInt(y); 
	el.style.left = parseInt(el.style.left) + parseInt(x);  
}

//////////////////// Maths Functions //////////////////////////
var pi = Math.PI;

function degToRad(x) { return ( x/(360/(2*pi)) ); }

function radToDeg(x) { return ( x*(360/(2*pi)) ); }

function randInt(min, max)
{
	var div = (max - min) + 1
	var randNum = Math.random()
	for (var i = 0; i < div; i++)
	{
		if (randNum >= i / div && randNum < (i+1) / div)
			{return i + min}
	}
}