// Fade-to colour without the # (6 character value only!)
var fadeTo = "000000";//"ffaa22";

// Fade in colour increment/decrement by
var fiBy = 4;//6;

// Fade out colour increment/decrement by
var foBy = 4;//10;

// 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 = 15;//0;

// 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, ocs = new Array(), faders = 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[index]);
		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[index].style.color = "rgb(" + nc[0] + "," + nc[1] + "," + nc[2] + ")"
		else
		{
			clearInterval(faders[index]);
			faders[index] = null;
		}
	}

function fadeIn()
{
	doFade(event.srcElement, 1);
}

function fadeOut()
{
	doFade(event.srcElement, 0);
}

function doFade(over, d)
{
	if (document.layers) return;

	for(var x = 0; x < document.links.length; x++)
	{
		if(over == document.links[x])
		{
			if (d == 1)
				document.links[x].style.color = "#FFFFFF";
				
			if (faders[x])
				clearInterval(faders[x]);
				
			faders[x] = setInterval("fade(" + x  + ", " + d + ")", speed);
		}
	}
}

function init()
{
	for (var i = 0; i < document.links.length; i++)
	{
		ocs[i] = currentColour(i);
		faders[i] = null;

		var currentOver = document.links[i].onmouseover;
		var currentOut = document.links[i].onmouseout;
		var ignoreIt = document.links[i].className == ignoreClass;
		if (!ignoreIt) document.links[i].id = "link" + i;
		if (!currentOver && !currentOut && !ignoreIt)
		{
			document.links[i].onmouseover = fadeIn;
			document.links[i].onmouseout = fadeOut;
		}
	}		
}

if (opera || ie || dom) window.onload = init;
