var Newsfeed = function() {

	var current_group = 0;
	var newsfeed_items = [];

	function showNextNewsItemSet() {
		if(! $(groupID(current_group+1))) return;
		hideNewsItemGroup(current_group);
		showNewsItemGroup(current_group+1);
		setCurrentGroup(current_group+1);
		showOrHideButtons();
	}

	function showPreviousNewsItemSet() {
		if(! $(groupID(current_group-1))) return;
		hideNewsItemGroup(current_group);
		showNewsItemGroup(current_group-1);
		setCurrentGroup(current_group-1);
		showOrHideButtons();
	}

	function showNewsItemGroup(num) {
		$(groupID(num)).show();
	}

	function hideNewsItemGroup(num) {
		$(groupID(num)).hide();
	}

	function groupID(num) {
		return '#newsfeed-items-group-' + num;
	}

	function showOrHideButtons() {
		$(groupID(current_group-1)).size() > 0 ? $('#newsfeed-pager-back').show() : $('#newsfeed-pager-back').hide();
		$(groupID(current_group+1)).size() > 0 ? $('#newsfeed-pager-more').show() : $('#newsfeed-pager-more').hide();
	}

	function setCurrentGroup(index) {
		$('#newsfeed-page-' + current_group).removeClass('current');
		current_group = index;
		$('#newsfeed-page-' + current_group).addClass('current');
	}

	function getAndLoadNewsfeed(feed_url) {
		$.ajax({
			url: feed_url,
			dataType: 'json',
			success: loadNewsFeed,
			error: function(data) {
				$('#newsfeed-items').html("<p>Sorry, there are no news items available at this time.</p>");
			}
		});
	}

	function loadNewsFeed(feed_as_json) {
		var title = feed_as_json.title;
		var handle = feed_as_json.handle;
		var items = feed_as_json.items;

		var group_index = 0;
		var group = null;

		// Set newsfeed id (for image background) and title
		$('#newsfeed-header p.newsfeed-title').first().attr("id",handle+"-newsfeed-title");
		$(handle+"-newsfeed-title").html(title);

		// Empty old items, old pager icons
		$('#newsfeed-items').empty();
		$('#newsfeed-pager-icons').empty();

		for (var item in items) {

			// Create a group for every 4 items; add pager icon for each group
			if (item % 4 === 0) {

				// Create group and append to items box
				group = $('<dl id="newsfeed-items-group-'+group_index+'"></dl>');
				group.hide();
				group.appendTo('#newsfeed-items');

				// Create group icon and append to list of icons
				group_icon = $('<li></li>');
				group_icon.attr("id","newsfeed-page-"+group_index);
				group_icon.html(group_index);
				group_icon.appendTo($('ul#newsfeed-pager-icons'));

				// Increment group index
				group_index = group_index + 1;

			}

			// Create item and append to current group
			var term = $('<dt></dt>');

			var link = $('<a href="" target="_blank"></a>');
			link.attr("href",items[item].link);
			link.html(items[item].title);
			link.appendTo(term);

			var defn = $('<dd></dd>');
			defn.html(items[item].desc);

			term.appendTo(group);
			defn.appendTo(group);
		}

		// Shift group icons left to simulate centering
		var footer_width = $('#newsfeed-footer').width();
		var pager_width = $('#newsfeed-pager-icons').width();
		var left_offset = (footer_width - pager_width) / 2;
		$('#newsfeed-pager-icons').css("left",left_offset);

		// Set first group as current; show the first group; hide the back (prev) button
		setCurrentGroup(0);
		showNewsItemGroup(0);
		showOrHideButtons();

		// Hide list of feeds
		$('#newsfeed-switcher ul').hide(500);

	}

	return {
		init : function() {

			// Show/hide list of feeds
			$('#newsfeed-switcher-link').click(function(){
				$(this).siblings("ul").toggle(500);
				return false;
			});

			// Hide list of feeds by default
			$('#newsfeed-switcher ul').hide();

			// Select feed
			$('#newsfeed-switcher a.newsfeed-link').click(function(){
				getAndLoadNewsfeed($(this).attr("href"));
				return false;
			})

			// Load first feed
			getAndLoadNewsfeed($('#newsfeed-switcher ul li a').first().attr("href"));

			// Previous / Next Items
			$('#newsfeed-pager-back').click(function(){
				showPreviousNewsItemSet();
				return false;
			});
			$('#newsfeed-pager-more').click(function(){
				showNextNewsItemSet();
				return false;
			});

		}
	}
}();

$(function(){
	Newsfeed.init();
});
