var FadeSlideShow = Fx.Elements.extend({

	options: {
		wait: false,
		_current: 0
	},

	initialize: function(){
		var options, elements;
		$each(arguments, function(argument, i){
			switch($type(argument)){
				case 'object': options = argument; break;
				default:
					var temp = $$(argument);
					elements = temp;
			}
		});
		this.elements = elements || [];
		this.setOptions(options);
		this._timeoutInterval = false;
		this.effects = {};
		this.effects.opacity = 'fullOpacity';
				
		/*if(this.elements[0])
		{
			this.elements[0].parentNode.style.visibility = 'visible';
		}*/
		
		this.elements.each(function(el, i){
			this.elements[i].fullOpacity = 1;
			//if(i != this.options._current)
			//{
				for (var fx in this.effects) el.setStyle(fx, 0);
				el.style.visibility = 'visible';
			//}
			//else
			//{
//				for (var fx in this.effects) el.setStyle(fx, el[this.effects[fx]]);				
			//}
		}, this);
	},

	fadeIn: function(index){
		index = ($type(index) == 'element') ? this.elements.indexOf(index) : index;
		var obj = {};
		obj[index] = {};
		for (var fx in this.effects) obj[index][fx] = this.elements[index][this.effects[fx]];
		return this.start(obj);
	},

	fadeOut: function(index){
		index = ($type(index) == 'element') ? this.elements.indexOf(index) : index;
		var obj = {};
		obj[index] = {};
		for (var fx in this.effects) obj[index][fx] = 0;
		return this.start(obj);
	},

	slide: function(){
		var _next = this.options._current + 1;
		if(_next >= this.elements.length)		
		{
			_next = 0;
		}
		var obj = {};
		obj[_next] = {};
		for (var fx in this.effects) obj[_next][fx] = this.elements[_next][this.effects[fx]];
		obj[this.options._current] = {};
		for (var fx in this.effects) obj[this.options._current][fx] = 0;		
		this.options._current = _next;		
		return this.start(obj);
	},

	slideTo: function(_next){
		if(this.options._current == _next) return;
		if(_next >= this.elements.length)		
		{
			_next = 0;
		}
		var obj = {};
		obj[_next] = {};
		for (var fx in this.effects) obj[_next][fx] = this.elements[_next][this.effects[fx]];
		this.elements[_next].style.zIndex = 100;
		obj[this.options._current] = {};
		for (var fx in this.effects) obj[this.options._current][fx] = 0;
		this.elements[this.options._current].style.zIndex = 10;
		
		var fixobj = {};
		for(var i=0; i < this.elements.length; i++)
		{
			if(i != _next && i != this.elements.length)
			{
				this.elements[i].style.zIndex = 10;
				fixobj[i] = {};
				for (var fx in this.effects) fixobj[i][fx] = 0;
				this.set(fixobj);
			}
		}
		
		this.options._current = _next;		
		return this.start(obj);
	}
	
});

var slideshows = [];
var _fades = [];

var first_delay = 180;
var delay_between = 5000;
var second_delay = 400;

var duration = 1000;
var _count = 0;

function initFadeSlideShow()
{
	var _box = $("home-content");
	if (_box)
	{
		slideshows = _box.getElements("div.fade");
		slideshows = shuffle(slideshows);
		_count = slideshows.length;
		for(var i=0; i < slideshows.length; i++)
		{
			var imgs = slideshows[i].getElements("img");
			_fades[i] = new FadeSlideShow(imgs,{duration:duration});
			_fades[i]._step = 0;
			setTimeout('_switch('+i+')',i*_count*first_delay);
		}
	}
}

function _switch(_i)
{
	_fades[_i].slide();
	if(_fades[_i]._step == 0)
	{
		setTimeout('_switch('+ _i+')',_count*_count*first_delay + delay_between + _i*_count*second_delay);
		_fades[_i]._step++;
	}
	else if(_fades[_i]._step == 1)
	{
		setTimeout('_switch('+ _i+')',_count*_count*(first_delay + second_delay));
	}
}

function shuffle(_array) {
	for (var i = _array.length - 1; i > 0; i--) {
      var j = $random(0, i);
      temp = _array[i];
      _array[i] = _array[j];
      _array[j] = temp;
    }
    return _array;
}


if (window.addEventListener)
	window.addEventListener("load", initFadeSlideShow, false);
else if (window.attachEvent)
	window.attachEvent("onload", initFadeSlideShow);
