function validateDate( callingObject, iErrorMessage ) {

   if( trim( callingObject.value ) == "" ) {
      callingObject.value = "" ;
      return( true ) ;
   }

   var errormessage = "Ongeldige datum" ;
   
   if( iErrorMessage != undefined ) {
      errormessage = iErrorMessage ;
   }
   
   var numbers = "0123456789" ;
   var seperators = " -/" ;
   var dateValue = "" ;
   var numSeps = 0 ;
   var day ;
   var month ;
   var year ;
   var leap ;
   var currentChar ;
   var result = true ;

   var expressionString = "^\\d{1,2}-?\\d{1,2}-?\\d{1,4}$" ;
   
   var expr = new RegExp( expressionString ) ;
   
   if( expr.test( callingObject.value ) == false ) {
   	error( callingObject, errormessage ) ;
   	return( false ) ;
   }
   


   for ( var i = 0; i < callingObject.value.length; i++) {
      currentChar = callingObject.value.substr( i, 1 ) ;
   
      if( numbers.indexOf( currentChar ) >= 0 ) {
         dateValue = dateValue + currentChar ;
      }
      else {
         if( seperators.indexOf( currentChar ) >= 0 ) {
            numSeps = numSeps + 1 ;
            
            if( numSeps == 1 ) {
               day = dateValue ;
               dateValue = "" ;
            }
            else if ( numSeps == 2 ) {
               month = dateValue ;
               dateValue = "" ;
            }
            else {
               result = false ;
            }
         }
         else {
            result = false ;
         }
      }
   }
   
   if( result ) {
      if( numSeps == 2 ) {
         year = dateValue ;
      }
      else {
         result = false ;
      }
   }
   

   if( result == false && callingObject.value.length == 6 ) {
      day = callingObject.value.substr( 0, 2 ) ;
      month = callingObject.value.substr( 2, 2 ) ;
      year = callingObject.value.substr( 4, 2 ) ;
      result = true ;
   }
   
   if( result == false && callingObject.value.length == 8 ) {
      day = callingObject.value.substr( 0, 2 ) ;
      month = callingObject.value.substr( 2, 2 ) ;
      year = callingObject.value.substr( 4, 4 ) ;
      result = true ;
   }

   if( result ) {
      if( year.length == 2 ) {
         year = "20" + year ;
      }
      else if ( year.length != 4 ) {
         result = false ;
      }
   }
   
   /* year is wrong if year = 0000 */
   if (year == 0) {
      result = false ;
   }
   /* Validation of month*/
   if ((month < 1) || (month > 12)) {
      result = false ;
   }
   /* Validation of day*/
   if (day < 1) {
      result = false ;
   }
   /* Validation leap-year / february / day */
   if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
      leap = 1;
   }
   if ((month == 2) && (leap == 1) && (day > 29)) {
      result = false ;
   }
   if ((month == 2) && (leap != 1) && (day > 28)) {
      result = false ;
   }
   /* Validation of other months */
   if ((day > 31) && ((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12))) {
      result = false ;
   }
   if ((day > 30) && ((month == 4) || (month == 6) || (month == 9) || (month == 11))) {
      result = false ;
   }

   /* if no error, write the completed date to Input-Field (e.g. 13.12.2001) */
   if ( result ) {
      if( day.length == 1 ) {
         day = "0" + day ;
      }
      
      if( month.length == 1 ) {
         month = "0" + month ;
      }
      
      callingObject.value = day + "-" + month + "-" + year;
      return( true ) ;
   }
   else {
      error( callingObject, errormessage ) ;
      return( false ) ;
   }

}


function validateNumber( callingObject, iErrorMessage, iPrecision, iScale, iNegatives ) {

   if( trim( callingObject.value ) == "" ) {
      callingObject.value = "" ;
      return( true ) ;
   }
   
   scale = 0 ;
   
   if( iScale ) {
      scale = iScale ;
   }

   var precision = 38 - scale ;
   
   if( iPrecision ) {
      precision = iPrecision - scale ;
   }
   
   var errormessage = "Ongeldig getal" ;
   
   if( iErrorMessage != undefined ) {
      errormessage = iErrorMessage ;
   }

   negatives = false ;
   if( iNegatives != undefined ) {
      if( iNegatives == true ) {
        negatives = true ;
      }
   }

   
   var expressionString = "^" ;
   
   if( negatives ) {
      expressionString = expressionString + "-?" ;
   }
   
   expressionString = expressionString + "\\d{0," + precision + "}" ;
   
   if( scale > 0 ) {
   	expressionString = expressionString + "(,\\d{1," + scale + "})?" ;
   }
   
   expressionString = expressionString + "$" ;
   
   var expr = new RegExp( expressionString ) ;
   
   if( expr.test( callingObject.value ) == false ) {
   	error( callingObject, errormessage ) ;
   	return( false ) ;
   }
   
   return( true ) ;
}

