function PhotoBrowser(show_photo_url, show_page_url, page, current_photo_id, remember_last_displayed)
{
	var pb = new Object();
	pb.page = page;
	pb.show_photo_url = show_photo_url;
	pb.show_page_url = show_page_url;
	pb.fadeValue = 0.3;
	pb.current_photo_id = current_photo_id;
	
	pb.SelectCurrentPhotoThumbnail = function() {
		$('#thumbnail_'+pb.current_photo_id).addClass('thumbnailSelected');
	}
	
	pb.Show = function(link) {
		pb.ResetOpacity();
		pb.current_photo_id = $(link).attr('href').split('/').pop();
		$(link).fadeTo('fast', 1);
		var big_photo = $('#big_photo');
		big_photo.fadeOut("fast", function() {
			$.post(pb.show_photo_url, {
				photo_id : pb.current_photo_id,
				remember_last_displayed : remember_last_displayed ? 1 : 0
			}, function(data) {
				big_photo.load(function() {
					$(this).fadeIn();
				});
				big_photo.css('width', data.width);
				big_photo.css('height', data.height);
				big_photo.attr('src', data.imagePath);
				if (data.has_description) {
					$('#photoDescription').html(data.description);
					Cufon.replace('#photoDescription');
					$('#photoDescription').fadeIn();
				} else {
					$('#photoDescription').fadeOut();
				}
			}, "json");
		});
	}

	pb.Backward = function() {
		if (pb.page <= 0) return false;
		pb.page--;
		pb.LoadPage();
		return false;
	}

	pb.Forward = function() {
		pb.page++;
		pb.LoadPage();
		return false;
	}

	pb.GentlyFadeOut = function(i) {
		var fades = $('.thumbnail');
		var speed = 50;
		var last_idx = fades.size() - 1;
		if (i > last_idx) { return; }
		if (i == last_idx) {
			$(fades[i]).fadeTo(speed, 0, function() {
				pb.GentlyFadeIn(0);
			});
		} else {
			$(fades[i]).fadeTo(speed, 0, function() { pb.GentlyFadeOut(i + 1) });
		}
	}

	pb.GentlyFadeIn = function(i) {
		var fades = $('.thumbnail');
		var speed = 50;
		var last_idx = fades.size() - 1;
		if (i > last_idx) { return; }
		if (i == last_idx) {
			$(fades[i]).fadeTo(speed, pb.fadeValue, function() {
				pb.SelectCurrentPhotoThumbnail();
			});
		} else {
			$(fades[i]).fadeTo(speed, pb.fadeValue, function() { pb.GentlyFadeIn(i + 1) });
		}
	}
	
	pb.LoadPage = function() {
		$.post(pb.show_page_url, {
			page : pb.page
		}, function(data) {
			pb.ResetOpacity();
			pb.GentlyFadeOut(0);
			var element = $('.navi .backward');
			data.backward ? element.show() : element.hide();
			element = $('.navi .forward');
			data.forward ? element.show() : element.hide();
			$('.thumbnail').attr('id', '');
			$('.thumbnail').each(function(index, item) {
				var thumb = data.thumbnails[index];
				$(item).parent().attr('href', thumb.photoPageUrl);
				$(item).attr('src', thumb.thumbnailPath);
				$(item).attr('id', 'thumbnail_' + thumb.id);
			});
		}, "json");
	}
	
	pb.ResetOpacity = function() {
		$('.thumbnail').removeClass('thumbnailSelected');
	}
	
	$('.thumbnail').hover(
			function(event) {
				$(this).fadeTo('fast', 1);
			},
			function(event) {
				$(this).fadeTo('fast', pb.fadeValue);
			}
	);
	
	$('.thumbspace a').click(function() {
		browser.Show($(this));
		$(this).children('img').addClass('thumbnailSelected');
		return false;
	});
	
	pb.SelectCurrentPhotoThumbnail();
	
	return pb;
}
