
var isMac;
isMac = (navigator.appVersion.indexOf("Mac")!=-1) ? true : false;

/*
 *  Algemene Javascript functies
 */

var t_tekst     = 1;
var t_datum     = 2;
var t_keuze     = 3;
var t_nummer    = 4;
var t_bedrag    = 5;
var t_meerkeuze = 6;



/*
 ************************************************************************************
 * Validatie Functies
 ************************************************************************************
 */

/*
 * isNummer( nummer)    Controleert of de gegeven string een juist nummer is
 *
 * returned             true wanneer het een goed nummer is anders false
 */

function isNummer( nummer)
{
    var i;

    nummer = trim( nummer);

    /* Een leeg nummer is geen nummer */
    if( isLeeg( nummer))     return false;

    /* Kijk of het nummer alleen uit cijfers bestaat */
    for( i = 0; i < nummer.length; i++) {
         if( nummer.charAt(i) < '0'  ||  nummer.charAt(i) > '9')    return( false);
    }

    /* Geen fout gevonden */
    return( true);
}


/* initialen   zet een string om in hoofdletters en zet er puntjes tussen als deze ontbreken  */

function initiaalKapitalen( str)
{
	var i;
	var nw;

	/* Null string wordt leeg */
	if( str == null) {
		return '';
	}

	str = String( str);
	nw = '';

	if( str.length >= 1) {
	     	for( i=0; i < str.length; i++) {
			nw += str.charAt(i).toUpperCase();
			/* zet een punt tussen 2 karakters die beide geen punt zijn */
                        if ( (str.charAt(i) != '.') && (str.charAt( i+1) != '.')) {
		    		nw += '.';
		    	}
	     	}
	}
	return nw;
}


/*
 * isDatum( dag, maand, jaar)    Controleert of de gegevens strings samen een juiste datum vormen
 *
 * returned                      true wanneer het een goed datum is anders false
 */

