/**
 * @author   Thomas
 * --------------------
 * @by       slem
 * @at       2009.01.19
 * @what     homepage promo functions and vars
             You might find the resemblance in the fade part of the homepage banner, this cade however wil change due time and I wich to avoid nasty suprises and writing hundreds of exeptions.
 * --------------------
 */



function fadePromos(toPos, direction)
{
 focusBox(toPos, direction);
 focusPromo(toPos, direction);
}



//set the initial vars
var promoFadeTotalFrames;
var promoFadeFrameCount;
var promoFadeTPF;
var promoFadeStepSize  = new Array();
var promoFadeDirection = new Array();
var promoFadeCurrent   = new Array();
var promoFadeDivs      = new Array();
var promoFadeStart     = new Array();
var promoFadeStop      = new Array();
var promoCurrPos       = 0;
var promoCurrFadeState = 1;
var promoFocus         = 0;
var promoInterval;

function focusPromo(toPos, direction)
{
 if(toPos != promoFocus)
 {
  clearInterval(promoInterval);
  var promoFadeFPS   = 25;
  var promoFadeTime  = 1000;

  promoFadeDivs[0]   = 'promoOld';
  promoFadeStart[0]  = promoCurrFadeState;
  promoFadeStop[0]   = 0;
  promoFadeDivs[1]   = 'promoNew';
  promoFadeStart[1]  = 0;
  promoFadeStop[1]   = 100;

  document.getElementById(promoFadeDivs[0]).innerHTML             = (direction == 'in')?((promoFocus)?document.getElementById("promoContent"+promoFocus).innerHTML:document.getElementById("promoContent"+promoCurrPos).innerHTML):document.getElementById("promoContent"+toPos).innerHTML;
  document.getElementById(promoFadeDivs[0]).style.opacity         = promoCurrFadeState;
  document.getElementById(promoFadeDivs[0]).style.MozOpacity      = promoCurrFadeState;
  document.getElementById(promoFadeDivs[0]).style.KHTMLOpacity    = promoCurrFadeState;
  document.getElementById(promoFadeDivs[0]).style.filter          = "alpha(opacity:"+(promoCurrFadeState*100)+")";
  document.getElementById(promoFadeDivs[0]).style.display         = "block";

  document.getElementById('promoCurrent').style.display           = "none";

  document.getElementById(promoFadeDivs[1]).style.opacity         = 0;
  document.getElementById(promoFadeDivs[1]).style.MozOpacity      = 0;
  document.getElementById(promoFadeDivs[1]).style.KHTMLOpacity    = 0;
  document.getElementById(promoFadeDivs[1]).style.filter          = "alpha(opacity:0)";
  document.getElementById(promoFadeDivs[1]).style.display         = "block";
  document.getElementById(promoFadeDivs[1]).innerHTML             = (direction == 'in')?document.getElementById("promoContent"+toPos).innerHTML:((promoFocus)?document.getElementById("promoContent"+promoFocus).innerHTML:document.getElementById("promoContent"+promoCurrPos).innerHTML);

  if (promoFocus)
  {
   document.getElementById('promoWhitelayer').style.display       = "block";
  }
//Start the fade effects
  promoFadeTotalFrames      = (promoFadeTime/1000)*promoFadeFPS;  // total number of frame runs
  promoFadeTPF              = 1000 / promoFadeFPS ;               // time for each frame run
  promoFadeFrameCount       = 1;                                  // current frame count
  var i = 0;
  for (i in promoFadeDivs)
  {
   promoFadeStepSize[i]     = Math.abs(promoFadeStart[i] - promoFadeStop[i])/promoFadeTotalFrames;
   promoFadeDirection[i]    = (promoFadeStart[i] > promoFadeStop[i]) ? 1 : -1;
   promoFadeCurrent[i]      = promoFadeStart[i];
  }
  promoInterval = setInterval ('fadePromo("'+promoFadeFPS+'","'+promoFadeTime+'","'+toPos+'","'+direction+'")',promoFadeTPF);
 }
}

