function AddOnLoadEvent (NewFunc)
{
	if (typeof window.onload != 'function')
	{
		window.onload = NewFunc;
	}
	else
	{
		var OldFunc = window.onload;
		window.onload = function ()
		{
			if (OldFunc) OldFunc ();
			NewFunc ();
		}
	}
}

function TextFade (ObjectID, InitialStyleName, FinalStyleName)
{
	if (!TextFade.TextObject[ObjectID])
	{
		TextFade.TextObject[ObjectID] = new Object ();
		
		TextFade.TextObject[ObjectID].DeltaStyle = new Object ();
		if (TextFade.Style[FinalStyleName].Color != undefined)			TextFade.TextObject[ObjectID].DeltaStyle.Color = new Object ();
		if (TextFade.Style[FinalStyleName].ShadowColor != undefined)	TextFade.TextObject[ObjectID].DeltaStyle.ShadowColor = new Object ();
		
		TextFade.TextObject[ObjectID].CurrentStyle = new Object ();
		if (TextFade.Style[FinalStyleName].Color != undefined)			TextFade.TextObject[ObjectID].CurrentStyle.Color = new Object ();
		if (TextFade.Style[FinalStyleName].ShadowColor != undefined)	TextFade.TextObject[ObjectID].CurrentStyle.ShadowColor = new Object ();
		
		TextFade.CloneStyle (TextFade.TextObject[ObjectID].CurrentStyle, TextFade.Style[InitialStyleName]);
		
		TextFade.TextObject[ObjectID].StartFadeStyle = new Object ();
		TextFade.TextObject[ObjectID].StartFadeStyle.Color = new Object ();
		TextFade.TextObject[ObjectID].StartFadeStyle.ShadowColor = new Object ();
	}
	
	TextFade.TextObject[ObjectID].StartFadeTime = (new Date ()).getTime ();
	
	TextFade.CloneStyle (TextFade.TextObject[ObjectID].StartFadeStyle, TextFade.TextObject[ObjectID].CurrentStyle);
	
	if (TextFade.Style[FinalStyleName].Color != undefined)
	{
		TextFade.TextObject[ObjectID].DeltaStyle.Color.r = TextFade.Style[FinalStyleName].Color.r - TextFade.TextObject[ObjectID].StartFadeStyle.Color.r;
		TextFade.TextObject[ObjectID].DeltaStyle.Color.g = TextFade.Style[FinalStyleName].Color.g - TextFade.TextObject[ObjectID].StartFadeStyle.Color.g;
		TextFade.TextObject[ObjectID].DeltaStyle.Color.b = TextFade.Style[FinalStyleName].Color.b - TextFade.TextObject[ObjectID].StartFadeStyle.Color.b;
	}
	
	if (TextFade.Style[FinalStyleName].Opacity != undefined) TextFade.TextObject[ObjectID].DeltaStyle.Opacity = TextFade.Style[FinalStyleName].Opacity - TextFade.TextObject[ObjectID].StartFadeStyle.Opacity;
	
	if (TextFade.Style[FinalStyleName].ShadowColor != undefined && TextFade.Style[FinalStyleName].ShadowOffset != undefined && TextFade.Style[FinalStyleName].ShadowBlur != undefined)
	{
		TextFade.TextObject[ObjectID].DeltaStyle.ShadowColor.r = TextFade.Style[FinalStyleName].ShadowColor.r - TextFade.TextObject[ObjectID].StartFadeStyle.ShadowColor.r;
		TextFade.TextObject[ObjectID].DeltaStyle.ShadowColor.g = TextFade.Style[FinalStyleName].ShadowColor.g - TextFade.TextObject[ObjectID].StartFadeStyle.ShadowColor.g;
		TextFade.TextObject[ObjectID].DeltaStyle.ShadowColor.b = TextFade.Style[FinalStyleName].ShadowColor.b - TextFade.TextObject[ObjectID].StartFadeStyle.ShadowColor.b;
		TextFade.TextObject[ObjectID].DeltaStyle.ShadowOffset = TextFade.Style[FinalStyleName].ShadowOffset - TextFade.TextObject[ObjectID].StartFadeStyle.ShadowOffset;
		TextFade.TextObject[ObjectID].DeltaStyle.ShadowBlur = TextFade.Style[FinalStyleName].ShadowBlur - TextFade.TextObject[ObjectID].StartFadeStyle.ShadowBlur;
	}
	
	clearTimeout (TextFade.TextObject[ObjectID].Timeout);
	TextFade.Fade (ObjectID, FinalStyleName);
}

