//requires commonjs.js
// Functions for handling tabs.
Tabs = {
	// Changes to the tab with the specified ID.
	GoTo: function (contentId, skipReplace) {
		// This variable will be true if a tab for the specified
		// content ID was found.
		var foundTab = false;

		// Get the TOC element.
		var toc = document.getElementById("toc");
		if (toc) {
			var lis = toc.getElementsByTagName("li");
			for (var j = 0; j < lis.length; j++) {
				var li = lis[j];

				// Give the current tab link the class "current" and
				// remove the class from any other TOC links.
				var anchors = li.getElementsByTagName("a");
				for (var k = 0; k < anchors.length; k++) {
					if (anchors[k].hash == "#" + contentId) {
						CSS.addclass(li, "current");
						foundTab = true;
						break;
					} else {
						CSS.removeclass(li, "current");
					}
				}
			}
		}

		// Show the content with the specified ID.
		var divsToHide = [];
		var divs = document.getElementsByTagName("div");
		var scrollyman; //baddition
		for (var i = 0; i < divs.length; i++) {
			var div = divs[i];
			
			if (div.className.match(/\bcontent\b/i)) {
				if (div.id == "_" + contentId) {
					div.style.display = "block";
					scrollyman = div.parentNode.parentNode; //baddition
				} else {
					divsToHide.push(div);
				}
			}
		}

		// Hide the other content boxes.
		for (var i = 0; i < divsToHide.length; i++)
			divsToHide[i].style.display = "none";

		// Change the address bar.
		if (!skipReplace) window.location.replace("#" + contentId);
		
		//baddition: can't think of a better way to do this right now (scrolly thing may not always be grandparent), or even if this is always necessary -- reset the scroll position
		scrollyman.scrollTop = 0;
	},

	OnClickHandler: function (e) {
		// Stop the event (to stop it from scrolling or
		// making an entry in the history).
		if (!e) e = window.event;
		if (e.preventDefault) e.preventDefault(); else e.returnValue = false;

		// Get the name of the anchor of the link that was clicked.
		Tabs.GoTo(this.hash.substring(1));
	},

	Init: function () {
		if (!document.getElementsByTagName) return;

		// Attach an onclick event to all the anchor links on the page.
		var anchors = document.getElementsByTagName("a");
		for (var i = 0; i < anchors.length; i++) {
			var a = anchors[i];
			if (a.hash) a.onclick = Tabs.OnClickHandler;
		}

		var contentId;
		if (window.location.hash) contentId = window.location.hash.substring(1);

		var divs = document.getElementsByTagName("div");
		for (var i = 0; i < divs.length; i++) {
			var div = divs[i];

			if (div.className.match(/\bcontent\b/i)) {
				if (!contentId) contentId = div.id;
				div.id = "_" + div.id;
			}
		}

		if (contentId) Tabs.GoTo(contentId, true);
	}
};

// Hook up the OnLoad event to the tab initialization function.
window.onload = Tabs.Init;

// Hide the content while waiting for the onload event to trigger.
var contentId = window.location.hash || "#news";

if (document.createStyleSheet) {
	var style = document.createStyleSheet();
	style.addRule("div.content", "display: none;");
	style.addRule("div" + contentId, "display: block;");
} else {
	var head = document.getElementsByTagName("head")[0];
	if (head) {
		var style = document.createElement("style");
		style.setAttribute("type", "text/css");
		style.appendChild(document.createTextNode("div.content { display: none; }"));
		style.appendChild(document.createTextNode("div" + contentId + " { display: block; }"));
		head.appendChild(style);
	}
}