// Modifiable strings
var selectedLinkClassName = "nav_current";
var groupClassName = "slideGroup";
var imageClassName = "slideImage";
var descClassName = "slideDesc"
var slideLinkClassName = "slideLink";
var dynamicContainerID = "dynamicContainer";
var loadingContainerID = "loadingContainer";
var descContainerID = "dynamicDesc";
var navContainerID = "dynamicNav";
var imgID = "dynamicImage";
var imgPreloadID = "dynPreImage";
var fadeSpeed = 300; // in milliseconds

var prepSlideshowDone = false;
var preloadingState = false;

// Show slide
// Selects a group of the class "slideGroup"
// Each image has a class "slideImage"
// A description has the class "slideDesc"
// groupI: index starting from 0
// imageI: index starting from 0
function showSlide(groupI, imageI) {
	if (prepSlideshowDone) {
		window.location.hash = "#" + groupI + "," + imageI;
	}
	
	// Apply class to selected link
	$("." + slideLinkClassName).removeClass(selectedLinkClassName);
	$("." + slideLinkClassName).eq(groupI).addClass(selectedLinkClassName);
	
	$("#" + loadingContainerID).fadeIn(0.2);
	
	var group = $("." + groupClassName).eq(groupI);
	var images = group.children("." + imageClassName);
	
//	images.each(function(i) {
//		jQuery.preLoadImages(images.eq(i));
//	});
	
	// Img of size 0 to preload image
	$("#" + dynamicContainerID).append("<img width=\"0\" height=\"0\" id=\"" + 
		imgPreloadID + "\"/>");
	$("#" + imgPreloadID).attr("src", images.eq(imageI).attr("href"));
	
	preloadingState = true;
	
	$("#" + imgPreloadID).load(function() {
		// Contents executed when preloading image loads
	
		// Fade the image
		$("#" + imgID).transitionto({destinationImage: images.eq(imageI).attr("href")});
		$("#" + imgID).attr("alt", images.eq(imageI).text());
	
		var previousI = imageI - 1;
		var nextI = imageI + 1;
	
		// Loop front to back, and vice versa
		if (previousI < 0) {
			previousI = images.size() - 1;
		}
		if (nextI > images.size() - 1) {
			nextI = 0;
		}
	
		// Show nav method
		if (images.size() > 1) {
	
			// Insert html code into nav container
			$("#" + navContainerID).html(
				"<a href=\"#\"" +
				"onclick=\"showSlide(" + groupI + 
				"," + previousI + 
				");return false;\"> " +
				"Previous</a>" +
				" / " +
				"<a href=\"#\"" +
				"onclick=\"showSlide(" + 
				groupI + "," + nextI + 
				");return false;\">Next</a>" + 
				" (" + (imageI + 1) + " of " + images.size() + ")");
		
			// Click on img to advance
			$("#" + imgID).first().attr("onClick", 
				"showSlide(" + groupI + "," + nextI + ");");
	
		} else {
			// Single image case
			$("#" + navContainerID).html("&nbsp;");
		}
	
		// Insert html code for img descption
		$("#" + descContainerID).first().html(
			group.children("." + descClassName).first().html());
	
		$("#" + loadingContainerID).fadeOut(0.5);
	
		// Remove the preload image element
		$(this).remove(); 
		preloadingState = false;
	});
}

// Prep show
// Hides the content, reads from hash, makes nav links to groups
function prepSlideshow() {
	$("#" + loadingContainerID).hide();
	$("." + groupClassName).hide();
	
	if (window.location.hash != "") {
	
		hash = window.location.hash.substring(1);
	
		hasha = hash.split(",");
		g = parseInt(hasha[0]);
		i = parseInt(hasha[1]);
	
		showSlide(g, i);
		
	} else {
		showSlide(0, 0);
	}
	
	// apply links to site nav links
	$("." + slideLinkClassName).each(
		function(i) {
			$("." + slideLinkClassName).eq(i).attr("onClick", 
				"showSlide("+ i +",0);return false;");
		}
	);
	
	prepSlideshowDone = true;
}


// http://www.codewrecks.com/blog/index.php/2009/03/31/transition-between-images-in-jquery/
(function($) {
	$.fn.transitionto = function(options) {
		var settings = $.extend({}, options || {});
		//wrap into div if no div is present.
		$(this).each(function() {
			if ($(this).parent('div').size() == 0) {
				$(this).wrap('<div></div>')
			}
			
			//now swap with background trick
			$(this)
			.parent()
			.css('background-image', 'url(' + settings.destinationImage + ')')
			.css('background-repeat', 'no-repeat')
			.end()
			.fadeOut(fadeSpeed, function() {
				this.src = settings.destinationImage;
				$(this).show();
			});
		});
	};
})(jQuery);

//http://engineeredweb.com/blog/09/12/preloading-images-jquery-and-javascript
(function($) {
  var cache = [];
  // Arguments are image paths relative to the current page.
  $.preLoadImages = function() {
    var args_len = arguments.length;
    for (var i = args_len; i--;) {
      var cacheImage = document.createElement('img');
      cacheImage.src = arguments[i];
      cache.push(cacheImage);
    }
  }
})(jQuery)

