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

   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";

var i

var iId = null

var sr, sg, sb

var er, eg, eb

var interval = 1

var step = 16

var colorstart

var colorend

var daEl

var timerRunning = false

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 cellover1(table_cell1) {

   // play around with these values

   // element, from_color, to_color, interval(milliseconds), transition steps

   myfade(table_cell1,'#ace6fe','#ffffff',20,32)

}

function cellout1(table_cell1) {

   if (timerRunning) {

      clearInterval(iId)

      iId = null

   }

   table_cell1.style.backgroundColor = '#fffff0'

}

function cellover2(table_cell2) {

   // play around with these values

   // element, from_color, to_color, interval(milliseconds), transition steps

   myfade(table_cell2,'#ace6fe','#ffffff',20,32)

}

function cellout2(table_cell2) {

   if (timerRunning) {

      clearInterval(iId)

      iId = null

   }

   table_cell2.style.backgroundColor = "#ddeeff"

}