function fadePromo(promoFadeFPS,promoFadeTime,toPos,direction)
{
 if ((promoFadeTotalFrames+1) > promoFadeFrameCount)
 {
  promoFadeFrameCount++;
  var i = 0;
  promoCurrFadeState = promoFadeCurrent[0]/100;
  for (i in promoFadeDivs)
  {
   if (promoFadeCurrent[i] != promoFadeStop[i])
   {
    promoFadeCurrent[i] = promoFadeCurrent[i] -(promoFadeStepSize[i] * promoFadeDirection[i]);
    if(document.getElementById('promoCurrent'))
    {
     document.getElementById(promoFadeDivs[i]).style.opacity = promoFadeCurrent[i]/100;
     document.getElementById(promoFadeDivs[i]).style.MozOpacity = promoFadeCurrent[i]/100;
     document.getElementById(promoFadeDivs[i]).style.KHTMLOpacity = promoFadeCurrent[i]/100;
     document.getElementById(promoFadeDivs[i]).style.filter = "alpha(opacity:"+promoFadeCurrent[i]+")";
    }
   }
  }
 }
 else
 {
  promoCurrFadeState = 100;
  clearInterval(promoInterval);
  promoFadeWrapIt(toPos,direction);
 }
}

function  promoFadeWrapIt(toPos,direction)
{
 if(document.getElementById('promoCurrent'))
 {
//scroll to the right position
  document.getElementById('promoContent'+promoCurrPos).style.display = "none";
//scroll to the right position
  document.getElementById('promoCurrent').innerHTML                  = (direction == 'in')?document.getElementById("promoContent"+toPos).innerHTML:((promoFocus)?document.getElementById("promoContent"+promoFocus).innerHTML:document.getElementById("promoContent"+promoCurrPos).innerHTML);
  document.getElementById('promoCurrent').style.display              = "block";
// clear the overlays
  document.getElementById(promoFadeDivs[0]).innerHTML                = "";
  document.getElementById(promoFadeDivs[1]).innerHTML                = "";
  document.getElementById(promoFadeDivs[0]).style.display            = "none";
  document.getElementById(promoFadeDivs[1]).style.display            = "none";
  document.getElementById(promoFadeDivs[0]).style.opacity            = 0;
  document.getElementById(promoFadeDivs[1]).style.opacity            = 0;
  document.getElementById(promoFadeDivs[0]).style.MozOpacity         = 0;
  document.getElementById(promoFadeDivs[1]).style.MozOpacity         = 0;
  document.getElementById(promoFadeDivs[0]).style.KHTMLOpacity       = 0;
  document.getElementById(promoFadeDivs[1]).style.KHTMLOpacity       = 0;
//close vars
  if (direction == 'uit')
  {
   promoCurrPos         = toPos;
  }
  if (promoFocus)
  {
   document.getElementById('promoWhitelayer').style.display         = "none";
  }
  toPos                = false;
  promoInterval        = false;
  promoFadeTotalFrames = false;
  promoFadeFrameCount  = false;
  promoFadeTPF         = false;
  promoFadeStepSize    = new Array();
  promoFadeDirection   = new Array();
  promoFadeCurrent     = new Array();
  promoFadeDivs        = new Array();
  promoFadeStart       = new Array();
  promoFadeStop        = new Array();
  fadeFPS              = false;
  fadeTime             = false;
  promoInProg          = 0;
 }
}















var boxFadeStart;
var boxFadeStop;
var boxPrevius;
var boxInterval;
var boxFocus;
function focusBox(toPos, direction)
{
 if (toPos != boxFocus)
 {
  clearInterval(boxInterval);
  if (boxPrevius != toPos && boxPrevius && direction == 'in' && boxPrevius != boxFocus)
  {
   document.getElementById("promoOverlayBox"+boxPrevius).style.opacity = 1;
   document.getElementById("promoOverlayBox"+boxPrevius).style.MozOpacity = 1;
   document.getElementById("promoOverlayBox"+boxPrevius).style.KHTMLOpacity = 1;
   document.getElementById("promoOverlayBox"+boxPrevius).style.filter = "alpha(opacity:"+100+")";
  }
  boxPrevius = toPos;

  if (direction == 'in')
  {
   boxFadeStart = 100;
   boxFadeStop  = 40;
   direction = -1;
  }
  else if (direction == 'out')
  {
   boxFadeStart = 40;
   boxFadeStop  = 100;
   direction = 1;
  }
  boxInterval = setInterval ('fadeBox("'+toPos+'","'+direction+'")',12);
 }
}