function isDatum( dag, maand, jaar)
{
    var dagenInMaand =  new Array( 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

    /* Als alle waarden leeg zijn beschouwen we dit als een goede datum */
    if( dag == ''  &&  maand == ''  &&  jaar == '')     return true;

    /* Controleer eerst of het allemaal nummers zijn */
    if( !isNummer( dag)  ||  !isNummer( maand)  ||  !isNummer( jaar))    return( false);

    /* Controleer range van de maand */
    if( maand < 1  ||  maand > 12 )    return( false);

    /* Controleer het jaar */
    if( jaar < 1753  ||  jaar > 2100)  return( false);

    /* Controleer op een schrikkeljaar */
    if( maand == 2  &&  dag == 29) {
       if(!(jaar % 4 == 0  &&  (jaar % 100 != 0   ||  jaar % 400 == 0))) return false;    /* We hebben geen schrikkeljaar */
    }

    /* Controleer de dag */
    if( dag < 1  ||  dag > dagenInMaand[maand - 1])  return( false);

    /* Als we hier zijn is de datum goed */
    return( true);
}



/*
 * isLeeg( string)    Controleert of de gegeven string leeg is of alleen maar spaties bevat
 *
 * returned           true wanneer de string leeg is anders false
 */

function isLeeg( deString)
{
   return( trim( deString).length == 0);
}




/*
 * isGeldigEmailadres( deString)    Controleert of de gegeven string een goed emailadres is
 *
 * returned                         true wanneer de string een geldig emailadres is
 */

function isGeldigEmailadres( deString)
{
   var EmailOk  = true
   var AtSym    = deString.indexOf('@')
   var Period   = deString.lastIndexOf('.')
   var Space    = deString.indexOf(' ')
   var Length   = deString.length - 1   // Array is from 0 to length-1

   if ((AtSym < 1) ||                   // '@' cannot be in first position
   (Period <= AtSym+1) ||               // Must be atleast one valid char btwn '@' and '.'
   (Period == Length ) ||               // Must be atleast one valid char after '.'
   (Space  != -1))                      // No empty spaces permitted
   {
     EmailOk = false
   }
   return EmailOk;
}


/*
 * Controleert een telefoonnummer
 */

function isTelefoonnummer( nummer) {
  return nummer.match( /^[\(\)\-\+\d\s]+$/);
}

/*
 * isURL()
 *
 */
function isURL(argvalue) {

  if (argvalue.indexOf(" ") != -1)
    return false;
  else if (argvalue.indexOf("http://") == -1)
    return false;
  else if (argvalue == "http://")
    return false;
  else if (argvalue.indexOf("http://") > 0)
    return false;

  argvalue = argvalue.substring(7, argvalue.length);
  if (argvalue.indexOf(".") == -1)
    return false;
  else if (argvalue.indexOf(".") == 0)
    return false;
  else if (argvalue.charAt(argvalue.length - 1) == ".")
    return false;

  if (argvalue.indexOf("/") != -1) {
    argvalue = argvalue.substring(0, argvalue.indexOf("/"));
    if (argvalue.charAt(argvalue.length - 1) == ".")
      return false;
  }

  if (argvalue.indexOf(":") != -1) {
    if (argvalue.indexOf(":") == (argvalue.length - 1))
      return false;
    else if (argvalue.charAt(argvalue.indexOf(":") + 1) == ".")
      return false;
    argvalue = argvalue.substring(0, argvalue.indexOf(":"));
    if (argvalue.charAt(argvalue.length - 1) == ".")
      return false;
  }

  return true;
}


/*
 * isPostcode					Controleert of de gegeven postcode een juiste is
 */

function isPostcode( postcode)
{
		/* Eerst 4 cijfers, een spatie en twee letters */
                return postcode.match( /^\d{4} *[a-zA-Z]{2}$/);
}




/* eersteKapitaal    Maakt van de eerste letter in de gegeven string en hoofdletter en geeft de nieuwe string terug */

function eersteKapitaal( str)
{
    var nw;

    /* Null string wordt leeg */
    if( str == null) {
        return '';
    }

    str = String( str);
    nw = '';

    /* Eerste letter wordt hoofdletter */
    if( str.length >= 1) {
        nw += str.charAt(0).toUpperCase();
    }

    /* Rest zo laten */
    if( str.length >= 2) {
        nw += str.substr( 1, str.length - 1);
    }

    return nw;
}


/*
 * vergelijkDatum( dag1, maand1, jaar1, dag2, maand2, jaar2)
 *       Vergelijkt twee datums en returned de volgende waarden:
 *       -1  :  datum1 is kleiner dan datum2
 *       0   :  datum1 en datum2 zijn gelijk
 *       1   ;  datum1 is groter dan datum2
 */

function vergelijkDatums( dag1, maand1, jaar1, dag2, maand2, jaar2)
{
    var datum1, datum2;

    if( dag1 == dag2  &&  maand1 == maand2  &&  jaar1 == jaar2) {
        return 0;
    }

    datum1 = new Date( jaar1, maand1 - 1, dag1);
    datum2 = new Date( jaar2, maand2 - 1, dag2);

    if( datum1 < datum2) {
        return -1;
    }
    else {
        return 1;
    }
}



/*
 * Kijkt of er minimaal een van de checkboxen in het formulier met de gegeven naam is aangevinkt
 */

function isAangevinkt( formulier, veldNaam)
{
    var     i;

    for( i = 0; i < formulier.elements.length; i++) {
        veld = formulier.elements[i];

        /* Wanneer het veld een naam heeft en de naam goed is en hij is aangevinkt, zijn we klaar */
        if( veld.type == 'checkbox'  &&  veld.name == veldNaam  &&  veld.checked) {
            return true;            /* We hebben er een gevonden */
        }
    }

    /* Als we hier komen hebben we niets gevonden */
    return false;
}



/*
 * completeURL()    returned een complete URL op basis van het gegeven relatieve pad
 */

function completeURL( bestand)
{
    var  l, url;

    l = window.location;
    url = l.protocol + '//' + l.hostname + '/' + l.pathname;

    return url.substring( 0, url.lastIndexOf('/')) + '/' + bestand;
}



/*
 * voegToeAanVeld()   Voegt het gegeven ID en omschrijving toe aan het gegeven formulier veld (van het type SELECT)
 *                     Wanneer het ID al in het veld voorkomt wordt het niet toegevoegd
 */

function voegToeAanVeld( veld, ID, omschrijving)
{
    var leeg;

    /* Als het ID nog niet voorkomt, voeg het dan toe */
    if( !IDInVeld( veld, ID)) {
        /* Voeg dan de nieuwe regel toe */
        veld.options[veld.length] = new Option(omschrijving, ID, false, false);
    }
}



/*
 * IDinVeld()          Bepaalt of het gegeven ID voorkomt in het gegeven formulier veld (van het type SELECT)
 */

function IDInVeld( veld, ID)
{
    var i;

    for( i = 0; i < veld.length; i++) {
        if( veld.options[i].value == ID) {
            return true;
        }
    }

    return false;
}



/*
 * verwijderUitVeld    Verwijderd de geselecteerd uit het gegeven veld (deze is van het type SELECT). Wanneer de laatste
 *                     regel, of niets is geselecteerd gebeurt er niets
 */

function verwijderUitVeld( veld)
{
    /* Kijk eerst of we iets geselecteerd hebben */
    if( veld.selectedIndex >= 0) {
    	/* Laat de lege regel staan */
        if( veld.options[veld.selectedIndex].value != '') {
            veld.options[veld.selectedIndex] = null;
        }
    }
}





/*
 * maakOptionsString()   Maakt van het gegeven veld (van het type SELECT) een string waarbij de opties door komma's worden gescheiden.
 *                       De gemaakte string wordt gereturned
 */

function maakOptionsString( veld)
{
    var   i, str;

    str = '';
    for( i = 0; i < veld.options.length; i++) {
		/* Lege regels niet meenemen */
        if( veld.options[i].value != '') {
            if( str != '') {
        	    str += ',';
	        }

            str += veld.options[i].value;
		}
    }

    return str;
}


var typeSelectBuffer = '';      // Wordt gebruikt in typeSelect en typeSelectInit
var typeSelectTijd   = 0;       // Laatste keer dat er iets is toegevoegd aan de buffer



/*
 * typeSelect()     Wordt aangeroepen vanuit de keyPress handler van select form elementen
 *                  Het stop alle ingetyped letters in typeSelectBuffer en zoek het eerste element in de lijst op
 *                  die met deze letters beginnen.
 */

function typeSelect( netscapeEvent)
{
    var  letter, code, veld, gevonden, optie, tijd, nu, passEvent;

    /* Haal het veld en de toets op in Netscape */
    if( typeof( netscapeEvent) != 'undefined') {
        code   = netscapeEvent.which;
        veld   = netscapeEvent.target;
    }
    /* Doe het voor internet explorer */
    else if( typeof( window.event) != 'undefined') {
        code   = window.event.keyCode;
        veld   = window.event.srcElement;
    }

    /* Event is onbekend, dus laat de browser het afhandelen */
    else {
        return true;
    }

    /* Wanneer het geen letter of cijfer betreft wijzig dan het veld */
    letter = String.fromCharCode( code).toLowerCase();
    if( !(letter >= 'a'  &&  letter <= 'z')  &&  !(letter >= '0'  &&  letter <= '9')) {
        /* Als we een onchange handler hebben, roep die dan aan */
        if( (letter == '\n' ||  letter == '\r')  &&  typeof( veld.onchange) == "function") {
            veld.onchange();
            return false;
        }

        typeSelectBuffer = '';
        return false;
    }

    /* Wanneer het al heel lang geleden is nadat de laatste keer een letter is getyped wis dan de buffer */
    nu = new Date();
    if( nu.getTime() - typeSelectTijd >= (2 * 1000)) {        /* 2 seconden */
        typeSelectBuffer = '';
    }
    typeSelectTijd = nu.getTime();

    typeSelectBuffer += letter.toLowerCase();

    gevonden = -1;

    /* Zoek het item op dat begint met de string uit typeSelect buffer */
    for( optie = 0; optie < veld.options.length  &&  gevonden < 0; optie++) {
        if( veld.options[optie].text.substring(0, typeSelectBuffer.length).toLowerCase() == typeSelectBuffer) {
            gevonden = optie;
        }
    }

    /* Als we een item gevonden hebben, selecteer die dan */
    if( gevonden >= 0) {
        veld.options[gevonden].selected = true;
        veld.value = veld.options[gevonden].value;
        veld.selectedIndex = gevonden;
    }

    return false;
}



/*
 * initTypeSelect()   Wordt aangeroepen vanuit de focus handler van een select veld. Zet de typeSelectBuffer op leeg
 *                    zodat in elke select met een nieuwe buffer wordt begonnen
 */

function initTypeSelect()
{
    typeSelectBuffer = '';
}

gSchermGewijzigd = false;   /* Globale variabele die bijhoudt of het scherm gewijzigd is, wordt gewijzigd in de functie markeerAlsGewijzigd */



/* markeerAlsGewijzigd()    Deze functie wordt aangeroepen vanuit de onChange event handler en zet de waarde van de globale
 *                          variabele gSchermGewijzigd op true. Als de parent van dit scherm ook een gSchermGewijzigd variabele
 *                          heeft wordt deze ook gewijzigd (in het geval van IFrames)
 */

function markeerAlsGewijzigd()
{
    /* Als we niet in de submitfase zijn moeten we de gewijzigd vlag zetten */
    window.gSchermGewijzigd = true;
    if( typeof( parent.gSchermGewijzigd) == 'boolean') {
        parent.gSchermGewijzigd = true;
    }
}



/*
 * voegEventToe( hetObject, hetEvent, deFunctie)
 *                  hetEvent is b.v. 'change', 'mouseup' (dus zonder on)
 *                  Voegt een event toe aan een object. Eerst wordt gekeken of het IE of Netscape betreft. Aan de
 *                  hand daarvan wordt een andere functie aangeroepen.
 */

function voegEventToe( hetObject, hetEvent, deFunctie)
{
    /*  Probeer eerst de addEventListener methode (voor Netscape 6 o.a.) */
    if( typeof( hetObject.addEventListener) != 'undefined') {
        hetObject.addEventListener( hetEvent, deFunctie, true);
    }
    /* Probeer anders de attachEvent (voor IE 5 o.a.) */
    else if( typeof( hetObject.attachEvent) != 'undefined') {
        if( !hetObject.attachEvent( 'on' + hetEvent, deFunctie)) {
            alert('Fout tijdens attachen van event');
        }
    }
    /* Als die er ook niet is kunnen we niets doen */
}



/*
 * initForms()          Doet een initialisatie van alle formulieren in het huidige document.
 *                      Het zet de handlers voor alle select elementen:
 *                         onFocus wordt initTypeSelect
 *                         onKeyPress wordt typeSelect
 *                      Het selecteer het eerste text veld van het eerste formulier die niet leeg is waneer
 *                      selecteerEerste true is.
 */

function initForms( selecteerEerste)
{
    var     formulier, formNr, veldNr, veld, eerste;

    eerste = null;

    for( formNr = 0; formNr < document.forms.length; formNr++) {
        formulier = document.forms[formNr];

        for( veldNr = 0; veldNr < formulier.elements.length; veldNr++) {
            veld = formulier.elements[veldNr];

            /* Voeg een onchange handler toe */
            if( veld.type == 'checkbox'   ||  veld.type == 'radio'  ||  veld.type == 'select-multiple'  ||
                veld.type == 'select-one' ||  veld.type == 'text'   ||  veld.type == 'textarea') {
                    voegEventToe( veld, 'change', markeerAlsGewijzigd);
            }

            /*  We hoeven alleen de select velden maar te hebben voor de typeSelect */
            if( veld.type == 'select-one') {
                veld.onfocus    = initTypeSelect;
                veld.onkeypress = typeSelect;
            }

            /* Zoek het eerste text veld */
            if( eerste == null  &&  veld.type == 'text'  &&  veld.value != '') {
                eerste = veld;
            }
        }
    }

    /* Wanneer er een tekstveld gevonden is selecteerd dan de tekst hier van */
    if( eerste != null  &&  selecteerEerste) {
        eerste.select();
    }
}


/*
 * trim( string)     Haalt alle spaties aan het begin en het eind van een string weg
 */

function trim( deString)
{
    deString = String( deString);

	/* Verwijder alle spaties aan het begin */
    while( isSpatie( deString.charAt(0))) {
		deString = deString. substring( 1, deString.length);
	}

	/* Verwijder de spaties aan het eind */
    while( isSpatie( deString.charAt( deString.length - 1))) {
		deString = deString.substring( 0, deString.length - 1);
	}

	return( deString);
}




/*
 * isSpatie()   Controleer of het karakter een spatie, tab of nieuwe regel is
 */

function isSpatie( karakter)
{
    karakter = String( karakter);

	return( karakter == ' '   ||   karakter == '\n'  ||  karakter == '\r'  ||  karakter == '\t');
}


/*
 * popUp()   Toont een popup scherm met de gegeven URL en de gegeven breedte en hoogte
 */

function popUp( url, hoogte, breedte)
{
    var schermNaam, nu, scherm;

    nu = new Date;
    schermNaam = 'w' + nu.getMilliseconds();

    scherm = window.open( url, schermNaam, 'scrollbars=no,resizable=no,menubar=no,status=no,width=' + breedte +  ',height=' + hoogte);
}



/*
 * wisVelden( formulier)    Maakt alle zoekvelden leeg van het type checkbox, select-one en text
 */

function wisVelden( formulier)
{
    // Wis eerst alles
    for( i = 0; i < formulier.elements.length; i++) {
        veld = formulier.elements[i];

        if( veld.type == 'checkbox') {
            veld.checked = false;
        }
        else if( veld.type == 'select-one') {
            veld.selectedIndex = 0;
        }
        else if( veld.type == 'text') {
            veld.value = '';
        }
    }
}


/*
 * Gedeelde functies tussen javascript en VBScript
 */



/*
 * verkort      Returned een tekst die maximaal de lengte maxlen heeft. Wanneer de tekst langer is wordt het laatste vervangen door ...
 */

function verkort( tekst, maxLen)
{
    var korteTekst, spatie;

    tekst = String( tekst);
    maxLen = Number( maxLen);

    if( tekst.length > maxLen) {
        korteTekst = tekst.substr( 0, maxLen - 4)

        /* Zoek de laatste spatie op */
        spatie = korteTekst.lastIndexOf(' ');
        if( spatie < 0) spatie = korteTekst.length;

        korteTekst = korteTekst.substr( 0, spatie ) + '...';
    }
    else {
        korteTekst = tekst;
    }

    return korteTekst;
}


/*
 * inArray( reeks, waarde)    Kijkt of de waarde zich in het array bevindt
 */

function inArray( reeks, waarde)
{
    var   i;

    for( i = 0; i < reeks.length; i++) {
         if( reeks[i] == waarde) {
             return true;
         }
    }

    return false;
}

function verwijderElement( reeks, index)
{
    var i;

    grootte = reeks.length - 1;
    for( i = index; i < grootte; i++) {
        reeks[i] = reeks[i + 1];
    }
    reeks.length = grootte;
}



/* -----------------28-4-2004 14:31------------------
  functies voor de autotab
 --------------------------------------------------*/

/*
 * autoTab    Kan worden opgeroepen vanuit de keyUp handler van een veld als
 *            onKeyUp="autoTab( this, 2, event)"
 */

function autoTab(input,len, e) {
    var isNN = (navigator.appName.indexOf("Netscape")!=-1);
    var keyCode = (isNN) ? e.which : e.keyCode;
    var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];

    if(input.value.length >= len && !containsElement(filter,keyCode)) {
        input.value = input.value.slice(0, len);
        input.form[(getIndex(input)+1) % input.form.length].select();
        input.form[(getIndex(input)+1) % input.form.length].focus();
    }
}


