/*  
 *  Standaardscripts voor ministeriële websites
 *
 *  eend ~ maakt internet menselijk
 *  ~ Peter-Paul Koch
 * 
 *  v1.0 - 02/11/2007 
 *
 */
 
 
/* 
	TEKSTGROOTTE
	Knoppen en functionaliteit worden automatisch gegenereerd in
	het element met id="tekstgrootte"
*/

var paginaTaal; // welke taal gebruikt de pagina? Gezet in initializeAll

var tekstGrootte = {
	tekst: {
		nl: 'Tekstgrootte ',
		en: 'Text size '
	},
	hulptekstGroter: {
		nl: 'groter',
		en: 'larger'
	},
	hulptekstKleiner: {
		nl: 'kleiner',
		en: 'smaller'	
	},
	groterTekst: {
		nl: '+',
		en: '+'
	},
	kleinerTekst: {
		nl: '-',
		en: '-'
	},
	huidig: 2,
	classes: ['kleinst','kleiner','','groter','grootst'],
	groterLink: undefined,
	kleinerLink: undefined,
	oudeLink: undefined,
	styleSheets: [],
	bodyClass: '',
	init: function () {
		var writeroot = document.getElementById('tekstgrootte');
		if (!writeroot) return;
		this.bodyClass = document.body.className;	
		writeroot.innerHTML = '';
		var header = document.createElement('h2');
		header.appendChild(document.createTextNode(this.tekst[paginaTaal]));
		writeroot.appendChild(header);
		this.groterLink = document.createElement('a');
		this.groterLink.href = '#';
		this.groterLink.title = this.hulptekstGroter[paginaTaal];
		this.groterLink.appendChild(document.createTextNode(this.groterTekst[paginaTaal]));
		this.groterLink.onclick = this.tekstGroter;
		this.kleinerLink = document.createElement('a');
		this.kleinerLink.href = '#';
		this.kleinerLink.title = this.hulptekstKleiner[paginaTaal];
		this.kleinerLink.appendChild(document.createTextNode(this.kleinerTekst[paginaTaal]));
		this.kleinerLink.onclick = this.tekstKleiner;
		writeroot.appendChild(listify([this.kleinerLink,this.groterLink]));
		var oudeWaarde = Cookies.tekstgrootte;
		if (!oudeWaarde) return;
		this.huidig = oudeWaarde;
		this.zetGrootte();
	},
	tekstGroter: function () {
		tekstGrootte.huidig++;
		tekstGrootte.zetGrootte();
  location.reload();
		return false;
	},
	tekstKleiner: function () {
		tekstGrootte.huidig--;
		tekstGrootte.zetGrootte();
  location.reload();
		return false;
	},
	zetGrootte: function () {
		if (this.huidig >= this.classes.length-1)
			this.groterLink.className = 'disabled';
		else
			this.groterLink.className = '';
		if (this.huidig <= 0)
			this.kleinerLink.className = 'disabled';
		else
			this.kleinerLink.className = '';
		if (this.huidig < 0)
			this.huidig = 0;
		if (this.huidig >= this.classes.length)
			this.huidig = this.classes.length-1;
		document.body.className = this.bodyClass + ' ' + this.classes[this.huidig];
		Cookies.create('tekstgrootte',this.huidig,365);
	}
}

var printLink = {
	tekst: {
		nl: "Print deze pagina",
		en: "Print this page"
	},
	init: function () {
		var writeroot = document.getElementById('printlink');
		if (!writeroot) return;
		var link = document.createElement('a');
		link.href = '#';
		link.appendChild(document.createTextNode(this.tekst[paginaTaal]));
		link.onclick = function () {
			window.print();
			return false;
		}
		writeroot.appendChild(link);
	}
}

var stuurdoor = {
	writeroot: undefined,
	init: function () {
		var link = document.getElementById('stuurdoor');
		this.writeroot = document.getElementById('stuurdoorFormulier');
		if (!link || !this.writeroot) return;
		link.onclick = function() {stuurdoor.haalFormulier(link.getAttribute('href')); return false};
	},
	haalFormulier: function (sUrl) {
		sendRequest(sUrl,this.toonFormulier);
	},
	toonFormulier: function (req) {
		stuurdoor.writeroot.innerHTML = req.responseText;
		popups.initPopups(stuurdoor.writeroot);
	}
}

