SPARCslideshow = {
	shows: {},
	init: function (id,options,json) {
		SPARCslideshow.shows[id] = {};
		SPARCslideshow.shows[id].images = json.evalJSON();
		SPARCslideshow.shows[id].options = options.evalJSON();
		var data = SPARCslideshow.shows[id].options,
			target = $('slideshow-' + id),
			size = target.down('img').getDimensions();
		target.setStyle({height: size.height + 'px', width: size.width + 'px'});
		if (data.show_indicators) {
			target.select('li a').each(function(link){
				link.observe('click',SPARCslideshow.jumpToSlide);
			});
		}
		if (data.show_nav) {
			target.select('.slide-nav a').each(function(link){
				link.observe('click',SPARCslideshow.prevNext);
			});
		}
		SPARCslideshow.shows[id].timer = setTimeout(function(){
			SPARCslideshow.swap(id);
		},(data.duration * 1000));
	},
	grabShow: function(element){
		return element.up('div.slideshow').id.split('-')[1];
	},
	effects: function(img,newimg,data,swapto) {
		var link = img.up('a'),
			newimg = $(newimg);
		switch(data.options.transition) {
			case 'fadeout':
				Effect.Fade(img,{
					duration: 0.4,
					afterFinish: function () {
						img.src = data.images[swapto].src;
						img.width = data.images[swapto].width;
						img.height = data.images[swapto].height;
						img.classNames().each(function(e){
							img.removeClassName(e);
						});
						img.addClassName('image-' + swapto);
						Effect.Appear(img,{ duration:1 });
					}
				});
				break;
			case 'fadein':
				img.absolutize();
				img.setStyle({
					zIndex: 100
				});
				newimg.setStyle({
					zIndex: 200,
					display:'none'
				});
				link.insert({top:newimg});
				newimg.addClassName('image-' + swapto);
				Effect.Appear(newimg,{
					duration:1.5,
					afterFinish: function(){ img.remove(); }
				});
				break;
			case 'slide-in-left':
				link.up('div.slideshow').setStyle({ overflow:'hidden'});
				img.setStyle({
					top:0,
					left:0,
					position:'absolute',
					zIndex:100
				});
				newimg.setStyle({
					zIndex:200,
					top:0,
					left:(img.getWidth()*-1) + 'px',
					display:'none',
					position:'absolute'
				});
				link.insert({top:newimg});
				newimg.show();
				newimg.addClassName('image-' + swapto);
				newimg.morph('left:0;',{
					duration:2,
					afterFinish: function(){ img.remove(); }
				});
				break;
			case 'slide-in-right':
				link.up('div.slideshow').setStyle({ overflow:'hidden' });
				img.setStyle({
					top:0,
					right:0,
					position:'absolute',
					zIndex:100
				});
				link.insert({bottom:newimg});
				newimg.setStyle({
					zIndex:200,
					top:0,
					right:(img.getWidth()*-1) + 'px',
					display:'none',
					position:'absolute'
				});
				newimg.show();
				newimg.addClassName('image-' + swapto);
				newimg.morph('right:0;',{
					duration:2,
					afterFinish: function(){ img.remove(); }
				});
				break;
		}
		if (data.images[swapto].link === false) {
			link.href = 'javascript:;';
		} else {
			link.href = (data.images[swapto].link.length > 0) ? data.images[swapto].link : 'javascript:;';
			link.target = (data.images[swapto].link.indexOf('http') >= 0) ? '_blank': '_self';
		}
	},

	jumpToSlide: function (event) {
		var li = Event.element(event).up('li'),
			show = SPARCslideshow.grabShow(li),		
			data = SPARCslideshow.shows[show];
		clearTimeout(data.timer);
		li.siblings().each(function(e){
			e.removeClassName('active-slide');
		});
		li.addClassName('active-slide');
		var swapto = li.previousSiblings().length,
			img = li.up('div.slideshow').down('img'),
			newimg = new Image();
		newimg.onload = function () {
			SPARCslideshow.effects(img,newimg,data,swapto);
			SPARCslideshow.shows[show].timer = setTimeout(function(){
				SPARCslideshow.swap(show);
			},(20000));
		}
		newimg.src = data.images[swapto].src;
	},

	prevNext: function(event){
		Event.element(event).stopObserving();
		var div = Event.element(event).up('div'),
			show = SPARCslideshow.grabShow(div),
			data = SPARCslideshow.shows[show];
		clearTimeout(data.timer);
		switch (div.hasClassName('prev')) {
			case true:
				var img = div.up('div.slideshow').down('img'),
					current = new String();
				img.classNames().each(function(c){
					current = c;
				});
				current = current.split('-')[1];
				var swapto = (((current * 1) - 1) < 0) ? (data.images.length - 1) : ((current * 1) - 1);
				if (div.up('div.slideshow').down('ul.slideshow-nav')) {
					div.up('div.slideshow').down('ul.slideshow-nav').childElements().each(function(e,index){
						if (index == swapto) {
							e.addClassName('active-slide');
						} else {
							e.removeClassName('active-slide');
						} 
					});
				}
				var newimg = new Image();
				newimg.onload = function () {
					SPARCslideshow.effects(img,newimg,data,swapto);
					SPARCslideshow.shows[show].timer = setTimeout(function(){
						SPARCslideshow.swap(show);
					},(20000));
				}
				newimg.src = data.images[swapto].src;
				break;
			case false:
				SPARCslideshow.swap(show);
				break;
		}
		Event.element(event).observe('click',SPARCslideshow.prevNext);
		return;
	},
	swap: function(id) {
		var data = SPARCslideshow.shows[id],
			target = $('slideshow-' + id),
			img = target.down('img'),
			current = new String();
		img.classNames().each(function(c){
			current = c;
		});
		current = current.split('-')[1];
		var swapto = (((current * 1) + 1) > (data.images.length - 1)) ? 0 : ((current * 1) + 1);
		var newimg = new Image();
		newimg.onload = function () {
			if (target.select('.slideshow-nav')){
				target.select('.slideshow-nav li').each(function(e,index){
					if (index == swapto) {
						e.addClassName('active-slide');
					} else {
						e.removeClassName('active-slide');
					} 
				});
			}
			SPARCslideshow.effects(img,newimg,data,swapto);
			SPARCslideshow.shows[id].timer = setTimeout(function(){
				SPARCslideshow.swap(id);
			},(data.options.duration * 1000));
		}
		newimg.src = data.images[swapto].src;
	}
}
