/******************************************************************
	Modified version of "Link fader" by
	Fayez Zaheer (http://projects.impenetrable.org/linkfader/)

	Version 1.2
	Modifications by Guy Paddock (webmaster@bid-power.com)

	Date: 09.28.04
******************************************************************/
var	fadeTo	= "FF0000";

// Fade in colour increment/decrement by
var	fiBy	= 5;

// Fade out colour increment/decrement by
var	foBy	= 5;

// Speed - milliseconds between each colour change in the fade
// Less than 10ms doesn't really make all that much difference, so
// 10 is the minimum effective value.
var	speed	= 10;

// Class name of links to NOT fade (i.e. ignore)
// var ignoreClass = "somebogusvalue" if you don't want to
// use this feature. Alternatively, add onmouseover="clearFade()"
// to the link you do not wish to fade.
var	ignoreClass = "ignore";

// No more changes required (unless you know what you are doing)
// Enjoy... and email me and let me know what site(s) you are using it on :)
var	opera,
	ie,
	dom,
	x			= 0,
	oc,
	fader,
	ocs			= new Array(),
	orig_load,
	orig_mouse_overs	= new Array(),
	orig_mouse_outs		= new Array();

if (navigator.userAgent.indexOf("Opera") != -1)
	opera	= true;

else if (document.all && !opera)
	ie	= true;

else if (!document.all && document.getElementById)
	dom	= true;

function convertRGB(z)
{
	var newfcS = "", splitter = "";

	splitter	= z.split(",");
	splitter[0]	= parseInt(splitter[0].substring(4, splitter[0].length));
	splitter[1]	= parseInt(splitter[1]);
	splitter[2]	= parseInt(splitter[2].substring(0, splitter[2].length-1));

	for (var q = 0; q < 3; q++)
	{
		splitter[q] = splitter[q].toString(16);

		if (splitter[q].length == 1)
			splitter[q] = "0" + splitter[q];

		newfcS += splitter[q];
	}

	return newfcS;
}

function currentColour(index)
{
	var temp, cc;

	if (opera)
		cc = document.links[index].style.color;

	else if (ie)
		cc = document.links[index].currentStyle.color;

	else if (dom)
		cc = document.defaultView.getComputedStyle(document.links[index], '').getPropertyValue("color");

	if (cc.length == 4 && cc.substring(0, 1) == "#")
	{
		temp = "";

		for (var a = 0; a < 3; a++)
			temp += cc.substring(a+1, a+2) + cc.substring(a+1, a+2);

		cc = temp;
	}

	else if (cc.indexOf("rgb") != -1)
		cc = convertRGB(cc);

	else if (cc.length == 7)
		cc = cc.substring(1, 7);

	else
		cc = fadeTo;

		return cc;
}


function convert2Dec(hex)
{	
		var rgb = new Array();

		for (var u = 0; u < 3; u++)
			rgb[u] = parseInt(hex.substring(u*2, u*2+2), 16);

		return rgb;
}

function newRGB(f, n, d)
{
		var change;

		if (d == 1)
			change = fiBy;

		else
			change = foBy;

		for (var g = 0; g < 3; g++)
		{
			if (n[g] > f[g] && n[g] - change >= 0)
				n[g] -= change;

			if (n[g] < f[g] && n[g] + change <= 255)
				n[g] += change;
		}

		return n;
}

function fade(index, d)
{
	var	fc,
		nc,
		temp		= new Array(),
		finished	= false;

	nc	= convert2Dec(currentColour(index));

	if (d == 1)
		fc	= convert2Dec(fadeTo);
	else
		fc	= convert2Dec(ocs[x]);

	temp	= convert2Dec(currentColour(index));
	nc	= newRGB(fc, nc, d);

	if ((nc[0] == temp[0]) && (nc[1] == temp[1]) && (nc[2] == temp[2]))
		finished = true;

	if (!finished)
		document.links[x].style.color = "rgb(" + nc[0] + "," + nc[1] + "," + nc[2] + ")";

	else
		clearInterval(fader);

	if (d == 1 && orig_mouse_overs[index])
		orig_mouse_overs[index]();

	else if (!d && orig_mouse_outs[index])
		orig_mouse_outs[index]();
}

function findLink(over)
{
	if (document.layers)
		return;

	if (fader)
	{
		clearInterval(fader);
		document.links[x].style.color = "#" + ocs[x];
	}
		
	if (over && !this.id)
		this.id = over;

	for (x = 0; !(this.id == document.links[x].id) && (x < document.links.length); x++);

	if (this.id == document.links[x].id)
	{
		oc	= currentColour(x);
		fader	= setInterval("fade(" + x  + ", 1)", speed);
	}
}

function clearFade()
{
	if (document.layers)
		return;

	if (fader)
		clearInterval(fader);

	fader	= setInterval("fade(" + x + ", 0)", speed);
}

function init()
{
	// Call original onLoad
	if (orig_load)
		orig_load();

	for (var i = 0; i < document.links.length; i++)
	{
		var currentOver	= document.links[i].onmouseover;
		var currentOut	= document.links[i].onmouseout;
		var ignoreIt	= (document.links[i].className.indexOf(ignoreClass) != -1);

		ocs[i] = currentColour(i);

		if (ignoreIt)
			continue;

		if (currentOver)
			orig_mouse_overs[i]	= currentOver;

		if (currentOut)
			orig_mouse_outs[i]	= currentOut;

		document.links[i].id		= "link" + i;
		document.links[i].onmouseover	= findLink;
		document.links[i].onmouseout	= clearFade;
	}

}

if (opera || ie || dom)
{
	// Don't change existing onLoad events; save them
	if (window.onload && window.onload != init)
		orig_load = window.onload;

	window.onload = init;
}
