jQuery.galleryWidget = {
	build: function(options)
	{
		// Domyślne ustawienia galerii.
		var defaultOptions = {
			imageContainerClass: "galleryWidget",
			imageClass: "galleryWidget_image",
			descriptionClass: "galleryWidget_image_description",
			fadeOutAnimation: {opacity: 0},
			fadeOutAnimationTime: 300,		// czas trwania znikania
			fadeInAnimation: {opacity: 1},
			fadeInAnimationTime: 300,		// czas trwania pojawiania się
			showImageTime: 20000,			// czas przez jaki ma być pokazany obrazek
			imageWidth: 420,
			imageHeight: 285
		};
		this.galleryWidgetOptions = jQuery.extend(defaultOptions, options);
		jQuery.galleryWidget.createImageList(this);
	},

	// Tworzy listę obrazków które będą zmieniane miedzy sobą.
	createImageList: function(table)
	{
		var options = table.galleryWidgetOptions;
		var lastImage = null;
		jQuery(table).css("visibility", "hidden");
		var outerContainer = jQuery("<div>").addClass(options.imageContainerClass).insertAfter(table).width(options.imageWidth).height(options.imageHeight);
		var innerContainer = jQuery("<div>").css("position", "relative");
		innerContainer.galleryWidgetOptions = options;
		innerContainer.appendTo(outerContainer);
		jQuery("td", table).each(function(i, item)
		{
			var image = jQuery("img", item);
			var description = jQuery(".name", item);
			if(!image || !image.size())
				return;
			var newImage = jQuery("<div>").addClass(options.imageClass).css('visibility', 'hidden');
			var src = image.attr("src");
			var href = image.parent().attr("href");

			newImage.css("position", "absolute").css("top", 0).css("left", 0);
			newImage.html("<a href='" + href +"'><img src='" + src +"'/></a>");

			newImage.appendTo(innerContainer);
			newImage.nextImage = null;

			if(i == 0)
				innerContainer.firstImage = newImage;
			else
				lastImage.nextImage = newImage;

			lastImage = newImage;
			innerContainer.animationStarted = false;

			if(!description || !description.size())
				return;

			//var imageDescription = jQuery("<div>").addClass(options.descriptionClass).appendTo(newImage);
			var descrLink = jQuery("a", description);
			newImage.html(newImage.html() + "<a href='" + href +"'><div class='" + options.descriptionClass + "'>" + descrLink.html() +"</div></a>");
			//imageDescription.html(descrLink.html());
		});
		if(lastImage && lastImage != innerContainer.firstImage)
			lastImage.nextImage = innerContainer.firstImage;
		jQuery(table).remove();
		jQuery.galleryWidget.enterAnimationLoop(innerContainer);
	},

	enterAnimationLoop: function(container)
	{
		if(container.firstImage && !container.animationStarted)
		{
			var options = container.galleryWidgetOptions;
			jQuery.galleryWidget.animateImage(options, container.firstImage);
			container.animationStarted = true;
		}
	},

	animateImage: function(options, image)
	{
		if(image.nextImage == null)
			image.css('visibility', 'visible');
		else
		{
			image.css('opacity', 0).css('visibility', 'visible');
			image.animate(options.fadeInAnimation, options.fadeInAnimationTime,
			function()
			{
				// utrzymywanie się na ekranie przez showImageTime ( 20 sek )
				image.animate({opacity: 1}, options.showImageTime, function()
				{
					// Ukrywanie obrazu
					image.animate(options.fadeOutAnimation, options.fadeOutAnimationTime, 
					function()
					{
						image.css('visibility', 'hidden');
						jQuery.galleryWidget.animateImage(options, image.nextImage);
					})
				});
			});
		}
	}
};

jQuery.fn.extend({
	gallery: jQuery.galleryWidget.build
});