//Sets the error message for a field
function doSetFieldError(sObjId, sErrTxt)
{
	var iRijId	=	getFieldRowNumber(sObjId);
	//1. Set error text if error object can be found and stringlength is greater than 0
	if ((sErrTxt.length > 0) && (document.getElementById("err-"+ iRijId)))
	{
		document.getElementById("errcnt-"+ iRijId).innerHTML	=	sErrTxt;
		document.getElementById("err-"+ iRijId).style.display	=	"";
	}
	//2. If stringlength is 0 but the error object exists, than hide the error object
	else if (document.getElementById("err-"+ iRijId))
	{
		document.getElementById("errcnt-"+ iRijId).innerHTML	=	"";
		document.getElementById("err-"+ iRijId).style.display	=	"none";
	}
}

//Detects if a field error has been set
function FieldHasError(sObjId)
{
	var iRijId	=	getFieldRowNumber(sObjId);
	if (document.getElementById("err-"+ iRijId).style.display != "none")	{	return true;	}
	return false;
}

//Routine to check if a field has been completed or not
function doCheckFieldComplete(sObjName, iFldIndex)
{
	var sObjValueName	=	sObjName;	//use this variable to get the value of the object, and to reference the object directly
	if ((! isNaN(parseInt(iFldIndex))) && (parseInt(iFldIndex) > 0))	{	sObjName	=	String(sObjName).replace("["+iFldIndex+"]", "[0]");	}
	var aField			=	getFormfieldData(sObjName);
	var sObjId			=	sObjValueName;
	var iSoort			=	findHtmlType(sObjName, -1);
	if ((iSoort == 3) || (iSoort == 4))	{	sObjId	+=	"_0";	}	//Specific workaround for 'multiple' fields (like radio groups or checkboxes)
	var oField			=	document.getElementById(sObjId);
	if (! oField)	{	return true;	}
	var bMandatory		=	(aField[4] == "Y")							?	true	:	false;
	var bVisible		=	(oField.parentNode.style.display == "none")	?	false	:	true;
	if (iSoort == 4)	{	bVisible	=	(oField.parentNode.parentNode.style.display == "none")	?	false	:	true;	}
	var iMinNumeric		=	parseInt(aField[11]);
	var iMaxNumeric		=	parseInt(aField[12]);
	var iMinLength		=	parseInt(aField[9]);
	var iMaxLength		=	parseInt(aField[10]);
	//1. Is the field invisible or non-mandatory? If so, it's completed
	if (bVisible == false || bMandatory == false)	{	return true;	}
	//2. Determine if the field value is correct
	var sTmpValue		=	getValueById(sObjValueName);	//This function does it's own workaround for radio buttons!!
	switch(iSoort)
	{
		case 1:
			if (sTmpValue == -1)	{	return getEmptyErrorText(sObjName, false);	}
			else					{	return true;	}
		case 2:
		case 5:
		case 7:
			if (sTmpValue.length <= 0)														{	return getEmptyErrorText(sObjName, false);		}
			else if (iMinLength > 0 && sTmpValue.length < iMinLength)						{	return getViolationMinimum(sObjName, false);	}
			else if (iMaxLength > 0 && sTmpValue.length > iMaxLength)						{	return getViolationMaximum(sObjName, false);	}
			else if (iMinNumeric > 0 && parseInt(removeNonNumeric(sTmpValue)) < iMinNumeric){	return getViolationMinimum(sObjName, false);	}
			else if (iMaxNumeric > 0 && parseInt(removeNonNumeric(sTmpValue)) > iMaxNumeric){	return getViolationMaximum(sObjName, false);	}
			else																			{	return true;	}
		case 3:
		case 4:
			if (sTmpValue == false)	{	return getEmptyErrorText(sObjName, false);	}
			else					{	return true;	}
		default:
			return true;
	}
}

//We've left the CSS part and put all field characteristics in the database (and thus in a central javascript array)
function findFieldType(objId, veldIndex)
{
	var veldNaam		= 	objId;
	if ((! isNaN(veldIndex)) && (veldIndex > -1))	{	veldNaam	= String(objId).replace("["+veldIndex+"]", "[0]");	}
	for (var f=0; f < formFields.length; f++)
	{
		if (formFields[f][0] == veldNaam)			{	return formFields[f][1];										}
	}
	return "";
}

