
addLoadEvent(preparePopups);
addLoadEvent(tableruler);
addLoadEvent(setInputLabels);

function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

function addUnloadEvent(func) {
	var oldonunload = window.onunload;
	if (typeof window.onunload != 'function') {
		window.onunload = func;
	} else {
		window.onunload = function() {
			oldonunload();
			func();
		}
	}
}

function preparePopups() {
	if (!document.getElementsByTagName) return true;
	var links = document.getElementsByTagName("a");
	for(i=0;i<links.length;i++) {
		if(links[i].getAttribute("class")) {
			if(links[i].getAttribute("class").indexOf("popup") > -1){
				links[i].onclick = function () {
						window.open(this.getAttribute("href"));
					return false;
				}
			}
		}
	}
}

function setInputLabels(){
	if (!document.getElementsByTagName) return true;
	// set and unset labels of inputs based on the title attribute
	var inputfields = document.getElementsByTagName('input');
	for(var i=0;i<inputfields.length;i++) {
		var inputtype = inputfields[i].getAttribute('type');
		var inputlabel = inputfields[i].getAttribute('title');
		if (inputtype && inputtype=='text' && inputlabel && inputlabel.length>0){
			// set label on no userinput
		    inputfields[i].onblur = function(){
		        if(this.value == "") {
		        	inputlabel = this.getAttribute('title');
					if (inputlabel && inputlabel.length>0){
			        	this.value = inputlabel;
						this.className+=" labeled";
					}
		        }
				return false;
			};
			inputfields[i].onblur();	// init on pageload
			// unset label on focus
			inputfields[i].onfocus = function(){
	        	inputlabel = this.getAttribute('title');
				if (inputlabel && inputlabel.length>0 && this.value == inputlabel){
		        	this.value = "";
					this.className=this.className.replace(new RegExp(" labeled\\b"), "");
		        }
				return false;
		    };
		}
	}
	// clear labels from inputs on submit
	var allforms = document.getElementsByTagName('form');
	for(var i=0;i<allforms.length;i++) {
		allforms[i].onsubmit = function(){
			var inputfields = this.getElementsByTagName('input');
			var j;
			for(j=0; j<inputfields.length; j++){
				var inputtype = inputfields[j].getAttribute('type');
				var inputlabel = inputfields[j].getAttribute('title');
				var inputvalue = inputfields[j].value;
				//inputlabel = inputlabel.toLowerCase(); // ???
				inputvalue = inputvalue.toLowerCase();
				if (inputtype && inputtype=='text' && inputlabel && inputlabel.length>0){
					if (inputvalue == inputlabel) inputfields[j].value = '';
				}
			}
			return true;
		};
	}
}

/*
 *	for highlighting of tablerows on mouseover
 */
function tableruler()
{
	if (document.getElementById && document.createTextNode)
	{
		var tables=document.getElementsByTagName('table');
		for (var i=0;i<tables.length;i++)
		{
			if(tables[i].className=='ruler')
			{
				var trs=tables[i].getElementsByTagName('tr');
				for(var j=0;j<trs.length;j++)
				{
					if(trs[j].parentNode.nodeName=='TBODY')
					{
						trs[j].onmouseover=function() {
							this.className+=" ruled"; return false;
		 				}
						trs[j].onmouseout=function(){
							this.className=this.className.replace(new RegExp(" ruled\\b"), ""); return false;
						}
					}
				}
			}
		}
	}
}

function initLimitedCheckedInputs(parentid, maxchecks){
	limitCheckedInputs(maxchecks);
	if (!document.getElementById) return true;
	var vakgebieden = document.getElementById(parentid);
	if (vakgebieden) {
		var checkboxes = vakgebieden.getElementsByTagName('input');
		for(i=0;i<checkboxes.length;i++) {
			checkboxes[i].onchange = function(){
				limitCheckedInputs(maxchecks);
			}
		}
	}
}

