// Show/hide the contents of an element, identified by the given id.
/* 2006-03-21 - Addded sec. parameter. If style.display = '' then you can 
   define either 'block' or 'none' as def. style. (default style)
*/
function switchTwistie(id, def){
	element = document.getElementById(id);	
	
	if(element.style.display == '' && def != null) {
		element.style.display = def;
	}
	
	if('block' == element.style.display ){
		element.style.display = 'none';
		if (element.parentElement){
			if(element.parentElement.firstChild.nodeName != 'A') {
				element.parentElement.firstChild.firstChild.className = 'collapse';
			} else {
				element.parentElement.firstChild.className = 'collapse';
			}
		} else{
			links = document.evaluate('descendant::a', element.parentNode, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
			links.snapshotItem(0).setAttribute('class', 'collapse');
		}
	} else{
		element.style.display = 'block';
		if (element.parentElement){
			if(element.parentElement.firstChild.nodeName != 'A') {
				// This is not so pretty, but it solves the issue when we have 
				// wrapped the a-tagg with for example a h3 tagg (see ALL_COURSES_TPL)
				element.parentElement.firstChild.firstChild.className = 'expand';
			} else {
				element.parentElement.firstChild.className = 'expand';
			}
		} else{
			links = document.evaluate('descendant::a', element.parentNode, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
			links.snapshotItem(0).setAttribute('class', 'expand');
		}
	}
}

var visibleId = 'intro';
var linkPrefix = 'link_';
var vakgebiedPrefix = 'vakgebied_';

// Makes the chosen vakgebied visible.
function showVakgebied(link, choiceId){
	if (visibleId == 'intro'){
		visibleDiv = document.getElementById(visibleId);
	} else{
		visibleLink = document.getElementById(linkPrefix + visibleId);
		visibleLink.className = '';
		visibleDiv = document.getElementById(vakgebiedPrefix + visibleId);
	}
	visibleDiv.style.visibility = 'hidden';
	
	activeLink = document.getElementById(linkPrefix + choiceId);
	activeLink.className = 'active';	

	vakgebied = document.getElementById(vakgebiedPrefix + choiceId);
	vakgebied.style.visibility = 'visible';
	
	visibleId = choiceId;
}

/*var themelistItems = null;
function switchThemeListItems(themeOpener){
	if (themelistItems == null){
		themelistItems = document.getElementById('themelistitems');
	}
	themelistItems.style.visibility = 'visible' == themelistItems.style.visibility ? 'hidden' : 'visible';
	themeOpener.blur();
} */

function popup(url){
	xWindow = window.open(url, '_blank', 'width=800,height=600,scrollbars=yes,resizable=yes,menubar=yes,toolbar=yes,status=yes,titlebar=yes,location=yes');
}
 
function showActiveButton(button){
	setObjectClass(button, 'active');
}

function showInActiveButton(button){
	setObjectClass(button, 'inactive');
}

function setObjectClass(myObject, myClass){
	myObject.className = myClass;
}


		
function hideIntro() {
	var tekst_ele = document.getElementById("text")
	var all_P_Ele = tekst_ele.getElementsByTagName("p")
	for (i=0; i<all_P_Ele.length; i++){
		var ele = all_P_Ele.item(i)
		if (ele.className == "detIntrotekst") {
			ele.style.display = "none"
		} 
	}
	
	var all_P_Ele = tekst_ele.getElementsByTagName("h2")
	for (i=0; i<all_P_Ele.length; i++){
		var ele = all_P_Ele.item(i)
		if (ele.className == "detIntrokop") {
			ele.style.display = "none"
		} 
	}
}
/// 
// @h_ele  An element (object) like <h2><a name="target">Some text</h2>
// @return: A link to the anchor, that is <a href="#target">Some text</a> 
//
		
function createTocLink(h_ele) {
	try {
		var a = h_ele.getElementsByTagName('a').item(0);
		var h = h_ele.childNodes.item(1);
		var link = document.createElement('a');
		link.href =  "#"+a.name;
		link.innerHTML = h.nodeValue;
		return link;
	} catch(x) { 
		return null; 
	}	
}

/** 
 * Creates a Table of Content of all h2 tags in the document, excepts for the first one 
 * and any h2 tag with the classname detAlineakopUsp
 * It inser the TOC menu just after the subheader, or the h1-tag if the subheader does not exist
 */

function buildTOC(){
	var container = document.getElementById('text');
	var h2s = container.getElementsByTagName('h2');
	var h1 = container.getElementsByTagName('h1')[0];
	var ps = container.getElementsByTagName('p');
	
	var toc = document.createElement('div');
	for(var i=0;i<h2s.length;i++) {
		var txt = h2s[i].innerHTML;
		txt = txt.replace(/(<([^>]+)>)/ig,""); 
		if(h2s[i].className == 'detAlineakopUsp'){
			continue;
		}
		if(h2s[i].className == 'mme_h2'){
			continue;
		} 
		if(txt == 'Inleiding'){
			continue;
		}
		
		var target = "toc_h2_"+i;
		h2s[i].innerHTML = '<a name="'+target+'"></a>'+txt;
		if(toc.innerHTML != '') {
			toc.innerHTML+= ' | ';
		}
		toc.innerHTML+='<a href="#'+target+'">'+txt+'</a>';
		
	}
	var fele = null;
	for(var i=0;i<ps.length;i++){
		
		if(ps[i].parentNode.className == 'scroll'){
			continue;
		}
		
		if(ps[i].className == 'teaser'){
			fele = ps[i]; 
			
			break;
			
		}
	}
	if(fele == null){
		
		fele = h1;
	}

	container.insertBefore(toc, fele.nextSibling); 
}


/// 
// This function builds a table of content of all h2 tags belov the 
// element with the id text in the opleiding_long documents. If all 
// goes well, the script replaces the old table of content from DC with 
// the new one. 
// 

function buildTocOld() {
	var num_cols = 1;
	var num_h2s = 0;
	var text_ele = document.getElementById("text");
	var h2s = text_ele.getElementsByTagName("h2");
	
	if(!h2s || !h2s.length > 0) 
		return;
		
	for(i=0;i<h2s.length;i++) {
		if(h2s.item(i).nodeName == 'H2'){ num_h2s++; }
	}
	
	// This is always true, because there's always an element 
	// without an anchor. 
	num_h2s=num_h2s-1;

	var n = new Array();
	
	if(num_h2s%3==0) {
		n[0]=n[1]=n[2] = num_h2s/3;
	} else if(num_h2s%3==1){ 
		n[0] = ((num_h2s-1)/3)+1;
		n[1]=n[2]= n[0]-1;
	} else if(num_h2s%3==2){ 
		n[0]=n[1]=((num_h2s-2)/3)+1;
		n[2]=n[0]-1;
	}

	var tbl = document.createElement('table');
	tbl.className = 'toc';
	var tr = tbl.insertRow(-1);
	var td,ul;
		
	var cnt=0;
	var pos=0;
	
	// Initial 
	td = document.createElement('td'); 
	ul = document.createElement('ul');
	td.appendChild(ul);
	tr.appendChild(td);
	
	for(i=0;i<h2s.length;i++) {
		if(cnt>=n[pos] & i!=0) {
			td = document.createElement('td'); 
			ul = document.createElement('ul');
			td.appendChild(ul);
			tr.appendChild(td);
			
			pos++;
			cnt = 0;
		}
		ele = h2s.item( i );
		link=createTocLink(ele);
		if(link!=null) {
			li = document.createElement('li');
			li.appendChild(link);
			ul.appendChild(li);
			cnt++;
		}
	}

	/// 
	// This is a hack to be able to use innerHTML 
	// later on since outerHTML is only supported by msie
	///
	var div = document.createElement('div');
	div.appendChild(tbl);
			
	try {

		///  
		// We need to find the right p element. This element has a 
		// style set, texAlign == 'center'. This is the only element styled 
		// this way! 
		/// 
	
		ps = text_ele.getElementsByTagName("p");
		
		for(i=0;i<ps.length;i++) {
			p=ps.item(i);
			if(p.style.textAlign == 'center') {
				p.innerHTML = div.innerHTML;
			}		
		}
	} catch(x) { 
			// Default toc is shown.
	}
}

function toTop() {
	var windows;
	floatMenu();
	windows = (navigator.userAgent.toLowerCase().indexOf("win") != -1) ? true : false;
	if (windows) {
		window.onscroll = floatMenu;
		window.onresize = floatMenu;
	} else {
		setInterval("floatMenu()", 10)
	}
}
	
function floatMenu(){
	var objMenu
	var clientHeight
	var scrollOffset
	var offsetBottom
	var marginTop
	var posY
		
	if (self.innerHeight) {
		clientHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) {
		clientHeight = document.documentElement.clientHeight;
	} else if (document.body) {
		clientHeight = document.body.clientHeight;
	}
		
	if (self.pageYOffset) {
		scrollOffset = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop) {
		scrollOffset = document.documentElement.scrollTop; 
	} else if (document.body) {
		scrollOffset = document.body.scrollTop;
	}

	objMenu = document.getElementById("menuTop");
	offsetBottom = 200;
	marginTop = 200;
		
	posY =  (clientHeight - offsetBottom) + scrollOffset;

	if (objMenu && posY > marginTop) {
		objMenu.style.top = posY + 'px';
		objMenu.style.display = 'block';
	}
}


/** 
 * This function is used by flashmovies (xActieLocatie == Laag)	
 * and will close set c_layer not to render
 */
function CloseLayer(){
	var ele = document.getElementById('c_layer'); 
	if(ele) {
		ele.style.display = 'none';
	} 
}

/** 
 * OuterHTML only works in IE, so we're using innerHTML which 
 * works in all browser. This will also fix the problem with the 
 * latest update of Active X. 
 */
function createControl(ele_id,flashfile,target_url){
	
	var complete_url = '';
	
	if(ele_id.outerHTML) {
	
		if(target_url) {
			complete_url = flashfile; // + "?clickTag="+target_url;
		} else {
			complete_url = flashfile;
		}
		
		var embed = document.createElement('embed');	
		
		embed.setAttribute('height','100%');
		embed.setAttribute('width','100%');
		embed.setAttribute('wmode','transparent'); 
		embed.setAttribute('opaque','true');
		embed.setAttribute('src',complete_url);
		ele_id.innerHTML = embed.outerHTML;				
	} else { // Not microsoft 
		if(target_url) {
			complete_url = flashfile; // + '?clickTag='+target_url;
			complete_url = complete_url;
		} else {
			complete_url = flashfile;
		}
		var oDiv=document.createElement('div');
		oDiv.innerHTML = '';
		oDiv.innerHTML = oDiv.innerHTML + 
			'<object width="100%" height="100%"><embed width="100%" height="100%" wmode="transparent" opaque="true" src="' + complete_url + '" ></embed></object>'; 
		ele_id.innerHTML = oDiv.innerHTML;
	} 
}
	


function createControl2(ele_id,flashfile,target_url){
	
	var complete_url = '';
	
	if(ele_id.outerHTML) {
	
		if(target_url) {
			complete_url = flashfile; // + "?clickTag="+target_url;
		} else {
			complete_url = flashfile;
		}
		
		var embed = document.createElement('embed');	

		embed.setAttribute('height','512');
		embed.setAttribute('width','640');
		embed.setAttribute('wmode','transparent'); 
		embed.setAttribute('opaque','true');
		embed.setAttribute('src',complete_url);
		ele_id.innerHTML = embed.outerHTML;				
	} else { // Not microsoft 
		if(target_url) {
			complete_url = flashfile; // + '?clickTag='+target_url;
			complete_url = complete_url;
		} else {
			complete_url = flashfile;
		}
		var oDiv=document.createElement('div');
		oDiv.innerHTML = '';
		oDiv.innerHTML = oDiv.innerHTML + 
			'<object width="640" height="512"><embed width="640" height="512" wmode="transparent" opaque="true" src="' + complete_url + '" ></embed></object>'; 
		ele_id.innerHTML = oDiv.innerHTML;
	} 
}


	
/** 
 * Functions for theme menu 
 */
var themelistItems = null;
var themaTimerStart = 0;
/* function initThemaMenu() {
	themelistItems = document.getElementById('themelistitems');
	if(themelistItems.addEventListener) {
		document.addEventListener('click',switchThemeListItems,false);
	} else if(themelistItems.attachEvent) {
		document.attachEvent('onclick', switchThemeListItems);
	} 
} */

function switchThemeListItems(e){
	var date = new Date(); 
	var now = date.getTime(); 
	
	/** 
	 * This prevents those browsers that like to bubble 
	 * their events (those, not using w3c event model
	 */
	if(now-themaTimerStart > 100) {
		themaTimerStart = now;
	} else {
		return;
	}
	

	var ele;
	if(!e)
		var e = window.event;
		
	ele = (e.srcElement?e.srcElement:e.target); 
	if (ele.nodeType == 3) 
		ele = ele.parentNode;
	
	if (themelistItems == null){
		themelistItems = document.getElementById('themelistitems');
	}
	
	var parent = ele.parentNode; 
	while(parent.nodeType != 1) {
		parent = parent.parentNode;
	}


	if(ele.id == 'themelistitemsMenu' || parent.id == 'themelistitemsMenu') {
		if(window.event) { e.cancelBubble = true; } else { e.stopPropagation(); }
	
		if(themelistItems.style.visibility == 'visible') {
			themelistItems.style.visibility = 'hidden';
		} else {
			themelistItems.style.visibility = 'visible';
		}	
	} else {
		themelistItems.style.visibility = 'hidden';	
	}
	
}

/** 
 * Stuff for the floating TOC. Run in (only) Standards compliance mode
 */
function floatingMenu() {
    var _diff = 200;
    var _counter = 0;
    var _ele = null;
    var _clientHeight;
    var _eleHeight;
    var _margin = 130;
    var _targetY = null; 
    var _currentY = null;
    var _minY = 350;

    var _startTime = null;
    var _timeOut = 349;
    

    this.go = function(ele) {
        _ele = ele;
        _ele._isMoving = false;
        _ele._onscrollActivated = true;
        _ele._stopSliding = false;

    
        if (self.innerHeight) {
	    _clientHeight = parseInt(self.innerHeight);
        } else if (document.documentElement && document.documentElement.clientHeight) {
	    _clientHeight = parseInt(document.documentElement.clientHeight);
	} else if (document.body) {
	    _clientHeight = parseInt(document.body.clientHeight);
	}

        _eleHeight = _ele.scrollHeight;
        _ele.style.display = 'none';
 
        stayNice();
    }
    
    this.onscroll = function() {
        _ele.style.display = 'none';
        _ele._onscrollActivated = true;
        _startTime = new Date().getTime();
    }

    getScrollOffset = function(){
        if (self.pageYOffset) {
	    return scrollOffset = parseInt(self.pageYOffset);
	} else if (document.documentElement && document.documentElement.scrollTop) {
	    return scrollOffset = parseInt(document.documentElement.scrollTop); 
	} else if (document.body) {
	    return scrollOffset = parseInt(document.body.scrollTop);
	}
    }

    stayNice = function() {
        var scrollOffset = getScrollOffset();
        var curr = new Date().getTime();
        if(!_ele._isMoving && _ele._onscrollActivated && (curr-_startTime)>_timeOut) {
            _ele._onscrollActivated = false;
            _ele._isMoving = true;
            _targetY = _clientHeight+scrollOffset-parseInt(_eleHeight)-_margin;             
            _currentY = parseInt(_clientHeight+scrollOffset+_ele.scrollHeight+(_margin/2));
            _ele.style.top = _currentY;
            _counter = 0;
            

            if(scrollOffset > _minY)  
                _ele.style.display = 'block';
            slide();
            //setTimeout(slide, 300);
            _ele._isMoving = false;
        } 
        setTimeout(stayNice, 5);
    }

    slide = function () {
        var diff = _targetY>_currentY?_targetY-_currentY:_currentY-_targetY;
        
       if(diff>0) {
            var factor = Math.floor(Math.sin(_counter/80)*diff)+1;
            _counter+=2;
            if(_targetY>_currentY) {
                _currentY+=factor;
            } else {
                _currentY-=factor
            }
            _ele.style.top = _currentY+'px';
            setTimeout(slide, "100");
        }
    }
}


/** 
 * Initializing stuff for the page 
 */
//var toc = new floatingMenu();
window.onload = function() {
	try {	
		initThemaMenu(); 
	} catch(x) {  }
	
	try {
		toTop();
	} catch(y) {  }
	
	/*try {
		var text_ele = document.getElementById('text');
		var ps = text_ele.getElementsByTagName("p");
		var ele = null; 
		for(i=0;i<ps.length;i++) {
	    	var p=ps.item(i);
	    	if(p.style.textAlign == 'center') {
	        	ele = p;
				break;
	    	}		
		}
		
		var prediv = document.createElement('div'); 
    	prediv.innerHTML = "&nbsp;<br />";
    
        var div = document.createElement('div'); 
        ele.style.textAlign = 'left';
        var object  = ele.cloneNode(true);
        object.id = 'floatingToc';
        div.appendChild(object);
        document.getElementById("toc_container").appendChild(prediv);
        document.getElementById("toc_container").appendChild(div);
		toc.go(object); 
		
		if(document.documentElement) {
			document.documentElement.onscroll = function() {
				toc.onscroll();
			} 
		} else if(document.body){
			document.body.onscroll = function() {
				toc.onscroll();
			}
		}else{
			document.onscroll = function() {
				toc.onscroll();
			}
		}
		
		
		
	} catch(x){ 
		//alert(x.description?x.description:x);
	}*/
}



function buildTOCKidzz(){
	var container = document.getElementById('content_text');
	var h2s = container.getElementsByTagName('h2');
	var h1 = container.getElementsByTagName('h1')[0]; 
	var ps = container.getElementsByTagName('p'); 
	
	var toc = document.createElement('div'); 
	for(var i=0;i<h2s.length;i++) {
		var txt = h2s[i].innerHTML; 
		txt = txt.replace(/(<([^>]+)>)/ig,""); 
		if(h2s[i].className == 'detAlineakopUsp'){
			continue;
		}
		if(txt == 'Inleiding'){
			continue;
		}
		
		var target = "toc_h2_"+i;
		h2s[i].innerHTML = '<a name="'+target+'"></a>'+txt;
		if(toc.innerHTML != '') {
			toc.innerHTML+= ' | ';
		}
		toc.innerHTML+='<a href="#'+target+'">'+txt+'</a>';
	}
	var fele = null;
	for(var i=0;i<ps.length;i++){
		if(ps[i].className == 'teaser'){
			fele = ps[i]; 
			break;
		}
	}
	if(fele == null) 
		fele = h1;
	
	container.insertBefore(toc, fele.nextSibling); 
}

/** 
 * Cookie writer for HBX
 */
 
var query = unescape(window.location.search.substring(1));
var tmp = query.split('&');
var parameters = new Array();
parameters['cmp'] = '';
for (var i = 0; i < tmp.length; i++) {
	var pos = tmp[i].indexOf('=');
	if (pos > 0) {
		var key = tmp[i].substring(0, pos);
		var val = tmp[i].substring(pos + 1);
		parameters[key] = val;
	}
}
var oc = parameters['cmp'];
var oc = oc.substr(4);
var datum = new Date();
datum.setTime(datum.getTime() + 1000 * 60 * 60 * 24 * 365);

if(oc!=''){
	document.cookie = "oorzaakCodeCookie=" + oc + "; expires=" + datum.toGMTString() + "; domain=loi.nl; path=/";
}

/** 
 * Einde cookie writer for HBX
 */
 
 
/***********************************************
* Cool DHTML tooltip script- &copy; Dynamic Drive DHTML code library (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
***********************************************/

var offsetxpoint=2 //Customize x offset of tooltip
var offsetypoint=-46 //Customize y offset of tooltip
var ie=document.all
var ns6=document.getElementById && !document.all
var enabletip=false
if (ie||ns6)
var tipobj=document.all? document.all["dhtmltooltip"] : document.getElementById? document.getElementById("dhtmltooltip") : ""

function ietruebody(){
return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

function ddrivetip(thetext, thecolor, thewidth){
if (ns6||ie){
if (typeof thewidth!="undefined") tipobj.style.width=thewidth+"px"
if (typeof thecolor!="undefined" && thecolor!="") tipobj.style.backgroundColor=thecolor
tipobj.innerHTML=thetext
enabletip=true
return false
}
}

function positiontip(e){
if (enabletip){
var curX=(ns6)?e.pageX : event.clientX+ietruebody().scrollLeft;
var curY=(ns6)?e.pageY : event.clientY+ietruebody().scrollTop;
//Find out how close the mouse is to the corner of the window
var rightedge=ie&&!window.opera? ietruebody().clientWidth-event.clientX-offsetxpoint : window.innerWidth-e.clientX-offsetxpoint-20
var bottomedge=ie&&!window.opera? ietruebody().clientHeight-event.clientY-offsetypoint : window.innerHeight-e.clientY-offsetypoint-20

var leftedge=(offsetxpoint<0)? offsetxpoint*(-1) : -1000

//if the horizontal distance isn't enough to accomodate the width of the context menu
if (rightedge<tipobj.offsetWidth)
//move the horizontal position of the menu to the left by it's width
tipobj.style.left=ie? ietruebody().scrollLeft+event.clientX-tipobj.offsetWidth+"px" : window.pageXOffset+e.clientX-tipobj.offsetWidth+"px"
else if (curX<leftedge)
tipobj.style.left="5px"
else
//position the horizontal position of the menu where the mouse is positioned
tipobj.style.left=curX+offsetxpoint+"px"

//same concept with the vertical position
if (bottomedge<tipobj.offsetHeight)
tipobj.style.top=ie? ietruebody().scrollTop+event.clientY-tipobj.offsetHeight-offsetypoint+"px" : window.pageYOffset+e.clientY-tipobj.offsetHeight-offsetypoint+"px"
else
tipobj.style.top=curY+offsetypoint+"px"
tipobj.style.visibility="visible"
}
}

function hideddrivetip(){
if (ns6||ie){
enabletip=false
tipobj.style.visibility="hidden"
tipobj.style.left="-1000px"
tipobj.style.backgroundColor=''
tipobj.style.width=''
}
}

document.onmousemove=positiontip

//EIND TOOLTIP SCRIPT



function replaceSpaces() {
	var classElements = new Array();

	var searchClass = "tab"
	var tag = "td"
	
	var els = document.getElementsByTagName("td");
	var elsLen = els.length;
	
	var pattern = new RegExp("(^|\\\\s)"+searchClass+"(\\\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if (pattern.test(els[i].className) ) {
			
			var getlink = els[i].getElementsByTagName("a");
			var linLen = getlink.length;
				for (q = 0, x = 0; q < linLen; q++) {
					
					var link = getlink[q].innerHTML;
					
					var newlink  = link.replace(/ /g, "&nbsp;");
					getlink[q].innerHTML = newlink;
					
				x++;
			}
			
		
			
			classElements[j] = els[i];
			
			j++;
		}
	}
	
	return classElements;
}