var bStart = true;
var hexAlphabet = new Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F");
var colorA = new Array("#FF0065","#820000","#DA000E","#FF1B00","#CD0009","#E90042");
var intA = new Array(1,2,3,4,5,6);
var objFaderArray = new Array();

function fadeObj(numSteps,startingRed,startingGreen,startingBlue,endingRed,endingGreen,endingBlue,deltaRed,deltaGreen,deltaBlue,currentRed,currentGreen,currentBlue,currentStep,timerID) {
  this.numSteps      = numSteps;
  this.startingRed   = startingRed;
  this.startingGreen = startingGreen;
  this.startingBlue  = startingBlue;
  this.endingRed     = endingRed;
  this.endingGreen   = endingGreen;
  this.endingBlue    = endingBlue;
  this.deltaRed      = deltaRed;
  this.deltaGreen    = deltaGreen;
  this.deltaBlue     = deltaBlue;
  this.currentRed    = currentRed;
  this.currentGreen  = currentGreen;
  this.currentBlue   = currentBlue;
  this.currentStep   = currentStep;
  this.timerID       = timerID;
}

function startFadeDec(id,objElem,startR, startG, startB, endR, endG, endB, nSteps) {
  if (objElem == null) return;
  var currentRed   = parseInt(startR, 10);
  var currentGreen = parseInt(startG, 10);
  var currentBlue  = parseInt(startB, 10);
  var endRed       = parseInt(endR, 10);
  var endGreen     = parseInt(endG, 10);
  var endBlue      = parseInt(endB, 10);
  var deltaRed     = (endRed - currentRed) / nSteps;
  var deltaGreen   = (endGreen - currentGreen) / nSteps;
  var deltaBlue    = (endBlue - currentBlue) / nSteps;
  var numSteps     = parseInt(nSteps, 10);
  objFaderArray[id] = new fadeObj(numSteps,currentRed,currentGreen,currentBlue,endRed,endGreen,endBlue,deltaRed,deltaGreen,deltaBlue,currentRed,currentGreen,currentBlue,0,0);
  fade(id,objElem);
}

function fade(id,elemName) {
  var objElem = document.getElementById(elemName);
  if (objElem == null) return;
  var ntimerID;
  with (objFaderArray[id]) {
    currentStep++;
    if (currentStep <= numSteps) {
      // convert to hex
      var hexRed   = decToHex(currentRed);
      var hexGreen = decToHex(currentGreen);
	  var hexBlue  = decToHex(currentBlue);
  	  objElem.style.backgroundColor = "#" + hexRed + "" + hexGreen + "" + hexBlue + "";
  	  // change color
	  currentRed   += deltaRed;
	  currentGreen += deltaGreen;
	  currentBlue  += deltaBlue;
  	  timerID = setTimeout("fade(" + id + ",'" + elemName + "')", 200);
  	} else
  	{
  	  objFaderArray[id] = "";
  	  if (id==5) {
  	    if (bStart) {
  	      ntimerID = setTimeout("changeCellColor()", 10)
  	    } else {
  	      ntimerID = setTimeout("changeCellColor()", 50)
  	    }
  	  }
  	}
  }
}

function decToHex(decNum) {
	decNum=Math.floor(decNum);
	var decString = "" + decNum;
	for (var i=0; i<decString.length; i++)
	{
	  if (decString.charAt(i)>='0' && decString.charAt(i)<='9') {
	  } else {
		alert(decString + " ist keine Dezimalzahl, weil folgendes Zeichen enthalten ist " + decString.charAt(i));
 		return decNum;
	  }
	}
	var result = decNum;
	var remainder = "";
	var hexNum = "";
	while (result > 0) {
	  result = Math.floor(decNum/16);
	  remainder = decNum % 16;
	  decNum = result;
	  hexNum = "" + hexAlphabet[remainder] + "" + hexNum;
	}
	if (hexNum.length==1)
	  hexNum="0"+hexNum;
	else if (hexNum.length==0)
	  hexNum="00";
	return hexNum;
}   

function changeCellColor() {
  if (bStart) {
    bStart = false;
	startFadeDec(0,"divcolor" + intA[0],"255","0","101","206","0","15",30);
    startFadeDec(1,"divcolor" + intA[1],"130","0","0","206","0","15",30);
    startFadeDec(2,"divcolor" + intA[2],"218","0","14","206","0","15",30);
    startFadeDec(3,"divcolor" + intA[3],"255","27","0","206","0","15",30);
    startFadeDec(4,"divcolor" + intA[4],"205","0","9","206","0","15",30);
    startFadeDec(5,"divcolor" + intA[5],"233","0","66","206","0","15",30);
    changeIntA();
  } else {
    bStart = true;
	startFadeDec(0,"divcolor" + intA[0],"206","0","15","255","0","101",30);
    startFadeDec(1,"divcolor" + intA[1],"206","0","15","130","0","0",30);
    startFadeDec(2,"divcolor" + intA[2],"206","0","15","218","0","14",30);
    startFadeDec(3,"divcolor" + intA[3],"206","0","15","255","27","0",30);
    startFadeDec(4,"divcolor" + intA[4],"206","0","15","205","0","9",30);
    startFadeDec(5,"divcolor" + intA[5],"206","0","15","233","0","66",30);    
  }
}

function changeIntA() {
  var newA = new Array();
  var intN, rnd;
  while (intA.length > 0) {
    rnd = Math.floor(Math.random() * intA.length);
    intN = intA[rnd];
    intA.splice(rnd, 1);
    newA.push(intN);
  }
  intA = newA;
}

function setCellColor() {
  var elem;
  for (cl=1;cl<6;cl++) {
    elem = document.getElementById("divcolor" + cl);
    if (elem != null) elem.style.backgroundColor = colorA[cl-1];
  }
}

function startEffects() {
  setCellColor();
  changeCellColor();
}
