//
// TESTING THE POSTCODE...
//
function initPCS() {

	var idPostcode = document.getElementById("Postcode");
	var idHuisnr = document.getElementById("Huisnr");
	var idVerdubbelaar = document.getElementById("Verdubbelaar");
	var idTelefoonnummer = document.getElementById("Telefoonnummer");
	var idRekeningnummer = document.getElementById("Rekeningnummer");
	var idStraatnaam = document.getElementById("Straatnaam");
	var idWoonplaats = document.getElementById("Woonplaats");
	var idAanhef = document.getElementById("Aanhef");
	var idVoorletters = document.getElementById("Voorletters");
	var elClassVoorletters = document.getElementsByClassName("Voorletters", "input");

	var tagsSelect = document.getElementsByTagName("select");
	if(tagsSelect[0]) {
		var tagSelect = tagsSelect[0];
	}
	else {
		var tagSelect = false;
	}
	
	if(idVoorletters)	{
		if(document.addEventListener)	{
			// REGISTERING THE EVENTS FOR DOM COMPLIANT BROWSERS
			idVoorletters.addEventListener("blur", voorlettersChanged, false);
		}	else {
			// REGISTERING THE EVENTS FOR IE
			idVoorletters.attachEvent("onblur", voorlettersChanged);
		}
	}

	if(elClassVoorletters)	{
		for (var i=0; i < elClassVoorletters.length; i++) {
			if(document.addEventListener)	{
				// REGISTERING THE EVENTS FOR DOM COMPLIANT BROWSERS
				elClassVoorletters[i].addEventListener("blur", voorlettersChanged, false);
			}	else {
				// REGISTERING THE EVENTS FOR IE
				elClassVoorletters[i].attachEvent("onblur", voorlettersChanged);
			}
		}
	}
	
	if (idPostcode && idHuisnr)
	{
		if (document.addEventListener)
		{
			// REGISTERING THE EVENTS FOR DOM COMPLIANT BROWSERS
			idPostcode.addEventListener("change",postcodeChanged,false);
			idHuisnr.addEventListener("change",postcodeChanged,false);
			idPostcode.addEventListener("blur",postcodeChanged,false);
			idHuisnr.addEventListener("blur",postcodeChanged,false);

		}
		else
		{
			// REGISTERING THE EVENTS FOR IE
			idPostcode.attachEvent("onchange",postcodeChanged);
			idHuisnr.attachEvent("onchange",postcodeChanged);
			idPostcode.attachEvent("onblur",postcodeChanged);
			idHuisnr.attachEvent("onblur",postcodeChanged);
		}
		if(idStraatnaam.value == "" || idWoonplaats.value == "")
		{
			setTimeout("postcodeChanged()", 500);
		}
	}
	if (idVerdubbelaar)
	{
		if (document.addEventListener)
		{
			// REGISTERING THE EVENTS FOR DOM COMPLIANT BROWSERS
			idVerdubbelaar.addEventListener("click",VerdubbelaarChanged,false);
			var radios = document.getElementById ('Aantalloten');
			if (radios)
			{
				var inputs = radios.getElementsByTagName ('input');
				if (inputs)
				{
					for (var i = 0; i < inputs.length; ++i)
					{
						if (inputs[i].type == 'radio')
						{
							inputs[i].addEventListener("click",VerdubbelaarChanged,false);
						}
					}
				}
			}
		}
		else
		{
			// REGISTERING THE EVENTS FOR IE
			idVerdubbelaar.attachEvent("onclick",VerdubbelaarChanged);
			var radios = document.getElementById ('Aantalloten');
			if (radios)
			{
				var inputs = radios.getElementsByTagName ('input');
				if (inputs)
				{
					for (var i = 0; i < inputs.length; ++i)
					{
					if (inputs[i].type == 'radio')
					{
						inputs[i].attachEvent("onclick",VerdubbelaarChanged);
					}
					}
				}
			}
		}
		VerdubbelaarChanged();
	}
	if (idTelefoonnummer)
	{
		if (document.addEventListener)
		{
			// REGISTERING THE EVENTS FOR DOM COMPLIANT BROWSERS
			idTelefoonnummer.addEventListener("blur",telefoonnummerChanged,false);

		}
		else
		{
			// REGISTERING THE EVENTS FOR IE
			idTelefoonnummer.attachEvent("onblur",telefoonnummerChanged);
		}
	}
	
	if (idRekeningnummer)
	{
		if (document.addEventListener)
		{
			// REGISTERING THE EVENTS FOR DOM COMPLIANT BROWSERS
			idRekeningnummer.addEventListener("blur",rekeningnummerAddp,false);

		}
		else
		{
			// REGISTERING THE EVENTS FOR IE
			idRekeningnummer.attachEvent("onblur",rekeningnummerAddp);
		}
	}
	
	if (idAanhef)
	{
		qsAanhef = "";
		//var qsAanhef = getQueryParamValue("aanhef");
		if ("" != qsAanhef) {
			var inputs = idAanhef.getElementsByTagName ('input');
			if (inputs)
			{
				for (var i = 0; i < inputs.length; ++i)
				{
					if ((inputs[i].type == 'radio') && (inputs[i].value == qsAanhef))
					{
						inputs[i].checked = true;
					}
				}
			}
		}
	}
	
	if(tagSelect)
	{
		if(document.addEventListener)
		{
			// REGISTERING THE EVENTS FOR DOM COMPLIANT BROWSERS
			tagSelect.addEventListener("change", selectChanged, false);
		}
		else
		{
			// REGISTERING THE EVENTS FOR IE
			tagSelect.attachEvent("onchange", selectChanged);
		}
		
		selectChanged();
	}
	var idAddLot = document.getElementById("addLotNr");
	if (idAddLot) { 
		if(document.addEventListener) {
			// REGISTERING THE EVENTS FOR DOM COMPLIANT BROWSERS
			idAddLot.addEventListener("click", addLotNummer, false);
		} else {
			// REGISTERING THE EVENTS FOR IE
			idAddLot.attachEvent("onclick", addLotNummer);
		}
	}
	
	for (i=1;i<6;i++) {
		var lotEl = document.getElementById("lotnummer"+i);
		if(lotEl != null) {
	        if(document.addEventListener) {
	        	lotEl.addEventListener("blur", toUpperCase, false);
	        	lotEl.addEventListener("blur", checkForDuplicateLots, false);
	        } else {
	        	lotEl.attachEvent("onblur", toUpperCase);
	        	lotEl.attachEvent("blur", checkForDuplicateLots);
	        }
	    }
	}
	hideLotNummers();
	
	disableCopyForElement(document.getElementById("Vultercontrolenogmaalsuwe-mailadresin"));
	disableCopyForElement(document.getElementById("E-mailadres"));
	
}

