//==================================================
// 共用的 JavaScript 函數:
// * 去掉前後空白
// * 檢驗字元數
// * 檢驗統編
// * 檢驗是否為半形數字
// * 檢驗是否為半形英文或數字
// * 檢驗是否為檔名(半形英數字或『_』,且長度不得超過30字元)
// * 檢驗URL格式
// * 檢查Email格式
// * 檢查電話格式
// * 檢驗日期
// * 判斷字串是否大於指定的字數
// * 判斷字串是否有特殊字元(共用欄位複雜，要修改時，請注意！)
// * 傳回去除前後半型空白的值
// * 傳回去除前後全型空白的值
// * 傳回去除前後半全型空白的值
//==================================================

//去掉前後空白 START
function trim(str){
  var len=str.length;
  var lpos=0,rpos=len-1;
  var newstr;

  if(len > 0){
    while(str.charAt(lpos) == " ")
      lpos++;

    while(str.charAt(rpos) == " ")
      rpos--;

    if(rpos >= lpos)
      newstr = str.substring(lpos,rpos+1);
    else
      newstr = "";
  }else{
    newstr = "";
  }

  return newstr;
}
//去掉前後空白 END

//檢驗字元數(obj=物件,maxlen=字元數限制) START
function charlen(obj,maxlen){
  var cnt=0;
  var str=trim(obj.value);

  for(var i=0;i<str.length;i++){
    if(escape(str.charAt(i)).length>=4)//中文算4個字元
      cnt+=4;
    else
      cnt+=1;
  }

  if(cnt>maxlen){
    return false;
  }
	
  return true;
}
//檢驗字元數(obj=物件,maxlen=字元數限制) END

//檢驗統一編號 START
function isInvoice(invoice){
  if(invoice.length<6 || invoice.length>8)//限制長度6~8碼
    return false;
  
  for(i=invoice.length;i<8;i++){
    invoice="0"+invoice;
  }

  var logic=new Array(8);//邏輯乘數
  logic[0]=1;
  logic[1]=2;
  logic[2]=1;
  logic[3]=2;
  logic[4]=1;
  logic[5]=2;
  logic[6]=4;
  logic[7]=1;

  var temp1=new Array(8);//乘積1
  var temp2=new Array(8);//乘積2
  for(i=0;i<8;i++){
    temp1[i]=0;
    temp2[i]=0;
  }

  for(i=0;i<8;i++){
    var logic_sum=0;//統一編號與邏輯乘數相乘之和
    logic_sum=logic[i]*parseInt(invoice.substr(i,1));
    if(logic_sum>=10){
      var tempstr=''+logic_sum;
      temp1[i]=parseInt(tempstr.substr(0,1));
      temp2[i]=parseInt(tempstr.substr(1,1));
    }else{
      temp1[i]=logic_sum;
    }
  }

  var sum1=new Array(8);
  var sum2=new Array(8);
  for(i=0;i<8;i++){
    sum1[i]=0;
    sum2[i]=0;
  }
  var j;
  for(i=0;i<8;i++){
    var sum_temp=0;
    sum_temp=temp1[i]+temp2[i];
    if(sum_temp>=10){
      var tempstr=''+sum_temp;
      sum1[i]=parseInt(tempstr.substr(0,1));
      sum2[i]=parseInt(tempstr.substr(1,1));
      j=i;
    }else{
      sum1[i]=sum_temp;
    }
  }

  var total1=0;
  var total2=0;
  for(i=0;i<8;i++){
    total1=total1+sum1[i];
    if(i != j)
      total2=total2+sum1[i];
    else
      total2=total2+sum2[i];
  }

  if((total1 % 10 ==0 && total1 != 0) || (total2 % 10 ==0 &&total2 != 0) )//是否能被10整除
    return true;
  else
    return false;
}
//檢驗統一編號 END

//檢驗是否為半形數字 START
function isNum(str1){
  var str2="1234567890";
  for(i=0 ; i< str1.length ; i++ ){
    if(str2.indexOf(str1.substring(i,i+1))==-1){
      return false;   //只要有一個字元不是半形數字就傳回false
    }
  }
  return true;
}
//檢驗是否為半形數字 END

