//<![CDATA[
var speed = 20; // milliseconds between each step of transition
var steps = 20; // amount to + or - by each step of transition
var fadeToText = "ffffff"; // color for text to fade to
var fadeToCell = "98ACB8"; // color for cell to fade to
var origText = "666666"; // original text color
var origCell = "ffffff"; // original cell color
var newBorder = "56789a"; // border hover color
var origBorder = "99aaff"; // original border color

dC21 = new Array(hextodec(origText.substring(0, 2)),hextodec(origText.substring(2, 4)),hextodec(origText.substring(4, 6)));
dC22 = new Array(hextodec(fadeToText.substring(0, 2)),hextodec(fadeToText.substring(2, 4)),hextodec(fadeToText.substring(4, 6)));


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 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;
  }

mode = true;

function setColor(r,g,b,what) {
  var hr = hex(r); var hg = hex(g); var hb = hex(b);
  var daColor = "#"+hr+hg+hb
  if(mode){
           daEl.style.backgroundColor = daColor;
           mode = false;
  }
  else{
          if(dC21[0] < dC22[0]) dC21[0] += step;
          if(dC21[0] > dC22[0]) dC21[0] -= step;
          if(dC21[1] < dC22[1]) dC21[1] += step;
          if(dC21[1] > dC22[1]) dC21[1] -= step;
          if(dC21[2] < dC22[2]) dC21[2] += step;
          if(dC21[2] > dC22[2]) dC21[2] -= step;
          dC2B = "RGB(" + dC21[0] + "," + dC21[1] + "," + dC21[2] + ")";
          daEl.style.color = dC2B;
          mode = true;
  }       
  if (daColor == colorend.toLowerCase()) {
    dC21[0] = hextodec(origText.substring(0, 2));
    dC21[1] = hextodec(origText.substring(2, 4));
    dC21[2] = hextodec(origText.substring(4, 6));
    dC2B = "RGB(" + dC22[0] + "," + dC22[1] + "," + dC22[2] + ")";
    daEl.style.color = dC2B;
    clearInterval(iId)
    iId = null
    timerRunning = false
    mode = true
  }
}

function fade(what) {
  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)),
    what);
}
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 orig(tc){
         dC21[0] = hextodec(origText.substring(0, 2));
         dC21[1] = hextodec(origText.substring(2, 4));
         dC21[2] = hextodec(origText.substring(4, 6));
         tc.style.backgroundColor = "#" + origCell;
         tc.style.borderColor = "#" + origBorder;
         tc.style.color = "#" + origText;
}
function cellover1(tc) {
  orig(tc);
  colorNow = "#" + origCell;
  colorTo = "#" + fadeToCell;
  myfade(tc,colorNow,colorTo,speed,steps)
  tc.style.borderColor = "#" + newBorder;
}
function cellout1(tc) {
  clearInterval(iId)
  tc.style.borderColor = "#" + origBorder;
  orig(tc);
}
//]]>
