/* --- JavaScript --- */
/* --- General --- */


/* --- add functions to onload event: addLoadEvent(functionName); --- */
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/remove className --- */
function addClass(thisNode,thisClass) {
	removeClass(thisNode,thisClass);	// make sure there won't be any doubles
	thisNode.className += " " + thisClass;
}

function removeClass(thisNode,thisClass) {
	if (thisNode.className.length == (thisClass.length)) {
		thisNode.className = thisNode.className.replace(thisClass,"");
	}
	else {
		thisNode.className = thisNode.className.replace(" " + thisClass,"");
	}
}

/* --- force redraw for IE6 or older --- */
/*var oldIE;	// value is set to true if user agent is less or equal to IE6

function redrawOldIE(redraw) {
		var container = document.getElementById('container');
		if (container != null) {
			container.style.width = (redraw) ? "auto" : "0";
		}
}*/


/* --- tell CSS JavaScript is on --- */
jsOn = function() {
	var container;
	if (!(container = document.getElementById('container'))) return false;
	addClass(container,"jsOn");
}

/* --- place labels over corresponding form field --- */
overLabel = function() {
	var labels;
	if (!(labels = document.getElementsByTagName('label'))) return false;
	//if (oldIE) redrawOldIE(false);
	for (l=0; l<labels.length; l++) {
		var label = labels[l];
		if (!(hasClassName(label,"overLabel") && label.htmlFor)) continue;
		var overInput;
		if (!(overInput = document.getElementById(label.htmlFor))) continue;
		label.forInput = overInput;	// make reference from label to corresponding input
		if (overInput.value === "") addClass(overInput.parentNode,"inactive");	// make sure label is only placed on top of input in case it has no value which is not always the case after a reload
		overInput.onfocus = function() {
			removeClass(this.parentNode,"inactive");
		}
		overInput.onblur = function() {
			if (this.value === "") addClass(this.parentNode,"inactive");
		}
		label.onclick = function() {	// needed for Safari
			this.forInput.focus();	// give focus to corresponding input
		}
	}
	//if (oldIE) redrawOldIE(true);
}


/* --- tabKader --- */
initTabs = function() {
	var tabs = ['tabLeft','tabRight'];
	for (t=0; t<tabs.length; t++) {
		var tab,tabLink;
		if (!(tab = document.getElementById(tabs[t]))) continue;
		//if (!(tabLink = 
		//tabLink.name = tab;
		tab.parentNode.side = (hasClassName(tab.parentNode.parentNode,"left")) ? "left" : "right";
		tab.onclick = function() {
			//alert("remove: " + this.parentNode.side);
			removeClass(this.parentNode.parentNode,this.parentNode.side);
			//alert(this.id + "\n" + this.nodeName);
			this.parentNode.side = (this.id == "tabLeft") ? "left" : "right";
			//alert("add: " + this.side);
			addClass(this.parentNode.parentNode,this.parentNode.side);
			return false;
		}
	}
}

/* --- JS alternative for CSS bug in IE (inline links with background images), based on inlineLinks() from http://icant.co.uk/sandbox/inlinelinks/ --- */
/*inlineLinksIE = function() {
	if(!document.getElementById || !document.createTextNode) return false;
	var siteBody, links;
	if (!(siteBody = document.getElementById('siteBody'))) return false;
	if (!(links = siteBody.getElementsByTagName('a'))) return false;
	var imgNode = document.createElement('img');
	setAttributes(imgNode,[['src','images/ico_link_inline.gif'],['class','IEpijl'],['width','9'],['height','7'],['alt','']]);
	for (l=0; l<links.length; l++) {
		var thisLink = links[l];
		if (!hasClassName(thisLink,"more")) continue;
		var linkImg = imgNode.cloneNode(false);
		thisLink.appendChild(linkImg);
		addClass(thisLink,"IE");
	}
}*/

