window.addEvent('domready', function(){
	$$('.external').setProperty('target', '_blank');
});

window.addEvent('load', function(){
	$$('.thumbs li').addEvents({
		'mouseenter':function(){
			this.setStyle('opacity', 1);
		},
		'mouseleave':function(){
			if(!this.hasClass('current'))
				this.setStyle('opacity', 0.4);
		}
	}).setStyle('opacity', 0.4);	
	
	$$('.display').each(function(el, i){	
		new CustomSlidey({cs: el, duration:1000, fader:true, handles:$$('.thumbs')[i].getElements('a')});
		new CustomSlidey({cs: $$('.thumbs')[i], duration:600, vertical:true});
	});
});

var CustomSlidey = new Class({
	initialize: function(params){
		this.cs = params.cs;
		this.handles = params.handles;
		this.captions = params.captions;
		this.fader = params.fader || false;
		this.cs_sleeve_inner = this.cs.getElements('.cs_sleeve_inner')[0];
		this.cs_window = this.cs.getElements('.cs_window')[0];
		if(this.captions){
			this.caption_container = new Element('div', {'class':'caption_container'}).inject(this.cs);
		}
		
		this.slidey = params.cs.getElements('.slidey')[0];
		this.vertical = params.vertical || false;
		this.items = params.items || this.cs.getElements('li');
		this.items.getLast().addClass('last');
		//this.items[this.items.length-2].addClass('last_but_one');
		this.auto = params.auto || false;
		this.move_in_px = params.move_in_px || 80;
		this.duration = params.duration || 500;
		this.moving = false;
		this.slidey_size = 0;
		this.next_prev = params.next_prev || false;
		
		if(this.fader){
			this.items.each(function(el){
				var fadey = new Fx.Tween(el, {transition:'sine:out', duration:this.duration, onComplete:function(){this.moving = false;}.bind(this)});
				el.store('fadey', fadey);
				el.set('opacity', 0);
			}.bind(this));
		}
		else{
			if(this.vertical){
				this.window_size = this.cs_window.getSize().y;
				this.slidey_size = this.cs.getElements('ul')[0].getSize().y;
				this.slidey.setStyle('height', this.slidey_size);
			}
			else{
				this.window_size = this.cs_window.getSize().x;
				this.items.each(function(li){ this.slidey_size += li.getSize().x; }.bind(this));
				this.slidey.setStyle('width', this.slidey_size);
			}
			this.fx_slidey = new Fx.Tween(this.slidey, {transition:'sine:out', link:'cancel', duration:this.duration, onComplete:function(){this.moving = false;}.bind(this)});
		}
		
		this.extent = this.slidey_size-this.window_size;
		this.index = 0;
		this.slidey_goto = 0;
		this.end_reached = false;
		if(this.auto){
			this.goto(0, null, true);
			var auto_move = function(){ 
				if(this.index+1>=this.items.length){
					this.goto(0);
				}else{
					this.goto(this.index+1);
				}
			};
			auto_move.periodical(3000, this);
		}
		if(this.next_prev){
			if(this.slidey_size>this.window_size || this.fader){
				this.scroll_prev = new Element('a', {'href':'#', 'class':'scroll_prev controls'}).set('text', 'Scroll back').inject(this.cs_sleeve_inner,'top').setStyle('opacity', 0.3);
				this.scroll_next = new Element('a', {'href':'#', 'class':'scroll_next controls'}).set('text', 'Scroll forward').inject(this.cs_sleeve_inner);
				this.cs.getElements('.scroll_next')[0].addEvent('click', this.next.bind(this));
				this.cs.getElements('.scroll_prev')[0].addEvent('click', this.previous.bind(this));
			}
		}
		if(this.handles){
			this.handles.each(function(el, i){
				el.addEvent('click', this.goto.bind(this, [i, el]));
			}.bind(this));
			this.goto(0, this.handles[0], true);
			//this.handles[0].getParent().addClass('current');
		}
	},
	goto: function (i, el, init){
		if(this.next_prev){
			this.end_reached = false;
			if(i == 0)
				this.scroll_prev.setStyle('opacity', 0.3);
			else
				this.scroll_prev.setStyle('opacity', 1);
				
			if(i == this.items.length-1 && this.next_prev)
				this.scroll_next.setStyle('opacity', 0.3);
			else
				this.scroll_next.setStyle('opacity', 1);
		}
			
		if (!this.moving && (this.index != i || init)){
			this.moving = true;
			this.prev_index = this.index;
			this.index = i;
			el.getParent().getParent().getChildren().removeClass('current').setStyle('opacity', 0.4);
			el.getParent().addClass('current').setStyle('opacity', 1);
			
			if(this.fader){
				this.items[this.prev_index].setStyle('zIndex',1);
				this.items[this.index].setStyles({'zIndex':0, opacity:1});
				if(init)
					this.items[this.index].retrieve('fadey').start('opacity', 1);
				else
					this.items[this.prev_index].retrieve('fadey').start('opacity', 0);
			}
			else{
				this.slidey_goto = this.index*-this.move_in_px;
				if(this.vertical)
					this.fx_slidey.start('top', this.slidey_goto);
				else
					this.fx_slidey.start('left', this.slidey_goto);
			}
			if(this.captions)
				this.caption_container.set('text', this.cs.getElements('.caption div')[i].get('text'));
		}

		return false;
	},
	next: function (){
		if(this.fader){
			this.index++;
			this.goto(this.index);
		}
		if (this.slidey_size>this.window_size){
	
			if (!this.end_reached && !this.moving){
				this.index++;
				
				if ((this.move_in_px*this.index)>=this.extent){
					this.slidey_goto = -this.extent;
					//if(!this.auto)
						this.end_reached = true;
				}
				else {
					this.slidey_goto = this.index*-this.move_in_px;
				}
				this.moving = true;
				
				
				if(this.end_reached){
					this.scroll_next.setStyle('opacity', 0.3);
					this.scroll_prev.setStyle('opacity', 1);
				}
				else{
					this.scroll_next.setStyle('opacity', 1);
					this.scroll_prev.setStyle('opacity', 1);
				}
				
				
				if(this.vertical)
					this.fx_slidey.start('top', this.slidey_goto);
				else
					this.fx_slidey.start('left', this.slidey_goto);
			}
		}
		if(this.captions)
			this.caption_container.set('text', this.cs.getElements('img')[this.index].getProperty('alt'));
		return false;
	},
	previous: function (){
		if (this.slidey_size>this.window_size){
	
			if (this.index!=0 && !this.moving){
				this.index--;
				if (this.index == 0){
					this.slidey_goto = 0;
					if(this.auto)
						this.end_reached = false;
					this.scroll_next.setStyle('opacity', 1);
					this.scroll_prev.setStyle('opacity', 0.3);
				}
				else{
					this.slidey_goto = this.index*-this.move_in_px;
					this.scroll_next.setStyle('opacity', 1);
					this.scroll_prev.setStyle('opacity', 1);
				}
				if(!this.auto)
					this.end_reached = false;
				this.moving = true;
				if(this.vertical)
					this.fx_slidey.start('top', this.slidey_goto);
				else
					this.fx_slidey.start('left', this.slidey_goto);
			}
		}
		if(this.captions)
			this.caption_container.set('text', this.cs.getElements('img')[this.index].getProperty('alt'));
		return false;
	}
});