function geefAttribuutWaarde(el, attribuut)
{
	if(typeof el.hasAttribute != "undefined" && el.hasAttribute(attribuut) ) // Mozilla
	{
		return el.getAttribute(attribuut);
	}
	else if(typeof el.hasAttribute != "undefined" && typeof el[attribuut] != "undefined") // Mozilla, standaard attributen komen niet voor bij getAttribute ...
	{
		return el[attribuut];
	}
	else if(typeof el.hasAttribute == "undefined" && typeof el[attribuut] != "undefined") // IE
	{
		return el[attribuut];
	}
	else
	{
		return false;
	}
}

function bestaatAttribuut(el, attribuut)
{
	if(typeof el.hasAttribute != "undefined" && el.hasAttribute(attribuut) ) // Mozilla
	{
		return true;
	}
	else if(typeof el.hasAttribute != "undefined" && typeof el[attribuut] != "undefined") // Mozilla, standaard attributen komen niet voor bij getAttribute ...
	{
		return true;
	}
	else if(typeof el.hasAttribute == "undefined" && typeof el[attribuut] != "undefined") // IE
	{
		return true;
	}
	else
	{
		return false;
	}
}

// zie 'http://www.quirksmode.org/blog/archives/2005/09/addevent_recodi.html' voor de oorsprong van deze functie
alleEvenementen = new Array(); // Voor IE memory leak: alle evenementen opslaan in array zodat ze bij Unload opgeruimd kunnen worden
function evenementToevoegen(element, type, functie)
{
	try
	{
		element.addEventListener(type, functie, false);
	}
	catch(e) // IE
	{
		try
		{
			evenementVerwijderen(element, type, functie); // proberen
			element.attachEvent('on' + type, functie);
		}
		catch(e)
		{
			try
			{
				alert("aan element '" + element.toString() + "' evenement van type '" + type + "' toevoegen mislukt! Functie: " + functie);
			}
			catch(e)
			{
				try
				{
					alert("'" + type + "' evenementToevoegen niet gelukt! Functie: " + functie);
				}
				catch(e)
				{
					alert("'" + type + "' evenementToevoegen niet gelukt!");
				}
			}
			debug_pop( element )
		}
	}

	// na een DOM reload van een veld zijn de evenementen vaak zoek. Hiermee wordt herstellen per veld én het opschonen bij window.unload mogelijk gemaakt
	if(!element.evenementen) element.evenementen = new Array();
	var evenement = new Array();
	evenement.push(type);
	evenement.push(functie);
	element.evenementen.push(evenement);

	evenement = new Array(); // moet herdeclareren na push :(
	evenement.push(type);
	evenement.push(functie);
	evenement.push(element);
	alleEvenementen.unshift(evenement);
}

function evenementVerwijderen(element, type, functie)
{
	try
	{
		element.removeEventListener(type, functie, false);
	}
	catch(e) // IE
	{
		if(element)
		{
			element.detachEvent('on' + type, functie);
		}
	}

	if(element && element.evenementen && element.evenementen.length)
	{
		var tijdelijkElement;
		for(var i=0; i < element.evenementen.length; i++)
		{
			tijdelijkElement = element.evenementen[i];
			if(tijdelijkElement && tijdelijkElement.length && tijdelijkElement[0] == type)
			{
				if(tijdelijkElement[1] == functie) // alleen verwijderen als het dezelfde functie betreft!
				{
					element.evenementen[i] = null;
				}
			}
		}
	}
}

function evenementUitvoeren(element, type)
{
	try // IE
	{
		element.fireEvent('on' + type);
	}
	catch(e) // MOZILLA kan GEEN onchange (alleen muisachtige) events direct afhandelen, moet via omweg: (direct "element.dispatchEvent(type);" gebruiken werkt niet!!)
	{
		var evt = document.createEvent("HTMLEvents"); // "MouseEvents"
		evt.initEvent(type, true, false);
		element.dispatchEvent( evt );
	}
}

// Gebruik: 1. var evenementen = evenementenOphalen(this.formulierElement); 2. de functionaliteit (DOM-change) waardoor referentie aan element verloren is gegaan; 3. evenementenHerstellen(this.formulierElement, evenementen);
function evenementenOphalen(element) // functie om evenementen tijdelijk te kunnen opslaan om ze na een DOM reload weer te kunnen herstellen
{
	if(element.evenementen && element.evenementen.length)
	{
		return element.evenementen;
	}
	else
	{
		return null;
	}
}
function evenementenHerstellen(element, evenementenBijElement) //  events herstellen na DOM-change
{
	if(evenementenBijElement)
	{
		var evenement;
		var len = evenementenBijElement.length; // LET OP evenementenBijElement.length veranderd steeds door het toevoegen van evenementen!! lengte tevoren eenmaal bepalen
		for(var i=0; i < len; i++)
		{
			evenement = evenementenBijElement[i];
			if(evenement)
			{
				evenementVerwijderen(element, evenement[0], evenement[1]); // proberen
				evenementToevoegen(element, evenement[0], evenement[1]);
			}
		}
	}
}

function documentOpruimen()
{
	if(alleEvenementen && alleEvenementen.length)
	{
		var tijdelijkElement;
		for(var i=0; i < alleEvenementen.length; i++)
		{
			tijdelijkElement = alleEvenementen[i];
			if(tijdelijkElement && tijdelijkElement.length == 3)
			{
				evenementVerwijderen(tijdelijkElement[2], tijdelijkElement[0], tijdelijkElement[1]);
				tijdelijkElement[2]['on' + tijdelijkElement[0]] = null;
				tijdelijkElement[2] = null;
			}
		}
	}

	alleEvenementen = null;
	document.evenementen = null;

	document.onmousedown = null;
	document.onmouseup = null;

	window.onload = null;
	window.evenementen = null;
}
evenementToevoegen(window, "unload", function(){documentOpruimen()});
//////////////////////

function selectieManager() // hulpfunctie om vast te kunnen houden welk object is gefocussed
{

	function zetSelectie(obj)
	{
		this.huidigeSelectie = obj;
		return true;
	}

	function geefSelectie()
	{
		// return this.huidigeSelectie;
		if (typeof document.selection != "undefined" && document.selection != null && typeof window.opera == "undefined")
		{
			return document.selection;
		}
		else if (typeof window.getSelection != "undefined")
		{
			return window.getSelection();
		}
		return null;
	}

	function geefGeselecteerdeObject()
	{
		var selectie = this.geefSelectie();
		if(selectie)
		{
			// Safari
			if (typeof selectie.baseNode != "undefined")
			{
				return selectie.baseNode;
			}
			// Mozilla
			else if (typeof selectie.getRangeAt != "undefined") // && selectie.rangeCount > 0
			{
				return selectie.getRangeAt(0).startContainer;
			}
			// IE
			else
			{
				var textRange = document.selection.createRange();
				return textRange.parentElement();
			}
		}
		return null;
	}

	this.huidigeSelectie = false;
	this.zetSelectie = zetSelectie;
	this.geefSelectie = geefSelectie;
	this.geefGeselecteerdeObject = geefGeselecteerdeObject;
}
selectie = new selectieManager();

