//====================== Browser checks
var Opera = window.opera ? true : false;
var IE = (document.all && document.getElementById && !Opera) ? true:false;
//====================== 
//====================== Initialiseer de volgende functies
function init(){

	//voegt mouseover/mouseouts fases en css voor wetkalender toe
	//zonder js zijn alle fases gewoon onder elkaar te zien
	var head = document.getElementsByTagName("head")[0];
	var stylesheet = document.createElement("link");
	stylesheet.setAttribute("type","text/css");
	stylesheet.setAttribute("rel","stylesheet");
	stylesheet.setAttribute("media","all");
	stylesheet.setAttribute("href","/css/wetkalender.css");
	head.appendChild(stylesheet);

	//alleen uitvoeren op foto-module pagina
	if(document.getElementById("foto-module")) {
		startFotoModule();
		//toon bladeren functie
		toonBladeren();
	}
	
	tekstGrootte(); 
	printKnop();
	wetkalender();
	initAankeilers();
	externalLinks();
	initBrongegevens();
	codeExamples();
	if (document.getElementById("organogram")) {
		initOrganogram();
	}
	if (document.getElementById("nieuwsbrieven")) {
		initNieuwsbrieven();
	}

}

//onderaan js file:

//====================== selecteer inhoud van tekstbox bij focus/click
function codeExamples() {
	var codeAreas = $$('.code');
	if (codeAreas.length > 0) {
		codeAreas[0].onfocus = codeAreas[0].onclick = function() {
			this.focus();
			this.select();
		}
	}
}



//====================== tabel met brongegevens laden bij grafiek
function initBrongegevens() {

	var bronLinks = $$('.brongegevens');

	var addClicks = function(self) {
		//var self = this;
		self.blur();
		self.onclick = function() { return false; }
		var xmlCall = new Ajax(self.href, {
			method : 'get',
			onComplete : function(dataTXT) {

				var t1 = dataTXT.indexOf("<body>");
				var t2 = dataTXT.indexOf("</body>");
				var theTable = dataTXT.substring(t1+6,t2);
				var objTable = document.createElement("div");
				objTable.className = "brontabel";
				objTable.innerHTML = theTable;
				self.parentNode.parentNode.insertBefore(objTable,self.parentNode);
				// slide effect
				if (objTable.scrollHeight) {
					$(objTable).setStyle('overflow','hidden');
					$(objTable).setStyle('height','1px');
					var fx = $(objTable).effects({
						duration: 500,
						transition: Fx.Transitions.sineInOut
					});
					fx.custom({
						'height': [0, objTable.scrollHeight]
					});
				}
				self.innerHTML = "Sluit tabel en definities";

				// sluiten
				self.onclick = function() {
					this.blur();
					// slide effect
					if (objTable.scrollHeight) {
						var fx = $(objTable).effects({
							duration: 500,
							transition: Fx.Transitions.sineInOut,
							onComplete: function() {
								self.parentNode.parentNode.removeChild(objTable);
							}
						});
						fx.custom({
							'height': [objTable.scrollHeight, 0]
						});
					} else {
						this.parentNode.parentNode.removeChild(objTable);
					}
					this.innerHTML = "Toon tabel en definities";
					this.onclick = function() { addClicks(this); return false; }
					return false;
				}

			}
		}).request();
		return false;
	}

	for (var i=0; i<bronLinks.length; i++) {
		bronLinks[i].onclick = function() { addClicks(this); return false; }
	}

}



