var fader = new Array(), fadeQ = new Array();
var RGB = new Array(256), k = 0, hex = ["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];
for (var i = 0; i < 16; i++) for (var j = 0; j < 16; j++) RGB[k++] = hex[i] + hex[j];

function fadeObj(number, id, colOff, colOn, spdIn, spdOut, def) {
  this.number = number;
  this.id = id;
  this.colOff = [parseInt(colOff.substr(0, 2), 16), parseInt(colOff.substr(2, 2), 16), parseInt(colOff.substr(4, 2), 16)];
  this.colOn = [parseInt(colOn.substr(0, 2), 16), parseInt(colOn.substr(2, 2), 16), parseInt(colOn.substr(4, 2), 16)];
  this.colNow = [parseInt(colOff.substr(0, 2), 16), parseInt(colOff.substr(2, 2), 16), parseInt(colOff.substr(4, 2), 16)];
  this.spdIn = spdIn;
  this.spdOut = spdOut;
  this.def = def;
  this.direction = false;
  this.active = false;
  this.message = new Array();
  this.messageNow = 0;
}

function fadeCmd(number, message, direction) {
  this.number = number;
  this.message = message;
  this.direction = direction;
}

function fade(number, message, direction) {
  if (fader[number].def && fader[number].messageNow == 0 && fader[number].direction) {
    fadeQ[fadeQ.length] = new fadeCmd(number, 0, false);
    fadeQ[fadeQ.length] = new fadeCmd(number, message, direction);
    message = 0;
    direction = false;
  } else fadeQ[fadeQ.length] = new fadeCmd(number, message, direction);
  setTimeout("fadeBegin(" + number + ");", 20);
}

function fadeBegin(number) {
  for (var x = 0; x < fadeQ.length; x++) {
    for (var y = x + 1; y < fadeQ.length; y++) {
      if (fadeQ[x].number == fadeQ[y].number && fadeQ[x].message == fadeQ[y].message && fadeQ[x].direction != fadeQ[y].direction) {
        fadeQ.splice(x, 1);
        fadeQ.splice(y - 1, 1);
      }
    }
  }
  if (!fader[number].active) {
    for (var x = 0; x < fadeQ.length; x++) {
      if (fadeQ[x].number == number && fadeQ[x].direction != fader[number].direction) {
        var del = fadeQ.splice(x, 1);
        setTimeout("fadeEng(" + number + ", " + del[0].message + ", " + del[0].direction + ");", 0);
        break;
      }
    }
  }
}

function fadeEng(number, message, direction) {
  if (!fader[number].active) {
    fader[number].active = true;
    fader[number].direction = direction;
    fader[number].messageNow = message;
    document.getElementById(fader[number].id).innerHTML = fader[number].message[message];
  }
  var iniCol = (direction) ? fader[number].colOff : fader[number].colOn;
  var endCol = (direction) ? fader[number].colOn : fader[number].colOff;
  var incCol = fader[number].colNow;
  var spd = (direction) ? fader[number].spdIn : fader[number].spdOut;
  for (var x = 0; x < 3; x++) {
    var incr = (endCol[x] - iniCol[x]) / spd;
    incCol[x] = (incr < 0) ? Math.max(incCol[x] + incr, endCol[x]) : Math.min(incCol[x] + incr, endCol[x]);
  }
  document.getElementById(fader[number].id).style.color = "#" + RGB[parseInt(incCol[0])] + RGB[parseInt(incCol[1])] + RGB[parseInt(incCol[2])];
  if (incCol[0] == endCol[0] && incCol[1] == endCol[1] && incCol[2] == endCol[2]) {
    fader[number].active = false;
    for (var x = 0; x < fadeQ.length; x++) {
      if (fadeQ[x].number == number) {
        var del = fadeQ.splice(x, 1);
        setTimeout("fadeEng(" + number + ", " + del[0].message + ", " + del[0].direction + ");", 0);
        return false;
      }
    }
    if (!direction) {
      if (fader[number].def) {
        setTimeout("fadeEng(" + number + ", 0, true);", 0);
      } else document.getElementById(fader[number].id).innerHTML = "&nbsp;";
    }
  } else setTimeout("fadeEng(" + number + ", " + message + ", " + direction + ");", 0);
}




function throbFade() {
  fade(2, Math.floor(throbStep / 2), (throbStep % 2) ? false : true);
  setTimeout("throbFade();", (throbStep % 2) ? 100 : 9000);
  if (++throbStep > fader[2].message.length * 2 - 1) throbStep = 0;
}

fader[2] = new fadeObj(2, 'fade', '384A4C', '003366', 30, 30, false);
fader[2].message[0] = "<i>\"Peter's insightful musical intelligence makes recording a cappella a holistic musical experience. That intuitiveness shines through in his engineering. Songs claim their emotion and conviction.\"</i> (Josi Henderson UO Divisi, 02 – 06' Business Manager)";
fader[2].message[1] = "<i>\"Peter Hollens is a joy to work with. He demonstrates patience and empathy as an engineer, while consistently striving for excellence. His hard work stems from a raw passion for music, and most notably, the art of song.\"</i> (Lisa Forkish UO Divisi,  02' – 06' Music Director)";
fader[2].message[2] = "<i>\"Kyrie from University of Oregon's On the Rocks, featuring Pete Hollens on the solo — is definitely one of, and may even be THE single best a cappella cover I have ever heard, professional, collegiate or otherwise. Perfectly sung, wonderfully arranged, great energy, great VP, fabulous production, just a hands-down masterpiece. Bravo.\"</i> (Elie Landau – RARB reviewer, Manager of \"Spamalot\" on Broadway)";
fader[2].message[3] = "<i>\"Peter is truly dedicated to doing the best work possible.  He combines excellent drive and efficiency, close attention to detail, creativity and charm.  Not only is he extremely skilled, but he makes the entire experience  fun too.\"</i> (Music Director of the Yale Whiffenpoofs)";

var throbStep = 0;
setTimeout("throbFade();", 1000);