function findHtmlType(objId, veldIndex)
{
	var veldNaam		= 	objId;
	if ((! isNaN(veldIndex)) && (veldIndex > -1))	{	veldNaam	= String(objId).replace("["+veldIndex+"]", "[0]");	}
	for (var f=0; f < formFields.length; f++)
	{
		if (formFields[f][0] == veldNaam)			{	return formFields[f][2];										}
	}
	return "";
}

//Returns the field characteristics in an array for a specific field type
function getFieldCharacteristics(soort)
{
	for (var f=0; f < fieldDefinition.length; f++)
	{
		if (fieldDefinition[f][0] == soort)			{	return fieldDefinition[f];										}
	}
	return false;
}

//Returns the specific characteristics of a unique form field 
function getFormfieldData(sObjName)
{
	for (var iField=0; iField < formFields.length; iField++)
	{
		if (formFields[iField][0] == sObjName)		{	return formFields[iField];										}
	}
	return false;
}


function getFieldValue(oObj, iSoort)
{
	switch(iSoort)
	{
		case 1:
			if ((oObj.options) && (oObj.options.length > 0))	{	return oObj.options[oObj.selectedIndex].value;	}	//select with options
			else												{	return -1;										}
		case 2:
			return oObj.value;								//input text
		case 3:
			return getRadioGroupValue(oObj.name);			//input radio
		case 4:
			return getRadioGroupValue(oObj.name);			//input radio
		default:
			return oObj.value;								//input hidden (not included in the generator)
	}
}

function setFieldValue(oObj, iSoort, sValue)
{
	switch(iSoort)
	{
		case 1:												//selection list
			for (var iOpt=0; iOpt < oObj.options.length; iOpt++)
			{
				if (oObj.options[iOpt].value == sValue)	{	oObj.selectedIndex	=	iOpt;	}
			}
			return;
		case 2:												//input type = text
			oObj.value	=	sValue;
			return;
		case 3:
		case 4:
			setRadioGroupValue(oObj.name, sValue)
			return;
		default:											//whatever comes around
			oObj.value	=	sValue;
			return;
	}
}

function getFieldRowNumber(sObjId)
{
	if (! document.getElementById(sObjId))	{	return false;	}
	var oParent	=	document.getElementById(sObjId).parentNode;
	if (String(oParent.id).indexOf("rij-") != -1)	{	return String(oParent.id).replace("rij-", "");	}
	oParent		=	oParent.parentNode;
	if (String(oParent.id).indexOf("rij-") != -1)	{	return String(oParent.id).replace("rij-", "");	}
	return false;
}

function getValueById(sObjId)
{
	var iSoort	=	findHtmlType(sObjId, -1);
	if ((iSoort == 3) || (iSoort == 4))	{	sObjId	+=	"_0";	}	//Specific workaround for 'multiple' fields (like radio groups or checkboxes)
	return getValueByObj(document.getElementById(sObjId));
}

function setValueById(sObjId, sValue)
{
	var iSoort	=	findHtmlType(sObjId, -1);
	if ((iSoort == 3) || (iSoort == 4))	{	sObjId	+=	"_0";	}	//Specific workaround for 'multiple' fields (like radio groups or checkboxes)
	return setValueByObj(document.getElementById(sObjId), sValue);
}

function getDateObjectById(sObjId)
{
	var sDate	=	getValueById(sObjId);
	if (sDate.length < 6)	{	return oToday;	}
	var aDate	=	String(sDate).split("-");
	if (aDate.length != 3)	{	return oToday;	}
	var iJaar	=	parseInt(rewriteToInteger(aDate[2]));
	var iMaand	=	parseInt(rewriteToInteger(aDate[1]) - 1);
	var iDag	=	parseInt(rewriteToInteger(aDate[0]));
	var oDate	=	new Date(iJaar, iMaand, iDag);
	return oDate;
}

function getValueByObj(oObj)
{
	try
	{
		var iSoort	=	findHtmlType(oObj.name, -1);
		return getFieldValue(oObj, iSoort);
	}
	catch (sEcpt)
	{
		//alert(oObj);
	}
}

function setValueByObj(oObj, sValue)
{
	var iSoort	=	findHtmlType(oObj.name, -1);
	return setFieldValue(oObj, iSoort, sValue);
}

function getRadioGroupValue(groupName)
{
	if (document.getElementsByName(groupName))
	{
		var aGroepje	=	document.getElementsByName(groupName);
		for (var a=0; a < aGroepje.length; a++)
		{
			if (aGroepje[a].checked == true)	{	return aGroepje[a].value;	}
		}
	}
	return false;
}