//====================== tabel met brongegevens laden bij grafiek
function initNieuwsbrieven() {

	var nieuwsbrieven = $$('#nieuwsbrieven h3');

	var addClicks = function(self) {
		self.blur();
		self.onclick = function() { return false; }
		var p = self.parentNode.parentNode.getElementsByTagName('p')[0];
		if ($(p)) {
			$(p).setStyle('display','block');
			$(p).setStyle('overflow','hidden');
			$(p).setStyle('height','1px');
			var fx = $(p).effects({
				duration: 500,
				transition: Fx.Transitions.sineInOut
			});
			fx.custom({
				'height': [0, $(p).scrollHeight]
			});
			self.innerHTML = "(Verberg omschrijving)";

			// sluiten
			self.onclick = function() {
				this.blur();
				// slide effect
				var fx = $(p).effects({
					duration: 500,
					transition: Fx.Transitions.sineInOut,
					onComplete: function() {
						$(p).setStyle('display','none');
					}
				});
				fx.custom({
					'height': [$(p).scrollHeight, 0]
				});
				this.innerHTML = "(Toon omschrijving)";
				this.onclick = function() { addClicks(this); return false; }
				return false;
			}

		}
	}

	for (var i=0; i<nieuwsbrieven.length; i++) {
		var toonlink = document.createElement('a');
		toonlink.appendChild(document.createTextNode("(Toon omschrijving)"));
		toonlink.href = '#';
		nieuwsbrieven[i].appendChild(toonlink);
		var p = nieuwsbrieven[i].parentNode.getElementsByTagName('p')[0];
		if ($(p)) {
			$(p).setStyle('display','none');
			toonlink.onclick = function() { addClicks(this); return false; }
		}
	}

}



//====================== in- en uitklappen van organogram level3
function initOrganogram() {
	var level3lists = getElementsByClassName("level3");
	for (var i=0; i<level3lists.length; i++) {
		var items = level3lists[i].getElementsByTagName("li");
		for (var j=0; j<items.length; j++) {
			var spans = items[j].getElementsByTagName("span");
			if (spans.length > 0) {
				spans[0].onclick = function() {
					if (this.parentNode.className.indexOf("open") > -1) {
						removeClass(this.parentNode,"open");
					} else {
						addClass(this.parentNode,"open");
					}
				}
			}
		}
	}
}
//====================== 

//====================== voegt rollover en click functie toe aan class="aankeiler"
function externalLinks() {
	var extLinks = getElementsByClassName("extern");
	for (var i=0; i<extLinks.length; i++) {
		extLinks[i].setAttribute("target","_blank");
	}
}
//====================== 

//====================== voegt rollover en click functie toe aan class="aankeiler"
function initAankeilers() {
	var aankeilers = getElementsByClassName("aankeiler");
	for (var i=0; i<aankeilers.length; i++) {
		var anchors = aankeilers[i].getElementsByTagName("a");
		if (anchors.length > 0) {
			var anchor = anchors[anchors.length-1];
			if (anchor.parentNode.tagName.toLowerCase() != "li") {
				if (document.implementation) { // not IE5
					aankeilers[i].style.cursor = 'pointer';
				} else {
					aankeilers[i].style.cursor = 'hand';
				}
				aankeilers[i].ref = anchor.getAttribute("href");
				aankeilers[i].onclick = function() {
					document.location.href = this.ref;
				}
				aankeilers[i].onmouseover = function() {
					window.status = this.ref;
					addClass(this,"over");
				}
				aankeilers[i].onmouseout = function() {
					window.status = "";
					removeClass(this,"over");
				}
			} else {
				aankeilers[i].style.backgroundImage = "none";
			}
		} else {
			aankeilers[i].style.backgroundImage = "none";
		}
	}
}
//====================== 

//====================== voegt rollover functie toe aan span class="fase"
function wetkalender() {
	var huidigeToelichtingen = $$('.fase-nummers li.huidige .toelichting');
	for (var i=huidigeToelichtingen.length-1; i>-1; i--) {
		var actieveToelichting = new Element('p', {
			'class': 'actieve-toelichting'
		});
		actieveToelichting.innerHTML = huidigeToelichtingen[i].innerHTML;
		var fasen = huidigeToelichtingen[i].parentNode.parentNode.parentNode.parentNode;
		fasen.parentNode.insertBefore(actieveToelichting, fasen.nextSibling);
		huidigeToelichtingen[i].parentNode.removeChild(huidigeToelichtingen[i]);
	}
	var fasenummers = $$('.fase-nummers li');
	for (var i=0; i<fasenummers.length; i++) {
		fasenummers[i].onmouseover = function() { addClass(this, 'over'); }
		fasenummers[i].onmouseout = function() { removeClass(this, 'over'); }
	}
}
//====================== 

