
var initElem = 'tagBlock';
var arrAnchors = new Array();
var maxFontSize = 200;

function getScreenDimensions() {
	var frameWidth,frameHeight;
	if (self.innerHeight) {
		frameWidth = self.innerWidth;
		frameHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) {
		frameWidth = document.documentElement.clientWidth;
		frameHeight = document.documentElement.clientHeight;
	} else if (document.body) {
		frameWidth = document.body.clientWidth;
		frameHeight = document.body.clientHeight;
	}
	dims = new Array();
	dims[0] = frameWidth;
	dims[1] = frameHeight;
	return dims;
}

function getMousePos(e) {
	var posx = 0;
	var posy = 0;
	if (!e) var e = window.event;
	if (e.pageX || e.pageY) {
		posx = e.pageX;
		posy = e.pageY;
	} else if (e.clientX || e.clientY) {
		if (document.documentElement.scrollTop) {
			posx = e.clientX + document.documentElement.scrollLeft;
			posy = e.clientY + document.documentElement.scrollTop;
		} else {
			posx = e.clientX + document.body.scrollLeft;
			posy = e.clientY + document.body.scrollTop;
		}
	}
	//document.getElementById('posx').value = posx;
	//document.getElementById('posy').value = posy;
	
	elementLeft = document.getElementById(initElem).offsetLeft;
	elementTop = document.getElementById(initElem).offsetTop;
	
	trackGravity(posx - elementLeft,posy - elementTop);//-8 here because that's the relative position of the main element on the page. Not sure why.
}		

function initMouse() {
	try
	{
		document.getElementById(initElem).onmousemove=getMousePos;
	}
	catch( err )
	{
		//ignore
	}
}

function trackGravity(posx,posy) 
{
	for( x=0; x<arrAnchors.length; x++ ) 
	{		
		cTag = arrAnchors[x].id;
		minFontSize = arrAnchors[x].originalFontSize;
		currentTop = document.getElementById(cTag).style.top;
		currentTop = 1*currentTop.replace(/[px]/g, "");
		currentLeft = document.getElementById(cTag).style.left;
		currentLeft = 1*currentLeft.replace(/[px]/g, "");
		currentWidth = 1*document.getElementById(cTag).offsetWidth;
		currentHeight = 1*document.getElementById(cTag).offsetHeight;

		centreOfGravX = currentLeft + (currentWidth/2);
		centreOfGravY = currentTop + (currentHeight/2);	
		
		boxBoundsX = currentWidth;
		boxBoundsY = currentHeight;
		
		if ( 
			 posx > (currentLeft - boxBoundsX) 
		  && posx < (currentLeft + currentWidth + boxBoundsX) 
		  && posy > (currentTop - boxBoundsY) 
		  && posy < (currentTop + currentHeight + boxBoundsY)
		  ) //inside gravitational pull
		{
			gravityStrengthX = (centreOfGravX - posx);
			
			if (gravityStrengthX < 0) 
				gravityStrengthX = gravityStrengthX * -1;
				
			gravityStrengthY = (centreOfGravY - posy);
			
			if (gravityStrengthY < 0) 
				gravityStrengthY = gravityStrengthY * -1;
				
			gravityStrengthX = gravityStrengthX;
			
			gravityStrengthY = gravityStrengthY;
			
			maxYBound = boxBoundsY + (currentHeight/2);
			
			gravityStrengthY = maxFontSize - ((maxFontSize / (maxYBound * 2)) * gravityStrengthY);
			
			maxXBound = boxBoundsX + (currentWidth/2);
			
			gravityStrengthX = maxFontSize - ((maxFontSize / (maxXBound * 2)) * gravityStrengthX);
			
			gravityStrength = Math.round(gravityStrengthX) + Math.round(gravityStrengthY) - 200;
			
			if (gravityStrength < minFontSize) 
				gravityStrength = minFontSize;
		} 
		else 
		{
			gravityStrength = minFontSize;
		}
		
		document.getElementById(cTag).style.fontSize = gravityStrength + '%';
		document.getElementById(cTag).style.opacity = ( gravityStrength - 100 ) / 100;
		document.getElementById(cTag).style.left = centreOfGravX - document.getElementById(cTag).offsetWidth / 2 + "px";
		document.getElementById(cTag).style.top = centreOfGravY - document.getElementById(cTag).offsetHeight / 2 + "px";		
	}
}
arrColours = new Array("000000","FF6600","CC0000","0000CC","00CC00");

Array.prototype.near = function near( pxPos, distance )
{
	for( var i = 0; i < this.length; i++ )			
		if( Math.abs( this[ i ] - pxPos ) < distance )
			return true;
	
	return false;
}


function initTags() {
	var maxWidth = 250;
	var maxHeight = 200;
	
	maxWidth = parseInt( document.getElementById( 'tagBlock' ).style.width.replace(/[px]/g, "") );
	maxHeight = parseInt( document.getElementById( 'tagBlock' ).style.height.replace(/[px]/g, "") );
	
	try
	{
		arrAnchors = document.getElementById(initElem).getElementsByTagName("a");
		lineHeight = document.getElementById(initElem).style.lineHeight;
		
		tops = new Array();
		
		widthX = maxWidth / 8;

		for (i=0;i<arrAnchors.length;i++) 
		{
			var c = 0;
			
			thisWidth = arrAnchors[i].offsetWidth;
			thisHeight = arrAnchors[i].offsetHeight;

			pos = Math.round( Math.random() * ( maxWidth - thisWidth ) );
			arrAnchors[i].style.left = pos + 'px';		
			
			do
			{
				pos = Math.round( Math.random() * ( maxHeight - thisHeight ) );
				arrAnchors[ i ].style.top = pos + 'px';
			}
			while( tops.near( pos, 11 )  && c++ < 400 );
				
			tops[ i ] = pos;

			arrAnchors[i].originalFontSize = arrAnchors[i].style.fontSize.replace(/%/,"");	
			arrAnchors[i].style.opacity = (arrAnchors[i].originalFontSize - 100) / 100;	
			arrAnchors[i].style.color = '#' + arrColours[ Math.floor( Math.random() * 5 ) ];
		}
	}
	catch( err )
	{
		//ignore
	}
}