function isValidFormMobileNo(mobile_no) {
  if (mobile_no.value != "") {
    if (mobile_no.value.length != 8) {
      alert ('手提電話號碼格式不正確，請重新輸入。')
      mobile_no.focus();
      return false;
    }
    if (isInt(mobile_no) == false || (/^[9]{3}[\d]+$/.test(mobile_no.value))) {
      alert ('手提電話號碼格式不正確，請重新輸入。');
      mobile_no.focus();
      return false;
    }
  }
  return true;
}

function isValidFormPhoneNo(phone_no) {
  if (phone_no.value != "") {
    if (phone_no.value.length != 8) {
      alert ('電話號碼格式不正確，請重新輸入。')
      phone_no.focus();
      return false;
    }
    if (isInt(phone_no) == false || (/^[9]{3}[\d]+$/.test(phone_no.value))) {
      alert ('電話號碼格式不正確，請重新輸入。');
      phone_no.focus();
      return false;
    }
  }
  return true;
}

function isValidFormRegUsername(username) { // for new member
  username.value = trim(username.value);
  if (!isFilled(username.value)) {
    alert('必須輸入會員名稱。');
    username.focus();
    return false;
  }
  if(!(/^[\d\w\_\-]{6,10}$/.test(username.value))) {
    alert('會員名稱必須是6至10個字母與數字符號構成，請修改。');
    username.focus();
    return false;
  }
  return true;
}

function isValidFormOldUsername(username) { // for old member
  username.value = trim(username.value);
  if (!isFilled(username.value)) {
    alert('必須輸入會員名稱。');
    username.focus();
    return false;
  }
  if (username.value.length > 10) {
    alert('會員名稱必須是6至10個字母與數字符號構成，請修改。');
    username.focus();
    return false;
  }
  return true;
}

function isValidFormRegPassword(pass, pass2) { // for new member
  if (!isFilled(pass.value)) {
    alert('必須輸入會員密碼。');
    pass.focus();
    return false;
  }
  if(!(/^[\d\w\_\-]{6,10}$/.test(pass.value))) {
    alert('會員密碼必須是6至10個字母與數字符號構成，請修改。');
    pass.focus();
    return false;
  }
  if (pass.value != pass2.value) {
    alert('會員密碼與確認密碼不同，請修改。');
    pass2.focus();
    return false;
  }
  return true;
}

function isValidFormOldPassword(pass) { // for old member
  if (!isFilled(pass.value)) {
    alert('必須輸入會員密碼。');
    pass.focus();
    return false;
  }
  if (pass.value.length > 10) {
    alert('會員密碼必須是6至10個字母與數字符號構成，請修改。');
    pass.focus();
    return false;
  }
  return true;
}

function isValidFormLastName(lname) {
  if (!isFilled(lname.value)) {
    alert('必須輸入姓氏。');
    lname.focus();
    return false;
  }
  if (lname.value.indexOf("'") != -1) {
    alert("姓氏內不能含有 ' ，請修改。");
    lname.focus();
    return false;
  }
  if (lname.value.getBytes() > 30) {
    alert('姓氏的最長長度是15個中文字母或30個英文字母，請修改。');
    lname.focus();
    return false;
  }
  return true;
}

function isValidFormFirstName(fname) {
  if (!isFilled(fname.value)) {
    alert('必須輸入名字。');
    fname.focus();
    return false;
  }
  if (fname.value.indexOf("'") != -1) {
    alert("名字內不能含有 ' ，請修改。");
    fname.focus();
    return false;
  }
  if (fname.value.getBytes() > 30) {
    alert('名字的最長長度是15個中文字母或30個英文字母，請修改。');
    fname.focus();
    return false;
  }
  return true;
}

