/*
Author:
	luistar15, <leo020588 [at] gmail.com>
License:
	MIT License

Class
	viewer v0.9 (rev.08-12-08)

Arguments:
	items: dom collection | required
	parameters - see Parameters below

Parameters:
	sizes: obj | item sizes (px) | default: {w:480,h:240}
	mode: string OR array | 'rand','top','right','bottom','left','alpha' | default: 'rand'
	modes: array | default: ['top','right','bottom','left','alpha']
	fxOptions: object | Fx.Tween options | default: {duration:500}
	interval: int | for periodical | default: 5000

Methods:
	previous(manual): walk to previous item
		manual: bolean | default:false
	next(manual): walk to next item
		manual: bolean | default:false
	play(wait): auto walk items
		wait: boolean | required
	stop(): stop auto walk
	walk(item,manual): walk to item
		item: int | required
		manual: bolean | default:false

Requires:
	mootools 1.2 core
*/

var viewer=new Class({mode:'rand',modes:['top','right','bottom','left','alpha'],sizes:{w:480,h:240},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',-this.sizes.w,0,'px'],top:['top',-this.sizes.h,0,'px'],right:['left',this.sizes.w,0,'px'],bottom:['top',this.sizes.h,0,'px'],alpha:['opacity',0,1,'']};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;var a=this.attrs[this.mode].associate(['p','f','t','u']);for(var i=0;i<this.items.length;i++){if(this._current===i){this.items[i].setStyles($extend({'display':'block','z-index':'2'},JSON.decode('{"'+a.p+'":"'+a.f+a.u+'"}')));}else if(this._previous===i){this.items[i].setStyles({'z-index':'1'});}else{this.items[i].setStyles({'display':'none','z-index':'0'});}}
this.items[n].set('tween',$merge(this.fxOptions,{onComplete:this.onComplete.bind(this)})).tween(a.p,a.f,a.t);}},play:function(wait){this.stop();if(!wait){this.next();}
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);},onComplete:function(){this.disabled=false;this.items[this._previous].setStyle('display','none');if(this.onWalk)this.onWalk(this._current);}});
