$(window).load(function () {
	var minIndex = $('.lastSlidingImage').css('z-index');
	var firstSlidingImage = $('.firstSlidingImage');
	function changeSlidingImage() {
		var selected = $('.selectedSlidingImage');
		if (selected.hasClass('lastSlidingImage')) {
			var next = firstSlidingImage;
		}
		else {
			var next = selected.next();
		}
		
		selected.fadeOut(1200, function () {
			minIndex--;
			$(this).removeClass('selectedSlidingImage').css('z-index', minIndex).fadeIn(0);
			next.addClass('selectedSlidingImage');
			setTimeout(
				function () {
					changeSlidingImage();
				}, 
				12000
			);
		});
	}
	changeSlidingImage();
	
	$('.content-gallery').each(function(){
		var album = $(this);
		var wrap = album.find('.photos-list');
		var wrapWidth = wrap.width();
		var ul = album.find('ul');
		var previous = album.find('.photo-previous');
		var next = album.find('.photo-next');
		var photos = album.find('a');
		var firstLi = $('.photos-list li').first().addClass('first');
		var lastLi = $('.photos-list li').last().addClass('last');
		var startSlideshow = $('#start-slideshow');
		var largeImageCaption = $('#largeImageCaption');
		var waitMessage = $('#waitMessage');
		var countOfPhotos = photos.length;
		var bigPhotos = [];
		var speed = 0.3;
		
		var ulWidth = 0;
		photos.each(function(i, e){
			ulWidth += $(this).outerWidth(true);
			$(this).click(function () {
				showBigPhoto($(this));
				return false;
			});
			
			bigPhotos[i] = new Image();
			bigPhotos[i].onload = function () {
				countOfPhotos--;
				if (countOfPhotos == 0) {
					startSlideshow.show();
				}
			}
			bigPhotos[i].src = $(this).find('img').attr('src');
		});
		ul.width(ulWidth);
		if (ulWidth > wrapWidth) {
			next.addClass('photo-next-active');
		}
		var minMarginLeft = wrapWidth - ulWidth + 10;
				
		next.hover(
			function() {
				var currentMarginLeft = parseInt(ul.css('margin-left'));
				ul.animate({marginLeft : minMarginLeft}, Math.abs(currentMarginLeft - minMarginLeft) / speed, 'linear', function () {
					next.removeClass('photo-next-active');
				});
			},
			function () {
				ul.stop(true, false);
			}
		);
		
		previous.hover(
			function(){
				var currentMarginLeft = parseInt(ul.css('margin-left'));
				ul.animate({marginLeft : 0}, Math.abs(currentMarginLeft) / speed, 'linear', function () {
					previous.removeClass('photo-previous-active');
				});
			},
			function () {
				ul.stop(true, false);
			}
		);
		
		$('.top-photo, .back-photo').load(function () {
			var backPhoto = $('.back-photo');
			var topPhoto = $('.top-photo');
			largeImageCaption.show();
			
			if (startSlideshow.hasClass('on')) {
				$('.top-photo').fadeOut(1200, function () {
					backPhoto.css('z-index', 2).removeClass('back-photo').addClass('top-photo');
					topPhoto.css('z-index', 1).removeClass('top-photo').addClass('back-photo').fadeIn(0);
					setTimeout(
						function () {
							showNextPhoto();
						}, 
						5000
					);
				});
			}
			else {
				waitMessage.hide();
				backPhoto.css('z-index', 2).removeClass('back-photo').addClass('top-photo');
				topPhoto.css('z-index', 1).removeClass('top-photo').addClass('back-photo').fadeIn(0);
			}
		});
		
		function showBigPhoto(obj) {
			if (startSlideshow.hasClass('off')) {
				waitMessage.show();
			}
			largeImageCaption.hide().html(obj.find('img').attr('alt'));
			$('.back-photo').attr('src', obj.attr('href'));
			$('.selected', album).removeClass('selected');
			obj.parent().addClass('selected');
		}
		
		function showNextPhoto() {
			if (startSlideshow.hasClass('off')) {
				return;
			}
			var nextLi = $('.photos-list .selected').next();
			if (nextLi.hasClass('last')) {
				firstLi.find('a').click();
			}
			else {
				nextLi.find('a').click();
			}
		}
		startSlideshow.click(function () {
			if ($(this).hasClass('off')) {
				$(this).removeClass('off').addClass('on').html('Stop slideshow');
				showNextPhoto();
			}
			else {
				$(this).removeClass('on').addClass('off').html('Start slideshow');
			}
			return false;
		});
	});
});
