
var imageCycler = (function() {
	
	var defaultSettings = {
		containerSelector: null,
		visibleClassName: "current",
		delay: 2000,
		fadeSpeed: "slow"
	};
	
	var settings, repeater, $imgContainer, $images, maxIdx;
	var ready = false;
	
	function setup(opts) {
		settings = opts || {};
		for ( var opt in defaultSettings ) {
			if( !(opt in settings) ) {
				settings[opt] = defaultSettings[opt];	
			}
		}	
		$imgContainer = $(settings.containerSelector);
		$images = $imgContainer.find("ul li");
		maxIdx = $imgContainer.find("li img").length - 1;
		ready = true;
	} // end setup()
	
	function start() {
		if(!ready) {
			alert("Call setup() before starting image cycle.");	 // DEBUG
			return;
		}
		repeater = setInterval( fadeImages, settings.delay );
	} // end start
	
	function fadeImages() {
		var $curImg = $imgContainer.find("ul li." + settings.visibleClassName);
		var curIdx = $curImg.index();
		var nextIdx = curIdx + 1;
		nextIdx = (nextIdx > maxIdx) ? 0 : nextIdx;
		var $nextImg = $images.eq(nextIdx);
		$nextImg.fadeIn(settings.fadeSpeed, function() {
			$(this).addClass(settings.visibleClassName);	
		});
		$curImg.fadeOut(settings.fadeSpeed, function() {
			$(this).removeClass(settings.visibleClassName);	
		});	
	} // end fadeImages()
	
	return {
		setup: setup,
		start: start	
	}
})(); // end imageCycler anonymous()
