var eComRousel = new Class({

	mode: 'rand',
	modes: ['top','right','bottom','left','alpha'],
	sizes: {w:500,h:200},
	fxOptions: {duration:500},
	interval: 5000,

	initialize: function(items,options){
		if(options) for(var o in options) this[o]=options[o];
		//
		if(this.buttons){
			this.buttons.previous.addEvent('click',this.previous.bind(this,[true]));
			this.buttons.next.addEvent('click',this.next.bind(this,[true]));
		}
		this._current = 0;
		this._previous = null;
		this.items = items.setStyle('display','none');
		this.items[this._current].setStyle('display','block');
		this.disabled = false;
		this.attrs = {
			left: ['left',{'left': -this.sizes.w+'px'}],
			top: ['top',{'top': -this.sizes.h+'px'}],
			right: ['left',{'left': this.sizes.w+'px'}],
			bottom: ['top',{'top': this.sizes.h+'px'}],
			alpha: ['opacity',{'opacity': 0}]
		};
		this.rand = this.mode=='rand';
		this.sequence = typeof(this.mode)=='object' ? this.mode : false;
		this.curseq = 0;
		this.timer = null;
	},

	walk: function(n,manual){
		if(this._current!==n && !this.disabled){
			this.disabled=true;
			if(manual){
				this.stop();
			}
			if(this.rand){
				this.mode = this.modes.getRandom();
			}else if(this.sequence){
				this.mode = this.sequence[this.curseq];
				this.curseq += this.curseq+1<this.sequence.length ? 1 : -this.curseq;
			}
			this._previous = this._current; 
			this._current = n;
			for(var i=0;i<this.items.length;i++){
				if(this._current===i){
					this.items[i].setStyles($extend(this.attrs[this.mode][1],{'display':'block','z-index':'2'}));
				}else if(this._previous===i){
					this.items[i].setStyles({'z-index':'1'});
				}else{
					this.items[i].setStyles({'display':'none','z-index':'0'});
				}
			}
			new Fx.Tween(this.items[n],this.attrs[this.mode][0],$extend({onComplete:this.onFxComplete.bind(this)},this.fxOptions)).start(this.mode=='alpha'?1:0);
		}
	},
	
	play: function(){
		this.timer = this.next.periodical(this.interval,this,[false]);
	},

	stop: function(){
		$clear(this.timer);
	},

	next: function(manual){
		this.walk(this._current+1<this.items.length ? this._current+1 : 0,manual);
	},

	previous: function(manual){
		this.walk(this._current>0 ? this._current-1 : this.items.length-1,manual);
	},

	onFxComplete: function(){
		this.disabled = false;
		this.items[this._previous].setStyle('display','none');
		if(this.onWalk) this.onWalk();
	}
});