// jitter intensity
function jI( val )
{
	return Math.round( val + ( Math.random()*6 - 3)  );
}

var cacheFaces = new Array();
var cacheAngle = new Array();

function getIntensity( item, x, y, face, cell )
{
	var itemX = item.offsetLeft + ( $( item ).width() / 2 );
	var itemY = item.offsetTop + ( $( item ).height() / 2 );
	
	var angle = Math.atan2( x - itemX, y - itemY ) / Math.PI * 180;
	
	// special cases
	
	if( ( face == '240' && cell == 'r' ) || ( face == '120' && cell == 'l' ) )
		face = '180';
	
	if( ( face == '240' && cell == 'b' ) )
		face = '300';	
		
	if( ( face == '120' && cell == 'b' ) )
		face = '60';	
		
	// calc intensity
	
	var angleIntensity = 512 / ( Math.abs( angle - face ) + 1 );
	
	var dist = Math.sqrt( Math.pow( itemX - x , 2) + Math.pow( itemY - y, 2 ) );
	
	var maxDist = 750;
	
	var strength = 25 * maxDist / (dist + 1);
	
	var intensity = Math.floor( ( strength + angleIntensity ) / 2 );
	
	return intensity;
}

function calcMyColour( item, x, y )
{
	var chosen = null;
	
	var face = null;
	
	var allStyles = item.className.split( ' ' );
	
	if( cacheFaces[ item.id ] && cacheAngle[ item.id ] )
	{
		chosen = cacheFaces[ item.id ];
		face = cacheAngle[ item.id ];
	}
	else
	{	
		for( i in allStyles )
		{
			if( allStyles[i].indexOf('_') == 0 )
				chosen = allStyles[i].substring( 1 );
				cacheFaces[ item.id ] = chosen;
				
			if( allStyles[i].indexOf('face') == 0 )
				face = allStyles[i].substring( 4 );
				cacheAngle[ item.id ] = face;
		}
	}
	
	if( !chosen ) return;
	
	if( chosen.indexOf('t') > -1 )
	{
		var v = jI( getIntensity( item, x, y, face, 't' ) );
		item.style.borderTopColor = 'rgb('+ v +','+v+','+v+')';
	}

	if( chosen.indexOf('b') > -1 )	
	{
		var v = jI( getIntensity( item, x, y, face, 'b' ) );
		item.style.borderBottomColor = 'rgb('+ v +','+v+','+v+')';
	}
	
	if( chosen.indexOf('l') > -1 )
	{
		var v = jI( getIntensity( item, x, y, face, 'l' ) );
		item.style.borderLeftColor = 'rgb('+ v +','+v+','+v+')';
	}
	
	if( chosen.indexOf('r') > -1 )
	{
		var v = jI( getIntensity( item, x, y, face, 'r' ) );
		item.style.borderRightColor = 'rgb('+ v +','+v+','+v+')';
	}
}

$(document).ready(function(){
	var changeables = $('li.changeable');
	
	$(document).mousemove(function( e )
	{
		if ( e.pageX )
		{
			var mouseX = e.pageX;
			var mouseY = e.pageY;
		}
		else
		{
			var mouseX = e.clientX + document.body.scrollLeft;
			var mouseY = e.clientY + document.body.scrollTop;
		}
		
		for( var i = 0; i < changeables.length; i++ )
		{
			var item = changeables.get( i );
			calcMyColour( item, 
				mouseX - ( document.getElementById('logo').offsetLeft + ( $( '#logo' ).width() ) ),
				mouseY - ( document.getElementById('logo').offsetTop + ( $( '#logo' ).height() * 0.5 ) )
			);
		}
	});
});
