	var AjaxOutput = false;
	var ObjAJAX = {
		loaded: false,
		req: false,
		id: "e-area",
		last_request: (new Date()).getTime(),
		load: function() {
			if(ObjAJAX.loaded == false) {
				this.loaded = ObjAJAX.loadRequest(); //probeer te laden
			}
			return ObjAJAX.loaded;
		},
		loadRequest: function() {
			if (window.XMLHttpRequest) { // Object voor huidige vensters: Firefox, Safari, Opera,...
				this.req = new XMLHttpRequest();
				if (this.req.overrideMimeType) {
					this.req.overrideMimeType('text/xml');
				}
				return true;
			} 
			else if (window.ActiveXObject) { // ActiveX versie: Internet Explorer
				try {
					this.req = new ActiveXObject("Msxml2.XMLHTTP");
				} 
				catch (e) {
					try {
						this.req = new ActiveXObject("Microsoft.XMLHTTP");
					} 
					catch (e) {}
				}
				return true;
			}
			return false;
		},
		GETRequest: function (url, data, func) {
			if (!this.load()) return false;
			this.req.open('GET', url+'?'+data+'&sid='+Math.random(), true);
			if (func) this.req.onreadystatechange = func;
			this.req.send(null);
			return true;
		},
		POSTRequest: function (url, data, func) {
			if (!this.load()) return false;
			this.req.open('POST', url, true);
			if (func) this.req.onreadystatechange = func;
			this.req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			this.req.setRequestHeader("Content-length", data.length);
			this.req.setRequestHeader("Connection", "close");
			this.req.send(data);
			return true;
		},
		fetchResult: function() {
			if(this.req.readyState != 4) return false;
			else if (this.req.status != 200) return 'Fout: ' + this.req.statusText;
			else return this.req.responseText;
		}
	}
	
	function newImage(arg) {
		if (document.images) {
			rslt = new Image();
			rslt.src = arg;
			return rslt;
		}
	}

	function changeImages() {
		if (document.images && (preloadFlag == true)) {
			for (var i=0; i<changeImages.arguments.length; i+=2) {
				document[changeImages.arguments[i]].src = changeImages.arguments[i+1];
			}
		}
	}

	var preloadFlag = false;
	function preloadImages() {		
		if (document.images) {
			img1 = newImage("img/menuitem_bg_hover.png");
			img2 = newImage("img/input_bg_hover.png");
			img3 = newImage("img/menu_dot_hover.png");
			img4 = newImage("img/loading.gif");
			img5 = newImage("img/popup.png");
			preloadFlag = true;
		}	
	}

	function hideURL() {
		window.status = "";
	}
	
	function changeInput(e, border) {
		var el = window.event ? event.srcElement : e.target;
		if (el.tagName=="INPUT" && el.type=="text") {
			el.style.border = border;
			el.style.backgroundImage = "url('img/input_bg_hover.png')";
		}
	}

	function switchFormClass(form, formItem, hoverClass) {
		form.elements[formItem].className = hoverClass;
	}
	
	function switchClass(menuItem, hoverClass) {
		var element = document.getElementById(menuItem).className = hoverClass;
	}
	
	function commitAjax() {	
		if (ObjAJAX.req.readyState < 4) {
			document.getElementById('loading_small').style.display = "block";
		}

		if (ObjAJAX.req.readyState == 4 && ObjAJAX.req.status == 200) {
			AjaxOutput = true;
			if(ObjAJAX.req.responseText) {
				var e = displayErrors(ObjAJAX.req.responseText);
			}
			else {
				var e = displayErrors('');
			}
		}
	}
	
	function displayErrors(rText) {
		document.getElementById('loading_small').style.display = "none";
		if(rText == '' && AjaxOutput) document.forms[0].submit();
		else {
			if(rText != '') {
				document.getElementById(ObjAJAX.id).innerHTML = "<ul>" + rText + "</ul>"; 
				document.getElementById(ObjAJAX.id).style.display = "block";			
			}
			AjaxOutput = false;
		}

		return false;
	}
	
	function checkForm(form, url) {		
		var data = ""; var error = ""; var errorNum = 0;
		var errorList = new Array();
		
		// check for empty or non-permitted fields
		for(var i = 0; i < document.forms[form].elements.length ; i++) {
			errorNum = errorList.length;
			var el = document.forms[form].elements[i];
			
			if(el.type != "submit" && el.type != "reset" && el.type != "button") {				
				// check ALL fields for valid characters
				if(!(/^[\w\d\._\-\|\'#@\(\),\ \{\}\^%$£µ\*]*$/.test(el.value)) && el.type.indexOf('select') < 0) {
					errorList.push(el.alt + " bevat ongeldige tekens en moet beginnen met een letter.");
				}
				
				// check INPUT ['text']
				if(el.type == "text" && el.name.indexOf('opt') < 0) {
					if(el.value == "" || el.value == null) { errorList.push(el.alt + " niet ingevuld."); }
					else if(el.name == "username" && el.value.length < 3) {
						// validate username chars
						errorList.push(el.alt + " vereist min. 3 karakters.");
					}
					else if(el.name == "username" && !(/^[\w\d]+(.)*$/.test(el.value))) {
						// validate username chars
						errorList.push(el.alt + " moet met letter/getal beginnen.");
					}
					else if(el.name == "email" && !(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(el.value))) {
						// validate e-mail
						errorList.push(el.alt + " is ongeldig.");
					}
				}
				// check INPUT ['text']
				else if(el.type == "password") {
					if(el.value == "" || el.value == null) errorList.push(el.alt + " niet ingevuld.");
					else if(el.value.length < 5) errorList.push(el.alt + " vereist min. 5 karakters.");
				}
				// check INPUT ['select']
				else if(el.type.indexOf('select') >= 0 && el.name.indexOf('opt') < 0) {
					if(el.selectedIndex == 0) errorList.push("Geen keuze gemaakt.");
				}
				
				el.className = "input";
				if(errorList.length > errorNum) { el.className = "input input_error"; }
			}
		}
		
		// check for specific values if all fields are legal
		if(errorNum == 0) {			
			for(var i = 0; i < document.forms[form].elements.length ; i++) {
				if(document.forms[form].elements[i].type == "checkbox" && !document.forms[form].elements[i].checked) data += document.forms[form].elements[i].name + "=&";
				else data += document.forms[form].elements[i].name + "=" + document.forms[form].elements[i].value + "&";
			}
			ObjAJAX.POSTRequest(url, data, commitAjax);
		}
		else {
			for (err in errorList) {
				error += "<li>" + errorList[err] + "</li>";
			}
		}	

		return displayErrors(error);
	}