function isValidFormAddress(addr1, addr2, addr3) {
  if (addr1.value.indexOf("'") != -1) {
    alert("地址內不能含有 ' ，請修改。");
    addr1.focus();
    return false;
  }
  if (addr2.value.indexOf("'") != -1) {
    alert("地址內不能含有 ' ，請修改。");
    addr2.focus();
    return false;
  }
  if (addr3.value.indexOf("'") != -1) {
    alert("地址內不能含有 ' ，請修改。");
    addr3.focus();
    return false;
  }
  if (addr1.value.getBytes() > 30) {
    alert('地址(第一行)的最長長度是15個中文字母或30個英文字母，請修改。');
    addr1.focus();
    return false;
  }
  if (addr2.value.getBytes() > 30) {
    alert('地址(第二行)的最長長度是15個中文字母或30個英文字母，請修改。');
    addr2.focus();
    return false;
  }
  if (addr3.value.getBytes() > 30) {
    alert('地址(第三行)的最長長度是15個中文字母或30個英文字母，請修改。');
    addr3.focus();
    return false;
  }
  return true;
}

function isValidFormEmail(email) {
  if (!isValidEmail(email.value)) {
    alert('電郵地址不正確，請修改。');
    email.focus();
    return false;
  }
  if (email.value.length > 60) {
    alert('電郵地址的最長長度是60個字母，請修改。');
    email.focus();
    return false;
  }
  return true;
}

function isValidFormHKID(id_passport, hkid_prefix) {
  return true;
  if (!isFilled(id_passport.value)) {
    alert('請輸入香港身份証號碼。');
    hkid_prefix.focus();
    return false;
  }
  if (!isHKID(id_passport.value)) {
    alert('抱歉! 你提供的香港身份証號碼格式不正確。請重新輸入。');
    hkid_prefix.focus();
    return false;
  }
  return true;
}

function isValidFormPinNo(pin_no) {
  if (!isFilled(pin_no.value)) {
    alert('請輸入八達通卡編號。');
    pin_no.focus();
    return false;
  }
  if (/^[0-9]{1,10}$/.test(pin_no.value) == false) {
    alert('八達通卡編號必須是數字0-9，請修改。');
    pin_no.focus();
    return false;
  }
  if (isCheckDigit(pin_no.value) == false) {
    alert('八達通卡編號不正確，請修改。');
    pin_no.focus();
    return false;
  }
  return true;
}

function isValidFormShareholderCode(shareholder_code) {
  if (shareholder_code.value.indexOf("'") != -1) {
    alert("股東獎分密碼內不能含有 ' ，請修改。");
    shareholder_code.focus();
    return false;
  }
  return true;
}

function isValidFormRefUsername(ref_username) { // for MGM
  ref_username.value = trim(ref_username.value);
  if (ref_username.value.length > 10) {
    alert('推薦人的「會員名稱」必須是6至10個字母與數字符號構成，請修改。');
    ref_username.focus();
    return false;
  }
  return true;
}

function isValidFormTripInfo(mf) {
  if (mf.TRIP_TYPE[0].checked) {
    if (mf.HVYR_START_STATION.options[mf.HVYR_START_STATION.options.selectedIndex].value == 0) {
      alert('你必須選擇你最近乘搭的港鐵車程。');
      mf.HVYR_START_STATION.focus();
      return false;
    }
    if (mf.HVYR_END_STATION.options[mf.HVYR_END_STATION.options.selectedIndex].value == 0) {
      alert('你必須選擇你最近乘搭的港鐵車程。');
      mf.HVYR_END_STATION.focus();
      return false;
    }
  }
  else if (mf.TRIP_TYPE[1].checked) {
    if (mf.LGTR_START_STATION.options[mf.LGTR_START_STATION.options.selectedIndex].value == 0) {
      alert('你必須選擇你最近乘搭的港鐵車程。');
      mf.LGTR_START_STATION.focus();
      return false;
    }
    if (mf.LGTR_END_STATION.options[mf.LGTR_END_STATION.options.selectedIndex].value == 0) {
      alert('你必須選擇你最近乘搭的港鐵車程。');
      mf.LGTR_END_STATION.focus();
      return false;
    }
  }
  else if (mf.TRIP_TYPE[2].checked) {
    if (mf.BUS_ROUTE.options[mf.BUS_ROUTE.options.selectedIndex].value == 0) {
      alert('你必須選擇你最近乘搭的巴士路線。');
      mf.BUS_ROUTE.focus();
      return false;
    }
  }
  else if (!mf.TRIP_TYPE[2].checked && !mf.TRIP_TYPE[1].checked && !mf.TRIP_TYPE[0].checked) {
    alert('你必須選擇你最近乘搭的港鐵車程或巴士路線。');
    mf.HVYR_START_STATION.focus();
    return false;
  }
  return true;
}