function limitCheckedInputs(maxchecks){
	if (!document.getElementById) return true;
	if (!document.getElementsByTagName) return true;
	var checkboxtree = document.getElementById('vakgebieden_selectie');
	if (checkboxtree) {
		var checkcount = 0;
		var checkboxes = checkboxtree.getElementsByTagName('input');
		var labels = checkboxtree.getElementsByTagName('label');
		for(i=0;i<checkboxes.length;i++) {
			if (checkboxes[i].checked) checkcount++; 
		}
		if (checkcount < maxchecks) {
			// enable all checkboxes and labels
			for(i=0;i<checkboxes.length;i++) {
				var checkboxid = checkboxes[i].getAttribute('id');
				checkboxes[i].disabled=false; 
			}
			for(i=0;i<labels.length;i++) {
				labels[i].className = labels[i].className.replace(new RegExp(" disabled\\b"), "");
			}
		}
		else {
			// disable non-checked checkboxes and its labels
			for(i=0;i<checkboxes.length;i++) {
				if (!checkboxes[i].checked) checkboxes[i].disabled=true; 
			}
			for(i=0;i<labels.length;i++) {
				var checkboxid = labels[i].getAttribute('for');
				var cb = document.getElementById(checkboxid);
				if (cb && !cb.checked){
					labels[i].className+=" disabled";
				}
			}
		}
	}
	return false;
}

function setSuckerFish() {
	//var sf = document.
	var sfEls = document.getElementById("nav").getElementsByTagName("LI");
	for (var i=0; i<sfEls.length; i++) {
		sfEls[i].onmouseover=function() {
			this.className+=" sfhover";
		}
		sfEls[i].onmouseout=function() {
			this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
		}
	}
}

function addToFavorites(title, url) {
	if(isDefined('window.external.AddFavorite')) {
		window.external.AddFavorite(url, title);
	} else if(isDefined('window.sidebar.addPanel')) {
		window.sidebar.addPanel(title, url, "");
	}
}

function isDefined(param) {
	var elements = param.split('.');
	var defined = false;
	
	var i=0;
	var object = "";
	var type;
	do {
		try {
			// Punt tussen object a en object b plaatsen
			if(i > 0)
				object += '.';
		
			object += elements[i];
			eval('defined = ((typeof eval(object)) !== "undefined")');
		} catch(e) {
			// If object can not be evaluated, that does not mean it does not exists. But unfortunatly an error is thrown anyway.
		}
		
		i++;
	} while(i < (elements.length) && defined);
	
	return defined;
}


function getClientWidth() {
	return getFilterResults (
		window.innerWidth ? window.innerWidth : 0,
		document.documentElement ? document.documentElement.clientWidth : 0,
		document.body ? document.body.clientWidth : 0
	);
}

function getClientHeight() {
	return getFilterResults (
		window.innerHeight ? window.innerHeight : 0,
		document.documentElement ? document.documentElement.clientHeight : 0,
		document.body ? document.body.clientHeight : 0
	);
}

function getScrollLeft() {
	return getFilterResults (
		window.pageXOffset ? window.pageXOffset : 0,
		document.documentElement ? document.documentElement.scrollLeft : 0,
		document.body ? document.body.scrollLeft : 0
	);
}

function getScrollTop() {
	return getFilterResults (
		window.pageYOffset ? window.pageYOffset : 0,
		document.documentElement ? document.documentElement.scrollTop : 0,
		document.body ? document.body.scrollTop : 0
	);
}

function getFilterResults(n_win, n_docel, n_body) {
	var n_result = n_win ? n_win : 0;
	if (n_docel && (!n_result || (n_result > n_docel)))
		n_result = n_docel;
	return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
}

function showPulldown(pulldownTitle)
{
	var title = pulldownTitle;
	var el = document.getElementById(title);
	if (el.style.display == 'none' || el.style.display == '')
	{
		el.style.display = 'block';
	}
	else
	{
		el.style.display = 'none';
	}
	
	window.scrollTo(0, document.body.offsetHeight);
}

/*
 * convert numbers between intern format and the dutch local monetary
 */
function parseCurrency(s) {
	s = s.toString().replace(/,/gi, '.');
	if(isNaN(s)) s=0;
	return parseFloat(s);
}
function toCurrencyString(c) {
	if(isNaN(c)) s=0;
	s = twoDecimals(c);
	s = s.toString().replace(/\./gi, ",");
	return s;
}
function twoDecimals(n) {
	var s = "" + Math.round(n * 100) / 100;
	var i = s.indexOf('.');

	if (i < 0) 
		return s + ".00";
		
	var t = s.substring(0, i + 1) + s.substring(i + 1, i + 3);
	
	if (i + 2 == s.length) 
		t += "0";
		
	return t;
}
/*
 *	for debugging	
 */
function showBox(event) {
	var box = new DescriptionBox();
	box.show("TITEL", "CONTENT", event);
}