jQuery(function() {
	feedTabs.init();
});
var feedTabs = {
	init: function () {
		this.setDefaultTab();
		this.setupTabClick();
	},
	setDefaultTab: function () {
		var defaultTab = jQuery(".feed-lists .tabs a:first");
		this.setActiveStatus(defaultTab);
	},
	setupTabClick: function () {
		jQuery(".feed-lists .tabs a").click(function (e) {
			e.preventDefault();
			feedTabs.handleTabClick(jQuery(this));
		});
	},
	handleTabClick: function (tabLink) {
		var href = tabLink.attr("href");
		var tabList = tabLink.parents("ul");
		var tabContent = this.getTabContent();
		if (this.canLoad(tabLink, tabContent)) {
			this.removeActiveStatus(tabList);
			this.setActiveStatus(tabLink);
			this.hideAndLoad(tabContent, href);
		}
	},
	getTabContent: function () {
		return jQuery("#feedtabcontent");
	},
	canLoad: function (tabLink, tabContent) {
		return !this.isActiveTab(tabLink) && !this.isLoading(tabContent);
	},
	isActiveTab: function (tabLink) {
		return tabLink.parent().hasClass("active");
	},
	isLoading: function (tabContent) {
		return tabContent.hasClass("loading");
	},
	setLoading: function (tabContent) {
		tabContent.addClass("loading");
	},
	removeActiveStatus: function (tabList) {
		tabList.find(".active").removeClass("active");
	},
	setActiveStatus: function (tabLink) {
		tabLink.parent().addClass("active");
	},
	hideAndLoad: function (tabContent, href) {
		this.hideTabContent(tabContent);
		this.setLoading(tabContent);
		this.loadContent(href);
	},
	hideTabContent: function (tabContent) {
		tabContent.children().fadeOut(200, function () {
			feedTabs.tabContentChildHidden(jQuery(this));
		});
	},
	tabContentChildHidden: function (tabChild) {
		tabChild.remove();
	},
	loadContent: function (href) {
		jQuery.get(href, function (xmlHttp) {
			feedTabs.contentLoaded(xmlHttp);
		});
	},
	contentLoaded: function (xmlHttp) {
		xmlHttp = jQuery("<div/>").append(xmlHttp.replace(/<script(.|\s)*?\/script>/g, ""));
		var newTabContent = xmlHttp.find("#feedtabcontent");
		this.insertNewContent(newTabContent);
		this.showNewChildren(tabContent);
	},
	insertNewContent: function (newTabContent) {
		newTabContent.children().hide();
		tabContent = feedTabs.getTabContent();
		tabContent.append(newTabContent.children());
	},
	showNewChildren: function (tabContent) {
		tabContent.children().fadeIn(200, function () {
			jQuery(this).removeAttr("style");
			tabContent.removeClass("loading");
		});
	}
};