function setRadioGroupValue(groupName, sValue)
{
	if (document.getElementsByName(groupName))
	{
		var aGroepje	=	document.getElementsByName(groupName);
		for (var a=0; a < aGroepje.length; a++)
		{
			if (aGroepje[a].value == sValue)	{	aGroepje[a].checked	=	true;	}
			else								{	aGroepje[a].checked	=	false;	}
		}
	}
	return false;
}
	
//Use this function only to catch enter keys and make them behave as tab keys on non-button objects
//This functionality is only added for MSIE users. Others will not be bothered by it
function onkeyDown(e)
{
	//1. We're in need of 2 variables, the object where the event takes place, and the key code of the event
	var obj 		= "";
	var code		= "";
	//2. Determine the object in whatever way this browser understands
	if (agent.indexOf("msie") != -1)		{	e = window.event;	}
	if (e.target) 							{ 	obj = e.target; 	}
	else if (e.srcElement) 					{ 	obj = e.srcElement; }
	//3. Determine the key code in whatever way this browser understands
	if (e.which) 							{ 	code = e.which; 	}
	else if (e.keyCode) 					{ 	code = e.keyCode; 	}
	//4. Determine that the object where the event takes place is not some sort of button
	var soort		= String(obj.tagName).toLowerCase();
	if (soort == "input")
	{
		var subSoort	= String(obj.type).toLowerCase();
		if ((subSoort == "button") || (subSoort == "submit"))	{	return;	}
	}
	if (soort == "textarea")	{	return;	}
	//5. If enter key had been pressed and we're using MSIE, reset the event to tab key
	if ((code == 13) && (agent.indexOf("msie") != -1))
	{
		e.keyCode = 9;
		return;
	}
}

//This function is used to catch certain illegal characters per field
function onkeyPress(e)
{
	//1. We're in need of 2 variables, the object where the event takes place, and the key code of the event
	var obj 		= "";
	var code		= "";
	//2. Determine the object in whatever way this browser understands
	if (agent.indexOf("msie") != -1)		{	e = window.event;	}
	if (e.target) 							{ 	obj = e.target; 	}
	else if (e.srcElement) 					{ 	obj = e.srcElement; }
	//3. Determine the key code in whatever way this browser understands
	if (e.which) 							{ 	code = e.which; 	}
	else if (e.keyCode) 					{ 	code = e.keyCode; 	}
	//4. Catch the TAB key -> otherwise Gecko-like browsers will not be able to use this key anymore
	if (code == 8)							{	return 8;			}
	if (code == 9)							{	return 9;			}
	if (code == 39)							{	return 39;			}
	//if (code == 46)							{	return 46;			}
	//5. If we're not dealing with a text input control, ignore the event
	if (String(obj.tagName).toLowerCase() != "input") 	{ return; 	}
	//5. Figure out what kind of field this is
	var veldNaampje	= String(obj.id);
	var veldIndex	= -1;
	if (veldNaampje.indexOf("soort_") != -1)			{	veldIndex	= parseInt(veldNaampje.replace("soort_", ""));			}
	if (veldNaampje.indexOf("overnemen_") != -1)		{	veldIndex	= parseInt(veldNaampje.replace("overnemen_", ""));		}
	else if (veldNaampje.indexOf("limiet_") != -1)		{	veldIndex	= parseInt(veldNaampje.replace("limiet_", ""));			}
	else if (veldNaampje.indexOf("saldo_") != -1)		{	veldIndex	= parseInt(veldNaampje.replace("saldo_", ""));			}
	else if (veldNaampje.indexOf("value_depot_") != 1)	{	veldIndex	= parseInt(veldNaampje.replace("value_depot_", ""));	}
	var soort = String(findFieldType(obj.id, veldIndex));
	//6. If not classname is given, just ignore the entire event
	if (soort.length <= 0) 					{	return; 			}
	//7. Based on the classname, determine what kind of checking we're supposed to do here
	var karakter	= getFieldCharacteristics(soort);
	var uitvoeren	= 0;
	if (karakter != false) { uitvoeren	= parseInt(karakter[1]); 	}
	//8. Perform the specified function
	var newCode = 0;
	switch(uitvoeren)
	{
		case 1:
			newCode = 	allowNumbersOnly(code);
			break;
		case 2:
			newCode = 	allowNumeric(code);
			break;
		case 3:
			newCode = 	allowLettersOnly(code);
			break;
		case 4:
			newCode = 	allowNonNumeric(code);
			break;
		case 5:
			newCode = 	allowAll(code);
			break;
		case 6:
			newCode = 	allowAlphaNumeric(code);
			break;
		case 7:
			newCode	=	alloNumericSeparator(code);
			break;
		case 8:
			newCode	=	allowLicensePlate(code);

			if ((! (newCode == false)) && true)
			{
				var sValue		=	String(obj.value) + String.fromCharCode(newCode);
				var sValueTmp	=	'';

				for (var l=0; l < sValue.length; l++)
				{
					if (sValue.charAt(l) != '-')	{	sValueTmp	+=	sValue.charAt(l);	}
				}

				sValue			=	sValueTmp.substr(0,2) + (sValueTmp.length >= 2 ? '-' : '');
				sValue			+=	sValueTmp.substr(2,2) + (sValueTmp.length >= 4 ? '-' : '');
				sValue			+=	sValueTmp.substr(4,2);

				obj.value		=	String(sValue).toUpperCase();

				newCode			=	false;
			}

			break;
		default:
			newCode = 	code;
			break;
	}
	//9. If we're using MSIE, we can alter the course of events :)
	if ((agent.indexOf("msie") != -1) && (code != newCode))
	{
		if (newCode == false)				{	newCode = 0;		}
		e.keyCode = newCode;
		return newCode;
	}
	//10. If we're using a GRE-browser, and the keycode is disallowed, return false to stop the key event in it's tracks
	else if ((agent.indexOf("msie") == -1) && (newCode == false))	{	return false;	}
	//11. Just let the code pass by....
	return newCode;
}