function disableCopyForElement(elm){
	if (elm!=null) {
		elm.setAttribute('onKeyDown',"return DisableCtrlKey(event)");
		elm.setAttribute('oncopy','return false;');
		elm.setAttribute('onpast','return false;');
		elm.setAttribute('oncut','return false;');
	}
}
function DisableCtrlKey(e) {
	var code = (document.all) ? event.keyCode:e.which;
	if (parseInt(code)==17) {
		if (window.event) {//IE
			window.event.returnValue = false;
		} else {//Firefox
			e.preventDefault();
		}
	}
}
var lastPcChecked = null;
var lastHuisnrChecked = null;

function selectChanged(e)
{
	var tagsSelect = document.getElementsByTagName("select");
	if(tagsSelect[0]) {
		var tagSelect = tagsSelect[0];
		var nrLots = tagSelect.value;
	
		changeNrLots(nrLots);
	}
}

function voorlettersChanged(e) {
	// IE doesn't handle this object due to event bubbling, so retreive objects all over again
	var elVoorletters = document.getElementById('Voorletters');
	var elClassVoorletters = document.getElementsByClassName("Voorletters", "input");
	if(elVoorletters)	{
		changeVoorletters(elVoorletters);
	}
	if(elClassVoorletters)	{
		for (var i=0; i < elClassVoorletters.length; i++) {
			changeVoorletters(elClassVoorletters[i]);
		}
	}
}