function containsElement(arr, ele) {
    var found = false, index = 0;

    while(!found && index < arr.length)
    if(arr[index] == ele)
        found = true;
    else
        index++;

    return found;
}


function getIndex(input) {
    var index = -1, i = 0, found = false;

    while (i < input.form.length && index == -1)
        if (input.form[i] == input)
            index = i;
        else
            i++;

    return index;
}


function selecteerCV(persoonID) {

        //var frm = document.formulier;
        //persoonID = frm.persoonID.value
        var url;
        url = '../algemeen/selecteerCV.asp';
        popUp( url, 200, 300);

}

function selecteerAfbeelding(persoonID) {
        var nwpersID = 0;

        if (isNummer(persoonID)){
                nwpersID = persoonID;
        }

        var url;
        url = '../algemeen/selecteerAfbeelding.asp?persoonid=' + nwpersID;
        popUp( url, 150, 300);
}

function selecteerAfbeeldingFotoboek(persoonID) {

        var url;
        url = 'new_fotobook_item.asp';
        popUp( url, 150, 300);
}


function postcodeOK( postcode, formaat){
      var goed, pcPos, pcChar, fmtPos, fmtChar, nieuw;

      /* Lege formaat string? dan is alles goed */
      if( formaat == null  ||  formaat == '') return postcode;

      nieuw = '';
      fmtPos = 0;
      pcPos  = 0;
      goed   = true;
      while( fmtPos < formaat.length  &&  pcPos <= postcode.length  &&  goed) {
          fmtChar = formaat.charAt( fmtPos);
          pcChar  = postcode.charAt( pcPos);
          kopieer = true;

          if( fmtChar == '9') {
              goed = (pcChar >= '0' &&  pcChar <= '9');
          }
          else if( fmtChar == 'a' ||  fmtChar == 'A') {
              goed = ((pcChar >= '0'  &&  pcChar <= '9')  ||  (pcChar >= 'a' &&  pcChar <= 'z')  ||  (pcChar >= 'A'  &&  pcChar <= 'Z'));
          }
          else if( fmtChar == '*') {          /* We hebben een ster, dus we zijn klaar, kopieer de rest van de postcode */
              nieuw  += postcode.substring( pcPos, postcode.length);
              fmtPos += 1;
              pcPos   = postcode.length;
              kopieer = false;
          }
          else if( fmtChar != pcChar) {       /* We hebben niet het gewenst format character, dus voeg het toe aan de nieuwe */
              nieuw  += fmtChar;
              fmtPos += 1;
              kopieer = false;
          }

          if( goed  &&  kopieer) {
              nieuw += pcChar;
              pcPos += 1;
              fmtPos += 1;
          }
      }

      goed = (pcPos == postcode.length  &&  fmtPos == formaat.length);
      return (goed ? nieuw : null);
  }


