// This functions test wheter a charachter is numeric
function IsNumeric(x)
{
  var Digits = "0123456789";
  if (Digits.indexOf(x) == -1)
  {
    return (false);
  }
  else
  {
    return (true);
  }
}

// This functions test wheter a charachter is alphanumeric
function IsAlphanumeric(x)
{
  var Alphas = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  if (Alphas.indexOf(x) == -1)
  {
    return (false);
  }
  else
  {
    return (true);
  }
}

// This function tests wheter a character is a lower case alphanumeric character
function IsLowercase(x)
{
  var Alphas = "abcdefghijklmnopqrstuvwxyz";
  if (Alphas.indexOf(x) == -1)
  {
    return (false);
  }
  else
  {
    return (true);
  }
}

// This functions tests whether a character is an alphanumeric character
function IsUppercase(x)
{
  var Alphas = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  if (Alphas.indexOf(x) == -1)
  {
    return (false);
  }
  else
  {
    return (true);
  }
}

//This function returns true if the string contains all spaces else false (used in kvk idendificatie no check)
function IfSpaces(str)
{
  var ch ="";
  var space = true;
  for (var i = 0; i < str.length; i++)
  {
    ch = str.charAt(i);
    if(IsNumeric(ch) || (IsAlphanumeric(ch)))
    {
      space = false;
    }
  }
  return (space);
}


/**
*   Adres  moet voldoen aan:
*     1 of meerdere karakters gevolgd door
*     '@' gevolgd door
*     1 of meerdere karakters gevolgd door
*     '.' gevolgd door
*     1 of meerdere karakters
*/
function checkEmail(strEmail)
{
  strtmpEmail = String(strEmail);

  var re = /.+@.+\..+/;

  return ( strtmpEmail.match(re)? true : false );

}



function ToUppercase(x)
{
  if (IsLowercase(x))
  {
    return (x.toUpperCase());
  }
  else
  {
    return (x);
  }
}

function CharCompare(x1, x2)
{
  if (x1 == "#")
  {
    if (IsNumeric(x2))
    {
      return (true);
    }
    else
    {
      return (false);
    }
  }
  if (x1 == "@")
  {
    if (IsAlphanumeric(x2))
    {
      return (true);
    }
    else
    {
      return (false);
    }
  }
  if (x1 == "?")
  {
    if (IsAlphanumeric(x2))
    {
      if (IsUppercase(x2))
      {
        return (true);
      }
      else
      {
        return(false);
      }
    }
    else
    {
      return (false);
    }
  }
  if (x1 == x2)
  {
    return (true);
  }
  else
  {
    return (false);
  }
}

function MaskCompare(x1,x2)
{
  if (x1.length != x2.length)
  {
    return (false)
  }
  else
  {
    var retval = true;
    for (var i = 0; i < x1.length; i++)
    {
      if (!CharCompare(x1.charAt(i), x2.charAt(i)))
      {
        retval = false;
      }
    }
    return (retval);
  }
}

function RichMaskCompare(x1,x2)
{
  if (x1=='') return true ;
  if (x1=='date') return MaskCompare('##-##-####',x2);
  if (x1=='alpha')
  {
    return /^[a-z]+$/i.test(x2); //only alpha-characters
  }
  if (x1=='name')
  {
    return /^[a-z \-]+$/i.test(x2); //only alpha-characters and " " and "-"
  }
  if (x1=='numeric')
  {
    var a=parseInt(x2,10);
    if ((isNaN(a)) || (x2==''))
    {
      return false ;
    }
    else
    {
      return true;
    }
  }
  if (x1=='phone')
  {
    // Controleer of er 10 cijfers zijn, of 8 indien beginnend met 0800
    var strNum="";
    for (var i=0; i<x2.length ; i++)
    {
      if (IsNumeric(x2.charAt(i)))
      {
        strNum+=String(x2.charAt(i));
      }
    }  
    if (strNum.length==10) return true ;
    if ((strNum.length==8)&&(strNum.substr(0,4)=='0800')) return true ;
    return false;
  }
	if (x1=='length')
	{
		return true ;
	}
  if (x1=='capital' )
  {
    return (x2==x2.toUpperCase() && x2.length >0 );
  }
  if (x1=='AZcapital')
  {
    return /^[A-Z]+$/i.test(x2)
  }
  else return MaskCompare(x1,x2);
}

