/*
	================================================================================
	= Naam             : Direct Validation 2.0                                     =
	= Programmeurs     : Rob Timmers, Kees Boon                                    =
	= Laatst gewijzigd : 23 september 2006                                         =
	= Omschrijving     : Algemene functies om data te valideren                    =
	= Afhankelijkheden : object_functions.js, string_functions.js                  =
	================================================================================
	
	================================================================================
	= Overzicht functies                                                           =
	================================================================================
	
	$http(url)
	AddressResetStatus(strIDStatusAdres)
	AddressValidateHousenumber(strIDHuisnummer, blnTrimValue, blnUpdateText, blnMustEnter, blnShowAlerts, blnBackToText)
	AddressValidate(strIDHuisnummer, strIDPostcode, strIDStraat, strIDPlaats, strIDStatusAdres, blnTrimValue, blnUpdateText, blnShowAlerts, blnBackToText)
	
*/

//	================================================================================
//	= Initialisatie                                                                =
//	================================================================================

// define XMLHttpRequest object for IE
if (!window.XMLHttpRequest)
{
    window.XMLHttpRequest = function()
    {
        var types = [
            'Microsoft.XMLHTTP',
            'MSXML2.XMLHTTP.5.0',
            'MSXML2.XMLHTTP.4.0',
            'MSXML2.XMLHTTP.3.0',
            'MSXML2.XMLHTTP'
        ];

        for (var i = 0; i < types.length; i++)
        {
            try
            {
                return new ActiveXObject(types[i]);
            }
            catch(e) {}
        }
        return undefined;
    }
}

//	================================================================================
//	= De functies                                                                  =
//	================================================================================

			
// send request to URL and return response
function $http(strURL)
{
	var l_dteDate = new Date();
	var l_strURL = new String();
	
	l_strURL = strURL + "&r=" + l_dteDate.getFullYear() + l_dteDate.getMonth() + l_dteDate.getDate() + l_dteDate.getHours() + l_dteDate.getMinutes() + l_dteDate.getSeconds() + l_dteDate.getMilliseconds();
	
	try
	{
		var xmlhttp = new XMLHttpRequest();
		xmlhttp.open("GET", l_strURL, false);  // method, server, asynchronous
		xmlhttp.send(null);
		return xmlhttp.responseText;
	}
	catch (e)
	{
		return (-1);
	}
} 
function AddressResetStatus(strIDStatusAdres)
{
	var l_objStatusAdres = document.getElementById(strIDStatusAdres);
				
	// Controleren of de parameters verwijzen naar bestaande id's van objecten
	if (eval(l_objStatusAdres) == null) {alert("Bad Object Reference: " + strIDStatusAdres + "\n\nFunction: AddressResetStatus"); return (false);}
				
	l_objStatusAdres.value = "";
	return (true);
}
			
function AddressValidateHousenumber(strIDHuisnummer, blnTrimValue, blnUpdateText, blnMustEnter, blnShowAlerts, blnBackToText)
{
	var l_objHuisnummer = document.getElementById(strIDHuisnummer);
	var l_strHuisnummer = new String();
				
	// Controleren of de parameters verwijzen naar bestaande id's van objecten
	if (eval(l_objHuisnummer) == null) {alert("Bad Object Reference: " + strIDHuisnummer + "\n\nFunction: AddressValidateHousenumber"); return (false);}
	// De waarde van de input text converten naar een string.
	l_strHuisnummer = l_objHuisnummer.value.toString();
	// Indien gewenst worden spaties voor en na de waarde van de input text verwijderd.
	if (blnTrimValue)
	{
		l_strHuisnummer = Trim(l_strHuisnummer);
		// Indien gewenst de waarde in de input text vervangen door de nieuwe waarde.
		if (blnUpdateText) l_objHuisnummer.value = l_strHuisnummer;
	}
	// Controleren of de waarde een lege string is.	
	if (l_strHuisnummer.length == 0)
	{
		if (blnMustEnter)
		{
			// Indien gewenst de gebruiker het opgegeven bericht tonen.
			if (blnShowAlerts) alert ("Huisnummer is verplicht.");
			// Indien gewenst de text input selecteren.
			if (blnBackToText) l_objHuisnummer.focus();
			// De waarde mag geen lege string zijn.
			return (false);
		}
		else
			// De waarde mag een lege string zijn.
			return (true);
	}
	// Controleren of de waarde numeriek is.	
	if (isNaN(parseInt(l_strHuisnummer, 10)))
	{
		// Indien gewenst de gebruiker het opgegeven bericht tonen.
		if (blnShowAlerts) alert ("Huisnummer mag alleen maar uit cijfers bestaan.");
		// Indien gewenst de text input selecteren.
		if (blnBackToText) l_objHuisnummer.focus();
		// De waarde is niet numeriek.
		return (false);
	}
	// De waarde is numeriek
	if (blnUpdateText) l_objHuisnummer.value = parseInt(l_strHuisnummer, 10)
	return (true);
}

