function slideshow(id, delays) {
  var updateInterval = 40;
  var setOpacity = function(element, value) {
    if (value) {
      element.style.opacity = value;
      element.style.MozOpacity = value;
      element.style.filter = "Alpha(opacity=" + (value * 100) + ")"
    } else {
      element.style.opacity = "";
      element.style.MozOpacity = "";
      element.style.filter = "";
    }
  }
  var time = 0;
  var initFunc = function() {
    var container = document.getElementById(id);
    container.style.padding = 0;
    if (
      container.style.position != "fixed" &&
      container.style.position != "absolute"
    ) {
      container.style.position = "relative";
    }
    var images = [];
    for (var i=0; i<container.childNodes.length; i++) {
      var node = container.childNodes[i];
      if (node.tagName == "img" || node.tagName == "IMG") {
        images[images.length] = node;
      }
    }
    var repeat = (delays.length-1) / 2 >= images.length;
    container.style.width  = images[0].clientWidth;
    container.style.height = images[0].clientHeight;
    for (var i=0; i<images.length; i++) {
      var image = images[i];
      image.style.margin = 0;
      image.style.padding = 0;
      image.style.position = "absolute";
      image.style.zIndex = images.length - i;
    }
    var setState = function(s) {
      s %= images.length;
      if (s > images.length-1) {
        s -= images.length-1;
        images[0].style.zIndex = 0;
        setOpacity(images[0], null);
        images[0].style.display = "";
        for (i=1; i<images.length-1; i++) images[i].style.display = "none";
        setOpacity(images[images.length-1], 1-s);
        images[images.length-1].style.display = "";
      } else {
        images[0].style.zIndex = images.length;
        for (i=0; i<images.length; i++) {
          var image = images[i];
          if (s < 1) {
            setOpacity(image, (s > 0) ? (1-s) : null);
            image.style.display = "";
          } else {
            image.style.display = "none";
          }
          s -= 1;
        }
      }
    }
    window.setTimeout(function() {
      var interval = window.setInterval(function(late) {
        time += updateInterval;
        if (late) time += late;
        var t = time;
        var s = 0;
        do {
          for (i=1; i<delays.length; i++) {
            if (i > 2 * images.length) break;
            var delay = delays[i];
            if (i % 2 == 1) {
              if (t < delay) t = 0;
              else t -= delay;
            } else {
              if (t < delay) {
                s += t/delay;
                t = 0;
              } else {
                s += 1;
                t -= delay;
              }
            }
          }
          if (t > 0) {
            if (repeat) {
              time = t;
            } else {
              window.clearInterval(interval);
              break;
            }
          }
        } while (t > 0);
        setState(s);
      }, updateInterval);
    }, delays[0]);
  }
  if (window.addEventListener) {
    window.addEventListener('load', initFunc, false); 
  } else if (window.attachEvent){
    window.attachEvent('onload', initFunc);
  }
}
