/**
 * @author Firejune <to [at] firejune [dot] com>
 * @license MIT-style license.
 * @copyright 2007 FireJune
 * @version 0.1.1b
 * @url http://firejune.com/
 * 
 */

var Blisket = {
  initialize: function(){
    this.lyr = new Array();
    this.NUMLAYERS = 3;
    this.isMSIE6 = (/MSIE 6/.test(navigator.userAgent) && !this.isOpera);
    this.background = document.getElementById('background');
    
    this.hue = parseInt(Math.random() * 360);
    this.sat = 0.89;
    this.bri = 0.48;

    for(var i = 0; i < this.NUMLAYERS; i++) {
      var d = document.createElement('div');

      if (this.isMSIE6)
        d.innerHTML = '<img src="http://wiki.firejune.com/pub/skins/firejune/css/blank.gif" width="4096" height="200" style="width:4096px; height:200px; '
                      + 'filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'http://wiki.firejune.com/pub/skins/firejune/img/bgw-ie.png\', ,sizingMethod=\'scale\');">';
      else 
        d.style.background = 'url(http://wiki.firejune.com/pub/skins/firejune/img/bgw.png) repeat-x scroll ' + parseInt(Math.random() * 1600) + 'px 0';

      d.style.top = parseInt(Math.random() * 60) - 30 + 'px';
      this.lyr[i] = new Object();
      this.lyr[i].obj = d;
      this.lyr[i].speed = (Math.random() * 6) - 3;

      if (this.lyr[i].speed < 0) this.lyr[i].x = -100;
      else this.lyr[i].x = -4096;

      this.background.appendChild(d);
    }
    this.loop();
  },

  loop: function() {
    for(var i = 0; i < Blisket.NUMLAYERS; i++) {
      Blisket.lyr[i].x += Blisket.lyr[i].speed;
      if (Blisket.isMSIE6) {
        if (Blisket.lyr[i].x < -4096) Blisket.lyr[i].x = 1920;
        else if (Blisket.lyr[i].x > 1920) Blisket.lyr[i].x = -4096
        Blisket.lyr[i].obj.style.left = parseInt(Blisket.lyr[i].x) + 'px';
      } else Blisket.lyr[i].obj.style.backgroundPosition = parseInt(Blisket.lyr[i].x) + 'px 0';
    }
    Blisket.hue += 0.1;
    if (Blisket.hue >= 360) Blisket.hue -= 360;
    Blisket.background.style.backgroundColor = '#' + Blisket.HSBtoRGB(Blisket.hue, Blisket.sat, Blisket.bri);
    setTimeout(Blisket.loop, 50);
  },

  dec2hex: function(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 = parseInt(Math.floor(DecNum / 16));
    var leftNumH = hNum[leftNum];
    var rightNum = DecNum%16;
    var rightNumH = hNum[rightNum];
    var HexNum = leftNumH + rightNumH;
    return HexNum;
  },
  
  HSBtoRGB: function(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 = this.dec2hex(Math.floor(red1*255))
    var greenhex = this.dec2hex(Math.floor(green1*255))
    var bluehex = this.dec2hex(Math.floor(blue1*255))
    var rgbhex = redhex + greenhex + bluehex
    return rgbhex;
  }
};

Blisket.initialize();