function PartialMaskCompare(x1,x2)
{
  if (x1.length == x2.length)
  {
    return (MaskCompare(x1,x2));
  }
  else
  {
    var retval = true;
    var i = 0;
    while ((i < x1.length) && (i < x2.length))
    {
      if (!CharCompare(x1.charAt(i), x2.charAt(i)))
      {
        retval = false;
      }
      i += 1;
    }
    return (retval);
  }
}

function ConvertAlphasToMask (x1,x2)
{
  x3 = "";
  var i = 0;
  while ((i < x1.length) && (i < x2.length))
  {
    if (IsLowercase(x2.charAt(i)) && (x1.charAt(i) == "?"))
    {
      x3 += ToUppercase(x2.charAt(i));
    }
    else
    {
      x3 += x2.charAt(i);
    }
    i += 1;
  }
  return(x3);
}

function ApplyMask(x1,x2)
{
  var x3 = ConvertAlphasToMask(x1,x2);
  var i = 0;
  var OK = true;
  var x4 = "";
  if (x3.length == 0)
  {
    return ("");
  }
  if (x1.length == 0)
  {
    return (x3);
  }
  while (OK && (i < x3.length) && (i < x1.length))
  {
    if (!CharCompare(x1.charAt(i),x3.charAt(i)))
    {
      OK = false;
    }
    else
    {
      x4 += x3.charAt(i);
      i += 1;
    }
  }
  if (OK)
  {
    return (x4)
  }
  else
  {
    if (x4.length == (x3.length - 1))
    {
      var x5 = x4;
      var j = i;
      while (("@#?".indexOf(x1.charAt(j)) == -1) && (j < x1.length))
      {
        x5 += x1.charAt(j);
        j +=1;
      }
      x5 += x3.charAt(i);
      x5 = ConvertAlphasToMask(x1,x5);
      OK = true;
      j = 0;
      while (OK && (j < x5.length))
      {
        if (!CharCompare(x1.charAt(j),x5.charAt(j)))
        {
          OK = false;
        }
        j += 1;
      }
      if (OK)
      {
        return (x5);
      }
      else
      {
        return (x4);
      }
    }
    else
    {
      return (x4);
    }
  }
}

function ApplyPhoneMask(x2)
{
  var Netnumberlist = new Array();
  ShortNrs = 32;
  // This is the list of all 3 digit netnumbers
  Netnumberlist[0] = "010";
  Netnumberlist[1] = "013";
  Netnumberlist[2] = "015";
  Netnumberlist[3] = "020";
  Netnumberlist[4] = "023";
  Netnumberlist[5] = "024";
  Netnumberlist[6] = "026";
  Netnumberlist[7] = "030";
  Netnumberlist[8] = "033";
  Netnumberlist[9] = "035";
  Netnumberlist[10] = "036";
  Netnumberlist[11] = "038";
  Netnumberlist[12] = "040";
  Netnumberlist[13] = "043";
  Netnumberlist[14] = "045";
  Netnumberlist[15] = "046";
  Netnumberlist[16] = "050";
  Netnumberlist[17] = "053";
  Netnumberlist[18] = "055";
  Netnumberlist[19] = "058";
  Netnumberlist[20] = "070";
  Netnumberlist[21] = "071";
  Netnumberlist[22] = "072";
  Netnumberlist[23] = "073";
  Netnumberlist[24] = "074";
  Netnumberlist[25] = "075";
  Netnumberlist[26] = "076";
  Netnumberlist[27] = "077";
  Netnumberlist[28] = "078";
  Netnumberlist[29] = "079";
  Netnumberlist[30] = "080-";
  Netnumberlist[31] = "085";
  var Shortnumber = false;
  var i = 0;
  // Check whether the first three digits are a short netnumber
  while ((i < ShortNrs) && (Shortnumber == false))
  {
    if (!((x2.substring(0,4)).indexOf(Netnumberlist[i],0) == -1))
    {
      Shortnumber = true;
    }
    i += 1;
  }
  if (Shortnumber == true)
  {
    return (ApplyMask("### ### ####",x2)); //ori: "###-#######"
  }
  else
  {
    if((x2.charAt(0) == "0") && (x2.charAt(1) == "6"))
    {
      return (ApplyMask("## #### ####",x2)); //ori: "##-########"
    }
    else if(x2.substring(0,4) == "0800")
    {
      return (ApplyMask("#### ####",x2)); //ori: "####-####"
    }
    else
      return (ApplyMask("#### ### ###",x2)); //ori: "####-######"
  }
}