function changeVoorletters(elVoorletters) {
	var voorletters = elVoorletters.value;
	if(voorletters != null && voorletters != "") {
		var voorletters_length = 5;
		var voorletters_pattern = /[^a-z]/ig;

		var voorletters = voorletters.replace(voorletters_pattern, '');
		var voorletters = voorletters.toUpperCase();
		var voorletters_formatted = '';

		for(var i = 0; i < voorletters.length && i < voorletters_length; i++) {
			voorletters_formatted += voorletters.charAt(i) + '.';
		}

		voorletters_formatted = voorletters_formatted.replace(/^\s+/, '');
		voorletters_formatted = voorletters_formatted.replace(/\s+$/, '');
		voorletters_formatted = voorletters_formatted.replace(/^T.H/, 'Th');

		elVoorletters.value = voorletters_formatted;
	}	
}

function toUpperCase(evt) {
	var elm = (evt.target) ? evt.target : evt.srcElement;
	if (elm !=null && elm != "") {
	    var val = elm.value;
	    if(val != null && val != "") {
	    	elm.value = val.toUpperCase();
	    }
	}
}

function postcodeChanged(e)
{
	var idPostcode = document.getElementById("Postcode");
	var idHuisnr = document.getElementById("Huisnr");
	var idStraatnaam = document.getElementById("Straatnaam");
	var idWoonplaats = document.getElementById("Woonplaats");

	var postcode = idPostcode.value;
	var huisnummer = idHuisnr.value;

	if (postcode != null && postcode != "")
	{
		postcode = postcode.toUpperCase();
		postcode = postcode.replace(" ", "");
		postcode = postcode.substr(0,6);
		idPostcode.value = postcode;
	}

	if (idStraatnaam && idWoonplaats && (postcode != lastPcChecked || huisnummer != lastHuisnrChecked))
	{
		if (postcode != null && postcode != "" && huisnummer != null && huisnummer != "")
		{
			lastPcChecked = postcode;
			lastHuisnrChecked = huisnummer;
			testPostcode(postcode, huisnummer);
		}
		else
		{
			idStraatnaam.value= "";
			idWoonplaats.value= "";
			idStraatnaam.disabled = true;
			idWoonplaats.disabled = true;
			idStraatnaam.className = 'fieldDis';
			idWoonplaats.className = 'fieldDis';
			setLabel(idStraatnaam.parentNode,"txtGrey");
			setLabel(idWoonplaats.parentNode,"txtGrey");
		}
	}
}

function telefoonnummerChanged(e)
{
	var idTelefoonnummer = document.getElementById("Telefoonnummer");
	if (idTelefoonnummer.value == "06-")
	{
		idTelefoonnummer.value = "";
	}
}

function rekeningnummerAddp(e)
{
	var idRekeningnummer = document.getElementById("Rekeningnummer");
	var rekeningnummer_length = idRekeningnummer.value.length;
	var rekeningnummer_matcher = /(?=.*[^0-9])/;
	
	if (rekeningnummer_length < 8 && rekeningnummer_length != 0 && !idRekeningnummer.value.match(rekeningnummer_matcher))
	{
		idRekeningnummer.value = "P" + idRekeningnummer.value;
	}
}

