var ext = {
  //睡眠, 畫面停頓不動(毫秒, 1000 ms = 1 sec.)
  "sleep" : function (ms){
    var date = new Date();
        date.setTime(date.getTime() + ms);
    while(new Date().getTime() < date.getTime());
  },
  //檢查字串是否為空
  "empty" : function (str){
    var turn = (str == null || str == false || str.length == 0 || str == "undefined")? true : false;
    return turn;
  },
  //鎖定 button 為不可動作
  "button_lock" : function (butn, is){
    button = document.getElementById(butn).disabled = true;
    return true;
  },
  //解鎖 button
  "button_unlock" : function (butn){
    button = document.getElementById(butn).disabled = false;
    return true;
  },
  //隱藏 button
  "button_hidden" : function (butn){
    document.getElementById(butn).style.display = "none";
    return true;
  },
  //顯示 button
  "button_show" : function (butn){
    document.getElementById(butn).style.display = "";
    return true;
  },
  //指定全選範圍(自訂型態), input_value is array
  "chkall_appoint" : function (input_name, input_value, input_type, input_chk){ 
    var input = document.getElementsByName(input_name);
    if(typeof input_value == "string") var input_value = input_value.split(",");
    for(var i=0; i<input.length; i++){
      if(input[i].type == input_type){
        var chk = in_array(input[i].value, input_value); // 比對是否有此範圍的數值存在
        if(chk == true) input[i].checked = input_chk;
      }
    }
  },
  //月份/日數, 填滿補零
  "zeroFull" : function (md){ 
    return (md < 10)? "0" + md : md;
  },
  //數字禮拜轉英文禮拜
  "week_toeng" : function (w){ 
    switch(w){
      case 1:  w = "Mon"; break;
      case 2:  w = "Tue"; break;
      case 3:  w = "Wed"; break;
      case 4:  w = "Thu"; break;
      case 5:  w = "Fri"; break;
      case 6:  w = "Sat"; break;
      default: w = "Sun";
    }
    return w;
  },
  //檢查指定屬性名稱(name)的標籤裡，是否有被勾選或有值(可檢查與合併使用 checkbox 與 input 的區域)
  "is_name_hasValue" : function (obj_name){ 
    var obj = document.getElementsByName(obj_name);
    for(i=0; i<obj.length; i++){
      if(obj[i].type == "checkbox" && obj[i].checked == true) return true; 
      else if(obj[i].type == "text" && obj[i].value != false && obj[i].value != "") return true;
      else continue;
    }
    return false;
  },
  //檢查 checkbox 是否有被勾選
  "is_checkbox_checked" : function (obj_name){ 
    var obj = document.getElementsByName(obj_name);
    for(i=0; i<obj.length; i++) if(obj[i].type == "checkbox" && obj[i].checked == true) return true; 
    return false;
  },
  //檢查 radio 是否有被勾選
  "is_radio_checked" : function (obj_name){ 
    var obj = document.getElementsByName(obj_name);
    for(i=0; i<obj.length; i++) if(obj[i].checked == true) return true;
    return false;
  },
  //取得 radio 的值
  "get_radio_val" : function (obj_name){ 
    var obj = document.getElementsByName(obj_name);
    for(i=0; i<obj.length; i++) if(obj[i].checked == true) return obj[i].value;
    return false;
  },
  //檢查 form 裡的任一個 checkbox 是否有被選勾選
  "form_anyCheckbox_checked" : function (obj_form){ 
    var elem = obj_form.elements;
    var leng = elem.length;
    for(var i=0; i<leng; i++){    
        if(elem[i].type === "checkbox" && elem[i].checked === true) return true;
        else continue;
    }
    return false;
  },
  //檢查 checkbox 是否被勾選，如有則打開指定的 button，無則關閉，可傳入陣列一次檢查多個對象
  "clickchkbox_show_button" : function (chkbox_name, btn, css){ 
    var type = typeof(chkbox_name), is_checked;
    var obj = document.getElementById(btn);
    if(type === "object"){
      for(j=0; j<chkbox_name.length; j++){
        is_checked = js_is_checkbox_checked(chkbox_name[j]);
        if(is_checked){
          obj.className = css;
          return is_checked;
        }else{
          if(j === chkbox_name.length - 1) obj.className = "hidden";
          else continue;
        }
      }
    }else{
      is_checked = js_is_checkbox_checked(chkbox_name);
      (is_checked)? obj.className = css : obj.className = "hidden";
      return is_checked;
    }
    /*.hidden{ display: none; }
      .show{ visibility: show;}*/
  },
  //取得 checkbox 的值，並弄成 Ajax POST 格式
  "post_chkbox" : function (name){ 
    var elem = document.getElementsByName(name);
    var leng = elem.length;
    var url = "", url_str = "", j = 0;
    for(var i=0; i<leng; i++){
      if(elem[i].type == "checkbox" && elem[i].checked == true){
        (j == 0)? url_str = name + "=" + elem[i].value : url_str += "&" + name + "=" + elem[i].value;
        j++;
      }else continue;
    }
    return url_str;
  },
  //取得 select 的值，並弄成 Ajax POST 格式
  "post_select" : function (obj){ 
    var str = (obj.value != "")? obj.name + "=" + obj.value : false;
    return str;    
  },
  //Get the Form All Values for Ajax Post Method
  "post_form_all" : function (form){ 
    var elem = form.elements;
    var leng = elem.length;
    var url = "", url_val = "", j = 0;
    for(var i=0; i<leng; i++){
      if(elem[i].type != "button" && elem[i].type != "reset" && elem[i].type != "submit"){
        if(elem[i].type == "checkbox" || elem[i].type == "radio") if(elem[i].checked == false) continue;
        url = elem[i].name + "=" + elem[i].value;
        url = (j == 0)? url : "&" + url;
        url_val += url;
        j++;
      }
    }
    return url_val;
  },
  //checkbox 全選/全取消
  "chkbox_chkall" : function (chkbox_id, chkbox_name){
    var input = document.getElementsByTagName("input");
    var input_length = input.length;  
    var chkall = document.getElementById(chkbox_id);
    if(chkall.checked == true){
      for(i=0; i<input_length; i++){
        if(input[i].type == "checkbox" && input[i].name == chkbox_name) input[i].checked = true; //全選
      }
    }else{
      for(i=0; i<input_length; i++){
        if(input[i].type == "checkbox" && input[i].name == chkbox_name) input[i].checked = false; //取消全選
      }    
    }
  },
  //檢查 e-mail 格式
  "check_email" : function (email){
    if (email == "" || email == false) return false;
    chEmail = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
    return chEmail.test(email);
  },
  //取得物件 #id, 取 id obj; .id, 取 name obj; id, 取 tag name obj
  "getObj" : function (id){
    var first = id.charAt(0);
    var str_arr = id.split(first);
    if(first == "#") return document.getElementById(str_arr[1]); //回傳 id obj (#user_name)
    else if(first == ".") return document.getElementsByName(str_arr[1]); //回傳 name obj (array) (.user_name)
    else return document.getElementsByTagName(str_arr[1]); //回傳 tag name obj (array) (@user_name)
  },
  //取得編輯器的值
  "getFCKValue" : function (id){
     //記得先將 HTML 特殊符號 &nbsp; &quot; 等改成 %20 %23 等的 URL 可接受編碼符號
     //如此可以避免使用 ajax 在傳遞變數時，誤將 "&" 視為 "參數鍊"
     //在編輯器尚未載入完畢前, 是無法使用 API 操作 Fckeditor 的
     //取得 FCKeditor 物件
     var oEditor  = FCKeditorAPI.GetInstance(id);
     //取得 FCKeditor 的值, 並進行 URL 編碼, 後端 PHP 可用 urldecode() 解碼
     var acontent = urlencode( oEditor.GetXHTML() );
         //var acontent = acontent.replace(/^&[a-z A-Z]/i, '');
         //acontent = base64_encode(acontent);
         //acontent = this.utf8RawUrlEncode(acontent);
     return acontent;
  },
  //清空編輯器
  "clearFCKValue" : function (id){
     //在編輯器尚未載入完畢前, 是無法使用 API 操作 Fckeditor 的
     var oEditor  = FCKeditorAPI.GetInstance(id); 
     //清空 FCKeditor
     oEditor.EditorDocument.body.innerHTML = ""; 
     return true;
  },
  //將值插入編輯器
  "insertFCKValue" : function (id, val){
     //在編輯器尚未載入完畢前, 是無法使用 API 操作 Fckeditor 的
     var oEditor  = FCKeditorAPI.GetInstance(id); 
     //將值插入 FCKeditor
     oEditor.EditorDocument.body.innerHTML = val; 
     return true;    
  },
  //檢查 Y2K 時間問題
  "y2k" : function (number){ 
    return (number<1000) ? number+1900 : number;
  },
  //檢查日期是否存在
  "checkDateExist" : function (day, month, year){ 
    var today = new Date();
    year = ( (!year) ? this.y2k(today.getYear()) : year );
    month = ( (!month) ? today.getMonth() : month-1 );
    if(!day) return false;
    var test = new Date(year,month,day);
    if( this.y2k(test.getYear()) == year && month == test.getMonth() && (day == test.getDate()) ) return true;
    else return false;
  },
  //檢查日期格式
  "checkDate" : function (id, cdate){ 
    var datePattern = /^\d{4}\-(0[1-9]|1[0-2])\-(3[0-1]|[0-2][0-9])$/; // 4位數 - 01 ~ 12 - 30, 31 ~ 00 ~ 29, YYYY-MM-DD
        cdate = (!cdate)? $("#" + id).val() : cdate;
    if( cdate.match(datePattern) ){
        if( this.checkDateExist(cdate.substring(8, 10), cdate.substring(5, 7), cdate.substring(0, 4)) == true ){
        //alert("輸入日期正確！");
        $("#error").html("輸入的日期正確！");
        return true;
       }else{
        $("#error").html("輸入的日期是不存在的唷！");
        $("#" + id).focus();
       }
    }else{
      $("#error").html("日期格式錯誤，請依照 2005-12-25 的格式輸入");
      $("#" + id).focus();
    }
    return false;
  },
  //UTF-8 URL Encode (編碼)
  "utf8RawUrlEncode" : function (str) {
    len = str.length;
    res = new String();
    charOrd = new Number();
    for (i = 0; i < len; i++) {
        charOrd = str.charCodeAt(i);
        if ((charOrd >= 65 && charOrd <= 90)   || 
            (charOrd >= 97 && charOrd <= 122)  || 
            (charOrd >= 48 && charOrd <= 57)   || 
            (charOrd == 33) || (charOrd == 36) || (charOrd == 95)) {
            // this is alphanumeric or $-_.+!*'(), which according to RFC1738 we don't escape
            res += str.charAt(i);
        }else {
            res += '%';
            if (charOrd > 255) res += 'u';
            hexValStr = charOrd.toString(16);
            if ((hexValStr.length) % 2 == 1) hexValStr = '0' + hexValStr;
            res += hexValStr;
        }
    }
    return res;
  },
  //去除反斜線
  "dropAgainstSlant" : function (str){
    return str.replace(/\\/g, '');
  },
  //結合 2 個對應的陣列成有索引的 object 陣列
  "toObjArray" : function (keyArray, valueArray){
    var objArray = new Object();
    for(i in keyArray) objArray[ keyArray[i] ] = valueArray[i];
    return objArray;
  }
}

//jQuery 取得瀏覽器視窗高度
function getBrowserHeight() {
  if($.browser.msie)
      return (document.compatMode == "CSS1Compat") ? document.documentElement.clientHeight : document.body.clientHeight;
  else return self.innerHeight;
}
 
//jQuery 取得瀏覽器視窗寬度
function getBrowserWidth() {
    if($.browser.msie)
        return (document.compatMode == "CSS1Compat") ? document.documentElement.clientWidth : document.body.clientWidth;
    else return self.innerWidth;
}

//jQuery 取得瀏覽器類型
function getBrowser(){
  return ($.browser.msie)? "IE" : "FF";
}

//jQuery 取得當前文件(Body, 外層 Div)高度
function getDocumentHeight(){
  return $(document).height();
}

//jQuery 取得當前文件(Body, 外層 Div)寬度
function getDocumentWidth(){
  return $(document).width();
}

//jQuery 取得 Window 高度
function getWindowHeight(){
  return $(window).height();
}

//jQuery 取得 Window 寬度
function getWindowWidth(){
  return $(window).width();
}