// date validation
function ApplyDateMask(x1,mode)
{
  var m_short = "04,06,09,11";
  var days_ok = true;
  var month_ok = true;
  var year_ok = true;
  var day = 0;
  var month = 0;
  var year = 0;

  // check if the date string contains valid characters
  var prelim_date = "";
  var temp_date = "";
  for (var i = 0; i < x1.length; i++)
  {
    if (x1.charAt(i) == "-")
    {
      if ((i==2)||(i==5))
      {
        prelim_date = prelim_date + x1.charAt(i);
      }
      if (i==1)
      {
        prelim_date = prelim_date + x1.charAt(i);
        temp_date = "0" + prelim_date;
        prelim_date = temp_date;
      }
      if (i==3)
      {
        prelim_date = prelim_date + x1.charAt(i);
        temp_date = prelim_date.substring(0,3) + "0" + prelim_date.substring(4)
        prelim_date = temp_date;
      }
    }
    else if (IsNumeric(x1.charAt(i)))
    {
      prelim_date = prelim_date + x1.charAt(i);
    }
    else
    {
      return (prelim_date);
    }
  }
  // begin of day check
  if (x1.length > 1)
  {
    if (!IsNumeric(x1.charAt(1)))
    {
      x1 = "0" + x1;
    }
    day = x1.substring(0,2);
    if (day > 31)
    {
      days_ok = false;
    }
  }
  // end of day check
  // begin of month check
  if (x1.length > 4)
  {
    if (!IsNumeric(x1.charAt(4)))
    {
      x1 = x1.substring(0,3) + "0" + x1.charAt(3) + x1.substring(5,x1.length - 1);
    }
    month = x1.substring(3,5);
    if (month > 12)
    {
      month_ok = false;
    }
    else
    {
      if ( (m_short.indexOf(month) != -1) && (day > 30) )
      {
        month_ok = false;
      }
      else
      {
        if ( (month == "02") && (day > 29) )
        {
          month_ok = false;
        }
      }
    }
  }
  // end of month check
  // begin of year check
  if (x1.length == 10)
  {
    if (!IsNumeric(x1.charAt(9)))
    {
      x1 = x1.substring(0,9);
    }
    else
    {
      year = 0 + x1.substring(6,11);
      if ( (month == 02) && (day == 29) && (year % 4 != 0) )
      {
        year_ok = false;
      }
      if ( (day == 00) )
      {
        days_ok = false;
      }
      if ( (month == 00) )
      {
        month_ok = false;
      }
      if ( (year == 0000) )
      {
        year_ok = false;
      }
    }
  }

  // end of year check
  // depending on the result above, choose a mask
  if (! days_ok)
  {
    return ("");
  }
  else if (! month_ok)
  {
    return (ApplyMask("##-", x1));
  }
  else if (! year_ok)
  {
    return (ApplyMask("##-##-", x1));
  }
  else
  {
    return (ApplyMask("##-##-####", x1));
  }
}