/*initSiteSearch = function() {
	var siteSearch, keywords, keywordsDiv, keywordsLabel;
	if (!(siteSearch = document.getElementById('siteSearch'))) return false;
	if (!(keywordsDiv = siteSearch.getElementsByTagName('div')[0])) return false;
	if (!(keywordsLabel = keywordsDiv.getElementsByTagName('label')[0])) return false;
	if (!(keywords = document.getElementById('keywords'))) return false;
	if (keywords.value === "") addClass(keywordsDiv,"inactive");	// make sure label is only placed on top of input in case it has no value which is not always the case after a reload
	if (document.all && navigator.userAgent.indexOf("Opera") == -1) {	// check if browser is old version of IE (<7), in order to fix a nasty rendering
		var temp = navigator.appVersion.split("MSIE");
		var version = parseFloat(temp[1]);
		if (version < 7) keywords.oldIE = true;
	}
	keywords.onfocus = function() {
		if (this.oldIE) addClass(this.parentNode.parentNode.parentNode,"oldIE");	// set class if browser <= IE6
		removeClass(this.parentNode,"inactive");
	};
	keywords.onblur = function() {
		if (this.value === "") {
			addClass(this.parentNode,"inactive");
		}
	};
	keywordsLabel.onclick = function() {	// needed for Safari
		var keywords = document.getElementById('keywords');
		keywords.focus();
	};
	var siteSearchSubmit;
	if (!(siteSearchSubmit = document.getElementById('siteSearchSubmit'))) return false;
	siteSearchSubmit.onmouseover = function() {
		addClass(this,"jsHover");
	}
	siteSearchSubmit.onmouseout = function() {
		removeClass(this,"jsHover");
	}
}

initNavHover = function() {
	var hoofdMenu, hoofdMenuItems, item;
	if (!(hoofdMenu = document.getElementById('hoofdMenu'))) return false;
	if (!(hoofdMenuItems = hoofdMenu.getElementsByTagName('li'))) return false;
	var images = {};
	for (i=0; i<hoofdMenuItems.length; i++) {
		var knop;
		item = hoofdMenuItems[i];
		if (hasClassName(item,"actief") || !(knop = item.getElementsByTagName('a')[0]) || item.id == "buyNow") continue;
		if (!(knop.image = knop.getElementsByTagName('img')[0])) continue;
		var hoverKnop = new Image();
		hoverKnop.src = appendFileName(knop.image.src,"_a");	// preload image
		images[knop.image.id] = {
			origSrc: knop.image.src,
			hoverSrc: hoverKnop.src
		}
		knop.onmouseover = function() {
			this.image.src = images[this.image.id].hoverSrc;
		}
		knop.onmouseout = function() {
			this.image.src = images[this.image.id].origSrc;
		}
	}
}*/

function hasClassName(thisNode,thisClass) {
	var nodeClass = thisNode.className;
	if (!thisClass && nodeClass != "") return true;
	if (thisClass && nodeClass.indexOf(thisClass) > -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] == thisClass) return true
		}
	}
	return false;
}

/*function appendFileName(fileName,appendStr) {
	return fileName.substring(0,fileName.lastIndexOf('.')) + appendStr + fileName.substring(fileName.lastIndexOf('.'))
}*/


/* --- hide subSubMenuItems with class="overflow", insert showAll button and let it pass focus to the first item of the ones it shall reveal --- */
/*hideOverflow =function() {
	var subSubMenu,toggleOverflow;
	if (!findOverflowItem()) return false;
	document.getElementById('subSubMenu').innerHTML += '<a id="toggleOverflow" href="#"><img src="images/ico_showoverflow.gif" width="22" height="23" title="Show all items" alt="button: Show all items" /></a>';
	var toggleOverflow = document.getElementById('toggleOverflow');
	toggleOverflow.ico = toggleOverflow.getElementsByTagName('img')[0];
	toggleOverflow.hide = new Image();
	toggleOverflow.hide.src = "images/ico_hideoverflow.gif";	// preload image
	toggleOverflow.onclick = function(subSubItem) {
		if (toggleOverflow.ico.title == "Show all items") {
			var overflowItem = findOverflowItem().getElementsByTagName('a')[0];
			addClass(this.parentNode,"showAll");
			overflowItem.focus();
			toggleOverflow.showSrc = toggleOverflow.ico.src;
			toggleOverflow.ico.src = toggleOverflow.hide.src;
			toggleOverflow.ico.alt = toggleOverflow.ico.title = "Hide extra items";
		}
		else {
			removeClass(this.parentNode,"showAll");
			toggleOverflow.ico.src = toggleOverflow.showSrc;
			toggleOverflow.ico.alt = toggleOverflow.ico.title = "Show all items";
		}
		return false;
	}
}

function findOverflowItem() {
	var subSubMenu,subSubItems;
	if (!(subSubMenu = document.getElementById('subSubMenu'))) return false;
	if (!(subSubItems = subSubMenu.getElementsByTagName('li'))) return false;
	for (i=0; i<subSubItems.length; i++) {
		if (hasClassName(subSubItems[i],"overflow")) return subSubItems[i];
	}
	return false;
}*/


