// JavaScript Document
// created:	2005-02-01	Sander Aarts	
// edited:	2005-04-20	Niek Emmen		[ADDED: relative sizes for Safari]
// edited:	2006-10-30	Sander Aarts	[EXPANDED: automatic popups based on className]



// class name that will trigger popup:
var popClasses = new Array("popUp","popUpPrint");

// popup properties for each className
var popTypes = {};
popTypes["popUp"] = {						// Name of popup type/className
	 poptarget: "_blank"					// Target name of popup
	,popWidth:	780							// Width popup window
	,popHeight:	500							// Height popup window
	,absHor:	false						// Horizontal positioning: true > absolute / false > center
	,absVert:	false						// Vertical positioning: true > absolute / false > center
	,popHor:	800							// Horizontal position. If absHor is false, this value will be used as minimum in case the available screen width is unknown
	,popVert:	600							// Vertical position. If absVert is false, this value will be used as minimum in case the available screen height is unknown
	,printV:	false						// Print version. If true, the toolbar will be shown in case the browser does not support Javascript printing
	,popAttr:	['menubar','toolbar','location','status','title','directories','resizable','scrollbars']	// Array with, comma seperated, window properties which must be 'on'. E.g. ['location','scrollbars']
};

popTypes["popUpPrint"] = {
	 popTarget: "print"
	,popWidth:	690
	,popHeight:	500
	,absHor:	false
	,absVert:	false
	,popHor:	800
	,popVert:	600
	,printV:	true
	,popAttr:	['resizable','scrollbars']
};

// tag names of elements that might trigger popups:
var popTags = ["a","area"/*,"input"*/,"select"];

// relative popup sizes per browser compared to IE (in pixels):
var relSizes = {
	 Ns7W: -1		// width Netscape 7  
	,Ns6W: -2		// width Netscape 6
	,Ns4H: -22		// height Netscape 4
	,Op5W: 12		// width Opera 5
	,IEmacW: -16	// width IE/Mac
	,SafW: -2		// width Safari
	,SafH: -1		// height Safari
};

setPopups = function() {
	correctSizes();
	for (t=0; t<popTags.length; t++) {	// loop through tag names
		var popNodes = document.getElementsByTagName(popTags[t]);
		for (n=0; n<popNodes.length; n++) {	// loop throught nodes
			var nodeClass = popNodes[n].className;
			if (!nodeClass) continue;	// no class attribute defined, continue with next node
			classLoop:
				for (p=0; p<popClasses.length; p++) {
					if (nodeClass == popClasses[p]) {	// exact match, call setPopEvent();
						setPopTrigger(popNodes[n],popClasses[p]);	// call callPobject()
						break classLoop;
					}
					else if (nodeClass.indexOf(popClasses[p]) > -1) {	// match, but not exact
						var nodeClasses = nodeClass.split(/\s+/);	// seperate class names (devided by one or more whitespaces)
						for (c=0; c<nodeClasses.length; c++) {
							if (nodeClasses[c] == popClasses[p]) {	// matching seperated class name, call setPopEvent() and stop comparing class names for this node
								setPopTrigger(popNodes[n],popClasses[p]);	// call callPobject() and stop comparing class names for this node
								break classLoop;
							}
						}
					}
				}
		}
	}
}

// popup object
function Pobject(popUrl,popType) {
	this.popUrl = popUrl;
	this.popType = popType;
}

// basket for all popup objects
var popObj = {};

function setPopTrigger(node,popType) {	// defining popup event en URL
	if (node.nodeName == "SELECT" || (node.nodeName == "INPUT" && (node.type == "checkbox" || node.type == "radio"))) {
		if (node.nodeName == "SELECT") {
			popUrl = "select";	// later on the value of the selected option will be set as popup URL
		}
		else {
			popUrl = node.value;	// the value of the node itself is set as popup URL
		}
		popObj[node] = new Pobject(popUrl,popType);
		node.onchange = function() {
			popUrl = (popObj[this.id].popUrl == "select") ? this.options[this.selectedIndex].value : popObj[this.id].popUrl;
			convertPop(popUrl,popObj[this.id].popType);
			return false;
		};
	}
	else {
		popUrl = node.href;	// the href of the node itself (assuming there is one) is set as popup URL
		popObj[node] = new Pobject(popUrl,popType);
		node.onclick = function() {
			convertPop(popObj[this].popUrl,popObj[this].popType);
			return false;
		};
	}
}

