
var ratio = 0;
var col   = 0;
var el    = null;
var hex	  = "0123456789ABCDEF";
var r1 = g1 = b1 = 0x00;
var ff = false;

function d2h(d) {
	var h = hex.substr(d & 15, 1);
	while (d > 15) { d >>= 4; h = hex.substr(d & 15, 1) + h; }
	if (h.length == 1) h = "0" + h;
	return h;
}

function h2d(h) {
	return parseInt(h, 16);
}

function mixColor() {
	if (el.tagName != "A") return;

	// Recombine color with white based on ratio
	var r = r1 + (255 - r1) * ratio;
	var g = g1 + (255 - g1) * ratio;
	var b = b1 + (255 - b1) * ratio;

	if (r > 255) r = 255;
	if (g > 255) g = 255;
	if (b > 255) b = 255;

	if (ff){
		el.style.color = "#" + d2h(r) + d2h(g) + d2h(b);
	} else {
		el.style.color = (r << 16 | g << 8 | b);
	}

	if (ratio < 1 && ratio > 0) {
		window.setTimeout(mixColor, 12);
		ratio += 0.1;
	}
}


function over(e) {
	var oEvent = e ? e : event;
	var oSender = e ? oEvent.target : oEvent.srcElement;
	if (oSender.nodeName != 'A') {
		if (oSender.parentNode && oSender.parentNode.nodeName == 'A') {
			oSender = oSender.parentNode;
		}
	}
	if (oSender.nodeName != 'A') {
		return;
	}
	el = oSender;
	ratio = 0.1;
	mixColor();
}


function out(e) {
	var oEvent = e ? e : event;
	var oSender = e ? oEvent.target : oEvent.srcElement;
	if (oSender.nodeName == '#text') {
		if (oSender.parentNode && oSender.parentNode.nodeName == 'A') {
			oSender = oSender.parentNode;
		}
	}
	if (oSender.nodeName != 'A') {
		return;
	}
	el = oSender;
	el.style.color = col;
	window.clearTimeout();
	ratio = 0;
}


if (navigator.userAgent.indexOf("Opera") == -1 && navigator.appVersion.indexOf("Mac") == -1) {

	window.onload = function init_links(e) {
		if (e) {
			ff = true;
		}
		if (document.links) {
			
			if (document.styleSheets.length > 1) {
				if (ff) {
					var css = document.styleSheets[1].cssRules;
				} else {
					var css = document.styleSheets[1].rules;
				}

				for (var i in css) {
					if (css[i].selectorText == "a" || css[i].selectorText == "A") {
						col = css[i].style.color;
						//alert(col);

						if (ff) {
							r1 = parseInt(col.substr(4, col.indexOf(',')-4));
							g1 = parseInt(col.substr(col.indexOf(',')+1, col.lastIndexOf(',') - col.indexOf(',')));
							b1 = parseInt(col.substr(col.lastIndexOf(',')+1, col.indexOf(')') - col.lastIndexOf(',')));
						} else {
							r1 = Number("0x" + col.substr(1, 2));
							g1 = Number("0x" + col.substr(3, 2));
							b1 = Number("0x" + col.substr(5, 2));
						}
						//alert(r1 + " " + g1  + " " + b1);
						break;
					}
				}
			}
		}

		var l = document.links;
		var len = l.length;
		for (i=0; i<len; i++) {	

			if (ff) {
				l[i].addEventListener('mouseover', over, false);
				l[i].addEventListener('mouseout', out, false);
			} else {
				oldf = l[i].onmouseover;
				if (typeof l[i].onmouseover != 'function') {
					l[i].onmouseover = over;
				} else {
					l[i].attachEvent('onmouseover', oldf);
					//l[i].attachEvent('onmouseover', over);
				}
				oldf = l[i].onmouseout;
				if (typeof l[i].onmouseout != 'function') {
					l[i].onmouseout = out;
				} else {
					l[i].attachEvent('onmouseover', oldf);
					//l[i].attachEvent('onmouseover', out);
				}
			}
		}

	};
}
