function checkValidDate(form,f_prefix) {
  var dayOfMonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
  var d_field = eval("form." + f_prefix + "Day");
  var m_field = eval("form." + f_prefix + "Month");
  var y_field = eval("form." + f_prefix + "Year");

  if (y_field) {
    if (y_field.options[y_field.selectedIndex].value % 4 == 0) {
      dayOfMonth[1] = 29;
    } else {
      dayOfMonth[1] = 28;
    }
  } else {
    dayOfMonth[1] = 29;
  }

  if (d_field && m_field) {
    if (d_field.options[d_field.selectedIndex].value > dayOfMonth[m_field.selectedIndex]) {
      var daynum = dayOfMonth[m_field.selectedIndex];
      var dif = d_field.options[d_field.selectedIndex].value - dayOfMonth[m_field.selectedIndex];

      d_field.options[d_field.selectedIndex-dif].selected=true;
    }
  }
}

// HK ID validation
function isHKID(v){
  a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  n = "0123456789";
  v = v.toUpperCase();
  var r = /^([A-Za-z]{1,2})([0-9]{6})\(([A0-9])\)$/;

  if (!(res=v.match(r))){
    return false;
  }
  if (v.length == 10) {
    v = " " + v;
  }
  c = new Array(8);
  for (i=0; i<8; i++){
    if (i < 2) {
      if (v.charAt(i) != " ") {
         c[i] = a.indexOf(v.charAt(i)) + 10;
      } else {
         c[i] = 36;
      }
    } else {
       c[i] = parseInt(v.charAt(i));
    }
    c[i] = c[i] * (9 - i);
  }

  s = c[0] + c[1] + c[2] + c[3] + c[4] + c[5] + c[6] + c[7];
  s = (11 - (s %= 11));
  s = (s == 10) ? "A" : s;
  s = (s == 11) ? "0" : s;

  if (s == v.charAt(9)){
    return true;
  } else {
    return false;
  }
}
// eof HK ID validation

// octopus validation
function isCheckDigit(n){
  if (n.length == 9){
    return checkDigit(n.substr(0,8), n.substr(8,1));
  } else if (n.length > 9) {
    return false;
  } else {
    return true;
  }
}

function isValidEmail(email_address) {
  if (/^\w+[\-\.\w]*@\w+[\.\-\w]*(\.\w{2,3})+$/.test(email_address)) {
    return true;
  }
  return false;
}

function checkDigit(n, d){
  var s = 0;
  var a = 0;
  for (var i=0; i<n.length; i++){
    a = parseInt(n.substr(i,1));
    s += ((i%2)==0?cal(a):a);
  }
  if (((s + parseInt(d)) % 10) == 0){
    return true;
  } else {
    return false;
  }
}

function cal(n){
  var s = 0;
  n *= 2;
  if (n > 9){
    n = n+"";
    for (var i=0; i<n.length; i++){
      s += parseInt(n.substr(i,1));
    }
    n = s;
  }
  return n;
}
// eof octopus validation