function correctSizes() {
	var relWidth;
	var relHeight;
	// get relative popup sizes according to the user agent
	if (window.opera) {
		if ((navigator.userAgent.indexOf("Opera 5") != -1) || (navigator.userAgent.indexOf("Opera/5") != -1)) relWidth = relSizes.Op5W;
	}
	else {
		if (navigator.userAgent.indexOf("Mozilla/5") != -1) {
			if (navigator.userAgent.indexOf("Netscape6") != -1) relWidth = relSizes.Ns6W;
			else if (navigator.userAgent.indexOf("Netscape/7") != -1) relWidth = relSizes.Ns7W;
			else if (navigator.userAgent.indexOf("Safari/1") != -1) {relWidth = relSizes.SafW; relHeight = relSizes.SafH};
		}
		else if (navigator.userAgent.indexOf("Mozilla/4") != -1) {
			if (navigator.appName == "Netscape") relHeight = relSizes.Ns4H;
		}
		if ((navigator.userAgent.indexOf("Mac") != -1) && (navigator.userAgent.indexOf("MSIE") != -1)) relWidth = relSizes.IEmacW;
	}
	for (t in popTypes) {
		if (relWidth) popTypes[t].popWidth += relWidth;
		if (relHeight) popTypes[t].popHeight += relHeight;
	}
}

addLoadEvent(setPopups);



// convert to 'old' popUp function
function convertPop(pUrl,pType) {
	popUp(pUrl,popTypes[pType].popTarget,popTypes[pType].printV,popTypes[pType].popHeight,popTypes[pType].popWidth,popTypes[pType].absVert,popTypes[pType].popVert,popTypes[pType].absHor,popTypes[pType].popHor,popTypes[pType].popAttr);
}

//associatieve array waarin alle geopende popups ter referentie worden opgenomen
var popWin = new Array()

function popUp(popURL) {
/*
	popUp(popUrl[,popTarget,isPrint,popHeight,popWidth,vBool,vPop,hBool,hPop,popAttr])
	
	popUrl:		URL popup
	
	- OPTIONEEL - 
	LET OP: indien een opt. argument wordt opgegeven moeten tevens de evt. voorgaande opt. argumenten worden opgegeven
	popTarget	- default: '_blank'			target popup
	isPrint		- default: 0				boolean: 0 [niet print-versie] / 1 [print-versie]
											indien window.print niet ondersteund wordt toont print-versie de toolbar (i.v.m. print-knop)
	popHeight	- default: 550				hoogte popup
	popWidth	- default: 500				breedte popup
	vBool		- default: 0				boolean: 0 [centreren] / 1 [absoluut positioneren]
	vPop		- default: 480				bepaalt verticale positie (i.c.m. vBool):
											- (if vBool==1) > absolute positie
											- (if vBool==0) > minimale hoogte window voor het geval window.screen niet ondersteund wordt
	hBool		- default: 0				boolean: 0 [centreren] / 1 [absoluut positioneren]
	hPop		- default: 640				bepaalt horizontale positie (i.c.m. hBool):
											- (if hBool==1) > absolute positie
											- (if hBool==0) > minimale breedte window voor het geval window.screen niet ondersteund wordt
	popAttr:	- default: ['scrollbars']	array met window-kenmerken die 'aan' moeten staan, voorbeeld: ['location','scrollbars']
											LET OP: geldt alleen voor booleans. Left, top, width en height worden door voorgaande argumenten bepaald
*/

//default-waarden van optionele argumenten, zie hierboven
	var varArr = new Array('_blank',0,550,500,0,480,0,640,['resizable'])

//default-waarden worden overschreven
	for (a = 1; a < popUp.arguments.length; a++) {
		varArr[a - 1] = popUp.arguments[a]
	}

//verticale positie bepalen
	if (varArr[4]) {yPos = varArr[5]}
	else {
		if (window.screen) {varArr[5] = window.screen.availHeight}
		yPos = (varArr[5]-varArr[2])/2
	}

//horizontale positie bepalen
	if (varArr[6]) {xPos = varArr[7]}
	else {
		if (window.screen) {varArr[7] = window.screen.availWidth}
		xPos = (varArr[7]-varArr[3])/2
	}
	
//window-kenmerken 'aan'-zetten
	var winFeatures = ''
	var tool = false
	for (a = 0; a < varArr[8].length; a++) {
		if (varArr[8][a] == 'toolbar') {tool = true}
		else {
			if (a > 0) {winFeatures += ','}
			winFeatures += varArr[8][a] + '=yes'
		}
	}
	if (tool || (varArr[1] && !window.print)) {
		if (winFeatures != '') {winFeatures += ','}
		winFeatures += 'toolbar=yes'
	}
	
//naam target wordt indexwaarde in popWin (referentie-array), i.g.v. '_blank' >> numerieke indexwaarde
	if (varArr[0] == '_blank') {trgt = null}
	else {trgt = varArr[0]}
	
//open popup
	if (varArr[1]){
		if (window.print){
			window.print();	
		} else {
			popWin[trgt] = window.open(popURL,varArr[0],winFeatures + ',width=' + varArr[3] + ',height=' + varArr[2] + ',top=' + yPos + ',left=' + xPos);
		}
	} else {
		popWin[trgt] = window.open(popURL,varArr[0],winFeatures + ',width=' + varArr[3] + ',height=' + varArr[2] + ',top=' + yPos + ',left=' + xPos);
	}
}