Array.prototype.shuffle = function() {
  var s = [];
  while (this.length) s.push(this.splice(Math.random() * this.length, 1)[0]);
  while (s.length) this.push(s.pop());
  return this;
} 

debug = 0;

confSlideDelayTime  = 6;     // seconds 
confSlideAppearTime = 3.0;   // seconds 
confSlideFadeTime   = 3.0;   // seconds 

var pano = new Array('lbp01', 'lbp02b', 'lbp03', 'lbp03a', 'lbp05', 'lbp06', 'lbp07b', 'lbp08', 'lbp09', 'lbp10', 'lbp11', 'lbp12', 'lbp13', 'lbp14', 'lbp15', 'lbp17', 'lbp18', 'lbp20');
//'lbp02', 'lbp02a', 
var arPanorama = new Array();
for (i=0; i<pano.length; i++) {
  arPanorama[i] = new Image(); arPanorama[i].src = 'images/pano/' + pano[i] + '.jpg';
}
arPanorama.shuffle();

//var arShowed = new Array();
var numPanorama = arPanorama.length;
var swapPanoramaTimeoutId = '';
var preloadPanoramaTimeoutId = '';
var actDiv = ''; 
var curIndexPanorama = -1;
var forceIndex = -1;

// Vullen met afbeeldingen die gepreload moeten zijn voordat slideshow start
// Panorama's hoeven hier niet te staan
arRequiredImg = new Array();
//arRequiredImg[0] = new Image(); arRequiredImg[0].src = arPanorama[0].src;

function debugmsg (msg) {
  $('debug').innerHTML = $('debug').innerHTML + "<br />" + msg;
  $('debug').scrollTop = $('debug').scrollHeight;
}

// preload panoramafoto, indien gereed tonen
function preloadPanorama( idx ) {
  if (debug) debugmsg ('preloadPanorama(' + idx + ') actDiv=' + actDiv );
  var targetPanoramaDiv  = '';
  var targetPanoramaImg  = '';
  if ( actDiv=='divPanoramaholder1' ) {
    $('divPanoramaholder1').style.zIndex = 101;
    $('divPanoramaholder2').style.zIndex = 102;
    targetPanoramaDiv = 'divPanoramaholder2';
    targetPanoramaImg = 'panorama2';
  } else {
    //$('divPanoramaholder1').style.zIndex = 102;
    //$('divPanoramaholder2').style.zIndex = 101;
    targetPanoramaDiv = 'divPanoramaholder1';
    targetPanoramaImg = 'panorama1';
  }
  
  if ( arPanorama[idx].complete ) {
    if (debug) debugmsg ('preloadPanorama(' + idx + ') gereed.' );
    $(targetPanoramaImg).src = arPanorama[idx].src;
    if (actDiv!='') {
      $(actDiv).fade({duration: confSlideFadeTime });
    }
    $(targetPanoramaDiv).appear({duration: confSlideAppearTime});
    curIndexPanorama = idx;
    setActiveDiv(targetPanoramaDiv);
    // Volgende panorama bepalen
    swapPanoramaTimeoutId = setTimeout("swapPanorama()", confSlideDelayTime * 1000);
  } else {
    if (debug) debugmsg ('preloadPanorama(' + idx + ') niet gereed.' );
    preloadPanoramaTimeoutId = setTimeout("preloadPanorama( " + idx + " )", 300);
  }
}

function swapPanorama() {
  var nextIndex = curIndexPanorama + 1;
  if ( nextIndex >= numPanorama ) nextIndex=0;
  // Random foto kiezen, maar niet gelijk aan huidige foto
  //nextIndex = getRandomIndex( curIndexPanorama );
  preloadPanorama( nextIndex );
}

function getRandomIndex ( huidigIdx ) {
  nieuwIdx = -1;
  do { 
    nieuwIdx = Math.floor(Math.random() * numPanorama);
  } while ( nieuwIdx == huidigIdx )
  return nieuwIdx;
}

function setActiveDiv( id ) {
  var actDivOld = actDiv;
  if (actDiv!='') {
    if (actDiv == id) {
      return;
    }
    $(actDiv).fade({duration: confSlideFadeTime});
  }
  actDiv = id;
  appearTime = (actDivOld=="") ? 0 : confSlideAppearTime;
  if (debug) debugmsg ('setActiveDiv Old=' + actDivOld + ' time=' + appearTime);
  
  switch (id) {
    case 'divPanoramaholder1':
      $('divPanoramaholder1').appear({duration: appearTime });
      break;
    case 'divPanoramaholder2':
      $('divPanoramaholder2').appear({duration: appearTime });
      break;
    default:
      alert('Invalid id');
      actDiv = actDivOld;
  }
}

function startPanoramaSlides() {
  if (debug) debugmsg ( 'startPanoramaSlides()' );
  // Geforceerd starten met opgegeven panorama of gewoon random
  curIndexPanorama = (forceIndex<0) ? getRandomIndex(-1) : forceIndex;
  preloadPanorama( curIndexPanorama );
}

// eventueel images preloaden (anders dan panorama's)
function checkPreloadingRequiredImagesReady() {
  var preloadingReady = true;
  for (var i=0; i< arRequiredImg.length; i++) {
    if ( !arRequiredImg[i].complete ) {
      preloadingReady = false;
       if (debug) debugmsg('preloading ' + arRequiredImg[i].src + ' not ready ');
    }
  }
  if ( !preloadingReady ) {
    var pTimer = setTimeout("checkPreloadingRequiredImagesReady()", 500);
  } else {
    startPanoramaSlides();
  }
}

function startSlides() {
  if (debug) debugmsg('startSlides()');
  checkPreloadingRequiredImagesReady();
}

document.observe("dom:loaded", function() { 
                                 init();
                               }
                );



