// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

var WC = function() {
	return {
		url2 : {	slide_data :  '/projects/concourse/index_files/slideshow/',
					  slide_images: '/projects/concourse/'
		},
		url : {	slide_data :  '/w/002/js/',
					  slide_images: '/w/002/images/'
		}
	}
}();

WC.Slideshow = Class.create({
  initialize: function(element, list_filename) {
    this.element = element = $(element);
		this.current_slide = 0;
		this.slides = new Array();
		this.list_base = list_filename;
		new Ajax.Request(WC.url.slide_data + list_filename + '.js', {
			method: 'get',
			onSuccess: this.buildImages.bind(this) 
		});
	},
	buildImages: function(transport) {
		this.slide_data = eval(transport.responseText);
		
		// hide the first slide
		this.element.select('.slide').invoke('hide');
		
		template = '<div class="image"><img src="' + WC.url.slide_images + this.list_base + '/image_#{id}.jpg" /></div><p>#{caption} <span>#{credit}</span></p>';
		for(var i=0,len=this.slide_data.length;i<len;i++) {
			this.slides[i] = new Element('div',{ 'class': 'slide', style: 'display:none' });
			if(i==0) this.slides[i].setStyle({display:'block'});
			this.slides[i].innerHTML = template.interpolate(this.slide_data[i]);
			Element.insert(this.element, this.slides[i]);
		}
		
		this.watchButtons();
  },
	watchButtons: function() {
		this.next_prev = $('next_prev').show();
		this.next_button = $('next_slide');
		//$('prev_slide').observe('click',this.go_click.bindAsEventListener(this));
		this.next_button.observe('click',this.goClick.bindAsEventListener(this));
		$$('.slide div').each(function(slide) {slide.observe('click',this.goNext.bindAsEventListener(this));
		},this);
	},
	goClick: function(e) {
		if(Event.element(e).id == 'next_slide') {
			this.goNext();
		}
		else {this.goPrev();}
		Event.stop(e);
	},
	goNext: function() {
		this.go(1)
	},
	goPrev: function() {
		this.go(-1);
	},
	go: function(direction) {
		this.prev_slide = this.current_slide;
		this.current_slide += direction;
		// error correction
		if(this.current_slide < 0) this.current_slide = 0;
		else if(this.current_slide == this.slides.length) this.current_slide = 0;//this.slides.length - 1;
		if(this.prev_slide != this.current_slide) this.go_to_current();
	},
	go_to_current: function() {
		Effect.Fade(this.slides[this.prev_slide], {duration: .5});
	  Effect.Appear(this.slides[this.current_slide], {duration: .5});
	}
});	