cFader = {
	speed	: 30,
	steps	: 5,
	active	: 0,

	startc	: 0,
	endc	: 0,
	
	startr	: 0,
	startg	: 0,
	startb	: 0,
	endr	: 0,
	endg	: 0,
	endb	: 0,
	
	startColor : '#000700',
	endColor	 : '#8FBB00'
	}

	cFader.colorToNumber = function( sColor )
	{
	sRCol = /^#/
	return parseInt( '0x'+sColor.replace( sRCol, '' ) )
	}

	cFader.numberToColor = function( nColor )
	{
	nColor |= 1<<24
	return '#'+nColor.toString(16).substr(1)
	}

	cFader.init = function( element )
	{
	if( eval( 'typeof '+element.className+'Start != "undefined"') ) SC = eval( element.className+'Start' )
	else SC = this.startColor
	if( eval( 'typeof '+element.className+'End != "undefined"') ) EC = eval( element.className+'End' )
	else EC = this.endColor

	with (this)
	{
		startc = colorToNumber( SC )
		endc = colorToNumber( EC )

		startr = (startc & 0xff0000) >>> 16
		startg = (startc & 0x00ff00) >>> 8
		startb = (startc & 0x0000ff)
		
		endr = (endc & 0xff0000) >>> 16
		endg = (endc & 0x00ff00) >>> 8
		endb = (endc & 0x0000ff)
	}
}

cFader.fadeIn = function( element )
{
	this.init( element )
	elName = 'cFaderActive'+(this.active++)
	eval( 'this.'+elName+'=element' )
	for( step = 0; step <= this.steps; step++ )
	{
		with( this )
		{
			nColor = startr*((steps-step)/steps)+endr*(step/steps) << 16 | startg*((steps-step)/steps)+endg*(step/steps) << 8 | startb*((steps-step)/steps)+endb*(step/steps)
		}
		sColor = this.numberToColor( nColor )
		setTimeout('cFader.doFade("'+elName+'", "'+sColor+'")', this.speed*(step+1))
	}
}

cFader.fadeOut = function( element )
{
	this.init( element )
	elName = 'cFaderActive'+(this.active++)
	eval( 'this.'+elName+'=element' )
	for( step = 0; step <= this.steps; step++ )
	{
		with( this )
		{
			nColor = endr*((steps-step)/steps)+startr*(step/steps) << 16 | endg*((steps-step)/steps)+startg*(step/steps) << 8 | endb*((steps-step)/steps)+startb*(step/steps)
		}
		sColor = this.numberToColor( nColor )
		setTimeout('cFader.doFade("'+elName+'", "'+sColor+'")', this.speed*(step+1))
	}
}

cFader.doFade = function( elName, sColor )
{
	element = eval( 'this.'+elName )
	element.style.color = sColor
}

//get real element that originated the event
function getReal( e )
{
	elm =  ( e.srcElement ) ? e.srcElement : e.originalTarget.parentNode
	//if( elm && elm.className && elm.className.indexOf('fade') != -1 ) return elm
	//else return null
	if( typeof elm.tagName == 'undefined' )
	return null
	if( elm.tagName.toUpperCase() == "A" ) return elm
	else return null
}

//activation
function fadeMouseOver( e )
{
	if( !e ) e = window.event
	element = getReal( e )
	if( element != null ) cFader.fadeIn( element )
}

//deactivation
function fadeMouseOut( e )
{
	if( !e ) e = window.event
	element = getReal( e )
	if( element != null ) cFader.fadeOut( element )
}

if( document.attachEvent ) 
{
	document.attachEvent( 'onmouseover', fadeMouseOver )
	document.attachEvent( 'onmouseout', fadeMouseOut )
}
else if( document.addEventListener )
{
	document.addEventListener( 'mouseover', fadeMouseOver, true )
	document.addEventListener( 'mouseout', fadeMouseOut, true )
}
else if( document.all )
{
	document.onmouseover = fadeMouseOver
	document.onmouseout = fadeMouseOut
}