//This function filters a set of keys that are NEVER allowed in fields
function detaultKeyFilter(code)
{
	//1. Loop trough the default illegal characters array. If a match is found, return 0
	for (var d=0; d < defaultIllegal.length; d++)
	{
		if (code == parseInt(defaultIllegal[d])) { return false; 	}
	}
	//2. Nothing found, so this is not a default illegal character
	return code;
}

//This function will only allow numbers to be entered into a field
function allowNumbersOnly(code)
{
	//1. Filter this code through the default set of not-accepted characters
	code = detaultKeyFilter(code);
	if (code == false) 						{ 	return false; 		}
	//2. Numerical codes are in a specific range. If this code doesn't fit the range, return false;
	if ((code < 48) || (code > 57)) 		{ 	return false; 		}
	return code;
}

//This function will allow numerical input in a field, combined with the use of a comma
function allowNumeric(code)
{
	//1. Identical to numbers only, but now we want to allow comma input
	if ( (code == 44) || (code == 46) )		{ 	return code; 		}
	//2. It's not a comma, so reroute it to the regular numbers function
	return allowNumbersOnly(code);
}

//This function will allow the input of letters only in a field, no special characters or numbers
function allowLettersOnly(code)
{
	//1. Filter this code through the default set of not-accepted characters
	code = detaultKeyFilter(code);
	if (code == false) { return false; }
	//2. We only want to allow letters in this field type
	if ((code >= 65) && (code <= 90)) 		{ 	return code; 		}	//capital letters
	if ((code >= 97) && (code <= 122)) 		{ 	return code; 		}	//normal letters
	return 0;
}

function allowNonNumeric(code)
{
	//1. Filter this code through the default set of not-accepted characters
	code = detaultKeyFilter(code);
	if (code == false) 						{ 	return false; 		}
	//2. This is the opposite of allowNumbersOnly(), so we just reverse that test.
	if ((code >= 48) && (code <= 57)) 		{ 	return false; 		}
	return code;
}

function allowAlphaNumeric(code)
{
	//1. Filter this code through the default set of not-accepted characters
	code = detaultKeyFilter(code);
	if (code == false) 						{ 	return false; 		}
	return code;
}

function alloNumericSeparator(code)
{
	code = detaultKeyFilter(code);
	if (code == false) 						{	return false; 		}
	if ((code != 45 ) && ((code < 48) || (code > 57)))	{	return false;	}
	return code;
}

function allowLicensePlate(code)
{
	code = detaultKeyFilter(code);
	if (code == false)									{	return false;	}

	if ((code >= 65) && (code <= 90)) 					{ 	return code; 	}	//capital letters
	if ((code >= 97) && (code <= 122)) 					{ 	return code; 	}	//normal letters
	if ((code >= 48) && (code <= 57))					{	return code;	}	//numbers
//	if (code == 45 )									{	return code;	}	//min sign

	return code;																//otherwise
}