function fadeBox(toPos, direction)
{
 if ((boxFadeStop < boxFadeStart && direction == -1) || (boxFadeStop > boxFadeStart && direction == 1))
 {
  boxFadeStart = boxFadeStart + (5*direction);
  document.getElementById("promoOverlayBox"+toPos).style.opacity = boxFadeStart/100;
  document.getElementById("promoOverlayBox"+toPos).style.MozOpacity = boxFadeStart/100;
  document.getElementById("promoOverlayBox"+toPos).style.KHTMLOpacity = boxFadeStart/100;
  document.getElementById("promoOverlayBox"+toPos).style.filter = "alpha(opacity:"+boxFadeStart+")";
 }
 else
 {
  clearInterval(boxInterval);
 }
}

function focusPromos(toPos)
{
 if(boxFocus == toPos)
 {
  boxFocus   = 0;
  promoFocus = 0;
 }
 else
 {
  if (boxFocus)
  {
   document.getElementById("promoOverlayBox"+boxFocus).style.opacity = 1;
   document.getElementById("promoOverlayBox"+boxFocus).style.MozOpacity = 1;
   document.getElementById("promoOverlayBox"+boxFocus).style.KHTMLOpacity = 1;
   document.getElementById("promoOverlayBox"+boxFocus).style.filter = "alpha(opacity:"+100+")";
  }
  boxFocus   = toPos;
  promoFocus = toPos;
 }
}


















window.onload = function()
{
 var defaultOpacity = 0.25;
 var timers = new Object();
 var opacity = new Object();
 var speed = 400; /* duration of the fade effect */
 var steps = 20; /* apply new opacity every x miliseconds */
 var opacityStep = (1 - defaultOpacity) / (speed / steps);
 var content = document.getElementById("content");
 var divs = document.getElementById("container").getElementsByTagName("div");
 for (var i = 0; i < divs.length; i++)
 {
  if (divs[i].className == "box")
  {
   var element = divs[i];
   var id = "box-" + i;
   element.id = id;
   setOpacity(id, defaultOpacity);

   addEvent(element, "mouseover", mousedOver(id));
   addEvent(element, "mouseout", function(id) {  return function() { startTimer(id, function() { fadeOutStep(id, defaultOpacity) }, steps); }; }(id) );
  }
 }

 function mousedOver(id)
 {
  return function()
  {
   startTimer(id, function() { fadeInStep(id) }, steps);
   if (!content.hasChildNodes())
   {
    setContent(id);
   }
   else
   {
    startTimer("content", function() { fadeOutStep("content", 0, function() { setContent(id); }) }, steps);
   }
  }
 }

 function setContent(id)
 {
  setOpacity("content", 0);
  content.innerHTML = getBoxContent(id);
  startTimer("content", function() { fadeInStep("content") }, steps);
 }

 function startTimer(id, fn, interval)
 {
  if (timers[id])
  {
   clearInterval(timers[id]);
  }
  timers[id] = setInterval(fn, interval);
 }

 function fadeInStep(id)
 {
  newOpacity = opacity[id] + opacityStep;
  if (newOpacity > 1)
  {
   newOpacity = 1;
   clearInterval(timers[id]);
  }
  setOpacity(id, newOpacity);
 }

 function fadeOutStep(id, target, callback)
 {
  newOpacity = opacity[id] - opacityStep;
  if (newOpacity < target)
  {
   newOpacity = target;
   clearInterval(timers[id]);
   if (callback)
   {
    callback();
   }
  }
  setOpacity(id, newOpacity);
 }

 function setOpacity(id, value)
 {
  element = document.getElementById(id);
  element.style.filter = "alpha(opacity:" +  value * 100 + ")";
  element.style.KHTMLOpacity = value;
  element.style.MozOpacity = value;
  element.style.opacity = value;
  opacity[id] = value;
 }

 function getBoxContent(id)
 {
  var divs = document.getElementById(id).getElementsByTagName("div");
  for (var i = 0; i < divs.length; i++)
  {
   if (divs[i].className == "box-content")
   {
    return divs[i].innerHTML;
   }
  }
  return "";
 }

 function addEvent(obj, evType, fn)
 {
  if (obj.addEventListener)
  {
   obj.addEventListener(evType, fn, false);
   return true;
  }
  else if (obj.attachEvent)
  {
   var r = obj.attachEvent("on"+evType, fn);
   return r;
  }
  else
  {
   return false;
  }
 }
}