var popups = {
	standaardBreedte: 300,
	standaardHoogte: 150,
	waarschuwingTekst: {
		nl: '(opent in popup)',
		en: '(opens in popup)'
	},
	init: function () {
		this.initPopups(document);
	},
	initPopups: function (obj) {
		var x = obj.getElementsByTagName('a');
		for (var i=0;i<x.length;i++) {
			if (x[i].getAttribute('rel') && x[i].getAttribute('rel').indexOf('popup') != -1) {
				x[i].firstChild.nodeValue += ' ' + this.waarschuwingTekst[paginaTaal];
				x[i].onclick = function(){popups.openPopup(this); return false};
			}
		}
	},
	openPopup: function (link) {
		var breedte = this.standaardBreedte;
		var hoogte = this.standaardHoogte;
		var data = link.getAttribute('rel').split(';');
		if (data.length == 3) {
			breedte = data[1];
			hoogte = data[2];
		}
		window.open(link.href,'popup','width='+breedte+',height='+hoogte+',resizable=yes,scrollbars=yes');
	}
}

var bloklinks = {
	speciaal: ['extern','anker','download'],
	init: function () {
		var lists = document.getElementsByTagName('li');
		for (var i=0;i<lists.length;i++) {
			if (lists[i].className.indexOf('bloklink') == -1) continue;
			var ul = lists[i].parentNode;
			if (!ul.gedaan) {
				ul.className += ' js-aan';
				ul.gedaan = true;
			}
			var classes = lists[i].className;
			var classesHover = classes + ' over';
			for (var j=0;j<this.speciaal.length;j++) {
				if (classes.indexOf(this.speciaal[j]) != -1) {
					classesHover = classes.replace(this.speciaal[j],this.speciaal[j]+'Over');
					break;
				}
			}
			lists[i].origClass = classes;			
			lists[i].hoverClass = classesHover;
			lists[i].onmouseover = function () {
				this.className = this.hoverClass;
			}
			lists[i].onmouseout = function () {
				this.className = this.origClass;
			}
			lists[i].onclick = function () {
				//Sjors van Berkel 15-07-08
				//Use onclick code if available, otherwise, use the href
				if(this.getElementsByTagName('a')[0].onclick){
					this.getElementsByTagName('a')[0].onclick();
				}else{
					var href = this.getElementsByTagName('a')[0].href;
					location.href = href;
				}
				return false;
			}
		}
	}
}

var pollresultaten = {
	factor: undefined,
	init: function () {
		var writeroot = document.getElementById('poll-res');
		if (!writeroot) return;
		var items = writeroot.getElementsByTagName('li');
		for (var i=0;i<items.length;i++) {
			var spans = items[i].getElementsByTagName('span');
			if (!spans.length) continue;
			var staaf = spans[0];
			if (!this.factor)
				this.factor = staaf.offsetWidth/100;
			var percentage = parseInt(spans[1].firstChild.nodeValue);
			var innerSpan = document.createElement('span');
			innerSpan.style.width = percentage * this.factor + 'px';
			staaf.appendChild(innerSpan);
		}
	}
}