function allowAll(code)						{	return code;		}

function onfieldBlur(e, veldIndex)
{
	//1. We're in need of 2 variables, the object where the event takes place, and the key code of the event
	var obj 		= "";
	var code		= "";

	//2. Determine the object in whatever way this browser understands
	if (agent.indexOf("msie") != -1)		{	e 	= window.event;	}
	if (e.target) 							{ 	obj = e.target; 	}
	else if (e.srcElement) 					{ 	obj = e.srcElement; }

	//2a.Just for flagging purposes!!!!
	if (doCheckFieldComplete(obj.name, veldIndex) == true)	{	doSetFieldError(obj.id, "");	}

	//3. If we're not dealing with a text input control, ignore the event
	if (String(obj.tagName).toLowerCase() != "input") {	return; 	}

	//4. Figure out what kind of field this is
	var soort 		= String(findFieldType(obj.id, veldIndex));

	//5. If no classname is given, just ignore the entire event
	if (soort.length <= 0) 					{ 	return; 			}

	//6. Based on the classname, determine what kind of blur we're supposed to do here
	var karakter	= getFieldCharacteristics(soort);
	var uitvoeren	= 0;
	var variabelen	= "";
	if (karakter.constructor == Array)
	{
		uitvoeren 	= karakter[2];
		variabelen 	= karakter[3];
	}

	//7. Determine the object-value BEFORE rewriting/reformatting the field
	var sObjValue	=	String(obj.value);

	//8. Perform the specified function
	switch(uitvoeren)
	{
		case 1:
			fieldToFloat(obj, variabelen);
			break;
		case 2:
			fieldToAccount(obj);
			break;
		case 3:
			fieldToSofi(obj);
			break;
		case 4:
			fieldToWord(obj, variabelen);
			break;
		case 5:
			fieldToMultwords(obj, variabelen);
			break;
		case 6:
			fieldToFreetext(obj, variabelen);
			break;
		case 7:
			fieldToNumeric(obj, variabelen);
			break;
		case 8:
			fieldToEmail(obj, variabelen);
			break;
		case 9:
			fieldToPostalcode(obj, variabelen);
			break;
		case 10:
			fieldToHousenumber(obj, variabelen);
			break;
		case 11:
			fieldToHousenumberSuffix(obj, variabelen);
			break;
		case 12:
			fieldToDate(obj, variabelen);
			break;
		case 13:
			fieldToPhone(obj, variabelen);
			break;
		case 14:
			fieldToLicensePlate(obj, variabelen);
			break;
	}
	//9. If there is a special function to be performed on blur of this field, do it now
	var aVeldData	=	getFormfieldData(obj.name);
	if (String(aVeldData[13]).length > 0)	{	window.setTimeout(""+aVeldData[13]+"", 1);	}
	
	//10. Workaround for firefox bug 357684
	if ((agent.indexOf("msie") == -1) && (sObjValue != String(obj.value)))  { obj.onchange(); }	
}

//This function is used for fields containing amounts (with a number of decimal figures defined by 'precision')
function fieldToFloat(obj, precision)
{
	//1. Get the value from the passed object
	var waarde 		= obj.value;
	var mogelijk	= new Array(",",".");
	var decimaal	= -1;
	var found		= false;
	//2. Figure out which one the client used as decimal separator
	for (var i=parseInt(waarde.length -1); i > -1; i--)
	{
		if (waarde.charAt(i) == mogelijk[0])	{	decimaal	= 0;	break;	}
		if (waarde.charAt(i) == mogelijk[1])	{	decimaal	= 1;	break;	}
	}
	//3. Replace all non-decimal separators by nothing
	if (decimaal == 0)	{	waarde	= waarde.replace(mogelijk[1], "");	}
	if (decimaal == 1)	{	waarde	= waarde.replace(mogelijk[0], "");	}
	//4. Rewrite the used decimal separator to what we use by default
	waarde		= waarde.replace(mogelijk[decimaal], ",");
	//5. Rewrite the value to the proper numerical value
	waarde 		= String(rewriteToDecimal(waarde, precision));
	//6. Do the intercept on minimum and maximum numeric values as defined in the database
	var aFldDef	=	getFormfieldData(obj.name);
	var iMinval	=	parseInt(aFldDef[11]);
	var iMaxval	=	parseInt(aFldDef[12]);
	if ((iMinval > 0) && (waarde < iMinval) && (waarde > 0))
	{
		doSetFieldError(obj.id, "Uw invoer voldoet niet aan de minimale waarde van dit veld ("+formatNumericThreshold(iMinval, aFldDef[1])+"). Corrigeer uw invoer.");
	}
	else if ((iMaxval > 0) && (waarde > iMaxval) && (waarde > 0))
	{
		doSetFieldError(obj.id, "De maximale waarde van dit veld ("+formatNumericThreshold(iMaxval, aFldDef[1])+") is overschreden. Corrigeer uw invoer.");
	}
	else if (iMinval == 0 && String(obj.value) == "0")	{	doSetFieldError(obj.id, false);	}
	else if (! FieldHasError(obj.id))					{	doSetFieldError(obj.id, false);	}
	//6. Don't forget to put in the correct decimal separator for display purposes		
	//waarde 		= waarde.replace(".", ",");
	//7. Put the rewritten value into the object
	obj.value 	= waarde;
	return;
}

