$(function() {
    var slideshowDelay = 5 * 1000,	// Время между сменой фотографий в слайдшоу
		delayAfterUser = 10 * 1000, // Пауза в работе слайдшоу при вмешательстве пользователя.
		delayAfterLoadingFailed = 200, // Время между повторными попытками отобразить фото, если оно еще не загружено.
		fadeInSS = 1000, // Время затухания фотографии в слайдшоу
		fadeOutSS = 1000, // Время проявления фотографии в слайдшоу
		fadeInUser = 500, // Время затухания фотографии при вмешательстве пользователя
		fadeOutUser = 500, // Время проявления фотографии при вмешательстве пользователя
		controlsDisabled = false,
		loader = $('#ajax-loader');
		
	if (curr_img == undefined || images == undefined) 
		return;

	var wrapper = $('#img_wrapper'),
		len = images.length,
		loaded = new Array(images.length),
		ssHandler;

	loaded[curr_img] = true;
	
	function getNext(backward) {
		if (backward)
			return curr_img ? curr_img - 1 : len - 1;
		else
			return (curr_img + 1) % len;
	}

	function preloadNext() {
		var next = getNext();
		if (!loaded[next])
			$('#image-' + (next)).attr('src', 'photos/' + images[next]);
	}

	var updateSlideshow = function() {
		var img = $('#image-' + curr_img),
			next = getNext(),
			nextImg = $('#image-' + next);

		if (loaded[next]) {
			loader.hide();
			curr_img = next;
			preloadNext();
			controlsDisabled = true;
			img.fadeOut(fadeOutSS, function() {
			    if (pageTracker)
					pageTracker._trackPageview("/ph" + (next + 1) + '.html');

				nextImg.fadeIn(fadeInSS, function(){controlsDisabled = false;});
			});
			
			ssHandler = setTimeout(updateSlideshow, slideshowDelay);
		} 
		else {
			loader.show();
			ssHandler = setTimeout(updateSlideshow, delayAfterLoadingFailed);
		}
	}

	ssHandler = setTimeout(updateSlideshow, slideshowDelay);

	var switchImg = function(e) {
		if (typeof e == 'object') {
			e.preventDefault();
			e.stopPropagation();
		}

		if (controlsDisabled)
			return;
		
		if (ssHandler)
			clearTimeout(ssHandler);
		
		var self = this,
			img = $('#image-' + curr_img),
			next = getNext(this.id=='button_left'),
			nextImg = $('#image-' + (next));
		
		if (loaded[next]) {
			curr_img = next;
			preloadNext();
			loader.hide();
			controlsDisabled = true;
			img.fadeOut(fadeOutUser, function() {
			    if (pageTracker)
			        pageTracker._trackPageview("/ph" + (next + 1) + '.html');

				nextImg.fadeIn(fadeInUser, function(){controlsDisabled = false;});
			});
			ssHandler = setTimeout(updateSlideshow, delayAfterUser);
		} else {
			loader.show();
			if (nextImg.attr('src') == undefined)
				nextImg.attr('src', 'photos/' + images[next]);
			setTimeout(function() {switchImg.call(self)}, delayAfterLoadingFailed);
		}
	};

	$('#buttons_wrapper a').click(switchImg);

	for (var i = 0; i < len; i++) {
		if (i == curr_img)
		continue;

		$('<img>')
			.attr({'id': 'image-' + i})
			.data('id', i)
			.hide()
			.appendTo(wrapper)
			.load(function(){
				loaded[$(this).data('id')] = true;
			});
	}
	
	preloadNext();
});