function AddressValidate(strIDHuisnummer, strIDPostcode, strIDStraat, strIDPlaats, strIDStatusAdres, blnTrimValue, blnUpdateText, blnShowAlerts, blnBackToText)
{
	var l_objHuisnummer = document.getElementById(strIDHuisnummer);
	var l_objPostcode = document.getElementById(strIDPostcode);
	var l_objStraat = document.getElementById(strIDStraat);
	var l_objPlaats = document.getElementById(strIDPlaats);
	var l_objStatusAdres = document.getElementById(strIDStatusAdres);
	var l_strResult = new String();
	var l_strArray
				
	// Controleren of de parameters verwijzen naar bestaande id's van objecten
	if (eval(l_objHuisnummer) == null) {alert("Bad Object Reference: " + strIDHuisnummer + "\n\nFunction: AddressValidate"); return (false);}
	if (eval(l_objPostcode) == null) {alert("Bad Object Reference: " + strIDPostcode + "\n\nFunction: AddressValidate"); return (false);}
	if (eval(l_objStraat) == null) {alert("Bad Object Reference: " + strIDStraat + "\n\nFunction: AddressValidate"); return (false);}
	if (eval(l_objPlaats) == null) {alert("Bad Object Reference: " + strIDPlaats + "\n\nFunction: AddressValidate"); return (false);}
	if (eval(l_objStatusAdres) == null) {alert("Bad Object Reference: " + strIDStatusAdres + "\n\nFunction: AddressValidate"); return (false);}
				
	l_objStatusAdres.value = 0;

	if (!AddressValidateHousenumber(strIDHuisnummer, blnTrimValue, blnUpdateText, true, blnShowAlerts, blnBackToText))
	{
		if (blnUpdateText)
		{
			l_objStraat.value = "";
			l_objPlaats.value = "";
		}
		return (false);
	}
	if (TextValidateIsEmpty(strIDPostcode, blnTrimValue, blnUpdateText, true, blnShowAlerts, "Postcode is verplicht.", blnBackToText))
	{
		if (blnUpdateText)
		{
			l_objStraat.value = "";
			l_objPlaats.value = "";
		}
		return (false);
	}
	if (blnUpdateText)
	{
		l_objPostcode.value = l_objPostcode.value.toUpperCase();
		l_objPostcode.value = ReplaceString(l_objPostcode.value, " ", "", 0, true);
	}
	l_strResult = URLDecode($http("validate_direct.asp?validation=postcode&postcode=" + l_objPostcode.value + "&huisnummer=" + l_objHuisnummer.value));
	switch (parseInt(l_strResult.charAt(0), 10))
	{
		case 0:
		{
			l_strResult = l_strResult.substr(2, l_strResult.length - 2);
			l_strArray = l_strResult.split("|")
			l_objStraat.value = l_strArray[0];
			l_objPlaats.value = l_strArray[1];
			l_objStatusAdres.value = 1;
			return (true);
		}
		case 1:
		{
			alert("De ingevoerde postcode is kon niet worden gevonden.");
			if (blnUpdateText)
			{
				l_objStraat.value = "";
				l_objPlaats.value = "";
			}
			if (blnBackToField)	l_objPostcode.focus();
			return (false);
		}
		case 2:
		{
			alert("Het ingevoerde huisnummer kon niet worden gevonden bij de ingevoerde postcode.");
			if (blnUpdateText)
			{
				l_objStraat.value = "";
				l_objPlaats.value = "";
			}
			if (blnBackToField) l_objHuisnummer.focus();
			return (false);
		}
	}
	return (false);
}