TextFade.TextObject = new Array ();
TextFade.Style = new Array ();

TextFade.CloneStyle = function (NewStyle, OldStyle)
{
	if (OldStyle.Color != undefined)
	{
		NewStyle.Color.r = OldStyle.Color.r;
		NewStyle.Color.g = OldStyle.Color.g;
		NewStyle.Color.b = OldStyle.Color.b;
	}
	
	NewStyle.Opacity = OldStyle.Opacity;
	
	if (OldStyle.ShadowColor != undefined && OldStyle.ShadowOffset != undefined && OldStyle.ShadowBlur != undefined)
	{
		NewStyle.ShadowColor.r = OldStyle.ShadowColor.r;
		NewStyle.ShadowColor.g = OldStyle.ShadowColor.g;
		NewStyle.ShadowColor.b = OldStyle.ShadowColor.b;
		NewStyle.ShadowOffset = OldStyle.ShadowOffset;
		NewStyle.ShadowBlur = OldStyle.ShadowBlur;
	}
}

TextFade.SetStyle = function (ObjectID, ObjectStyle)
{
	var CurrentObject = document.getElementById (ObjectID);
	
	if (ObjectStyle.Color != undefined) CurrentObject.style.color = 'rgb(' + ObjectStyle.Color.r + ',' + ObjectStyle.Color.g + ',' + ObjectStyle.Color.b + ')';
	
	if (ObjectStyle.Opacity != undefined)
	{
		if (ObjectStyle.Opacity != 0.0)
		{
			CurrentObject.style.visibility = 'visible';
			CurrentObject.style.opacity = ObjectStyle.Opacity;
		}
		else
		{
			CurrentObject.style.visibility = 'hidden';
		}
	}
	if (ObjectStyle.ShadowColor != undefined && ObjectStyle.ShadowOffset != undefined && ObjectStyle.ShadowBlur != undefined)
	{
		if (ObjectStyle.ShadowOffset != 0.0 || ObjectStyle.ShadowBlur != 0.0)
		{
			CurrentObject.style.textShadow = 'rgb(' + ObjectStyle.ShadowColor.r + ',' + ObjectStyle.ShadowColor.g + ',' + ObjectStyle.ShadowColor.b + ') ' + ObjectStyle.ShadowOffset + 'px ' + ObjectStyle.ShadowOffset + 'px ' + ObjectStyle.ShadowBlur + 'px ';
		}
		else
		{
			CurrentObject.style.textShadow = 'none';
		}
	}
}