function fieldToEmail(obj, letterCase)
{
	var errStat	=	false;
	var waarde	= 	obj.value;
	waarde		= 	String(waarde);
	var nieuw	= 	"";
	for (var l=0; l < waarde.length; l++)
	{
		var found = false;
		for (var d=0; d < defaultIllegal.length; d++)
		{
			if (waarde.charCodeAt(l) == defaultIllegal[d]) { found = true; }
			else if (waarde.charAt(l) == " ")	{ 	found = true; 	}
			else if (waarde.charAt(l) == "'") 	{ 	found = true; 	}
			else if (waarde.charAt(l) == ",") 	{ 	found = true; 	}
		}
		if (! found) { nieuw+= waarde.charAt(l); }
	}
	switch(letterCase)
	{
		case 1:
			obj.value = uc(nieuw);
			break;
		case 2:
			obj.value = lc(nieuw);
			break;
		case 3:
			obj.value = ucfirst(nieuw);
			break;
		case 4:
			obj.value = ucwords(nieuw);
			break;
		default:
			obj.value = nieuw;
			break;
	}
	return;
}

//This function is used for fields containing account numbers, as it does a full validity check on the input
function fieldToAccount(obj)
{
	var waarde	= 	obj.value;
	waarde		= 	String(removeNonNumeric(waarde));
	if (waarde.charAt(0) == "0")	{	waarde	=	String(waarde).substr(1);	}
	var nwWaarde=	"";
	for (var i=0; i < waarde.length; i++)
	{
		if ((waarde.charAt(i) != ".") && (waarde.charAt(i) != ",") && (! isNaN(parseInt(waarde.charAt(i)))))	{	nwWaarde	+=	waarde.charAt(i);	}
	}
	waarde		=	nwWaarde;
	if (! isValidAccount(waarde))
	{
		obj.value	=	"";
		doSetFieldError(obj.id, getIncorrectErrorText(obj.id, false));
		return;
	}
	obj.value	=	waarde;
	doSetFieldError(obj.id, false);
	return;
}

//This function is used for fields containing social security numbers, as it does a full validity check on the input
function fieldToSofi(obj)
{
	var waarde	= 	obj.value;
	waarde		= 	String(removeNonNumeric(waarde));
	if (! isValidSocialSecurity(waarde))
	{
		obj.value	=	"";
		doSetFieldError(obj.id, getIncorrectErrorText(obj.id, false));
		return;
	}
	obj.value	=	waarde;
	doSetFieldError(obj.id, false);
	return;
}


function fieldToWord(obj, letterCase)
{
	var waarde	= obj.value;
	waarde		= String(removeNumeric(waarde));
	var nieuw	= "";
	for (var l=0; l < waarde.length; l++)
	{
		var found = false;
		for (var d=0; d < defaultIllegal.length; d++)
		{
			if (waarde.charCodeAt(l) == defaultIllegal[d])
			{
				found = true;
			}
		}
		if (! found) { nieuw = nieuw+waarde.charAt(l); }
	}
	nieuw		= rewriteToSingleWord(nieuw, letterCase);
	obj.value	= nieuw;
	return;
}

