function animateImages() {
	var images = $('#loader #' + galleryName + ' img');
	
	var visibleImage = images.filter(':visible');
	var targetIndex = (imageIndex == (gallerySize - 1)) ? 0 : imageIndex + 1;
	var targetIndexes = [targetIndex, targetIndex + 1, targetIndex - 1];
	var targetImage = images.eq(targetIndex);
	
	//INITIATE IMAGE LOADING LOOP
	for (var i = 0; i < 3; i++) {
		//Test if the image is already cached
		var exists = false;
		for (var k = 0, n = images.length; k < n; k++) {
			if ($(images[k]).attr('src') == $(targetGallery).eq(targetIndexes[i]).text()) {
				exists = true;
				var j = i;
			}
		}

		if (i == 0) {
			if (!exists) {	
				$('#loading-image').fadeIn(100);
				centerLoading($('#loading-image'));
				
				//Create a new image instance
				var Img = new Image();
			
				//Set the src of the image and then begin load function
				$(Img).attr('src', targetGallery.eq(targetIndex).text()).load(function() {
					$(this).hide().addClass('current');
					images.parent('.gallery').append(this);
				
					_get_orig_data($(this));
					_maxify($(this));
				
					$.ajax({
						success: function(html) {
							$('#loading-image').fadeOut(100);
							visibleImage.fadeOut(400).removeClass('current');
							$('#loader img.current').fadeIn(1000, function(){$.inAnimation = false;});
						}
					});
				});
					
			//If the image is already loaded, skip creating a new Image	
			} else {
				images.each(function(){
					if (targetGallery.eq(targetIndex).text() == $(this).attr('src')) {
						actualPos = images.index($(this));
					}
				});
			
				var targetImage = images.eq(actualPos);

				_maxify(targetImage);
				visibleImage.fadeOut(400).removeClass('current');
				targetImage.addClass('current').fadeIn(1000, function(){$.inAnimation = false;});
			}
		} else {
			if (!exists && targetIndexes[i] < gallerySize - 1) {
				var Img = new Image();

				$(Img).attr('src', $(targetGallery).eq(targetIndexes[i]).text()).load(function() {
					$(this).hide();
					images.parent('.gallery').append(this);
					_get_orig_data($(this));
				});
			}
		}
	}

	var thumbnails = $('#thumbnailNav ul.active li');
	var thumbnailCount = thumbnails.length;
	thumbnails.eq(imageIndex).removeClass("current");
	thumbnails.eq(targetIndex).addClass("current");

	//move the thumbnail slider if necessary
	if (targetIndex + 1 >= leftMost + 10) {
		if (thumbPrev.hasClass("disabled")) {
			thumbPrev.removeClass("disabled");
		}
	
		var moveLeft = $('#thumbnailNav ul').position().left - 265 + "px";
		$('#thumbnailNav ul').animate({ left: moveLeft }, 500);
	
		leftMost += 5;
	
		if ((leftMost + 10) > thumbnailCount) {
			thumbNext.addClass("disabled");
		}
	}
	else if (targetIndex == 0 && leftMost != 1) {
		thumbPrev.addClass("disabled");
		var moveLeft = $('#thumbnailNav ul').position().left - 265 + "px";
		$('#thumbnailNav ul').animate({ left: "0px" }, 500);
		leftMost = 1;
		if (thumbnailCount > 10) {
			thumbNext.removeClass("disabled");
		}
	} else {}
	
	//increment the gallery count and index tracker
	galleryCount.html((targetIndex + 1) + "/" + gallerySize);
	imageIndex = (imageIndex == (gallerySize - 1)) ? 0 : imageIndex + 1;
}

function centerLoading(object) {
	var loadingObject = $(object);
	var windowWidth = $(window).width();  
	var windowHeight = $(window).height();  
	var overlayHeight = loadingObject.height();
	var overlayWidth = loadingObject.width();

	loadingObject.css({
		"position": "absolute",
		"top": windowHeight/2 - overlayHeight/2 - 36,
		"left": windowWidth/2-overlayWidth/2 - 6
	});

}
	
