
var isMac;
isMac = (navigator.appVersion.indexOf("Mac")!=-1) ? true : false;


/*
 ************************************************************************************
 * 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);
}



/*
 * 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;
}