function ApplyAlphaMask(x1)
{
  var i=0 ;
  var s="";
  while ( i< x1.length)
  {
    if (IsAlphanumeric(x1.charAt(i))) s=s+x1.charAt(i);
    else break;
    i++ ;
  }
  return s ;
}

function ApplyNameMask(x1)
{
  var i=0 ;
  var s="";
  while ( i< x1.length)
  {
    if (IsAlphanumeric(x1.charAt(i)))
    {
      s=s+x1.charAt(i);
    }
    else if ((x1.charAt(i)) == " " || (x1.charAt(i)) == "-")
    {
      s=s+x1.charAt(i);
    }
    else
    {
      break;
    }
    i++ ;
  }
  return s ;
}

function ApplyAZCapitalMask(x1)
{
  var i=0;
  var s='';
  while(i<x1.length)
  {
    if (IsAlphanumeric(x1.charAt(i)))
    {
      if(IsLowercase(x1.charAt(i)))
      {
        strTemp = ToUppercase(x1.charAt(i))
        s=s+strTemp;
      }
      else
      {
        s=s+x1.charAt(i);
      }
    }
    else
    {
      break;
    }
    i++ ;
  }
  return s;
}

function ApplyCapitalMask(x1)
{
  return x1.toUpperCase();
}


function ApplyNumMask(x1)
{
  var i=0 ;
  var s="";
  while ( i< x1.length)
  {
    if (IsNumeric(x1.charAt(i))) s=s+x1.charAt(i);
    else break;
    i++ ;
  }
  return s ;
}

function ApplyLengthMask(x, intLength)
{
  return x.substring(0, intLength);
}

function CheckBankNum(BankNum)
{
  var Digits = "0123456789";
  var MulFactor = 9;
  var ch ="";
  var sum = 0;
  var rem = 0;
  for (var i = 0; i < 9; i++)
  {
    ch = BankNum.charAt(i);
    sum = sum + (Digits.indexOf(ch)* MulFactor) ;
    MulFactor  = MulFactor -1;
  }
  rem = sum % 11;
  if( rem == 0)
  {
    return true;
  }
  else
  {
    return false;
  }
}

function CheckLicenseNum(LicenseNum)
{
  var Digits = "0123456789";
  var ch ="";
  var sum = 0;
  var rem = 0;

  for (var i = 0; i < 9; i++)
  {
    ch = LicenseNum.charAt(i);
    sum = sum + Digits.indexOf(ch) ;
  }
  rem = sum % 9;
  
  if(rem == Digits.indexOf(LicenseNum.charAt(9)))
  {
    return true;
  }
  else
  {
    return false;
  }
}


// dtl: dd-mm-yyyy
function isGreaterThanCurrDate(dt1)
{
  var yr1 = dt1.substring(6, 10);
  var mn1 = dt1.substring(3, 5);
  var dy1 = dt1.substring(0, 2);
  var now = new Date();
  var Day = now.getDate();
  var Month = now.getMonth() + 1;
  var Year  = now.getYear();
  if (Year < 1900)
  {
    Year += 1900;
  }
  var Valid = true;
  if(dt1 == "")
    return(true);
  if (yr1 > Year)
  {
    return(true);
  }
  else

  if (yr1 == Year)
  {
    if (mn1 > Month)
    {
      return(true);
    }
    else

    if (mn1 == Month)
    {
      if (dy1 > Day)
      {
        return(true);
      }
      else

      if (dy1 == Day)
      {
        return(true);
      }
      else
      {
        return(false);
      }
    }
    else
    {
      return(false);
    }
  }
  else
  {
    return(false);
  }
}
// dtPast:  dd-mm-yyyy
// intDays: aantal dagen
// true = alles ok, opgegeven datum ligt intDays na huidige datum
// false = fout

