document.observe("dom:loaded", function(event) {
	/**
	 * Alle links met een class 'externe-link' openen in een nieuw venster
	 */
	$$('a.externe-link, a[rel*=external], a[href^="http:"]').each( function(el) {
		el.target =  '_blank';
	});
	
	/**
	 * Alle li'tjes met class 'submenu' krijgen een extra class
	 * wanneer je er overheen hovert
	 */
	$$('div#topmenu li.submenu').each( function(el) {
		Event.observe( el, 'mouseover', function() {
			el.addClassName('hover');
		});
		Event.observe( el, 'mouseout', function() {
			el.removeClassName('hover');
		});
	});
	
	/**
	 * Alle litjes met class 'submenu' krijgen een extra class
	 * wanneer je er overheen hovert
	 */
	var overzichtBlokHeight = 0;
	var items = $$('div.overzicht dl.blok');
	items.each( function(el) {
		var height = el.getHeight();
		if( height > overzichtBlokHeight ) overzichtBlokHeight = height;
	});
	setItemsHeight(items,overzichtBlokHeight-20);
	
	/**
	 * Items in hoofdmenu krijgen class zodat submenu werkt in ie6
	 */
	$$('ul#frontmenu li.level1').each( function(el) {
		Event.observe( el, 'mouseover', function() {
			el.addClassName('hover');
			if( el.hasClassName('eerste')) {
				el.addClassName('hover-eerste');
			}
		});
		Event.observe( el, 'mouseout', function() {
			el.removeClassName('hover');
			if( el.hasClassName('eerste')) {
				el.removeClassName('hover-eerste');
			}
		});
	});
	
	/**
	 * In sommige hoofdmenu-items zit een div.extra
	 * Een hover op zo'n blok moet geen class aan de
	 * parent-li toekennen
	 */
	$$('ul#frontmenu div.extra').each( function(el) {
		var li = null;
		if( li = el.up('li.level1') ) {
			Event.observe( el, 'mouseover', function() {
				li.addClassName('non-hover');
			});
			Event.observe( el, 'mouseout', function() {
				li.removeClassName('non-hover');
			});
		}
	});
	
	/**
	 * Blokken die in hun geheel aanklikbaar moeten zijn
	 */
	clickable ( 'dl.download', 'download-hover' );
	clickable ( 'ul.meer li', 'hover' );
	clickable ( 'dl.vacature', 'vacature-hover' );
	clickable ( '#frontmenu div.extra', 'extra-hover' );
	
	/**
	 * Tekstvelden vullen
	 */
	setValue( $('zoeken-q'), 'zoeken...' );
	setValue( $('zoeken-archief-q'), 'zoeken in het archief...' );
	
	/**
	 * Print-optie toevoegen
	 */
	var lijst = $('opties');
	if (lijst) {
		var url = getStrippedUrl() + '?view=print';
		var item = new Element('li');
		
		var link = new Element('a', {
			'id': 'print',
			'class': 'none',
			'href': url
		}).update('Print pagina').observe ( 'click' , function( event ) {
			event.stop();
			print(url);			
		});
		item.appendChild(link);
		lijst.appendChild(item);
	}
	
	/**
	 * Alle items met class 'inklapbaar' nagaan en die een extra
	 * class 'ingeklapt' geven
	 */
	$$('.inklapbaar').each( function(el) {
		el.addClassName('ingeklapt');
		
		var heading2 = null;
		if( heading2 = el.select('h2')[0]) {
			Event.observe( heading2, 'click', function(event) {
				el.toggleClassName('uitgeklapt');
			});
			
			Event.observe( heading2, 'mouseover', function(event) {
				heading2.addClassName('h2-hover');
			});
			
			Event.observe( heading2, 'mouseout', function(event) {
				heading2.removeClassName('h2-hover');
			});
		}
		
		var antwoord = null;
		if( antwoord = el.select('div.antwoord')[0] ) {
			var link = new Element('a', {
				'class': 'none sluiten',
				'href': '#'
			}).update('Sluit dit antwoord').observe ( 'click' , function( event ) {
				event.stop();
				el.toggleClassName('uitgeklapt');	
			});
			
			antwoord.appendChild(link);
		}
	});
	
	/**
	 * Functionaliteit toekennen aan lettergrootte-items
	 */
	var lettergrootteKleiner = $('lettergrootte-kleiner');
	var lettergrootteGroter = $('lettergrootte-groter');
	var body = $$('body')[0];
	if( (lettergrootteKleiner || lettergrootteGroter) && body ) {
		// Geaccepteerde fontsizes
		var acceptedFontSizes = new Array(10, 12, 14, 16);
		// Kijken of font-size uit cookie gehaald kan worden
		var fontSize = readCookie('fontSize');
		// Als font-size niet uit cookie gehaald kon worden,
		// dan halen we 'm uit stijleigenschappen
		if( fontSize == null || !in_array(fontSize, acceptedFontSizes, false) ) {
			fontSize = body.getStyle('font-size').replace(/[^\d]*/g, ''); // convert '1.2em' to '12'
		}
		fontSize = parseInt( fontSize );

		// Als huidige lettergrootte+2 niet in array van geaccepteerde fontgroottes zit,
		// dan wordt de knop om lettergrootte mee te vergroten, uitgeschakeld
		if( lettergrootteGroter && !in_array(fontSize + 2, acceptedFontSizes, false) ) {
			lettergrootteGroter.up('dd').addClassName('disabled');
		}
		// Als huidige lettergrootte-2 niet in array van geaccepteerde fontgroottes zit,
		// dan wordt de knop om lettergrootte mee te verkleinen, uitgeschakeld
		if( lettergrootteKleiner && !in_array(fontSize - 2, acceptedFontSizes, false) ) {
			lettergrootteKleiner.up('dd').addClassName('disabled');
		}
		
		if( lettergrootteGroter )  {
			Event.observe( lettergrootteGroter, 'click', function(event) {
				event.stop();
				// Nieuwe font-size na druk op knop
				var newFontSize = fontSize+2;
				// Als deze nieuwe font-size in array van geaccepteerde font-sizes
				// voorkomt, ga dan dingen doen
				if( in_array( newFontSize, acceptedFontSizes, false ) ) {
					//console.log('Font-size van body op '+ newFontSize/10 + 'em');
					body.setStyle({ 'fontSize': newFontSize/10 + 'em' });
					retrieveAndSetFrontmenuItemsHeight(true);
					if( lettergrootteKleiner ) {
						lettergrootteKleiner.up('dd').removeClassName('disabled');
					}
					fontSize = newFontSize;
					createCookie('fontSize',fontSize,365);
					// De knop om lettergrootte mee te vegroten disabelen als nieuwe font-size de grootse
					// lettergrootte is
					if( lettergrootteGroter && !in_array( newFontSize+2, acceptedFontSizes, false ) ) {
						lettergrootteGroter.up('dd').addClassName('disabled');
					}
				}
			});
		}
		
		if( lettergrootteKleiner ) {
			Event.observe( lettergrootteKleiner, 'click', function(event) {
				event.stop();
				// Nieuwe font-size na druk op knop
				var newFontSize = fontSize-2;
				// Als deze nieuwe font-size in array van geaccepteerde font-sizes
				// voorkomt, ga dan dingen doen
				if( in_array( newFontSize, acceptedFontSizes, false ) ) {
					//console.log('Font-size van body op '+ newFontSize/10 + 'em');
					body.setStyle({ 'fontSize': newFontSize/10 + 'em' });
					retrieveAndSetFrontmenuItemsHeight(true);
					if( lettergrootteGroter ) {
						lettergrootteGroter.up('dd').removeClassName('disabled');
					}
					fontSize = newFontSize;
					createCookie('fontSize',fontSize,365);
					// De knop om lettergrootte mee te verkleinen disabelen als nieuwe font-size de kleinste
					// lettergrootte is
					if( lettergrootteKleiner && !in_array( newFontSize-2, acceptedFontSizes, false ) ) {
						lettergrootteKleiner.up('dd').addClassName('disabled');
					}
				}
			});
		}
	}
	
	var switchContrast = null;
	if( switchContrast = $('switch-contrast') ) {
		// Kijken of contrast uit cookie gehaald kan worden
		var huidigContrast = readCookie('contrast');
		// Als contrast niet uit cookie gehaald kon worden,
		// dan zetten we 'm op 'normal'
		if( huidigContrast == null ) {
			huidigContrast = 'normal';
		}
		
		Event.observe( switchContrast, 'click', function(event) {
			event.stop();
			if( huidigContrast == 'normal' ) {
				var newContrast = 'high';
				switchToNewContrast(newContrast);
				// Tekst in knop aanpassen
				switchContrast.update( 'Normaal contrast' );
			} else {
				var newContrast = 'normal';
				switchToNewContrast(newContrast);
				// Tekst in knop aanpassen
				switchContrast.update( 'Hoog contrast' );
			}
			huidigContrast = newContrast;
			// Contrast in cookie setten
			createCookie('contrast',huidigContrast,365);
		});
	}
	
	retrieveAndSetFrontmenuItemsHeight();
	setFilterFunctionality();
});