/*
 * type2Str( formulier, veldType, veldNaam)
 *           Converteert het gegeven type naar de veldNaam met het gegeven type (gedefinieerd in functies.asp) naar
 *           een string, zodat deze gebruikt kan worden om de string in de database op te slaan. De functie is gelijk
 *           aan de ASP functie type2Str
 *
 */

function type2Str( frm, veldType, naam)
{
    var veld, i, waarde;

    veld = frm.elements[naam];
    switch( Number( veldType)) {
        case t_tekst:
        case t_nummer:
        case t_bedrag:
            return veld.value;


        /* Voor select lijsten moeten we alle opties na gaan en voor elke gekozen optie voegen we toe */
        /* aan de string (gescheiden door ,) */
        case t_keuze:
            waarde = '';
            if( typeof( veld.options) != "undefined") {
                for(i = 0; i < veld.options.length; i++) {
                    if (veld.options[i].selected) {
                        if( waarde != '')   waarde += ',';

                        waarde += veld.options[i].value;
                    }
                }
            }
            return waarde;

        /* Voor een meerkeuze moeten we alle velden achter elkaar plakken */
        case t_meerkeuze:
            waarde = '';
            for( i = 0; i < frm.elements.length; i++) {
                if( frm.elements[i].name == naam  &&  frm.elements[i].checked) {
                    if( waarde != '') {
                        waarde += ',';
                    }
                    waarde += frm.elements[i].value;
                }
            }
            return waarde;

        case t_datum:
            if( typeof( frm.elements[naam + 'Dag'].value) != "undefined"  &&  typeof( frm.elements[naam + 'Maand'].value) != "undefined"  &&  typeof( frm.elements[naam + 'Jaar'].value) != "undefined") {
                return datum2Str( trim( frm.elements[naam + 'Dag'].value), trim( frm.elements[naam + 'Maand'].value), trim( frm.elements[naam + 'Jaar'].value));
            }
            else {
                return '';
            }

        default:
            return '';
    }
}

