/* --- JavaScript --- */
/* --- General --- */

/* --- add functions to onload event: addLoadEvent(functionName); --- */
/* --- http://simonwillison.net/2004/May/26/addLoadEvent/ --- */
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	}
	else {
		window.onload = function() {
			if (oldonload) {
				oldonload();
			}
			func();
		}
	}
}

/* --- createElement() --- */
function createElement(element) {
	if (typeof document.createElementNS != 'undefined') {
		return document.createElementNS('http://www.w3.org/1999/xhtml', element);
	}
	if (typeof document.createElement != 'undefined') {
		return document.createElement(element);
	}
	return false;
}

/* --- setAttributes() --- */
function setAttributes(element,attr) {	// format attr: [['class','actief'],['href','http://www.test.xx']]
	if (typeof element.setAttributeNS != 'undefined') {
		for (a=0; a<attr.length; a++) {
			element.setAttributeNS('http://www.w3.org/1999/xhtml',attr[a][0],attr[a][1]);
		}
	}
	if (typeof element.setAttribute != 'undefined') {
		for (a=0; a<attr.length; a++) {
			element.setAttribute(attr[a][0],attr[a][1]);
		}
	}
	return false;
}

/* --- add className --- */
function addClass(node, className) {
	removeClass(node, className);	// make sure there won't be any doubles
	node.className += " " + className;
}

/* --- remove className --- */
function removeClass(node, className) {
	node.className = node.className.replace(className,"");
}

/* --- check if node has className --- */
function hasClass(node, className) {
	var nodeClass = node.className;
	if (!className && nodeClass != "") return true;			// if no className is specified any className will do
	if (className && nodeClass.indexOf(className) > -1) {	// match, but not exact
		var nodeClasses = nodeClass.split(/\s+/);			// seperate class names (devided by one or more whitespaces)
		for (c=0; c<nodeClasses.length; c++) {
			if (nodeClasses[c] == className) return true
		}
	}
	return false;
}

/* --- get first ancestor that matches the property --- */
function getAncestor(node, property, value, levels) {	// levels is an optional argument
	var parent = node;
	var level = (levels) ? levels : 1;
	do {
		parent = parent.parentNode;
		if (!parent || parent.nodeName == "HTML") return false;	// there is no parent or parent is <html>
		
		if ((parent[property] == value) ? true : hasClass(parent, value)) return parent; // return parent if property matches value
			
		if (levels) level--;
	} while (parent.parentNode && parent.parentNode.nodeName != "HTML" && level > 0);
	return false;
}

/* --- check for CSS support --- */
function cssSupport() {
	if (!document.styleSheets) return false;	// styleSheets object is not supported
	var css = document.styleSheets;
	for (s=0; s<css.length; s++) {
		if (s == 0) {
			if (!(css[0].cssRules || css[0].rules)) return false;	// both methods (cssRules/rules) are not supported
		}
		if (!css[s].disabled) return true;	// at least one of the stylesheets is not disabled
	}
	return false;	// stylesheets are all disabled or not supported at all
}


/* =================================== */
/* ===== site specific functions ===== */
/* =================================== */


///////////// SELECT NAVIGATION /////////////

/* --- initSelectNav --- initialezes autosubmit on <select>s that have class="selectNav", works with keyboard too (in IE, FX and Op) --- */
initSelectNav = function() {
	var selects = document.getElementsByTagName('select');
	
	var countSelectNavs = false;
	for (s=0; s<selects.length; s++) {
		var selectNav = selects[s];
		if (!hasClass(selectNav, "selectNav")) continue;
		
		selectNav.onfocus = function() {
			this.origVal = this.value;
		}
		
		selectNav.onchange = function() {
			if (this.newVal) this.origVal = this.newVal;
			this.newVal = this.value;
		}
		
		selectNav.onblur = selectNav.onclick = function() {
			if (this.newVal && this.newVal != this.origVal) this.form.submit();
		}
		
		countSelectNavs = true;
	}
	
	if (countSelectNavs) addClass(document.body, "jsSelectNavOn");
}


///////////// I-TRACK TABS /////////////

/* --- iTrackTabs --- */
iTrackTabs = function() {
	var poss = document.getElementById('iTrackPossibilities');
	if (!poss) return;
	
	document.body.style.display = "none";
	
	var tabMenus = poss.getElementsByTagName('ul');
	for (m=0; m<tabMenus.length; m++) {
		var tabMenu = tabMenus[m];
		if (!hasClass(tabMenu, "tabs")) continue;
		
		var tabs = tabMenu.getElementsByTagName('a');
		for (t=0; t<tabs.length; t++) {
			var tab = tabs[t];
			
			tab.onclick = function() {
				var tabContentID = this.href.substring(this.href.lastIndexOf("#") + 1);
				
				var tabContent = document.getElementById(tabContentID);
				if (!tabContent) return;
				
				document.body.style.display = "none";
				
				if (tabMenu.activeContent) {
					addClass(tabMenu.activeContent, "hide");
					tabMenu.activeContent.parentNode.insertBefore(tabContent, tabMenu.activeContent);
				}
				
				if (tabMenu.activeTab) removeClass(tabMenu.activeTab, "actief");
				tabMenu.activeTab = this.parentNode;
				tabMenu.activeContent = tabContent;
				removeClass(tabMenu.activeContent, "hide");
				addClass(tabMenu.activeTab, "actief");
				
				document.body.style.display = "block";
				
				return false;
			}
		}
		
		addClass(tabMenu, "show");
	}
	
	var hiddenContent = [];
	
	var tabContentDivs = poss.getElementsByTagName('div');
	for (d=0; d<tabContentDivs.length; d++) {
		var tabContent = tabContentDivs[d];
		if (!hasClass(tabContent, "tabContent")) continue;
		
		if (!hasClass(tabContent, "actief")) {
			addClass(tabContent, "hide");
			hiddenContent[hiddenContent.length] = tabContent;
			continue;
		}
	
		removeClass(tabContent, "actief");
		tabMenu.activeContent = tabContent;
		
		for (t=0; t<tabs.length; t++) {
			var tab = tabs[t];
			if (tabContent.id && tab.href.indexOf("#" + tabContent.id) < 0) continue;
			
			addClass(tab.parentNode, "actief");
			tabMenu.activeTab = tab.parentNode;
			break;
		}
	}
	
	for (h=0; h<hiddenContent.length; h++) {
		hiddenContent[h].parentNode.appendChild(hiddenContent[h]);
	}
	
	document.body.style.display = "block";
}

/* =================================== */
/* === call functions on page load === */
/* =================================== */

/* --- call functions only if the used methods are supported --- */
if (document.getElementById && document.createElement) {
	if (cssSupport()) {
		addLoadEvent(initSelectNav);
		addLoadEvent(iTrackTabs);
	}
}