/* postcodeOK
 * Controleert of er een juiste postcode ingevoerd is.
 * 
 */
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);      
  }

/*
 * VulVeldCheckBoxLijst( LijstID)
 *
 * Vul het LijstID veld aan de hand van de status van de bijbehorende checkboxvelden
 * Wordt aangeroepen vanuit de custom control VeldCheckBoxLijst.cs
 */
 
function VulVeldCheckBoxLijst( LijstID)
{
    var LijstBox, Frm, i, Boxen, Waarde;
    
    // Haal het element op
    LijstBox = document.getElementById( LijstID);
    
    Waarde = '';
    if( LijstBox)
    {
        // Bepaal het formulier
        Frm = LijstBox.form;
        
        // Loop alle checkboxen door
        Boxen = document.getElementById( LijstID + '_checkboxen').value.split(',');
        for( i = 0; i < Boxen.length; i++)
        {
            if( Frm.elements[ Boxen[i]].checked)
            {
                Waarde += (Waarde == '' ? '' : ',') + Frm.elements[ Boxen[i]].value;
            }
        } 
 
        // Vul het veld       
        Frm.elements[LijstID].value = Waarde;        
    }
}


/*
 * VoegIDToeAanString  Voegt een ID toe aan een string met door komma gescheiden IDs
 */
function VoegIDToeAanString( str, ID)
{
    var uitgebreid = "," + str + ",";
    
    if( uitgebreid.indexOf( "," + ID + ",") < 0)
    {
        if( str == "") {
            return ID;
        }        
        else
        {
            return str + "," + ID;
        }
    }
}

/*
 * VerwijderIDUitString  Verwijdert een ID uit een string met door komma gescheiden IDs
 */
function VerwijderIDUitString( str, ID)
{
    var uitgebreid = "," + str + ",";

    uitgebreid = uitgebreid.replace( "," + ID + ",", ",");
    return uitgebreid.replace( /^,(.*?),$/, "$1");
}

/*
 * VulDatumBoxen( DatumID)
 *
 * Vul het DatumID veld aan de hand van de velden voor dag, maand, jaar
 * De datum wordt geformateerd als yyyy-mm-dd
 */
 
function VulDatumBoxen( DatumID)
{
    var DatumBoxen, Frm, Waarde
    
    // Haal het element op
    DatumBoxen = document.getElementById( DatumID);
    
    Waarde = '';
    if( DatumBoxen)
    {
        // Bepaal het formulier
        Frm = DatumBoxen.form;
        
        Waarde = (Frm.elements[DatumID + '_jaar'].value) + '-' +
                 (Frm.elements[DatumID + '_maand'].value) + '-' + 
                 (Frm.elements[DatumID + '_dag'].value);
         
        // Vul het veld       
        Frm.elements[DatumID].value = Waarde;
    }
}

/*
 * ControleerDatumBoxen( sender, args)
 *
 * Controleert het datumveld is onderdeel van de customvalidator
 * voor de datumboxen
 */

function ControleerDatumBoxen(sender, args)
{
    var Delen, Valide;
    
    Valide = false;
    
    Delen = args.Value.split( "-");
    
    if( Delen.length == 3) 
    {    
        Valide = isDatum( Delen[2], Delen[1], Delen[0]);        
    }
    args.IsValid = Valide;
}



/*
 * ControleerBankrekening( sender, args)
 *
 * Controleert of het een juist bankrekening nummer is
 */

function ControleerBankrekening(sender, args)
{
    var Delen, Valide, tot, i, getal, nummer;
    
    Valide = false;
    nummer = trim( args.Value);
    // Verwijder de punten
    nummer = nummer.replace(".", "");
    
    // Als het een postgironummer is, is het goed
    if( nummer.length >=3  &&  nummer.length <= 7)
    {
        Valide = true;
    }
    else  //  Doe de 11 proef
    {
        tot = 0;
        for (i = 0; i < nummer.length; i++) {
          getal = nummer.charAt( i);
          tot  += getal * (nummer.length - i);
        }

        Valide = ( tot % 11 == 0);
    }
   
    args.IsValid = Valide;
}



/*
 * VeldTextLijstVeldToevoegen( LijstID)
 *
 * Voegt een nieuw inputveld toe
 */
function VeldTextLijstVeldToevoegen( LijstID)
{    
    $('#swVeldTextLijst' + LijstID).each(function(){

        if( true){
         $('tr[nummer]:last')
            .clone(true)
            .attr('nummer',parseInt($('tr[nummer]:last').attr('nummer'))+1)
            .insertBefore($('.sw_VeldTextLijst_toevoegen').parent().parent())
            .find('input').val('')
            .parent().parent().find('img.sw_VeldTextLijst_verwijderen').show()            
            .click(function(){
                $('.sw_VeldTextLijst_toevoegen').parents('tr[nummer]').remove();
            });
        };

    });
    
}

