//per formnulier worden hier de te controleren velden opgenomen en het soort validatie.
function validate(form) {
  switch(form) {
    case "inschrijvenHomepage" :
      return formValidator(form, [['e-mailadres', 'verplicht'], ['e-mailadres', 'emailadres']]);
      break;    
    case "Adverteren" :
      return formValidator(form, [['naam','verplicht'], ['e-mailadres', 'verplicht'], ['e-mailadres','emailadres']]);
      break;
    case "Afkortingen" :
      return formValidator(form, [['naam','verplicht'], ['e-mailadres', 'verplicht'], ['e-mailadres','emailadres']]);
      break;
    case "bijles":
      return formValidator(form, [['type','verplicht'], ['naam', 'verplicht'], ['geslacht','selecteer'], ['adres','verplicht'], ['postcode','verplicht'], ['plaats','verplicht'], ['provincie','selecteer'], ['telefoon','verplicht'], ['e-mailadres','verplicht'], ['e-mailadres','emailadres'], ['categorie','selecteer'], ['niveau','verplicht'], ['locatie', 'verplicht']]);
      break;
    case "Contact" :
      return formValidator(form, [['naam','verplicht'], ['e-mailadres', 'verplicht'], ['e-mailadres','emailadres']]);
      break;
    case "Antoniemen" :
      return formValidator(form, [['naam','verplicht'], ['woord','verplicht'], ['e-mailadres', 'verplicht'], ['e-mailadres','emailadres']]);
      break;
    case "Begrippen" :
      return formValidator(form, [['naam','verplicht'], ['begrip','verplicht'], ['e-mailadres', 'verplicht'], ['e-mailadres','emailadres']]);
      break;
    case "Bijles" :
      return formValidator(form, [['naam','verplicht'], ['begrip','verplicht'], ['e-mailadres', 'verplicht'], ['e-mailadres','emailadres']]);
      break;
    case "Boeken" :
      return formValidator(form, [['naam','verplicht'], ['e-mailadres', 'verplicht'], ['e-mailadres','emailadres']]);
      break;
    case "Foutmelding" :
      return formValidator(form, [['foutgevonden', 'selecteer'], ['boodschap', 'verplicht'], ['e-mailadres', 'verplicht'], ['e-mailadres','emailadres']]);
      break;
    case "Nieuwsbrief" :
      return formValidator(form, [['e-mailadres', 'verplicht'], ['e-mailadres', 'emailadres']]);
      break;
    case "Inschrijven" :
      return formValidator(form, [['e-mailadres', 'verplicht'], ['e-mailadres', 'emailadres']]);
      break;
    case "Kalender" :
      return formValidator(form, [['wat', 'verplicht'], ['waar', 'verplicht'], ['datum_van', 'verplicht'], ['datum_tot', 'verplicht'], ['tijd_van', 'verplicht'], ['tijd_tot', 'verplicht'], ['beschrijving', 'verplicht'], ['e-mailadres', 'verplicht'], ['e-mailadres', 'emailadres']]);
      break;
    case "Links" :
      return formValidator(form, [['naam', 'verplicht'], ['e-mailadres', 'verplicht'], ['e-mailadres', 'emailadres'], ['relatie', 'selecteer'], ['website', 'verplicht']]); 
      break;
    case "Quote" :
      return formValidator(form, [['naam', 'verplicht'], ['e-mailadres', 'verplicht'], ['e-mailadres', 'emailadres'], ['van wie', 'verplicht'], ['quote', 'verplicht']]); 
      break;
     case "Synoniemen" :
      return formValidator(form, [['naam', 'verplicht'], ['e-mailadres', 'verplicht'], ['e-mailadres', 'emailadres'], ['woord', 'verplicht']]);
      break;
    case "Uitschrijven" :
      return formValidator(form, [['e-mailadres', 'verplicht'], ['e-mailadres', 'emailadres']]);
      break;
    case "Vertalingen" :
      return formValidator(form, [['naam', 'verplicht'], ['contactpersoon', 'verplicht'], ['adres', 'verplicht'], ['postcode', 'verplicht'], ['plaats', 'verplicht'], ['e-mailadres', 'verplicht'], ['e-mailadres', 'emailadres'], ['brontaal', 'verplicht'], ['doeltaal', 'verplicht'], ['soortvertaling', 'verplicht']]);
      break;
    case "Woordenboek" :
      return formValidator(form, [['naam', 'verplicht'], ['e-mailadres', 'verplicht'], ['e-mailadres', 'emailadres'], ['woord', 'verplicht']]); 
      break;
    case "Biografieen" :
      return formValidator(form, [['naam', 'verplicht'], ['e-mailadres', 'verplicht'], ['e-mailadres', 'emailadres'], ['econoom', 'verplicht'], ['biografie', 'verplicht']]); 
      break;
    default :
			alert('Ongeldig formulier!');
			return false;
			break;
	}
}

