/** Javascript voor de MovE website (client side)
 *  Deze functies worden via een include in de header van een pagina opgeroepen.
 *  Dit is ook noodzakelijk voor formvalidatie.
 *  @author Steven Vandenoortgaete
 *  @author Marc Cornelis
 *  Wijzigingen
 *    maart 2008	: Javadoc commentaar toegevoegd. Formvalidatie wedstrijdformulier en commentaarformulier toegevoegd.
 *	  april 2008	: Nieuwe validatiefunctie voor het contactformulier + verwijderen oude code.
 *    okt 2008		: Nieuwe validatiefunctie voor zoekformulier collecties
 *	  nov 2008		: Aanvulling validatie commentaarformulier 
 *    maart 2009	: Herwerking zoekformulieren. Functies clearForm en isEmptyForm toegevoegd.
 *	  nov 2010		: Nieuwe validatiefunctie voor formulier aanvullen invulinstructie
 *		dec 2011		: Validatiefuncties Zoekbox Musea verwijderd (nu: widgets CultuurNet) / kleine aanpassing validatie formCommentaar
 *	Opmerkingen
 *		- Javascript is (itt CF) case gevoelig.
 *		- Form validaties gebeuren best van het laatste veld naar het eerste (foutmeldingen).
 *		- Beter is theoretisch een link naar de form mee te geven bij de oproep via het 'this' keyword, maar dit werkt niet bij het gebruik van cfform.
 */

/** Validatie Zoekbox collecties
 *  @author Marc Cornelis
 *  (nieuwe versie okt 2008)
 *  Foutmelding indien beide velden niet ingevuld zijn.
 * 
 */
function validateFormZoekCollecties()
{
	var message = "";
	var form = document.forms["formZoekCollecties"];
	
	if (isEmpty(form.museumPrefix.value) && isEmpty(form.zoektekst.value) ) {
		message = "Kies een museum of geef een zoekterm in!";
		form.zoektekst.focus();
	}

	if (message != "") {
		var elem = document.getElementById( 'message' ); // 
		elem.firstChild.nodeValue = message;
		return false;
	}
return true;
}

/** Validatie Zoekbox collecties uitgebreid zoekformulier
 *  @author Marc Cornelis
 *  nov 2008
 *  Foutmelding indien geen enkel veld ingevuld is.
 * 
 */
function validateFormZoekCollectiesUitgebreid()
{
	var message = "";
	var form = document.forms["formZoekCollectiesUitgebreid"];

	if (isEmpty(form.museumPrefix.value) && isEmptyForm(form) ) {
		message = "Kies een museum en/of vul een zoekveld in";
		form.zoektekst.focus();
	}

	if (message != "") {
		var elem = document.getElementById( 'message' ); // 
		elem.firstChild.nodeValue = message;
		return false;
	}

return true;
}

/** Validatie contactformulier (nieuwe versie)
 *  @author Marc Cornelis
 *  Foutmeldingen gaan naar het veld met id message.
 */
function validateFormContact()
{
	var message = "";
	var form = document.forms["formContact"];

	if (isEmpty(form.vragen.value)) {
		message = "Vul een vraag/opmerking/tip in";
		form.vragen.focus();
	}
	if (isEmpty(form.onderwerp.value)) {
		message = "Vul een onderwerp in";
		form.onderwerp.focus();
	}
	if (! isEmail(form.email.value)) {
		message = "Vul een geldig email adres in";
		form.email.focus();
	}
	if (isEmpty(form.voornaam.value)) {
		message = "Vul je voornaam in";
		form.voornaam.focus();
	}
	if (isEmpty(form.naam.value)) {
		message = "Vul je naam in";
		form.naam.focus();
	}

	if (message != "") {
		// alert( message );
		// Op basis van id tag in de html
		var elem = document.getElementById( 'message' ); // 
		elem.firstChild.nodeValue = message;
		return false;
	}

return true;
}


