// COLForm.js
/*
*/

function resetErrorLabels() {
	var f = document.getElementById('ApplicationForm');
	var labels = f.getElementsByTagName('Label');

	for (var i=0; i < labels.length; i++) {
		var labelid = labels[i].id;
		if (labelid && labelid.substr(0,3) == "lbl") {
			var label =  document.getElementById(labelid);
			if (label == null) {
				alertDeveloper("het label '" + labelid + "' bestaat niet.");
			}
			else{
				label.style.color = "#003481";
			}
		}
	}
}


// Markeer een element als error (rood) of normaal.
// Parameters
//   obj = het element waarbij de fout (niet meer) optreedt.
//   valid = er is een error indien valid false is.
// Met het oog op debugging wordt een alertDeveloper gegeven
// indien een attribuut niet bestaat.
function markError(obj, valid) {
	if (valid)
		return;
		
	var idvalue = obj.getAttribute('id');
	if (idvalue == null) {
		alertDeveloper("het object '" + obj.name.value + "' heeft geen id-element.");
		return;
	}
	
	var label =  document.getElementById('lbl' + idvalue);

	if (label == null) {
		alertDeveloper("het label 'lbl" + idvalue + "' bestaat niet.");
	}
	else{
		label.style.color = "red";
	}
}

// Verzamel de Input (text en checkbox)- en Select elementen
// en stop ze in een object-array.
function gatherFields() {
	var objects = new Array();

	var f = document.getElementById('ApplicationForm');
	
	var inputs = f.getElementsByTagName('Input');
	for (var i = 0; i < inputs.length; i++) {
		if (inputs[i].type == 'checkbox') {
			if (inputs[i].checked) {
				objects.push(inputs[i]);
			}
		} else {
			objects.push(inputs[i]);
		}
	}
	var selects = f.getElementsByTagName('select');
	for (var i = 0; i < selects.length; i++) {
		objects.push(selects[i]);
	}

	var textareas = f.getElementsByTagName('textarea');
	for (var i = 0; i < textareas.length; i++) {
		objects.push(textareas[i]);
	}
	
	return objects
}

function isempty(value) {
	return trim(value) == '';
}

//http://www.joriso.nl/verhaaltjes-webdevelopment-javascript_trim.html
// Verwijder begin- en eindespaties.
function trim(value) {
  value = value.replace(/^\s+/,''); 
  value = value.replace(/\s+$/,'');
  return value;
}

function invokeUpdateMethod(e) {
	if (!e) var e = window.event;
	var element = (e.target) ? e.target : e.srcElement;
	invokeUpdate(element);
}

// clear de lijst met woonplaatsen
function setTownToForeigncountry(townObj, foreigncountry) {
	//townObj.options = [];	//clear the array;
	townObj.readOnly = false;
	townObj.options.length = 1;
	townObj.options[0] = new Option(foreigncountry, foreigncountry);
	townObj.readOnly = true;
}

// Voeg een eventhandler toe. Als het element niet bestaat,
// doe niets. (of geef een developerAlert).
function attachHandler(idvalue) {
	if (document.getElementById(idvalue) != null)
		document.getElementById(idvalue).onchange = invokeUpdateMethod;
	//else
		//alertDeveloper("het element " + idvalue + " bestaat niet in attachHandler().");
}

// Voeg onchange event handlers toe aan bepaalde elementen.
// Bereid het formulier voor.
function init() {

	attachHandler("InternalPromotionCode");
	attachHandler("DateOfBirth");
	attachHandler("DateOfBirthSpouse");
	attachHandler("EmployerAddressPostcode");
	attachHandler("EmployerAddressPostcodeSpouse");
	attachHandler("AddressPostcode");
	attachHandler("MaritialStatusType");
	attachHandler("DeferredPaymentTerm");
	attachHandler("DeferredDate");
	attachHandler("CardType");
	
	// Bedragen moeten geformatteerd worden met komma's.
	// Dat gebeurt met onchange handlers, die hier worden vastgehaakt.
//	attachHandler("CreditAmount");

	prepareForm();
	setSelectObjects();
}

function setSelect(obj, value) {
	for (var i = 0;i < obj.length; i++) {
		var optionValue = obj.options[i].value;
		if (optionValue == value) {
			obj.options[i].selected = true;
		}
	}
}

