//=================================================================================================
//	enum TWeekDay ( wdSunday, wdMonday, wdTuesday, wdWednesday, wdThursday, wdFriday, wdSaturday );
//-------------------------------------------------------------------------------------------------
	var
		ns4         = ( document.layers ? true : false ), 
		ie4         = ( document.all ? true : false ), 
		
		server      = document.location.protocol + "//" + document.location.host + "/", 
		
		TWeekDay    = new Array("wdSunday", "wdMonday", "wdTuesday", "wdWednesday", "wdThursday", "wdFriday", "wdSaturday"), 
		wdSunday    = 0, 
		wdMonday    = 1, 
		wdTuesday   = 2, 
		wdWednesday = 3, 
		wdThursday  = 4, 
		wdFriday    = 5, 
		wdSaturday  = 6;
	
	window.onresize = resize;
	
	if ( window.navigator.appName == "Microsoft Internet Explorer")
		document.onreadystatechange = docChange;
	
	if ( ! window.XMLHttpRequest && window.ActiveXObject ) 
	{
		window.XMLHttpRequest = function() 
		{
			var 
				objects = ["Microsoft.XMLHTTP", "MSXML2.XMLHTTP"], 
				i       = objects.length; 
			
			while ( i-- )
			{
				try 
				{
					return new ActiveXObject( objects[i] );
				}
				catch ( error )
				{
				}
			}
			
			throw new Error("Error: No XML support in this browser.");
		};
	}
//=================================================================================================
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_preloadImages()  //v3.0
{
	var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
	var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i>a.length; i++)
	if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