/* --- use <select> for navigation --- */
selectNav = function() {
	var selects;
	if (!(selects = document.getElementsByTagName('select'))) return false;
	for (s=0; s<selects.length; s++) {
		var selectNav = selects[s];
		if (!hasClassName(selectNav,"selectNav")) return false;
		selectNav.onchange = function() {
			var goUrl = this.options[this.options.selectedIndex].value;
			if (goUrl && goUrl != "") window.location.href = goUrl;
		}
	}
}


/* --- make the whole banner clickable, using the URL of header link --- */
clickableBanners = function() {
	var contentDivs = ['mainContent','subContent','subBanners'];
	for (d=0; d<contentDivs.length; d++) {
		var contentDiv;
		if(!(contentDiv = document.getElementById(contentDivs[d]))) continue;
		var banners;
		if (!(banners = contentDiv.getElementsByTagName('div'))) return false;
		for (b=0; b<banners.length; b++) {
			var banner = banners[b];
			if (!hasClassName(banner,"banner") || hasClassName(banner,"notClickable")) continue;
			var clickArea;
			var divLevel = (contentDivs[d] == "subContent") ? 0 : 1;
			if (!(clickArea = banner.getElementsByTagName('div')[divLevel])) continue;
			var bannerUrl;
			if (!(bannerUrl = findBannerUrl(clickArea))) continue;
			clickArea.url = bannerUrl;
			addClass(banner,"jsClickable");
			clickArea.onclick = function() {
				window.location.href = this.url;
				return false;
			}
			clickArea.onmouseover = function() {
				addClass(this,"jsHover");
			}
			clickArea.onmouseout = function() {
				removeClass(this,"jsHover");
			}
		}
	}
}

function findBannerUrl(banner) {
	var bannerUrl;
	return (bannerUrl = banner.getElementsByTagName('a')[0]) ? bannerUrl.href : false; 
}


/* --- make event header clickable --- */
clickableEvents = function() {
	var agendaTabs;
	if (!(agendaTabs = document.getElementsByTagName('dl'))) return false;
	for (a=0; a<agendaTabs.length; a++) {
		var agendaTab = agendaTabs[a];
		if (!hasClassName(agendaTab.parentNode,"agenda")) continue;
		var eventHeaders;
		if (!(eventHeaders = agendaTab.getElementsByTagName('dt'))) continue;
		for (h=0; h<eventHeaders.length; h++) {
			var eventHeader = eventHeaders[h];
			var eventUrl;
			if (!(eventUrl = findBannerUrl(eventHeader))) continue;
			eventHeader.url = eventUrl;
			eventHeader.onclick = function() {
				window.location.href = this.url;
				return false;
			}
			eventHeader.onmouseover = function() {
				addClass(this,"jsHover");
			}
			eventHeader.onmouseout = function() {
				removeClass(this,"jsHover");
			}
		}
	}
}


/* --- add submit() to onchange-event of <select> if class="valutaSelect" --- */
/*initValutaSelect = function() {
	var selects;
	if (!(selects = document.getElementsByTagName('select'))) return false;
	for (s=0; s<selects.length; s++) {
		var valutaSelect = selects[s];
		if (!hasClassName(valutaSelect,"valutaSelect")) continue;
		valutaSelect.onchange = function() {
			var selValue = this.options[this.options.selectedIndex].value;
			if (selValue && selValue != "") this.form.submit();
		}
	}
}*/


/* --- add buttons that are dependent of JavaScript --- */
jsButtons = function() {
	if (window.print) {
		var functieMenu,kader;
		if (!(functieMenu = document.getElementById('functieMenu'))) return false;
		if (!(kader = functieMenu.getElementsByTagName('ul')[0])) return false;
		kader.innerHTML += '<li><a id="printPage" href="#" onclick="window.print();">Print pagina</a></li>';
	}
}


/* --- call functions only if the used methods are supported --- */
if (document.getElementById && document.getElementsByTagName) {
	addLoadEvent(jsOn);
	if (cssSupport()) {
		addLoadEvent(overLabel);
		/*addLoadEvent(initSiteSearch);
		addLoadEvent(hideOverflow);*/
	}
	addLoadEvent(selectNav);
	/*addLoadEvent(initValutaSelect);
	if (document.images) {
		addLoadEvent(initNavHover);
	}*/
	addLoadEvent(jsButtons);
	addLoadEvent(initTabs);
	addLoadEvent(clickableBanners);
	addLoadEvent(clickableEvents);
	if (document.all) {
		//addLoadEvent(inlineLinksIE);
	}
}

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
}