var i
var iId = null
var sr, sg, sb
var er, eg, eb
var colorstart
var colorend
var daEl
var timerRunning = false

//	Customize these settings
var interval			= 10
var step				= 16
var fromColorDefault 	= "#EEEEEE"
var toColorDefault		= "#DFDFDF";

function myfade(el,cs,ce,iv,st) {
	daEl = el
	colorstart = cs
	colorend = ce
	interval = iv
	step = st
	i = 0
	if (timerRunning) {
		clearInterval(iId)
		iId = null
	}
	var myRe = /#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i
	if (colorstart.match(myRe)) {
		sr = hextodec(RegExp.$1)
		sg = hextodec(RegExp.$2)
		sb = hextodec(RegExp.$3)
	}
	if (colorend.match(myRe)) {
		er = hextodec(RegExp.$1)
		eg = hextodec(RegExp.$2)
		eb = hextodec(RegExp.$3)
	}
	timerRunning = false;
	iId = setInterval("fade()",interval)
	timerRunning = true;
}
function cellover(table_cell,fromColor,toColor,intrv,theStep) {
	// play around with these values
	// element, from_color, to_color, interval(milliseconds), transition steps
	//alert(fromColor + " => " + toColor)
	fromColor	= (fromColor != '')	? fromColor		: fromColorDefault;
	toColor		= (toColor != '')	? toColor		: toColorDefault;

	intrv		= (intrv != '')		? intrv			: interval;
	theStep		= (theStep != '')	? theStep		: step;

	myfade(table_cell,fromColor,toColor,interval,step)
}
function cellout(table_cell,basedColor) {
	if (timerRunning) {
		clearInterval(iId)
		iId = null
	}
	basedColor	= (basedColor != '')	? basedColor	: fromColorDefault;
	//table_cell.style.backgroundColor = basedColor
	document.getElementById(table_cell).style.backgroundColor = basedColor
}




function makearray(n) {
	this.length = n;
	for(var i = 1; i <= n; i++)
		this[i] = 0;
	return this;
}
function hex(i) {
	if (i < 0)	  return "00";
	else if (i > 255) return "ff";
	else		  return "" + hexa[Math.floor(i/16)] + hexa[i%16];
}
function hexnumtodec(hexchar) {
	if (parseInt(hexchar) == hexchar) return Number(hexchar)
	hexchar = hexchar.toUpperCase()
	switch (hexchar) {
		case 'A': return 10; break;
		case 'B': return 11; break;
		case 'C': return 12; break;
		case 'D': return 13; break;
		case 'E': return 14; break;
		case 'F': return 15; break;
	}
}
function hextodec(daHex) {
	var daDec = Number((16 * hexnumtodec(daHex.substring(0,1))) + hexnumtodec(daHex.substring(1,2)))
	return daDec
}

function setColor(r,g,b) {
	var hr = hex(r); var hg = hex(g); var hb = hex(b);
	var daColor = "#"+hr+hg+hb
	//daEl.style.backgroundColor = daColor
	document.getElementById(daEl).style.backgroundColor = daColor
	if (daColor == colorend.toLowerCase()) {
		clearInterval(iId)
		iId = null
		timerRunning = false
	}
}

function fade() {
	i++
	setColor(
		Math.floor(sr * ((step-i)/step) + er * (i/step)),
		Math.floor(sg * ((step-i)/step) + eg * (i/step)),
		Math.floor(sb * ((step-i)/step) + eb * (i/step)));
}
hexa = new makearray(16);
for(var i = 0; i < 10; i++)
	hexa[i] = i;
hexa[10]="a"; hexa[11]="b"; hexa[12]="c";
hexa[13]="d"; hexa[14]="e"; hexa[15]="f";