//=================================================================================================
function MM_findObj(n, d)  //v4.01
{
	var p,i,x;  if(!d) d=document;
	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_showHideLayers()  //v3.0
{
	var i,p,v,obj,args=MM_showHideLayers.arguments;
	for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
	if (obj.style) { obj=obj.style; v=(v=="show")?"visible":(v="hide")?"hidden":v; }
	obj.visibility=v;}
}
//=================================================================================================
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 MM_controlShockwave(objStr,x,cmdName,frameNum) //v3.0
{
	var obj=MM_findObj(objStr);
	if (obj) eval("obj."+cmdName+"("+((cmdName=="GotoFrame")?frameNum:"")+")");
}
//=================================================================================================
function openWindow( file, name, width, height )
{
	window.open( file, name, "menubar=0,location=0,toolbar=0,scrollbars=1,resizable=0,status=0,width=" + width + ",height=" + height + ",top=25,left=25");
}
//=================================================================================================
function openNormWindow( file, name, width, height )
{
	window.open( file, name, "menubar=1,location=1,toolbar=1,scrollbars=1,resizable=1,status=0,width=" + width + ",height=" + height );
}
//=================================================================================================
function toggleDisplay( sender ) 
{
	if ( sender.length )
		sender = document.getElementById( sender );
	
	if ( sender.style.display == "none")
		sender.style.display = "";
	else
		sender.style.display = "none";
}
//=================================================================================================
function validateForm() 
{
	var 
		validationPassed	=	true;
	
	for ( var i = 0; i < formFields.length; i++ )
	{
		// field value length
		if ( formFieldMinLengths[i] != null )
		{
			if ( document.forms[formName].elements[formFields[i]].value.length < formFieldMinLengths[i] )
			{
				alert("Het veld \"" + formFieldDescriptions[i] + "\" bevat te weinig karakters.\nHet minimum aantal in te vullen karakters is " + formFieldMinLengths[i] + ".\nOp dit moment heeft u " + document.forms[formName].elements[formFields[i]].value.length + " karakters gebruikt.");
				document.forms[formName].elements[formFields[i]].focus();
				validationPassed = false;
				break;
			}
		}
		if ( formFieldMaxLengths[i] != null )
		{
			if ( document.forms[formName].elements[formFields[i]].value.length > formFieldMaxLengths[i] )
			{
				alert("Het veld \"" + formFieldDescriptions[i] + "\" bevat te veel karakters.\nHet maximum aantal in te vullen karakters is " + formFieldMaxLengths[i] + ".\nOp dit moment heeft u " + document.forms[formName].elements[formFields[i]].value.length + " karakters gebruikt.");
				document.forms[formName].elements[formFields[i]].focus();
				validationPassed = false;
				break;
			}
		}
		// additional validation functions
		// a "*" character will be replaced by the field"s value
		if ( formFieldAdditionalValidations[i] != null )
		{
			fieldValue = document.forms[formName].elements[formFields[i]].value;
			
			if ( fieldValue != parseInt( fieldValue ) )
				fieldValue = "\"" + fieldValue + "\"";
			
			var 
				evalFunc = replaceString( formFieldAdditionalValidations[i], "*", fieldValue );
			
			if ( ! eval( evalFunc ) )
			{
				document.forms[formName].elements[formFields[i]].focus();
				validationPassed = false;
				break;
			}
		}
	}
	
	return validationPassed;
}
//=================================================================================================
function checkEmail( address ) 
{
	if ( ! isEmail( address ) )
	{
		alert( MSG_EmailError );
		return false;
	}
	
	return true;
}
//=================================================================================================
function isEmail( address ) 
{
	var
		expr = new RegExp("^((\\S+@).+((\\.com)|(\\.net)|(\\.info)|(\\.edu)|(\\.mil)|(\\.gov)|(\\.org)|(\\.int)|(\\.\\S{2,2})))$", "gi");
	
	return expr.test( address );
}
//=================================================================================================
function isURL( address ) 
{
	var
		expr = new RegExp("^((https?:\\/\\/|)([a-z0-9\\-\\.]{1,60}\\.[a-z]{2,4})|(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}))([\\/\\\\].+|)$", "gi");
	
	return expr.test( address );
}
//=================================================================================================
function withZeros( floatStr, floatNum )
{
	var
		zeros = "";
	
	if ( floatStr.indexOf(".") > -1 )
	{
		while ( floatStr.endsWith("0") )
		{
			zeros   += "0";
			floatStr = floatStr.substr(0, floatStr.length - 1);
		}
		
		if ( floatStr.endsWith(".") )
		{
			zeros    = "." + zeros;
			floatStr = floatStr.substr(0, floatStr.length - 1);
		}
	}
	
	return (floatStr + zeros) == (floatNum + zeros);
}
//-------------------------------------------------------------------------------------------------
function isNumeric( value )
{
	value = new String( value );
	
	if ( value.indexOf(",") > -1 && value.indexOf(".") > -1 )
	{
		if ( value.indexOf(",") > value.indexOf(".") )
			value = value.replace(/\./gi, "");
		else if ( value.indexOf(",") < value.indexOf(".") )
			value = value.replace(/\,/gi, "");
	}
	
	value = value.replace(/\,/gi, ".");
	
	return withZeros( value, parseFloat( value ) );
}
//=================================================================================================
function toNumber( value )
{
	if ( value.indexOf(",") > -1 && value.indexOf(".") > -1 )
	{
		if ( value.indexOf(",") > value.indexOf(".") )
			value = value.replace(/\./gi, "");
		else if ( value.indexOf(",") < value.indexOf(".") )
			value = value.replace(/\,/gi, "");
	}
	
	value = value.replace(/\,/gi, ".");
	
	return parseFloat( value );
}
//=================================================================================================
function isDate( value )
{
	if ( new String( value ).length == 0 )
		return true;
	
	var
		fields = new String( value ).split("-"),
		day    = (fields[0].substr(0, 1) == "0" ? parseInt( fields[0].substr(1) ) : parseInt( fields[0] ) ),
		month,
		year;
	
	if ( String( day ) == "NaN")
		return false;
	
	if ( parseInt( day ) != Number( day ) )
		return false;
	
	if ( fields.length < 2 || fields.length > 3 || day < 1 )
		return false;
	
	if ( fields[1].substr(0, 1) == "0") 
		month = parseInt( fields[1].substr(1) );
	else
		month = parseInt( fields[1] );
	
	if ( String( month ) == "NaN")
		return false;
	
	if ( fields.length == 3 )
	{
		year = parseInt( fields[2] );
		
		if ( String( year ) == "NaN")
			return false;
		
		if ( fields[2].length == 2 )
		{
			if ( year < 40 ) 
				year += 2000;
			else
				year += 1900;
		}
	}
	else
		year = new Date().getYear();
	
	if ( year < 1753 || year > 9999 ) 
		return false;
	
	switch ( month )
	{
		case 2:
			if ( year % 4 == 0 && (year % 100 != 0 || year % 1000 == 0) ) 
			{
				if ( day > 29 ) 
					return false;
			}
			else if ( day > 28 )
				return false;
			
			break;
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			if ( day > 31 ) 
				return false;
			
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			if ( day > 30 ) 
				return false;
			
			break;
		default:
			return false;
	}
	
	return new Date( year, month - 1, day, 0, 0 );
}
//=================================================================================================
function isTime( value )
{
	if ( new String( value ).length == 0 )
		return true;
	
	try
	{
		var
			fields  = new String( value ).split(":"), 
			hours   = (fields[0].substr(0, 1) == "0" ? parseInt( fields[0].substr(1) ) : parseInt( fields[0] ) ), 
			minutes = (fields[1].substr(0, 1) == "0" ? parseInt( fields[1].substr(1) ) : parseInt( fields[1] ) ), 
			seconds = ( fields.length > 2 ? (fields[2].substr(0, 1) == "0" ? parseInt( fields[2].substr(1) ) : parseInt( fields[2] ) ) : 0 );
		
		if ( hours < 0 || hours > 23 )
			return false;
		
		if ( minutes < 0 || minutes > 59 ) 
			return false;
		
		if ( seconds < 0 || seconds > 59 ) 
			return false;
		
		if ( seconds == NaN )
			seconds = 0;
		
		return new Date( 1900, 0, 1, hours, minutes, seconds );
	}
	catch ( error )
	{
		return false;
	}
}
//=================================================================================================
function isDateTime( value )
{
	value = value.split(" ");
	
	if ( value.length > 1 )
	{
		var
			date = isDate( value[0] ), 
			time = isTime( value[1] );
		
		if ( date != false && time != false )
		{
			date.setHours( time.getHours() );
			date.setMinutes( time.getMinutes() );
			date.setSeconds( time.getSeconds() );
			
			return date;
		}
		else
			return false;
	}
	else if ( value[0].indexOf("-") > -1 )
		return isDate( value[0] );
	else if ( value[0].indexOf(":") > -1 )
		return isTime( value[0] );
	else
		return false;
}
//=================================================================================================
function replaceString( string, text, by )
{
	var
		pos = string.indexOf( text );
	
	while ( pos > -1 )
	{
		string = string.substring( 0, pos ) + by + string.substring( pos + text.length );
		pos = string.indexOf( text, pos + by.length );
	}
	
	return string;
}
//=================================================================================================
function TRmOvr( src, color ) 
{
	src.style.cursor = "hand";
	src.bgColor      = color;
}
//=================================================================================================
function TRmOut( src, color )
{
	src.bgColor = color;
}
//=================================================================================================
function cookieName( name ) 
{
	name = escape( name );
	name = name.replace(/@/gi,  "%40");
	name = name.replace(/\*/gi, "%2A");
	name = name.replace(/-/gi,  "%2D");
	name = name.replace(/_/gi,  "%5F");
	name = name.replace(/\+/gi, "%2B");
	name = name.replace(/\./gi, "%2E");
	name = name.replace(/\//gi, "%2F");
	
	return name;
}
//=================================================================================================
function setCookie( name, value, date ) 
{
	name = cookieName( name );
	
	if ( value != null && typeof( value ) != "undefined" && String( value ) != "")
	{
		var 
			expiry = new Date().nextYear();
		
		if ( arguments.length > 2 )
			expiry = date;
		
		if ( expiry == null )
			document.cookie = name + "=" + escape( value );
		else
			document.cookie = name + "=" + escape( value ) + ";expires=" + expiry.toGMTString();
	}
	else
		document.cookie = name + "=;expires=" + new Date().priorDay().toGMTString();
}
//=================================================================================================
function getCookie( name ) 
{
	name = cookieName( name );
	
	var 
		value = document.cookie, 
		begin = value.indexOf(" " + name + "=");
	
	if ( begin == -1 )
		begin = value.indexOf( name + "=");
	
	if ( begin == -1 )
		return null;
	
	begin = value.indexOf("=", begin ) + 1;
	
	var 
		end = value.indexOf(";", begin );
	
	if ( end == -1 )
		end = value.length;
	
	return unescape( value.substring( begin, end ) );
}
//=================================================================================================
function filterEvent( event )
{
	return String( event ).replace( /^function \w+\((event)?\)\s*{\s*((.|\n)*)\s*}/, "$2");
}
//=================================================================================================
function addEvent( object, event, func )
{
	if ( typeof( func ) == "string")
		func = new Function("event", func );
	
	if ( object.attachEvent )
		object.attachEvent("on" + event, func );
	else
		object.addEventListener( event, func, false );
	
	return func;
}
//=================================================================================================
var
	szPage   = 1, 
	szWindow = 2;
//-------------------------------------------------------------------------------------------------
Point = function( left, top )
{
	this.className = "Point";
	
	if ( typeof( left ) != "undefined")
		this.left = left;
	else
		this.left = 0;
	
	if ( typeof( top ) != "undefined")
		this.top = top;
	else
		this.top = 0;
}
//-------------------------------------------------------------------------------------------------
Size = function( width, height )
{
	this.className = "Size";
	
	if ( typeof( width ) != "undefined")
		this.width = width;
	else
		this.width = 0;
	
	if ( typeof( height ) != "undefined")
		this.height = height;
	else
		this.height = 0;
}
//-------------------------------------------------------------------------------------------------
function getSize( which )
{
	var
		windowWidth, 
		windowHeight, 
		xScroll, 
		yScroll;
	
	if ( window.innerHeight && window.scrollMaxY )
	{
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	}
	else if ( document.body.scrollHeight > document.body.offsetHeight )
	{
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	}
	else
	{
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	if ( self.innerHeight )
	{
		windowWidth  = self.innerWidth;
		windowHeight = self.innerHeight;
	}
	else if ( document.documentElement && document.documentElement.clientHeight )
	{
		windowWidth  = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	}
	else if ( document.body )
	{
		windowWidth  = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}
	
	if ( yScroll < windowHeight )
		pageHeight = windowHeight;
	else
		pageHeight = yScroll;

	if ( xScroll < windowWidth )
		pageWidth = windowWidth;
	else
		pageWidth = xScroll;
	
	switch ( which )
	{
		case szPage:
			return new Size( pageWidth, pageHeight );
			break;
		case szWindow:
			return new Size( windowWidth, windowHeight );
			break;
		default:
			return new Array( pageWidth, pageHeight, windowWidth, windowHeight );
			break;
	}
}
//=================================================================================================
function getLeft( sender )
{
	if ( sender && sender.nodeName != "#document")
	{
		if ( sender.style.position == "absolute")
			return 0;
		else if ( sender.style.position == "absolute")
			return sender.offsetLeft;
		else 
			return sender.offsetLeft + getLeft( sender.offsetParent );
	}
	else
		return 0;
}
//-------------------------------------------------------------------------------------------------
function getTop( sender )
{
	if ( sender && sender.nodeName != "#document")
	{
		if ( sender.style.position == "absolute")
			return 0;
		else if ( sender.style.position == "absolute")
			return sender.offsetTop;
		else
			return sender.offsetTop + getTop( sender.offsetParent );
	}
	else
		return 0;
}
//-------------------------------------------------------------------------------------------------
function getPos( sender )
{
	return new Point( getLeft( sender ), getTop( sender ) );
}
//=================================================================================================
function resize( event )
{
	var
		width = getSize( szPage ).width;
	
	for ( var idx = 0; idx < slideDivs.length; idx++ )
		slideDivs[idx].reposition( width );
	
	if ( document.getElementById("message") )
	{
		document.getElementById("message").style.left = ((width - 330) / 2) + "px";
		
		if ( document.getElementById("messageShadow") )
			document.getElementById("messageShadow").style.left = ((width - 330) / 2) + 7 + "px";
		
		if ( document.getElementById("frmMessage") ) 
			document.getElementById("frmMessage").style.left = (document.getElementById("message").offsetLeft) + "px";
	}
	
	if ( typeof( customResize ) != "undefined")
		customResize( width, event );
}
//=================================================================================================
function docChange()
{
	if ( document.readyState == "complete")
		load( event );
}
//=================================================================================================
function load( event )
{
	resize( event );
	
	for ( var idx = 0; idx < slideDivs.length; idx++ )
		slideDivs[idx].initialize();
		
	for ( var idx = 0; idx < toggleDivs.length; idx++ )
		toggleDivs[idx].initialize();
	
	if ( document.getElementById("message") )
	{
		document.getElementById("message").style.display = "";
		
		if ( document.getElementById("messageShadow") )
			document.getElementById("messageShadow").style.display = "";
		
		if ( document.getElementById("frmMessage") ) 
		{
			document.getElementById("frmMessage").style.height  = (document.getElementById("message").offsetHeight + 7) + "px";
			document.getElementById("frmMessage").style.width   = (document.getElementById("message").offsetWidth + 7) + "px";
			document.getElementById("frmMessage").style.left    = (document.getElementById("message").offsetLeft) + "px";
			document.getElementById("frmMessage").style.top     = (document.getElementById("message").offsetTop) + "px";
			document.getElementById("frmMessage").style.display = "";
		}
	}
	
	if ( typeof( customLoad ) != "undefined")
		customLoad( event );
}
//=================================================================================================
function displayImage()
{
	if ( arguments.length > 1 )
	{
		var
			galID = arguments[0], 
			index = arguments[1];
		
		window.open("gallery.asp?galID=" + galID + "&index=" + index, "displayImage", "menubar=0,location=0,toolbar=0,scrollbars=0,resizable=0,status=0,width=10,height=10,top=25,left=25");
	}
	else
	{
		var
			fileName = arguments[0];
		
		window.open('image.asp?fileName=' + fileName, 'displayImage', 'menubar=0,location=0,toolbar=0,scrollbars=0,resizable=0,status=0,width=10,height=10,top=25,left=25');
	}
}
//=================================================================================================
function printCat( ID )
{
	window.open("printItem.asp?steID=" + steID + "&ID=" + ID, "printItem", "menubar=0,location=0,toolbar=0,scrollbars=0,resizable=0,status=1,width=602,height=345,top=25,left=25");
}
//=================================================================================================
function printItem( ID )
{
	window.open("printItem.asp?steID=" + steID + "&item=" + ID, "printItem", "menubar=0,location=0,toolbar=0,scrollbars=0,resizable=0,status=0,width=602,height=345,top=25,left=25");
}
//=================================================================================================
function sendItem( ID )
{
	window.open("sendItem.asp?steID=" + steID + "&item=" + ID, "sendItem", "menubar=0,location=0,toolbar=0,scrollbars=0,resizable=0,status=0,width=456,height=300,top=25,left=25");
}
//=================================================================================================
function callmoderator( URL )
{
	window.open( URL, "moderator", "menubar=0,location=0,toolbar=0,scrollbars=0,resizable=0,status=0,width=456,height=300,top=25,left=25");
}		
//=================================================================================================
function checkLogin()
{
	if ( document.frmLogin.edtUsername.value == "" || document.frmLogin.edtUsername.value == document.frmLogin.edtUsername.defaultValue )
	{
		document.frmLogin.edtUsername.focus();
		alert( MSG_Login_popuptext );
		return false;
	}
	
	if ( document.frmLogin.edtPassword.value == "" || document.frmLogin.edtPassword.value == document.frmLogin.edtPassword.defaultValue )
	{
		if ( document.frmLogin.edtNepPassword )
			document.frmLogin.edtNepPassword.focus();
		else
			document.frmLogin.edtPassword.focus();
		
		alert( MSG_Login_popuptext );
		return false;
	}
	
	return true;
}
//=================================================================================================
function checkSearch( sender )
{
	var 
		i       = 0, 
		element = sender.elements[i];
	
	while ( element && element.type != "text")
		element = sender.elements[++i];

	if ( element.value == "" || element.value == element.defaultValue )
	{
		alert( MSG_NoSearchText );
		element.focus();
		return false;
	}
	
	setCookie("addStatsSearch", 1 );
	
	return true;
}
//=================================================================================================
function clearInput( sender )
{
	if ( sender.value == sender.defaultValue )
		sender.value = "";
}
//=================================================================================================
function fillInput( sender )
{
	if ( sender.value == "")
		sender.value = sender.defaultValue;
}
//=================================================================================================
function submitEnter( sender )
{
	if ( event.keyCode == 13 && sender.form.fireEvent("onsubmit") )
		sender.form.submit();
}
//=================================================================================================
function submitNieuwsbrief( sender )
{
	if ( sender.value == sender.defaultValue ) 
	{
		sender.focus();
		alert( MSG_EmailError );
		return false;
	}
	else 
		return checkEmail( sender.value );
}
//=================================================================================================
function textSize( inc ) 
{
	var 
		size  = startSize += inc;
	
	if ( size < 1 ) 
		size = 1;
	if ( size > 5 ) 
		size = 5;
	
	startSize = size;
	
	document.body.style.fontSize = sizes[size - 1];
	
	setCookie("fontSize", size );
}
//=================================================================================================
function toUpper() 
{
	if ( event.keyCode > 96 && event.keyCode < 123 )
		event.keyCode -= 32;
}
//=================================================================================================
function toLower()
{
	if ( event.keyCode > 64 && event.keyCode < 91 )
		event.keyCode += 32;
}
//=================================================================================================
function upperFirst( value )
{
	value = new String( value );
	return value.substr(0, 1).toUpperCase() + value.substr(1);
}
//=================================================================================================
function fillOut( value )
{
	if ( parseInt( value ) < 10 ) 
		return "0" + new String( parseInt( value ) );
	else
		return parseInt( value );
}
//=================================================================================================
//	String extensions.
//=================================================================================================
String.prototype.coalesce = function()
{
	if ( this )
		return this;
	
	for ( var idx = 0; idx < coalesce.arguments.length; idx++ )
		if ( coalesce.arguments[idx] )
			return coalesce.arguments[idx];
	
	return "";
}
//-------------------------------------------------------------------------------------------------
String.prototype.endsWith = function( text )
{
	return (this.substr( this.length - text.length ) == new String( text ));
}
//-------------------------------------------------------------------------------------------------
String.prototype.htmlEncode = function()
{
	var
		text = String( this );
	
	if ( ! text )
		text = "";
	
	text = text.replace( /\"/gi, "&quot;");
	text = text.replace( /\</gi, "&lt;");
	text = text.replace( /\>/gi, "&gt;");
	
	return text;
}
//-------------------------------------------------------------------------------------------------
String.prototype.indent = function( tabs )
{
	var
		chars = "\r\n";
	
	if ( typeof( tabs ) == "undefined")
		tabs = 1;
	
	for ( var i = 0; i < tabs; i++ )
		chars += "\t";
	
	return this.replace( /\r\n(\t*<)/gi, chars + "$1");
}
//-------------------------------------------------------------------------------------------------
String.prototype.lowerFirst = function()
{
	return this.substr(0, 1).toLowerCase() + this.substr(1);
}
//-------------------------------------------------------------------------------------------------
String.prototype.shortenLeft = function( count )
{
	return this.substr( count );
}
//-------------------------------------------------------------------------------------------------
String.prototype.shortenRight = function( count )
{
	return this.substr( 0, this.length - count );
}
//-------------------------------------------------------------------------------------------------
String.prototype.startsWith = function( text )
{
	return (this.substr( 0, text.length ) == new String( text ));
}
//-------------------------------------------------------------------------------------------------
String.prototype.trim = function() 
{
	var
		value = new String( this );
	
	while ( value.substr( 0, 1 ) == ' ' || 
			  value.substr( 0, 1 ) == '\n' || 
			  value.substr( 0, 1 ) == '\t')
		value = value.substr( 1 );
	
	while ( value.substr( value.length - 1 ) == ' ' || 
			  value.substr( value.length - 1 ) == '\n' || 
			  value.substr( value.length - 1 ) == '\t')
		value = value.substr( 0, value.length - 1 );
	
	return value;
}
//-------------------------------------------------------------------------------------------------
String.prototype.unindent = function( tabs )
{
	var
		chars = "\r\n";
	
	if ( typeof( tabs ) == "undefined")
		tabs = 1;
	
	for ( var i = 0; i < tabs; i++ )
		chars += "\t";
	
	return this.replace( new RegExp( chars ), "\r\n");
}
//-------------------------------------------------------------------------------------------------
String.prototype.upperFirst = function()
{
	return this.substr(0, 1).toUpperCase() + this.substr(1);
}
//=================================================================================================
//	Date extensions.
//=================================================================================================
Date.prototype.isLeapYear = function()
{
	var
		year = this.getFullYear();
	
	if ( year % 4 == 0 && (year % 100 || year % 1000 == 0) )
		return true;
	else
		return false;
}
//-------------------------------------------------------------------------------------------------
Date.prototype.daysInMonth = function()
{
	switch ( this.getMonth() + 1 )
	{
		case 4:	//	april
		case 6:	//	juni
		case 9:	//	september
		case 11:	//	november
			return 30;
		case 2:
			return ( this.isLeapYear() ? 29 : 28 );
		default:
			return 31;
	}
}
//-------------------------------------------------------------------------------------------------
Date.prototype.priorDay = function( count )
{
	if ( ! count )
		count = 1;
	
	var
		date = new Date( this );
	
	if ( date.getDate() - count >= 1 )
		date.setDate( date.getDate() - count );
	else if ( date.getMonth() > 0 )
	{
		date.setMonth( date.getMonth() - 1 );
		date.setDate( date.daysInMonth() - count + date.getDate() );
	}
	else
	{
		date.setYear( date.getFullYear() - 1 );
		date.setMonth( 11 );
		date.setDate( date.daysInMonth() - count + date.getDate() );
	}
	
	return date;
}
//-------------------------------------------------------------------------------------------------
Date.prototype.nextDay = function( count )
{
	if ( ! count )
		count = 1;
	
	var
		date = new Date( this );
	
	if ( date.getDate() + count <= date.daysInMonth() )
		date.setDate( date.getDate() + count );
	else if ( date.getMonth() < 11 )
	{
		date.setDate( date.getDate() + count - date.daysInMonth() );
		date.setMonth( date.getMonth() + 1 );
	}
	else
	{
		date.setDate( date.getDate() + count - date.daysInMonth() );
		date.setYear( date.getFullYear() + 1 );
		date.setMonth( 0 );
	}
	
	return date;
}
//-------------------------------------------------------------------------------------------------
Date.prototype.priorWeek = function()
{
	return this.priorDay( 7 );
}
//-------------------------------------------------------------------------------------------------
Date.prototype.nextWeek = function()
{
	return this.nextDay( 7 );
}
//-------------------------------------------------------------------------------------------------
Date.prototype.priorMonth = function()
{
	var
		date = new Date( this );
	
	if ( date.getMonth() > 0 )
	{
		date.setMonth( date.getMonth() - 1 );
		
		while ( date.getMonth() == this.getMonth() )
			date = date.priorDay();
	}
	else
	{
		date.setMonth( 11 );
		date.setYear( date.getFullYear() - 1 );
	}
	
	return date;
}
//-------------------------------------------------------------------------------------------------
Date.prototype.nextMonth = function()
{
	var
		date = new Date( this );
	
	if ( date.getMonth() < 11 )
	{
		date.setMonth( date.getMonth() + 1 );
		
		while ( date.getMonth() > this.getMonth() + 1 )
			date = date.priorDay();
	}
	else
	{
		date.setMonth( 0 );
		date.setYear( date.getFullYear() + 1 );
	}
	
	return date;
}
//-------------------------------------------------------------------------------------------------
Date.prototype.priorYear = function( count )
{
	if ( ! count )
		count = 1;
	
	var
		date = new Date( this );
	
	date.setYear( date.getFullYear() - count );
	
	return date;
}
//-------------------------------------------------------------------------------------------------
Date.prototype.nextYear = function( count )
{
	if ( ! count )
		count = 1;
	
	var
		date = new Date( this );
	
	date.setYear( date.getFullYear() + count );
	
	return date;
}
//-------------------------------------------------------------------------------------------------
Date.prototype.formatDate = function( format )
{
	var
		date = String( format );
	
	if ( format == null || format == "" || typeof( format ) == "undefined")
		date = "D-M-YYYY";
	
	//	year formats 
	date = date.replace( /yyyy/gi, this.getFullYear() );
	
	if ( date.toLowerCase().indexOf("yyy") > -1 ) 
		throw "Illegal yearformat \"yyy\".";
	
	date = date.replace( /yy/gi, new String( this.getFullYear() ).substr( 2 ) );
	
	// month formats 
	if ( date.search( /mmm/gi ) == -1 )
	{
		date = date.replace( /mm/gi, fillOut( this.getMonth() + 1 ) );
		date = date.replace( /m/gi, this.getMonth() + 1 );
	}
	
	// day formats 
	if ( date.search( /ddd/gi ) == -1 )
	{
		date = date.replace( /dd/gi, fillOut( this.getDate() ) );
		date = date.replace( /d/gi, this.getDate() );
	}
	
	// hour formats 
	date = date.replace( /hh/gi, fillOut( this.getHours() ) );
	date = date.replace( /h/gi, this.getHours() );
	
	// minute formats 
	date = date.replace( /nn/gi, fillOut( this.getMinutes() ) );
	date = date.replace( /n/gi, this.getMinutes() );
	
	// second formats 
	date = date.replace( /ss/gi, fillOut( this.getSeconds() ) );
	date = date.replace( /s/gi, this.getSeconds() );
	
	// month formats 
	date = date.replace( /mmmm/gi, months[this.getMonth()] );
	date = date.replace( /mmm/gi, months[this.getMonth()].substr( 0, 3 ) );
	
	// day formats 
	date = date.replace( /dddd/gi, days[this.getDay()] );
	date = date.replace( /ddd/gi, days[this.getDay()].substr( 0, 3 ) );
	
	return date;
}
//-------------------------------------------------------------------------------------------------
Date.prototype.weekNo = function()
{
	var
		year  = this.getFullYear(), 
		month = this.getMonth() + 1, 
		day   = this.getDate() + firstDay;
	
	var
		a    = Math.floor( (14 - month) / 12 ), 
		y    = year + 4800 - a, 
		m    = month + 12 * a - 3, 
		b    = Math.floor( y / 4 ) - Math.floor( y / 100 ) + Math.floor( y / 400 ), 
		J    = day + Math.floor( (153 * m + 2) / 5 ) + 365 * y + b - 32045, 
		d4   = (J + 31741 - (J % 7)) % 146097 % 36524 % 1461, 
		L    = Math.floor( d4 / 1460 ), 
		d1   = ( (d4 - L) % 365 ) + L, 
		week = Math.floor( d1 / 7 ) + 1;
	
	return week;
}
//-------------------------------------------------------------------------------------------------
Date.prototype.isSameDate = function( date )
{
	return (
			this.getDate()     == date.getDate() && 
			this.getMonth()    == date.getMonth() && 
			this.getFullYear() == date.getFullYear() );
}
//-------------------------------------------------------------------------------------------------
Date.prototype.isSameTime = function( date )
{
	return (
			this.getSeconds() == date.getSeconds() && 
			this.getMinutes() == date.getMinutes() && 
			this.getHours()   == date.getHours() );
}
//-------------------------------------------------------------------------------------------------
Date.prototype.jsDate = function()
{
	return ("new Date(" + 
				this.getFullYear() + ", " + this.getMonth() + ", " + this.getDate() + ", " + 
				this.getHours() + ", " + this.getMinutes() + ", " + this.getSeconds() + ", " + 
				this.getMilliseconds() + ")");
}
//-------------------------------------------------------------------------------------------------
Date.prototype.round = function()
{
	var
		date = new Date( this );
	
	date.setHours( 0 );
	date.setMinutes( 0 );
	date.setSeconds( 0 );
	date.setMilliseconds( 0 );
	
	return date;
}
//=================================================================================================
//	Array extensions.
//=================================================================================================
Array.prototype.contains = function( value )
{
	for ( var i = 0; i < this.length; i++ )
	{
		if ( this[i] == value ) 
			return true;
	}
	
	return false;
}
//-------------------------------------------------------------------------------------------------
Array.prototype.indexOf = function( value )
{
	for ( var i = 0; i < this.length; i++ )
	{
		if ( this[i] == value ) 
			return i;
	}
	
	return -1;
}
//-------------------------------------------------------------------------------------------------
Array.prototype.remove = function( value )
{
	for ( var i = value; i < this.length - 1; i++ )
		this[i] = this[i + 1];
	
	this.length--;
	
	return;
}
//=================================================================================================
//	Number extensions
//=================================================================================================
Number.prototype.formatFloat = function( format )
{
	var
		number = String( this ), 
		frmBU  = format, 
		split  = number.split( /\./gi );
	
	if ( format.length < 1 )
		return number;
	
	format = format.split( /\./gi );
	
	if ( format[0].search( /0#/gi ) > -1 )
		throw "Illegal format in call to \"formatFloat\".";
	
	if ( format.length > 1 && format[1].search( /#0/gi ) > -1 )
		throw "Illegal format in call to \"formatFloat\".";
	
	if ( format.length > 2 )
		throw "Illegal format in call to \"formatFloat\". Multiple use of decimal separator.";
	
	if ( ! frmBU.endsWith(".") )
	{
		if ( format.length == 1 )
			split = String( Math.round( number ) ).split(".");
		else if ( format[1].length > 0 )
			split = String( Math.round( number * Math.pow( 10, format[1].length ) ) / Math.pow( 10, format[1].length ) ).split(".");
	}
	
	number = "";
	
	for ( var i = 0; i < split[0].length; i++ )
		number = split[0].substr( split[0].length - i - 1, 1 ) + number;
	
	for ( var i = split[0].length; i < format[0].length; i++ )
		number = format[0].substr( format[0].length - i - 1, 1 ) + number;
	
	if ( frmBU.endsWith(".") || format.length > 1 )
	{
		number += ",";
		
		if ( split.length > 1 )
		{
			for ( var i = 0; i < split[1].length; i++ )
				number += split[1].substr( i, 1 );
			
			if ( format.length > 1 )
				for ( var i = split[1].length; i < format[1].length; i++ )
					number += format[1].substr( i, 1 );
		}
		else if ( format.length > 1 )
			for ( var i = 0; i < format[1].length; i++ )
				number += format[1].substr( i, 1 );
	}
	
	number = number.replace(/#/gi, "");
	
	return number;
}
//=================================================================================================
//	Function extensions 
//=================================================================================================
Function.prototype.getName = function()
{
	var
		name = String( this );
	
	name = name.substr( 0, name.indexOf("(") );
	name = name.replace( /^function\s(.+)/gi, '$1');
	
	return name;
}
//=================================================================================================
function valueString( value )
{
	var
		retVal = "";
	
	if ( typeof( value ) == "boolean")
	{
		if ( value ) 
			return "true";
		else
			return "false";
	}
	else if ( typeof( value ) == "number")
		return value;
	else if ( typeof( value ) == "string")
		return "\"" + value + "\"";
	else if ( typeof( value ) == "undefined")
		return "undefined";
	else if ( typeof( value ) == "object")
	{
		if ( value == null )
			return "null";
		else 
		{
			try
			{
				var
					temp = value.substr;
				
				if ( value.length && typeof( temp ) == "undefined")
				{
					for ( var i = 0; i < value.length; i++ )
						retVal += ", " + valueString( value[i] );
					
					if ( retVal.length )
						return "{" + retVal.substr( 2 ) + "}";
					else
						return "{}";
				}
				else
					throw "geen array";
			}
			catch ( e )
			{
				try
				{
					value.getYear();
					return "#" + value.formatDate("D-M-YYYY H:NN:SS") + "#";
				}
				catch ( e )
				{
					try
					{
						value.test()
						return value.toString();
					}
					catch ( e )
					{
						try
						{
							var
								temp = value.tagName;
							
							if ( typeof( temp ) != "undefined")
								return "<" + temp.toLowerCase() + "/>";
							else
							{
								temp = value.className;
								
								if ( typeof( temp ) != "undefined")
								{
									if ( temp == "Point")
										return "Point(" + value.x + ", " + value.y + ")";
									else if ( temp == "Size")
										return "Size(" + value.width + ", " + value.height + ")";
									else
										return temp;
								}
								else
								{
									if ( value.substr )
										return "\"" + value + "\"";
									else
										return value.toString().replace( /^\[object( [^\]]+)\]$/gi, "$1");
									
								}
							}
						}
						catch ( e )
						{
							return value.toString().replace( /^\[object( [^\]]+)\]$/gi, "$1");
						}
					}
				}
			}
		}
	}
	else if ( typeof( value ) == "function")
	{
		value = value.toString();
		return value.substr( 0, value.indexOf(")") + 1 ).substr( 9 );
	}
	else
		return "unhandled type: \"" + typeof( value ) + "\"";
}
//=================================================================================================
function random( count )
{
	var 
		chars  = "1234567890abcdefghiklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXTZ", 
		string = "";
	
	for ( var i = 0; i < count; i++ ) 
		string += chars.substr( Math.floor( Math.random() * chars.length ), 1 );
	
	return string;
}
//=================================================================================================
function playerOpen( soundfiledesc, soundfilepath )
{
	var
		playWin = window.open("", "wndPlayer", "width=320,height=40,resizable=0,scrollbars=0,titlebar=0,toolbar=0,menubar=0,status=0,directories=0,personalbar=0");
	playWin.focus();
	
	var 
		winContent = "<html><head><title>" + soundfiledesc + "</title></head><body>\r\n"; 
	
	winContent += "<strong style=\"font-size:18px;font-family:Verdana,sans-serif;line-height:1.5\">" + soundfiledesc + "</strong>\r\n";
	winContent += "<object width=\"300\" height=\"42\" ";
	winContent += "classid=\"CLSID:22D6f312-B0F6-11D0-94AB-0080C74C7E95\" " ;
	winContent += "codebase=\"http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701\" ";    
	winContent += "standby=\"Loading " + soundfiledesc + "\" ";
	winContent += "type=\"application/x-oleobject\" >\r\n";
	winContent += "	<param name=\"FileName\" value=\"" + soundfilepath + "\">\r\n";
	winContent += "</object>\r\n";
	winContent += "</body></html>";
	
	playWin.document.write( winContent );
	playWin.document.close(); // "Finalizes" new window 
}
//=================================================================================================
function frmThreadSubmit( sender )
{
	if ( sender ) 
	{
		if ( new String( sender.elements["edtTitle"].value ).trim() == "")
		{
			sender.elements["edtTitle"].focus();
			alert("U heeft nog geen titel opgegeven.");
			return false;
		}
		
		if ( new String( sender.elements["edtName"].value ).trim() == "")
		{
			sender.elements["edtName"].focus();
			alert("U heeft nog geen naam opgegeven.");
			return false;
		}
		
		if ( new String( sender.elements["edtEmail"].value ).trim() == "")
		{
			sender.elements["edtEmail"].focus();
			alert("U heeft nog geen e-mail adres ingevoerd.");
			return false;
		}
		
		if ( ! isEmail( new String( sender.elements["edtEmail"].value ).trim() ) )
		{
			sender.elements["edtEmail"].focus();
			alert("U heeft geen geldig e-mail adres ingevoerd.");
			return false;
		}
		
		if ( new String( sender.elements["oldReaction"].value ).trim() == new String( sender.elements["mmoReaction"].value ).trim() || 
				new String( sender.elements["mmoReaction"].value ).trim() == "") 
		{
			sender.elements["mmoReaction"].focus();
			alert("U heeft nog geen reactie ingevuld.");
			return false;
		}
	}
	
	return true;
}
//=================================================================================================
function frmMaillistsSubmit( sender )
{
	if ( sender )
	{
		if ( new String( sender.elements["edtEmail"].value ).trim() == "")
		{
			sender.elements["edtEmail"].focus();
			alert("U heeft nog geen e-mail adres ingevoerd.");
			return false;
		}
		
		if ( ! isEmail( new String( sender.elements["edtEmail"].value ).trim() ) )
		{
			sender.elements["edtEmail"].focus();
			alert("U heeft geen geldig e-mail adres ingevoerd.");
			return false;
		}
		
		var
			first    = null, 
			selected = false;
		
		for ( var idx = 0; idx < sender.elements.length; idx++ )
		{
			with ( sender.elements[idx] )
			{
				if ( name.substr( 0, 6 ) == "mllID_")
				{
					if ( checked ) 
						selected = true;
					
					if ( ! first )
						first = sender.elements[idx];
				}
			}
		}
		
		if ( first && ! selected )
		{
			first.focus();
			alert("U heeft nog geen nieuwsbrief geselecteerd.");
			return false;
		}
	}
}
//=================================================================================================
function confirmPasswordChange()
{	
	var 
		form = document.forms["frmLogin"];	
	
	if ( form.elements["edtUsername"].value.length > 0 )
	{	
		if ( confirm("Weet u zeker dat u een nieuw wachtwoord wil opvragen?") )	
		{					
			if ( form.elements["edtUsername"] )
			{
				form.elements["checkIN"].value = "newPassword";			
				form.onsubmit = null;		
				form.submit();
			}
		}
	}
	else
		alert("U heeft geen gebruikersnaam ingevuld");
}
//=================================================================================================
function usrIDKeyDown( sender, event )
{
	var
		frmLoginLike = document.forms["frmLoginLike"], 
		usrID        = frmLoginLike.elements["usrID"], 
		start        = 0, 
		direction    = 1;
	
	if ( event.keyCode == 40 ) 
		start = usrID.selectedIndex + 1;
	else if ( event.keyCode == 38 )
	{
		start = usrID.selectedIndex - 1;
		direction = -1;
	}
	
	if ( String( sender.value ).length > 0 ) 
		for ( var i = start; (direction > 0 && i < usrID.options.length) || (direction < 0 && i > 0) ; i = i + direction )
		{
			if ( String( usrID.options[i].text ).toUpperCase().indexOf( sender.value.toUpperCase() ) > -1 )
			{
				usrID.options[i].selected = true;
				return;
			}
		}
}
//=================================================================================================
function formSelectChange( sender, valueID )
{
	var
		ID       = String( sender.name ).split("_")[1], 
		divError = document.getElementById("divError_" + ID );
	
	if ( divError )
		if ( sender.value == valueID )
			divError.style.display = "";
		else
			divError.style.display = "none";
}
//=================================================================================================
TDateInput = function( name, element, button, block, date )
{
	var
		FMinDate  = new Date(1753,  0, 1), 
		FMaxDate  = new Date(10000, 0, 1), 
		FDate     = ( date ? new Date( date ) : null ), 
		FShowDate = ( FDate ? FDate : new Date() ), 
		FName     = name, 
		FBlock    = block, 
		FElement  = element, 
		FButton   = button;
	
	this.className = "TDateInput";
	this.timer     = 0;
	this.doHide    = true;
	this.onchange  = null;
	
	if ( typeof( name ) == "undefined" || String( name ).length == 0 )
		throw "Illegal call to constructor. \"name\" cannot be empty.";
	
	try
	{
		eval( name );
	}
	catch ( error )
	{
		throw "\"name\" is not correct. " + name + " is undefined.";
	}
	
	if ( typeof( element ) == "undefined")
		throw "Illegal call to constructor. \"element\" cannot be empty.";
	
	if ( typeof( button ) == "undefined")
		throw "Illegal call to constructor. \"button\" cannot be empty.";
	
	if ( ! FBlock )
		FBlock = new Array();
	else if ( ! FBlock.contains )
		throw "Illegal call to constructor. \"block\" should be an array of Date.";
	
	for ( var i = 0; i < FBlock.length; i++ )
		if ( ! FBlock[i].formatDate )
			throw "Illegal call to constructor. \"block\" contains elements which are not of type Date.";
		else
			FBlock[i] = FBlock[i].round();
	
	this.div                   = document.createElement("DIV");
	this.div.id                = "div" + name.upperFirst();
	this.div.style.background  = "white";
	this.div.style.border      = "1px solid black";
	this.div.style.color       = "black";
	this.div.style.display     = "none";
	this.div.style.padding     = "0px";
	this.div.style.position    = "absolute";
	this.div.onmouseover       = new Function("event", name + ".stopHide( this );");
	this.div.onmouseout        = new Function("event", name + ".hide( this );");
	
	if ( ie4 )
	{
		this.frame                 = document.createElement("IFRAME");
		this.frame.id              = "frm" + name.upperFirst();
		this.frame.src             = "/misc/leeg.html";
		this.frame.style.border    = "0px solid";
		this.frame.style.display   = "none";
		this.frame.style.position  = "absolute";
		this.frame.style.visiblity = "hidden";
		this.frame.onmouseover     = new Function("event", name + ".stopHide( this );");
		this.frame.onmouseout      = new Function("event", name + ".hide( this );");
	}
	
	addEvent( window, "load", name + ".init();");
	
	//----------------------------------------------------------------
	this.blocked = function( date )
	{
		for ( var i = 0; i < FBlock.length; i++ )
		{
			if ( FBlock[i].isSameDate( date ) )
				return true;
		}
		
		return false;
	}
	//----------------------------------------------------------------
	this.pButton = function( value )
	{
		if ( typeof( value ) == "undefined")
			return FButton;
		else
			FButton = document.getElementById( value );
	}
	//----------------------------------------------------------------
	this.pDate = function( value )
	{
		if ( typeof( value ) == "undefined")
			return FDate;
		else if ( value != null )
		{
			if ( ! value.formatDate )
				throw "Illegal assignment to date. Value is not a date object and not null (\"" + valueString( value ) + "\").";
			
			value = value.round();
			
			if ( value >= FMaxDate )
				throw "De ingevoerde datum ligt te ver in de toekomst. De datum moet kleiner dan \"" + FMaxDate.formatDate("D-M-YYYY") + "\" zijn.";
			
			if ( value < FMinDate )
				throw "De ingevoerde datum ligt te ver in het verleden. De datum moet groter of gelijk zijn aan \"" + FMinDate.formatDate("D-M-YYYY") + "\".";
			
			if ( this.blocked( value.round() ) )
				throw "De ingevoerde datum is niet correct. Deze datum is aangegeven als niet te selecteren.";
		}
		
		if ( FDate != value )
		{
			FDate = value;
			
			if ( FDate == null )
				this.pElement().value = "";
			else
			{
				this.pElement().value = FDate.formatDate("D-M-YYYY");
				this.pShowDate( FDate );
			}
			
			this.write();
			
			if ( this.onchange )
				this.onchange();
		}
		
		return;
	}
	//----------------------------------------------------------------
	this.pElement = function( value )
	{
		if ( typeof( value ) == "undefined")
			return FElement;
		else
			FElement = document.getElementById( value );
	}
	//----------------------------------------------------------------
	this.pMaxDate = function( value )
	{
		if ( typeof( value ) == "undefined")
			return FMaxDate;
		else if ( value > new Date(9999, 11, 31) )
			throw "Illegal assignment to maxDate. Max. value is 31-12-9999";
		else if ( value < new Date(1753, 0,  1 ) )
			throw "Illegal assignment to maxDate. Min. value is 1-1-1753";
		else if ( value <= FMinDate )
			throw "Illegal assignment to maxDate. Date smaller than minDate";
		else
		{
			FMaxDate = value.round();
			
			if ( FDate && FDate >= FMaxDate )
				this.pDate( FMaxDate.priorDay() );
			
			if ( FShowDate && FShowDate >= FMaxDate )
				this.pShowDate( FMaxDate.priorDay() );
			else
				this.write();
		}
		
		return;
	}
	//----------------------------------------------------------------
	this.pMinDate = function( value )
	{
		if ( typeof( value ) == "undefined")
			return FMinDate;
		else if ( value > new Date(9999, 11, 31) )
			throw "Illegal assignment to minDate. Max. value is 31-12-9999";
		else if ( value < new Date(1753, 0,  1 ) )
			throw "Illegal assignment to minDate. Min. value is 1-1-1753";
		else if ( value >= FMaxDate )
			throw "Illegal assignment to minDate. Date greater than maxDate";
		else
		{
			FMinDate = value.round();
			
			if ( FDate && FDate < FMinDate )
				this.pDate( FMinDate );
			
			if ( FShowDate && FShowDate < FMinDate )
				this.pShowDate( FMinDate );
			else
				this.write();
		}
		
		return;
	}
	//----------------------------------------------------------------
	this.pName = function()
	{
		return FName;
	}
	//----------------------------------------------------------------
	this.pShowDate = function( value )
	{
		if ( typeof( value ) == "undefined")
			return FShowDate;
		else if ( value >= FMaxDate )
			FShowDate = FMaxDate.priorDay();
		else if ( value < FMinDate )
			FShowDate = FMinDate;
		else
			FShowDate = value.round();
		
		this.write();
		
		return;
	}
	//----------------------------------------------------------------
	this.td = function( date )
	{
		var
			min      = new Date( FMinDate ), 
			max      = new Date( FMaxDate ), 
			disabled = false, 
			retVal   = "";
		
		if ( date < FMinDate || date >= FMaxDate || this.blocked( date ) )
		{
			disabled  = true;
			retVal += " disabled=\"true\"";
		}
		else if ( ie4 )
			retVal += " onclick=\"if ( " + FName + ".setDate(" + date.jsDate() + ") ) {" + FName + ".div.style.display = 'none'; " + FName + ".frame.style.visibility = 'hidden'; }\"";
		else
			retVal += " onclick=\"if ( " + FName + ".setDate(" + date.jsDate() + ") ) " + FName + ".div.style.display = 'none';\"";
		
		if ( date.getMonth() != FShowDate.getMonth() )
			retVal += " class=\"calDayOM";
		else
			retVal += " class=\"calDay";
		
		if ( date.isSameDate( new Date() ) )
			retVal += " calToday";
		
		if ( FDate && date.isSameDate( FDate ) )
			retVal += " calSelected";
		
		retVal += "\"";
		
		if ( ! disabled )
		{
			retVal += " onmouseover=\"this.oldclass = this.className; this.className += ' calSelected';\"";
			retVal += " onmouseout=\"this.className = this.oldclass;\"";
		}
		else
			retVal += " style=\"color:gray; cursor:default;\"";
		
		return retVal;
	}
	//----------------------------------------------------------------
}
//-------------------------------------------------------------------------------------------------
TDateInput.prototype.button = function()
{
	return this.pButton();
}
//-------------------------------------------------------------------------------------------------
TDateInput.prototype.date = function( value )
{
	return this.pDate( value );
	
	if ( typeof( value ) != "undefined" && this.onchange )
		this.onchange();
	
	return retVal;
}
//-------------------------------------------------------------------------------------------------
TDateInput.prototype.dayNo = function( date )
{
	return ( date.getDay() < firstDay ? (7 - firstDay) + date.getDay() : date.getDay() - firstDay );
}
//-------------------------------------------------------------------------------------------------
TDateInput.prototype.element = function()
{
	return FElement;
}
//-------------------------------------------------------------------------------------------------
TDateInput.prototype.hide = function( sender, time )
{
	if ( this.doHide )
	{
		if ( typeof( time ) == "undefined")
			time = 50;
		
		if ( ie4 )
			this.timer = setTimeout( this.name() + ".div.style.display = \"none\"; " + this.name() + ".frame.style.visibility = \"hidden\";", time );
		else
			this.timer = setTimeout( this.name() + ".div.style.display = \"none\";", time );
	}
}
//-------------------------------------------------------------------------------------------------
TDateInput.prototype.init = function()
{
	this.pElement( this.pElement() );
	
	if ( this.pElement().value != "")
		this.setDate( this.pElement() );
	
	this.onchange              = new Function("event", filterEvent( this.pElement().onchange ).replace("this", "this.pElement()") );
	this.pElement().onchange   = new Function("event", this.name() + ".setDate( this );");
	
	if ( ie4 )
		this.pElement().style.behavior = null;
	
	this.pButton( this.pButton() );
	
	this.pButton().onmouseout  = new Function("event", this.name() + ".hide( this, 500 );");
	this.pButton().onmouseover = new Function("event", this.name() + ".stopHide( this );");
	this.pButton().onclick     = new Function("event", this.name() + ".show( this )");
	
	if ( this.pButton().hideFocus )
		this.pButton().hideFocus = true;
	
	if ( typeof( this.frame ) != "undefined")
		document.body.appendChild( this.frame );
	
	document.body.appendChild( this.div );
}
//-------------------------------------------------------------------------------------------------
TDateInput.prototype.maxDate = function( value )
{
	return this.pMaxDate( value );
}
//-------------------------------------------------------------------------------------------------
TDateInput.prototype.minDate = function( value )
{
	return this.pMinDate( value );
}
//-------------------------------------------------------------------------------------------------
TDateInput.prototype.name = function()
{
	return this.pName();
}
//-------------------------------------------------------------------------------------------------
TDateInput.prototype.nextMonth = function()
{
	try
	{
		this.pShowDate( this.pShowDate().nextMonth() );
		return true;
	}
	catch ( error )
	{
		if ( error.description )
			alert( error.description );
		else if ( error.message )
			alert( error.message );
		else
			alert( error );
		
		return false;
	}
}
//-------------------------------------------------------------------------------------------------
TDateInput.prototype.priorMonth = function()
{
	try
	{
		this.pShowDate( this.pShowDate().priorMonth() );
		return true;
	}
	catch ( error )
	{
		if ( error.description )
			alert( error.description );
		else if ( error.message )
			alert( error.message );
		else
			alert( error );
		
		return false;
	}
}
//-------------------------------------------------------------------------------------------------
TDateInput.prototype.setDate = function( date )
{
	if ( date == this.pElement() )
	{
		if ( String( this.pElement().value ).length > 0 )
			date = isDate( this.pElement().value );
		else
			date = null;
		
		if ( date == false )
		{
			alert("De ingevoerde datum is niet correct. Er wordt een datum met het volgende formaat verwacht: D-M-J.");
			
			if ( ! ie4 )
			{
				if ( this.date() )
					this.pElement().value = this.date().formatDate("D-M-YYYY");
				else
					this.pElement().value = "";
				
				this.pElement().focus();
			}
			else
			{
				this.pElement().select();
				
				event.returnValue = false;
			}
			
			return false;
		}
	}
	else if ( ! date.formatDate && date != null )
		date = isDate( date );
	
	try
	{
		this.pDate( date );
		return true;
	}
	catch ( error )
	{
		if ( error.description )
			alert( error.description );
		else if ( error.message )
			alert( error.message );
		else
			alert( error );
		
		return false;
	}
}
//-------------------------------------------------------------------------------------------------
TDateInput.prototype.setMonth = function( element )
{
	try
	{
		var
			date = new Date( this.pShowDate() );
		
		date.setMonth( element.value );
		
		this.pShowDate( date );
		return true;
	}
	catch ( error )
	{
		if ( error.description )
			alert( error.description );
		else if ( error.message )
			alert( error.message );
		else
			alert( error );
		
		return false;
	}
}
//-------------------------------------------------------------------------------------------------
TDateInput.prototype.setYear = function( element )
{
	try
	{
		var
			date = new Date( this.pShowDate() );
		
		date.setYear( element.value );
		
		this.pShowDate( date );
		return true;
	}
	catch ( error )
	{
		if ( error.description )
			alert( error.description );
		else if ( error.message )
			alert( error.message );
		else
			alert( error );
		
		return false;
	}
}
//-------------------------------------------------------------------------------------------------
TDateInput.prototype.show = function( sender )
{
	if ( this.div.style.display == "none" && this.date() )
		this.pShowDate( this.date() );
	
	var
		btnLeft = getLeft( this.pButton() ), 
		btnTop  = getTop( this.pButton()  ) + this.pButton().offsetHeight, 
		elmLeft = getLeft( this.pElement() ), 
		elmTop  = getTop( this.pElement() ) + this.pElement().offsetHeight;
	
	this.x                 = elmLeft;
	this.y                 = Math.max( btnTop, elmTop );
	
	this.div.style.left    = this.x + "px";
	this.div.style.top     = this.y + "px";
	this.div.style.zIndex  = 1000;
	this.div.style.display = "block";
	
	if ( this.div.offsetLeft + this.div.offsetWidth < btnLeft )
		this.div.style.left = (btnLeft + this.pButton().offsetWidth - this.div.offsetWidth) + "px";
	
	if ( typeof( this.frame ) != "undefined")
	{
		this.frame.style.zIndex     = 999;
		this.frame.style.left       = this.div.offsetLeft   + "px";
		this.frame.style.top        = this.div.offsetTop    + "px";
		this.frame.style.width      = this.div.offsetWidth  + "px";
		this.frame.style.height     = this.div.offsetHeight + "px";
		this.frame.style.display    = "block";
		this.frame.style.visibility = "visible";
	}
}
//-------------------------------------------------------------------------------------------------
TDateInput.prototype.showDate = function( value )
{
	return this.pShowDate( value );
}
//-------------------------------------------------------------------------------------------------
TDateInput.prototype.startHiding = function()
{
	this.doHide = true;
}
//-------------------------------------------------------------------------------------------------
TDateInput.prototype.stopHiding = function()
{
	this.doHide = false;
}
//-------------------------------------------------------------------------------------------------
TDateInput.prototype.stopHide = function( sender )
{
	clearTimeout( this.timer );
	this.timer = 0;
}
//-------------------------------------------------------------------------------------------------
TDateInput.prototype.write = function()
{
	var
		name  = this.name(), 
		date  = new Date( this.pShowDate() ), 
		min   = new Date( this.pMinDate() ), 
		max   = new Date( this.pMaxDate() ), 
		year  = date.getFullYear(), 
		month = date.getMonth(), 
		bDate = new Date( year, month, 1 ), 
		eDate = bDate.nextMonth(), 
		dayNo = this.dayNo( bDate ), 
		prior = new Date( date ), 
		next  = date.nextMonth(), 
		HTML  = "";
	
	prior.setDate( 1 );
	prior = prior.priorDay();
	
	if ( prior < min )
		prior = " disabled=\"true\"";
	else
		prior = "";
	
	next.setDate( 1 );
	
	if ( next > max )
		next = " disabled=\"true\"";
	else
		next = "";
	
	HTML = 
			"<table border=\"0\" cellspacing=\"0\" cellpadding=\"3\" style=\"float:left;\">\r\n" + 
			"	<col/><col/><col/><col/><col/><col/><col/><col/>\r\n" + 
			"	<tr style=\"font-size:90%;\">\r\n" + 
			"		<td colspan=\"5\" align=\"center\" style=\"padding:0px 0px; border-bottom:1px solid black;\">\r\n" + 
			"			<select onchange=\"" + name + ".setMonth( this ); " + name + ".startHiding();\" onmousedown=\"" + name + ".stopHide( this ); " + name + ".stopHiding();\" onmouseleave=\"" + name + ".startHiding();\" style=\"width:100%\">\r\n";
	
	var
		from = 0, 
		to   = 11;
	
	if ( from < min.getMonth() && year == min.getFullYear() )
		from = min.getMonth();
	
	if ( to > max.getMonth() && year == max.getFullYear() )
		to = max.getMonth();
	
	for ( var i = from; i < to + 1; i++ )
		HTML += 
			"				<option value=\"" + i + "\"" + ( i == month ? " selected=\"selected\"" : "") + ">" + months[i] + "</option>\r\n";
	
	HTML += 
			"			</select>\r\n" + 
			"		</td>\r\n" + 
			"		<td colspan=\"3\" align=\"center\" style=\"padding:0px 0px; border-bottom:1px solid black;\">\r\n" + 
			"			<select onchange=\"" + name + ".setYear( this ); " + name + ".startHiding();\" onmousedown=\"" + name + ".stopHide( this ); " + name + ".stopHiding();\" onmouseleave=\"" + name + ".startHiding();\" style=\"width:100%\">\r\n";
	
	from = date.getFullYear() - 75;
	to   = date.getFullYear() + 75;
	
	if ( from < min.getFullYear() )
		from = min.getFullYear();
	
	if ( to > max.getFullYear() )
		to = max.getFullYear();
	
	for ( var i = from; i < to + 1; i++ )
		HTML += 
			"				<option value=\"" + i + "\"" + ( i == year ? " selected=\"selected\"" : "") + ">" + i + "</option>\r\n";
	
	HTML += 
			"			</select>\r\n" + 
			"		</td>\r\n" + 
			"	</tr>\r\n" + 
			"	<tr style=\"font-size:90%;\">\r\n" + 
			"		<td style=\"padding:0px 0px;\"><button type=\"button\"" + prior + " onclick=\"" + name + ".priorMonth();\" onmouseover=\"" + name + ".stopHide( this );\" style=\"width:100%; margin:0px;\">&lt;</button></td>" + 
			"		<td colspan=\"6\" align=\"center\">" + date.formatDate("MMMM YYYY") + "</td>\r\n" + 
			"		<td style=\"padding:0px 0px;\"><button type=\"button\"" + next  + " onclick=\"" + name + ".nextMonth();\"  onmouseover=\"" + name + ".stopHide( this );\" style=\"width:100%; margin:0px;\">&gt;</button></td>\r\n" + 
			"	</tr>\r\n" + 
			"	<tr height=\"20\" style=\"font-size:90%;\">\r\n" + 
			"		<td><img src=\"/img/pixTrans.gif\" height=\"1\" width=\"20\" /></td>\r\n";
	
	for ( var i = firstDay; i < 7; i++ )
		HTML += 
			"		<td class=\"calDayHeader\"><img src=\"/img/pixTrans.gif\" height=\"1\" width=\"20\" /><br/>" + days[i].substr(0, 2) + "</td>\r\n";
	
	for ( var i = 0; i < firstDay; i++ )
		HTML += 
			"		<td class=\"calDayHeader\"><img src=\"/img/pixTrans.gif\" height=\"1\" width=\"20\" /><br/>" + days[i].substr(0, 2) + "</td>\r\n";
	
	HTML += 
			"	</tr>\r\n" + 
			"	<tr style=\"font-size:90%;\">\r\n" + 
			"		<td class=\"calWeekNo\" style=\"cursor:default;\">" + bDate.priorDay( dayNo ).weekNo() + "</td>\r\n";
	
	for ( var i = dayNo; i > 0; i-- )
	{
		var
			prior = bDate.priorDay( i );
		
		HTML += 
			"		<td" + this.td( prior ) + ">" + prior.formatDate("d") + "</td>\r\n";
	}
	
	while ( bDate < eDate )
	{
		HTML += 
			"		<td" + this.td( bDate ) + ">" + bDate.formatDate("d") + "</td>\r\n";
		
		bDate = bDate.nextDay();
		dayNo = this.dayNo( bDate );
		
		if ( bDate < eDate && dayNo == 0 )
			HTML += 
			"	</tr>\r\n" + 
			"	<tr style=\"font-size:90%;\">\r\n" + 
			"		<td class=\"calWeekNo\" style=\"cursor:default;\">" + bDate.weekNo() + "</td>";
	}
	
	if ( dayNo )
	{
		for ( var i = 0; i < 20 && dayNo < 7; bDate = bDate.nextDay(), i++ )
		{
			HTML += "<td" + this.td( bDate ) + ">" + bDate.formatDate("d") + "</td>";
			dayNo++;
		}
	}
	
	HTML +=
			"	</tr>\r\n" + 
			"</table>";
	
	this.div.innerHTML = HTML;
}
//=================================================================================================
TUser = function( ID, fullname, username, eMail )
{
	this.ID       = ID;
	this.fullname = fullname;
	this.username = username;
	this.eMail    = eMail;
}
//-------------------------------------------------------------------------------------------------
TUser.prototype.toJS = function()
{
	var
		retVal = "new TUser( " + 
			valueString( this.ID ) + ", " + valueString( this.fullname ) + ", " + 
			valueString( this.username ) + ", " + valueString( this.eMail ) + ")";
	
	return retVal;
}
//-------------------------------------------------------------------------------------------------
TUser.prototype.toXML = function( root )
{
	if ( typeof( root ) == "undefined")
		root = "user";
	
	var
		retVal = "\r\n<" + root;
	
	if ( String( this.ID ) != "null")
		retVal += " ID=\"" + this.ID + "\"";
	
	retVal += ">";
	
	if ( this.fullname )
		retVal += "\r\n\t<fullname>" + this.fullname + "</fullname>";
	
	if ( this.username )
		retVal += "\r\n\t<username>" + this.username + "</username>";
	
	if ( this.eMail )
		retVal += "\r\n\t<eMail>" + this.eMail + "</eMail>";
	
	retVal += "\r\n</" + root + ">";
	
	return retVal;
}
//=================================================================================================