function validateTime( callingObject, iErrorMessage ) {

   if( trim( callingObject.value ) == "" ) {
      callingObject.value = "" ;
      return( true ) ;
   }

    var errormessage = "Ongeldige tijd" ;

    if( iErrorMessage != undefined ) {
        errormessage = iErrorMessage ;
    }

    var expressionString = "^(([01]?[0123456789])|([2][0123])):[012345][0123456789]$" ;
    var expr = new RegExp( expressionString ) ;

    if( expr.test( callingObject.value ) == false ) {
        error( callingObject, errormessage ) ;
        return( false ) ;
    }
}


function error( callingObject, errormessage ) {
   /* This works in IE, but Mozilla won't select or focus the field, and wont accept false  */
   
   if( errormessage != "" ) {
       alert( errormessage ) ;
       
       callingObject.select() ;
       callingObject.focus() ;
       
       if( callingObject.id ) {
          setTimeout( "document.getElementById( '" + callingObject.id + "' ).focus();", 0 ) ;
       }
       else {
          setTimeout("document." + callingObject.form.name + "." + callingObject.name + ".focus();",0);   
       }
   }
   
   return( false ) ;
}
      

function trim(stringToTrim) {
    return( stringToTrim.replace(/^\s*/, '').replace(/\s*$/,'') ) ;
}

function validatePostcode( callingObject, iErrorMessage, iReformat ) {
    if( trim( callingObject.value ) == "" ) {
       callingObject.value = "" ;
       return( true ) ;
    }

    var errormessage = "Ongeldige Nederlandse postcode" ;

    if( iErrorMessage != undefined ) {
        errormessage = iErrorMessage ;
    }
    
    var reformat = false ;
    if( iReformat != undefined ) {
        if( iReformat == true ) {
            reformat = true ;
        }
    }

    var expressionString = "^([1-9][0-9]{3})\\s?([A-Za-z]{2})$" ;
    var expr = new RegExp( expressionString ) ;

    if( expr.test( callingObject.value ) == false ) {
        error( callingObject, errormessage ) ;
        return( false ) ;
    }
    else {
        if( reformat ) {
            callingObject.value = callingObject.value.replace( new RegExp( "\\s" ), '' ).toUpperCase() ;
        }
    }
}



function validateEmail( callingObject, iErrorMessage ) {
   if( trim( callingObject.value ) == "" ) {
      callingObject.value = "" ;
      return( true ) ;
   }

    var errormessage = "Ongeldig e-mail adres" ;

    if( iErrorMessage != undefined ) {
        errormessage = iErrorMessage ;
    }

    var expressionString = "^([a-zA-Z0-9_\\-\\.])+@(([0-2]?[0-5]?[0-5]\\.[0-2]?[0-5]?[0-5]\\.[0-2]?[0-5]?[0-5]\\.[0-2]?[0-5]?[0-5])|((([a-zA-Z0-9\-])+\\.)+([a-zA-Z\\-])+))$" ;
    var expr = new RegExp( expressionString ) ;

    if( expr.test( callingObject.value ) == false ) {
        error( callingObject, errormessage ) ;
        return( false ) ;
    }
}


function validateSofinummer( callingObject, iErrorMessage ) {
   if( trim( callingObject.value ) == "" ) {
      callingObject.value = "" ;
      return( true ) ;
   }

    var errormessage = "Ongeldig sofinummer" ;

    if( iErrorMessage != undefined ) {
        errormessage = iErrorMessage ;
    }
    
    // Aanvullen met nullen
    if( callingObject.value.length < 9 ) {
        var tempValue = callingObject.value ;
        tempValue = "000000000" + tempValue ;
        callingObject.value = tempValue.substr( tempValue.length - 9 ) ;
    }


    var expressionString = "^\\d{9}$" ;
    var expr = new RegExp( expressionString ) ;

    if( expr.test( callingObject.value ) == false ) {
        error( callingObject, errormessage ) ;
        return( false ) ;
    }

    var total = 0 ;

    for ( var i = 0; i < 9; i++) {
       var currentChar = parseInt( callingObject.value.substr( i, 1 ) ) ;

       if( i != 8 ) {
          total = total + ( currentChar * ( 9 - i ) ) ;
       }
       else {
          total = total - currentChar ;
       }
    }

    if( total % 11 != 0 ) {
        error( callingObject, errormessage ) ;
        return( false ) ;
    }

    return( true ) ;
}



function validateBankrekeningnummer( callingObject, iErrorMessage ) {
   if( trim( callingObject.value ) == "" ) {
      callingObject.value = "" ;
      return( true ) ;
   }

    var errormessage = "Ongeldige bankrekening" ;

    if( iErrorMessage != undefined ) {
        errormessage = iErrorMessage ;
    }

    var expressionString = "^\\d{9}$" ;
    var expr = new RegExp( expressionString ) ;

    if( expr.test( callingObject.value ) == false ) {
        error( callingObject, errormessage ) ;
        return( false ) ;
    }

    var total = 0 ;

    for ( var i = 0; i < 9; i++) {
       var currentChar = parseInt( callingObject.value.substr( i, 1 ) ) ;

      total = total + ( currentChar * ( 9 - i ) ) ;
    }

    if( total % 11 != 0 ) {
        error( callingObject, errormessage ) ;
        return( false ) ;
    }

    return( true ) ;
}
