var MXSlideShow = new Class({
	
	Implements : [Options, Events],
	
	options :
	{
		bg : null,
		period : 4500,
		fadeTime : 1500,
		crossFading : false
	},
	
	initialize : function(obj, options)
	{
		this.setOptions(options);
		
		// Set up cicle variables
		var i = 0;
		var imgs;
		
		// Hide a possible image overflow
		obj.setStyle("overflow", "hidden");
		
		if(this.options.bg)
			obj.setStyle("background", this.options.bg);
		
		var imgs = obj.getElements("img");
		
		// Get variables out of environment
		var period = this.options.period;
		var fadeTime = this.options.fadeTime;
		
		var loader;
		
		Array.each(imgs, function(img, i)
		{
			img.set({
				width : obj.getStyle("width"),
				height : obj.getStyle("height"),
				styles :
				{
					"position" : "absolute"
				}
			});
		});
		
		if(this.options.crossFading)
		{
			// Set every image to absoluto positioning and make it not visible
		
			Array.each(imgs, function(img, i)
			{
				img.set({
					styles : 
					{
						"z-index" : 100 - i
					}
				});
			});
			
			// cicle function
			loader = function()
			{
				// Get the index before the increment
				var index = i;
				
				if(i < imgs.length - 1)
				{
					i++;
					
					new Fx.Tween(imgs[index],
					{
						property: "opacity",
						duration: fadeTime
					
					}).start(1, 0);
				}
				else
				{
					i = 0;
					
					Array.each(imgs, function(img, i)
					{
						img.set("opacity", 1);
					});
				}
			}
		}
		else
		{
			Array.each(imgs, function(img, i)
			{
				if(i >= 1)
					img.setStyle("opacity", 0);
			});
			
			// cicle function
			loader = function()
			{
				// Get the index before the increment
				var index = i;
				
				if(i < imgs.length - 1)
					i++;
				else
					i = 0;
				
				var img = imgs[index];
				
				if(img.getStyle("opacity") == 0)
				{
					new Fx.Tween(img,
					{
						property: "opacity",
						duration: fadeTime,
						onComplete : (function()
						{
							img.fade("out");
						
						}).delay(period - fadeTime, new Array(img))
						
					}).start(0, 1);
				}
				else
				{
					img.fade("out");
				}
			}
		}
		
		loader.periodical(this.options.period, this, new Array(imgs, i));
	},
});