//hier worden de gevonden fouten en bijbehorende meldingen verzameld
function msg(form, txts) {
  outTxts = ['Het formulier is niet correct ingevuld:\n'];
  for (i=0;i<txts.length;i++) {
    v = txts[i][0];
    t = txts[i][1];
    
  	while (t.indexOf("%1")>=0) {
  		name = v.name;
  		name = name.substring(0,1).toUpperCase() + name.substring(1);
  		t = t.replace("%1", "'"+name+"'");
  	}
  	outTxts.push(t);
  }
  return outTxts.join("\n");
}

//'velden' is een array met als elementen: [formveldnaam. soort validatie]
function formValidator(form, velden) {
  msgTxts = [];
  errors = 0;
  for (i=0;i<velden.length;i++) {
		elem = velden[i];
		
    fields = document.getElementsByName(elem[0]);
    if (fields.length) {
      field = fields[0];  		
      validType = elem[1];
  
      //%1 == wordt in foutmelding (function msg()) vervangen door naam van veld
  		switch(validType) {
  			case 'verplicht':
  				if (isEmpty(field)) {
            msgTxts.push([field, '%1 is een verplicht veld.']);
            errors++;
          }
  				break;
  			case 'tekst':
  				if (!isAlphabet(field)) {
            msgTxts.push([field, '%1: je kunt hier alleen letters (a-z / A-Z) invullen.']);
            error++;
          }
  				break;
  			case 'alfanumeriek':
  				if (!isAlphanumeric(field)) {
            msgTxts.push([field, '%1: je kunt hier alleen letters en cijfers (a-z / A-Z / 0-9) invullen.']);
            errors++;
          }
  				break;
  			case 'numeriek':
  				if (!isNumeric(field)) {
            msgTxts.push([field, '%1: je kunt hier alleen cijfers (0-9) invoeren.']);
            errors++;
    		  }
  			  break;
  			case 'selecteer':
  				if (!madeSelection(field)) {
            msgTxts.push([field, '%1: selecteer een optie.']);
            errors++;
          }
  				break;
  			case 'emailadres':
  				if (!emailValidator(field)) {
            msgTxts.push([field, 'U heeft een ongeldig e-mailadres ingevuld.']);
            errors++;
          }
  				break;
  			default:
  				break;
  		}
    }
	}
	if (errors > 0) {
    alert(msg(form, msgTxts));
    return false;
  }
	return true;
}

function isEmpty(elem){
	if(elem.value.length == 0){
		elem.focus(); // set the focus to this input
		return true;
	}
	return false;
}

function isNumeric(elem){
	var numericExpression = /^[0-9]+$/;
	if(elem.value.match(numericExpression)){
		return true;
	}else{
		elem.focus();
		return false;
	}
}

function isAlphabet(elem){
	var alphaExp = /^[a-zA-Z]+$/;
	if(elem.value.match(alphaExp)){
		return true;
	}else{
		elem.focus();
		return false;
	}
}

function isAlphanumeric(elem){
	var alphaExp = /^[0-9a-zA-Z]+$/;
	if(elem.value.match(alphaExp)){
		return true;
	}else{
		elem.focus();
		return false;
	}
}

function lengthRestriction(elem, min, max){
	var uInput = elem.value;
	if(uInput.length >= min && uInput.length <= max){
		return true;
	}else{
		elem.focus();
		return false;
	}
}

function madeSelection(elem){
	if(elem.value.indexOf("Selecteer") >= 0) {
		elem.focus();
		return false;
	}else{
		return true;
	}
}

function emailValidator(elem){
  if (elem.value=="") return true; //checken of een veld gevuld is gebeurt met de 'verplicht'-validatie, dus als hier het veld leeg is, wordt het genegeerd
	var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;
	if(elem.value.match(emailExp)){
		return true;
	}else{
		elem.focus();
		return false;
	}
} 
