var Carousel = Class.create();

Carousel.prototype = {

	path: null,
	image: null,
	tempImage: null,
	tempPath: null,
	startPath: null,
	startImage: null,
	images: null,
	activeImage: null,
	slideShowTimer: null,
	slideTime: null,
	effectDuration: null,

	initialize : function(){
		this.paths = $$('div#carousel a[rel^=lightbox]').flatten();
		this.images = $$('div#carousel a[rel^=lightbox] img').flatten();
		this.image = this.images.first();
		this.path = this.paths.first();

		if (this.image)
		{
			this.startImage = this.image.src;
			this.startPath = this.path.href;
		}
		else
		{
			return null;
		}
		this.slideTime = 4;
		this.activeImage = 0;
		this.effectDuration = 0.5;
		this.startSlideShow();
	},

	changeImage: function(imageNum)
	{
		if (imageNum < 0)
		{
			imageNum = this.images.length - 1;
		}
		if (imageNum == this.images.length)
		{
			imageNum = 0;
		}
		
		this.activeImage = imageNum;

		if (this.activeImage > 0)
		{
			this.tempImage = this.image.src;
			this.tempPath = this.path.href;
 			this.path.href = this.paths[this.activeImage].href;
			this.image.src = this.images[this.activeImage].src;
			this.paths[this.activeImage].href = this.tempPath;
			this.images[this.activeImage].src = this.tempImage;
		}
		else
		{
			if (this.tempPath)
			{
				this.tempImage = this.image.src;
				this.tempPath = this.path.href;
				
				for (var i=0; i<this.images.length-1; i++)
				{
					this.paths[i].href = this.paths[i+1].href;
					this.images[i].src = this.images[i+1].src;
				}
				this.paths[this.paths.length-1].href = this.tempPath;
				this.images[this.images.length-1].src = this.tempImage;
				this.path.href = this.paths[0].href;
				this.image.src = this.images[0].src;
			}
			
		}
		new Effect.Appear(this.image,{duration: this.effectDuration, afterFinish: (function(){this.startSlideShow();}).bind(this)});
	},

	showNext: function()
	{
		new Effect.Fade(this.image,{duration: this.effectDuration, afterFinish: (function(){ if(this.images.length > 1) {if(this.activeImage == this.images.length - 1){ this.changeImage(0);} else{this.changeImage(this.activeImage+1);}} }).bind(this)});
		
	},

	startSlideShow: function()
	{
		this.slideShowTimer = new PeriodicalExecuter(function(pe){ Carousel.showNext(); pe.stop(); },this.slideTime);
	}
}

Event.observe(window,'load',function()
{
	(function()
	{
		var oldUpdate = Element.Methods.update;
		Element.addMethods({
			update: function(element, html)
			{
				element = $(element);
				var oldHtml = element.innerHTML;
				oldUpdate(element, html);
				element.fire('dom:update', {prevValue: oldHtml, newValue: html});
				return element;
    			}
  			}
		);
	})();

	Carousel = new Carousel();
	$('content').observe('dom:update', function()
	{
		var Carousel = Class.create();
		Carousel.prototype = {
		
			path: null,
			image: null,
			startPath: null,
			startImage: null,
			images: null,
			activeImage: null,
			slideShowTimer: null,
			slideTime: null,
			effectDuration: null,
		
			initialize : function(){
				this.paths = $$('div#carousel a[rel^=lightbox]').flatten();
				this.images = $$('div#carousel a[rel^=lightbox] img').flatten();
				this.image = this.images.first();
				this.path = this.paths.first();
				if (this.image)
				{
					this.startImage = this.image.src;
					this.startPath = this.path.href;
				}
				else
				{
					return null;
				}
				this.slideTime = 4;
				this.activeImage = 0;
				this.effectDuration = 0.5;
				this.startSlideShow();
			},
		
			changeImage: function(imageNum)
			{
				if (imageNum < 0)
				{
					imageNum = this.images.length - 1;
				}
				if (imageNum == this.images.length)
				{
					imageNum = 0;
				}
				
				this.activeImage = imageNum;
				if (this.activeImage > 0)
				{
					this.tempImage = this.image.src;
					this.tempPath = this.path.href;
					this.path.href = this.paths[this.activeImage].href;
					this.image.src = this.images[this.activeImage].src;
					this.paths[this.activeImage].href = this.tempPath;
					this.images[this.activeImage].src = this.tempImage;
				}
				else
				{
					if (this.tempPath)
					{
						this.tempImage = this.image.src;
						this.tempPath = this.path.href;
						this.path.href = this.startPath;
						this.image.src = this.startImage;

						for (var i=0; i<this.images.length-1; i++)
						{
							this.paths[i].href = this.paths[i+1].href;
							this.images[i].src = this.images[i+1].src;
						}
						this.paths[this.paths.length-1].href = this.tempPath;
						this.images[this.images.length-1].src = this.tempImage;
						this.path.href=this.paths[0].href;
						this.image.src=this.images[0].src;
					}
					
					
					
				}
				new Effect.Appear(this.image,{duration: this.effectDuration, afterFinish: (function(){this.startSlideShow();}).bind(this)});
			},
		
			showNext: function()
			{
				new Effect.Fade(this.image,{duration: this.effectDuration, afterFinish: (function(){ if(this.images.length > 1) {if(this.activeImage == this.images.length - 1){ this.changeImage(0);} else{this.changeImage(this.activeImage+1);}} }).bind(this)});
				
			},
		
			startSlideShow: function()
			{
				this.slideShowTimer = new PeriodicalExecuter(function(pe){ Carousel.showNext(); pe.stop(); },this.slideTime);
			}
		}
		Carousel = new Carousel();
	});
});