/** Validatie commentaarformulier [nu Reacties]
 *  @author Marc Cornelis
 *  Foutmeldingen gaan naar het veld met id message.
 */
function validateFormCommentaar()
{
	var message = "";
	var form = document.forms["formCommentaar"];

	if (form.captcha.value.length != 4 or form.captcha.value.length != 6) {
		message = "Vul de letters in die je ziet in de afbeelding";
		form.captcha.focus();
	}
	if (isEmpty(form.reactie.value)) {
		message = "Vul een reactie in";
		form.commentaar.focus();
	}
	if (! isEmail(form.email.value)) {
		message = "Vul een geldig email adres in";
		form.email.focus();
	}
	if (isEmpty(form.naam.value)) {
		message = "Vul je naam of pseudoniem in";
		form.naam.focus();
	}

	if (message != "") {
		// Op basis van id tag in de html
		var elem = document.getElementById( 'message' ); // 
		elem.firstChild.nodeValue = message;
		return false;
	}

return true;
}

/** Validatie formulier Invulinstructie [voor aanvullen van invulinstructie]
 *  @author Marc Cornelis - okt 2010
 *  Foutmeldingen gaan naar het veld met id message.
 */
function validateFormInvulinstructie()
{
	var message = "";
	var form = document.forms["formInvulinstructie"];

	if (form.captcha.value.length != 4) {
		message = "Vul de letters in die je ziet in de afbeelding";
		form.captcha.focus();
	}
	if (isEmpty(form.aanvulling.value)) {
		message = "Vul je aanvullingen in";
		form.commentaar.focus();
	}
	if (! isEmail(form.email.value)) {
		message = "Vul een geldig email adres in";
		form.email.focus();
	}
	if (isEmpty(form.naam.value)) {
		message = "Vul je naam of pseudoniem in";
		form.naam.focus();
	}

	if (message != "") {
		// Op basis van id tag in de html
		var elem = document.getElementById( 'message' ); // 
		elem.firstChild.nodeValue = message;
		return false;
	}

return true;
}

/** Validatie wedstrijdformulier
 *  @author Marc Cornelis
 *	Analoog met de Validatie van de form op de server : zie wedstrijd.cfm
 *  Foutmeldingen gaan naar het veld message.
 */
function validateFormWedstrijd()
{
	var message = "";
	var form = document.forms["formWedstrijd"];

	if (form.hoe.value.charAt(0) == "-") {
		message = "Hoe kwam je terecht op onze website ? Maak een keuze.";
		form.hoe.focus();
	}
	if (form.leeftijd.value.charAt(0) == "-") {
		message = "Kies een leeftijdscategorie";
		form.leeftijd.focus();
	}
	if (isEmpty(form.gemeente.value)) {
		message = "Vul je gemeente in";
		form.gemeente.focus();
	}
	if (isEmpty(form.postcode.value)) {
		message = "Vul je postcode in";
		form.postcode.focus();
	}
	if (isEmpty(form.straat_nr.value)) {
		message = "Vul je straat en huisnummer in";
		form.straat_nr.focus();
	}
	if (! isEmail(form.email.value)) {
		message = "Vul een geldig email adres in";
		form.email.focus();
	}
	if (isEmpty(form.voornaam.value)) {
		message = "Vul je voornaam in";
		form.voornaam.focus();
	}
	if (isEmpty(form.naam.value)) {
		message = "Vul je achternaam in";
		form.naam.focus();
	}
	if (form.antwoord2 != null) {
		if (isEmpty(form.antwoord2.value)) {
			message = "Vul ook het tweede deel van het antwoord in";
			form.antwoord2.focus();
		}
	}
	if (form.antwoord1 != null) {
		if (isEmpty(form.antwoord1.value)) {
			message = "Geef een antwoord";
			form.antwoord1.focus();
		}
	}
	// Merk op : De radiobuttons vormen een array
	if (form.antwoord0 != null) {
		var i = 0;
		var len = form.antwoord0.length;
		for (i = 0; i<len; i++) {
			if (form.antwoord0[i].checked) { break; }
		}
		if (i == len) {
			message = 'Maak een keuze';
		}
	}

	if (message != "") {
		// alert( message );
		// Op basis van id tag in de html
		var elem = document.getElementById( 'message' ); // 
		elem.firstChild.nodeValue = message;
		return false;
	}

return true;
}
/** Validatie inschrijvingsformulier ontmoetingsdag
 *  @author Marc Cornelis
 */
