(function ($) {
	$.fn.fadeTransition = function(options) {
		var options = $.extend({pauseTime: 5000, transitionTime: 2000, leadClass: 'rotator', navContainer: 'div.navigation', bulletPrefix: 'b'}, options);
		var transitionObject;
		
		Trans = function(obj) {
			var timer = null;
			var current = 0;
			var els = $("> *." + options.leadClass, obj).css("display", "none").css("left", "0").css("top", "0").css("position", "absolute");
			var bullets = new Array();
			var cls = null;
			var e = 0;
			els.each(function(){
				cls = $(this).attr("class").split(' ')[1];				
				if (cls.indexOf("b") == 0){
					bullets[e] = cls.substring(1);
					$(options.navContainer + " a#" + options.bulletPrefix + bullets[e] + " img").css({opacity: 0.5});
					e++;
				}				
			});			
			$(options.navContainer + " a#" + options.bulletPrefix + bullets[0] + " img").css({opacity: 1});
			
			$(obj).css("position", "relative");
			$(els[current]).css("display", "block");
			
			function transition(next) {
				$(els[current]).fadeOut(options.transitionTime);
				$(els[next]).fadeIn(options.transitionTime);				
				selectBullet(next);
				current = next;
				cue();
			};
			
			function selectBullet(next){	
//				console.log(bullets[current], bullets[next], current, next, bullets);
				if (bullets[current] != bullets[next]){
//					$(options.navContainer + " a#" + options.bulletPrefix + bullets[current] + " img").animate({opacity: 0.5}, options.transitionTime);
//					$(options.navContainer + " a#" + options.bulletPrefix + bullets[next] + " img").animate({opacity: 1}, options.transitionTime);
					$(options.navContainer + " a#" + options.bulletPrefix + bullets[current]).css({border: "none", padding: "0 1px"});
					$(options.navContainer + " a#" + options.bulletPrefix + bullets[next]).css({border: "1px solid white", padding: "0 0"});
				}
			};
			
			function cue() {
				if ($("> *", obj).length < 2) return false;
				if (timer) clearTimeout(timer);
				timer = setTimeout(function() { transition((current + 1) % els.length | 0)} , options.pauseTime);
			};
			
			this.showItem = function(item) {
				if (timer) clearTimeout(timer);
				transition(item);
			};
			
			cue();
		}
		
		this.showItem = function(item) {
			transitionObject.showItem(item);
		};
		
		return this.each(function() {
			transitionObject = new Trans(this);
		});
	}
})(jQuery);
