//@created by:	EdB
//@date:		21-07-2005
//@description	validatie op empty string, dus ook op spaties

//@COMMENT	-	Raymond Eijeriks	- 29-03-2006
//Kommentaar toegevoegd

function validateForm()
{
	//Haal alle input velden op en zet deze in de array (x)
	var x = document.getElementsByTagName('input');
	
	//Zet alle vereiste variabelen naar de default waarden
	var numErrs = 0
	var error_required = ''
	var error_email = ''
	var error_tel = ''
	var error_postcode = ''
	var error_radio = ''
	var error_number = ''
	var temp_password = ''
	var passwordErr = false
	var firstPassword = true
	var radioFound = false
	var radioChecked = false
	var radioStr = ''
	var numRadio = 0
	var fieldname = ''
	
	//Loop door alle items(inputvelden) in array(x)
	for (var i=0;i<x.length;i++)
	{
		//Controleer of er een aparte naam is gedefinieerd voor foutmeldingen
		if (x[i].getAttribute('fieldname'))
		{
			//Zet de foutmelding naam naar de gedefinieerde naam
			fieldname = x[i].getAttribute('fieldname')
		} else {
			//Gebruik de input naam
			fieldname = x[i].name
		}//Beeindig controle veldnaam
	
		//Controleer of het inputveld verplicht is en of er een waarde is ingevoerd
		if (x[i].getAttribute('required') && !x[i].value) {
			//Controleer of er al fouten zijn opgetreden
			if (numErrs == 0) {
				//Stel eerste zin van foutmelding in
				error_required = 'De volgende verplichte velden zijn niet ingevuld:\n\n'
			}
			//voeg naam van verplicht veld toe aan foutmelding
			error_required = error_required + fieldname + '\n'
			//Verhoog de foutmelding telling
			numErrs = numErrs + 1
		//Beeindig controle op verplicht veld	
		}
		//Controleer of de invoer van een veld aan een bepaald formaat moet voldoen
		if (x[i].getAttribute('infotype'))	{
			//controleer de verschillende voorwaarden van bepaalde infotypes
			switch(x[i].getAttribute('infotype'))
			{
				case 'email':
					//Stel de voorwaarden samen waaraan een e-mail adres moet voldoen
					re_email		= /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,})+$/;
					
					//Controleer of aan alle voorwaarden voldaan is
					if(re_email.test(x[i].value) == false) {
						//Stel foutmelding in
						error_email 	= "   + De invoer van "+ fieldname +" moet een @ en min 2 characters achter de punt bevatten\n";
						//Verhoog de foutmelding teller
						numErrs = numErrs + 1
					}
				break
				//@TODO		-	Raymond Eijeriks	-	29-03-2006
				//controleren of deze case op de juiste plaats staat
				//indien deze alleen voor verplichte velden geld, zou deze 
				//in het eerste deel geplaatst moeten worden.
				//Tevens controleren wat er gebeurd als een pagina meerdere sets
				//radiobuttons heeft
				case 'radio':
					//stel voorwaarde dat een radio button is gevonden
					radioFound = true;
					//Controleer of de radio button is aangevinkt
					if (x[i].checked == true)
					{
						//stel controle waarde in
						radioChecked = true;
					}
					//Controleer of dit de eerste button is	
					if (numRadio > 0)
					{
						//Bij latere buttons stel een afschijdings teken in
						radioStr = radioStr + "/";
					}
					//Voeg naam toe aan foutmeldings string
					radioStr = radioStr + fieldname;
					//Hoog button teller op
					numRadio = numRadio + 1
				break;
				
				case 'tel':
					//@TODO	-	Raymond Eijeriks	-	29-03-2006
					//Controleren of basisvoorwaarden van een telefoon nummer wel afdoende
					//gecontroleerd worden. Deze functie gaat op zijn kop als er een internationaal nummer 
					//ingevoerd wordt. Variabele naam re_ leid tot verwarring
					
					//Verwijder veelgebruikte markerings tekens en sla het opgeschoonde
					// telefoon nummer op in een tijdelijke variabele voor controle
					re_tel = x[i].value.replace(+/[\(\)\.\-\ ]/g, '');
					
					//Controleer of de invoer aan de juiste hoeveelheid getallen voldoet
					if (re_tel.length < 10) {
						//Stel foutmelding in voor de hoeveelheid getallen
						error_tel 	= "   + De invoer van "+ fieldname +" moet minimaal 10 cijfers bevatten\n";
						//verhoog de fouten telling
						numErrs = numErrs + 1
					}
				//	else {	//telefoon nummer voldoet aan de voorwaarden wb de lengte
				//		//Controleer of de tijdelijke variable volledig numeriek is
				//		if (isNaN(parseInt(re_tel))) {
				//			//stel foutmelding in voor een niet volledig numerieke invoer
				//			var error_tel 	= "   + De invoer van "+ fieldname +" bevat verboden tekens\n";
				//			//verhoog de fouten telling
				//			numErrs = numErrs + 1
				//		}//Beeindig numeriek controle
				//	}//Beeindig lengte controle
				break
				
				case 'postcode':
					//Stel basis voorwaarden in voor postcodes
					re_postcode = /^[1-9]{1}[0-9]{3} ?[a-z|A-Z]{2}$/;
					
					//Controleer of aan basis voorwaarden wordt voldaan
					if(re_postcode.test(x[i].value) == false) {
						//stel foutmelding in
						error_postcode 	= "   + De invoer van "+ fieldname +" moet 4 cijfers en 2 letters bevatten\n";
						//verhoog de fouttelling
						numErrs = numErrs + 1
					//Beeindig postcode controle	
					}
				break
				

				case 'postcode_cijfers':
					//Stel basis voorwaarden in voor postcodes
					re_postcode = /^[1-9]{1}[0-9]{3}$/;
					
					//Controleer of aan basis voorwaarden wordt voldaan
					if(re_postcode.test(x[i].value) == false) {
						//stel foutmelding in
						error_postcode 	= "   + De invoer van "+ fieldname +" moet 4 cijfers bevatten\n";
						//verhoog de fouttelling
						numErrs = numErrs + 1
					//Beeindig postcode controle	
					}
				break

				case 'postcode_letters':
					//Stel basis voorwaarden in voor postcodes
					re_postcode = /^[a-z|A-Z]{2}$/;
					
					//Controleer of aan basis voorwaarden wordt voldaan
					if(re_postcode.test(x[i].value) == false) {
						//stel foutmelding in
						error_postcode 	= "   + De invoer van "+ fieldname +" moet 2 letters bevatten\n";
						//verhoog de fouttelling
						numErrs = numErrs + 1
					//Beeindig postcode controle	
					}
				break


				case 'password':
					//@TODO	-	Raymond Eijeriks	-	29-03-2006
					//Controleren wat er gebeurd als het wachtwoord ingevuld moet worden
					//in een formulier met meerdere verplichte velden.
					//Wordt de foutmelding samen met de andere gegeven of wordt deze pas bij een
					//tweede controle getriggerd
				
					//Controleer of dit het eerste wachtwoord is
					//zie default variabelen boven aan de pagina
					if (firstPassword) {
						//sla het 1e password op in een temp-value
						temp_password = x[i].value
						//Verander de waarde van default variabele
						firstPassword = false;
					}
					else {
						//vergelijk het 2e password met de reeds opgeslagen waarde
						if (x[i].value != temp_password) {
							//Stel wachtwoord foutmelding in
							passwordErr	= true
						}//Beeindig vergelijking
					}//Beeindig controle telling wachtwoord
				break;

				case 'number':
					
					//Stel basisvoorwaarden voor een numeriek veld
					re_number = /^[0-9]*$/;
					
					//controleer een waarde is ingevuld
					if (x[i].value) {
						//controleer of aan basisvoorwaarden wordt voldaan
						if(re_number.test(x[i].value) == false) {
							//stel foutmelding in
							error_number = error_number + "   + De invoer van "+ fieldname +" moet uit cijfers bestaan\n";
							//verhoog fouttelling
							numErrs = numErrs + 1
						}//Beeindig controle basisvoorwaarden
					}//beeindig controle op ingevulde waarden
				break;
			}//Beeindig switch
		}//Beeindig controle op infotype
	}//Beeindig loop op type 'input'


	//nu ook listbox checken op 
	var x = document.getElementsByTagName('select');
	var error_listbox = ''
	var j = 0, found = 0	

	for (var i=0;i<x.length;i++)
	{
		if (x[i].getAttribute('fieldname'))
			fieldname = x[i].getAttribute('fieldname')
		else
			fieldname = x[i].name

		if (x[i].getAttribute('required')) {

			switch(x[i].getAttribute('infotype'))
			{
			case 'movebox':

			  if (x[i].length == 0) {
			    error_listbox = error_listbox + fieldname +"\n";
			    numErrs = numErrs + 1
			  }

			break;


			case 'combobox':
			case 'listbox':

			found = 0
			for (j = 0; j < x[i].options.length; j++) {
				if (x[i].options[j].selected) {
					if (x[i].value != 0) {
						found = 1
					}
				}
			}
			
			if (!found) {
				error_listbox = error_listbox + fieldname +"\n";
				numErrs = numErrs + 1
			}
			break;
			}
		}
	}
	

	if (radioFound) {
		if (!radioChecked) {
			numErrs = numErrs + 1
			error_radio = "Maak een keuze uit " + radioStr
		}
	}
	
	if (numErrs > 0) {
		alert(error_required + error_number + error_email + error_postcode + error_tel + error_listbox + error_radio)
		return false
	}
	else {
		if (passwordErr) {
			alert("Het wachtwoord is niet juist herhaalt, voer uw wachtwoorden opnieuw in")
			return false
		}
	}
	
	return true
}
