function Slideshow() {  
  var self = document.createElement('div');
  
  var slides = [];
  var index = 0;
  var iv = 0;
  
  function opacity(node) {
    var opacity = parseFloat(node.style.opacity);
    if (opacity >= 1) return false;
    node.style.opacity = (1 / (Slideshow.FADE_INTERVAL / Slideshow.FRAME_INTERVAL) + opacity).toString();
    node.style.filter = "alpha(opacity=" + node.style.opacity * 100 + ")";
    return true;
  };
  
  /*function opacity(node, dir) {
    if (dir > 0 && parseFloat(node.style.opacity) >= 1) return false;
    if (dir < 0 && parseFloat(node.style.opacity) <= 0) {
      self.removeChild(node);
      return false;
    };
    node.style.opacity = String(1 / (Slideshow.FADE_INTERVAL / Slideshow.FRAME_INTERVAL * dir) + parseFloat(node.style.opacity));
    return true;
  };*/
  
  function fade() {
    var active = false;
    for (var i = 1, item = self.childNodes[0]; item; item = self.childNodes[i++]) active = opacity(item) || active;
    if (active) return;
    for (i = 1, item = self.childNodes[0]; item; item = self.childNodes[i++]) {
      if (item == slides[index]) continue;
      self.removeChild(item);
    };
    window.clearInterval(iv);
    iv = undefined;
  };
  
  /*function fade() {
    var active = false;
    for (var i = self.childNodes.length - 1, item = self.childNodes[i--]; i > -1; item = self.childNodes[i--]) {
      if (item == slides[index]) var dir = 1;
      else dir = -1;
      active = opacity(item, dir) || active;
    };
    if (active) return;
    window.clearInterval(iv);
    iv = undefined;
    
  };*/
  
  function swap() {
    index = ++index == slides.length ? 0 : index;
    var slide = slides[index];
    slide.style.opacity = "0";
    slide.style.filter = "alpha(opacity=0)";
    self.appendChild(slide);
    if (!iv) iv = window.setInterval(fade, Slideshow.FRAME_INTERVAL);
    window.setTimeout(arguments.callee, Slideshow.SLIDE_INTERVAL);
  };
  
  (function() {
    self.style.position = 'relative';
    this.parentNode.replaceChild(self, this);
    for (var i = Slideshow.SLIDES.length - 1; i > -1; i--) {
      var slide = document.createElement('img');
      slide.setAttribute('src', Slideshow.SLIDES[i]);
      slide.style.position = 'absolute';
      slide.style.opacity = "1";
      slides.unshift(slide);
    };
    self.appendChild(slides[index]);
  }).call(this);
  
  window.setTimeout(swap, Slideshow.SLIDE_INTERVAL);
  
  return self;
};

Slideshow.SLIDE_INTERVAL = 5000;
Slideshow.FADE_INTERVAL = 1000;
Slideshow.FRAME_INTERVAL = 40;
Slideshow.SLIDES = [
  '/media/mpibf_titel01.jpg',
  '/media/mpibf_titel02.jpg',
  '/media/mpibf_titel03.jpg'
];


var loadSlideshow = function() {
  if (window.addEventListener) {
    window.removeEventListener('DOMContentLoaded', loadSlideshow, false);
    window.removeEventListener('load', loadSlideshow, false);
  }
  else if (window.attachEvent) window.detachEvent('onload', loadSlideshow);
  
  Slideshow.call(document.getElementById('slideshow'));
  
  loadSlideshow = undefined;
};

if (window.addEventListener) {
  window.addEventListener('DOMContentLoaded', loadSlideshow, false);
  window.addEventListener('load', loadSlideshow, false);
}
else if (window.attachEvent) window.attachEvent('onload', loadSlideshow);