//Remove numeric input and all kinds of illegal characters
function fieldToMultwords(obj, letterCase)
{
	var waarde	= obj.value;
	waarde		= String(removeNumeric(waarde));
	var nieuw	= "";
	for (var l=0; l < waarde.length; l++)
	{
		var found = false;
		for (var d=0; d < defaultIllegal.length; d++)
		{
			if (waarde.charCodeAt(l) == defaultIllegal[d])
			{
				found = true;
			}
		}
		if (! found) { nieuw+= waarde.charAt(l); }
	}
	nieuw		= rewriteToMultipleWords(nieuw, letterCase);
	obj.value	= nieuw;
	return;
}

//Only remove numeric input from the field
function fieldToFreetext(obj, letterCase)
{
	var waarde	= 	obj.value;
	waarde		= 	String(removeNumeric(waarde));
	waarde		= 	rewriteToFreeText(waarde, letterCase);
	//6. Do the intercept on minimum and maximum numeric values as defined in the database
	var aFldDef	=	getFormfieldData(obj.name);
	var iMinlen	=	parseInt(aFldDef[9]);
	var iMaxlen	=	parseInt(aFldDef[10]);
	if ((iMinlen > 0) && (waarde.length < iMinlen) && (waarde.length > 0))		{	doSetFieldError(obj.id, getViolationMinimum(obj.name, false));	}
	else if ((iMaxlen > 0) && (waarde.length > iMaxlen) && (waarde.length > 0))	{	doSetFieldError(obj.id, getViolationMaximum(obj.name, false));	}
	else																		{	doSetFieldError(obj.id, false);									}
	obj.value	= waarde;
	return;
}

//Remove all non-numeric input from the field
function fieldToNumeric(obj, variabelen)
{
	var waarde	= 	obj.value;
	waarde		= 	String(removeNonNumeric(waarde));
	waarde		= 	waarde.replace(" ", "");
	waarde		= 	waarde.replace(".", "");
	waarde		= 	waarde.replace(",", "");
	//Do the intercept on minimum and maximum numeric values as defined in the database
	var aFldDef	=	getFormfieldData(obj.name);
	var iMinval	=	parseInt(aFldDef[11]);
	var iMaxval	=	parseInt(aFldDef[12]);
	if ((iMinval > 0) && (waarde < iMinval) && (waarde > 0))		{	doSetFieldError(obj.id, getViolationMinimum(obj.name, false));	}
	else if ((iMaxval > 0) && (waarde > iMaxval) && (waarde > 0))	{	doSetFieldError(obj.id, getViolationMaximum(obj.name, false));	}
	else															{	doSetFieldError(obj.id, false);									}
	obj.value	= waarde;
	return;
}

function fieldToPostalcode(obj, variabelen)
{
	var waarde	= String(obj.value);
	if (waarde.length <= 0)	{	return;	}
	waarde		=	String(waarde).replace(" ", "");
	if (waarde.indexOf("postco") != -1)
	{
		doSetFieldError(obj.id, getIncorrectErrorText(obj.id, false));
		obj.value	= "";
		return;
	}
	waarde		= uc(waarde);
	if (! isValidPostalcode(waarde))
	{
		obj.value	= "";
		doSetFieldError(obj.id, getIncorrectErrorText(obj.id, false));
		return;
	}
	obj.value	= waarde;
	doSetFieldError(obj.id, "");
	return;
}

function fieldToHousenumber(obj, variabelen)
{
	var waarde	= String(obj.value);
	if (waarde.indexOf("huis") != -1)	{	obj.value	= "";	return;	}
	return fieldToNumeric(obj, variabelen);
}

function fieldToHousenumberSuffix(obj, variabelen)
{
	var waarde	= String(obj.value);
	if (waarde.indexOf("toev") != -1)	{	obj.value	= "";	return;	}
	return fieldToNumeric(obj, variabelen);
}

