(function($) {
	$.fn.featured_training = function(options) {
		var defaults = {
			page_width: 745,
			duration: 500,
			easing: 'swing',
			page: 1,
			total_pages: 1
		};
		var library = {
			fade_in: function(module) { $(module).clearQueue().animate({ opacity: 1 }, 100); },
			fade_out: function(module) { $(module).clearQueue().animate({ opacity: .3 }, 100); },
			page_slide: function(training_list) { training_list.clearQueue().animate({ left: (settings.page - 1) * -settings.page_width }, settings.duration, settings.easing); },
			update_page_indicator: function(page_indicator, page) {
				page_indicator.removeAttr('class');
				page_indicator.get(page - 1).className = 'on';
			}
		};
		var settings = $.extend(defaults, options);

		return this.each(function() {
			var container = $(this);
			var training_list = container.find('ul');
			var modules = training_list.find('li');

			/* Calculate total_pages and create page indicator */
			var page_indicator = {};
			var page_indicator_html = "";
			$.extend(settings, { total_pages: Math.ceil(container.find('li').length / 5) });
			for (i = 0; i < settings.total_pages; i++) page_indicator_html += "<li></li>";
			page_indicator_html = "<ul>" + page_indicator_html + "</ul>";
			container.find('.page-indicator').html(page_indicator_html);
			page_indicator = container.find('.page-indicator li');
			library.update_page_indicator(page_indicator, settings.page);

			/* Hide 'previous' navigation on load because we start on page 1 */
			container.find('.previous-page').hide();
			if (settings.total_pages == 1) container.find('.next-page').hide();

			/* Page navigation */
			container.find('.next-page').click(function() {
				if (settings.page < settings.total_pages) {
					settings.page++;
					library.page_slide(training_list);
					library.update_page_indicator(page_indicator, settings.page);
					container.find('.next-page, .previous-page').fadeTo(200, 1, function() { $(this).show(); });
					if (settings.page == settings.total_pages) container.find('.next-page').clearQueue().fadeTo(200, 0, function() { $(this).hide(); });
				}
				return false;
			});
			container.find('.previous-page').click(function() {
				if (settings.page > 1) {
					settings.page--;
					library.page_slide(training_list);
					library.update_page_indicator(page_indicator, settings.page);
					container.find('.next-page, .previous-page').fadeTo(200, 1, function() { $(this).show(); });
					if (settings.page == 1) container.find('.previous-page').clearQueue().fadeTo(200, 0, function() { $(this).hide(); });
				}
				return false;
			});

			/* Hover effects */
			modules.hover(
				function() {
					var active_module = this;
					modules.each(function() {
						if (modules.index(this) == modules.index(active_module)) {
							library.fade_in(this);
						} else {
							library.fade_out(this);
						}
					});
				},
				function() {
					modules.each(function() { library.fade_in(this); });
				}
			);

		});
	}
})(jQuery);
