(function($) {
	$.fn.ukcg_banners = function(settings) {
		settings = jQuery.extend({
			cycle: true,
			duration: 400,
			interval: 7000
		}, settings);
		
		var ukcg_banner_obj = this;
		var ukcg_banner_container = $('ul.banner-container', ukcg_banner_obj);
		var ukcg_banner_slides = $('li', ukcg_banner_container).hide();
		var ukcg_banner_nav = null;
		
		var ukcg_banner_count = ukcg_banner_slides.length;
		var ukcg_banner_timer = null;
		var ukcg_banner_index = -1;
		var ukcg_banner_token = -1;
		
		ukcg_banners_nav_create();
		ukcg_banners_slide_show(0);
		
		return ukcg_banner_obj;
		
		function ukcg_banners_nav_create() {
			ukcg_banner_nav = $('ul.banner-nav', ukcg_banner_obj.append('<ul class="banner-nav"></ul>'));
			if (ukcg_banner_count > 1) {
				for(var i = 0; i < ukcg_banner_count; i++) {
					ukcg_banner_nav.append('<li><a href="#"><span class="banner-nav-jumplink">' + (i + 1) + '</span></a></li>');
				}
				$('li', ukcg_banner_nav).each(function(index) {
					$('a', $(this)).delay((ukcg_banner_count - index) * settings.duration / 2).fadeIn(settings.duration).click(function() {
						ukcg_banners_slide_show(index);
						return false;
					});
				});
			}
		}
		
		function ukcg_banners_nav_show(index) {
			index = (((((index + 1) % ukcg_banner_count) + ukcg_banner_count) % ukcg_banner_count) + ukcg_banner_count - 1) % ukcg_banner_count;
			if (index != ukcg_banner_index) {
				ukcg_banners_nav_hide(ukcg_banner_index);
				$('span.banner-nav-jumplink', $('li', ukcg_banner_nav).eq(index).addClass('active')).stop(true, true).fadeIn(settings.duration);
			}
		}
		
		function ukcg_banners_nav_hide(index) {
			index = index % ukcg_banner_count;
			if (index >= 0) {
				$('span.banner-nav-jumplink', $('li', ukcg_banner_nav).eq(index)).stop(true, true).fadeOut(settings.duration, function() {
					$('li', ukcg_banner_nav).eq(index).removeClass('active');
				});
			}
		}
		
		function ukcg_banners_slide_show(index) {
			index = (((((index + 1) % ukcg_banner_count) + ukcg_banner_count) % ukcg_banner_count) + ukcg_banner_count - 1) % ukcg_banner_count;
			if (index != ukcg_banner_index && ukcg_banner_token == ukcg_banner_index) {
				ukcg_banner_token = index;
				ukcg_banners_timer_stop();
				ukcg_banners_nav_show(index);
				ukcg_banner_slides.removeClass('active').eq(index).addClass('active').stop(true, true).fadeIn(settings.duration, function() {
					ukcg_banners_slide_hide(ukcg_banner_index);
					ukcg_banner_index = index;
					ukcg_banners_timer_start();
				});
			}
		}
		
		function ukcg_banners_slide_hide(index) {
			index = index % ukcg_banner_count;
			if (index >= 0 && ukcg_banner_index >= 0) {
				ukcg_banner_slides.eq(index).hide();
			}
		}
		
		function ukcg_banners_slide_cycle() {
			ukcg_banners_slide_next();
		}
		
		function ukcg_banners_slide_next() {
			ukcg_banners_slide_show(ukcg_banner_index + 1);
		}
		
		function ukcg_banners_slide_previous() {
			ukcg_banners_slide_show(ukcg_banner_index + 1);
		}
		
		function ukcg_banners_timer_start() {
			clearTimeout(ukcg_banner_timer);
			if (settings.cycle) {
				ukcg_banner_timer = setTimeout(function() {
					ukcg_banners_slide_cycle();
				}, settings.interval);
			}
		}

		function ukcg_banners_timer_stop() {
			clearTimeout(ukcg_banner_timer);
		}
	};
})(jQuery);