/*
Geef aan elk relevant formulier-element het attribuut vorigeWaarde='#uitdedatabaseopgehaaldewaarde#' mee.
Het script vergelijkt dat dan met de huidige value.

TO DO: ondersteuning voor alle soorten formulierelementen inbouwen.
*/
function wijzigingenOpgeslagen(formulier)
{
	var isIetsGewijzigd = false;

	if(formulier.elements && formulier.elements.length)
	for(var i=0; i<formulier.elements.length; i++)
	{
		element = formulier.elements[i];
		if(bestaatAttribuut(element, "vorigewaarde")) // hasAttribute (voor Firefox) nog inbouwen
		{
			if(element.value != geefAttribuutWaarde(element, "vorigewaarde"))
			{
				isIetsGewijzigd = true;
			}
		}
	}

	if( (isIetsGewijzigd && confirm("Wilt u uw wijzigingen ongedaan maken?")) || !isIetsGewijzigd)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function Trim(TRIM_VALUE)
{
	if(typeof TRIM_VALUE != "undefined")
	{
		TRIM_VALUE = TRIM_VALUE.toString();
		if(TRIM_VALUE.length < 1) return "";
		TRIM_VALUE = RTrim(TRIM_VALUE);
		TRIM_VALUE = LTrim(TRIM_VALUE);
		return TRIM_VALUE;
	}
	else
	{
		return "";
	}
} //End Function

function RTrim(VALUE){
	var w_space = String.fromCharCode(32);
	var v_length = VALUE.length;
	var strTemp = "";

	if(v_length < 0) return"";

	var iTemp = v_length -1;
	while(iTemp > -1)
	{
		if(VALUE.charAt(iTemp) != w_space)
		{
			strTemp = VALUE.substring(0,iTemp +1);
			break;
		}
		iTemp = iTemp-1;
	} //End While
	return strTemp;
} //End Function

function LTrim(VALUE)
{
	var w_space = String.fromCharCode(32);
	if(v_length < 1) return"";
	var v_length = VALUE.length;
	var strTemp = "";

	var iTemp = 0;
	while(iTemp < v_length)
	{
		if(VALUE.charAt(iTemp) != w_space)
		{
			strTemp = VALUE.substring(iTemp,v_length);
			break;
		}
		iTemp = iTemp + 1;
	} //End While
	return strTemp;
} //End Function


function removeSpaces(VALUE)
{
	w_space = String.fromCharCode(32);
	rExp = /w_space/gi;
	return VALUE.replace(rExp, "")
}

function replace(argvalue, x, y) {

  if ((x == y) || (parseInt(y.indexOf(x)) > -1)) {
    errmessage = "replace function error: \n";
    errmessage += "Second argument and third argument could be the same ";
    errmessage += "or third argument contains second argument.\n";
    errmessage += "This will create an infinite loop as it's replaced globally.";
    alert(errmessage);
    return false;
  }

  while (argvalue.indexOf(x) != -1) {
    var leading = argvalue.substring(0, argvalue.indexOf(x));
    var trailing = argvalue.substring(argvalue.indexOf(x) + x.length,
	argvalue.length);
    argvalue = leading + y + trailing;
  }

  return argvalue;

}


// OUTPUT transform
function XMLopmaken(xml)
{
	var xmlOut = xml;
	if(xmlOut && xmlOut.indexOf)
	{
		if (xmlOut.indexOf("&AMP;")) xmlOut = replace(xml, "&AMP;", "&");
		if (xmlOut.indexOf("&APOS;")) xmlOut = replace(xml, "&APOS;", "'");
		if (xmlOut.indexOf("&amp;")) xmlOut = replace(xml, "&amp;", "&");
		if (xmlOut.indexOf("&apos;")) xmlOut = replace(xml, "&apos;", "'");
	}
	if(!xmlOut) return "";
	return xmlOut;
}


var elementLijst = new Array(); // caching
function verbergFormulierElementen(aan) // voeg aan een select het attribuut nietVerbergen=true toe om dat veld over te slaan
{
	var i,velden;
	var visibility = (aan) ? 'visible' : 'hidden';

	if(!elementLijst.length)
	{
		velden = document.body.getElementsByTagName("select");

		for (i = 0; i < velden.length; i++)
		{
			if(
				( velden(i).type == "select-one" || velden(i).type == "select-multiple" )
				&&
				(
					!bestaatAttribuut(velden(i), "nietVerbergen")
					||
					(
						bestaatAttribuut(velden(i), "nietVerbergen")
						&&
						geefAttribuutWaarde(velden(i), "nietVerbergen") == false
					)

				)
			) elementLijst.push( velden(i) );

		} // for
	} // elementLijst.length

	if(elementLijst.length)
	{
		for (i = 0; i < elementLijst.length; i++)
		{
			elementLijst[i].style.visibility = visibility;
		}
	} // elementLijst.length

} // functie


// VOORLOPIG ALLEEN VOOR TEKSTLABEL.CFM
function beschrijving(aanUit,spanID,e) // e = event
{
	if(aanUit)
	{
		document.all[spanID].style.left=document.body.scrollLeft+event.clientX+10
		document.all[spanID].style.top=document.body.scrollTop+event.clientY+10
		document.all[spanID].style.display=''
		document.all[spanID].style.visibility='visible'
		verbergFormulierElementen()
	}
	else
	{

		document.all[spanID].style.display='none'
		document.all[spanID].style.visibility='hidden'
		verbergFormulierElementen(1)
	}
}


// 'TOOLTIP' functies
tijdelijkBeschrijvingObject = false; // nodig voor oude versie aanroep (1 beschrijving per keer, niet object-georienteerd) - backwards compatbile houden script
function toonBeschrijving(e, tekst, isVerplaatsing)
{
	var evenement = false;
	if(e) evenement = e;

	if(!tijdelijkBeschrijvingObject) tijdelijkBeschrijvingObject = new mouseOverBeschrijving();
	tijdelijkBeschrijvingObject.toonBeschrijving(evenement, tekst, isVerplaatsing);
}

function verbergBeschrijving(e)
{
	var evenement = false;
	if(e) evenement = e;

	if(!tijdelijkBeschrijvingObject) tijdelijkBeschrijvingObject = new mouseOverBeschrijving();
	tijdelijkBeschrijvingObject.verbergBeschrijving();
}


function mouseOverBeschrijving()
{
	var self = this;

	this.houderNaam = "beschrijvingLayer"; // ?? overbodig door addChild enzo?

	this.houder = false;
	this._init = function(){ self.init(); };
	this._verbergBeschrijving = function(){ self.verbergBeschrijving(); };
	this._toonBeschrijving = function(){ self.toonBeschrijving(); };
}

mouseOverBeschrijving.prototype =
{
	init:function()
	{
		var div = document.createElement("DIV");
		div.id = this.houderNaam;

		if(!stijlOpzoeken(".mouseOverBeschrijving", "position")) alert("mouseoverbeschrijving en eventuele rechtermuismenus zijn niet juist opgemaakt en/of gepositioneerd ivm ontbreken class .mouseOverBeschrijving")
		/*
		 * IETS DERGELIJKS ALS ONDERSTAAND MOET DUS ERGENS IN STYLE (HEAD OF .CSS) STAAN
		 .mouseOverBeschrijving {

			font-family: verdana, arial;
			color: ###buttoncolor#;
			font-size: 11px;

			border:outset 1px black;
			padding: 5px;

			position:absolute;
			z-index: 50;

			background: ##f5f5f5;
			height:15px;
			left: 1px;
			top: 1px;

			visibility:hidden;
			display: none;
			}
		*/

		div.className = "mouseOverBeschrijving";
		this.houder = div;
		document.body.appendChild(div);

		/* begin van alternatieve oplossing voor SELECTs die altijd OVER de DIV zichtbaar blijven: IFRAME kan wél over de selects heen. Maar er moet dan een src-document in, innerHTML etc. lijkt niet te werken
		var iFrame = document.createElement("iframe");
		iFrame.setAttribute("id", this.houderNaam);
		iFrame.className = "mouseOverBeschrijving";
		iFrame = document.body.appendChild(iFrame);
		iFrame.src = "test.htm";
		this.houder = iFrame;
		*/
	},

	verbergBeschrijving:function()
	{
		if(!this.houder) this.init();

		this.houder.style.display="none";
		this.houder.style.visibility="hidden";
		this.houder.style.left = 1;
		this.houder.style.top = 1;

		//document.body.removeChild(zelf.geefHouder());
		//this.houder = false;

		//verbergFormulierElementen(true);
	},

	nieuwObject:function()
	{
		this.y = 50;
		this.x = 50;
		this.clientY = 150;
		this.clientX = 150;
	},

	toonBeschrijving:function(e,tekst,isVerplaatsing)
	{
		if(!e) 					e = new this.nieuwObject();
		if(!isVerplaatsing) 	isVerplaatsing = 0;
		if(!this.houder) 		this.init();

		this.houder.style.left=document.body.scrollLeft+e.clientX+10;
		this.houder.style.top=document.body.scrollTop+e.clientY-10;
		if(isVerplaatsing == 0)
		{
			this.houder.innerHTML = unescape(tekst);
		}

		if ((e.x + this.houder.clientWidth) > (document.body.clientWidth + document.body.scrollLeft))
		{
			this.houder.style.left = e.x - this.houder.clientWidth-15;
		}
		else
		{
			this.houder.style.left=document.body.scrollLeft+e.clientX+10;
		}

		if ((e.y + this.houder.clientHeight) > (document.body.clientHeight + document.body.scrollTop))
		{
			this.houder.style.top = (document.body.clientHeight + document.body.scrollTop) - this.houder.clientHeight-15;
		}
		else
		{
			this.houder.style.top=document.body.scrollTop+e.clientY-10;
		}

		//houder.style.height = "400px";
		//houder.style.width = "400px";
		this.houder.style.display="inline";
		this.houder.style.visibility="visible";

		//verbergFormulierElementen(false);
	}
}
///////////////////beschrijving (bijv bij muis-over)



function debug_pop(object)
{
	var x,y;
	var berichtje = "";
	for(x in object)
	{
		try
		{

			if(typeof object[x] == "object")
			{
				berichtje += '<b>' + x.toString() + '=' + object[x] + "</b><br>";
				try
				{
					for(y in object[x])
					{
						berichtje += ' &nbsp;&nbsp;&nbsp; ' + y.toString() + '=' + object[x][y] + "<br>";
					}
				}
				catch(e)
				{
				}
			}
			else
			{
				berichtje += x.toString() + '=' + object[x] + "<br>";
			}
		}
		catch(e)
		{

		}
	}
	var nieuwVenster = window.open("", "", "width=790,height=590,menubar=0,resizable=1,scrollbars=1,status=1,titlebar=0,toolbar=0,left=5,top=5");
	nieuwVenster.document.write(berichtje);
	if (nieuwVenster.focus) {nieuwVenster.focus()}
} // pop

function debug_toonAlleEvenementen()
{
	var berichtje = "[init]<br>";

	if(alleEvenementen && alleEvenementen.length)
	{
		berichtje += "(alleEvenementen, " + typeof alleEvenementen + ", lengte " + alleEvenementen.length + ")<br><br>";

		var tijdelijkElement;
		for(var i=0; i < alleEvenementen.length; i++)
		{
			tijdelijkElement = alleEvenementen[i];
			if(tijdelijkElement && tijdelijkElement.length == 3)
			{
				berichtje += "<b>" + i + ".</b> (" + tijdelijkElement[0] + ") " + tijdelijkElement[2] + "." + tijdelijkElement[1] + "<br><br>";
			}
		}
	}

	var nieuwVenster = window.open("", "", "width=790,height=590,menubar=0,resizable=1,scrollbars=1,status=1,titlebar=0,toolbar=0,left=5,top=5");
	nieuwVenster.document.write(berichtje);
	if (nieuwVenster.focus) {nieuwVenster.focus()}
}

function isInteger(val)
{
	var newstring = parseInt(val).toString();
	if (val.length == newstring.length && newstring != "NaN")
	{
		return true;
	}
	else
	{
		return false;
	}
}
function isNumeric(val){return(parseFloat(val,10)==(val*1));}


function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function isInArray(array, value)
{
	for(var x in array)
	{
		if(array[x] == value)
		{
			return true;
		}
	}
	return false;
}


function isDefined(v)
{
	if(typeof v == "undefined")
	{
		return false;
	}
	else
	{
		return true;
	}
}

function isNull(v)
{
	if(typeof v == "null")
	{
		return true;
	}
	else
	{
		return false;
	}
}

function wisselZichtbaarheid(name, geforceerdeWisselingNaar) // name kan misleidend zijn, moet gewoon "id" die naam geven
{
	/* For IE/Firefox compatibileit, zowel name="" als id="" gebruiken!

	Moz/Firefox will report a length of 3. MSIE will report a length of zero. Huh?
	According to the HTML 4.01 spec, the only elements that support NAME attributes are BUTTON, TEXTAREA, APPLET, SELECT, FORM, FRAME, IFRAME, IMG, A, INPUT, OBJECT, MAP, PARAM and META. So to place a NAME inside a DIV is actually invalid HTML.
	Moz/Firefox doesn't have a problem with this and will happily return all three DIV elements. But MSIE treats it the invalid NAME attribute as an expando attribute and excludes those elements. From the MSDN documentation:

	MSDN:
	 	"Elements that support both the NAME and the ID attribute are included in the collection returned by the getElementsByName method, but not elements with a NAME expando."
	*/
	if(document.getElementsByName(name) && document.getElementsByName(name).length > 0)
	{
		var elementen = document.getElementsByName(name);
		for(var i=0; i < elementen.length; i++)
		{
			if( !isDefined(geforceerdeWisselingNaar) )
			{
				var toon = (elementen[i].style.display == "none" || elementen[i].style.visiblity == "hidden") ? true : false;
			}
			else
			{
				var toon = geforceerdeWisselingNaar;
			}

			if( toon )
			{
				elementen[i].style.display = "inline";
				elementen[i].style.visiblity = "visible";
			}
			else
			{
				elementen[i].style.display = "none";
				elementen[i].style.visiblity = "hidden";
			}
		}
	}
}


function venstergrootteAlsTabel(tabel)
{
	vensters_extra_breedte = 70;
	vensters_extra_hoogte = 80;

	if (document.all) // even kijken of we met IE te maken hebben en of de tabel bestaat
	{
		if(!tabel || tabel == '')
		{
			tabel = 'venstergrootteAlsTabel';
		}

		if (document.all[tabel])
		{
			tabel_object = document.all[tabel];
			if(tabel_object.length > 1)
			{
				tabel_object = tabel_object[0];
			}
			if(tabel_object.volledigScherm && tabel_object.volledigScherm == 1)
			{
				volledigSchermGebruiken = 1
			}
			else
			{
				volledigSchermGebruiken = 0
			}

			if (volledigSchermGebruiken || (tabel_object.offsetWidth > (screen.width - 35)))
			{
				breedte = screen.width - 35
			}
			else
			{
				breedte = tabel_object.offsetWidth
			}
			if (volledigSchermGebruiken || (tabel_object.offsetHeight > (screen.height - 95)))
			{
				hoogte = screen.height - 95
				//alert("hoogte A: " + hoogte + " incl Extra: " + (hoogte + vensters_extra_hoogte) )
			}
			else
			{
				hoogte = tabel_object.offsetHeight
				//alert("hoogte B: " + hoogte + " incl Extra: " + (hoogte + vensters_extra_hoogte) )
			}
			//if(tabel_object.offsetWidth < (breedte + vensters_extra_breedte))
			//{
				window.resizeTo((breedte + vensters_extra_breedte),(hoogte + vensters_extra_hoogte)) // vergroot dit venster (breedte x hoogte) naar: 210(standaardgrootte)+10(breedte v/d vensterranden) X [KalenderTabel-hoogte]+29(ruimte nodig voor microsoft-ongein zoals titelbalk)
			//}


			// <cfif browser IS "IE">
				if(volledigSchermGebruiken == 1)
				{
					window.moveTo(1,1)
				}
				else
				{
					if ((window.screenLeft + breedte) > screen.width)
					{
						window.moveTo((screen.width - breedte - vensters_extra_breedte - 5),window.screenTop)
					}
				}
			/* <cfelse>
				if ((window.screenX + breedte) > screen.width)
				{
					window.moveTo((screen.width - breedte - vensters_extra_breedte - 5),window.screenY)
				}
			 </cfif> */

		}
	}
}



function dbTijd(tijd)
{
	var t = tijd.split(":");
	t[0].toString();
	t[1].toString();
	if(t[0].length < 2)
	{
		t[0] = 0 + "" + t[0];
	}
	if(t[1].length < 2)
	{
		t[1] = 0 + "" + t[1];
	}
	return t[0] + "" + t[1];
}


function isNumeric(sText)
{
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;


   for (i = 0; i < sText.length && IsNumber == true; i++)
      {
      Char = sText.charAt(i);
      if (ValidChars.indexOf(Char) == -1)
         {
         IsNumber = false;
         }
      }
   return IsNumber;

   }



function selecterenVoorVersturen(veld) // het veld waarvan alle opties geselecteerd moeten worden
{
	if(veld && veld.options)
	{
		for (i = 0; i < veld.options.length; i++) // zolang er opties in het bestemmingsveld staan, alle opties selecteren
		{
			veld.options[i].selected = true;
		}
	}
}



// functie die het drukken op bewerk en bekijk knopjes etc makkelijker maakt
function ga(fuseAction, idValue, formulier)
{
	if(!idValue) idValue = 0;
	if(!formulier)
	{
		if(!document.formulier)
		{
			window.location.href = globals.gaNaar + fuseAction + "&id=" + idValue;
		}
		else
		{
			formulier = document.formulier;
		}
	}
	formulier[globals.fuseActionVariable].value = fuseAction;
	if(formulier.id && formulier.id.value && idValue != 0) formulier.id.value = idValue;
	formulier.submit();
}

function afdrukken(formaat, paginaInstelling, formulier)
{
	if(!formulier)
	{
		if(!document.afdrukFormulier)
		{
			// kan niet printen
			alert("Het is niet gelukt de pagina weer te geven in het door u verzochte formaat.")
			return false;
		}
		else
		{
			formulier = document.afdrukFormulier;
		}
	}

	formulier.formaat.value = formaat;
	if(paginaInstelling) formulier.paginaInstelling.value = paginaInstelling;
	formulier.submit();
}


function stijlOpzoeken(classNaam,eigenschap,mediaType)
{
	if(!mediaType) mediaType = "";

	for(i=0; i<document.styleSheets.length; i++)
	{
		stylesheet = document.styleSheets[i];

		if(stylesheet.media == mediaType)
		{
			for(j=0; j<stylesheet.rules.length; j++)
			{
				rule = stylesheet.rules[j];
				if(rule.selectorText == classNaam)
				{
					return rule.style[eigenschap];
					break;
				}
			} // stylesheet.rules.length
		} // if media screen

	} // styleSheets.length
} // functie


function lijstVullen(lijst, s_resultaat, waardeKolom, weergaveKolom, extraKolommenZettenAlsAttributen)
{
	var nieuweOptie;
	var nRows = s_resultaat.getRowCount();
	if(!waardeKolom) waardeKolom = "waarde";
	if(!weergaveKolom) weergaveKolom = "weergave";

	if(isDefined(extraKolommenZettenAlsAttributen))
	{
		extraKolommenZettenAlsAttributen = extraKolommenZettenAlsAttributen.split(","); // bijv.: className(waarde in query:dropdownTitle)
	}
	else
	{
		extraKolommenZettenAlsAttributen = new Array()
	}

	for (var row=0; row < nRows; ++row)
	{
		nieuweOptie = new Option(s_resultaat.getField(row, weergaveKolom), s_resultaat.getField(row, waardeKolom), false, false);

		if(extraKolommenZettenAlsAttributen.length)
		{
			for(var i=0; i < extraKolommenZettenAlsAttributen.length; i++)
			{
				nieuweOptie.setAttribute(extraKolommenZettenAlsAttributen[i], s_resultaat.getField(row, extraKolommenZettenAlsAttributen[i]));
			}
		}

		lijst.options[lijst.options.length] = nieuweOptie;
	}

	//nieuweOptie = new Option("", 0, true, true);
	//lijst.options[0] = nieuweOptie;
}

function lijstItemTussenVoegen(lijst, item, positie) // [positie=arrayIndex dus begint bij NUL!]  tis alleen mogelijk opties aan het EIND in te voegen, en dat willen we niet altijd. options[] is wel een array maar niet als zodanig bruikbaar dus eerst array maken
{
	var opties = new Array();
	var i;

	for (i=0; i < lijst.options.length; i++)
	{
		opties.push( lijst.options[i] );
	}

	opties.splice(positie, 0, item);

	for (i=0; i < opties.length; i++)
	{
		lijst.options[i] = opties[i];
	}
}

function lijstLegen(list, standaardOptie)
{
	// huidige veldopties wissen
	if(list.options && list.options.length)
	{
		for (var i=list.options.length; i >= 0;i--)
		{
			list.options[i] = null;
		}
	}

	if(standaardOptie)
	{
		list.options[0] = standaardOptie;
	}

	/* , standaardOptie = WERKT NIET, kan maar één keer optie toevoegen, moet ELKE keer new Option gemaakt worden maar niet mogelijk om attributes op handige wijze over te nemen
	if(standaardOptie)
	{
		var nieuweOptie = new Option("", 0, true, true);
		debug_pop(standaardOptie)
		for(var attribuut in standaardOptie)
		{
			try
			{
				nieuweOptie[attribuut] = standaardOptie[attribuut];
			}
			catch(e)
			{
			}
		}
		list.options[0] = nieuweOptie;
	}
	*/
}

function lijstNaarArray(list)
{
	var newArray = new Array();
	var newOption;
	// huidige veldopties wissen
	if(list.options && list.options.length)
	{
		for (var i=0; i < list.options.length; i++)
		{
			newOption = new Array();
			newOption.push(list.options[i].value);
			newOption.push(list.options[i].text);
			newArray.push(newOption);
		}
	}

	return newArray;
}


function daysInMonth(jaar, maand) // engelse naam ivm ColdFusion bekendheid. Maand 0 = january, 1 = februari enz. Gewoon doorgeven, functie verminderd arg. met 1.
{
	maand--;
	var dagen = 32 - new Date(jaar, maand, 32).getDate();
	return dagen;
}


function geefGekozenWaarde(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}

function zetGekozenWaarde(radioObj, newValue) {
	if(!radioObj)
		return;
	var radioLength = radioObj.length;
	if(radioLength == undefined) {
		radioObj.checked = (radioObj.value == newValue.toString());
		return;
	}
	for(var i = 0; i < radioLength; i++) {
		radioObj[i].checked = false;
		if(radioObj[i].value == newValue.toString()) {
			radioObj[i].checked = true;
		}
	}
}

function geefAttribuutWaarde(el, attribuut)
{
	if(typeof el.hasAttribute != "undefined" && el.hasAttribute(attribuut) ) // Mozilla
	{
		return el.getAttribute(attribuut);
	}
	else if(typeof el.hasAttribute != "undefined" && typeof el[attribuut] != "undefined") // Mozilla, standaard attributen komen niet voor bij getAttribute ...
	{
		return el[attribuut];
	}
	else if(typeof el.hasAttribute == "undefined" && typeof el[attribuut] != "undefined") // IE
	{
		return el[attribuut];
	}
	else
	{
		return false;
	}
}

function bestaatAttribuut(el, attribuut)
{
	if(typeof el.hasAttribute != "undefined" && el.hasAttribute(attribuut) ) // Mozilla
	{
		return true;
	}
	else if(typeof el.hasAttribute != "undefined" && typeof el[attribuut] != "undefined") // Mozilla, standaard attributen komen niet voor bij getAttribute ...
	{
		return true;
	}
	else if(typeof el.hasAttribute == "undefined" && typeof el[attribuut] != "undefined") // IE
	{
		return true;
	}
	else
	{
		return false;
	}
}

// zie 'http://www.quirksmode.org/blog/archives/2005/09/addevent_recodi.html' voor de oorsprong van deze functie
alleEvenementen = new Array(); // Voor IE memory leak: alle evenementen opslaan in array zodat ze bij Unload opgeruimd kunnen worden
function evenementToevoegen(element, type, functie)
{
	try
	{
		element.addEventListener(type, functie, false);
	}
	catch(e) // IE
	{
		try
		{
			evenementVerwijderen(element, type, functie); // proberen
			element.attachEvent('on' + type, functie);
		}
		catch(e)
		{
			try
			{
				alert("aan element '" + element.toString() + "' evenement van type '" + type + "' toevoegen mislukt! Functie: " + functie);
			}
			catch(e)
			{
				try
				{
					alert("'" + type + "' evenementToevoegen niet gelukt! Functie: " + functie);
				}
				catch(e)
				{
					alert("'" + type + "' evenementToevoegen niet gelukt!");
				}
			}
			debug_pop( element )
		}
	}

	// na een DOM reload van een veld zijn de evenementen vaak zoek. Hiermee wordt herstellen per veld én het opschonen bij window.unload mogelijk gemaakt
	if(!element.evenementen) element.evenementen = new Array();
	var evenement = new Array();
	evenement.push(type);
	evenement.push(functie);
	element.evenementen.push(evenement);

	evenement = new Array(); // moet herdeclareren na push :(
	evenement.push(type);
	evenement.push(functie);
	evenement.push(element);
	alleEvenementen.unshift(evenement);
}

function evenementVerwijderen(element, type, functie)
{
	try
	{
		element.removeEventListener(type, functie, false);
	}
	catch(e) // IE
	{
		if(element)
		{
			element.detachEvent('on' + type, functie);
		}
	}

	if(element && element.evenementen && element.evenementen.length)
	{
		var tijdelijkElement;
		for(var i=0; i < element.evenementen.length; i++)
		{
			tijdelijkElement = element.evenementen[i];
			if(tijdelijkElement && tijdelijkElement.length && tijdelijkElement[0] == type)
			{
				if(tijdelijkElement[1] == functie) // alleen verwijderen als het dezelfde functie betreft!
				{
					element.evenementen[i] = null;
				}
			}
		}
	}
}

function evenementUitvoeren(element, type)
{
	try // IE
	{
		element.fireEvent('on' + type);
	}
	catch(e) // MOZILLA kan GEEN onchange (alleen muisachtige) events direct afhandelen, moet via omweg: (direct "element.dispatchEvent(type);" gebruiken werkt niet!!)
	{
		var evt = document.createEvent("HTMLEvents"); // "MouseEvents"
		evt.initEvent(type, true, false);
		element.dispatchEvent( evt );
	}
}

// Gebruik: 1. var evenementen = evenementenOphalen(this.formulierElement); 2. de functionaliteit (DOM-change) waardoor referentie aan element verloren is gegaan; 3. evenementenHerstellen(this.formulierElement, evenementen);
function evenementenOphalen(element) // functie om evenementen tijdelijk te kunnen opslaan om ze na een DOM reload weer te kunnen herstellen
{
	if(element.evenementen && element.evenementen.length)
	{
		return element.evenementen;
	}
	else
	{
		return null;
	}
}
function evenementenHerstellen(element, evenementenBijElement) //  events herstellen na DOM-change
{
	if(evenementenBijElement)
	{
		var evenement;
		var len = evenementenBijElement.length; // LET OP evenementenBijElement.length veranderd steeds door het toevoegen van evenementen!! lengte tevoren eenmaal bepalen
		for(var i=0; i < len; i++)
		{
			evenement = evenementenBijElement[i];
			if(evenement)
			{
				evenementVerwijderen(element, evenement[0], evenement[1]); // proberen
				evenementToevoegen(element, evenement[0], evenement[1]);
			}
		}
	}
}

function documentOpruimen()
{
	if(alleEvenementen && alleEvenementen.length)
	{
		var tijdelijkElement;
		for(var i=0; i < alleEvenementen.length; i++)
		{
			tijdelijkElement = alleEvenementen[i];
			if(tijdelijkElement && tijdelijkElement.length == 3)
			{
				evenementVerwijderen(tijdelijkElement[2], tijdelijkElement[0], tijdelijkElement[1]);
				tijdelijkElement[2]['on' + tijdelijkElement[0]] = null;
				tijdelijkElement[2] = null;
			}
		}
	}

	alleEvenementen = null;
	document.evenementen = null;

	document.onmousedown = null;
	document.onmouseup = null;

	window.onload = null;
	window.evenementen = null;
}
evenementToevoegen(window, "unload", function(){documentOpruimen()});
//////////////////////

function selectieManager() // hulpfunctie om vast te kunnen houden welk object is gefocussed
{

	function zetSelectie(obj)
	{
		this.huidigeSelectie = obj;
		return true;
	}

	function geefSelectie()
	{
		// return this.huidigeSelectie;
		if (typeof document.selection != "undefined" && document.selection != null && typeof window.opera == "undefined")
		{
			return document.selection;
		}
		else if (typeof window.getSelection != "undefined")
		{
			return window.getSelection();
		}
		return null;
	}

	function geefGeselecteerdeObject()
	{
		var selectie = this.geefSelectie();
		if(selectie)
		{
			// Safari
			if (typeof selectie.baseNode != "undefined")
			{
				return selectie.baseNode;
			}
			// Mozilla
			else if (typeof selectie.getRangeAt != "undefined") // && selectie.rangeCount > 0
			{
				return selectie.getRangeAt(0).startContainer;
			}
			// IE
			else
			{
				var textRange = document.selection.createRange();
				return textRange.parentElement();
			}
		}
		return null;
	}

	this.huidigeSelectie = false;
	this.zetSelectie = zetSelectie;
	this.geefSelectie = geefSelectie;
	this.geefGeselecteerdeObject = geefGeselecteerdeObject;
}
selectie = new selectieManager();

/*
Geef aan elk relevant formulier-element het attribuut vorigeWaarde='#uitdedatabaseopgehaaldewaarde#' mee.
Het script vergelijkt dat dan met de huidige value.

TO DO: ondersteuning voor alle soorten formulierelementen inbouwen.
*/
function wijzigingenOpgeslagen(formulier)
{
	var isIetsGewijzigd = false;

	if(formulier.elements && formulier.elements.length)
	for(var i=0; i<formulier.elements.length; i++)
	{
		element = formulier.elements[i];
		if(bestaatAttribuut(element, "vorigewaarde")) // hasAttribute (voor Firefox) nog inbouwen
		{
			if(element.value != geefAttribuutWaarde(element, "vorigewaarde"))
			{
				isIetsGewijzigd = true;
			}
		}
	}

	if( (isIetsGewijzigd && confirm("Wilt u uw wijzigingen ongedaan maken?")) || !isIetsGewijzigd)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function Trim(TRIM_VALUE)
{
	if(typeof TRIM_VALUE != "undefined")
	{
		TRIM_VALUE = TRIM_VALUE.toString();
		if(TRIM_VALUE.length < 1) return "";
		TRIM_VALUE = RTrim(TRIM_VALUE);
		TRIM_VALUE = LTrim(TRIM_VALUE);
		return TRIM_VALUE;
	}
	else
	{
		return "";
	}
} //End Function

function RTrim(VALUE){
	var w_space = String.fromCharCode(32);
	var v_length = VALUE.length;
	var strTemp = "";

	if(v_length < 0) return"";

	var iTemp = v_length -1;
	while(iTemp > -1)
	{
		if(VALUE.charAt(iTemp) != w_space)
		{
			strTemp = VALUE.substring(0,iTemp +1);
			break;
		}
		iTemp = iTemp-1;
	} //End While
	return strTemp;
} //End Function

function LTrim(VALUE)
{
	var w_space = String.fromCharCode(32);
	if(v_length < 1) return"";
	var v_length = VALUE.length;
	var strTemp = "";

	var iTemp = 0;
	while(iTemp < v_length)
	{
		if(VALUE.charAt(iTemp) != w_space)
		{
			strTemp = VALUE.substring(iTemp,v_length);
			break;
		}
		iTemp = iTemp + 1;
	} //End While
	return strTemp;
} //End Function


function removeSpaces(VALUE)
{
	w_space = String.fromCharCode(32);
	rExp = /w_space/gi;
	return VALUE.replace(rExp, "")
}

function replace(argvalue, x, y) {

  if ((x == y) || (parseInt(y.indexOf(x)) > -1)) {
    errmessage = "replace function error: \n";
    errmessage += "Second argument and third argument could be the same ";
    errmessage += "or third argument contains second argument.\n";
    errmessage += "This will create an infinite loop as it's replaced globally.";
    alert(errmessage);
    return false;
  }

  while (argvalue.indexOf(x) != -1) {
    var leading = argvalue.substring(0, argvalue.indexOf(x));
    var trailing = argvalue.substring(argvalue.indexOf(x) + x.length,
	argvalue.length);
    argvalue = leading + y + trailing;
  }

  return argvalue;

}


// OUTPUT transform
function XMLopmaken(xml)
{
	var xmlOut = xml;
	if(xmlOut && xmlOut.indexOf)
	{
		if (xmlOut.indexOf("&AMP;")) xmlOut = replace(xml, "&AMP;", "&");
		if (xmlOut.indexOf("&APOS;")) xmlOut = replace(xml, "&APOS;", "'");
		if (xmlOut.indexOf("&amp;")) xmlOut = replace(xml, "&amp;", "&");
		if (xmlOut.indexOf("&apos;")) xmlOut = replace(xml, "&apos;", "'");
	}
	if(!xmlOut) return "";
	return xmlOut;
}


var elementLijst = new Array(); // caching
function verbergFormulierElementen(aan) // voeg aan een select het attribuut nietVerbergen=true toe om dat veld over te slaan
{
	var i,velden;
	var visibility = (aan) ? 'visible' : 'hidden';

	if(!elementLijst.length)
	{
		velden = document.body.getElementsByTagName("select");

		for (i = 0; i < velden.length; i++)
		{
			if(
				( velden(i).type == "select-one" || velden(i).type == "select-multiple" )
				&&
				(
					!bestaatAttribuut(velden(i), "nietVerbergen")
					||
					(
						bestaatAttribuut(velden(i), "nietVerbergen")
						&&
						geefAttribuutWaarde(velden(i), "nietVerbergen") == false
					)

				)
			) elementLijst.push( velden(i) );

		} // for
	} // elementLijst.length

	if(elementLijst.length)
	{
		for (i = 0; i < elementLijst.length; i++)
		{
			elementLijst[i].style.visibility = visibility;
		}
	} // elementLijst.length

} // functie


// VOORLOPIG ALLEEN VOOR TEKSTLABEL.CFM
function beschrijving(aanUit,spanID,e) // e = event
{
	if(aanUit)
	{
		document.all[spanID].style.left=document.body.scrollLeft+event.clientX+10
		document.all[spanID].style.top=document.body.scrollTop+event.clientY+10
		document.all[spanID].style.display=''
		document.all[spanID].style.visibility='visible'
		verbergFormulierElementen()
	}
	else
	{

		document.all[spanID].style.display='none'
		document.all[spanID].style.visibility='hidden'
		verbergFormulierElementen(1)
	}
}


// 'TOOLTIP' functies
tijdelijkBeschrijvingObject = false; // nodig voor oude versie aanroep (1 beschrijving per keer, niet object-georienteerd) - backwards compatbile houden script
function toonBeschrijving(e, tekst, isVerplaatsing)
{
	var evenement = false;
	if(e) evenement = e;

	if(!tijdelijkBeschrijvingObject) tijdelijkBeschrijvingObject = new mouseOverBeschrijving();
	tijdelijkBeschrijvingObject.toonBeschrijving(evenement, tekst, isVerplaatsing);
}

function verbergBeschrijving(e)
{
	var evenement = false;
	if(e) evenement = e;

	if(!tijdelijkBeschrijvingObject) tijdelijkBeschrijvingObject = new mouseOverBeschrijving();
	tijdelijkBeschrijvingObject.verbergBeschrijving();
}


function mouseOverBeschrijving()
{
	var self = this;

	this.houderNaam = "beschrijvingLayer"; // ?? overbodig door addChild enzo?

	this.houder = false;
	this._init = function(){ self.init(); };
	this._verbergBeschrijving = function(){ self.verbergBeschrijving(); };
	this._toonBeschrijving = function(){ self.toonBeschrijving(); };
}

mouseOverBeschrijving.prototype =
{
	init:function()
	{
		var div = document.createElement("DIV");
		div.id = this.houderNaam;

		if(!stijlOpzoeken(".mouseOverBeschrijving", "position")) alert("mouseoverbeschrijving en eventuele rechtermuismenus zijn niet juist opgemaakt en/of gepositioneerd ivm ontbreken class .mouseOverBeschrijving")
		/*
		 * IETS DERGELIJKS ALS ONDERSTAAND MOET DUS ERGENS IN STYLE (HEAD OF .CSS) STAAN
		 .mouseOverBeschrijving {

			font-family: verdana, arial;
			color: ###buttoncolor#;
			font-size: 11px;

			border:outset 1px black;
			padding: 5px;

			position:absolute;
			z-index: 50;

			background: ##f5f5f5;
			height:15px;
			left: 1px;
			top: 1px;

			visibility:hidden;
			display: none;
			}
		*/

		div.className = "mouseOverBeschrijving";
		this.houder = div;
		document.body.appendChild(div);

		/* begin van alternatieve oplossing voor SELECTs die altijd OVER de DIV zichtbaar blijven: IFRAME kan wél over de selects heen. Maar er moet dan een src-document in, innerHTML etc. lijkt niet te werken
		var iFrame = document.createElement("iframe");
		iFrame.setAttribute("id", this.houderNaam);
		iFrame.className = "mouseOverBeschrijving";
		iFrame = document.body.appendChild(iFrame);
		iFrame.src = "test.htm";
		this.houder = iFrame;
		*/
	},

	verbergBeschrijving:function()
	{
		if(!this.houder) this.init();

		this.houder.style.display="none";
		this.houder.style.visibility="hidden";
		this.houder.style.left = 1;
		this.houder.style.top = 1;

		//document.body.removeChild(zelf.geefHouder());
		//this.houder = false;

		verbergFormulierElementen(true);
	},

	nieuwObject:function()
	{
		this.y = 50;
		this.x = 50;
		this.clientY = 150;
		this.clientX = 150;
	},

	toonBeschrijving:function(e,tekst,isVerplaatsing)
	{
		if(!e) 					e = new this.nieuwObject();
		if(!isVerplaatsing) 	isVerplaatsing = 0;
		if(!this.houder) 		this.init();

		this.houder.style.left=document.body.scrollLeft+e.clientX+10;
		this.houder.style.top=document.body.scrollTop+e.clientY-10;
		if(isVerplaatsing == 0)
		{
			this.houder.innerHTML = unescape(tekst);
		}

		if ((e.x + this.houder.clientWidth) > (document.body.clientWidth + document.body.scrollLeft))
		{
			this.houder.style.left = e.x - this.houder.clientWidth-15;
		}
		else
		{
			this.houder.style.left=document.body.scrollLeft+e.clientX+10;
		}

		if ((e.y + this.houder.clientHeight) > (document.body.clientHeight + document.body.scrollTop))
		{
			this.houder.style.top = (document.body.clientHeight + document.body.scrollTop) - this.houder.clientHeight-15;
		}
		else
		{
			this.houder.style.top=document.body.scrollTop+e.clientY-10;
		}

		//houder.style.height = "400px";
		//houder.style.width = "400px";
		this.houder.style.display="inline";
		this.houder.style.visibility="visible";

		verbergFormulierElementen(false);
	}
}
///////////////////beschrijving (bijv bij muis-over)



function debug_pop(object)
{
	var x,y;
	var berichtje = "";
	for(x in object)
	{
		try
		{

			if(typeof object[x] == "object")
			{
				berichtje += '<b>' + x.toString() + '=' + object[x] + "</b><br>";
				try
				{
					for(y in object[x])
					{
						berichtje += ' &nbsp;&nbsp;&nbsp; ' + y.toString() + '=' + object[x][y] + "<br>";
					}
				}
				catch(e)
				{
				}
			}
			else
			{
				berichtje += x.toString() + '=' + object[x] + "<br>";
			}
		}
		catch(e)
		{

		}
	}
	var nieuwVenster = window.open("", "", "width=790,height=590,menubar=0,resizable=1,scrollbars=1,status=1,titlebar=0,toolbar=0,left=5,top=5");
	nieuwVenster.document.write(berichtje);
	if (nieuwVenster.focus) {nieuwVenster.focus()}
} // pop

function debug_toonAlleEvenementen()
{
	var berichtje = "[init]<br>";

	if(alleEvenementen && alleEvenementen.length)
	{
		berichtje += "(alleEvenementen, " + typeof alleEvenementen + ", lengte " + alleEvenementen.length + ")<br><br>";

		var tijdelijkElement;
		for(var i=0; i < alleEvenementen.length; i++)
		{
			tijdelijkElement = alleEvenementen[i];
			if(tijdelijkElement && tijdelijkElement.length == 3)
			{
				berichtje += "<b>" + i + ".</b> (" + tijdelijkElement[0] + ") " + tijdelijkElement[2] + "." + tijdelijkElement[1] + "<br><br>";
			}
		}
	}

	var nieuwVenster = window.open("", "", "width=790,height=590,menubar=0,resizable=1,scrollbars=1,status=1,titlebar=0,toolbar=0,left=5,top=5");
	nieuwVenster.document.write(berichtje);
	if (nieuwVenster.focus) {nieuwVenster.focus()}
}

function isInteger(val)
{
	var newstring = parseInt(val).toString();
	if (val.length == newstring.length && newstring != "NaN")
	{
		return true;
	}
	else
	{
		return false;
	}
}
function isNumeric(val){return(parseFloat(val,10)==(val*1));}


function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function isInArray(array, value)
{
	for(var x in array)
	{
		if(array[x] == value)
		{
			return true;
		}
	}
	return false;
}


function isDefined(v)
{
	if(typeof v == "undefined")
	{
		return false;
	}
	else
	{
		return true;
	}
}

function isNull(v)
{
	if(typeof v == "null")
	{
		return true;
	}
	else
	{
		return false;
	}
}

function wisselZichtbaarheid(name, geforceerdeWisselingNaar) // name kan misleidend zijn, moet gewoon "id" die naam geven
{
	/* For IE/Firefox compatibileit, zowel name="" als id="" gebruiken!

	Moz/Firefox will report a length of 3. MSIE will report a length of zero. Huh?
	According to the HTML 4.01 spec, the only elements that support NAME attributes are BUTTON, TEXTAREA, APPLET, SELECT, FORM, FRAME, IFRAME, IMG, A, INPUT, OBJECT, MAP, PARAM and META. So to place a NAME inside a DIV is actually invalid HTML.
	Moz/Firefox doesn't have a problem with this and will happily return all three DIV elements. But MSIE treats it the invalid NAME attribute as an expando attribute and excludes those elements. From the MSDN documentation:

	MSDN:
	 	"Elements that support both the NAME and the ID attribute are included in the collection returned by the getElementsByName method, but not elements with a NAME expando."
	*/
	if(document.getElementsByName(name) && document.getElementsByName(name).length > 0)
	{
		var elementen = document.getElementsByName(name);
		for(var i=0; i < elementen.length; i++)
		{
			if( !isDefined(geforceerdeWisselingNaar) )
			{
				var toon = (elementen[i].style.display == "none" || elementen[i].style.visiblity == "hidden") ? true : false;
			}
			else
			{
				var toon = geforceerdeWisselingNaar;
			}

			if( toon )
			{
				elementen[i].style.display = "inline";
				elementen[i].style.visiblity = "visible";
			}
			else
			{
				elementen[i].style.display = "none";
				elementen[i].style.visiblity = "hidden";
			}
		}
	}
}


function venstergrootteAlsTabel(tabel)
{
	vensters_extra_breedte = 70;
	vensters_extra_hoogte = 80;

	if (document.all) // even kijken of we met IE te maken hebben en of de tabel bestaat
	{
		if(!tabel || tabel == '')
		{
			tabel = 'venstergrootteAlsTabel';
		}

		if (document.all[tabel])
		{
			tabel_object = document.all[tabel];
			if(tabel_object.length > 1)
			{
				tabel_object = tabel_object[0];
			}
			if(tabel_object.volledigScherm && tabel_object.volledigScherm == 1)
			{
				volledigSchermGebruiken = 1
			}
			else
			{
				volledigSchermGebruiken = 0
			}

			if (volledigSchermGebruiken || (tabel_object.offsetWidth > (screen.width - 35)))
			{
				breedte = screen.width - 35
			}
			else
			{
				breedte = tabel_object.offsetWidth
			}
			if (volledigSchermGebruiken || (tabel_object.offsetHeight > (screen.height - 95)))
			{
				hoogte = screen.height - 95
				//alert("hoogte A: " + hoogte + " incl Extra: " + (hoogte + vensters_extra_hoogte) )
			}
			else
			{
				hoogte = tabel_object.offsetHeight
				//alert("hoogte B: " + hoogte + " incl Extra: " + (hoogte + vensters_extra_hoogte) )
			}
			//if(tabel_object.offsetWidth < (breedte + vensters_extra_breedte))
			//{
				window.resizeTo((breedte + vensters_extra_breedte),(hoogte + vensters_extra_hoogte)) // vergroot dit venster (breedte x hoogte) naar: 210(standaardgrootte)+10(breedte v/d vensterranden) X [KalenderTabel-hoogte]+29(ruimte nodig voor microsoft-ongein zoals titelbalk)
			//}


			// <cfif browser IS "IE">
				if(volledigSchermGebruiken == 1)
				{
					window.moveTo(1,1)
				}
				else
				{
					if ((window.screenLeft + breedte) > screen.width)
					{
						window.moveTo((screen.width - breedte - vensters_extra_breedte - 5),window.screenTop)
					}
				}
			/* <cfelse>
				if ((window.screenX + breedte) > screen.width)
				{
					window.moveTo((screen.width - breedte - vensters_extra_breedte - 5),window.screenY)
				}
			 </cfif> */

		}
	}
}



function dbTijd(tijd)
{
	var t = tijd.split(":");
	t[0].toString();
	t[1].toString();
	if(t[0].length < 2)
	{
		t[0] = 0 + "" + t[0];
	}
	if(t[1].length < 2)
	{
		t[1] = 0 + "" + t[1];
	}
	return t[0] + "" + t[1];
}


function isNumeric(sText)
{
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;


   for (i = 0; i < sText.length && IsNumber == true; i++)
      {
      Char = sText.charAt(i);
      if (ValidChars.indexOf(Char) == -1)
         {
         IsNumber = false;
         }
      }
   return IsNumber;

   }



function selecterenVoorVersturen(veld) // het veld waarvan alle opties geselecteerd moeten worden
{
	if(veld && veld.options)
	{
		for (i = 0; i < veld.options.length; i++) // zolang er opties in het bestemmingsveld staan, alle opties selecteren
		{
			veld.options[i].selected = true;
		}
	}
}



// functie die het drukken op bewerk en bekijk knopjes etc makkelijker maakt
function ga(fuseAction, idValue, formulier)
{
	if(!idValue) idValue = 0;
	if(!formulier)
	{
		if(!document.formulier)
		{
			window.location.href = globals.gaNaar + fuseAction + "&id=" + idValue;
		}
		else
		{
			formulier = document.formulier;
		}
	}
	formulier[globals.fuseActionVariable].value = fuseAction;
	if(formulier.id && formulier.id.value && idValue != 0) formulier.id.value = idValue;
	formulier.submit();
}

function afdrukken(formaat, paginaInstelling, formulier)
{
	if(!formulier)
	{
		if(!document.afdrukFormulier)
		{
			// kan niet printen
			alert("Het is niet gelukt de pagina weer te geven in het door u verzochte formaat.")
			return false;
		}
		else
		{
			formulier = document.afdrukFormulier;
		}
	}

	formulier.formaat.value = formaat;
	if(paginaInstelling) formulier.paginaInstelling.value = paginaInstelling;
	formulier.submit();
}


function stijlOpzoeken(classNaam,eigenschap,mediaType)
{
	if(!mediaType) mediaType = "";

	for(i=0; i<document.styleSheets.length; i++)
	{
		stylesheet = document.styleSheets[i];

		if(stylesheet.media == mediaType)
		{
			for(j=0; j<stylesheet.rules.length; j++)
			{
				rule = stylesheet.rules[j];
				if(rule.selectorText == classNaam)
				{
					return rule.style[eigenschap];
					break;
				}
			} // stylesheet.rules.length
		} // if media screen

	} // styleSheets.length
} // functie


function lijstVullen(lijst, s_resultaat, waardeKolom, weergaveKolom, extraKolommenZettenAlsAttributen)
{
	var nieuweOptie;
	var nRows = s_resultaat.getRowCount();
	if(!waardeKolom) waardeKolom = "waarde";
	if(!weergaveKolom) weergaveKolom = "weergave";

	if(isDefined(extraKolommenZettenAlsAttributen))
	{
		extraKolommenZettenAlsAttributen = extraKolommenZettenAlsAttributen.split(","); // bijv.: className(waarde in query:dropdownTitle)
	}
	else
	{
		extraKolommenZettenAlsAttributen = new Array()
	}

	for (var row=0; row < nRows; ++row)
	{
		nieuweOptie = new Option(s_resultaat.getField(row, weergaveKolom), s_resultaat.getField(row, waardeKolom), false, false);

		if(extraKolommenZettenAlsAttributen.length)
		{
			for(var i=0; i < extraKolommenZettenAlsAttributen.length; i++)
			{
				nieuweOptie.setAttribute(extraKolommenZettenAlsAttributen[i], s_resultaat.getField(row, extraKolommenZettenAlsAttributen[i]));
			}
		}

		lijst.options[lijst.options.length] = nieuweOptie;
	}

	//nieuweOptie = new Option("", 0, true, true);
	//lijst.options[0] = nieuweOptie;
}

function lijstItemTussenVoegen(lijst, item, positie) // [positie=arrayIndex dus begint bij NUL!]  tis alleen mogelijk opties aan het EIND in te voegen, en dat willen we niet altijd. options[] is wel een array maar niet als zodanig bruikbaar dus eerst array maken
{
	var opties = new Array();
	var i;

	for (i=0; i < lijst.options.length; i++)
	{
		opties.push( lijst.options[i] );
	}

	opties.splice(positie, 0, item);

	for (i=0; i < opties.length; i++)
	{
		lijst.options[i] = opties[i];
	}
}

function lijstLegen(list, standaardOptie)
{
	// huidige veldopties wissen
	if(list.options && list.options.length)
	{
		for (var i=list.options.length; i >= 0;i--)
		{
			list.options[i] = null;
		}
	}

	if(standaardOptie)
	{
		list.options[0] = standaardOptie;
	}

	/* , standaardOptie = WERKT NIET, kan maar één keer optie toevoegen, moet ELKE keer new Option gemaakt worden maar niet mogelijk om attributes op handige wijze over te nemen
	if(standaardOptie)
	{
		var nieuweOptie = new Option("", 0, true, true);
		debug_pop(standaardOptie)
		for(var attribuut in standaardOptie)
		{
			try
			{
				nieuweOptie[attribuut] = standaardOptie[attribuut];
			}
			catch(e)
			{
			}
		}
		list.options[0] = nieuweOptie;
	}
	*/
}

function lijstNaarArray(list)
{
	var newArray = new Array();
	var newOption;
	// huidige veldopties wissen
	if(list.options && list.options.length)
	{
		for (var i=0; i < list.options.length; i++)
		{
			newOption = new Array();
			newOption.push(list.options[i].value);
			newOption.push(list.options[i].text);
			newArray.push(newOption);
		}
	}

	return newArray;
}


function daysInMonth(jaar, maand) // engelse naam ivm ColdFusion bekendheid. Maand 0 = january, 1 = februari enz. Gewoon doorgeven, functie verminderd arg. met 1.
{
	maand--;
	var dagen = 32 - new Date(jaar, maand, 32).getDate();
	return dagen;
}


function geefGekozenWaarde(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}

function zetGekozenWaarde(radioObj, newValue) {
	if(!radioObj)
		return;
	var radioLength = radioObj.length;
	if(radioLength == undefined) {
		radioObj.checked = (radioObj.value == newValue.toString());
		return;
	}
	for(var i = 0; i < radioLength; i++) {
		radioObj[i].checked = false;
		if(radioObj[i].value == newValue.toString()) {
			radioObj[i].checked = true;
		}
	}
}

function nullenAanvullen(aantalNullen, nummer)
{
   if(nummer.constructor == Number) nummer = nummer.toString();
   while(nummer.length < aantalNullen) nummer = "0" + nummer;
   return nummer;
 }
 
 
function veldStandaardWaarde_focus(veld) {
	if(bestaatAttribuut(veld, "standaardWaarde")) {
		if(Trim(veld.value) == geefAttribuutWaarde(veld, "standaardWaarde")) {
			if(bestaatAttribuut(veld, "huidigeWaarde") && Trim(veld.value) == geefAttribuutWaarde(veld, "huidigeWaarde")) return; // waarde niet leeg maken als de database waarde al ingesteld was en toevallig hetzelfde is als de standaardwaarde
			veld.value = "";
		}
	}
} 					
 function veldStandaardWaarde_blur(veld) {
 	if(bestaatAttribuut(veld, "standaardWaarde")) {
 		if(Trim(veld.value).length == 0) {
 			veld.value = geefAttribuutWaarde(veld, "standaardWaarde");
 		}
 	}
 }
 
 