	
	var gebDatum = '';
	
	searchAddress = function(){
		var ok = true;
		if (!formatZip($('register_postcode'))) ok = false;
		var pc = $('register_postcode').getValue();
		var housenr = $('register_huisnummer').getValue();
		housenr = parseInt(housenr);
		
		if (!isnumber(housenr)){
			$('register_huisnummer').value = '';
			ok = false;
		}else{
			$('register_huisnummer').value = housenr;
		}
		if (ok){
			// do postcode lookup:
			var wpsRPC = new wps.rpc;
			wpsRPC.debug = true;
			wpsRPC.createCall('AuthPhotoBeats', setAddress, this);
			wpsRPC.call('postcodeLookup', 'pc=' + pc, "nr="+housenr);
		}
	}

	setAddress = function(req){
		if (req.responseJSON){
			if (req.responseJSON.street) $('register_adres').value = req.responseJSON.street
			if (req.responseJSON.city) $('register_woonplaats').value = req.responseJSON.city
		}
	}
		
	formatZip = function(elem){
		elem = $(elem);
		try{
			if (elem.formatZipErr) {
				$(elem.formatZipErr).remove();
				elem.formatZipErr = null;
				elem.removeClassName('formElementError');
			}
		}catch(e){
			if (window.console) console.log(e);
		}			
		
		var pc = elem.getValue();		
		pc = pc.replace( /\s/g, "");
		if (!validateZip(pc)){
			// show error:
			var err = new Element('span').insert("Ongeldige postcode ");
			elem.formatZipErr = err;
			elem.hasError = true;
			elem.addClassName('formElementError');
			$(elem.id+'_error').insert(err);
			$(elem.id+'_error').show();
			return false;
		}

		// format pc:
		var pcNumber = parseInt(pc);
		var pcAlpha = pc.replace(pcNumber, "");
		pc = pcNumber + " " + pcAlpha;
		elem.value = pc;

		elem.hasError = false;
		return true;
	}
	
	
	validateZip = function(strPC){
		return typeof strPC=='string' ?strPC.match(/[1-9][0-9]{3} ?[a-zA-Z]{2}/)==strPC:false;
	}
	
	isnumber = function(a){
		return typeof a == 'number' && isFinite(a);
	}
	
	
	checkInschrijfForm = function(){
		// disable butttons:
		$('submit').disabled = true;
		$('reset').disabled = true;
		waiter();
	}
	
	checkUsername = function(elem){
		var username = $(elem).getValue();
		if (!username) return;
		// check username:
		var wpsRPC = new wps.rpc;
		wpsRPC.debug =true;
		wpsRPC.createCall('AuthPhotoBeats', _checkUsername);
		wpsRPC.call('checkUsername', 'username=' + username);
	}

	_checkUsername = function(req){
		$('username_error').show();
		if (req.responseJSON.message == 'true'){
			$('submit').disabled = false;
			$('username_error').update('<span style="color:green;">Gebruikersnaam: OK</span>');
			return;
		}else{
			$('submit').disabled = true;
			$('username_error').update('Gebruikersnaam: niet OK, kies een andere gebruikersnaam');
			return;
		}
	}
	
	checkEmailValue = function(elem){
		elem = $(elem);
		if (elem.getValue() == '' || !is_email(elem.getValue()) ){ 
			$('email_error').show();
			$('email_error').update("ongeldig email-adres");
			$('register_email').setStyle('background-color:#ffb6b6;');
		}else{
			$('register_email').setStyle('background-color:#b6ffc0;');
			$('email_error').hide();
		}
	} 
	
	checkAccountDetails = function(){
		var ok = true;
		if ($('register_username').getValue() == ''){
			$('username_error').show();
			$('username_error').update("Vul een gebruikersnaam in");
			$('register_username').setStyle('background-color:#ffb6b6;');
			ok = false;
		}else{
			$('register_username').setStyle('background-color:#b6ffc0;');
			$('username_error').hide();
		}

		if ($('register_password').getValue() == ''){
			$('password_error').show();
			$('password_error').update("Vul een wachtwoord in");
			$('register_password').setStyle('background-color:#ffb6b6;');
			ok = false;
		}else{
			$('register_password_check').setStyle('background-color:#b6ffc0;');
			$('password_check_error').hide();
		}
		
		if ($('register_password').getValue() != $('register_password_check').getValue()){
			$('password_check_error').show();
			$('password_check_error').update("De wachtwoorden komen niet overeen");
			$('register_password_check').setStyle('background-color:#ffb6b6;');
			ok = false;
		}else{
			$('register_password_check').setStyle('background-color:#b6ffc0;');
			$('password_check_error').hide();
		}
		
		if (ok){
			showPersonalDetails();
		}
	}
	
	showPersonalDetails = function(){
		$('account').hide();
		$('metadata').show();
	}
	
	checkForm = function(type){
		// check mandatory fields:
		var ok = true;
		$A($('register').getElementsByTagName('input')).each(
			function(elem){
				elem = $(elem);
				if (elem.getAttribute('mandatory')){
					if (elem.type == 'password'){
						var value = elem.value;
					}else{	
						var value = elem.getValue().replace(' ', '');
					}
					if (!value){
						$(elem.name + "_error").show();
						$(elem.name + "_error").update("Vul aub. een waarde in")
						elem.setStyle('background-color:#ffb6b6;');
						ok = false;
					}else{
						$(elem.name + "_error").hide();
						elem.setStyle('background-color:#b6ffc0;');
					}
				}
			}
		)
		// check selects:
		$A($('register').getElementsByTagName('select')).each(
			function(elem){
				elem = $(elem);
				if (elem.getAttribute('mandatory')){
					var value = elem.getValue().replace(' ', '');
					if (!value){
						$(elem.name + "_error").show();
						$(elem.name + "_error").update("Vul aub. een waarde in")
						elem.setStyle('background-color:#ffb6b6;');
						ok = false;
					}else{
						$(elem.name + "_error").hide();
						elem.setStyle('background-color:#b6ffc0;');
					}
				}
			}
		)	
		if (type!="updateAccount"){
			// now check some extra things:
			if ($('register_email').getValue() == '' || !is_email($('register_email').getValue()) ){ 
				$('email_error').show();
				$('email_error').update("ongeldig email-adres");
				$('register_email').setStyle('background-color:#ffb6b6;');
				ok = false;
			}else{
				$('register_email').setStyle('background-color:#b6ffc0;');
				$('email_error').hide();
			}
		}
		if (ok){
			submitRegistration(type);
		}
	}
	
	submitRegistration = function(type){
		$('submit').value = "Bezig met opslaan van gebruikersgegevens";
		var wpsRPC = new wps.rpc;
		wpsRPC.debug=true;
		
		wpsRPC.createCall('AuthPhotoBeats', '');
		wpsRPC.setMethod(type);
		$A($('register').getElementsByTagName('input')).each(
			function(elem){
				if (elem.id.indexOf('register') > -1){
					if (elem.id == 'register_nieuwsbrief'){
						if (elem.checked){
							wpsRPC.addArgument('userProp' + elem.name, "1");
						}else{
							wpsRPC.addArgument('userProp' + elem.name, "0");
						}
					}else{
						wpsRPC.addArgument('userProp' + elem.name, safeValue(elem.getValue()));
					}
				}
				elem.disabled = true;
			}
		)
		$A($('register').getElementsByTagName('select')).each(
			function(elem){
				if (elem.id.indexOf('register') > -1){
					wpsRPC.addArgument('userProp' + elem.name, elem.getValue());
				}
				elem.disabled = true;
			}
		)
		if ($('uid')) wpsRPC.addArgument("uid", $('uid').getValue());
		if (gebDatum) wpsRPC.addArgument("userPropgeboortedatum", gebDatum);

		if (type=="updateAccount"){
			var func = function(req){
				if (req.responseJSON.message == 'true'){
					$('inschrijfform').update("Je gegevens zijn aangepast, je ontvangt een email ter bevestiging.");
				}else{
					alert("Er is iets mis gegaan bij het opslaan van je gebruikersgegevens, neem alsjeblieft contact op met info@photobeats.nl om het probleem te melden.");
				}
			}					
		}else{
			var func = function(req){
					if (req.responseJSON.message == 'true'){
						$('inschrijfform').update("Je ontvangt nu een email met daarin een link om je nieuwe account te bevestigen, dan weten we zeker dat je inloggegevens kloppen en dan loopt straks alle communicatie goed, na de bevalling mag er natuurlijk niks misgaan.");
					}else{
						alert("Er is iets mis gegaan bij het opslaan van je gebruikersgegevens, neem alsjeblieft contact op met info@photobeats.nl om het probleem te melden.");
					}
				}					
		}
		wpsRPC.setCallback(func);
		wpsRPC.call();
	}
	

	
	is_email = function(emailStr) {
		var checkTLD=1;
		var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
		var emailPat=/^(.+)@(.+)$/;
		var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
		var validChars="\[^\\s" + specialChars + "\]";
		var quotedUser="(\"[^\"]*\")";
		var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
		var atom=validChars + '+';
		var word="(" + atom + "|" + quotedUser + ")";
		var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
		var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
		var matchArray=emailStr.match(emailPat);

		if (matchArray==null) {
			return false;
		}

		var user=matchArray[1];
		var domain=matchArray[2];

		for (i=0; i<user.length; i++) {
			if (user.charCodeAt(i)>127) {
				return false;
			}
		}

		for (i=0; i<domain.length; i++) {
			if (domain.charCodeAt(i)>127) {
				return false;
			}
		}
		
		if (user.match(userPat)==null) {
			return false;
		}

		var IPArray=domain.match(ipDomainPat);
		
		if (IPArray!=null) {
			for (var i=1;i<=4;i++) {
				if (IPArray[i]>255) {
					return false;
		   		}
			}
			return true;
		}
		
		 
		var atomPat=new RegExp("^" + atom + "$");
		var domArr=domain.split(".");
		var len=domArr.length;

		for (i=0;i<len;i++) {
			if (domArr[i].search(atomPat)==-1) {
				return false;
		   }
		}

		if (checkTLD && domArr[domArr.length-1].length!=2 && domArr[domArr.length-1].search(knownDomsPat)==-1) {
			return false;
		}

		if (len<2) {
			return false;
		}
		
		return true;
	}
	
	
	safeValue = function(value){
		return encodeURIComponent(value.stripTags());
	}
	
	requestPWReset = function(){
		var email = $('wachtwoordVergeten').getValue();;
		var wpsRPC = new wps.rpc;
		wpsRPC.debug = true;
		wpsRPC.createCall('AuthPhotoBeats', handlePWReset);
		wpsRPC.call('requestResetPW', 'email=' + email);
	}
	
	handlePWReset = function(req){
		if (req.responseJSON.message == "true"){
			alert("Je ontvangt nu een email met een link om je wachtwoord te resetten");
		}else{
		  	alert("Er is iets mis gegaan, waarschijnlijk is je email-adres niet bij ons bekend, probeer het met een ander email-adres of neem contact op met info@photobeats.nl");
		}
	}
	
	resetPW = function(){
		var pass = $('passReset').getValue();
		var pwRepeat = $('pwRepeat').getValue();
		
		if (pass != pwRepeat){
			alert("Je wachtwoorden komen niet overeen!");
			return;
		}
		var key = $('passKey').getValue();
		
		var wpsRPC = new wps.rpc;
		wpsRPC.debug = true;
		wpsRPC.createCall('AuthPhotoBeats', handlePWResetDef);
		wpsRPC.call('resetPW', 'pass='+ pass, "key="+key);
	}

	handlePWResetDef = function(req){
		if (req.responseJSON.message == "true"){
			alert("Je wachtwoord is gereset! Je kan nu inloggen met je nieuwe wachtwoord");
			window.location.href = "http://" + window.location.hostname + '/Login/';
		}else{
		  	alert("Er is iets mis gegaan, neem contact op met info@photobeats.nl");
		}
	}
	
	setGeboorteDate = function(obj){
//		$(this.instID + "_dateTimeDisplay").update(this.controller.lang.get('currentDate') + obj.date.toString());
		gebDatum = obj.date.getFullYear() + '/' + (obj.date.getMonth() + 1) + '/' +  obj.date.getDate();
	}