function validateFormOntmoetingsdag()
{
	var message = "";
	var form = document.forms["formOntmoetingsdag"];

	if (! isEmail(form.email.value)) {
		message = "Vul een geldig email adres in";
		form.email.focus();
	}
	if (isEmpty(form.organisatie.value)) {
		message = "Vul de organisatie in die je vertegenwoordigt";
		form.organisatie.focus();
	}
	if (isEmpty(form.voornaam.value)) {
		message = "Vul je voornaam in";
		form.voornaam.focus();
	}
	if (isEmpty(form.naam.value)) {
		message = "Vul je achternaam in";
		form.naam.focus();
	}

	if (message != "") {
		// Op basis van id tag in de html
		var elem = document.getElementById( 'message' );
		elem.firstChild.nodeValue = message;
		return false;
	}

return true;
}


/** Validatie formulier uitgebreid zoeken in de collecties (TESTFASE aug 2008)
 *  @author Marc Cornelis
 *  Foutmeldingen gaan naar het veld message.
 */
function validateFormZoekCollecties2()
{
	var message = "";
	var form = document.forms["formZoekCollecties2"];

	if (message != "") {
		// alert( message );
		// Op basis van id tag in de html
		var elem = document.getElementById( 'message' ); // 
		elem.firstChild.nodeValue = message;
		return false;
	}

return true;
}

/** Form validatie javascript functies 
 *  @author Marc Cornelis
 *  Gebaseerd op Stephen Poley (web)
 */

/**                  trim
 * Trim leading/trailing whitespace off string (SP)
 * Er is geen standaard trim functie in Javascript.
 */
function trim(str)
{
  return str.replace(/^\s+|\s+$/g, '');
}

/**                  isEmpty
 * Door te testen op een regular expression (SP)
 */
function isEmpty(str)
{
	var strEmpty = /^\s*$/ ;
  return strEmpty.test(trim(str)); 
}
/**                  isEmail
 * Door te testen op een regular expression (SP)
 */
function isEmail(str)
{
  var strEmail = /^[^@]+@[^@.]+\.[^@]*\w\w$/  ;
  return strEmail.test(trim(str)); 
}

/** Leegmaken van alle tekstvelden in een form 
 *  @author Marc Cornelis
 */
function clearForm(f)
{  
  var aFields = f.elements; 

  for(i=0; i<aFields.length; i++)
	{    
		field_type = aFields[i].type.toLowerCase();
		
		switch(field_type) 
		{	
			case "text": 
			case "password": 
			case "textarea":		
				aFields[i].value = ""; 
				break;

			/* other fields */
			default: 
				break;
		}
	}
	return;
}

/** Test of minstens 1 tekstveld in een form is ingevuld.
 *  @author Marc Cornelis
 */
function isEmptyForm(f)
{  
  var aFields = f.elements; 
	var bEmpty = true;
	var i = 0;
	var n = aFields.length;
	
	while (bEmpty && i<n) {
 		field_type = aFields[i].type.toLowerCase();
		
		switch(field_type) {	
			case "text": 
			case "password": 
			case "textarea":		
				if (aFields[i].value != "") {
					bEmpty = false;
				}
				break;

			/* other fields */
			default: 
				break;
		}
		i++;
	}
	return bEmpty;
}
