﻿//判斷長度
/*
   RegObj   所要驗證的物件名稱
   RegLen   所能輸入的最大長度
   ErrID    錯誤欄位的名稱
   Lang     多國語系的代碼
*/
function Length(RegObj, RegLen, ErrID, Lang) {
   if (document.getElementById(RegObj).value.length > RegLen) {
      var ErrMsg, RegObj_Length;
      RegObj_Length = document.getElementById(RegObj).value.length;
      
      switch (Lang) {
         case "TW":
            ErrMsg = "[" + ErrID + "]長度過長！\n超過" + RegLen + "字！\n目前共有" + RegObj_Length + "字！";
            break;
         case "EN":
            ErrMsg = "[" + ErrID + "] is over the length limit, with " + RegLen + " excessive characters.\nThere are currently " + RegObj_Length + " characters in total";
            break;
      }
      
      alert(ErrMsg);
      return false;
   }
   return true;
}

//檢查欄位是否有輸入或選擇所需之值並回傳錯誤訊息
/*
   RegObj   所要驗證的物件名稱
   RegVal   所要驗證的值
   ErrID    錯誤欄位的名稱
   Lang     多國語系的代碼
*/
function CheckIsNull(RegObj, RegVal, ErrID, Lang) {
   if (document.getElementById(RegObj).value == RegVal) {
      var ErrMsg;
      
      switch (Lang) {
         case "TW":
            ErrMsg = "[" + ErrID + "]欄位錯誤(不可為空白)！\n請輸入(選擇)資料！";
            break;
         case "EN":
            ErrMsg = "The field [" + ErrID + "] is erroneous (cannot be blank).\nPlease enter or select data！";
            break;
      }
      
      alert(ErrMsg);
      return false;
   }
   return true;
}

//檢查兩欄位[起迄日期等有開始與結束關係的欄位]的值是大於、小於或等於
/*
  RegObj_S   所要驗證的物件名稱
  RegObj_E   所要驗證的物件名稱
  RegVar     表所要驗證的條件式(大於、小於或等於)
  RegNum     表所要驗證的型態
  ErrID      錯誤欄位的名稱
  Lang       多國語系的代碼
*/
function CheckRegCondition(RegObj_S, RegObj_E, RegVar, RegNum, ErrID, Lang) {
   var ErrMag;
   switch (RegVar) {
      case ">":
         switch (Lang) {
            case "TW":
               ErrMsg = "大於";
               break;
            case "EN":
               ErrMsg = "bigger than";
               break;
         }
         break;
      case "<":
         switch (Lang) {
            case "TW":
               ErrMsg = "小於";
               break;
            case "EN":
               ErrMsg = "less than";
               break;
         }
         break;
      case "==":
         switch (Lang) {
            case "TW":
               ErrMsg = "等於";
               break;
            case "EN":
               ErrMsg = "equal to";
               break;
         }
         break;
      case "!=":
         switch (Lang) {
            case "TW":
               ErrMsg = "不等於";
               break;
            case "EN":
               ErrMsg = "different than";
               break;
         }
         break;
   }
   
   switch (RegNum) {
      case 0:
         switch (Lang) {
            case "TW":
               ErrMsg = "舊密碼輸入錯誤";
               break;
            case "EN":
               ErrMsg = "The old password is incorrect.";
               break;
         }
         
         ErrMsg = "[" + ErrID + "]" + ErrMsg;
         break;
      case 1:
         switch (Lang) {
            case "TW":
               ErrMsg = "新密碼與確認密碼並不一致";
               break;
            case "EN":
               ErrMsg = "The new password does not match the confirmation password.";
               break;
         }
         
         ErrMsg = "[" + ErrID + "]" + ErrMsg;
         break;
      case 2:
         switch (Lang) {
            case "TW":
               ErrMsg = "[" + ErrID + "]" + "的開始日期不可" + ErrMsg + "結束日期";
               break;
            case "EN":
               ErrMsg = "The starting date of [" + ErrID + "] cannot be " + ErrMsg + " the end date.";
               break;
         }
         break;
      case 3:
         switch (Lang) {
            case "TW":
               ErrMsg = "[" + ErrID + "]" + "的開始時間不可" + ErrMsg + "結束時間";
               break;
            case "EN":
               ErrMsg = "The starting time of [" + ErrID + "] cannot be " + ErrMsg + " the finishing time.";
               break;
         }
         break;
      case 4:
         switch (Lang) {
            case "TW":
               ErrMsg = "不可" + ErrMsg + "原有的報名人數";
               break;
            case "EN":
               ErrMsg = " cannot be " + ErrMsg + " the original number of registered participants";
               break;
         }
         
         ErrMsg = "[" + ErrID + "]" + ErrMsg;
         break;
      case 5:
         switch (Lang) {
            case "TW":
               ErrMsg = "[" + ErrID + "]欄位錯誤(不可為空白)！\n請輸入(選擇)資料！";
               break;
            case "EN":
               ErrMsg = "The field [" + ErrID + "] is erroneous (cannot be blank).\nPlease enter or select data！";
               break;
         }
         break;
      case 6:
         switch (Lang) {
            case "TW":
               ErrMsg = "與[確認" + ErrID + "]並不一致";
               break;
            case "EN":
               ErrMsg = "The e-mail address does not match the confirmation e-mail address.";
               break;
         }

         ErrMsg = "[" + ErrID + "]" + ErrMsg;
         break;
   }
   
   if (eval('(document.getElementById("' + RegObj_S + '").value ' + RegVar + 'document.getElementById("' + RegObj_E + '").value)')) {
      alert(ErrMsg + "！");
      return false;
   }
   
   return true;
}