var zoomPhotos = {
	vergrootTekst: {
		nl: '<span>Vergroten</span>',
		en: '<span>Enlarge</span>'
	},
	verkleinTekst: {
		nl: '<span>Verkleinen</span>',
		en: '<span>Reduce</span>'
	},
	minimumMarge: 180,
	init: function () {
		var x = document.getElementsByTagName('div');
		for (var i=0;i<x.length;i++) {
			if (x[i].className.indexOf('zoom') != -1) {
				var link = x[i].getElementsByTagName('a')[0];
				link.normalPhoto = link.getElementsByTagName('img')[0];
				link.onclick = zoomPhotos.zoom;
				var tekst = link.getElementsByTagName('span')[0];
				tekst.innerHTML = this.vergrootTekst[paginaTaal];
			}
		}
	},
	zoom: function () {
		if (!this.zoomedPhoto) {
			this.zoomedPhoto = zoomPhotos.createImg(this.href, this.normalPhoto.alt, this.normalPhoto.title);
			this.zoomedPhoto.className = 'zoomPhoto';
			this.insertBefore(this.zoomedPhoto,this.normalPhoto);
		}
		this.normalPhoto.style.display = 'none';
		this.zoomedPhoto.style.display = 'block';
		var span = this.getElementsByTagName('span')[0];
		span.originalText = span.innerHTML;
		span.className = 'zoomout';
		span.innerHTML = zoomPhotos.verkleinTekst[paginaTaal];
		var zoomPhoto = this.zoomedPhoto;
		if (!zoomPhoto.width) {
			var breedteMeting = setInterval(function () {
				if (zoomPhoto.width > 0) {
					zoomPhotos.sizeContent(zoomPhoto);
					clearInterval(breedteMeting);
				}	
			},250);
		}
		else
			zoomPhotos.sizeContent(zoomPhoto);
		this.onclick = zoomPhotos.unzoom;
		return false;
	},
	unzoom: function () {
		this.normalPhoto.style.display = 'block';
		this.zoomedPhoto.style.display = 'none';	
		this.onclick = zoomPhotos.zoom;
		var span = this.getElementsByTagName('span')[0];
		span.className = 'zoomin';
		span.innerHTML = span.originalText;
		var zoomContainer = this.normalPhoto.parentNode.parentNode;
		zoomContainer.style.marginRight = '';
		return false;
	},
	createImg: function (source, alt, title) {
		var newImage = document.createElement('img');
		newImage.src = source;
		newImage.alt = alt;
		newImage.title = title;
		return newImage;
	},
	sizeContent: function (obj) { // obj is img.zoomPhoto, wiens parentNode de link is
		var fotoBreedte = obj.width;
		var zoomContainer = obj.parentNode.parentNode; // div.zoom
		var contentVlak = zoomContainer.parentNode; // container van div.zoom
		var totaleBreedte = contentVlak.offsetWidth;
		var verschil = totaleBreedte - fotoBreedte;
		if (verschil < this.minimumMarge) {
			if (verschil > 0)
				zoomContainer.style.marginRight = verschil + 'px';
		}
	}
}

var RSSFeed = {
	RSSReadroot: undefined,
	RSSWriteroot: undefined,
	RSSURL: 'http://www.regering.nl/rss/',
	init: function () {
		this.RSSReadroot = document.getElementById('rss');
		if (!this.RSSReadroot) return;
		this.RSSReadroot.onclick = this.create;
		this.RSSWriteroot = document.getElementById('rss-url');
		this.RSSReadroot.elements[this.RSSReadroot.elements.length-1].style.display = 'none';
		this.RSSReadroot.onclick();
	},

	create: function () {
		var x = this.elements;
		var aanvinkFlag = false;
		var RSSString = RSSFeed.RSSURL;
		for (var i=0;i<x.length;i++) {
			if (x[i].type != 'checkbox') continue;
			if (!x[i].checked) continue;
			RSSString += x[i].name + '/';
			aanvinkFlag = true;
		}
		if (!aanvinkFlag) {
			RSSFeed.RSSWriteroot.style.display = 'none';
			return;
		}
		else
			RSSFeed.RSSWriteroot.style.display = 'block';		
		if (!this.writeroot)
			RSSFeed.container(RSSString);
		else
			this.writeroot.href = this.writeroot.innerHTML = RSSString;
	},
	container: function(linkText) {
		var par = document.createElement('p');
		par.appendChild(document.createTextNode('Uw gegenereerde URL is:'));
		var span = document.createElement('span');
		var link = document.createElement('a');
		link.href = link.innerHTML = linkText;
		span.appendChild(link);
		par.appendChild(span);	
		this.RSSWriteroot.appendChild(par);
		this.RSSReadroot.writeroot = link;
	}
}

var faqLijst = {
	init: function () {
		var x = document.getElementById('faqlijst');
		if (!x) return;
		var items = x.getElementsByTagName('li');
		for (var i=0;i<items.length;i++) {
			items[i].onclick = this.toggle;
			items[i].onmouseover = function () {
				this.moStatus = 'Over';
				faqLijst.changeClass(this);
			}
			items[i].onmouseout = function () {
				this.moStatus = '';
				faqLijst.changeClass(this);
			}
			items[i].originalClass = items[i].className;
			items[i].className += ' dicht';
			items[i].status = 'dicht';
		}
	},
	toggle: function () {
		this.status = (this.status == 'dicht') ? 'open' : 'dicht';
		faqLijst.changeClass(this);
	},
	changeClass: function (obj) {
		obj.className = obj.originalClass + ' ' + obj.status + obj.moStatus;
	}
}


