var whitespace = new String(" \t\n\r");

// Deze functie wordt aangeroepen door het tekstvak rekeningnr bij het verlaten ervan
// post: indien een ongeldig rek nr opgegeven is verschijnt er een melding
function checkBankNr(){
if (isValidRekening(document.getElementById("rekeningnr").value)==false) {
	alert(document.getElementById("rekeningnr").value+' is geen geldig (post)bankrekening nummer.\nEen postbank nummer moet met een P beginnen (gebruik na de P geen nullen).');
//	document.getElementById("rekeningnr").focus();
	document.getElementById("rekeningnr").select();
	document.getElementById("rekeningnr").blur();
}
}

// pre:	cRekening - Het al dan niet opgemaakte rekeningnummer
// post:	True wanneer gegeven rekening geldig is en false wanneer dit niet
//	het geval is
function isValidRekening(cRekening) {
	var validChars = '0123456789';

	cRekening = trim(cRekening);

	// Postbank rekening?
	if (cRekening.charAt(0).toUpperCase() == 'P') {
		if (cRekening.length != 8) {
			return false;
		} else {
			// Controleer of de rekening numeriek is (achter de 'P')
			return ((containsOnlyValidChars(cRekening.substring(1), validChars)) && (parseInt(cRekening.substring(1), 10) != 0));
		}
	} else {
		// Verwijder evt. punten in een rekening
		cRekening = replace(cRekening, '.', '');

		if ((cRekening.length != 9) && (cRekening.length != 10)) {
			return false;
		} else {
			// Controleer of de rekening numeriek is
			// en voldoet aan de 11-proef
			return (containsOnlyValidChars(cRekening, validChars) && isElfProef(cRekening));
		}
	}
}

// Voldoet gegeven rekeningnummer aan de 11-proef?
// Er wordt van uit gegaan, dat het rekeningnummer al is gecontroleerd
// op 'alleen cijfers' en valide lengte en geen Postbank rekening is.
//
// post:	True als de rekening voldoet aan de 11-proef en in alle andere
// 	gevallen false.
function isElfProef(cRekening) {
	cRekening = removeLeadingZeros(cRekening);

	var nSom = 0;

	// De berekening is als volgt:
	// abc.def.ghi -- (1i+2h+3g+4f+5e+6d+7c+8b+9a) % 11 == 0
	for (var i = cRekening.length; i > 0; i--)
		nSom += parseInt(cRekening.charAt(i - 1)) * (cRekening.length - (i - 1));

	return (nSom % 11 == 0);
}

// Haal van gegeven string alle voor- en naloop whitespaces af.
//
// post:	De string zonder voor- en naloop whitespaces.
function trim(str) {
	return (lTrim(rTrim(str)));
}

// Kijk of in gegeven string alleen maar geldige karakters zitten.
// De geldige karakters zijn gedefinieerd in de string 'validChars'.
//
// post:	True als gegeven string alleen geldige karakters bevat en
//	false wanneer dit niet het geval is.
function containsOnlyValidChars(string, validChars) {
	// Doorloop de hele string en kijk of de karakters
	// wel in de string met validChars zit...
	for (var i = 0; i < string.length; i++) {
		if (validChars.indexOf(string.charAt(i)) == -1)
			return false;
	}

	return true;
}

// Verwijder van gegeven string alle voorloop nullen.
//
// post:	De string zonder voorloop nullen.
function removeLeadingZeros(str) {
	var nPos = 0;

	for (var i = 0; i < str.length; i++)
	{
		if (str.charAt(i) == "0")
			nPos++;
		else
			break;
	}

	return(str.substring(nPos, str.length));
}

// Haal van gegeven string alle voorloop whitespaces af.
//
// post:	De string zonder voorloop whitespaces.
//
function lTrim(str) {
	var s = new String(str);

	if (whitespace.indexOf(s.charAt(0)) != -1) {
		var j = 0;
		var i = s.length;

		// Doorloop de string totdat er geen whitespace meer is
		// gelezen...
		while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
			j++;

		// Bepaal de string vanaf het eerste karakter dat geen
		// whitespace meer was...
		s = s.substring(j, i);
	}

	return s;
}

// Haal van gegeven string alle naloop whitespaces af.
//
// post:	De string zonder naloop whitespaces.
//
function rTrim(str) {
	var s = new String(str);

	if (whitespace.indexOf(s.charAt(s.length - 1)) != -1) {
		// De lengte van de string
		var i = s.length - 1;

		// Itereer over de string van rechts naar links totdat
		// er geen whitespaces meer gevonden worden...
		while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
			i--;

		// Het resultaat wordt de overgebleven string
		s = s.substring(0, i + 1);
	}

	return s;
}

// Vervang binnen gegeven string een bepaald stukje tekst door een ander
// stukje tekst.
//
// pre:	string - De string waarin tekst vervangen moet worden.
// pre:	text - De tekst die vervangen moet worden.
// pre:	by - De tekst die dient als vervanging.
// post:	De string waarbij stukjes tekst aldanniet zijn vervangen.
//
function replace(string, text, by) {
	 var strLength = string.length;
	 var txtLength = text.length;

	 if ((strLength == 0) || (txtLength == 0))
	 	return string;

	 var i = string.indexOf(text);

	 if ((!i) && (text != string.substring(0,txtLength)))
	 	return string;

	 if (i == -1)
	 	return string;

	 var newstr = string.substring(0,i) + by;

	 if (i + txtLength < strLength)
		  newstr += replace(string.substring(i + txtLength, strLength), text, by);

	 return newstr;
}