function isValidFormTripDate(ltrip_yr, ltrip_mn, ltrip_dy) {
  var ltrip_yr_value = ltrip_yr.options[ltrip_yr.options.selectedIndex].value;
  var ltrip_mn_value = ltrip_mn.options[ltrip_mn.options.selectedIndex].value - 1;
  var ltrip_dy_value = ltrip_dy.options[ltrip_dy.options.selectedIndex].value;
  var enterdate = new Date(ltrip_yr_value, ltrip_mn_value, ltrip_dy_value);
  var rightnow = new Date();
  
  if (getDateString(enterdate) - getDateString(rightnow) > 0) {
    alert('輸入的最近乘搭港鐵的日期不正確，請修改。');
    ltrip_yr.focus();
    return false;
  }
  return true;
}

function isValidFormDateofBirth(bdate_yr, bdate_mm, bdate_dy) {
//  var bdate_yr_value = bdate_yr.options[bdate_yr.options.selectedIndex].value;
  var bdate_yr_value = 1980;
  var bdate_mm_value = bdate_mm.options[bdate_mm.options.selectedIndex].value - 1;
  var bdate_dy_value = bdate_dy.options[bdate_dy.options.selectedIndex].value;
  var enterdate = new Date(bdate_yr_value, bdate_mm_value, bdate_dy_value);
  var rightnow = new Date();
  
  if (getDateString(enterdate) - getDateString(rightnow) > 0) {
    alert('請輸入正確的出生日期。');
    bdate_yr.focus();
    return false;
  }
  return true;
}

function isValidSStation(mf, max_count) {
  var sel;
  var count = 0;
  
  sel = mf.elements['S_STATION[]'];
  for (var i=0; i<sel.length; i++) {
    if (sel.options[i].selected) {
      count++;
    }
  }

  if (count > max_count) {
    return false;
  } else {
    return true;
  }
}

function validate_pin_update(mf, old_pin_no) {
  if (!isValidFormPinNo(mf.pin_no)) { return false; } //** check Octopus card no.
  if (!isValidFormTripInfo(mf)) { return false; }     //** check last MTR trip
  if (!isValidFormTripDate(mf.ltrip_Year, mf.ltrip_Month, mf.ltrip_Day)) { return false; }    //** check last MTR date
  return true;
}

function validate_clean_update(mf) {
  if (!isValidFormMobileNo(mf.mobile_no)) { return false; }     //** check mobile no
  if (!isValidFormEmail(mf.email)) { return false; }            //** check email
//  if (!isValidFormDateofBirth(mf.bdate_Year, mf.bdate_Month, mf.bdate_Day)) { return false; } //** check date of birth
  if (!isValidFormDateofBirth(1980, mf.bdate_Month, mf.bdate_Day)) { return false; } //** check date of birth
  return true;
}

