function initializeTabs() {
	useJavascriptLinks();
	var anchor = window.location.hash;
	var index = 0;
	
	var tabs = getElementsByClass('div', 'tab');
	var tabIds = getIds(tabs);
	
	if(anchor != "") {
		var hash = anchor.substring(1);
		var tabIndex = find(tabIds, hash);
		if(tabIndex < 0) {
			var link = getAnchorForHash(hash);
			var parent = link.parentNode;
			while(parent != null && tabIndex < 0) {
				tabIndex = find(tabIds, parent.id);
				parent = parent.parentNode;
			}
		}
		
		if(tabIndex >= 0) {
			index = tabIndex;
		}
	}
	updateFocusToTab(index);
	
	if(anchor != "")
		getAnchorForHash(hash).scrollIntoView(true);
}

function hide_all(tag, className) {
	var tags = getElementsByClass(tag, className);
	for(var i = 0; i < tags.length; i++) {
		hide(tags[i]);
	}
}

function useJavascriptLinks() {
	var links = getElementsByClass('a', 'javascript_link');
	var tabs = getElementsByClass('div', 'tab');
	var tabIds = getIds(tabs);

	for(var i = 0; i < links.length; i++) {
		var link = links[i];
		var anchor = link.hash.substring(1);
		var index = find(tabIds, anchor);
		link.href="javascript:updateFocusToTab("+index+");";
	}
}

function getIds(elements) {
	var ids = new Array();
	for(var i = 0; i < elements.length; i++) {
		ids[i] = elements[i].id;
	}
	return ids;
}

function setCurrent(li) {
	var oldCurrents = getElementsByClass('li', 'current');
	for(var i = 0; i < oldCurrents.length; i++) {
		var currentLi = oldCurrents[i];
		currentLi.className="";
		var indexInFather = find(getChildren(currentLi.parentNode), currentLi);
		currentLi.innerHTML="<a href=\"javascript:updateFocusToTab(" + indexInFather + ")\">"+currentLi.innerHTML+"</a>";
	}
		
	li.className="current";
	li.innerHTML = getChildren(li)[0].innerHTML;
}

function find(list, item) {
	for(var i = 0; i < list.length; i++)
		if(list[i] == item)
			return i;

	return -1;
}

function updateFocusToTab(focusIndex) {
	var tabs = getElementsByClass('div', 'tab');
	for(var i = 0; i < tabs.length; i++) {
		if(i == focusIndex)
			showTab(tabs[i]);
		else
			hide(tabs[i]);
	}
	
	var ul = $('tabs');
	setCurrent(getChildren(ul)[focusIndex]);
}

function showTab(tab) {
  show(tab);
  hide(getChildren(tab)[0]);
}

function toggle(id) {
	var element = $(id);
	if(element.style.display == 'none')
	  show(element);
	else
	  hide(element);
}

function show(element) {
  changeStyle(element, 'block');
}

function hide(element) {
  changeStyle(element, 'none');
}

function changeStyle(element, style) {
	element.style.display = style;
}

function getAnchorForHash(hash) {
	var anchors = document.getElementsByTagName('a');
	for(var i = 0; i < anchors.length; i++)
		if(anchors[i].name == hash)
			return anchors[i];

	return null;
}

function $(id) {
	return document.getElementById(id);
}

function getChildren(element) {
	var childNodes = element.childNodes;
	var children = new Array();
	for(var i = 0; i < childNodes.length; i++) {
		var child = childNodes[i];
		var isText = child.nodeName == "#text";
		if(!isText)
			children[children.length] = child;
	}
	return children;
}

function getElementsByClass(tagType, className) {
	var tags = document.getElementsByTagName(tagType);
	var classed = new Array();
	for(var i = 0; i < tags.length; i++)
		if(tags[i].className == className)
			classed[classed.length] = tags[i];

	return classed;
}
