//
// Extend links.js
//
// Versie 1.0, 9 mei 2009
//
// Copyright: Roger Jolly, 2009
// This work is licensed under a Creative Commons Attribution-Noncommercial 3.0 Unported License
// http://creativecommons.org/licenses/by-nc/3.0/
//
// Op de site worden li-elementen gebruikt in menu's met links, soms als tab, soms als buttons. 
// De gebruiker zal doorgaans verwachten dat hij niet alleen op de link zelf kan klikken, maar
// dat de hele "botton" of "tab" als knop functioneert. Dit script zorgt hiervoor door te kijken naar de
// link en het adres in de onclick van de li te plaatsen. Om te voorkomen dat bij links naar
// een ander frame of window ook in hetzelfde frame opent, wordt de event bubble gestopt
// via een onclick bij de link.  Daarnaast worden voor IE6 extra eventfuncties toegevoegd om
// de li-elementen een "hover"-state te geven.
// Deze functie gaat ervan uit dat een link naar een ander frame of window een class "external"
// heeft of een target="_blank". OOk gaat hij ervan uit dat er een global variabele window.isIE6 is,
// die aangeeft of we met IE6 te maken hebben.
// De functie is zeer specifiek voor de site.

(function() {

	function init() {
		var theUlElements = document.getElementsByTagName("ul");
		var theLiElements;
		var theAElements;
		
		var i,j; // tellertjes
		
		// Doorloop de ul's.
		for (i=0; i< theUlElements.length; i++) {
			
			// We zijn alleen geïnteresseerd in ul's van de class "menu".
			if (theUlElements[i].className != "menu") continue;
			
			// Verzamel de li's.
			theLiElements = theUlElements[i].getElementsByTagName("li");

			// Doorloop de li's.
			for (j=0 ; j< theLiElements.length; j++) {
				// Pak van elke li de eerste link.
				theAElements = theLiElements[j].getElementsByTagName("a");
				if (theAElements.length > 0) {
					
					// Zet de classname zodanig dat er een eventuele pointer getoond wordt.
					theLiElements[j].className += " showPointer";
					
					// Maak een functiestring aan, die afhankelijk van een link naar een 
					// eventueel extern doel ook de link van de li daarnaar laat verwijzen.
					// Stop daarbij de event bubble.
					var functionString = "if (!e) var e = window.event;"
											+ "e.cancelBubble = true;"
											+ "if (e.stopPropagation) e.stopPropagation();"
					
					if (theAElements[0].className == "external" 
						|| theAElements[0].target == "_blank") {
						functionString += "window.open('"	
											+ theAElements[0].href
											+ "')";
					} else {
						functionString += "window.location='"
											+ theAElements[0].href
											+ "'";
					}
	
					// Hang de functie aan de onclick van de li. Dat moet op deze manier om het
					// ook in internet explorer te laten werken.
					theLiElements[j]["onclick"] = new Function("e", functionString);
					
					// Voeg voor IE6 mousover handlers toe aan de li's.
					if (window.isIE6) {
						theLiElements[j]["onmouseover"] = new Function("e", "this.className += ' hover'");
						theLiElements[j]["onmouseout"] = new Function("e", "if (/\\shover$/.test(this.className)) this.className = this.className.replace(/\\shover$/, '');");
					}
	
					// Stop de event bubble op een manier die het ook in internet explorer doet.
					theAElements[0]["onclick"]= new Function("e",
					"if (!e) var e = window.event;" +
					"e.cancelBubble = true;" +
					"if (e.stopPropagation) e.stopPropagation();");
					
				}
			}
		}
	}
	
	// Zorg dat dit script na het laden van de pagina wordt uitgevoerd. 
	if (window.addEventListener) {
		window.addEventListener("load", init, false);
	} else if (window.attachEvent) {
		window.attachEvent("onload", init);
	}

})(); // Roep de functie aan nu hij gedefinieerd is, zodat hij ingevuld wordt.
