/*
image transition plugin for event page and homepage
*/

(function($) {
var fadeType = 'in';
var img;
var settings;
	
$.fn.imgTransition = function(options){
	
	settings = jQuery.extend($.fn.imgTransition.defaults, options);
	
	return this.each(function (){
		if(settings.imgList.length > 1){
			$(this).wrap('<span style="position:relative;display:block;"></span>').parent().prepend('<img style="display:none;">');
			img = $(this).parent().find(':first-child').css({'opacity': 0, 'position': 'absolute', 'left': 0, 'top':0, 'z-index': 10, 'display': 'block'});
			if(settings.initialised){
				settings.initialised(img.parent());
			}
			setTimeout($.fn.imgTransition.swap, settings.interval);
		}
	});
	
};

/* 
 * Function used in the timeout
 */
$.fn.imgTransition.swap = function(){
	if(settings.imgList.length > 1){
		settings.idx++;
		if(settings.idx >= settings.imgList.length){
			settings.idx = 0;
		}
		var target;
		var op;
		if(fadeType == 'out'){
			op = 0;
			target = ':last-child';
			fadeType = 'in';
		} else {
			op = 1;
			target = ':first-child';
			fadeType = 'out';
		}
		var targetImg = img.parent().find(target);
		targetImg.attr('src', settings.imgList[settings.idx].src).attr('alt', settings.imgList[settings.idx].alt);
		img.animate({opacity: op}, settings.fadeSpeed, function (){
			if(settings.transitionEnd != null){
				//do something after the transition has ended
				settings.transitionEnd(img.parent(), settings.idx);
			}
			setTimeout($.fn.imgTransition.swap, settings.interval);
		});
	}
	
	
};


/*
 * Default params
 */
$.fn.imgTransition.defaults = {
	idx: 0,
	imgList: [],
	interval: 5000, //5 seconds
	fadeSpeed: 1500, //1.5 seconds
	intialised: null, //no start callback
	transitionEnd: null //no end callback
};

})(jQuery);
