var imageElements;
var imagesToShow;
var continuous = false;
var refresh = 30;

if(!Array.indexOf){
  Array.prototype.indexOf = function(obj, start){
    for(var i=(start||0); i<this.length; i++){
      if(this[i]==obj){
        return i;
      }
    }
  }
}

if (!String.prototype.endsWith) {
  String.prototype.endsWith = function(suffix) {
    var startPos = this.length - suffix.length;
    if (startPos < 0) {
      return false;
    }
    return (this.lastIndexOf(suffix, startPos) == startPos);
  };
}

function shuffle(v){
    for(var j, x, i = v.length; i; j = parseInt(Math.random() * i), x = v[--i], v[i] = v[j], v[j] = x);
    return v;
};

function initImages()
{
  imageElements = [document.getElementById('fader-1'), document.getElementById('fader-2'), document.getElementById('fader-3')];
  
  replaceImages(true);
}

function findPartialFilename(partialFilenameArray, fullFilename) {
  for (var i = 0; i < partialFilenameArray.length; i++) {
    var f = partialFilenameArray[i];
    if (fullFilename.endsWith(f)) {
      return i;
    }
  }
  return -1;
}

function replaceImages(firstTime)
{
  // maak een kopie van de lijst met sources
  imagesToShow = imageSources.slice(0, imageSources.length);

  // verwijder reeds gebruikte images
  for (var i = 0; i < imageElements.length; i++) {
    var srcToRemove = imageElements[i].src;
    var positionOfSrc = findPartialFilename(imagesToShow, srcToRemove); // imagesToShow.indexOf(srcToRemove);
    if (positionOfSrc >= 0) {
      imagesToShow.splice(positionOfSrc, 1);
    } else {
      //alert("Ja maar dat is raar: " + srcToRemove + " komt niet voor in " + imagesToShow);
    }
  }

  // verwijder er een paar uit
  while (imagesToShow.length > imageElements.length) {
    var rand = Math.round((imagesToShow.length * Math.random()));
	imagesToShow.splice(rand, 1);
  }
  shuffle(imagesToShow);

  // en begin de fades...
  if (firstTime) {
	for (var i = 0; i < imageElements.length; i++) {
      fadeNew(imageElements[i], imagesToShow[i]);
	}
  } 
  else {
    // optie 1: refade alles, zie boven
//    for (var i = 0; i < imageElements.length; i++) {
//      refade(imageElements[i], imagesToShow[i]);
//	}

	// optie 2: refade slects 1 picture
	var imageToFade = 10000000;
	while (imageToFade >= imageElements.length) {
		imageToFade = Math.round(imageElements.length * Math.random());
    }
	refade(imageElements[imageToFade], imagesToShow[imageToFade]);
  }

  if (continuous) {
    setTimeout("replaceImages(false)", refresh * 1000);
  }
}

function setOpacity(el) {
  if (el.xOpacity > .99) {
    el.xOpacity = .99;
	return;
  }
  el.style.opacity = el.xOpacity;
  el.style.MozOpacity = el.xOpacity;
  el.style.filter = "alpha(opacity=" + (el.xOpacity * 100) + ")";
}

function refade(imgEl, newSrc)
{
  imgEl.xCurrentDirection = "fadeOut";
  imgEl.xOpacity = 1;
  do_fade(imgEl.id, newSrc);
}

function fadeNew(imgEl, newSrc)
{
  imgEl.xCurrentDirection = "fadeIn";
  imgEl.xOpacity = 0;
  do_fade(imgEl.id, newSrc);
}

function do_fade(imgElId, newSrc)
{
  var imgEl = document.getElementById(imgElId);
  var current = imgEl.xOpacity;
  var dir = imgEl.xCurrentDirection;

  if (dir == "fadeOut") {
    current -= 0.05;
	if (current <= 0) {
	  dir = "fadeIn";
	}
  }
  if (dir == "fadeIn") {
	current += 0.05;
    imgEl.src = newSrc;
  }

  imgEl.xCurrentDirection = dir;
  imgEl.xOpacity = current;
  setOpacity(imgEl);

  if (current < .99) {
	// fade switch nog niet klaar, time again
	setTimeout('do_fade("' + imgEl.id + '","' + newSrc + '")', 50);
  }
}

window.addEventListener?window.addEventListener("load",initImages,false):window.attachEvent("onload",initImages);