// Roep de selectmethode aan die ingevuld is in het attribuut '',
// indien dat attribuut bestaat.
function setSelectObjects(){
	var objects = new Array();

	var f = document.getElementById('ApplicationForm');
	var selects = f.getElementsByTagName('select');
	for (var i = 0; i < selects.length; i++) {
		objects.push(selects[i]);
	}

	for (i=0; i < objects.length; i++) {
		var obj = objects[i];
		setSelectMethod = obj.getAttribute('setSelect');
		if (setSelectMethod != null) {
			setSelectMethod = setSelectMethod.replace(/this/, 'obj');
			eval(setSelectMethod);
		}
	}
}

// Retourneert de floatwaarde van een bedrag, nadat decimale komma vervangen is door decimale punt.
// Als het veld leeg is, retourneert de functie het getal nul.
function getFloat(amount) {
	if (isempty(amount)) return 0.0;
	return parseFloat(amount.replace(",", "."));
}

function calculateCreditAmount() {
	var aankoopbedrag = getFloat(document.getElementById('GoodsCosts').value);
	var voorschot =  getFloat(document.getElementById('AdvancedAmount').value);
	var kredietbedrag = aankoopbedrag - voorschot;
	if (kredietbedrag < 0)
		kredietbedrag = 0;
	document.getElementById('CreditAmount').value =	kredietbedrag.toFixed(2).replace(".", ",");;
	
}

// Maak een Belgisch getal:
// Wijzig de value van een object door twee decimalen achter de punt
// te zetten en dan de punt te vervangen door een komma.
function formatCurrency(obj) {
	var veld = obj.value;

	if (!isempty(veld)) {
		var bedrag = parseFloat(obj.value);
		obj.value = bedrag.toFixed(2).replace(".", ",");
	}
}

function formatIntegerNumber(obj) {
	var veld = obj.value;

	if (!isempty(veld)) {
//		var bedrag = parseFloat(obj.value);
//		obj.value = bedrag.toFixed(0);
//		var bedrag = parseFloat(obj.value);
//		obj.value = bedrag.replace(/./, "");
//		obj.value = veld;
	}
}

function showMessage(fieldName, message) {
	procWin.close();
	if (document.getElementById(fieldName) != null)
		setTimeout("document.getElementById('" + fieldName + "').focus();alert(\"" + message + "\");", 250);
	else
		setTimeout("alert(\"" + message + "\");", 250);
}

function showWindow(url, windowName, screenWidth, screenHeight, resizable) {
	if (resizable == true)
		resize = 'yes';
	else
		resize = 'no';
	window.open(url, windowName, 'Width=' + screenWidth + ',Height=' + screenHeight + 
		',resizable=' + resize + ',scrollbars=yes,dependent=yes,status=no,toolbar=no,menubar=no');
}

function hintText(hintId) {
	var i;
	for (i = 0; i < hints.length; i++) {
		if (hints[i*2] == hintId) {
			return hints[(i*2)+1];
		}
	}
	alertDeveloper("Deze hint bestaat niet: '" + hintId + "'.");
}

function guiName(obj) {
	var i;
	var id = obj.id;
	
	for (i = 0; i < guiNames.length; i++) {
		if (guiNames[i*2] == id) {
			return guiNames[(i*2)+1];
		}
	}
	alertDeveloper("Deze guiName bestaat niet: '" + id + "'.");	
}

/*
optionElement geeft de id value terug van de gekozen optie in een select,
zodat de bijbehorende hint-tekst getoond kan worden.
*/
function optionElement(selectId) {
	return selectId + document.getElementById(selectId).options[document.getElementById(selectId).selectedIndex].value;
}

function showHint(hintId, orientation, e, width) {
	// orientation 1 = Alignment SouthEast
	// orientation 2 = Alignment NorthEast
	// orientation 3 = Alignment SouthWest
	// orientation 4 = Alignment NorhtWest
	// 4 2
	// 3 1

	// Nieuw: orientation mag ook een leesbare code bevatten
	switch(orientation)
	{
	case 'SouthEast':
		orientation = 1;
		break;
	case 'NorthEast':
		orientation = 2;
		break;
	case 'SouthWest':
		orientation = 3;
		break;
	case 'NorthWest':
		orientation = 4;
		break;
	}
	
	if (!e) var e = window.event;
	if (document.all) {
		xPos = document.body.scrollLeft+event.clientX;
		yPos = document.body.scrollTop+event.clientY;
	} else {
		xPos = e.pageX;
		yPos = e.pageY;
	} 

	var hintTD = document.getElementById("HintTD");
	hintTD.innerHTML = hintText(hintId);

	if (xPos == 0)
		xPos = 0;
	if (yPos == 0)
		yPos = 0;
	
	var verticalOffset = 0;
	if (orientation == 1 || orientation == 3)
		verticalOffset = 0;
	else
		verticalOffset = hintTD.clientHeight + 40;
		
	var horizontalOffset = 0;
	if (orientation == 1 || orientation == 2)
		horizontalOffset = 0;
	else
		horizontalOffset = hintTD.clientWidth + 40;

	if (document.all) {
		eval('HintLayer.style.pixelLeft = ' + (xPos - horizontalOffset) );
		eval('HintLayer.style.pixelTop = ' + (yPos - verticalOffset - 10) );
		eval('HintLayer.style.width = ' + width );
		eval('HintLayer.style.visibility = "visible"');
	}
	else {
		eval('document.getElementById("HintLayer").style.left = ' + (xPos - horizontalOffset) );
		eval('document.getElementById("HintLayer").style.top = ' + (yPos - verticalOffset - 10) );
		eval('document.getElementById("HintLayer").style.width = ' + width );
		eval('document.getElementById("HintLayer").style.visibility = "visible"');
	}
}
function hideHint() {
	if (document.all) {
		eval('HintLayer.style.visibility = "hidden"');
	}
	else {
		eval('document.getElementById("HintLayer").style.visibility = "hidden"');
	}
}