//====================== Aanroep functies bij Onload-event
window.addEvent('domready', function() {
    init();
    checkSize();
});
window.addEvent('resize', function() {
    checkSize();
});
function checkSize() {
	if (Window.getWidth() < 956)
		addClass(document.getElementsByTagName('body')[0], 'smallscreen');
	else
		removeClass(document.getElementsByTagName('body')[0], 'smallscreen');
}
//====================== 

//====================== Zet print-knop visibility en functionaliteit
function _printKnop() {
	// bestaat de print-knop?
	var pk = document.getElementById('print-knop');
	if (!pk) {
		return false;
	}
	else {
		// laat ons de print-knop zien!
		pk.style.display = 'inline';
		plink = pk.getElementsByTagName("A")[0];
		// print deze pagina
		this.plink.onclick = function () {
			window.print();
	        return false;
		}
	}
}
// <li id="print-knop"><a href="#">Print</a></li>
function printKnop() {
	if (document.getElementsByTagName && window.print && document.getElementById("voet-zone") && document.getElementById("naarboven-knop")) {
		var pk = document.createElement("li");
		pk.setAttribute("id","print-knop");
		var pk_a = document.createElement("a");
		pk_a.setAttribute("href","#");
		pk_a.onclick = function () {
			window.print();
    	    return false;
		}
		var pk_text = document.createTextNode("Print");
		pk_a.appendChild(pk_text);
		pk.appendChild(pk_a);
		var vz_menu = document.getElementById("voet-zone").getElementsByTagName("ul")[0];
		var naar_boven = document.getElementById("naarboven-knop");
		vz_menu.insertBefore(pk,naar_boven);
	}
}



//====================== Zet mouseover/mouseout functionaliteit op knoppen (buttons)
function knopMuisOver()
{
	var alleInputTags=document.getElementsByTagName('input');
 	for(var i=0;i<alleInputTags.length;i++)
  	{
		if(alleInputTags[i].className.indexOf('zoek') != -1 || alleInputTags[i].className.indexOf('toon') != -1 || alleInputTags[i].className.indexOf('knop') != -1)
		{
			//mouseover toevoegen
			alleInputTags[i].onmouseover = function () { veranderKlasse(this,  this.className + " muisOver"); };
			//mouseout toevoegen (verwijder " muisOver")
			alleInputTags[i].onmouseout = function () { veranderKlasse(this,  this.className.substring(0, this.className.length - 9)); };
		}
  	}
 }
 //====================== Hulpfunctie voor knopMuisOver()
 function veranderKlasse(item, klasse)
 {
 	item.className = klasse;
	return false;
 }
//====================== 

/* toon bladeren ul */
function toonBladeren() {
	var alleOngeordendeLijsten = document.getElementsByTagName("ul");
	for(var i=0; i<alleOngeordendeLijsten.length; i++){
		if(alleOngeordendeLijsten[i].className.indexOf("bladeren") !=-1) alleOngeordendeLijsten[i].style.display = "block";
	}
}
//====================== 



/* general helper functions */

// adds css rule
function cssAddRule(selector, declaration) {
	if (document.all)
		document.styleSheets[0].addRule(selector, declaration);
	else
		document.styleSheets[0].insertRule(selector + "{" +declaration + "}", 0)
}
// removes css rule
function cssRemoveRule(selector) {
	var mysheet = document.styleSheets[0];
	for (var i=0; i<mysheet.rules.length; i++) {
		if (mysheet.rules[i].selectorText == selector) {
			if (document.all)
				mysheet.removeRule(i);
			else
				mysheet.deleteRule(i);
		}
	}
}

// returns array of elements with class classname
function getElementsByClassName(classname) {
	var a = [];
	var re = new RegExp('\\b' + classname + '\\b');
	var els = document.all?document.all:document.getElementsByTagName("*");
	for(var i=0,j=els.length; i<j; i++)
		if(re.test(els[i].className))a.push(els[i]);
	return a;
}

// returns text value of an element
getValue = function(el) {
	if (el && el.firstChild)
		return el.firstChild.nodeValue;
	else
		return "";
}

// add & remove css classes
function addClass(el,clName) {
	if (el) {
		if (el.className.indexOf(clName) < 0)
			el.className += " "+clName;
	}
}
function removeClass(el,clName) {
	if (el)
		el.className = el.className.replace(clName,"");
}