/*
 * controleerVeld( formulier, naam, veldType, magLeegZijn)
 *                  Controleert het veld met de gegeven naam in het meegegeven formulier object. Het veldType is
 *                  het veldtype zoals gedefinieerd is in functies.asp. Magleegzijn is een boolean die aangeeft of
 *                  het veld leeg mag zijn. Het controleert velden die aangemaakt zijn met de ASP functie maakInputVeld.
 *
 * returned:        '' wanneer alles goed is, anders een foutmelding
 */

function controleerVeldType( frm, naam, omschrijving, veldType, magLeegZijn)
{
    var veldIsLeeg, foutMelding, i;

    /* Converteer het veldType naar een integer */
    veldType = Number( veldType);

    if( veldType == t_datum) {
        veldIsLeeg = isLeeg( frm.elements[naam + 'Dag'].value)  &&  isLeeg( frm.elements[naam + 'Maand'].value)  &&  isLeeg( frm.elements[naam + 'Jaar'].value);
    }
    else if( veldType == t_keuze) {
        veldIsLeeg = (typeof( frm.elements[naam].options) == "undefined"  ||  frm.elements.selectedIndex < 0);
    }
    /* Bij een meerkeuze veld moeten wel alle checkboxes met de gegeven naam controleren */
    else if( veldType == t_meerkeuze) {
        veldIsLeeg = true;
        for( i = 0; i < frm.elements.length  &&  veldIsLeeg; i++) {
            if( frm.elements[i].name == naam  &&  frm.elements[i].checked) {
                veldIsLeeg = false;
            }
        }
    }
    else {
        veldIsLeeg = isLeeg( frm.elements[naam].value);
    }

    if( veldIsLeeg) {
        foutMelding = magLeegZijn ? '' : 'Het veld ' + omschrijving + ' mag niet leeg zijn.';
    }
    else {
        foutMelding = '';

        switch( veldType) {
            case t_keuze:
            case t_meerkeuze:
            case t_tekst:
                break;

            case t_datum:
                if( !isDatum( frm.elements[naam + 'Dag'].value, frm.elements[naam + 'Maand'].value, frm.elements[naam + 'Jaar'].value)) {
                    foutMelding = 'U heeft een onjuiste datum ingevuld voor veld ' + omschrijving + '.';
                }
                break;

            case t_nummer:
                if( !isNummer( frm.elements[naam].value)) {
                    foutMelding = 'U heeft een onjuiste getal ingevuld voor veld ' + omschrijving + '.';
                }
                break;

            case t_bedrag:
                if( !isBedrag( frm.elements[naam].value)) {
                    foutMelding = 'U heeft een onjuiste bedrag ingevuld voor veld ' + omschrijving + '.';
                }
                break;

            default:
                foutMelding = '!!!Onbekend type (' + veldType + ') voor veld ' + omschrijving + '.';
                break;
        }
    }

    return foutMelding;
}


