// $Id: common.js,v 1.9 2008/02/21 22:42:15 cmanley Exp $


function isScriptLoaded(src) {
  var scripts = document.getElementsByTagName('script');
  for (var i = 0; i < scripts.length; i++) {
    if (scripts[i].getAttribute('src') == src) {
      return true;
    }
  }
  return false;
}


function loadScript(src) {
  if (isScriptLoaded(src)) {
    return true;
  }
  if (document.createElement && document.childNodes) {
    var e = document.createElement('script');
    e.setAttribute('src', src);
    e.setAttribute('type', 'text/javascript');
    e.setAttribute('defer', 'defer');
    var head = document.getElementsByTagName('head')[0];
    var scripts = document.getElementsByTagName('script');
    if (scripts.length) {
      head.insertBefore(e, scripts[0]);
    }
    else {
      document.getElementsByTagName('head')[0].appendChild(e);
    }
    return true;
  }
  return false;
}



// Extend the primitive type classes
String.prototype.toHtml = function() {
 return this.replace(/[&<>]/g, function(c) { if (c == '&') return '&amp;'; if (c == '<') return '&lt;'; if (c == '>') return '&gt;'; });
}

Number.prototype.toCurrencyNL = function() {
 var f = Math.round(this * 100);
 if (f == 0) {
  return '0,00';
 }
 var s = String(f);
 var e = s.length > 2 ? s.substr(0,s.length - 2) : '0';
 var c = s.substr(s.length - 2);
 var re = /(\d+)(\d{3})/;
 while (re.test(e)) {
  e = e.replace(re, '$1' + '.' + '$2');
 }
 return e + ',' + c;
}

String.prototype.toCurrencyNL = function() {
 return Number(this).toCurrencyNL();
}

Date.prototype.getUnixTime = function() {
 return Math.floor(this.valueOf() / 1000);
}


function getClassName(o) {
 var arr = o.constructor.toString().match(/^\[class (\S+)\]$/);
 return arr && arr.length == 2 ? arr[1] : undefined;
}


/**
 * Returns the text value of an element.
 */
function domNodeTextValue(n) {
	if (n.nodeType == 3) { // text node
		return n.nodeValue;
	}
	var result = '';
	if (n.hasChildNodes()) {
		var nodes = n.childNodes;
		for (var i = 0; i < nodes.length; i++) {
			result += domNodeTextValue(nodes[i]);
		}
	}
	return result;
}

// Custom print function
function customPrint() {
  window.print();
  return false;
}


// Menu onclick handler
function menuClick(name, subname) {
  if (subname) {
    // open main menu
    var e = document.getElementById('menu' + name);
    if (e == null) {
      throw 'No such element with id="menu' + name + '"!';
    }
    e.style.display = 'block';
    // open or close submenu
    e = document.getElementById('menu' + name + subname);
    if (e == null) {
      throw 'No such element with id="menu' + name + subname + '"!';
    }
    e.style.display = e.style.display == 'none' ? 'block' : 'none';
  }
  else {
    var e = document.getElementById('menu' + name);
    if (e == null) {
      throw 'No such element with id="menu' + name + '"!';
    }
    var display = e.style.display == 'none' ? 'block' : 'none';
    closeAllMenus();
    e.style.display = display;
  }
  return false;
}


// Close all open menus.
function closeAllMenus() {
  var divs = document.getElementsByTagName('div');
  for(var i=0; i < divs.length; i++) {
    if (divs[i].id == null) {
      continue;
    }
    if (divs[i].id.match(/^menu.+/)) {
      divs[i].style.display = 'none';
    }
  }
}


// Translate a name into an email address.
function translateNameToEmail(name) {
  // Do what you want here to return the correct email address that belongs to the given name.
  var map = new Array();
  map['Edger van Faassen'] = new Array('e.van.faassen','mosadex','nl');
  var parts = map[name];
  if (!parts) {
    return null;
  }
  return parts[0] + '@' + parts[1] + '.' + parts[2];
}


// Fix the 'mailto:' link in an <a> tag.
function fixEmail(a, name) {
  if ((a.href != null) && (a.href.substr(0,7) == 'mailto:')) {
    if (!name) {
      name = a.innerText; // not DOM compliant code, but skips all embedded html elements if any.
      if (!name) {
        // DOM complient code, but won't work if there are any embedded html elements between the <a> and </a> tags.
        aChildNodes = a.childNodes;
        if (aChildNodes.length) {
          name = a.childNodes[0].nodeValue;
        }
      }
    }
    if (name) {
      var email = translateNameToEmail(name);
      if (email) {
        a.href = a.href.replace(/^(mailto\:)([^\?]*)(\?.*)?$/, '$1' + email + '$3');
      }
    }
  }
  return true;
}



/* Macromedia rip offs */
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}


function cookieCheck() {
 document.cookie = "cookiecheck=1";
 var enabled = (document.cookie.indexOf("cookiecheck") != -1);
 // Check if session cookie is present, if not then page was loaded from browser cache and is probably invalid.
 if (enabled) {
  if (document.cookie.indexOf("PHPSESSID") == -1) {
   document.location.reload(true);
   return;
  }
 }
 else {
  var e = document.getElementById('cookies_disabled');
  if (e) {
   e.style.display = 'block';
  }
 }
}


// Array of code to call when document has loaded.
var onloadCallStack = new Array('cookieCheck()');


// Document onload event handler.
function documentLoaded() {
	for (var i = 0; i < onloadCallStack.length; i++) {
		if (typeof(onloadCallStack[i]) == 'function') {
			onloadCallStack[i].call();
		}
		else if (typeof(onloadCallStack[i]) == 'string') {
			eval(onloadCallStack[i]);
		}
		else {
			//throw new TypeError();
		}
	}
}


// Set event handlers
onload = documentLoaded;
