jQuery.showsGalleryWidget = {
		build: function(options)
		{
			var gallery = jQuery(this).get(0);
			gallery.showsGalleryWidgetConfig = jQuery.extend({
				fadeInTime: 400,
				fadeIn: {opacity: 1},
				fadeOutTime: 400,
				fadeOut: {opacity: 0},
				showTime: 10000,
				imageItemClass: ".showsFrontItem",
				imageClass: "news_image",
				imageDescriptionClass: "showsFrontDescription",
				navigatorClass: "showsFrontNavigator",
				navigatorClassActivated: "active"
			}, options);
			jQuery.showsGalleryWidget.buildImageList(gallery);
			jQuery.showsGalleryWidget.buildNavigator(gallery, gallery.showsItemsArray);
			jQuery.showsGalleryWidget.enterAnimationLoop(gallery.showsGalleryWidgetConfig, gallery.showsItemsArray);
		}, 
		
		buildImageList: function(gallery)
		{
			if(gallery != null)
			{
				var gall = jQuery(gallery).get(0);
				var options = gall.showsGalleryWidgetConfig;
				var items = jQuery(options.imageItemClass,gallery);
				items.css("visibility", "hidden").css(options.fadeOut);
				gall.showsItemsArray = items;
			}
		},
		
		buildNavigator: function(gallery, images)
		{
			if(images != null && gallery != null)
			{
				var options = jQuery(gallery).get(0).showsGalleryWidgetConfig;
				var navigator = jQuery("<div>").addClass(options.navigatorClass).appendTo(gallery);
				jQuery.each(images, function(i, image)
				{
					jQuery(navigator).html(jQuery(navigator).html() + "<a href='#'><img src='images/showFrontInactive.jpg' /></a>");				
				});
				jQuery("a", navigator).each(function(i, div)
				{
					var image = jQuery(images).get(i);
					var divObj = jQuery(div).get(0);
					divObj.showSelected = false;
					divObj.mouseOver = false;
					var mouseover = function()
					{
						if(!jQuery(div).get(0).showSelected && !jQuery(div).get(0).mouseOver)
							jQuery("img", div).attr("src", "images/showFrontHover.jpg");
							//jQuery(div).html("<img src='images/showFrontHover.jpg'/>");
						jQuery(div).get(0).mouseOver = true;
					};
					var mouseout = function()
					{
						if(!jQuery(div).get(0).showSelected && jQuery(div).get(0).mouseOver)
							jQuery("img", div).attr("src", "images/showFrontInactive.jpg");
							//jQuery(div).html("<img src='images/showFrontInactive.jpg' />");
						jQuery(div).get(0).mouseOver = false;
					};
					jQuery("img", div).mouseover(mouseover);
					jQuery("img", div).mouseout(mouseout);
					//div.get(0).image = image;
					jQuery(image).get(0).showsGalleryWidgetNavigator = jQuery(div);
					if(images.size() > 1)
					{
						jQuery(div).click(function()
						{
							if(jQuery(div).get(0).showSelected)
								return false;
							// Deaktywuję każdy obrazek
							jQuery(images).stop().stop().stop().stop();
							
							jQuery.showsGalleryWidget.hideImages(options, images, function()
							{
								// gdy ukryję go to pokazuję obrazek kliknięty.
								jQuery.showsGalleryWidget.enterAnimationLoop(options, images, image);
							});
							jQuery(div).get(0).showSelected = true;
							jQuery("img", div).attr("src", 'images/showFrontActive.jpg');
							return false;
						});
					}
					else
					{
						jQuery(div).click(function()
						{
							return false;
						});
					}
				});
			}
		},
		
		enterAnimationLoop: function(options, images, startImage)
		{
			if(images != null)
			{
				// animacja wielu obrazków
				if(images.size() > 1)
				{
					var onShow = function()
					{
						jQuery(this).animate(options.fadeIn, options.showTime,
						function()
						{
							jQuery.showsGalleryWidget.showNextImage(options, images, this, onShow);
						});
					};
					if(startImage != null)
						jQuery.showsGalleryWidget.showImage(options, jQuery(startImage), onShow);	
					else
						jQuery.showsGalleryWidget.showImage(options, jQuery(images.get(0)), onShow);
				}
				// pokazanie pojedynczego obrazku
				else if (images.size() == 1)
				{
					jQuery.showsGalleryWidget.showImage(options, images.get(0));
				}
			}
		},
		
		imageIsShown: function(options, image)
		{
			if(image != null)
			{
				var img = jQuery(image);
				for(property in options.fadeIn)
				{
					if(img.css(property) != options.fadeIn[property])
						return false;
				}
				return true;
			}
			else
				return false;
		},
		
		imageIsHidden: function(options, image)
		{
			if(image != null)
			{
				var img = jQuery(image);
				for(property in options.fadeOut)
				{
					if(img.css(property) != options.fadeOut[property])
						return false;
				}
				return true;
			}
			else
				return false;
		},
		
		hideImage: function(options, image, onHide)
		{
			if(image != null)
			{
				var hide = function()
				{
					jQuery(image).css("visibility", "hidden");
					if(onHide != null)
						onHide();
				};
				//jQuery(image).get(0).showsGalleryWidgetNavigator.removeClass(options.navigatorClassActivated);
				var a = jQuery(image).get(0).showsGalleryWidgetNavigator;
				a.get(0).showSelected = false;
				a.removeClass(options.navigatorClassActivated);
				if(!a.get(0).mouseOver)
					jQuery("img", a).attr("src", 'images/showFrontInactive.jpg');
				else
					jQuery("img", a).attr("src", 'images/showFrontHover.jpg');
				jQuery(image).animate(options.fadeOut, options.fadeOutTime, hide);
			}
		},
		
		hideImages: function(options, images, onHide, stopCount)
		{
			jQuery(images).stop();
//			jQuery.each(images, function(i, image)
//			{
//				if(stopCount == null)
//					jQuery(image).stop();
//				else
//					for(var iterator = 1; iterator <= stopCount; iterator++)
//						jQuery(image).stop();
//			});
			jQuery.each(images, function(j, img)
			{
				// jeżeli jakiś obrazek jest widoczny
				// to go ukrywam
				if(!jQuery.showsGalleryWidget.imageIsHidden(options, img) || jQuery(jQuery(img).get(0).showsGalleryWidgetNavigator).get(0).showSelected)
					jQuery.showsGalleryWidget.hideImage(options, img, onHide);
			});
		},
		
		showImage: function(options, image, onShow)
		{
			if(image != null)
			{
				//jQuery(image).get(0).showsGalleryWidgetNavigator.addClass(options.navigatorClassActivated);
				var a = jQuery(image).get(0).showsGalleryWidgetNavigator;
				jQuery(a).get(0).showSelected = true;
				jQuery(a).addClass(options.navigatorClassActivated);
				jQuery("img", a).attr("src", 'images/showFrontActive.jpg');
				jQuery(image).css("visibility", "visible");
				if(onShow != null)
					jQuery(image).animate(options.fadeIn, options.fadeInTime, onShow);
				else
					jQuery(image).animate(options.fadeIn, options.fadeInTime);
			}
		},
		
		showNextImage: function(options, images, image, onShow)
		{
			if(image != null)
			{
				var index = -1;
				jQuery.each(images, function(i, img)
				{
					if(jQuery(image).get(0) == jQuery(img).get(0))
					{
						index = i;
					}
				});
				if(index != -1)
				{
					jQuery.showsGalleryWidget.hideImage(options, image, function()
					{
						if(index == images.size() - 1)
						{
							jQuery.showsGalleryWidget.showImage(options, images.get(0), onShow);
						}
						else
						{
							jQuery.showsGalleryWidget.showImage(options, images.get(index + 1), onShow);
						}
					});
				}
			}
		},
		
		positionImage: function(image)
		{
			if(image != null)
			{
				jQuery(image).css("position", "absolute")
				.css("left", 0).css("top", 0)
				.css("visibility", "hidden").css("opacity", 0);
			}
		}
};

jQuery.fn.extend(
{
	showsGallery: jQuery.showsGalleryWidget.build
});