/*****
Image Cross Fade Redux
Version 1.0
Last revision: 02.15.2006
steve@slayeroffice.com
Please leave this notice intact. 
*****/



// do the init call after loading the page
// (figure out which type to do)
window.addEventListener ?
  window.addEventListener("load",xfadeInit,false)
  : window.attachEvent("onload",xfadeInit);

var divs = new Array(), xfadeCur = 0, xfadeNext = 0;
var divsXOpacity = new Array();

function xfadeInit() {
  if(!document.getElementById || !document.createElement)return;

  // get all the images in the container DIV
  var _divs = new Array();
  _divs = document.getElementById("xfadeDiv").getElementsByTagName("div");

  var divsCnt = 0;
  for(i=1; i<_divs.length; i++) {
    if (_divs[i].id) {
      divs[divsCnt++] = _divs[i];
    }
  }

  // set all the images to be 0 opacity
  for(i=1; i<divs.length; i++) {
    divsXOpacity[i] = 0;
  }
  document.getElementById(divs[0].id).style.display = "block";
  divsXOpacity[0] = .99;
}

function xfadeStart() {
  // return if already got the right pic
  if (xfadeCur == xfadeNext) {
    if ((xfadeCur == 0 && divsXOpacity[0] >= .99) || (xfadeCur != 0)) {
      return;
    }
  }

  var nOpacity  = 0;

  for (i = 0; i < divs.length; i++) {
    // fade the next guy in...
    if (i == xfadeNext) {
      document.getElementById(divs[i].id).style.display  = "block";
      nOpacity    = divsXOpacity[i];
      if (nOpacity < .99) {
        nOpacity    += .05;
        divsXOpacity[i]  = nOpacity;
      }
    }
    // fade everyone else out...
    else {
      if (divsXOpacity[i] > 0) {
        divsXOpacity[i]  = divsXOpacity[i] - .05;
      } else {
        document.getElementById(divs[i].id).style.display = "none";
      }
    }
    setOpacity(i);
  }

  var doneCnt  = 0;
  for (i = 0; i < divs.length; i++) {
    if (i == xfadeNext) {
      if (divsXOpacity[i] >= .99) {
        doneCnt++;
      }
    } else {
      if (divsXOpacity[i] <= 0) {
        doneCnt++;
      }
    }
  }

  // done means next guy is full opacity, everyone else is 0
  if (doneCnt == divs.length) {
    xfadeCur = xfadeNext;
    clearInterval(xfadeTimer);
    xfadeTimer	= 0;
  }
  
  function setOpacity(idx) {
    if (divsXOpacity[idx] > .99) {
      divsXOpacity[idx] = .99;
      return;
    }
    document.getElementById(divs[idx].id).style.opacity  	= divsXOpacity[idx];
    document.getElementById(divs[idx].id).style.MozOpacity  	= divsXOpacity[idx];
    document.getElementById(divs[idx].id).style.filter  	= "alpha(opacity=" + (divsXOpacity[idx] * 100) + ")";
  }
}

var xfadeTimer    	= 0;
var xfadeTimerIn    	= 0;
var xfadeTimerOut    	= 0;
var xfadeInDiv		= "";

function _xfadeIn(divName) {
  for(i=0; i < divs.length; i++) {
    if (divs[i].id == xfadeInDiv) {
      xfadeCur  = xfadeNext;
      xfadeNext  = i;
    }
  }
  if (!xfadeTimer) {
    xfadeTimer = setInterval("xfadeStart()", 20);
  }
}

function xfadeIn(divName) {
  if (xfadeTimerIn) {
    clearTimeout(xfadeTimerIn);
    xfadeTimerIn = 0;
  }
  xfadeInDiv	= divName;
  xfadeTimerIn  = setTimeout("_xfadeIn()", 15);
}

// the real fade-outer...
function _xfadeOut() {
  xfadeCur  = xfadeNext;
  xfadeNext  = 0;
  if (!xfadeTimer) {
    xfadeTimer = setInterval("xfadeStart()", 20);
  }
}

// fade-out wrapper
function xfadeOut() {
  if (xfadeTimerOut) {
    clearTimeout(xfadeTimerOut);
    xfadeTimerOut = 0;
  }
  xfadeTimerOut  = setTimeout("_xfadeOut()", 10);
}

function debugMessage (str) {
  //document.getElementById("debugDiv").innerHTML = str + "<br>" + document.getElementById("debugDiv").innerHTML;
}

