var photoshuffle = function() {

  var gblPhotoShufflerDivId = "photodiv";
  var gblPhotoShufflerImgId = "photoimg"; 
  var gblImg = [];
  var gblPauseSeconds = 4;
  var gblFadeSeconds = 2;
  var gblRotations = 9999;

  // End Customization section
  
  var gblDeckSize = gblImg.length;
  var gblOpacity = 100;
  var gblOnDeck = 0;
  var gblStartImg;
  var gblImageRotations = gblDeckSize * (gblRotations+1);

  var photoShufflerShuffle = function() {
	var thediv = document.getElementById(gblPhotoShufflerDivId);
	var theimg = document.getElementById(gblPhotoShufflerImgId);
	
	theimg.src = gblImg[gblOnDeck];
	setOpacity(theimg,100);

	//gblOnDeck = ++gblOnDeck % gblDeckSize;
	gblOnDeck = ++gblOnDeck % gblImg.length;
	if (--gblImageRotations < 1) {
	  gblImg[gblOnDeck] = gblStartImg;
	}

	thediv.style.backgroundImage='url(' + gblImg[gblOnDeck] + ')';
  }

  var setOpacity = function(obj, opacity ) {
    opacity = (opacity == 100)?99.999:opacity;
  
    // IE/Win
    obj.style.filter = "alpha(opacity:"+opacity+")";
  
    // Safari<1.2, Konqueror
    obj.style.KHTMLOpacity = opacity/100;

    // Older Mozilla and Firefox
    obj.style.MozOpacity = opacity/100;

    // Safari 1.2, newer Firefox and Mozilla, CSS3
    obj.style.opacity = opacity/100;
  }

  return {
  
  	addToDeck : function( p_sUrl ) {
		gblImg.push( p_sUrl );
	},
  
  	photoShufflerLaunch : function() {
	  gblImageRotations = gblImg.length * (gblRotations+1);
  	  var theimg = document.getElementById(gblPhotoShufflerImgId);
      gblStartImg = theimg.src; // save away to show as final image

	  document.getElementById(gblPhotoShufflerDivId).style.backgroundImage='url(' + gblImg[gblOnDeck] + ')';
	  setTimeout("photoshuffle.photoShufflerFade()",gblPauseSeconds*1000);
    },
	
	photoShufflerFade : function() {
      var theimg = document.getElementById(gblPhotoShufflerImgId);
      var fadeDelta = 100 / (30 * gblFadeSeconds);

	   if (gblOpacity < 2*fadeDelta ) {
	     gblOpacity = 100;
		 //console.log( gblImageRotations );
	     //if (gblImageRotations < 1) return;
	     photoShufflerShuffle();
         setTimeout("photoshuffle.photoShufflerFade()",gblPauseSeconds*1000);
	   } else {
	     gblOpacity -= fadeDelta;
	     setOpacity(theimg,gblOpacity);
	     setTimeout("photoshuffle.photoShufflerFade()",30);  // 1/30th of a second
	   }
    }  
  }
}();