// www.quirksmode.org/js/cookies.html
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

//www.quirksmode.org/js/cookies.html
function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

//www.quirksmode.org/js/cookies.html
function eraseCookie(name) {
	createCookie(name,"",-1);
}

/**
 * Gaat alle items in het frontmenu bij langs, houdt bij welk
 * item het hoogst is en geeft deze hoogte door aan functie die
 * elk de hoogte van elk item in het frontmenu zet. 
 * 
 * @return void
 */
function retrieveAndSetFrontmenuItemsHeight( setToAutoFirst ) {
	if( setToAutoFirst )
		setFrontmenuItemsHeight( 'auto' );
	
	var hoofdmenuItems =  $$('ul#frontmenu li.level1');
	var nieuweHoogte = 0;
	hoofdmenuItems.each( function(el) {
		var huidigeHoogte = el.getHeight();
		if( huidigeHoogte > nieuweHoogte ) nieuweHoogte = huidigeHoogte;
	});
	setFrontmenuItemsHeight( nieuweHoogte );
}

/**
 * Geeft een meegegeven minimale hoogte aan frontmenuitems
 * 
 * @param hoogte
 * @return void
 */
function setFrontmenuItemsHeight( hoogte ) {
	if( hoogte != 'auto' ) {
		hoogte = hoogte + 'px';
	}
	$$('ul#frontmenu li.level1').each( function(el) {
		el.setStyle({ height: hoogte });
	});
}

