//==================================================
// 共用的 JavaScript 函數:
// * 計算Unicode字元數
// * 檢查字元數
// * 檢查字串是否大於指定的字數
// * 檢查字串是否有特殊字元
// * 檢查是否為半形數字
// * 檢查是否為半形英文或數字
// * 檢查是否為單位管理者帳號格式
// * 檢查是否為單位管理者密碼格式
// * 檢查是否為統編格式
// * 檢查是否為檔名格式
// * 檢查是否為URL格式
// * 檢查是否為Email格式
// * 檢查是否為電話格式
// * 檢查當月日數
// * 去除前後空白
// * 去除前後半型空白
// * 去除前後全型空白
// * 去除前後半全型空白
// * 設定Cookie
// * 取得Cookie
//==================================================

//計算Unicode字元數 START
String.prototype.len=function()
{ return this.replace(/[^\x00-\xff]/g,"rrr").length; }
//計算Unicode字元數 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 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
function isNum(str){
  var data=str.match(/^[0-9]+$/);
  if(!data || !str){
    return false;
  }else{
    return true;
  }
}
//檢查是否為半形數字 END

//檢查是否為半形英文或數字 START
function isNumEng(str){
  var data=str.match(/^[a-zA-Z0-9]+$/);
  if(!data || !str){
    return false;
  }else{
    return true;
  }
}
//檢查是否為半形英文或數字 END

//檢查是否為單位管理者帳號格式 START
function isMgrUid(str){
  var data=str.match(/^[0-9a-zA-Z][0-9a-zA-Z@._-]{3,19}$/);
  if(!data || !str){
    return false;
  }else{
    return true;
  }
}
//檢查是否為單位管理者帳號格式 END

//檢查是否為單位管理者密碼格式 START
function isMgrPwd(str){
  var data=str.match(/^[0-9a-zA-Z][0-9a-zA-Z@._-]{4,19}$/);
  if(!data || !str){
    return false;
  }else{
    return true;
  }
}
//檢查是否為密碼格式 END

//檢查是否為統編格式 START
function isInvoice(invoice){
  var data=invoice.match(/^[0-9]{3,8}$/);
  if(!data || !invoice){
    return false;
  }else{
    return true;
  }
/*
  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

//檢查是否為檔名格式(半形英數字或『_』,且長度不得超過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;
  }else{
    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 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

//去除前後半型空白 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

//設定Cookie START
function setCookie(c_name,value,expiredays){
  var exdate=new Date();
  exdate.setDate(expiredays);
  document.cookie=c_name+"="+escape(value)+((expiredays==null)?"":";expires="+exdate.toUTCString());
}
//設定Cookie END

//取得Cookie START
function getCookie(c_name){
  if(document.cookie.length>0){
    c_start=document.cookie.indexOf(c_name+"=");
    if(c_start!=-1){
      c_start=c_start+c_name.length+1;
      c_end=document.cookie.indexOf(";",c_start);
      if (c_end==-1)c_end=document.cookie.length;
      return unescape(document.cookie.substring(c_start,c_end));
    }
  }
  return null;
}
//取得Cookie END
