/**********************************************************
Author:
Adam Barry
Klestrup | partners
www.klestrup-partners.dk

Date: April 21 2009

© 2009 Adam Barry, all rights reserved
-----------------------------------------------------------

Name:
tabs script

-----------------------------------------------------------
Description:
Function that enables run-time switching between tabs in
multiple tab-structures.

-----------------------------------------------------------
Usage:
Simply place a link to the this script in the head-section
of the XHTML page. The script will then automatically
execute on page load.

<script type="text/javascript" src="tabs.js"></script>

-----------------------------------------------------------
Example:
<script type="text/javascript" src="tabs.js"></script>

<div class="tabs">
	<ul class="header">
		<li class="first selected"><span><span>Tab 1</span></span></li>
		<li><span><span>Tab 2</span></span></li>
	</ul>

	<div class="body">
		<div class="container selected">
			<h2>Contents of container 1</h2>
		</div>

		<div class="container">
			<h2>Contents of the second container</h2>
		</div>
	</div>
</div>

-----------------------------------------------------------
Dependencies:
This script depends on the windowOnLoad-script to execute

**********************************************************/

var tabDivs = new Array();
function tabSection (element,elements,currentTab) {
	this.element = element;
	this.elements = new Array();
	this.currentTab = currentTab;
}

var tabs = new Array();
function tab (headerElement,tabContainer) {
//Array-element for the tabs array
	this.headerElement = headerElement;
	this.tabContainer = tabContainer;
}


function initTabs (openTab) {
	if (!document.getElementsByTagName) return;

	/* Reset arrays */
	tabDivs = new Array();
	tabs = new Array();

	var divs = document.getElementsByTagName("div");

	for (var i = 0; i < divs.length; i++) {

		if (divs[i].className == "tabs") {
			tabDivs.push(new tabSection(divs[i],'',''));
		}
	}
	if (!tabDivs[0]) return;

	for (var x = 0; x < tabDivs.length; x++) {
		var tabDiv = tabDivs[x].element;

		/* Identify tab containers */
		tabContainers = tabDiv.getElementsByTagName("div");

		for (var p = 0; p < tabContainers.length; p++) {
			if (tabContainers[p].className.indexOf('container') == 0) {
				tabDivs[x].elements.push(new tab('',tabContainers[p]));
			}
		}

		/* Identify tab togglers */
		var tabHeader;
		tabLists = tabDiv.getElementsByTagName("ul");

		for (var i = 0; i < tabLists.length; i++) {

			if (tabLists[i].className.indexOf('header') == 0) {
				tabHeader = tabLists[i];
			}
		}

		if (!tabHeader) return;

		var togglers = tabHeader.getElementsByTagName("li");

		for (var t = 0; t < togglers.length; t++) {

			if (!tabDivs[x].elements[t]) {
				togglers[t].parentNode.removeChild(togglers[t]);
			}

			else {

				tabDivs[x].elements[t].headerElement = togglers[t];

				togglers[t].onclick = function() {
					displayTab(this.parentNode.parentNode, this);
				}
			}
		}
	}
}addLoadEvent(function(){initTabs(1);});


function displayTab (tabDiv,tabHeader) {
	clearTabs(tabDiv);
	var currentTabSection;

	for (var i = 0; i < tabDivs.length; i++) {

		if (tabDivs[i].element == tabDiv) {
			currentTabSection = tabDivs[i];
			break;
		}
	}

	for (var i = 0; i < currentTabSection.elements.length; i++) {
		if (currentTabSection.elements[i].headerElement == tabHeader) {
			currentTabSection.elements[i].headerElement.className += " selected";
			currentTabSection.elements[i].tabContainer.className += " selected";
			currentTabSection.currentTab = i;
		}
	}
}

function clearTabs (tabDiv) {
	var currentTabSection;

	for (var i = 0; i < tabDivs.length; i++) {

		if (tabDivs[i].element == tabDiv) {
			currentTabSection = tabDivs[i];
		}
	}

	for (var i = 0; i < currentTabSection.elements.length; i++) {
		currentTabSection.elements[i].headerElement.className = currentTabSection.elements[i].headerElement.className.replace(new RegExp("selected\\b"), "");
		currentTabSection.elements[i].tabContainer.className = currentTabSection.elements[i].tabContainer.className.replace(new RegExp("selected\\b"), "");
	}
}