//檢查兩HtmlSelect欄位[月、日欄位]的值是否都有選擇或都沒選擇
/*
  RegObj   所要驗證的物件名稱
  ErrID    錯誤欄位的名稱
*/
function CheckEqualAndUnEqual(RegObj, ErrID) {
   if (((document.getElementById(RegObj + '_Month').value == '') && (document.getElementById(RegObj + '_Date').value == '')) ||
       ((document.getElementById(RegObj + '_Month').value != '') && (document.getElementById(RegObj + '_Date').value != '')))
      return true;
      
   alert('[' + ErrID + ']月日均須選擇或不選擇！');
   return false;
}

//驗證欄位
/*
   RegObj   所要驗證的物件名稱
   RegNum   判斷所需要的驗證方式
   ErrID    錯誤欄位的名稱
   Lang     多國語系的代碼
*/
function CheckRegEx(RegObj, RegNum, ErrID, Lang) {
   var RegEx, ErrMsg;
   
   switch (RegNum) {
      case 0:
         RegEx = /\d/;
         switch (Lang) {
            case "TW":
               ErrMsg = "只允許輸入數字";
               break;
            case "EN":
               ErrMsg = "Only numbers are acceptable inputs";
               break;
         }
         break;
      case 1:
         RegEx = /[A-Z]/;
         switch (Lang) {
            case "TW":
               ErrMsg = "只允許輸入大寫字母";
               break;
            case "EN":
               ErrMsg = "Only uppercase letters are acceptable inputs";
               break;
         }
         break;
      case 2:
         RegEx = /[a-z]/;
         switch (Lang) {
            case "TW":
               ErrMsg = "只允許輸入小寫字母";
               break;
            case "EN":
               ErrMsg = "Only lowercase letters are acceptable inputs";
               break;
         }
         break;
      case 3:
         RegEx = /[a-zA-Z]/;
         switch (Lang) {
            case "TW":
               ErrMsg = "只允許輸入英文字母";
               break;
            case "EN":
               ErrMsg = "Only English letters are acceptable inputs";
               break;
         }
         break;
      case 4:
         RegEx = /\w/;
         switch (Lang) {
            case "TW":
               ErrMsg = "只允許輸入英數字";
               break;
            case "EN":
               ErrMsg = "Only alphanumeric data are acceptable inputs";
               break;
         }
         break;
      case 5:
         RegEx = /[\w_\.\,\'\-\r\n\ ]/;
         switch (Lang) {
            case "TW":
               ErrMsg = "只允許輸入英數字及 -_.,'等字元";
               break;
            case "EN":
               ErrMsg = "Only alphanumeric data and punctuation marks (e.g., -_.,') are acceptable inputs";
               break;
         }
         break;
      case 6:
         RegEx = /[A-Z][\d]{5}/;
         switch (Lang) {
            case "TW":
               ErrMsg = "格式為：[X99999]";
               break;
            case "EN":
               ErrMsg = "The format is [X99999]";
               break;
         }
         break;
      case 7:
         RegEx = /[A-Z]_\d{4}_\d{2}_\d{3}/;
         switch (Lang) {
            case "TW":
               ErrMsg = "格式為：[X_9999_99_999]";
               break;
            case "EN":
               ErrMsg = "The format is [X_9999_99_999]";
               break;
         }
         break;
      case 8:
         RegEx = /(\w[\w\d_\.\-]+)@([\w\d\-]+\.)+([\w\d]+)/;
         switch (Lang) {
            case "TW":
               ErrMsg = "請輸入正確的電子郵件格式[abc@d.e.f]";
               break;
            case "EN":
               ErrMsg = "The correct format of an e-mail address is abc@d.e.f";
               break;
         }
         break;
      case 9:
         RegEx = /http:\/\/(\w[\w\d_\.]+)([\w\d\-]+\.)+([\w\d]+)/;
         switch (Lang) {
            case "TW":
               ErrMsg = "請輸入正確的網址格式[http://a.b.c]";
               break;
            case "EN":
               ErrMsg = "The correct format of a website address is http://a.b.c";
               break;
         }
         break;
      case 10:
         RegEx = /\d{2}\:\d{2}/;
         switch (Lang) {
            case "TW":
               ErrMsg = "請輸入正確的時間格式[99:99]";
               break;
            case "EN":
               ErrMsg = "The correct format of time is 99:99";
               break;
         }
         break;
      case 11:
         RegEx = /\d{4}\/\d{2}\/\d{2}/;
         switch (Lang) {
            case "TW":
               ErrMsg = "請輸入正確的日期格式[yyyy/mm/dd]";
               break;
            case "EN":
               ErrMsg = "The correct format of date is yyyy/mm/dd";
               break;
         }
         break;    
      case 12:
         RegEx = /^[0-9]+(\.[0-9]{1,2})?$/;
         switch (Lang) {
            case "TW":
               ErrMsg = "請輸入正確的格式[99.9]";
               break;
            case "EN":
               ErrMsg = "The correct format is 99.9";
               break;
         }
         break; 
   }
   
   switch (RegNum) {
      case 6: case 7: case 10: case 11: case 12:
         //若不加下面這一判斷式，會造成一定要輸入資料才能驗證過關。
         if ((document.getElementById(RegObj).value == "") && ((RegNum == 10) || (RegNum == 11) || (RegNum == 12)))
            break;
         
         if (!RegEx.test(document.getElementById(RegObj).value)) {
            switch (Lang) {
               case "TW":
                  alert("[" + ErrID + "]欄位驗證錯誤！\n" + ErrMsg + "！");
                  break;
               case "EN":
                  alert("The field [" + ErrID + "] cannot be validated！\n" + ErrMsg + "！");
                  break;
            }
            return false;
         }
         break;
      case 8: case 9:
         if (document.getElementById(RegObj).value != "") {
            var Mail = document.getElementById(RegObj).value.split("\n")
            
            if (Mail.length == 1) {
               if (!RegEx.test(Mail[0])) {
                  switch (Lang) {
                     case "TW":
                        alert("[" + ErrID + "]欄位驗證錯誤！\n" + ErrMsg + "！");
                        break;
                     case "EN":
                        alert("The field [" + ErrID + "] cannot be validated！\n" + ErrMsg + "！");
                        break;
                  }
                  return false;
               }
            }else{
               for (shtR = 0; shtR < Mail.length; shtR++) {
                  if (!RegEx.test(Mail[shtR])) {
                     switch (Lang) {
                        case "TW":
                           alert("[" + ErrID + "]欄位的第" + eval(shtR + 1) + "個格式錯誤！\n" + ErrMsg + "！");
                           break;
                        case "EN":
                           alert("The format of the " + eval(shtR + 1) + " element of the field [" + ErrID + "] is invalid！\n" + ErrMsg + "！");
                           break;
                     }
                     return false;
                  }
               }
            }
         }
         break;
      default:
         for (var shtR = 0; shtR < document.getElementById(RegObj).value.length; shtR++) {
            if (!RegEx.test(document.getElementById(RegObj).value.charAt(shtR))) {
              switch (Lang) {
                  case "TW":
                     alert("[" + ErrID + "]欄位驗證錯誤！\n" + ErrMsg + "！");
                     break;
                  case "EN":
                     alert("The field [" + ErrID + "] cannot be validated！\n" + ErrMsg + "！");
                     break;
               }
               return false;
            }
         }
         break;
   }
   return true;
}