/*
 * VulVeldTextLijstWaarde( LijstID)
 *
 * Doet update van de hidden input met de waarde van alle strings
 */
 
function VulVeldTextLijstWaarde( LijstID)
{
    var VeldTextLijst, Frm, Waarde
    
    Waarde = '';
    var Scheiding = "-StippWebIstCool-";
       
    // Alle inputs in de tabel langslopen
    $('#swVeldTextLijst' + LijstID).find('input').each(
            function() {
                Waarde += this.value + Scheiding;
            }
        );
      
    $("#" + LijstID).attr('value',Waarde);

}

/*
 * ControleerEmail( sender, args)
 *
 * Controleert het emailadres is onderdeel van de customvalidator
 * voor emails
 */

function ControleerEmail(sender, args)
{
   var Email;
   Email = args.Value;
   
   var Valide  = true
   var AtSym    = Email.indexOf('@')
   var Period   = Email.lastIndexOf('.')
   var Space    = Email.indexOf(' ')
   var Length   = Email.length - 1   // Array is from 0 to length-1   

   if ((AtSym < 1) ||                   // '@' cannot be in first position
   (Period <= AtSym+2) ||               // Must be atleast two valid chars btwn '@' and '.'
   (Period >= Length-1 ) ||             // Must be atleast two valid chars after '.'
   (Space  != -1))                      // No empty spaces permitted
   {
    Valide = false
   }
   args.IsValid = Valide;

}


/*
 * ControleerAfbeelding( sender, args)
 *
 * Controleert of er een afbeelding upgeload is
 */

function ControleerAfbeelding(sender, args)
{
    
   var Afbeelding;
   Afbeelding = args.Value;   
   
   var Valide  = true
   
   if(Afbeelding == '' || Afbeelding == 0){
        Valide = false;
   }
   args.IsValid = Valide;

}

/*
 * ControleerSelectBox( sender, args)
 *
 * Controleert of er een optie geselecteerd is
 */

function ControleerSelectBox(sender, args)
{
    
   var SelectBox;
   SelectBox = args.Value;
   
   var Valide  = true
   
   if(SelectBox == '' || SelectBox == '-'){
        Valide = false;
   }
   args.IsValid = Valide;

}

/*
 * EditorGevuld( sender, args)
 *
 * Controleert of het editor veld gevuld is. Lege P's e.d. worden niet geteld
 * als vulling
 */

function EditorGevuld(sender, args)
{
   var inhoud;
   var oEditor = FCKeditorAPI.GetInstance( sender.controltovalidate);

   // Args heeft nog een oude waarde. Haal de nieuwe HTML op.   
   inhoud = oEditor.GetHTML();
   inhoud = inhoud.replace(/\&lt;/ig, "<");
   inhoud = inhoud.replace(/\&gt;/ig, ">");
   inhoud = inhoud.replace(/<br\s*\/?>/ig, "");
   inhoud = inhoud.replace(/<p\s*\/?>/ig, "");
   inhoud = inhoud.replace(/<p\>/ig, "");
   inhoud = inhoud.replace(/<\/p\>/ig, "");
   inhoud = inhoud.replace(/\&nbsp;/ig, "");
   inhoud = inhoud.replace(/\&#160;/ig, "");
   
   args.IsValid = (inhoud.replace( /\s*/ig, "") != "");
   
}

/* -----------------------------------------------
  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;
}

/* Velden voor veldTextbedrag */
function maakBedrag(waarde){					
    waarde = waarde.replace('.',',');
	
    if(!isGetal(waarde.replace(',',''))) return '';
	
    if(waarde.indexOf(',') ==-1){
        return waarde+',00';
    }
    else if(waarde.indexOf(',')  > waarde.length - 3 ){			
        return waarde + Left('00', 2-aantalNaKomma(waarde));
    }
    else if(waarde.indexOf(',')  < waarde.length - 3 ){			
        return Left(waarde, waarde.length - (aantalNaKomma(waarde) - 2));
    }
    else{
        return waarde;
    }
}

	
function aantalNaKomma(waarde){
    if( waarde.indexOf(',') == -1){
        return 0;
    }else{
        return waarde.length - waarde.indexOf(',') - 1;
    }
}

function Left(str, n){
    if (n <= 0)
        return "";
    else if (n > String(str).length)
        return str;
    else
        return String(str).substring(0,n);
}

function trim(value) {
  value = value.replace(/^\s+/,''); 
  value = value.replace(/\s+$/,'');
  return value;
}
function isGetal(n) {
   return (new RegExp('^([0-9]+)$').test(n));   
}


/* -----------------------------------------------
  Diverse controle functies
 --------------------------------------------------*/



/*
 * 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 < 1870  ||  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);
}

/*
 * 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);
}



/*
 * 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);
}


/*
 * 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');
}



