var ImageFaderWidget = new Class(
{
	Implements : Options,
	
	options : 
	{
		fadeDelay : 1500,
		fadeDuration : 800,
		fadeOptions : {'link' : 'cancel'},
		imageElements : '.image',
		gridElements : '.grid, .gridholder',
		introElements : '.hometext, .slogan',
		imagesToFade : 2
	},
	
	initialize : function(options)
	{
		this.setOptions(options);
		this.initElements();
		this.shuffleElements();
		this.startFade.delay(this.options.fadeDelay,this);
	},
	
	initElements : function()
	{
		this.imageElements = $$(this.options.imageElements);
		this.gridElements = $$(this.options.gridElements);
		this.introElements = $$(this.options.introElements);
		this.imageElements.set('tween',$H(this.options.fadeOptions).extend({'duration' : this.options.fadeDuration}));
		this.gridElements.set('tween',$H(this.options.fadeOptions).extend({'duration' : this.options.fadeDuration}));
		this.introElements.set('tween',$H(this.options.fadeOptions).extend({'duration' : this.options.fadeDuration})).fade('hide');
	},
	
	shuffleElements : function()
	{
		this.shuffledElements = this.imageElements.slice(0);
		for(var j, x, i = this.shuffledElements.length; i; j = parseInt(Math.random() * i), x = this.shuffledElements[--i], this.shuffledElements[i] = this.shuffledElements[j], this.shuffledElements[j] = x); 
	},

	startFade : function()
	{
		this.fadeInterval = this.fadeImages.periodical(this.options.fadeDuration,this);
	},
	
	fadeImages : function()
	{
		var el = [];
		
		this.options.imagesToFade.times(function()
		{
			if(this.shuffledElements.length > 0)
			{
				el.push(this.shuffledElements.shift());
			}
			else
			{
				if(this.fadeInterval)
				{
					$clear(this.fadeInterval);
					this.fadeGrid();
					this.fadeIntroText();
				}
			}
		},this);
		
		$$(el).fade('out');
	},
	
	fadeGrid : function()
	{
		this.gridElements.fade.delay(this.options.fadeDelay,this.gridElements,'out');
	},
	
	fadeIntroText : function()
	{
		this.introElements.fade.delay(this.options.fadeDelay,this.introElements,'in');
	}
	
});

window.addEvent('domready',function()
{
	var imageFader = new ImageFaderWidget();
});