/*
alertDeveloper

In een productieomgeving moet de variabele DEBUG op false worden gezet.
*/
function alertDeveloper(msg) {
	var DEBUG = true;
	if (DEBUG)
		alert("DEBUG: " + msg);
}

/*
setFocus

Stelt de focus in op een veld met een meegegeven value in het id-attribuut.
Om een afzonderlijke thread te forceren wordt een aanroep van setTimeOut gebruikt.
Als het id-veld niet bestaat volgt een foutmelding,
indien de variabele DEBUG in alertDeveloper() niet op false staat.
*/
function setFocus(idvalue) {
	var element = document.getElementById(idvalue);

	if (element == null) {
		alertDeveloper("het element " + idvalue + " bestaat niet.");
		return;
	}

	setTimeout(
		function() {
			element.focus();
			if (element.select)
				element.select();
		}
	, 1);
}
function leesEidCard() {
	try {
	 	var theApplet = document.EIDCardReaderApplet;
	 	// Read Card content
	 	theApplet.readEIDCard();
	
	 	// *** Idenitificatie ***
	 	// Geldig van
	 	var IdStart = theApplet.getCardStartDateString();
		var month = IdStart.substr(3,2);
		var year = IdStart.substr(6,4);
				
		document.getElementById("IdStartMonth").value = parseInt(month * 1);
		document.getElementById("IdStartYear").value = parseInt(year * 1);
		
	 	// Geldig tot
	 	var IdEnd = theApplet.getCardEndDateString();
		var month = IdEnd.substr(3,2);
		var year = IdEnd.substr(6,4);
		document.getElementById("IdEndMonth").value = parseInt(month * 1);
		document.getElementById("IdEndYear").value = parseInt(year * 1);
	
		// IDType
		document.getElementById("IdType").value = theApplet.getDocumentType();

	 	// Nummer
		document.getElementById("IdNumber").value = theApplet.getCardNumberInfo();
	
		// RR nummer
		document.getElementById("RRNumber").value = theApplet.getRRNumber();
	 	
	 	// *** Persoonlijke gegevens ***
	 	// Geslacht
		document.getElementById("TitleType").value = theApplet.getGenderType();
		// Achternaam
		document.getElementById("Surname").value = theApplet.getSurNameNa().substr(0,25);
		// Voornaam
		document.getElementById("FirstName").value = theApplet.getFirstNameNa().substr(0, 15);
		// Geboortedatum
		document.getElementById("DateOfBirth").value = theApplet.getBirthDateString();
		// Geboorteplaats
		document.getElementById("PlaceOfBirth").value = theApplet.getBirthLocationNa().substr(0,25);
		// Nationaliteit
		var nationalityString =  theApplet.getNationality();
		if (nationalityString == "Belg"){
			document.getElementById("NationalityType").value = 1;
		}
			
		// *** Adres ***
		// Straat
		document.getElementById("AddressStreet").value = theApplet.getStreetNa().substr(0,21);
		// Huisnummer
		document.getElementById("AddressNumber").value = theApplet.getHouseNumberNa().substr(0,10);
		// Postcode
		var postcode = theApplet.getPostcode().substr(0,4);
		document.getElementById("AddressPostcode").value = postcode;
		// Gemeente
		var addressTown =  theApplet.getMunicipalityNa().substr(0,25);
		document.getElementById("AddressTown").value = addressTown;
		queryPostcode(postcode, addressTown);
		
	} catch (Exception) {
		alert("Er is een fout opgetreden bij het lezen van de kaart.");
	}
}