function VerdubbelaarChanged(e)
{
	var idVerdubbelaar = document.getElementById("Verdubbelaar");
	var jpv = false;
	if (idVerdubbelaar) {
		jpv = idVerdubbelaar.checked;
	}

	var nrLots = 0;
	var radios = document.getElementById ('Aantalloten');
	if (radios)
	{
		var inputs = radios.getElementsByTagName ('input');
		if (inputs)
		{
			for (var i = 0; i < inputs.length; ++i)
			{
				if (inputs[i].type == 'radio' && inputs[i].checked)
				{
					nrLots = inputs[i].value;
					sendVarToFlash("kieslotenFlash", "nieuwAantal", inputs[i].value); // geef waarde van radiobutton door aan Flash
				}
			}
		}
	}
	else
	{
		var tagsSelect = document.getElementsByTagName("select");
		if(tagsSelect[0]) {
			var tagSelect = tagsSelect[0];
			var nrLots = tagSelect.value;
		}
		else
		{
			var nrLots = 2;
		}
	}
	
	changeNrLots(nrLots);

	var mvd = document.getElementById("metverdubbelaar");
	var zvd = document.getElementById("zonderverdubbelaar");
	if (mvd && zvd) {
		if (jpv) {
			mvd.style.display = "inline";
			zvd.style.display = "none";
		} else {
			mvd.style.display = "none";
			zvd.style.display = "inline";
		}
	}	
}

function changeNrLots(nrLots)
{
	var idVerdubbelaar = document.getElementById("Verdubbelaar");
	var jpv = false;
	if (idVerdubbelaar) {
		jpv = idVerdubbelaar.checked;
	}
	
	var jpvid = document.getElementById("jpv");
	if ((nrLots > 0) && jpvid) {
		if (nrLots > 1) {
			if (jpv) {
				jpvid.innerHTML =	"Ik ga meespelen met " + nrLots + " loten &agrave; &euro; 10,75 met StraatprijsVerdubbelaar.";
			}
			else {
				jpvid.innerHTML =	"Ik ga meespelen met " + nrLots + " loten &agrave; &euro; 9,75.";
			}
		} else {
			if (jpv) {
				jpvid.innerHTML =	"Ik ga meespelen met " + nrLots + " lot &agrave; 10,75 met StraatprijsVerdubbelaar.";
			} else {
				jpvid.innerHTML =	"Ik ga meespelen met " + nrLots + " lot &agrave; &euro; 9,75.";
			}
		}
	}
	
	var nrl = document.getElementById("nrloten");
	if ((nrLots > 0) && nrl) {
		if (nrLots > 1) {
			nrl.innerHTML = nrLots + " loten";
		} else {
			nrl.innerHTML = nrLots + " lot";
		}		
	}
}

function setLabel(labelElement,classElement)
{
	var labelElements = labelElement.getElementsByTagName('label');

	for(var i = 0; i < labelElements.length; i++)
	{
		labelElements[i].className = classElement;
	}
}

function testPostcode(postcode, huisnummer)
{
	var errormessage = "Er is iets mis gegaan. Uw postcode- en huisnummercombinatie is niet gevonden. Vul alstublieft zelf uw straatnaam en woonplaats in.";
	var myPostcodeScript = "/web/wcbservlet/nl.gx.ngdl.ngdlformcomponents.servlet.zipcodexmlhttprequestservlet?zipcode=" + postcode + "&housenumber=" + huisnummer;

	if (0 > postcode.search(/[0-9]{4}[A-Za-z]{2}/))
	{	return false; }

	var xmlHttp = null;
	// Mozilla, Opera, Safari en Internet Explorer 7
	if (typeof XMLHttpRequest != 'undefined')
	{
		xmlHttp = new XMLHttpRequest();
	}
	if (!xmlHttp)
	{
		// IE<7
		try
		{
		xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e)
		{
			try
			{
				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e)
			{
				xmlHttp = null;
			}
		}
	}
	if (xmlHttp)
	{
		xmlHttp.open('GET', myPostcodeScript, true);
		xmlHttp.onreadystatechange = function ()
		{
			var idStraatnaam = document.getElementById("Straatnaam");
			var idWoonplaats = document.getElementById("Woonplaats");
			if (idStraatnaam && idWoonplaats)
			{
				if (xmlHttp.readyState == 4)
				{
					var responseString = xmlHttp.responseText;
					if ((responseString != "") && (responseString.indexOf("|")>0))
					{
						var myPlaats = responseString.split("|");
						idStraatnaam.value = myPlaats[0];
						idWoonplaats.value = myPlaats[1];
						// In Safari disabling fields leads to not showing the input anymore,
						// however this is not a strict problem because the value is still present.
						// This is probably a bug (non-expected behaviour) in Safari and needs to be fixed (by Apple).
						idStraatnaam.disabled = true;
						idWoonplaats.disabled = true;
						idStraatnaam.className = 'fieldDis';
						idWoonplaats.className = 'fieldDis';
						setLabel(idStraatnaam.parentNode,"txtGrey");
						setLabel(idWoonplaats.parentNode,"txtGrey");
						setFormularError(document.getElementById("Postcode"), false, errormessage, true);
					}
					else
					{
						idStraatnaam.value = "";
						idWoonplaats.value = "";
						idStraatnaam.disabled = false;
						idWoonplaats.disabled = false;
						idStraatnaam.className = 'formular';
						idWoonplaats.className = 'formular';
						setLabel(idStraatnaam.parentNode,"");
						setLabel(idWoonplaats.parentNode,"");
						setFormularError(document.getElementById("Postcode"), true, errormessage, true);
					}
				}
			}
		};
		xmlHttp.send(null);
	}
	else
	{
		return false;
	}
}