/**
 * Schakelt het ene stylesheet in en de ander uit aan de hand van
 * opgegeven contrasttype
 * 
 * @param style Type contrast (hoog of normaal)
 * @return
 */
function switchToNewContrast( style ) {
	//alert(style);
	var basicCss = null;
	var altCss = null;
	if( ( basicCss = $('default-css') ) && ( altCss = $('alternative-css') ) ) {
		var body = $$('body')[0];
		var basicCssIe = $('default-css-ie');
		if( style == 'high' ) {
			altCss.disabled = true;
			basicCss.disabled = true;
			if( basicCssIe ) {
				basicCssIe.disabled = true;
			}
			altCss.disabled = false;
			setFrontmenuItemsHeight('auto');
			body.setStyle({ fontSize: '2em' });
		} else {
			basicCss.disabled =  true; // dubbele line niet weghalen
			basicCss.disabled = false; // IE-fix
			if( basicCssIe ) {
				basicCssIe.disabled =  true;
				basicCssIe.disabled = false;
			}
			altCss.disabled = true;
			body.setStyle({ fontSize: '1.2em' });
			createCookie('fontSize',12,365);
			retrieveAndSetFrontmenuItemsHeight(true);
		}
	}
}

/**
 * Vergelijkbaar met in_array in php
 * 
 * @param needle
 * @param haystack
 * @param argStrict
 * @return boolean
 */
function in_array(needle, haystack, argStrict) {
	// Checks if the given value exists in the array  
    // 
    // version: 905.3120
    // discuss at: http://phpjs.org/functions/in_array
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: vlado houba
    // *     example 1: in_array('van', ['Kevin', 'van', 'Zonneveld']);
    // *     returns 1: true
    // *     example 2: in_array('vlado', {0: 'Kevin', vlado: 'van', 1: 'Zonneveld'});
    // *     returns 2: false
    // *     example 3: in_array(1, ['1', '2', '3']);
    // *     returns 3: true
    // *     example 3: in_array(1, ['1', '2', '3'], false);
    // *     returns 3: true
    // *     example 4: in_array(1, ['1', '2', '3'], true);
    // *     returns 4: false
    var key = '', strict = !!argStrict;

    if (strict) {
        for (key in haystack) {
            if (haystack[key] === needle) {
                return true;
            }
        }
    } else {
        for (key in haystack) {
            if (haystack[key] == needle) {
                return true;
            }
        }
    }

    return false;
}

function getStrippedUrl() {
	var url = location.href;
	var index = url.lastIndexOf('#');
	return url.substr( 0, index );
}

