TAB_HEADINGS = 'h2';
TAB_CLASS = 'tab';
SECTION_CLASS = 'section';
QUERY_SECTION_ARG = 'section';
TAB_SELECTED_CLASS = 'selected';
TAB_NOT_SELECTED_CLASS = 'not-selected';
LOADING_ELM_ID = 'loading';
CONTENT_HOLDER_ID = 'content-holder';

lastSection = 0
function checkHash(){
	var section = get_selected();
	if (section != lastSection) {
		show_section(section);
		lastSection = section;
	}
}

function get_elements(){
	var divs = document.getElementsByTagName("div");
	var htags = document.getElementsByTagName(TAB_HEADINGS);
	sections = [];
	tabs = [];
	headings = []
	for (var i = 0; i < divs.length; i++) {
		if (divs[i].className == SECTION_CLASS) 
			sections.push(divs[i]);
	}
	for (var i = 0; i < htags.length; i++) {
		if (htags[i].className == TAB_CLASS) {
			var span = document.createElement("span");
			span.innerHTML = htags[i].innerHTML;
			tabs.push(span);
			headings.push(htags[i]);
		}
	}
};

function combine_tabs(){
	if (headings.length == 0) 
		return;
	headings[0].innerHTML = '';
	for (var i = 0; i < tabs.length; i++) {
		//    headings[i].removeChild(tabs[i]);
		headings[0].appendChild(tabs[i]);
		if (i > 0) 
			headings[i].parentNode.removeChild(headings[i]);
	}
};

function hide_all(){
	for (var i = 0; i < sections.length; i++) {
		sections[i].style.display = "none";
	}
	for (var i = 0; i < tabs.length; i++) {
		tabs[i].className = TAB_NOT_SELECTED_CLASS
	}
};

function show_section(index){
	hide_all()
	if (sections.length == 0) 
		return;
	var section = sections[index];
	if (!section) 
		var section = sections[index = 0];
	section.style.display = "block";
	tabs[index].className = TAB_SELECTED_CLASS;
	var id = headings[index].getAttribute('id') || sections[index].getAttribute('id');
	if (id && index != lastSection) {
		var y = typeof window.pageYOffset != 'undefined' ? window.pageYOffset : document.documentElement.scrollTop;
		if (!navigator.userAgent.match(/Safari/)) 
			location.hash = '#' + id;
		window.scrollTo(0, y);
		if (typeof load_tab == 'function') 
			load_tab(id);
	}
	lastSection = index;
};

function tab_click(e){
	var target = e && e.target || event.srcElement;
	for (var i = 0; i < tabs.length; i++) {
		if (target == tabs[i] || target.parentNode == tabs[i]) {
			show_section(i);
		}
	}
};

function set_handlers(){
	for (var i = 0; i < tabs.length; i++) {
		tabs[i].onclick = tab_click;
	}
};

function get_selected(){
	var selected = 0;
	if (location.hash) {
		selected = location.hash.substring(1);
	}
	else 
		if (location.search) {
			var args = location.search.substring(1).split('&');
			for (var i = 0; i < args.length; i++) {
				var name = args[i].split('=')[0];
				var value = args[i].split('=')[1];
				if (name == QUERY_SECTION_ARG) {
					selected = value;
					break;
				}
			}
		}
	if (isNaN(selected)) {
		for (var i = 0; i < sections.length; i++) {
			if (sections[i].getAttribute('id') == selected || headings[i].getAttribute('id') == selected) {
				selected = i;
				break;
			}
		}
	}
	return selected;
};


function set_up(){
	get_elements();
	combine_tabs();
	var loadingElm = document.getElementById(LOADING_ELM_ID);
	if (loadingElm) {
		loadingElm.style.display = "none";
	}
	var contentHolderElm = document.getElementById(CONTENT_HOLDER_ID);
	if (contentHolderElm) {
		contentHolderElm.style.display = "block";
	}
	var selected = get_selected();
	show_section(selected);
	set_handlers();
	if (!navigator.userAgent.match(/Safari/)) 
		setInterval(checkHash, 100);
};


	onload = set_up