//
//	This function finds the parent div 'formular' and encapsulates it in a div class="formularError".
//	This will result in a red box around formular.
//	input:
//		- formElement -> the element which contains (or doesn't contain) a error
//		- isFout -> boolean tests is the formelement is fout
//		- message -> the message to show when it's isFout (else the old message is cleared and the red box is removed)
//		- toonMessage -> als deze op true staat dan tonen we de error message in het form...anders in een alertbox
//

function setFormularError(formElement, isFout, message, toonMessage)
{

	var parent;			// the parent
	var depth = 1;			// current depth
	var maxDepth = 4;		// max search depth
	var divClass = "formular";	// the class we re searching for
	var errorHTMLTag = "<p class='txtRed'>"+message+"</p>"; // the message set within a html tag for making red (see css)
	// search the formular div
	if (!formElement) {
		if(isFout && toonMessage && message != "@errormessage@") { alert(message); }
		return false;
	}
	// if there is no parentnode, the element is a radiobutton,
	// so we have to get the first arrayelement to continue
	if (!formElement.parentNode) formElement = formElement[0];
	parent = formElement;
	
	var isFound = false;
	// loop through the parents until we find formular or until we went too deep
	while(parent.parentNode && !isFound && depth < maxDepth)
	{
		parent = parent.parentNode;
		isFound = (parent.className == divClass);
		depth++;
	}
	// if we didn t find the formular, the element was not in a subform...
	// to make the element red we select the parent instead
	if(!isFound)
	{
		parent = formElement.parentNode;
	}

	// we set the parent div class to 'formularError'.
	// This will make the formelement red (see css) and the tekst errormessage red
	if(isFout)
	{
		parent.parentNode.className = 'formularError';

		if(toonMessage && message != "@errormessage@")
		{
				// now we set the errormessage
			var divs = parent.parentNode.getElementsByTagName("div");
			var isFound = false;
			for (var i = 0; i < divs.length; i++)
			{
				if(!isFound)
				{
					classtype = divs[i].className;
					if ( classtype == "errorMessage")
					{
						// set the message
						divs[i].innerHTML = errorHTMLTag;
						isFound = true;
					}
				}
			}
			// als we niet de formularError div kunnen vinden tonen we de error in een alertbox
			if(!isFound)
			{
				alert(message);
			}
		}
	}
	else
	{
		if (parent.parentNode.className == 'formularError') {
			parent.parentNode.className = parent.parentNode.parentNode.className;
		}

		if(toonMessage)
		{
			// now we set the errormessage
			var divs = parent.parentNode.getElementsByTagName("div");
			var isFound = false;
			for (var i = 0; i < divs.length; i++)
			{
				if(!isFound)
				{
					classtype = divs[i].className;
					if ( classtype == "errorMessage")
					{
						// set the message
						divs[i].innerHTML = "";
						isFound = true;
					}
				}
			}
		}
	}
}
function checkForDuplicateLots(){
	for (i=1;i<6;i++) {
		var lotEl1 = document.getElementById("lotnummer"+i);
		if (lotEl1!=null && lotEl1.value!='') {
			if (!isLotNummerValid(lotEl1.value)) {
				var message = 'Er is iets mis gegaan. Het ingevulde lotnummer is niet juist. ';
				message += 'Een lotnummer bestaat uit een postcode en een volgnummer. ';
				message += 'VB: 1071GK012. Wilt u het lotnummer nogmaals invullen?';
				setFormularError(lotEl1, true, message, true);
				return false;
			}
			// check for duplicate nrs
			for (j=1;j<6;j++) {
				if(i==j) {
					continue;
				}
				var lotEl2 = document.getElementById("lotnummer"+j);
				if (lotEl2!=null && lotEl2.value!='') {
					if (lotEl1.value.toUpperCase()==lotEl2.value.toUpperCase()) {
						var message = 'Er is iets mis gegaan. Heeft u misschien hetzelfde lotnummer nogmaals ingevuld? ';
						message += 'Een lotnummer is uniek, dus het is niet mogelijk om een lotummer meerdere keren in te vullen.';
						setFormularError(lotEl2, true, message, true);
						return false;
					}
				}
			}
		}
		
	}
	setFormularError(document.getElementById("lotnummer1"), false, "", true);
	return true;
}
function hideLotNummers() {
	for (i=2;i<6;i++) {
		var lotEl = document.getElementById("lotnummer"+i);
		if (lotEl!=null) {
			if (lotEl.value.length>3) {
				continue;
			}
			lotEl.style.display='none';
			// hide BRs
			var br = lotEl.parentNode.previousSibling;
			if (br.nodeName=='BR'){ //IE
				br.style.display='none';
			}
			var br2 = br.previousSibling;
			if (br2.nodeName=='BR'){ //FF
				br2.style.display='none';
			}
		}
	}
}
function isLotNummerValid(lotNr) {
	if (lotNr!=null && lotNr.length!=9) {
		//console.log('geen geldige waarde')
		return false;
	}
	if (0 > lotNr.search(/[1-9]{1}[0-9]{3}[A-Za-z]{2}[0-9]{3}/)) {
		//console.log('geen lot format')
		return false; 
	}
	return true;
}
function addLotNummer(e) {
	if (checkForDuplicateLots()) {
		for (i=2;i<6;i++) {
			var lotEl = document.getElementById("lotnummer"+i);
			if (lotEl!=null) {
				if (lotEl.style.display=='none') {
					if (isLotNummerValid(document.getElementById("lotnummer"+(i-1)).value)) {
						showLotNr(i);
						return;
					} else {
						//console.log('de waarde in het vorige element is ongeldig')
					}
				}
			}
		}
	}
}
function showLotNr(x) {
	var lotEl = document.getElementById("lotnummer"+x);
	if (lotEl!=null) {
		var br = lotEl.parentNode.previousSibling;
		if (br.nodeName=='BR'){ //IE
			br.removeAttribute('style');
		}
		var br2 = br.previousSibling;
		if (br2.nodeName=='BR'){ //FF
			br2.style.display='inline';
			br2.removeAttribute('style');
		}
		lotEl.style.display='inline';
	}
}

if (document.getElementsByClassName == undefined) {
	document.getElementsByClassName = function(className, tagName)	{
		var hasClassName = new RegExp("(?:^|\\s)" + className + "(?:$|\\s)");
		if (tagName == null || tagName == '') tagName = '*';
		var allElements = document.getElementsByTagName(tagName);
		var results = [];

		var element;
		for (var i = 0; (element = allElements[i]) != null; i++) {
			var elementClass = element.className;
			if (elementClass && elementClass.indexOf(className) != -1 && hasClassName.test(elementClass))
				results.push(element);
		}

		return results;
	}
}


