/* javascript.js */

/* global: browser-stijl-hekje */
var css_style = "table-row";
if (document.all) css_style = "block";

function get_url_param(name) {
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); 
  var regexS = "[\\?&]"+name+"=([^&#]*)"; 
  var regex = new RegExp( regexS ); 
  var results = regex.exec( window.location.href ); 
  if( results == null ) {
    return ""; 
  }
  else {
    return results[1];
  }
}

function toggle(srcel, id) {
    var el;
    id = id.split(",");
    el = $e(id[0]);
    var bstate;
    if (el && el.style) bstate = (el.style.display == 'none');
    for (var i=0; i<id.length; i++) {
        el = $e(id[i]);
        if (el && el.style) {
            bstate = (el.style['display'] == 'none');
            if (arguments.length > 2) bstate = arguments[1];
            el.style.display = (bstate) ? css_style : "none";
        }
    }
}

/**
 * nudge server for client-side navigation
 * optionele tweede parameter gaat in de 'param' van het request
 */
function ajax_tno(el) {
  // get url-parameter 'page'
  var res = {};
  res.page= get_url_param('page');
  res.id = el.id;
  var contents;
  switch (el.nodeName) {
    case 'A':
      res.caption = el.innerHTML;
      break;
    default:
      res.caption = el.innerHTML;
  }
  if (arguments.length > 1) {
    res.param = (arguments[1] ? 'open' : 'close');
  }
  $.get('clientnav.php',res);
}

function key_iseditor(key) {
	// Sorry, the Del key comes through as '.', I cannot always-allow this 
  if (key==8) return true; // backspace
  if (key==9) return true; // tab
  if (key >= 16 && key <= 19) return true; // arrows?
  if (key >= 33 && key <= 43) return true; // 
  if (key==127) return true; // escape
	return false;
}

// key_excluder: forbid characters from keyList
//Returns false if the typed character is part of the string keyList
function key_excluder(keyList, e) {
  var key = e.keyCode || e.which;
  if (!key) return true;
	if (key_iseditor(key)) return true;
  if (keyList.indexOf(String.fromCharCode(key),0) >= 0) {
    alert('Deze toets is niet toegestaan: ' + String.fromCharCode(key));
    return false;
  }
}

// key_includer: restrict to characters in keyList
//Returns false if the typed character is NOT part of the string keyList
function key_includer(keyList, e) {
  var key = e.keyCode || e.which;
  if (!key) return true;
	if (key_iseditor(key)) return true;
  if (keyList.indexOf(String.fromCharCode(key),0) < 0) {
    alert('Deze toets is niet toegestaan: ' + String.fromCharCode(key));
    return false;
  }
}


function checkRightClick(e) {
	if (!e) var e = window.event;
	// if (document.all) { // Toevoeging Bas: doe geen browser detect, maar object detect
		if (e.button == 2) {
			alert(message);
			return false;
		}
	// }
	// if (document.layers) {
		if (e.which == 3) {
			alert(message);
			return false;
		}
	// }
}

function addEventSimple(obj,evt,fn) {
	if (obj.addEventListener)
		obj.addEventListener(evt,fn,false);
	else if (obj.attachEvent)
		obj.attachEvent('on'+evt,fn);
}

function disableText(e){
  return false;
}

function reEnable(){
  return true;
}

function top() {
  scrollTo(0,0);
}

// cookies ****
function createCookie(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=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for (var i=0; i < ca.length; i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

// generic form submit handler
// override this by having a submitform() in your page script
function ctl_submitform(e) {
	if (typeof submitform == "function") {
		submitform(e);
	} else {
		document.forms[0].submit();
	}
}

/**************************************************************************************
 * thingies useful in DOM manipulation
 */
function ravel(obj) {
	var res = '';
	for (var i in obj) {
		switch(typeof obj[i]) {
		case "function": res += "method "+i + "\n"; break;
		case "object": res += "object (array?) "+i + "\n"; break;
		default: res += "value "+i+"="+obj[i]+"\n";
		}
	}
	return res;
}

// get reference to DOM element
function $e(el) {
	if (typeof el == "string") return document.getElementById(el);
	return el;
}

// enumerate all html-tags of type
function $T(type) { // [parent = document]
	var el;
	if (arguments.length > 1) {
		el = $e(arguments[1]);
		if (!el) el = document;
	} else {
		el = document;
	}
	return el.getElementsByTagName(type);
}

// create new html-element
function $N(toparent,type) { // [,attributes [,instead-of]]
// create new html element of type, append to parent
	var el = document.createElement(type);
	if (arguments.length > 2) { // [attributes]
		var atts = arguments[2];
		for (var idx in atts) {
			if (atts[idx]) el[idx] = atts[idx];
		}
	}
	if (arguments.length > 3 && (p2=arguments[3])) { // [replace-element]
	  var p2 = arguments[3];
	  p2.parentNode.replaceChild(el,p2);
	} else {
	  toparent.appendChild(el);
	}
	return el;
}

// create text node in element
function $NT(toparent,text) {
  var n = document.createTextNode(text);
  return toparent.appendChild(n);
}

// find parent of certain type to an element 
function $P(el,typ) {
  while (el.nodeName != typ) {
    el = el.parentNode;
    if (!el) break;
  }
  return el;
}

function changeCSSRule(styleclass,stylename,styleprop) {
	// find the rule
	var ses = document.styleSheets;
	var rls;
	var i,j;
	for (i=0; i<ses.length; i++) {
		if (ses[i].cssRules) rls = ses[i].cssRules;
		if (ses[i].rules) rls = ses[i].rules;
		for (j=0; j<rls.length; j++) {
			if (rls[j].selectorText == styleclass) {
				rls[j].style[stylename] = styleprop;
			}
		}
	}
}

/*******************************************************************************
 * thingies for debug
 */

function d0(str) {
	$e('debug').innerHTML = str+'\n';
}

function d(str) {
	var el = $e('debug');
	if (!el) {
		el = document.createElement("pre");
		el.id = 'debug';
		document.body.appendChild(el);
	}
	el.innerHTML += str;
}
