//standards
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
 			window.onload = func;
 	} else {
 		window.onload = function() {
 			oldonload();
			func();
		}
	}
}

function insertAfter(newElement,targetElement) {
	var parent = targetElement.parentNode;
	if (parent.lastChild == targetElement) {
		parent.appendChild(newElement);
	} else {
		parent.insertBefore(newElement,targetElement.nextSibling);
	}
}

function toggle(targetId) {
	if (!document.getElementById) return false;
	target = document.getElementById(targetId);
	if (target.style.display == "none") {
		target.style.display = "";
	} else {
		target.style.display = "none";
	}
}

function addClass(element,value) {
	if (!element.className) {
		element.className = value;
	} else {
		newClassName = element.className;
		newClassName+= " ";
		newClassName+= value;
		element.className = newClassName;
	}
}
function removeClass(element,value) {
	if  (element.className == value) {
		element.className = "";
	}
	if  (element.className.search(" " + value) != -1) {
		element.className = element.className.replace(" " + value, "");
	}
	if  (element.className.search(value + " ") != -1) {
		element.className = element.className.replace(value + " ", "");
	}
}

function addHovers(element) {
	for (i=0; i<element.length; i++) {
		var node = element[i];
		if (node.nodeName == "LI") {
			node.onmouseover = function() { addClass(this,"over"); }
			node.onmouseout = function() { removeClass(this,"over"); }
		}
	}
}
function hover() {
	if (!document.getElementById && !document.getElementsByTagName) return false;
	if (navigator.userAgent.search("Safari")!=-1) return false;
	if (document.getElementById("navi")) {
		//show subnavi but not in IE Mac
		if ((navigator.userAgent.search("MSIE") + navigator.userAgent.search("Mac")) < 25) {
			addHovers(document.getElementById("navi").getElementsByTagName("UL")[0].childNodes);
		}	
	}
	if (document.getElementById("links")) {
		addHovers(document.getElementById("links").childNodes);	
	}
	if (document.getElementById("copyright")) {
		var element = document.getElementById("copyright");
		element.onmouseover = function() { addClass(this,"over"); }
		element.onmouseout = function() { removeClass(this,"over"); }
	}
}
addLoadEvent(hover);

//you are here
function highlightPage() {
	if (!document.getElementById && !document.getElementsByTagName) return false;
	var IEMAC = false;
	if (navigator.userAgent.search(/Mac/)!=-1 && navigator.userAgent.search(/MSIE/)!=-1) IEMAC = true;
	var currenturl = window.location.href;
	if (document.getElementById("navi")) {
		var nav = document.getElementById("navi");
		var links = nav.getElementsByTagName("A");
		for (var i=0; i<links.length; i++) {
			var linkurl = links[i].getAttribute("href");
			if (currenturl.indexOf(linkurl) != -1) {
				addClass(links[i].parentNode,"here")
			}
			//disable link to chapter index but not in IE Mac
			if (!IEMAC) {
				var liParent = links[i].parentNode.parentNode.parentNode;
				if (liParent.nodeName == "LI") {
					var aIndex = liParent.getElementsByTagName("A")[0];
					addClass(aIndex,"index");
					aIndex.onclick = function() { return false; }
				}
			}
		}
	}
	if (document.getElementById("subnavi")) {
		var nav = document.getElementById("subnavi");
		var links = nav.getElementsByTagName("A");
		for (var i=0; i<links.length; i++) {
			var linkurl = links[i].getAttribute("href");
			if (currenturl.indexOf(linkurl) != -1 || (linkurl.indexOf("index.html") != -1 && currenturl.slice(-1) == "/")) {
				addClass(links[i].parentNode,"here");
			}
		}
	}
}
addLoadEvent(highlightPage);

function externLinks() {
	if (!document.getElementById && !document.getElementsByTagName) return false;
	if (!document.getElementById("content")) return false;
	var content = document.getElementById("content");
	var links = content.getElementsByTagName("a");
	for (i=0; i<links.length; i++) {
		if (links[i].className.indexOf("extern") != -1) {
			links[i].onclick = function() {
				window.open(this.href,"extern");
				return false;
			}
		}
	}
}
addLoadEvent(externLinks);

// look
function stripeTables() {
	if (!document.getElementsByTagName) return false;
	var tables = document.getElementsByTagName("table");
	for (var i=0; i<tables.length; i++) {
		if (tables[i].className.indexOf("striped") != -1) {
			var trClass = "odd";
			var rows = tables[i].getElementsByTagName("tr");
			for (var j=0; j<rows.length; j++) {
					addClass(rows[j],trClass);
					trClass = (trClass == "even") ? "odd" : "even";
			}
		}
	}
}
addLoadEvent(stripeTables);

// Position fixed for IE 5-6 in Standard-Mode body { background: (dummy) fixed } avoid flicker // ie.css contents positions
function vScrollTop() {	return (document.compatMode != "CSS1Compat") ? document.body.scrollTop : document.documentElement.scrollTop }
function vScrollLeft() { return (document.compatMode != "CSS1Compat") ? document.body.scrollLeft : document.documentElement.scrollLeft }
function vClientHeight() { return (document.compatMode != "CSS1Compat") ? document.body.clientHeight : document.documentElement.clientHeight }
function vClientWidth() { return (document.compatMode != "CSS1Compat") ? document.body.clientWidth : document.documentElement.clientWidth }
function ieVersion() {
	var rv = -1; // Return value assumes failure
	
	  {
	    var ua = navigator.userAgent;
	    var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
	    if (re.exec(ua) != null)
	      rv = parseFloat( RegExp.$1 );
	  }
	return rv
}
