/*
	================================================================================
	= 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);
}


function ValidateProductnumber(strIDProductnumber, blnMustEnter, blnUpdateText, blnShowAlerts, blnBackToText)
{
	var l_objProductnumber = document.getElementById(strIDProductnumber);
	var l_strResult = new String();
				
	// Controleren of de parameters verwijzen naar bestaande id's van objecten.
	if (eval(l_objProductnumber) == null) {alert("Bad Object Reference: " + strIDProductnumber + "\n\nFunction: ValidateProductnumber"); return (false);}
	if (TextIsEmpty(strIDProductnumber, blnUpdateText, blnUpdateText))
	{
		if (blnMustEnter)
		{
			if (blnShowAlerts) alert(strIDProductnumber + " is verplicht.");
			if (blnBackToText) l_objProductnumber.focus();
			return (false);
		}
		return (true);
	}
	
	if (isNaN(l_objProductnumber.value)){
		if (blnShowAlerts) alert ("Een productnummer mag alleen maar cijfers bevatten.");
		if (blnUpdateText) l_objProductnumber.value = "";
		if (blnBackToText) l_objProductnumber.focus();
		return (false);
	}
	
	if (l_objProductnumber.value.length != 12){
		if (blnShowAlerts) alert ("Een productnummer heeft 12 cijfers.");
		if (blnUpdateText) l_objProductnumber.value = "";
		if (blnBackToText) l_objProductnumber.focus();
		return (false);
	}
	
	if (l_objProductnumber.value == '854674022640')
	{
		if (blnShowAlerts) alert ("Dit is een voorbeeldsticker van het boekje.");
		if (blnUpdateText) l_objProductnumber.value = "";
		if (blnBackToText) l_objProductnumber.focus();		
		return (false);
	}
	
	l_strResult = $http("validate_direct.asp?validation=productnumber&itemnumber=" + l_objProductnumber.value);	
	if (isNaN(parseInt(l_strResult, 10)))
	{
		if (blnShowAlerts) alert ("Er is een fout opgetreden tijdens het controleren.\n\nProbeer het nogmaals.");
		return (false);
	}

	if (parseInt(l_strResult, 10) == 0)
	{
		if (blnShowAlerts) alert ("U heeft een ongeldig productnummer ingevoerd.");
		if (blnUpdateText) l_objProductnumber.value = "";
		if (blnBackToText) l_objProductnumber.focus();
		return (false);
	}

	return (true);
}	



function ValidateSerialnumber(strIDSerialnumber, lngCounter, blnMustEnter, blnUpdateText, blnShowAlerts, blnBackToText)
{
	var l_objSerialnumber = document.getElementById(strIDSerialnumber);
	var l_strResult = new String();
				
	// Controleren of de parameters verwijzen naar bestaande id's van objecten.
	if (eval(l_objSerialnumber) == null) {alert("Bad Object Reference: " + strIDSerialnumber + "\n\nFunction: ValidateSerialnumber"); return (false);}
	if (TextIsEmpty(strIDSerialnumber, blnUpdateText, blnUpdateText))
	{
		if (blnMustEnter)
		{
			if (blnShowAlerts) alert(strIDSerialnumber + " is verplicht.");
			if (blnBackToText) l_objSerialnumber.focus();
			return (false);
		}
		return (true);
	}
	
	if (isNaN(l_objSerialnumber.value)){
		if (blnShowAlerts) alert ("Een serienummer mag alleen maar cijfers bevatten.");
		if (blnUpdateText) l_objSerialnumber.value = "";
		if (blnBackToText) l_objSerialnumber.focus();
		return (false);
	}
	
	if (l_objSerialnumber.value.length != 12){
		if (blnShowAlerts) alert ("Een serienummer heeft 12 cijfers.");
		if (blnUpdateText) l_objSerialnumber.value = "";
		if (blnBackToText) l_objSerialnumber.focus();
		return (false);
	}
	
	if (l_objSerialnumber.value.substr(0, 4) == '4619')
	{
		if (blnShowAlerts) alert ("Een serienummer begint niet met 4619...");
		if (blnUpdateText) l_objSerialnumber.value = "";
		if (blnBackToText) l_objSerialnumber.focus();
		return (false);
	}
	
	if (l_objSerialnumber.value.substr(0, 4) == '5019')
	{
		if (blnShowAlerts) alert ("Een serienummer begint niet met 5019...");
		if (blnUpdateText) l_objSerialnumber.value = "";
		if (blnBackToText) l_objSerialnumber.focus();
		return (false);		
	}	
	
	if (l_objSerialnumber.value.substr(0, 2) == '85')
	{
		if (blnShowAlerts) alert ("Een serienummer begint niet met 85...");
		if (blnUpdateText) l_objSerialnumber.value = "";
		if (blnBackToText) l_objSerialnumber.focus();
		return (false);		
	}	
	
	l_strResult = $http("validate_direct.asp?validation=serialnumber&serialnumber=" + l_objSerialnumber.value);
	if (isNaN(parseInt(l_strResult, 10)))
	{
		if (blnShowAlerts) alert ("Er is een fout opgetreden tijdens het controleren.\n\nProbeer het nogmaals.");
		return (false);
	}
	
	if (parseInt(l_strResult, 10) == 0)
	{
		if (blnShowAlerts) alert ("U heeft een ongeldig serienummer ingevoerd.");
		if (blnUpdateText) l_objSerialnumber.value = "";
		if (blnBackToText) l_objSerialnumber.focus();
		return (false);
	}
	
	var myInt;
	myInt = eval(lngCounter);
	//alert(myInt);
	
	for (i=1;i<myInt;i++){	
		if (document.frm5jr["Serialnumber00"+i+"_091"].value==document.frm5jr["Serialnumber00"+myInt+"_091"].value)
		{
			//window.focus();
			if (document.frm5jr["Serialnumber00"+myInt+"_091"].value!=="")
			{
				alert("Serienummer reeds ingevoerd, ander nummer invoeren. :)");			
			}
			document.frm5jr["Serialnumber00"+myInt+"_091"].value="";			
			return false;
		}		
	}
	return (true);
}	