$(function () {
	//Initial Site Load
	centerLoading('#initial-loading');
	$('#navigation').hide();
	$('#copyright').hide();
	$('#storage').hide();
	$.navVisible = false;
	$('#player-chrome').hide();
	
	//Slideshow variables
	var container = $('#loader');
	var galleryNav = $('#galleryNav li a');
	
	//Thumbnail navigation variables
	var thumbnailContainers = $('#thumbnailNav ul');
	thumbnailContainers.filter(':first').addClass("active");
	var thumbnails = $('#thumbnailNav ul.active li');
	var thumbnailCount = thumbnails.length;
	thumbPrev = $('.thumbPrev');
	thumbNext = $('.thumbNext');
	leftMost = 1;
	
	//initialize thumbnail gallery
	$('.thumbPrev').addClass("disabled");
	if (thumbnailCount <= 10) {
		$('.thumbNext').addClass("disabled");
	}
	$('#thumbnailNav ul.active').css({ width: thumbnailCount * 53 + "px" });
	thumbnails.filter(':first').addClass("current");
	
	//give the gallery first thumb the current class
	galleryNav.filter(':first').addClass("current");
			
	//Initial image load
	$.get('image-paths.php', function(data) {
		wholeStored = $(data);
		targetGallery = $(data).children('ul:first-child').children('li');
		galleryName = targetGallery.parent('ul').attr('id');
		$('#loader').append('<div id="' + galleryName + '" class="gallery current"></div>');

		gallerySize = $(targetGallery).length;
		galleryCount = $('.count');
		galleryCount.html("1/" + gallerySize);

		imageIndex = 0;
		imageIndexes = [imageIndex, imageIndex + 1, imageIndex - 1];
		
		//Initiate image loading loop
		for (var i = 0; i < 3; i++) {
			if (i == 0) {
				var Img = new Image();
				
				$(Img).attr('src', $(targetGallery).eq(imageIndexes[0]).text()).load(function() {
					$(this).hide().addClass('current');
					$('#loader #' + galleryName).append(this);
					
					//maxify
					_get_orig_data($(this));
					_maxify($(this));
					
					$.ajax({
						success: function(html) {
							$('#initial-loading').fadeOut(100);
							$('#navigation').stop(true, true).fadeIn(500);
							$('#copyright').fadeIn(1000);
							$('#loader #' + galleryName + ' img.current').fadeIn(1000);
							animatedImages = setInterval('animateImages()', 8000);
							$('#player-chrome').fadeIn(1000);
						}
					});
				});
			} else {
				var Img = new Image();
				$(Img).attr('src', $(targetGallery).eq(imageIndexes[i]).text()).load(function() {
					$(this).hide();
					$('#loader #' + galleryName).append(this);
					_get_orig_data($(this));
				});	
			}
		}
	});

	
	//Ajax gallery loader
	galleryNav.click(function(event){
		event.preventDefault();
		
		if ($('#pauseplay').hasClass("pause")) {
			$('#pauseplay').removeClass().addClass("play");
			clearInterval(animatedImages);
		}
		
		if ($(this).hasClass("current")) {
			return;
		} else {
		
			//handle the navigation stuff
			$.panelGalShown = false;
			$('#galleryMeta .gallerySwap').removeClass("active");
			$('#navigation').removeClass("expanded");
			$('#galleryNav').fadeOut(400);
			$('#navigation').stop().animate({ width: "355px" }, 600);
			$('#actions').stop(true, true).fadeOut(200);
			galleryNav.removeClass("current");
			$(this).addClass("current");
			
			var thumbnails = $('#thumbnailNav ul.active li');
			var currentThumb = thumbnails.eq(imageIndex);
			currentThumb.removeClass("current");

			leftMost = 1;
			$('#thumbnailNav ul.active').css({left: "0px"}).removeClass("active");
			$('#thumbnailNav ul#' + $(this).attr("gallery")).css({left: "0px"}).addClass("active");
			
			
			var galleryExists = false;
			galleryTitle = $(this).text();
			galleryName = $(this).attr("gallery") + '-gallery';
			targetGallery = $(wholeStored).children('#' + galleryName).children('li');
			
			//Test if the gallery container already exists
			$('#loader .gallery').each(function(){
				if ($(this).attr('id') == galleryName) {
					galleryExists = true;
				}
			});
			//Create container if it does not exist, otherwise, add current to container
			if (!galleryExists)  $('#loader').append('<div id="' + galleryName + '" class="gallery"></div>');
	
			gallerySize = $(targetGallery).length;
	
	
			imageIndex = 0;
			imageIndexes = [imageIndex, imageIndex + 1, imageIndex - 1];
			
			var images = $('#loader #' + galleryName + ' img');
			
			
			//INITIATE IMAGE LOADING LOOP
			for (var i = 0; i < 3; i++) {
				//Test if the image is already cached
				var exists = false;
				for (var k = 0, n = images.length; k < n; k++) {
					if ($(images[k]).attr('src') == $(targetGallery).eq(imageIndexes[i]).text()) {
						exists = true;
						var j = i;
					}
				}
				
				if (i == 0) {
					if (!exists) {
						$('#loading-image').fadeIn(100);
						centerLoading($('#loading-image'));
						
						//Create a new image instance
						var Img = new Image();
						
						//Set the src of the image and then begin load function
						$(Img).attr('src', targetGallery.eq(imageIndexes[i]).text()).load(function() {
							$(this).hide().addClass('current');
							$('#loader #' + galleryName).append(this);
							
							_get_orig_data($(this));
							_maxify($(this));
							
							$.ajax({
								success: function(html) {
									$('#loading-image').fadeOut(100);
									//hide current image and remove class
									$('#loader div.current img.current').removeClass('current').fadeOut(400);
									//remove current class from gallery
									$('#loader div.current').removeClass('current');
									//add current class to target gallery
									$('#loader #' + galleryName).addClass('current');
									
									$('#loader #' + galleryName + ' img.current').fadeIn(1000, function(){$.inAnimation = false;});
									
									$('.currentGallery').html(galleryTitle);
									galleryCount.html("1/" + gallerySize);
									
									//thumbnail swap
									var thumbnails = $('#thumbnailNav ul.active li');
									var thumbnailCount = thumbnails.length;
									$('.thumbPrev').addClass("disabled");
									if (thumbnailCount <= 10) {
										$('.thumbNext').addClass("disabled");
									} else {
										$('.thumbNext').removeClass("disabled");
									}
									$('#thumbnailNav ul.active').css({ width: thumbnailCount * 53 + "px" });
									thumbnails.filter(':first').addClass("current");
									
								}
							});
						});
								
					//If the image is already loaded, skip creating a new Image	
					} else {
						images.each(function(){
							if (targetGallery.eq(imageIndexes[i]).text() == $(this).attr('src')) {
								actualPos = images.index($(this));
							}
						});
						var targetImage = images.eq(actualPos);
				
						_maxify(targetImage);
						
						$('#loader .current .current').removeClass('current').fadeOut(500);
						$('#loader .current').removeClass('current');
						$('#loader #' + galleryName).addClass('current');
						
						targetImage.addClass('current').fadeIn(500, function(){$.inAnimation = false;});
						
						$('.currentGallery').html(galleryTitle);
						galleryCount.html("1/" + gallerySize);
						
						//thumbnail swap
						var thumbnails = $('#thumbnailNav ul.active li');
						var thumbnailCount = thumbnails.length;
						$('.thumbPrev').addClass("disabled");
						if (thumbnailCount <= 10) {
							$('.thumbNext').addClass("disabled");
						} else {
							$('.thumbNext').removeClass("disabled");
						}
						$('#thumbnailNav ul.active').css({ width: thumbnailCount * 53 + "px" });
						thumbnails.filter(':first').addClass("current");
					
					}
				} else {
					if (!exists && imageIndexes[i] < gallerySize - 1) {
						var Img = new Image();
	
						$(Img).attr('src', $(targetGallery).eq(imageIndexes[i]).text()).load(function() {
							$(this).hide();
							$('#loader #' + galleryName).append(this);
							_get_orig_data($(this));
						});
					}
				}
			}
		}
	});
	
	
	//Pause/Play switch
	$('#pauseplay').click(function (event) {
		if ($(this).hasClass("pause")) {
			$(this).removeClass().addClass("play");
			clearInterval(animatedImages);
		} else {
			$(this).removeClass().addClass("pause");
			animatedImages = setInterval('animateImages()', 8000);
		}
	});
	
	//Next image
	$('.next').click(function (event) {
		// Check if in animation
		if ($.inAnimation) return false;
		else $.inAnimation = true;
		
		$('#pauseplay').removeClass().addClass("play");
		clearInterval(animatedImages);
		
		var images = $('#loader #' + galleryName + ' img');
		var visibleImage = images.filter(':visible');
		
		var targetIndex = (imageIndex == (gallerySize - 1)) ? 0 : imageIndex + 1;
		//Create an array of indexes for the target, the next, and the previous images
		var targetIndexes = [targetIndex, targetIndex + 1, targetIndex - 1];

		
		//INITIATE IMAGE LOADING LOOP
		for (var i = 0; i < 3; i++) {
			//Test if the image is already cached
			var exists = false;
			for (var k = 0, n = images.length; k < n; k++) {
				if ($(images[k]).attr('src') == $(targetGallery).eq(targetIndexes[i]).text()) {
					exists = true;
					var j = i;
				}
			}
		
			if (i == 0) {
				if (!exists) {
					$('#loading-image').fadeIn(100);
					centerLoading($('#loading-image'));
					
					//Create a new image instance
					var Img = new Image();
					
					//Set the src of the image and then begin load function
					$(Img).attr('src', targetGallery.eq(targetIndex).text()).load(function() {
						$(this).hide().addClass('current');
						images.parent('.gallery').append(this);
						
						_get_orig_data($(this));
						_maxify($(this));
						
						$.ajax({
							success: function(html) {
								$('#loading-image').fadeOut(100);
								visibleImage.fadeOut(400).removeClass('current');
								$('#loader img.current').fadeIn(1000, function(){$.inAnimation = false;});
							}
						});
					});
							
				//If the image is already loaded, skip creating a new Image	
				} else {
					images.each(function(){
						if (targetGallery.eq(targetIndex).text() == $(this).attr('src')) {
							actualPos = images.index($(this));
						}
					});
					
					var targetImage = images.eq(actualPos);

					_maxify(targetImage);
					visibleImage.fadeOut(400).removeClass('current');
					targetImage.addClass('current').fadeIn(1000, function(){$.inAnimation = false;});
				}
			} else {
				if (!exists && targetIndexes[i] < gallerySize - 1) {
					var Img = new Image();

					$(Img).attr('src', $(targetGallery).eq(targetIndexes[i]).text()).load(function() {
						$(this).hide();
						images.parent('.gallery').append(this);
						_get_orig_data($(this));
					});
				}
			}
		}
		
		var thumbnails = $('#thumbnailNav ul.active li');
		var currentThumb = thumbnails.eq(imageIndex);
		currentThumb.removeClass("current");
		var targetThumb = thumbnails.eq(targetIndex);
		targetThumb.addClass("current");
		
		//move the thumbnail slider if necessary
		if (targetIndex + 1 >= leftMost + 10) {
			if (thumbPrev.hasClass("disabled")) {
				thumbPrev.removeClass("disabled");
			}
			
			var moveLeft = $('#thumbnailNav ul').position().left - 265 + "px";
			$('#thumbnailNav ul').animate({ left: moveLeft }, 500);
			
			leftMost += 5;
			
			if ((leftMost + 10) > thumbnailCount) {
				thumbNext.addClass("disabled");
			}
		}
		else if (targetIndex == 0 && leftMost != 1) {
			thumbPrev.addClass("disabled");
			var moveLeft = $('#thumbnailNav ul').position().left - 265 + "px";
			$('#thumbnailNav ul').animate({ left: "0px" }, 500);
			leftMost = 1;
			if (thumbnailCount > 10) {
				thumbNext.removeClass("disabled");
			}
		} else {}
		
		//increment the gallery count and index tracker
		galleryCount.html((targetIndex + 1) + "/" + gallerySize);
		imageIndex = (imageIndex == (gallerySize - 1)) ? 0 : imageIndex + 1;
		
	});
	
	//Previous image
	$('.prev').click(function (event) {
		// Check if in animation
		if ($.inAnimation) return false;
		else $.inAnimation = true;
		
		$('#pauseplay').removeClass().addClass("play");
		clearInterval(animatedImages);
		
		var images = $('#loader #' + galleryName + ' img');
		var visibleImage = images.filter(':visible');
		
		var targetIndex = (imageIndex == 0) ? (gallerySize - 1) : imageIndex - 1;
		var targetIndexes = [targetIndex, targetIndex + 1, targetIndex - 1];

		//INITIATE IMAGE LOADING LOOP
		for (var i = 0; i < 3; i++) {
			//Test if the image is already cached
			var exists = false;
			for (var k = 0, n = images.length; k < n; k++) {
				if ($(images[k]).attr('src') == $(targetGallery).eq(targetIndexes[i]).text()) {
					exists = true;
					var j = i;
				}
			}
		
			if (i == 0) {
				if (!exists) {
					$('#loading-image').fadeIn(100);
					centerLoading($('#loading-image'));
					
					//Create a new image instance
					var Img = new Image();
					
					//Set the src of the image and then begin load function
					$(Img).attr('src', targetGallery.eq(targetIndex).text()).load(function() {
						$(this).hide().addClass('current');
						images.parent('.gallery').append(this);
						
						_get_orig_data($(this));
						_maxify($(this));
						
						$.ajax({
							success: function(html) {
								$('#loading-image').fadeOut(100);
								visibleImage.fadeOut(400).removeClass('current');
								$('#loader img.current').fadeIn(1000, function(){$.inAnimation = false;});
							}
						});
					});
							
				//If the image is already loaded, skip creating a new Image	
				} else {
					images.each(function(){
						if (targetGallery.eq(targetIndex).text() == $(this).attr('src')) {
							actualPos = images.index($(this));
						}
					});
					
					var targetImage = images.eq(actualPos);

					_maxify(targetImage);
					visibleImage.fadeOut(400).removeClass('current');
					targetImage.addClass('current').fadeIn(1000, function(){$.inAnimation = false;});
				}
			} else {
				if (!exists && targetIndexes[i] < gallerySize - 1) {
					var Img = new Image();

					$(Img).attr('src', $(targetGallery).eq(targetIndexes[i]).text()).load(function() {
						$(this).hide();
						images.parent('.gallery').append(this);
						_get_orig_data($(this));
					});
				}
			}
		}
		
		var thumbnails = $('#thumbnailNav ul.active li');
		var currentThumb = thumbnails.eq(imageIndex);
		currentThumb.removeClass("current");
		var targetThumb = thumbnails.eq(targetIndex);
		targetThumb.addClass("current");
		
		//move the thumbnail slider if necessary
		if (targetIndex == leftMost - 2 && targetIndex != 0) {
			if (thumbNext.hasClass("disabled")) {
				thumbNext.removeClass("disabled");
			}
			
			var moveRight = $('#thumbnailNav ul').position().left + 265 + "px";
			$('#thumbnailNav ul').animate({ left: moveRight }, 500);
			
			leftMost -= 5;
			
			if ((leftMost == 1)) {
				thumbPrev.addClass("disabled");
			}
		}
		else if (targetIndex + 1 == gallerySize && gallerySize > 10 && leftMost == 1) {
			thumbPrev.removeClass("disabled");
			thumbNext.addClass("disabled");
			var moveRight = $('#thumbnailNav ul').position().left - 265 + "px";
			$('#thumbnailNav ul').animate({ left: moveRight }, 500);
			leftMost += 5;
		} else {}
		
		//increment the gallery count and index tracker
		galleryCount.html((targetIndex + 1) + "/" + gallerySize);
		imageIndex = (imageIndex == 0) ? (gallerySize - 1) : imageIndex - 1;
		
	});
	
	
	// THUMBNAIL INFO STARTS HERE
	$('.thumbPrev').addClass("disabled");
	if (thumbnailCount <= 10) {
		$('.thumbNext').addClass("disabled");
	}
	$('#thumbnailNav ul.active').css({ width: thumbnailCount * 53 + "px" });
	
	//Next slides
	$('.thumbNext').click(function(event) {
		if ($(this).hasClass("disabled")) {
			return;
		} else {
			if (thumbPrev.hasClass("disabled")) {
				thumbPrev.removeClass("disabled");
			}
			
			var moveLeft = $('#thumbnailNav ul').position().left - 265 + "px";
			
			$('#thumbnailNav ul.active').animate({ left: moveLeft }, 500);
			
			leftMost += 5;
			
			if ((leftMost + 10) > thumbnailCount) {
				$(this).addClass("disabled");
			}
		}
	});
	
	//Previous slides
	$('.thumbPrev').click(function(event) {
		if ($(this).hasClass("disabled")) {
			return;
		} else {				
			if (thumbNext.hasClass("disabled"))
				thumbNext.removeClass("disabled");
			
			var moveRight = $('#thumbnailNav ul.active').position().left + 265 + "px";
	
			$('#thumbnailNav ul.active').animate({ left: moveRight }, 500);
			
			leftMost -= 5;
				
			if (leftMost == 1) {
				$(this).addClass("disabled");
			}
		}
	});
	
	$('#thumbnailNav ul li').click(function(event) {
		if ($.inAnimation) {
			return;
		} else {		
			if ($(this).hasClass("current")) {
				return;
			} else {
				$.inAnimation = true;
				
				//Remove previous current thumb
				var images = $('#loader #' + galleryName + ' img');
				var thumbnails = $('#thumbnailNav ul.active li');
				var visibleImage = images.filter(':visible');
		
				thumbnails.eq(imageIndex).removeClass("current");
	
				targetThumbIndex = $.inArray(this, thumbnails);
				$(this).addClass("current");
				
				var targetIndexes = [targetThumbIndex, targetThumbIndex + 1, targetThumbIndex - 1];
	
				$('#pauseplay').removeClass().addClass("play");	
				clearInterval(animatedImages);
				
				//INITIATE IMAGE LOADING LOOP
				for (var i = 0; i < 3; i++) {
					//Test if the image is already cached
					var exists = false;
					for (var k = 0, n = images.length; k < n; k++) {
						if ($(images[k]).attr('src') == $(targetGallery).eq(targetIndexes[i]).text()) {
							exists = true;
							var j = i;
						}
					}
	
					if (i == 0) {
						if (!exists) {
							$('#loading-image').fadeIn(100);
							centerLoading($('#loading-image'));
							
							//Create a new image instance
							var Img = new Image();
	
							//Set the src of the image and then begin load function
							$(Img).attr('src', targetGallery.eq(targetThumbIndex).text()).load(function() {
								$(this).hide().addClass('current');
								images.parent('.gallery').append(this);
	
								_get_orig_data($(this));
								_maxify($(this));
	
								$.ajax({
									success: function(html) {
										$('#loading-image').fadeOut(100);
										visibleImage.fadeOut(400).removeClass('current');
										$('#loader img.current').fadeIn(1000, function(){$.inAnimation = false;});
									}
								});
							});
	
						//If the image is already loaded, skip creating a new Image	
						} else {
							images.each(function(){
								if (targetGallery.eq(targetThumbIndex).text() == $(this).attr('src')) {
									actualPos = images.index($(this));
								}
							});
	
							var targetImage = images.eq(actualPos);

							_maxify(targetImage);
							visibleImage.fadeOut(400).removeClass('current');
							targetImage.addClass('current').fadeIn(1000, function(){$.inAnimation = false;});
						}
					} else {
						if (!exists && targetIndexes[i] < gallerySize - 1) {
							var Img = new Image();
	
							$(Img).attr('src', $(targetGallery).eq(targetIndexes[i]).text()).load(function() {
								$(this).hide();
								images.parent('.gallery').append(this);
								_get_orig_data($(this));
							});
						}
					}
				}
				
				galleryCount.html((targetThumbIndex + 1) + "/" + gallerySize);
				imageIndex = targetThumbIndex;
			}
		}
	});
});