TextFade.Fade = function (ObjectID, FinalStyleName)
{
	var FadeAge = ((new Date ()).getTime () - TextFade.TextObject[ObjectID].StartFadeTime) / TextFade.Style[FinalStyleName].FadeTime;
	if (FadeAge < 1.0)
	{
		if (TextFade.Style[FinalStyleName].Color != undefined)
		{
			TextFade.TextObject[ObjectID].CurrentStyle.Color.r = parseInt (TextFade.TextObject[ObjectID].StartFadeStyle.Color.r + TextFade.TextObject[ObjectID].DeltaStyle.Color.r * FadeAge);
			TextFade.TextObject[ObjectID].CurrentStyle.Color.g = parseInt (TextFade.TextObject[ObjectID].StartFadeStyle.Color.g + TextFade.TextObject[ObjectID].DeltaStyle.Color.g * FadeAge);
			TextFade.TextObject[ObjectID].CurrentStyle.Color.b = parseInt (TextFade.TextObject[ObjectID].StartFadeStyle.Color.b + TextFade.TextObject[ObjectID].DeltaStyle.Color.b * FadeAge);
		}
		
		if (TextFade.Style[FinalStyleName].Opacity != undefined) TextFade.TextObject[ObjectID].CurrentStyle.Opacity = TextFade.TextObject[ObjectID].StartFadeStyle.Opacity + TextFade.TextObject[ObjectID].DeltaStyle.Opacity * FadeAge;
		
		if (TextFade.Style[FinalStyleName].ShadowColor != undefined && TextFade.Style[FinalStyleName].ShadowOffset != undefined && TextFade.Style[FinalStyleName].ShadowBlur != undefined)
		{
			TextFade.TextObject[ObjectID].CurrentStyle.ShadowColor.r = parseInt (TextFade.TextObject[ObjectID].StartFadeStyle.ShadowColor.r + TextFade.TextObject[ObjectID].DeltaStyle.ShadowColor.r * FadeAge);
			TextFade.TextObject[ObjectID].CurrentStyle.ShadowColor.g = parseInt (TextFade.TextObject[ObjectID].StartFadeStyle.ShadowColor.g + TextFade.TextObject[ObjectID].DeltaStyle.ShadowColor.g * FadeAge);
			TextFade.TextObject[ObjectID].CurrentStyle.ShadowColor.b = parseInt (TextFade.TextObject[ObjectID].StartFadeStyle.ShadowColor.b + TextFade.TextObject[ObjectID].DeltaStyle.ShadowColor.b * FadeAge);
			TextFade.TextObject[ObjectID].CurrentStyle.ShadowOffset = TextFade.TextObject[ObjectID].StartFadeStyle.ShadowOffset + TextFade.TextObject[ObjectID].DeltaStyle.ShadowOffset * FadeAge;
			TextFade.TextObject[ObjectID].CurrentStyle.ShadowBlur = TextFade.TextObject[ObjectID].StartFadeStyle.ShadowBlur + TextFade.TextObject[ObjectID].DeltaStyle.ShadowBlur * FadeAge;
		}
		
		TextFade.SetStyle (ObjectID, TextFade.TextObject[ObjectID].CurrentStyle);
		
		TextFade.TextObject[ObjectID].Timeout = setTimeout ('TextFade.Fade (\'' + ObjectID + '\', \'' + FinalStyleName + '\')', 0);
	}
	else
	{
		TextFade.CloneStyle (TextFade.TextObject[ObjectID].CurrentStyle, TextFade.Style[FinalStyleName]);
		
		TextFade.SetStyle (ObjectID, TextFade.TextObject[ObjectID].CurrentStyle);
	}
}

TextFade.hex2rgb = function (Color)
{
	if (Color != undefined)
	{
		var rgb = Color.replace (/[# ]/g, "").replace (/^(.)(.)(.)$/, '$1$1$2$2$3$3').match (/.{2}/g);
		for (var i = 0; i < 3; i++) rgb[i] = parseInt (rgb[i], 16);
		return {'r': rgb[0], 'g': rgb[1], 'b': rgb[2]};
	}
	else
	{
		return undefined;
	}
}

TextFade.AddStyle = function (StyleName, Color, Opacity, ShadowColor, ShadowOffset, ShadowBlur, FadeTime)
{
	TextFade.Style[StyleName] = 
	{
		'Color': TextFade.hex2rgb (Color),
		'Opacity': Opacity,
		'ShadowColor': TextFade.hex2rgb (ShadowColor),
		'ShadowOffset': ShadowOffset,
		'ShadowBlur': ShadowBlur,
		'FadeTime': FadeTime
	}
}

TextFade.AddStyle ('SiteTitle',			'#5A7D8C', undefined, '#5A7D8C', 0, 0, 500);
TextFade.AddStyle ('SiteTitleHover',	'#FFFFFF', undefined, '#000000', 2, 0, 250);

TextFade.AddStyle ('MainMenu',		'#999999', undefined, undefined, undefined, undefined, 250);
TextFade.AddStyle ('MainMenuHover',	'#FFCC66', undefined, undefined, undefined, undefined, 100);

TextFade.AddStyle ('PluginMenuOff',	'#000000', 0.0, undefined, undefined, undefined, 1000);
TextFade.AddStyle ('PluginMenuOn',	'#666666', 1.0, undefined, undefined, undefined, 100);

TextFade.AddStyle ('NewsExstraLinksOff',	'#111111', 0.0, undefined, undefined, undefined, 1000);
TextFade.AddStyle ('NewsExstraLinksOn',		'#666666', 1.0, undefined, undefined, undefined, 250);

TextFade.AddStyle ('FadeOff',		undefined, 0.0, undefined, undefined, undefined, 500);
TextFade.AddStyle ('FadeOn',		undefined, 1.0, undefined, undefined, undefined, 500);
TextFade.AddStyle ('QuickFadeOn',	undefined, 1.0, undefined, undefined, undefined, 250);
TextFade.AddStyle ('HalfFadeOff',	undefined, 0.5, undefined, undefined, undefined, 500);
