/*--------------------------------------------------------------------------
 *
 *  vieue.js
 *  $Id$
 *  © 2008 upstruct berlin oslo
 *
 *--------------------------------------------------------------------------*/

var Vieue = Class.create({
	initialize: function(id) {
		
		this.id = id;
		this.fullscreen = false;
		this.pe = null;
		this.slideroffset = 0;
		this.current = $$('#'+this.id+' .thumbnails li').first();
		
		if($$('#'+this.id+' a.fullscreen')[0])
			$$('#'+this.id+' a.fullscreen')[0].observe('click', this.toggleFullscreen.bind(this));
				
		$$('#'+this.id+' .thumbnail-slider-up')[0].observe('mousedown', this.slide.bind(this).curry('down'));
		$$('#'+this.id+' .thumbnail-slider-down')[0].observe('mousedown', this.slide.bind(this).curry('up'));
		$$('#'+this.id+' .thumbnail-slider-up, #'+this.id+' .thumbnail-slider-down').each(function(s) {
			s.observe('mouseup', this.stopSlide.bind(this));
		}.bind(this));
		
		$$('#'+this.id+' .huge img')[0].observe('click',this.next.bind(this));

		$$('#'+this.id+' .thumbnail a').each(function(thumbnail){
			$(thumbnail).observe('click',this.magnify.bind(this).curry(thumbnail));
		}.bind(this));		
		
	},
	
	next:function() {
		
		if(this.current == $$('#'+this.id+' .thumbnails li').last())
			this.magnify($$('#'+this.id+' .thumbnails li').first().down());
		else
			this.magnify(this.current.next().down());
			
	},
	

	/**
	* Toggles fullscreen mode 
	* @param	event
	**/	
	toggleFullscreen: function(event){
	
		event.preventDefault();
		if(this.fullscreen){
			$(this.id).removeClassName('open');
			$(this.id).addClassName('minified');
			this.fullscreen = false;
		} else {
			$(this.id).removeClassName('minified');
			$(this.id).addClassName('open');
			this.fullscreen = true;
			
			if(this.slideroffset == 0){
				this.getSliderOffset();
			}
		}
		
	},
	
	getSliderOffset: function(){
	
		var lastThumb = $$('.thumbnails li:last-child')[0];
		this.slideroffset = -Math.abs((lastThumb.cumulativeOffset().top + lastThumb.getHeight())-102);
		this.slideroffset += $$('#'+this.id+' .thumbnail-slider')[0].getHeight();
	
	},
	
	magnify: function(anchor, event){
		
		if(event)
			event.preventDefault();
		this.current = anchor.up();
		$$('#'+this.id+' .huge img')[0].src = anchor.href;
		$$('#'+this.id+' p.caption')[0].update($(anchor).down().next().innerHTML);
		
	},
	
	stopSlide: function(event){
	
		event.preventDefault();
		if(this.pe){
			this.pe.stop();
			this.pe = null;
		}
				
	},
	
	slide: function(direction, event){
	
		event.preventDefault();		
		var slider = $$('#'+this.id+' .thumbnails')[0];
		this.pe = new PeriodicalExecuter(function(){
			var offset = slider.positionedOffset().top + (direction == 'up' ? -5 : 5);
			if(offset < 0 && offset > this.slideroffset){
				slider.setStyle({ top: offset + 'px' });
			}
		}.bind(this),0.05);
			
	}
	
});