/* INITIALISATIE 
	aangeroepen door DOMContentReady
*/

var inits = [
	'tekstGrootte',
	'printLink',
	'popups',
	'bloklinks',
	'pollresultaten',
	'zoomPhotos',
	'RSSFeed',
	'faqLijst',
	'stuurdoor'
];

function initializeAll() {
	paginaTaal = document.documentElement.lang || 'nl';
	for (var i=0;i<inits.length;i++) {
		if (window[inits[i]])
			window[inits[i]].init();
	}
}

/* UTILITIES */

function listify(dataArray) {
	var x = document.createElement('ul');
	for (var i=0;i<dataArray.length;i++) {
		var y = document.createElement('li');
		y.appendChild(dataArray[i]);
		x.appendChild(y);
	}
	return x;
}

function sendRequest(url,callback,postData) {
	var req = createXMLHTTPObject();
	if (!req) return;
	var method = (postData) ? "POST" : "GET";
	req.open(method,url,true);
	req.setRequestHeader('User-Agent','XMLHTTP/1.0');
	if (postData)
		req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
		req.onreadystatechange = function () {
		if (req.readyState != 4) return;
		if (req.status != 200 && req.status != 304) {
			// alert('HTTP error ' + req.status);
			return;
		}
		callback(req);
	}
	if (req.readyState == 4) return;
	req.send(postData);
}

var XMLHttpFactories = [
	function () {return new XMLHttpRequest()},
	function () {return new ActiveXObject("Msxml2.XMLHTTP")},
	function () {return new ActiveXObject("Msxml3.XMLHTTP")},
	function () {return new ActiveXObject("Microsoft.XMLHTTP")},
];

function createXMLHTTPObject() {
	var xmlhttp = false;
	for (var i=0;i<XMLHttpFactories.length;i++)
	{
		try {
			xmlhttp = XMLHttpFactories[i]();
		}
		catch (e) {
			continue;
		}
		break;
	}
	return xmlhttp;
}

// push and shift for IE5

function Array_push() {
	var A_p = 0
	for (A_p = 0; A_p < arguments.length; A_p++) {
		this[this.length] = arguments[A_p]
	}
	return this.length
}

if (typeof Array.prototype.push == "undefined") {
	Array.prototype.push = Array_push
}

function Array_shift() {
	var A_s = 0
	var response = this[0]
	for (A_s = 0; A_s < this.length-1; A_s++) {
		this[A_s] = this[A_s + 1]
	}
	this.length--
	return response
}

if (typeof Array.prototype.shift == "undefined") {
	Array.prototype.shift = Array_shift
}


/* COOKIES */

var Cookies = {
	init: function () {
		var allCookies = document.cookie.split('; ');
		for (var i=0;i<allCookies.length;i++) {
			var cookiePair = allCookies[i].split('=');
			this[cookiePair[0]] = cookiePair[1];
		}
	},
	create: function (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=/";
		this[name] = value;
	},
	erase: function (name) {
		this.create(name,'',-1);
		this[name] = undefined;
	},
	eraseAll: function () {
		for (var i in this) {
			if (typeof this[i] == 'function') continue;
			this.erase(i);
		}
	}
};
Cookies.init();

/* DOMCONTENTREADY */

function ContentReady() {
	// quit if this function has already been called
	if (arguments.callee.done) return;

	// flag this function so we don't do the same thing twice
	arguments.callee.done = true;

	// kill the timer
	if (_timer) clearInterval(_timer);

	// do stuff
	initializeAll();
};

/* for Mozilla/Opera9 */
if (document.addEventListener) {
	document.addEventListener("DOMContentLoaded", ContentReady, false);
}

/* for Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
	document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
	var script = document.getElementById("__ie_onload");
	script.onreadystatechange = function() {
		if (this.readyState == "complete") {
			ContentReady(); // call the onload handler
		}
	};
/*@end @*/

/* for Safari */
if (/WebKit/i.test(navigator.userAgent)) { // sniff
	var _timer = setInterval(function() {
		if (/loaded|complete/.test(document.readyState)) {
			ContentReady(); // call the onload handler
		}
	}, 10);
}

/* for other browsers */
window.onload = ContentReady;