/*****
Script for OEBB.at by WIENFLUSS.net
Originally based on Image Cross Fade Redux (steve@slayeroffice.com)
*****/

addEvent(window,"load",so_init);

// settings for your implementation
var defaultTimeout = 5000;           // [ms] Zeit zwischen den Transitions
var xfadeStep = 20;                 // [ms] Geschwindigkeit der Transition
var classHidden = "hiddenteaser";   // CSS Class for hidden Elements
var classShow = "teaserShow"; 
var listID = "teaser";              // ID of UL
var startID = "startteaser";        // ID of start control
var stopID = "stopteaser";          // ID of stop control
var controlsID = "controls";        // ID of controls Box

var d=document, imgs = new Array(), anchors = new Array(), lis = new Array();
var controls, start, stop, stopped=false, initialized=false;
var zInterval=null, current=0, actIndex=-1, pause=false, imgtrans=false;

function so_init() {
  if (initialized) return;
  else initialized = true;
  
  if(!d.getElementById || !d.createElement) return;

  imgs = d.getElementById(listID).getElementsByTagName("img");
  anchors = d.getElementById(listID).getElementsByTagName("a");
  lis = d.getElementById(listID).getElementsByTagName("li");
  
  for(i=1;i<imgs.length;i++) {
    imgs[i].xOpacity = 0;
    imgs[i].className="";
  }
  imgs[0].xOpacity = .99;

  for(i=0;i<anchors.length;i++) {
    addEvent(anchors[i],"focus",teaserFocus);
    addEvent(anchors[i],"blur",teaserBlur);
    addEvent(lis[i],"mouseover",teaserFocus);
    addEvent(lis[i],"mouseout",teaserBlur);
    addEvent(lis[i],"click",teaserClick);
    anchors[i].name = i;
  }
  
  // start and stop control elements
  controls = d.getElementById(controlsID);
  start = d.getElementById(startID);
  stop = d.getElementById(stopID);
  controls.className = '';
  start.className = 'hidden';
  stop.className = '';

  addEvent(start,"click", startClick);
  addEvent(stop,"click", stopClick);

  so_xfade();
}

function so_xfade() {  
  var notReady = false;
  for(i=0;i<imgs.length;i++) {
    if(i==current) {
      lis[i].className=classShow;
      if(imgs[i].xOpacity<.99) {
        imgs[i].xOpacity += .05;
        notReady = true;
      }
    } else {
      lis[i].className=classHidden;
      if(imgs[i].xOpacity>0) {
        notReady = true;
        imgs[i].xOpacity -= .05;
      }
    }
    setOpacity(imgs[i]);
  }
  
  if(notReady) {
    zInterval = setTimeout(so_xfade,xfadeStep);
  } else {
    if (!pause && !stopped) {
      current = (current+1) % imgs.length;
      zInterval = setTimeout(so_xfade,defaultTimeout);
    }
  }
  
  
  function setOpacity(obj) {
    if(obj.xOpacity>.99) {
      obj.xOpacity = .99;
      return;
    }
    if(obj.xOpacity<0) {
      obj.xOpacity = 0;
      return;
    }
    obj.style.opacity = obj.xOpacity;
    obj.style.MozOpacity = obj.xOpacity;
    obj.style.filter = "alpha(opacity=" + (obj.xOpacity*100) + ")";
  }
}

function teaserFocus(e) {
  pause = true;
  if (zInterval) clearTimeout(zInterval);

  var targ;
  if (!e) var e = window.event;
  if (e.target) targ = e.target;
  else if (e.srcElement) targ = e.srcElement;
  if (targ.nodeType == 3) // defeat Safari bug
    targ = targ.parentNode;
  
  while(targ.nodeName.toLowerCase()!="li") {
    targ=targ.parentNode;
  }
  
  if (targ && targ.getElementsByTagName("a")) {
    current = targ.getElementsByTagName("a")[0].name;
  }
  
  so_xfade();
}

function teaserBlur(e) {
  pause = false;
  if (zInterval) clearTimeout(zInterval);
  so_xfade();
}


function teaserClick(e) {

  var targ;
  if (!e) var e = window.event;
  if (e.target) targ = e.target;
  else if (e.srcElement) targ = e.srcElement;
  if (targ.nodeType == 3) // defeat Safari bug
    targ = targ.parentNode;
  
  while(targ.nodeName.toLowerCase()!="li") {
    targ=targ.parentNode;
  }
  
  if (targ && targ.getElementsByTagName("a")) {
    window.location.href=targ.getElementsByTagName("a")[0].href;
  }
  return false;
}

function startClick(e) {
  stopped = false;
  stop.className = '';
  start.className = 'hidden';

  so_xfade();
  e.cancelBubble = true;
  if (e.stopPropagation) e.stopPropagation();
  return false;
}

function stopClick(e) {
  stopped = true;
  start.className = '';
  stop.className = 'hidden';
  
  current = current-1;
  if(current<0) current=imgs.length-1;
  so_xfade();
  e.cancelBubble = true;
  if (e.stopPropagation) e.stopPropagation();
  return false;
}


// Utility function to add an event listener
function addEvent(o,e,f){
  if (o.addEventListener){ o.addEventListener(e,f,false); return true; }
  else if (o.attachEvent){ return o.attachEvent("on"+e,f,false); }
  else { return false; }
}
