﻿var tabs = new Array();
function getTabId(url) {
	var sIdx = url.indexOf('tabs=');
	var eIdx = url.indexOf('&', sIdx);
	if (sIdx < 0) {
		return '';
	}
	if (eIdx < 0)
		eIdx = url.length - 1;
	return url.substr(sIdx + 5, eIdx);
}

function getUrlInfo(url) {
	return { tabId: getTabId(url) }
}

function initTabsFromUrl() {
	var url = location.href;
	var ids = getTabId(url);
	if (ids != '') {
		var tabParams = ids.split(',');
		for (var i = 0; i < tabParams.length; i++) {
			tabs[i] = parseTabParam(tabParams[i]);
		}
	}
}

function parseTabParam(tabParam) {
	var splitData = tabParam.split('|');
	var tabId;
	if (splitData.length > 0) {
		tabId = splitData[0];
	}

	return { tabId: tabId };
}

function isActive(tab, tabId) {
	for (var i = 0; i < tabs.length; i++) {
		if (tabs[i].tabId == tabId)
			return true;
	}
	return false;
}

function appendTabId(holder, tabId) {
	holder.find('span.paging a').each(function() {
		var url = $(this).attr('href');
		$(this).attr('href', url + '#tabs=' + tabId);
	});
}

function showContent(tabId) {
	var holder = $('#' + tabId);
	if (holder.length == 1) {
		holder.show();
		appendTabId(holder, tabId);
	}
}

function hideContent(tabId) {
	var holder = $('#' + tabId);
	if (holder.length == 1) {
		holder.hide();
		appendTabId(holder, tabId);
	}
}

$(document).ready(function() {
	initTabs();
});

function initTabs() {
	initTabsFromUrl();
	$('div.tabs').each(function() {
		var activated = false;
		var anyFound = false;
		var firstTab = null;

		$(this).find('ul.nav li').each(function() {
			var $li = $(this);
			var url = $li.find('a').attr('href');
			var urlInfo = getUrlInfo(url);
			if (urlInfo.tabId) {
				anyFound = true;
				if (firstTab == null)
					firstTab = $li;
				if (isActive($li, urlInfo.tabId)) {
					$li.addClass('ui-state-active');
					showContent(urlInfo.tabId);
					activated = true;
				}
				else {
					hideContent(urlInfo.tabId);
				}

				$li.find('a').click(function() {
					activateTab($(this));
				});
			}
		});

		if (!activated && anyFound && !$(this).attr('allowInactive')) {
			var urlInfo = getUrlInfo(firstTab.find('a').attr('href'));
			firstTab.addClass('ui-state-active');
			showContent(urlInfo.tabId);
		}
	});
}

function activateTab(tab) {
	var url = tab[0].href;
	var ui = getUrlInfo(url);
	var oldTab = tab.parents('div.tabs:eq(0)').find('.ui-state-active');
	var newTab = tab.parents('li');
	var oldTabUI = oldTab.length > 0 ? getUrlInfo(oldTab.find('a').attr('href')) : null;
	if (oldTabUI == null || ui.tabId != oldTabUI.tabId) {
		if (oldTabUI != null) {
			var oldContent = $('#' + oldTabUI.tabId);
			if (oldContent.length == 1) {
				oldContent.hide();
			}
			if (oldTabUI != null)
				oldTab.removeClass('ui-state-active');
		}

		var newContent = $('#' + ui.tabId);
		if (newContent.length == 1) {
			newContent.show();
			newContent.trigger('afterShow');
		}

		newTab.addClass('ui-state-active');

		if (location.hash == '') {
			location.hash = 'tabs=' + ui.tabId;
		} else {
			if (oldTabUI == null || location.hash.indexOf(oldTabUI.tabId) < 0) {
				location.hash += ',' + ui.tabId;
			} else {
				// this tab already exists in hash
				location.hash = location.hash.replace(oldTabUI.tabId, ui.tabId);
			}
		}
	}
	return false;
}

function SetTabInUrl(tabId) {
	var url = location.href;
	var ids = getTabId(url);
	var urlTabs = new Array()
	var tabsExist = false;
	if (ids != '') {
		var tabParams = ids.split(',');
		for (var i = 0; i < tabParams.length; i++) {
			urlTabs[i] = parseTabParam(tabParams[i]);
		}
		tabsExist = true;
	}
	for (i = 0; i < urlTabs.length; i++)
		if (tabId == urlTabs[i].tabId)
		return;

//TODO: this supports single tab only; add support for multiple tabs
	if (tabsExist)
		window.hash = "#tabs=" + tabId;
	else
		window.location += "#tabs=" + tabId;

}