function print( url ) {
  popup = window.open( url, "help", "width=720, height=700, top=100, left=100, toolbar=0, resizable=1, scrollbars=1, status=0.menubar=0, location=0, directories=0");
  popup.focus();
}

function setValue( el, nieuwevalue ) {
	if (el !== null && el.value == '') {
		el.setAttribute('value', nieuwevalue);
		
		Event.observe(el, 'focus', function(){
			if (el.value == nieuwevalue) 
				el.value = '';
		});
		Event.observe(el, 'blur', function(){
			if (el.value == '') 
				el.value = nieuwevalue;
		});
	}
}

/**
 * Zoekt naar elementen met class die wordt meegegeven met eerste parameter
 * Haalt per element eerste <a> op en haalt link uit die <a> en zet 'm
 * onclick op het element. Verder wordt onmouseover een class
 * (tweede paramter) aan het element toegevoegd
 * 
 * @param selector Selector waarmee elementen kunnen worden opgegeven
 * @param classnameHover Naam van class dat element moet krijgen
 * @return void
 */
function clickable( selector, classnameHover ) {
	$$(selector).each( function(el) {
		var anchors = el.getElementsBySelector('a');
		//var link = anchors[0] ? anchors[0] : '';
		
		if( anchors[0] ) {
			Event.observe(el, 'click', function(event) {
				location.href = anchors[0];
			});
		}
		
		Event.observe(el, 'mouseover', function(event) {
			el.addClassName(classnameHover);
		});
		Event.observe(el, 'mouseout', function(event) {
			el.removeClassName(classnameHover);
		});
	});
}

function setFilterFunctionality() {
	var dlFilter = $$('dl.js_filter');
	dlFilter.each( function(el) {
		// Filters zonder classnames 'filter-active', krijgen extra class
		// die het filter verbergen
		if( !el.hasClassName('filter-active') ) {
			el.addClassName('filter-nonactive');
		}
		
		//Eerst zoeken we de <dt> op waar we een navigatielijst aan toevoegen
		var dt = null;
		if( dt = el.select('dt')[0] ) {
			var lijst = new Element('ul', { 'class': 'filter-navigatie' });
			
			//De eerste filterrij krijgt geen knop 'vorige'
			if( !el.hasClassName('eerste') ) {
				var liVorige = new Element('li', { 'class': 'vorige' });
				var aVorige = new Element(
									'a',
									{ 'href': '#' }
									)
									.update('vorige jaar')
									.observe( 'click', function(event) {
										event.stop();
										clearClasses(dlFilter, 'filter-active');
										el.addClassName('filter-nonactive');
										el.previous().addClassName('filter-active');
									}
				);
				liVorige.appendChild(aVorige);
				lijst.appendChild(liVorige);
			}
			
			//De laatste filterrij krijgt geen knop 'volgende'
			if( !el.hasClassName('laatste') ) {
				var liVolgende = new Element('li', { 'class': 'volgende' });
				var aVolgende = new Element(
						'a',
						{ 'href': '#' }
						)
						.update('volgende jaar')
						.observe( 'click', function(event) {
							event.stop();
							clearClasses(dlFilter, 'filter-active');
							el.addClassName('filter-nonactive');
							el.next().addClassName('filter-active');
						}
				);
				liVolgende.appendChild(aVolgende);
				lijst.appendChild(liVolgende);
			}
			
			dt.appendChild(lijst);
		}
	});
	
	var jaarMaanden = $$('dl.js_filter dd a');
	var itemsPerMaand = $$('div.items-per-maand');
	jaarMaanden.each( function( jaarMaand ) {
		//jaarMaand.href = '#' + idToShow;
		Event.observe(jaarMaand, 'click', function(event) {
			event.stop();
			clearClasses( itemsPerMaand, 'items-per-maand-active' );
			$(jaarMaand.rel).addClassName('items-per-maand-active');
			
			clearClasses(jaarMaanden, 'active');
			jaarMaand.addClassName('active');
			return false;
		});
	});
}

function clearClasses( objecten, className ) {
	objecten.each( function(el) {
		el.removeClassName(className);
	});
}

function setItemsHeight(items,height) {
	if( height != 'auto' )
		height = height + 'px';
	items.each( function(el) {
		el.setStyle({ minHeight: height });
		if( Prototype.Browser.IE6 && height > el.getHeight() ) {
			el.setStyle({ height: height });
		}
	});
}