function isDaysGreaterThanCurrDate(dtPast, intDays)
{
  // 1 jan = 31
  // 2 feb = 28
  // 3 mar = 31
  // 4 apr = 30
  // 5 may = 31
  // 6 june = 30
  // 7 juli = 31
  // 8 aug = 31
  // 9 sep = 30
  // 10 okt = 31
  // 11 nov = 30
  // 12 dec = 31
  var arrPassedDaysInMonth = new Array(0,31,59,90,120,151,181,212,243,273,304,334,365);
  var intPastDays = parseInt(dtPast.substring(6, 10), 10) * 365; // jaar
  intPastDays += arrPassedDaysInMonth[parseInt(dtPast.substring(3, 5), 10)]; // maand
  intPastDays += parseInt(dtPast.substring(0, 2), 10); // dagen

  var now = new Date();
  var Day = now.getDate();
  var Month = now.getMonth() + 1;
  var Year  = now.getYear();
  var intNow = parseInt(Year, 10) * 365; // jaar
  intNow += arrPassedDaysInMonth[parseInt(Month, 10)]; // maand
  intNow += parseInt(Day, 10); // dagen
  if(intPastDays >= eval(intNow + intDays - 1))
  {
    return true;
  }
  else
  {
    return false;
  }
}

function fillCombo(objCombo, arrValues, blnGeen, strValue)
{
  //Array is als volgt gevuld: arrValues[i][0] = Value
  //                           arrValues[i][1] = Tekst
  objCombo.length = 0;
  var intTeller = 0;
  if (blnGeen == true)
  {
   objCombo.options[intTeller] = new Option(' ', '-1');
   intTeller = intTeller + 1;
  }
  
  for(var i=0; i<arrValues.length; i++)
  {
    objCombo.options[intTeller] = new Option(arrValues[i][1], arrValues[i][0]);
    if (objCombo.options[intTeller].value == strValue)
    {
      objCombo.options[intTeller].selected = true;
    }
    intTeller = intTeller + 1
  }
}

function initCombo(objCombo, strValue)
{
  for(var i=0; i<objCombo.options.length; i++)
  {
    if (objCombo.options[i].value == strValue)
    {
      objCombo.options[i].selected = true;
    }
  }
}


function getCheckedRadio(radioGroup)
{
  var checkedIndex;
  for (var i = 0;i < radioGroup.length;i++)
  {
    if (radioGroup[i].checked)
    {
      return i;
    }
  }
  return -1;
}

//--| Clear all the containing label and span elements
//--| with className == errorlabel
function getClearLabels(strId)
{
  var objContainer=document.getElementById(strId);
  var arrElements=['LABEL','SPAN'];
  for(var i=0; i<arrElements.length; i++)
  {
    var kinderen=objContainer.getElementsByTagName(arrElements[i]);
    for(var j=0; j<kinderen.length; j++)
    {
      var kind=kinderen[j];
      if(kind.style.color=='#ff0000')
      {
        kind.style.color='#000000';
      }
    }
  }
}

function getFieldName(strId)
{
  //strId is de id van een control, de functie retouneerd dan de innerText van het bijbehoorende albel
  var o=document.getElementById('label_'+strId);
  if(o) return o.innerText;
  else return '';
}

