var tpg = {
	'runtime_data':{}
}

/* BEGIN UI */
tpg.ui = {
	'mini_slideshow':function(args){
		/*
			NOTE: VARIABLE-WIDTH ITEMS SUPPORTED.
			SLIDESHOW MAY BE CONFIGURED IN HTML USING THESE OPTIONAL ATTRIBUTES:
			- fade_duration
			- slide_duration
			- autostart
			- infinite_scrolling
		*/
		var slideshow = this;
		slideshow.elt = $(args.elt);
		slideshow.settings = {
			'fade_duration':window.parseFloat(args.fade_duration)||300,
			'slide_duration':window.parseFloat(args.slide_duration)||5000,
			'autostart':args.autostart||false,
			'infinite_scrolling':args.infinite_scrolling||false
		}
		slideshow.runtime_data = {
			'current_slide':0,
			'slides':slideshow.elt.find('.ui-mini-slideshow-slide'),
			'timer':null
		};

		var arrow_left = slideshow.elt.find('.ui-mini-slideshow-arrowleft');
		var arrow_right = slideshow.elt.find('.ui-mini-slideshow-arrowright');

		/* BEGIN PUBLIC METHODS */
		slideshow.previous_slide = function(evt){
			if(evt&&evt.preventDefault) evt.preventDefault();
			if(slideshow.runtime_data.is_busy) return;
			if(slideshow.settings.infinite_scrolling){
				var slide_num = slideshow.runtime_data.current_slide-1;
				if(slide_num==-1) slide_num = slideshow.runtime_data.slides.length-1;
				slideshow.show_slide(slide_num);
			}else{
				if(slideshow.runtime_data.current_slide) slideshow.show_slide(slideshow.runtime_data.current_slide-1);
			}
			assess_arrows();
		}

		slideshow.next_slide = function(evt){
			if(evt&&evt.preventDefault) evt.preventDefault();
			if(slideshow.runtime_data.is_busy) return;
			if(slideshow.settings.infinite_scrolling){
				var slide_num = slideshow.runtime_data.current_slide+1;
				if(slide_num==slideshow.runtime_data.slides.length) slide_num = 0;
				slideshow.show_slide(slide_num);
			}else{
				if(slideshow.runtime_data.current_slide<slideshow.runtime_data.slides.length-1) slideshow.show_slide(slideshow.runtime_data.current_slide+1);
			}
			assess_arrows();
		}

		slideshow.show_slide = function(slide_num){
			if(slideshow.runtime_data.is_busy) return;
			slideshow.runtime_data.is_busy = true;

			var slide_already_visible = $(slideshow.runtime_data.slides[slide_num]).is(':visible');

			if(slideshow.runtime_data.current_slide!=slide_num){
				$(slideshow.runtime_data.slides[slideshow.runtime_data.current_slide]).fadeOut(slideshow.settings.fade_duration);
			}else if(!slide_already_visible){
				$(slideshow.runtime_data.slides[0]).css('display','block');
			}
			if(!slide_already_visible){
				$(slideshow.runtime_data.slides[slide_num]).fadeIn(slideshow.settings.fade_duration,function(){
					slideshow.runtime_data.is_busy = false;
					if(slideshow.settings.autostart&&slideshow.settings.slide_duration&&slideshow.runtime_data.slides.length>1) slideshow.toggle_timer(true);
				});
			}

			slideshow.runtime_data.current_slide = slide_num;
			if(slideshow.runtime_data.slides.length>1) $(slideshow.elt).find('.ui-mini-slideshow-slide-indicator').text((slideshow.runtime_data.current_slide+1)+' of '+slideshow.runtime_data.slides.length);

			assess_arrows();
		}

		slideshow.toggle_timer = function(enabled){
			if(slideshow.settings.autostart){
				window.clearTimeout(slideshow.runtime_data.timer);
				if(enabled) slideshow.runtime_data.timer = window.setTimeout(slideshow.next_slide,slideshow.settings.slide_duration);
			}
		}

		/* END PUBLIC METHODS */

		/* BEGIN PRIVATE METHODS */
		function assess_arrows(){
			arrow_left.addClass('active').removeClass('inactive');
			arrow_right.addClass('active').removeClass('inactive');

			if(!slideshow.runtime_data.current_slide) {
				arrow_left.removeClass('active');
				arrow_left.addClass('inactive');
			}
			if(slideshow.runtime_data.current_slide>=slideshow.runtime_data.slides.length-1) {
				arrow_right.removeClass('active');
				arrow_right.addClass('inactive');
			} 

		}
		/* END PRIVATE METHODS */

		/* BEGIN INIT */
		arrow_left.bind('click',slideshow.previous_slide);
		arrow_right.bind('click',slideshow.next_slide);
		assess_arrows();

		if(slideshow.runtime_data.slides.length){
			slideshow.show_slide(0);
			slideshow.elt.bind('mouseenter',function(){
				slideshow.toggle_timer(false);
			}).bind('mouseleave',function(){
				slideshow.toggle_timer(true);
			});
		}

		/* END INIT */
	},
	'mini_slideshow_init':function(){
		var elts = $('.ui-mini-slideshow');
		elts.each(function(index,elt){
			elt.slideshow = new tpg.ui.mini_slideshow({
				'elt':elt,
				'fade_duration':$(elt).attr('fade_duration'),
				'slide_duration':$(elt).attr('slide_duration'),
				'autostart':($(elt).attr('autostart')=='true'),
				'infinite_scrolling':($(elt).attr('infinite_scrolling')=='true')
			});
		});
	}
}
/* END UI */

$(document).ready(function(){
	tpg.ui.mini_slideshow_init();
});
