var Navigation = new function() {
	var Self = this;
	var Loaded = false;
	var LoadEvent = window.onload;
	var OnLoad = null;
	this.OnLoad = function() {
		Page = document.getElementById('page_name') ? document
				.getElementById('page_name').value : '';
		Keywords = document.getElementById('js_keywords') ? document
				.getElementById('js_keywords').value : '';
		ResultUrl = document.getElementById('result_url') ? document
				.getElementById('result_url').value : '';
		switch (Page.toLowerCase()) {
			case 'regulation' :
			case 'regulationelement' :
				SetHighLight(Keywords);
				break;
			case 'searchedregulationelement' :
				SetHighLight(Keywords);
				break;
		};
	};
	var Traverse = function(root, regexp_keywords, countFound) {
		var valid = new RegExp(/\S/);
		var lastNode = false;
		var children = root.childNodes, l = children.length, node;
		for (l = 0; l < children.length; l++) {
			node = children[l];
			if (node && node.nodeType == 3) {
				if (valid.test(node.nodeValue)) {
					translated = Translate(node, regexp_keywords, countFound);
					countFound = translated['countFound'];
					if (translated['lastNode']) {
						lastNode = translated['lastNode'];
					};
				};
			} else if (node
					&& node.nodeType == 1
					&& (node.tagName != 'SPAN' || (node.tagName == 'SPAN' && node.className != 'highlight'))) {
				traversed = Traverse(node, regexp_keywords, countFound);
				countFound = traversed['countFound'];
				if (traversed['lastNode']) {
					lastNode = traversed['lastNode'];
				};
			};
		};
		var retval = new Array();
		retval['countFound'] = countFound;
		retval['lastNode'] = lastNode;
		return retval;
	};
	var Translate = function(node, regexp_keywords, countFound) {
		var AnchorName = '_tekst_zoekterm';
		/* changed this from nodeValue to parent innerHTML to prevent losing law tekst*/
		/*var text = node.parentNode.innerHTML.replace('\n\r', '');*/
		var text = node.nodeValue.replace('\n\r', '');''
		var lastNode = false;
		/*ADDED EXTRA if to check if the keyword isn't already highlited in this textnode, else we would lose tekst*/
		if (text.search(new RegExp('([^a-z0-9#]|^)(' + regexp_keywords
						+ ')([^#]|$)', 'ig')) != -1 && text.search(new RegExp('<span class=("?)highlight("?)>(' + regexp_keywords
						+ ')</span>', 'ig')) == -1) {
			while (text.search(new RegExp('([^a-z0-9#]|^)(' + regexp_keywords
							+ ')([^#]|$)', 'ig')) != -1) {
				lastNode = node.parentNode;
				text = text.replace(new RegExp('([^a-z0-9#]|^)('
										+ regexp_keywords + ')([^#]|$)', 'ig'),
						function(m0, m1, m2, m3) {
							m2 = '#--blablie--#' + m2 + '#--blablie--#';
							var Anchor = AnchorName + '_' + (countFound);
							var NextAnchor = AnchorName + '_'
									+ (countFound + 1);
							countFound++;
							return m1 + '<a name="' + Anchor
									+ '"></a><span class="highlight">' + m2
									+ '</span><a href="#' + NextAnchor
									+ '" class="arrow">&nbsp;</a>' + m3;
						});
			};
			text = text.replace(/#--blablie--#/g, '');
			/*node.parentNode.innerHTML = text;*/
			newnode = document.createElement("span");
			newnode.innerHTML = text;
			node.parentNode.replaceChild(newnode, node) ;
		};
		var retval = new Array();
		retval['countFound'] = countFound;
		retval['lastNode'] = lastNode;
		return retval;
	};
	var SetHighLight = function(Keywords) {
		if (document.getElementById('wettekst-items')) {
			var AnchorName = '_tekst_zoekterm';
			var countFound = 0;
			var regexp_keywords = '';
			Keywords = Keywords.split('%_');
			for (var b in Keywords) {
				if (Keywords[b] != '') {
					Keywords[b] = Keywords[b].replace(/\*/ig,
							'[a-zA-Z0-9-_]{0,}');
					Keywords[b] = Keywords[b].replace(/\?/ig,
							'[a-zA-Z0-9-_]{0,1}');
					Keywords[b] = Keywords[b].replace(/ /ig, '\\s{1,}');
					regexp_keywords += Keywords[b] + '|';
				};
			};
			if (regexp_keywords != '') {
				regexp_keywords = regexp_keywords.substr(0,
						regexp_keywords.length - 1);
				if (regexp_keywords != '') {
					traversed = Traverse(document
									.getElementById('wettekst-items'),
							regexp_keywords, countFound);
				};
				lastNode = traversed['lastNode'];
				if (lastNode) {
					countFound = traversed['countFound'];
					lastNode.innerHTML = lastNode.innerHTML.replace(
							'"#_tekst_zoekterm_' + countFound + '"',
							'"#_tekst_zoekterm_0"');
				};
			};
		};
	};
	this.init = function() {
		(LoadEvent ? LoadEvent() : null);
		Self.OnLoad();
		Loaded = true;
	};
};
Core.addEventListener(window, 'load', Navigation.init);