function validate_form_data(mf, formtype) {
  //  Validation only for registration form
  if (formtype == 'REGISTER') {
    if (!isValidFormPinNo(mf.pin_no)) { return false; }         //** check Octopus card no.
    if (!isValidFormTripInfo(mf)) { return false; }             //** check last MTR trip
    if (!isValidFormTripDate(mf.ltrip_Year, mf.ltrip_Month, mf.ltrip_Day)) { return false; }  //** check last MTR date
    if (!isValidFormRegUsername(mf.username)) { return false; } //** check login name
  }

  if (formtype == 'REGISTER' || mf.pass.value != '') {
    if (!isValidFormRegPassword(mf.pass, mf.pass2)) { return false; } //** check password
  }

  if (!isValidFormEmail(mf.email)) { return false; }            //** check email
  if (!isValidFormLastName(mf.lname)) { return false; }         //** check Surname
  if (!isValidFormFirstName(mf.fname)) { return false; }        //** check Given name
//  if (!isValidFormHKID(mf.id_passport, mf.hkid_prefix)) { return false; } //** check HK ID Card
  
  //if (!isValidFormAddress(mf.addr1, mf.addr2, mf.addr3)) { return false; } //** check address
  
  if (!isValidFormMobileNo(mf.mobile_no)) { return false; }     //** check mobile no
  // if (!isValidFormPhoneNo(mf.phone_no)) { return false; }    //** check phone no
//  if (!isValidFormDateofBirth(mf.bdate_Year, mf.bdate_Month, mf.bdate_Day)) { return false; } //** check date of birth
  if (!isValidFormDateofBirth(1980, mf.bdate_Month, mf.bdate_Day)) { return false; } //** check date of birth
  
  //** check referral
  if (formtype == 'REGISTER' && typeof(mf.ref_username) != "undefined") {
    if (isFilled(mf.ref_username.value)) {
      if (!isValidFormRefUsername(mf.ref_username)) {
        return false;
      }
    }
  }

  //** check shareholder
  if (typeof(mf.shareholder_code) != "undefined") {
    if (isFilled(mf.shareholder_code.value)) {
      if (!isValidFormShareholderCode(mf.shareholder_code)) {
        return false;
      }
    }
  }

  if (typeof(mf.P_STATION) != "undefined") {
  if (mf.P_STATION.options[mf.P_STATION.options.selectedIndex].value == 0) {
    alert('請選擇你的港鐵站');
    mf.P_STATION.focus();
    return false;
  }
  }

  if (typeof(mf.S_STATION) != "undefined") {
    if (! isValidSStation(mf, 2)) {
      alert('請選擇最多兩個你關注的港鐵站');
      mf.elements['S_STATION[]'].focus();
      return false;
    }
  }

  if(formtype != 'REGISTER' && !mf.read_understand.checked) {
    alert('如閣下已閱讀及明白所有規則、聲明及條款，接受該等條款的約束，請選擇左邊方格。');
    mf.read_understand.focus();
    return false;
  }
  return true;
}

function validate_forget_password(mf) {
  var filled_info_count = 0;
  
  if (isFilled(mf.pin_no.value)) {
    if (!isValidFormPinNo(mf.pin_no)) { return false; }
    filled_info_count++;
  }

  if (isFilled(mf.username.value)) {
    if (!isValidFormOldUsername(mf.username)) { return false; }
    filled_info_count++;
  }

  if (filled_info_count < 2) {
    alert('請提供任 八達通卡編號 及 會員名稱。');
    mf.pin_no.focus();
    return false;
  }
  return true;
}

function validate_delivery_data(mf) {
  //** check last name
  if (!isValidFormLastName(mf.delivery_last_name)) {
    return false;
  }

  //** check first name
  if (!isValidFormFirstName(mf.delivery_first_name)) {
    return false;
  }

  //** check address
  if (!isFilled(mf.delivery_address_1.value + mf.delivery_address_2.value + mf.delivery_address_3.value)) {
    alert('必須輸入地址。');
    mf.delivery_address_1.focus();
    return false;
  }
  if (!isValidFormAddress(mf.delivery_address_1, mf.delivery_address_2, mf.delivery_address_3)) {
    return false;
  }

  //** check email
  if (!isValidFormEmail(mf.delivery_email)) {
    return false;
  }
  
  //** check phone no
  if (!isFilled(mf.delivery_phone_no.value)) {
    alert ('必須輸入聯絡電話。')
    mf.delivery_phone_no.focus();
    return false;
  }
  if (!isValidFormPhoneNo(mf.delivery_phone_no)) {
    return false;
  }
  return true;
}

function validate_login(mf) {
  if (!isFilled(mf.username.value)) {
    alert('請輸入登入名稱');
    mf.username.focus();
    return false;
  }
  if (!isFilled(mf.password.value)) {
    alert('請輸入會員密碼');
    mf.password.focus();
    return false;
  }
  /*
  if (!isValidFormOldUsername(mf.username) {
    return false;
  }
  if (!isValidFormOldPassword(mf.password) {
    return false;
  }
  */
  return true;
}

function login_submit(mf) {
  if (validate_login(mf) == true) {
    mf.login_username.value = mf.username.value;
    mf.login_password.value = mf.password.value;
    mf.username.value = '';
    mf.password.value = '';
    mf.dummy.value = 'login';
    mf.dummy.name  = 'action';
    mf.submit();
  }
}

function isValidMobileNo(mf) { // old function
  return isValidFormMobileNo(mf.mobile_no);
}

function isValidPhoneNo(mf) { // old function
  return isValidFormPhoneNo(mf.phone_no);
}
