var objectTrap = new Array();
var txt = null;
var selectDelay = 500;
var animationSteps = 20;
var animationSpeed = 50;
var upperColor = 235;
var lowerColor = 180;
var satRange = 40;
var initColor = new Array( 242, 242, 242 );
var grayscale = false;
addLoadEvent( let_r_rip );


function let_r_rip()
	{
	txt = getObj('foo');
	if ( txt )
		{
		window.setTimeout( 'selectChar()', selectDelay );
		}
	}


function selectChar()
	{
	var ii;
	do
		{
		ii = Math.floor( Math.random() * txt.childNodes.length );
		}
	while ( txt.childNodes[ii].nodeType != 1 || txt.childNodes[ii].fading == true )
	charFade( ii );
	window.setTimeout( 'selectChar()', selectDelay );
	}


function charFade( ii )
	{
	var obj = txt.childNodes[ii];
	obj.fading = true;
	var oldColors = getColor( obj );
	var newR = Math.floor( ( upperColor - lowerColor ) * Math.random() ) + lowerColor;
	var newG = ( grayscale ) ? newR : Math.floor( ( Math.min( upperColor, newR + satRange ) - Math.max( lowerColor, newR - satRange ) ) * Math.random() ) + Math.max( lowerColor, newR - satRange );
	var newB = ( grayscale ) ? newR : Math.floor( ( Math.min( upperColor, Math.min( newR, newG ) + satRange ) - Math.max( lowerColor, Math.max( newR, newG ) - satRange ) ) * Math.random() ) + Math.max( lowerColor, Math.max( newR, newG ) - satRange );
	fade( ii, 0, oldColors[0], oldColors[1], oldColors[2], newR, newG, newB, animationSteps, animationSpeed );
	}


function fade( ii, i, oldR, oldG, oldB, newR, newG, newB, steps, speed )
	{
	var obj = txt.childNodes[ii];
	steps = ( steps != null ) ? steps : 10;
	speed = ( speed != null ) ? speed : 50;
	var rDiff = ( newR - oldR ) / steps;
	var gDiff = ( newG - oldG ) / steps;
	var bDiff = ( newB - oldB ) / steps;
	var r = Math.round( parseInt( oldR ) + ( rDiff * i ) );
	var g = Math.round( parseInt( oldG ) + ( gDiff * i ) );
	var b = Math.round( parseInt( oldB ) + ( bDiff * i ) );
	i++;
	if ( i <= steps )
		{
		setColor( obj, r, g, b );
		window.setTimeout( 'fade(' + ii + ',' + i + ',' + oldR + ',' + oldG + ',' + oldB + ',' + newR + ',' + newG + ',' + newB + ',' + steps + ',' + speed + ')', speed );
		}
	else obj.fading = false;
	}


function setColor( obj, r, g, b )
	{
	if ( obj.style )
		{
		obj.style.color = 'rgb('+ r + ',' + g + ',' + b + ')';
		}
	}


function getColor( obj )
	{
	var str = obj.style.color;
	var colors = new Array();
	if ( ! str ) colors = initColor;
	else if ( str.indexOf('r') + 1 ) colors = str.match(/\d+/g);
	else
		{
		var hex = str.replace(/^#?/,"#");
		if ( hex.length == 4 ) hex = hex.replace(/[0-9a-f]/gi,"$&$&");
		colors[0] = parseInt( hex.substr(0,2), 16 );
		colors[1] = parseInt( hex.substr(2,2), 16 );
		colors[2] = parseInt( hex.substr(4,2), 16 );
		}
	return colors;
	}


function getObj( id, manual )
	{
	if ( manual || typeof( objectTrap[id] ) == 'undefined' )
		{
		var item = null;
		if ( document.getElementById )
			{
			item = document.getElementById( id );
			}
		else if ( document.all )
			{
			item = document.all[id];
			}
		else if ( document.layers )
			{
			item = document.layers[id];
			}
		objectTrap[id] = ( item ) ? item : false;
		}
	return objectTrap[id];
	}


function addLoadEvent( func )
	{
	var oldonload = window.onload;
	if ( typeof( window.onload ) != 'function' )
		{
		window.onload = func;
		}
	else
		{
		window.onload = function()
			{
			if ( oldonload ) oldonload();
			func();
			}
		}
	}