function checkTextBox(strMask,strId,blnRequired,strMessage)
{
  var o=document.getElementById(strId);
  if(o.disabled) return strMessage;
  if(o.parentElement.parentElement.style.display=='none') return strMessage;

  if(blnRequired)
  { 
    if(strMask.length>0)
    {
      if( !RichMaskCompare(strMask,o.value) )
      {
        document.getElementById('label_'+strId).style.color='#ff0000';
        if (strMessage=='') o.focus();
        return strMessage + getFieldName(strId) + '\n'; 
      }
    }
    else /*no mask, though required*/
    {
      if(o.value=='')
      { 
        document.getElementById('label_'+strId).style.color='#ff0000';
        if (strMessage=='') o.focus();
        return strMessage + getFieldName(strId) + '\n'; 
      }
      var re = /[^ ]/;
      if ( ( o.value.length > 0 ) && ( !o.value.match(re) ) ) {
        document.getElementById('label_'+strId).style.color='#ff0000';
        if (strMessage=='') o.focus();
        return strMessage + getFieldName(strId) + '\n'; 
      }

    }
  }
  else /*not required*/
  {
    if( !RichMaskCompare(strMask,o.value) && o.value!='')
    {
      document.getElementById('label_'+strId).style.color='#ff0000';
      if (strMessage=='') o.focus();
      return strMessage + getFieldName(strId) + '\n'; 
    }
  }
  return strMessage;
}

//--| Checks if a select is correct
//--| Note: this function is never called when a select is not required.
function checkSelect(strId,strMessage)
{
  var o=document.getElementById(strId);
  if(o.parentElement.parentElement.style.display=='none') return strMessage;  
  if(!o.disabled && o.value==-1)
  {
    document.getElementById('label_'+strId).style.color='#ff0000';
    if (strMessage=='') o.focus();
    return strMessage + getFieldName(strId) + '\n'; 
  }
  return strMessage;
}

function checkMemo(strMask,strId,blnRequired,strMessage)
{
  return checkTextBox(strMask,strId,blnRequired,strMessage);
}

function handleTabKnobChecks(strMessage,blnEnforceValidation,blnNoPromptAndStay,enumRes,strOnLeave)
{
  if(strMessage.length>0)
  {
    if(blnNoPromptAndStay)
    {
      return tabValidateBadStay;
    }
    else if(blnEnforceValidation)
    {
      alert('De volgende velden zijn verkeerd ingevuld:\n'+strMessage);
      return tabValidateBadStay;
    }
    else
    {
      if(confirm('De volgende velden zijn verkeerd ingevuld:\n'+strMessage+'\nWilt u de pagina toch verlaten?'))
      {
        return tabValidateBadFurther;
      }
      else
      {
        return tabValidateBadStay;
      }
    }
  }
  //--| custom checks
  if(strOnLeave)
  {
    var objError=eval(strOnLeave);
    if(objError==null)
    {
      return tabValidateNothingToCheck;
    }
    else if(objError.blnHasErrors)
    {
      objError.markFaultyFields();
      if(blnEnforceValidation&&blnNoPromptAndStay)
      {
        return tabValidateBadStay;
      }
      else if(blnEnforceValidation)
      {
        alert(objError.getMessages());
        return tabValidateBadStay;
      }
      else
      {
        if(confirm('De volgende velden zijn verkeerd ingevuld:\n'+objError.getMessages()+'\n\nWilt u de pagina toch verlaten?'))
        {
          return tabValidateBadFurther;
        }
        else
        {
          return tabValidateBadStay;
        }
      }
    }
  }
  return enumRes;
}

// dt1:  dd-mm-yyyy
// true  = datum ligt voor de huidige datum
// false = datum is gelijk aan huidige datum of ligt in de toekomst
// dtl: dd-mm-yyyy
function isBeforeCurrDate(dt1)
{

  // spatie datum                              ==> isBeforeCurrDate(dt1) := true
  if(dt1 == "") { return(true); }
 
  var now   = new Date();
  var Day   = now.getDate();
  var Month = now.getMonth() + 1;
  var Year  = now.getYear();
  if (Year < 1900)
  {
    Year += 1900;
  }
  var huidigeDatum_yyyymmdd = Year * 10000 + Month * 100 + Day;
  var dt1_yyyymmdd = dt1.substring(6, 10) + dt1.substring(3, 5) + dt1.substring(0, 2);
  var dt2_yyyymmdd = parseInt(dt1_yyyymmdd,10);
  if ( dt2_yyyymmdd < huidigeDatum_yyyymmdd ) { return true; }
  
  return false;

}

