<!--
	(function ($) {
		$.fn.MGCarousel = function (options) {
			return this.each(function () {

				var self = this;
				var allowedAnimTypes = $(['fade', 'slide', 'blind', 'expand']);
				var settings = {
					self								: $(this),
					banner_list					: $('ul:first', $(this)).children(),
					bannerListClass			: 'MG-carousel-banners',
					banner_nav					: $('.banner-nav', $(this)),
					banner_nav_items		: $('.banner-nav li', $(this)),
					rotationResumeMilli : 6000,
					animTypeDefault			: 'fade',		//fade, slide, blind
					animSpeed						: 500,
					rotationMilli				: 3000,
					selectedIdx					: 0,
					rotate							: true,
					zIndex							: $(this).css('z-index') == parseInt($(this).css('z-index'), 10) ? parseInt($(this).css('z-index')) : 0
				};


				// If options exist, merge them with default settings
				if ( options )
					$.extend( settings, options );

				// set the default selected banner index
				settings.banner_list = $(settings.banner_list);
				settings.selectedIdx = settings.banner_list.index(settings.banner_list.filter('.current')) >= 0 ? settings.banner_list.index(settings.banner_list.filter('.current')) : settings.selectedIdx;

				// check the animation type is valid
				if ($.inArray(settings.animType, allowedAnimTypes) < 0) { settings.animType  = settings.animTypeDefault; }

				// determine the current selected panel
				settings.currPanel = settings.banner_list.eq(settings.selectedIdx);

				// make the container relative incase it already isn't
				settings.self.css({ position : 'relative', overflow : 'hidden' });

				// make the banners absolute incase they already aren't
				// hide all but the default, set it to current
				var zIndexCounter = settings.zIndex;
				settings.banner_list.parent().addClass(settings.bannerListClass);
				settings.banner_list.addClass('banner-item').css({ position : 'absolute', top : 0, left : 0, opacity : 1 });
				settings.banner_list.each(function (i) {
					if (i != settings.selectedIdx) {
						$(this).css({ zIndex : zIndexCounter++ }).removeClass('current');
					} else {
						$(this).css({ 'z-index' : settings.zIndex + (settings.banner_list.size() - 1) }).addClass('current');
						if (settings.animType == 'slide') {
							$(this).prevAll('.banner-item').css({ left : (-1 * settings.banner_list.width()) });
							$(this).nextAll('.banner-item').css({ left : settings.banner_list.width() });
						} else if (settings.animType == 'blind') {
							$(this).prevAll('.banner-item').css({ top : (-1 * settings.banner_list.height()) });
							$(this).nextAll('.banner-item').css({ top : settings.banner_list.height() });
						} else if (settings.animType == 'expand') {	// nothing needs to be done here
						} else { // defaults to fade
							$(this).siblings('.banner-item').css({ opacity : 0 });
						}
					}
				});
				
				var $banner_nav = $(settings.banner_nav);
				if ($banner_nav.size() < 1) {
					// make the nav buttons container
					$banner_nav = $('<ul/>').addClass('banner-nav');
	
					// make the list of nav buttons
					for(var i=0;i<settings.banner_list.size();i++) {
						var $nav_item = $('<li/>', { text : i + 1 })
								.addClass('banner-nav-item')
								.addClass((i == settings.selectedIdx) ? 'current' : '')
								.addClass((i == 0) ? 'first' : '')
								.addClass((i == settings.banner_list.size() - 1) ? 'last' : '')
								.appendTo($banner_nav);
					}
					$banner_nav.appendTo(this);
				}

				// make the nav buttons container
				$banner_nav.css({ zIndex : settings.zIndex + settings.banner_list.size() });

				// set a navigation items reference
				settings.banner_nav = $banner_nav;

				// make the list of nav buttons
				settings.banner_nav.children().each(function(i, item) {
						$(item)
						.data('target_banner', settings.banner_list.eq(i))
						.bind('click', { $nav_item : $nav_item }, function(e) {
							clearTimeout(settings.self.data('pause_timeout_id'));
							clearTimeout(settings.self.data('rotate_timeout_id'));
							settings.self.data('pause_timeout_id', setTimeout(function(){rotate(settings);}, settings.rotationResumeMilli));
							if (!$(this).hasClass('current'))
								doTransition({ settings : settings, trgNav : $(this) });
						});
                        if (settings.selectedIdx == i)
                            $(item).addClass('current');
				});


				// start rotating the panels
				rotate(settings);
			});

			function doTransition(args) {
				var settings = args.settings;
				var $trgNav = $(args.trgNav);
				var $trgPanel = $trgNav.data('target_banner');

				// clear any currently running loop
				settings.banner_list.clearQueue('fx');

				settings.banner_list.not($trgPanel).each(function(i, item) {
					if ($(this).css('z-index') > $trgPanel.css('z-index'))
						$(this).css('z-index', $(this).css('z-index') - 1);
				});

				$(settings.currPanel).removeClass('current');
				$trgPanel.css({ 'z-index' : settings.zIndex + (settings.banner_list.size() - 1) }).addClass('current');

				if (settings.animType == 'slide') {
					$trgPanel.animate({ left : 0 }, settings.animSpeed, 'easeInOutCubic');
					$trgPanel.prevAll('.banner-item').animate({ left : (-1 * settings.banner_list.width()) }, settings.animSpeed, 'easeInCubic');
					$trgPanel.nextAll('.banner-item').animate({ left : settings.banner_list.width() }, settings.animSpeed, 'easeInCubic');
				} else if (settings.animType == 'blind') {
					$trgPanel.animate({ top : 0 }, settings.animSpeed, 'easeInOutCubic');
					$trgPanel.prevAll('.banner-item').animate({ top : (-1 * settings.banner_list.height()) }, settings.animSpeed, 'easeInCubic');
					$trgPanel.nextAll('.banner-item').animate({ top : settings.banner_list.height() }, settings.animSpeed, 'easeInCubic');
				} else if (settings.animType == 'expand') {
					$trgPanel
					.css({ top : (settings.banner_list.parent().height() / 2), left : (settings.banner_list.parent().width() / 2), width : 0, height : 0 })
					.animate({ left : 0, top : 0, width : settings.banner_list.parent().width(), height : settings.banner_list.parent().height() }, settings.animSpeed, 'easeInOutCubic');
				} else { // defaults to fade
					$trgPanel.animate({ opacity : 1 }, settings.animSpeed, 'easeInOutCubic');
					$trgPanel.siblings('.banner-item').animate({ opacity : 0 }, settings.animSpeed, 'easeInCubic');
				}

				$trgNav.siblings().removeClass('current');
				$trgNav.addClass('current');

				settings.currPanel = $trgPanel;
			// set pause timeout before looping again

			}

			function rotate(settings) {
				clearTimeout(settings.self.data('pause_timeout_id'));
				clearTimeout(settings.self.data('rotate_timeout_id'));
				if (settings.rotate) {
					settings.self.data('rotate_timeout_id', setTimeout(function() {
						var nextPanel = settings.banner_nav.children().filter('.current').next();
						if (nextPanel.size() < 1) nextPanel = settings.banner_nav.children().first();
						doTransition({ settings : settings, trgNav : nextPanel });
						rotate(settings)
					}, settings.rotationMilli));
				}
			}

		};
	})(jQuery);
//-->

