window.onload = function() {
	init();
};

function init() {
	closeAll();
	registerEvents();
	loadState();
	finalize();
}

function registerEvents() {
	var topic = document.getElementById('topic');
	var lis = topic.getElementsByTagName('li');
	for (var i=0; i < lis.length; i++) {
		if (lis[i].parentNode.nodeName.toLowerCase() == 'ul') {
			registerMenuItem(lis[i]);
		}
	}
	var switcher = document.getElementById('styleSwitcher');
	if (switcher != null) {
		registerStyleSwitcher(switcher);
	}
}

function registerMenuItem(li) {
	var ols = li.getElementsByTagName('ol');
	if (ols.length == 0) {
		return;
	}
	li.style.cursor = "pointer";
	li.onclick = function(e) {
		var target = e ? e.target : window.event.srcElement;
		while (target.nodeName.toLowerCase() != 'li') {
			target = target.parentNode;
		}
		if (target == this) {
			var ol = target.getElementsByTagName('ol')[0];
			var state = ol.className;
			
			closeAll();
			
			if (state == "closed") {
				ol.className = "open";
			}
			
			storeState();
		}
	}
}

function registerStyleSwitcher(element) {
	element.style.cursor = "pointer";
	element.onclick = function(e) {
		toggleStyle();
	}
}

function storeState() {
	var n = -1;
	var topic = document.getElementById('topic');
	var ols = topic.getElementsByTagName('ol');
	for (var i=0; i < ols.length; i++) {
		if (ols[i].className == "open") {
			n = i;
		}
	}
	document.cookie = "state=" + n;
}

function loadState() {
	var n = -1;
	var cookies = document.cookie.split(';');
	for (var i=0; i < cookies.length; i++) {
		var pairs = cookies[i].split("=");
		if (pairs[0] == "state") {
			n = pairs[1];
		}
	}
	if (n == -1) {
		return;
	}
	var topic = document.getElementById('topic');	
	var ols = topic.getElementsByTagName('ol');
	if (n < ols.length) {
		ols[n].className = "open";
	}
}

function closeAll() {
	var topic = document.getElementById('topic');
	var ols = topic.getElementsByTagName('ol');
	for (var i=0; i < ols.length; i++) {
		if (ols[i].className != "closed") {
			ols[i].className = "closed";
		}
	}
}

function finalize() {
	if (countTopics() == 1) {
		var topic = document.getElementById('topic');
		var ols = topic.getElementsByTagName('ol');
		for (var i=0; i < ols.length; i++) {
			ols[i].className = "open";
		}
	}
}

function countTopics() {
	var count = 0;
	var topic = document.getElementById('topic');
	var lis = topic.getElementsByTagName('li');
	for (var i=0; i < lis.length; i++) {
		if (lis[i].parentNode.nodeName.toLowerCase() == 'ul') {
			count++;
		}
	}
	return count;
}

function toggleStyle() {
	var state = false;
	var links = document.getElementsByTagName("link");
	for (var i=0; i < links.length; i++) {
		if (links[i].getAttribute("title") == "Content Only") {
			state = !links[i].disabled;
			links[i].disabled = state;
			break;
		}
	}
	state = !state;
	for (var i=0; i < links.length; i++) {
		if (links[i].getAttribute("rel").indexOf("style") == -1) {
			continue;
		} else if (links[i].getAttribute("rel").indexOf("alt") != -1) {
			continue;
		} else if (links[i].getAttribute("title") == null && links[i].getAttribute("title") == "") {
			continue;
		}
		links[i].disabled = state;
	}
}