function fieldToDate(obj, variabelen)
{
	var waarde	=	String(obj.value);
	//1. Probeer eerst uit op welke logische separator de datumdelen te herkennen zijn
	if (waarde.length <= 0)		{	return;	}
	var delen	=	waarde.split("-");								//NL notatie
	if (delen.length != 3)		{	delen	=	waarde.split(".");	}	//UK notatie
	if (delen.length != 3)		{	delen	=	waarde.split("/");	}	//DE notatie
	if (delen.length != 3)
	{
		if (delen.length > 0)	{	doSetFieldError(obj.id, getIncorrectErrorText(obj.id, false));	}
		obj.value	=	"";
		return;
	}
	//2. Pak de afzonderlijke delen uit het array
	var dag		=	delen[0];
	var maand	=	delen[1];
	var jaar	=	delen[2];
	//3. Test of de jaarnotatie toevallig aangevuld moet worden
	if (jaar.length == 2)
	{
		if (parseInt(jaar) < 30)	{	jaar	=	"20"+jaar;	}
		else						{	jaar	=	"19"+jaar;	}
	}
	if ((jaar.length != 4) || (dag.length < 1) || (dag.length > 2) || (maand.length < 1) || (maand.length > 2))
	{
		doSetFieldError(obj.id, getIncorrectErrorText(obj.id, false));
		obj.value	=	"";
		return;
	}
	//4. Test of de invoer een valide datum is
	if (! isValidDate(dag, maand, jaar))
	{
		doSetFieldError(obj.id, getIncorrectErrorText(obj.id, false));
		obj.value	=	"";
		return;
	}
	//5. Vervolmaak de notatie waar nodig
	if (dag.length == 1)	{	dag		=	"0"+dag;	}
	if (maand.length == 1)	{	maand	=	"0"+maand;	}
	//6. Zet de gewenste notatie terug in het invoerveld
	obj.value	=	dag+"-"+maand+"-"+jaar;
	doSetFieldError(obj.id, "");

	return;
}

function fieldToPhone(obj, variabelen)
{
	var waarde	=	String(obj.value);
	if (waarde.length == 0)	{	return;	}
	//1. De telefoondelen zijn te splitsen op het koppelteken -
	var delen	=	waarde.split("-");								//NL notatie
	if (delen.length != 2 && waarde.length == 10)
	{
		if (waarde.substring(0,2) == "06")
		{
			delen[0]	=	waarde.substring(0,2);
			delen[1]	=	waarde.substring(2);
		}
		else
		{
			delen[0]	=	waarde.substring(0,3);
			delen[1]	=	waarde.substring(3);
		}
	}
	else if (delen.length != 2)
	{
		if (delen.length > 0)	{	doSetFieldError(obj.id, getIncorrectErrorText(obj.id, false));	}
		obj.value	=	"";
		return;
	}
	//2. Pak de afzonderlijke delen van het telefoonnummer
	var net		=	delen[0];
	var lijn	=	delen[1];
	//3. Afvangen van bogus-invoer
	var test	=	net+""+lijn;
	if ((test.length != 10)	|| (test == "0000000000") || (test == "0123456789") || (test == "0987654321") || ((variabelen == 1) && (net != "06")) || (! isValidPhone(net, lijn)))
	{
		doSetFieldError(obj.id, getIncorrectErrorText(obj.id, false));
		obj.value	=	"";
		return;	
	}
	//5. Vervolmaak telefoonnummer notatie
	obj.value	=	net+"-"+lijn;
	doSetFieldError(obj.id, "");
	return;
}

function fieldToLicensePlate(obj, variabelen)
{
	var waarde	=	String(obj.value);
	if (waarde.length == 0)	{	return;	}
	var newWaarde	=	"";
	for (var l=0; l < waarde.length; l++)
	{
		if (waarde.charAt(l) != "-")	{	newWaarde+=	waarde.charAt(l);	}
	}
	newWaarde	=	newWaarde.substr(0,2)+"-"+newWaarde.substr(2,2)+"-"+newWaarde.substr(4,2);
	if ((newWaarde.length != 8) || (! isValidLicencePlate(newWaarde)))
	{
		doSetFieldError(obj.id, getIncorrectErrorText(obj.id, false));
		obj.value	=	"";
		return;	
	}
	obj.value	=	String(newWaarde).toUpperCase();

	doSetFieldError(obj.id, "");
	return;
}

function fieldToLicensePlate(obj, variabelen)
{
	var waarde	=	String(obj.value);
	if (waarde.length == 0)	{	return;	}
	var newWaarde	=	"";
	for (var l=0; l < waarde.length; l++)
	{
		if (waarde.charAt(l) != "-")	{	newWaarde+=	waarde.charAt(l);	}
	}
	newWaarde	=	newWaarde.substr(0,2)+"-"+newWaarde.substr(2,2)+"-"+newWaarde.substr(4,2);
	if ((newWaarde.length != 8) || (! isValidLicencePlate(newWaarde)))
	{
		doSetFieldError(obj.id, getIncorrectErrorText(obj.id, false));
		obj.value	=	"";
		return;	
	}
	obj.value	=	String(newWaarde).toUpperCase();

	doSetFieldError(obj.id, "");
	return;
}

