
// main function to process the fade request //
function colorFade(id, element, start, end, steps, speed) {
	var startrgb, endrgb, er, eg, eb, step, rint, gint, bint, step;
	var target = document.getElementById(id);
	steps = steps || 20;
	speed = speed || 20;
	clearInterval(target.timer);
	endrgb = colorConv(end);
	er = endrgb[0];
	eg = endrgb[1];
	eb = endrgb[2];
	//if(!target.r) {
	startrgb = colorConv(start);
	r = startrgb[0];
	g = startrgb[1];
	b = startrgb[2];
	target.r = r;
	target.g = g;
	target.b = b;
	//}
	rint = Math.round(Math.abs(target.r - er) / steps);
	gint = Math.round(Math.abs(target.g - eg) / steps);
	bint = Math.round(Math.abs(target.b - eb) / steps);
	if (rint == 0) { rint = 1 }
	if (gint == 0) { gint = 1 }
	if (bint == 0) { bint = 1 }
	target.step = 1;
	target.timer = setInterval(function () { animateColor(id, element, steps, er, eg, eb, rint, gint, bint) }, speed);
}

// incrementally close the gap between the two colors //
function animateColor(id, element, steps, er, eg, eb, rint, gint, bint) {
	var target = document.getElementById(id);
	var color;
	if (target.step <= steps) {
		var r = target.r;
		var g = target.g;
		var b = target.b;
		if (r >= er) {
			r = r - rint;
		} else {
			r = parseInt(r) + parseInt(rint);
		}
		if (g >= eg) {
			g = g - gint;
		} else {
			g = parseInt(g) + parseInt(gint);
		}
		if (b >= eb) {
			b = b - bint;
		} else {
			b = parseInt(b) + parseInt(bint);
		}
		color = 'rgb(' + r + ',' + g + ',' + b + ')';
		if (element == 'background') {
			target.style.backgroundColor = color;
		} else if (element == 'border') {
			target.style.borderColor = color;
		} else {
			target.style.color = color;
		}
		target.r = r;
		target.g = g;
		target.b = b;
		target.step = target.step + 1;
	} else {
		clearInterval(target.timer);
		color = 'rgb(' + er + ',' + eg + ',' + eb + ')';
		if (element == 'background') {
			target.style.backgroundColor = color;
		} else if (element == 'border') {
			target.style.borderColor = color;
		} else {
			target.style.color = color;
		}
	}
}

// convert the color to rgb from hex //
function colorConv(color) {
	var rgb = [parseInt(color.substring(0, 2), 16),
	parseInt(color.substring(2, 4), 16),
	parseInt(color.substring(4, 6), 16)];
	return rgb;
}