/*
 * Zorgt ervoor dat de onchange handler aangeroepen wordt voor alle velden die gewijzigd zijn. Dit omdat IE 5 pas een onChange
 * genereerd wanneer het scherm wordt gesloten, i.p.v. voor de submit
 */

function forceChange( frm)
{
    var     i, veld, eerste;

/*
    for( i = 0; i < frm.elements.length  &&  !eerste; i++) {
        veld = frm.elements[i];

        if( document.defaultView.getComputedStyle( veld, "").getPropertyValue("visibility");
           (veld.type == 'checkbox'   ||  veld.type == 'radio'  ||  veld.type == 'select-multiple'  ||
            veld.type == 'select-one' ||  veld.type == 'text'   ||  veld.type == 'textarea')) {
                eerste = veld;
        }
    }

    if( eerste) {
        eerste.blur();
        eerste.focus();
    }
*/
}

/*
 * verstuurFormulier    Verstuurt het gegeven formulier, zet het gegeven veld op de gegeven waarde en returned false,
 *                      zodat het in een onClick handler meegenomen kan worden
 */

function verstuurFormulier( formulier, veldNaam, waarde)
{
    formulier[veldNaam].value = waarde;
    formulier.submit();

    return false;
}

/*
 * str2Bedrag       Vertaalt een bedragstring naar een getal
 */

