/*
Code to let your background flicker according to time-based rules.
- sbl
*/

// change flicker speed (ms)
setInterval("Timer()", 111); 

function Timer() {
	var date, hour;
	
	date = new Date();
	hour = date.getHours();
	
	if(hour<12){
		bright=hour/12.0;
		document.bgColor= HSBtoRGB(Math.floor(Math.random()*360),Math.random(), bright);
	}else	{ 
		bright=1.0-	((hour-12.0)/12.0);
		document.bgColor= HSBtoRGB(Math.floor(Math.random()*360),Math.random(), bright);
	};
}

function HSBtoRGB(hue1,sat1,v) { //from Michael Bostock's Color Picker II
  var red1;
  var green1;
  var blue1;
  var i;
  var f, p, q, t;
  if(sat1 == 0)
  {
    red1 = green1 = blue1 = Math.floor(v*255);
  }
  else
  {
    hue1 /= 60;
    i = Math.floor(hue1);
    f = hue1-i;
    p = v*(1-sat1);
    q = v*(1-sat1*f);
    t = v*(1-sat1*(1-f));
    switch(i) {
    case 0:
      red1 = v;
      green1 = t;
      blue1 = p;
      break;
    case 1:
      red1 = q;
      green1 = v;
      blue1 = p;
      break;
    case 2:
      red1 = p;
      green1 = v;
      blue1 = t;
      break;
    case 3:
      red1 = p;
      green1 = q;
      blue1 = v;
      break;
    case 4:
      red1 = t;
      green1 = p;
      blue1 = v;
      break;
    default:
      red1 = v;
      green1 = p;
      blue1 = q;
      break;
    }
  }
  var redhex = dec2hex(Math.floor(red1*255))
  var greenhex = dec2hex(Math.floor(green1*255))
  var bluehex = dec2hex(Math.floor(blue1*255))
  var rgbhex = redhex + greenhex + bluehex
  return rgbhex;
}

function dec2hex(DecNum) { // Works with decimals from 0 - 255
  var hNum = new Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F");
  var leftNum = Math.floor(DecNum / 16);
  var leftNumH = hNum[leftNum];
  var rightNum = DecNum%16;
  var rightNumH = hNum[rightNum];
  var HexNum = leftNumH + rightNumH;
  return HexNum;
}