
var CsTabWrapper = function() {
	return {
	tabs: new Array(),
	activeTab: null,
	contents: new Array(),
	activeContent: null,
	initialize: function() {
		Element.extend(this);
		var elements = this.childElements();
		for (var i = 0, m = elements.length; i < m; i++) {
			if (elements[i].hasClassName("tab")) {
				this.contents.push(elements[i]);
			}
		}
		if (this.contents.length > 0) {
			var wrapperDiv = this;
			this.contents.each(function(content) {
				Object.extend(content, new CsTabContent);
				content.initialize(wrapperDiv);
				wrapperDiv.createTab(content.getHeading(), content);
			});
			var defaultContent = this.getElementsBySelector(".tab-default")[0];
			if (!defaultContent) {
				defaultContent = this.contents[0];
			}
			defaultContent.switchTo();
		}
		this.displayTabs();
	},
	hideAll: function() {
		this.contents.each(function(content) {
			content.relatedTab.removeHighlight();
			content.hide();
		});
	},
	createTab: function(titleText, content) {
		var li = document.createElement("li");
		Element.extend(li);
		Object.extend(li, new CsTab);
		if (content.id) {
			li.id = "tab-" + content.id;
		}
		li.initialize(titleText, content);
		this.tabs.push(li);
	},
	displayTabs: function() {
		ul = document.createElement("ul");
		Element.extend(ul);
		ul.id = this.id + "ul";
		ul.addClassName("tab-strip");
		this.tabs.each(function(tab) {
			ul.appendChild(tab);
		});
		if (this.tabs.length == 0) {
			this.tabs[0].addClassName("tab-only");
		} else if (this.tabs.length > 0) {
			this.tabs[0].addClassName("tab-first");
			this.tabs[this.tabs.length - 1].addClassName("tab-last");
		}
		this.insertBefore(ul, this.contents[0]);
	}
}};

var CsTabContent = function() {
	return {
	wrapperDiv: null,
	relatedTab: null,
	initialize: function(wrapperDiv) {
		this.wrapperDiv = wrapperDiv;
	},
	getHeading: function() {
		var elements = this.childElements();
		for (var i = 0, m = elements.length; i < m; i++) {
			if (elements[i].nodeName.toLowerCase() == "h1"
				|| elements[i].nodeName.toLowerCase() == "h2"
				|| elements[i].nodeName.toLowerCase() == "h3"
				|| elements[i].nodeName.toLowerCase() == "h4"
				|| elements[i].nodeName.toLowerCase() == "h5"
				|| elements[i].nodeName.toLowerCase() == "h6") {
				return elements[i].innerHTML;
			}
		}
		return null;
	},
	switchTo: function() {
		this.wrapperDiv.hideAll();
		this.relatedTab.highlight();
		this.show();
	}
}};

var CsTab = function() {
	return {
	content: null,
	titleText: null,
	initialize: function(titleText, content) {
		this.content = content;
		this.content.relatedTab = this;
		var link = document.createElement("a");
		Element.extend(link);
		link.href = "#";
		link.update(titleText);
		Event.observe(link, "click", this.switchTo.bind(this));
		this.appendChild(link);
	},
	switchTo: function(e) {
		Event.stop(e);
		Event.element(e).blur();
		this.content.switchTo();
	},
	highlight: function() {
		this.addClassName("tab-active");
	},
	removeHighlight: function() {
		this.removeClassName("tab-active");
	}
}};

Event.observe(window, "load", function() {
	$$(".tabs").each(function(wrapperDiv) {
		Object.extend(wrapperDiv, new CsTabWrapper());
		wrapperDiv.initialize();
	});
});