function str2Bedrag( str)
{
    var bedrag, kommaGezien, factor, i, karakter;

    str = String( str);
    if( isBedrag( str)) {
        bedrag      = 0;
        factor      = 1;
        kommaGezien = false;

        for( i = 0; i < str.length; i++) {
            karakter = str.charAt( i);

            if( karakter == ',') {
                kommaGezien = true;
            }

            else if( karakter >= '0'  &&  karakter <= '9') {
                if( !kommaGezien) {
                    bedrag = bedrag * factor + karakter -'0';
                }
                else {
                    factor = factor / 10;
                    bedrag = bedrag + factor * (karakter - '0');
                }
            }
        }
    }
    else {
        bedrag = null;
    }

    return bedrag;
}

/*
 * isBedrag( str)       Kijkt of de gegeven string een bedrag betreft
 */

function isBedrag( str)
{
    var re;

    str = String( str);
    str = trim( str);

    re = new RegExp("^-?[0-9\.]*,?[0-9]*$")
    return( re.test( str));
}

/*
 * bedrag2Str   Vertaalt een bedrag naar een string
 */

function bedrag2Str( getal)
{
    var absoluut, factor, voorKomma, achterKomma, pos, bedrag;

    getal = Number( getal);
    absoluut = Math.abs( getal);
    bedrag   = '';

    /* Zet een punt op de plaats waar het moet */
    voorKomma = Math.floor( absoluut) + '';
    lengte = voorKomma.length;
    for( pos = 0; pos < lengte; pos++) {
        if( (lengte - pos) % 3 == 0  &&  pos > 0) {
            bedrag = bedrag + '.';
        }

        bedrag = bedrag + voorKomma.charAt( pos);
    }

    /* Zet het bedrag achter de komma */
    bedrag = bedrag + ',';
    achterKomma = '00' + Math.floor(getal * 100) + '';
    bedrag = bedrag + achterKomma.substring( achterKomma.length - 2, achterKomma.length);

    /* Voeg een - toe indien nodig */
    if( getal < 0) {
        bedrag = '-' + bedrag;
    }

    return bedrag;
}

/*
 * datum2Str  Converteert een datum naar een string, die vervolgens weer gelezen kan worden door
 *            str2Datum. Deze functie kan worden gebruikt om datums als strings op te slaan in de
 *            database
 */

function datum2Str( dag, maand, jaar)
{
    if( dag == null  ||  maand == null  ||  jaar == null  ||  String( dag) == ''  ||  String( maand) == ''  ||  String( jaar) == '') {
        return( '');
    }
    else {
        return( String( dag) + '-' + String( maand) + '-' + String( jaar));
    }
}