//檢驗是否為半形英文或數字 START
function isNumEng(str1){
  var str2="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  for(i=0 ; i< str1.length ; i++ ){
    if(str2.indexOf(str1.substring(i,i+1))==-1){
      return false;   //只要有一個字元不是半形英文或數字就傳回false
    }
  }
  return true;
}
//檢驗是否為半形英文或數字 END

//檢驗是否為檔名(半形英數字或『_』,且長度不得超過30字元) START
function isFileName(str1){
  if(str1.length>30){
  	return false;   //只要長度超過30字元就傳回false
  }
  var str2="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_";
  var str3=str1.substr(0,str1.lastIndexOf("."));
  for(i=0 ; i< str3.length ; i++ ){
    if(str2.indexOf(str3.substring(i,i+1))==-1){
      return false;   //只要有一個字元不是半形英文或數字或_就傳回false
    }
  }
  return true;
}
//檢驗是否為檔名(半形英數字或『_』,且長度不得超過30字元) END

//檢驗URL格式 START
function checkURL(str){
  var data = str.match(/(http|ftp):\/\/.+/);
  if(!data || !str) return false;
    return true;
}
//檢驗URL格式 END

//檢查Email格式 START
function isEmailFormat(email){
  var data = email.match(/^[a-zA-Z0-9]+([\._-]+[a-zA-Z0-9]+)*@([a-zA-Z0-9]+([_-][a-zA-Z0-9]+)*)(\.([a-zA-Z0-9]+([_-][a-zA-Z0-9]+)*))+$/);
  if(!data || !email){
    return false;
  }else{
    return true;
  }
}
//檢查Email格式 END

//檢查電話格式 START
function isTel(tel){
  //var data = tel.match(/^\(([0-9]{2,3})\)$/);zip
  //var data = tel.match(/^([0-9]{3,4})\-([0-9]{4})$/);tel
  //var data = tel.match(/^(#[0-9]{0,5})$/);分機
  var data = tel.match(/^[0-9\-\(\)#]*$/);
  if(!data || !tel){
    return false;
  }else{
    return true;
  }
}
//檢查電話格式 END

//檢驗日期 START
function daynumber(whichyear,whichmonth){
  yeart=parseInt(whichyear,10);
  montht=parseInt(whichmonth,10);
  switch(montht){
    case 1:
      return 31;
    case 2:
      if((yeart%4)==0){
        if(((yeart%100)==0) && !((yeart%400==0))){
          return 28;
        }else{
          return 29;
        }
      }else{
        return 28;
      }
    case 3:
      return 31;
    case 4:
      return 30;
    case 5:
      return 31;
    case 6:
      return 30;
    case 7:
      return 31;
    case 8:
      return 31;
    case 9:
      return 30;
    case 10:
      return 31;
    case 11:
      return 30;
    case 12:
      return 31;
    default:
      return 0;
  }
}
//檢驗日期 END

//判斷字串是否大於指定的字數 START
function isOverMaxNumOfWord(string, maxNum, count) {
	var realNum = 0;
	for (var i=0; i<string.length; i++) {
		var codes=string.charCodeAt(i);
		if (codes<=127) {
			realNum ++;
		} else {
			realNum += count;
		}
	}
	return (realNum > maxNum)
}
//判斷字串是否大於指定的字數 END

//判斷字串是否有特殊字元 START
function isSpecialChar(str) {
	var special = /[!#$@*\'\<\>\\\|]+/;
	return special.test(str)
}
//判斷字串是否有特殊字元 END

//傳回去除前後半型空白的值 START
String.prototype.trimHalf=trimHalf;

function trimHalf() {
	return this.replace(/^\s+|\s+$/g, "");
}
//傳回去除前後半型空白的值 END

//傳回去除前後全型空白的值 START
function trimFull(str) {
	var s = 0;
	var e = str.length;
	if(str.charCodeAt(s) == 12288)
		s++;
	if(str.charCodeAt((e-1)) == 12288)
		e--;
	return str.substring(s, e);
}
//傳回去除前後全型空白的值 END

//傳回去除前後半全型空白的值 START
function trimHF(str) {
	var sp = /^\s+|\s+$/g;
	var s = 0;
	var e = str.length;
	do {
		//除前後半型空白
		str = str.trimHalf();
		//除前後半型空白
		str = trimFull(str);
	}
	while(str.charCodeAt(s) == 12288 || str.charCodeAt(e-1) == 12288 || sp.test(str))
	return str;
}
//傳回去除前後半全型空白的值 END