// begin function isNumber
function chkNumber(a){
  if (_numberCheck(a) == false) a.focus();
}

function _numberCheck(theElement)
{
  s = theElement.value;
  temp = "" + s; // temporary holder
  while (temp.indexOf(",")>-1) {
  pos= temp.indexOf(",");
  temp = "" + (temp.substring(0, pos) + "." +
  temp.substring((pos + 1), temp.length));
  }
  s = temp;
  if (isNaN(Math.abs(s)) && (s.charAt(0) != '#'))
  {
    alert( "Waarde is geen getal" );
    theElement.focus();
    return false;
  }
  theElement.value = s;
  return true;
}

function chkDate(a,n){
  if (_datumCheck(a, n) == false) a.focus();
}

function _datumCheck(theElement){
  var datePat = /^(\d{1,2})?(|-|\/)(\d{1,2})?(|-|\/)(\d{2,4})?$/; //delimiter invoer is "-" of leeg of "/", 2 of 4 cijferig jaar
  var dateStr=theElement.value;
  var err = 0;

  if (dateStr.length==0)return true;
  if (dateStr.length<6||dateStr.length>10){alert("gebruik datum formaat: DD-MM-YYYY of DD-MM-YY");return false;};

  var matchArray = dateStr.match(datePat);
  if (matchArray == null){alert(" Ongeldige datum, gebruik formaat: DD-MM-YYYY or DD-MM-YY");return false;};
  dag=matchArray[1];if(dag.length==1)dag=0+dag; //ontbrekende voorloopnul toevoegen
  mnd=matchArray[3];if(mnd.length==1)mnd=0+mnd; //ontbrekende voorloopnul toevoegen
  jr =matchArray[5];if(jr.length==2)jr=20+jr; //20xx oevoegen
  if(parseInt(jr)<1850)err=2 // onderbegrenzing jaarinvoer: 1850
  if(parseInt(jr)>9999)err=2 // bovenbegrenzing jaarinvoer: 2099
  if((mnd<1||mnd>12)&& err==0)err=3 //maand
  if((dag<1||dag>31)&& err==0)err=4 //dag
  if(mnd==4||mnd==6||mnd==9||mnd==11){if((dag==31)&& err==0) err=4}//alg. maandlengte
  if(mnd==2&&err==0){//februari lengte
   if(dag>29)err=4;
   if(dag==29){
    if((jr/4)!=parseInt(jr/4)){
      err=5;//niet deelbaar door 4?
    }else{if((jr/100)==parseInt(jr/100)){if((jr/400)!=parseInt(jr/400))err=5;}//deelbaar door 100 en niet deelbaar door 400?
    }
  }
 }
 //alerts
 if(err==1){alert('gebruik datum formaat: DD-MM-YYYY of DD-MM-YY');theElement.focus();return false;}
 if(err==2){alert('onjuist jaar');return false;}
 if(err==3){alert('onjuiste maand');return false;}
 if(err==4){alert('geen geldige dag voor deze maand');return false;}
 if(err==5){alert('is geen schrikkeljaar');return false;}
 //
 if(err==0) {
     theElement.value=dag+"-"+mnd+"-"+jr;return true;
 }//datumdelimiter is altijd "-"
}

function addWorkingDays(myDate,days) {
   var ndays = days;
   if ( ndays == 0 )
      return myDate;
   else {
      if (myDate.getDay() == 6)
         ndays += 1;

      //myDate = starting date, ndays = no. working days to add.
      var temp_date = new Date();
      var i = 0;
      var days_to_add = 0;
      for(i=1; i<=ndays;i++) {
         days_to_add += 1;
         temp_date = new Date(myDate.getTime() + (days_to_add*24*60*60*1000));
         //0 = Sunday, 6 = Saturday, if the date not equals a weekend day then increase by 1
         if ((temp_date.getDay() == 0) || (temp_date.getDay() == 6)) {
            i-=1;
         }
      }
      return new Date(myDate.getTime() + days_to_add*24*60*60*1000);
   }
}

function subWorkingDays(myDate,days) {
   if ( days == 0 )
      return myDate;
   else {
      //myDate = starting date, days = no. working days to subtract.
      var temp_date = new Date();
      var i = 0;
      var days_to_add = 0;
      for(i=1; i<=days;i++) {
         days_to_add += 1;
         temp_date = new Date(myDate.getTime() - (days_to_add*24*60*60*1000));
         //0 = Sunday, 6 = Saturday, if the date not equals a weekend day then increase by 1
         if ((temp_date.getDay() == 0) || (temp_date.getDay() == 6)) {
            i-=1;
         }
      }
      return new Date(myDate.getTime() - days_to_add*24*60*60*1000);
   }
}

function workdaysBetween(dates, datee) {
    var one_day = 1000 * 60 * 60 * 24;
    var dates_ms = dates.getTime();
    var datee_ms = datee.getTime();
    var diff = Math.round(Math.abs(dates_ms - datee_ms)/one_day) + 1;
    var tmp = 0;
    var work = 0;

    for (i=0; i<diff; i++) {
       tmp = new Date(dates_ms + ( i * one_day ));
       if ( tmp.getDay() != 0 && tmp.getDay() != 6 )
          work += 1;
    }
    return (work==0?1:work);
}

function number_format(original_number, decimals) {
    var result1 = original_number * Math.pow(10, decimals)
    var result2 = Math.round(result1)
    var result3 = result2 / Math.pow(10, decimals)
    return pad_with_zeros(result3, decimals)
}

function pad_with_zeros(rounded_value, decimal_places) {

    // Convert the number to a string
    var value_string = rounded_value.toString()
    
    // Locate the decimal point
    var decimal_location = value_string.indexOf(".")

    // Is there a decimal point?
    if (decimal_location == -1) {
        
        // If no, then all decimal places will be padded with 0s
        decimal_part_length = 0
        
        // If decimal_places is greater than zero, tack on a decimal point
        value_string += decimal_places > 0 ? "." : ""
    }
    else {

        // If yes, then only the extra decimal places will be padded with 0s
        decimal_part_length = value_string.length - decimal_location - 1
    }
    
    // Calculate the number of decimal places that need to be padded with 0s
    var pad_total = decimal_places - decimal_part_length
    
    if (pad_total > 0) {
        
        // Pad the string with 0s
        for (var counter = 1; counter <= pad_total; counter++) 
            value_string += "0"
        }
    return value_string
}

