// Javascript Slideshow Class

Slideshow = Class.create();

Slideshow.prototype = {
    initialize: function(slideid, onlyArrows, nVisible) {
		
		if (nVisible == undefined) {
			this.nVisible = 1;
		} else {
			this.nVisible = nVisible;
		}
		if (onlyArrows == undefined)
			onlyArrows = false;
		
		this.slide = $(slideid);
		this.wrapper = this.slide.down('div');
		
		if (this.slide.down('.noJS'))
			this.slide.down('.noJS').removeClassName('noJS');
		
   		this.slider = this.wrapper.down('ul');
		this.desc = this.slide.down('.desc');
    	this.allLi = this.slider.select('li');		
    	this.totLi = this.allLi.length;

		if (navigator.userAgent.match('Safari')) {
			this.slideDim = this.slider.down('li').getWidth();
			if (this.slideDim == 0 || this.slideDim > 400) { 
				var xs = this;
				Event.observe(window, 'load', function() {
					xs.slideDim = xs.slider.down('li').getWidth();
				});
			}
		} else if (this.slider.down('li')) {
			this.slideDim = this.slider.down('li').getWidth();
		}
		
		this.x = 0;
		this.isTweening = false;
		this.animSpeed = 0.7;
		this.idle = true;
    	
    	if (this.totLi > this.nVisible--) {
	    	this.index = 1;
	    	if (this.desc) 
				this.desc.update(this.slider.select('img')[this.index-1].alt);
			this.totLinks = 0;
			this.control = this.wrapper.next('div');
			this.allLi.each(this.addLink.bind(this));
			
			if (!onlyArrows) {
				this.control.toggle();
			}
			
    		this.slide.down('.prev').observe('click', this.prev.bindAsEventListener(this));
    		this.slide.down('.next').observe('click', this.next.bindAsEventListener(this));
    	} else {
			this.slide.down('.prev').setStyle({'visibility':'hidden'});
			this.slide.down('.next').setStyle({'visibility':'hidden'});
			if (this.slide.down('.fader-l'))
				this.slide.down('.fader-l').toggle();
			if (this.slide.down('.fader-r'))
				this.slide.down('.fader-r').toggle();
		}
			
    },
    addLink: function() {
    	this.totLinks++;
    	var li = new Element('li', { 'class': "mid" });
		var a = new Element('a', { href: "#", 'class': (this.totLinks == this.index)?'selected':'' }).update(this.totLinks);
		li.appendChild(a);
		a.observe('click', this.slideTo.bindAsEventListener(this,a));
		if (this.control.down('li.last')) {
			this.control.down('li.last').insert({ before: li });
		} else {
			var ul = new Element('ul').appendChild(li);
			this.control.appendChild(ul);
		}
    },
    slideTo: function(e,a) {
    	Event.stop(e);
    	if (this.mov)
    		this.idle = this.mov.state == 'idle' || this.mov.state == 'finished';
    	if (!a.hasClassName('prev') && !a.hasClassName('next') && !a.hasClassName('selected') && this.idle) {
    		if (this.index == 1 || this.index == (this.totLi-this.nVisible))
    			this.slide.down('.disabled').removeClassName('disabled');
    		this.slide.down('.selected').removeClassName('selected');
    		a.addClassName('selected');
    		var newIndex = parseInt(a.innerHTML); 
    		this.mov = new Effect.Move(this.slider, { x: -(Math.round(this.slideDim))*(newIndex-this.index), y: 0, mode: 'relative', duration: this.animSpeed });
			this.index = newIndex;
			if (this.desc) 
				this.desc.update(this.slider.select('img')[this.index-1].alt);
			if (this.index == 1)
				this.slide.down('.prev').addClassName('disabled');
			if (this.index == this.totLi-this.nVisible)
				this.slide.down('.next').addClassName('disabled');
    	}
    },
    prev: function(e) {
    	Event.stop(e);
    	if (!this.slide.down('.prev').hasClassName('disabled'))
    		this.slideTo(e, this.slide.select('li.mid a')[this.index-2]);
    },
    next: function(e) {
    	Event.stop(e);
    	if (!this.slide.down('.next').hasClassName('disabled'))
    		this.slideTo(e, this.slide.select('li.mid a')[this.index]);
    }
}