  var timerID = null;
  var clientPC = navigator.userAgent.toLowerCase(); // Get client info
  var clientVer = parseInt(navigator.appVersion); // Get browser version
  var is_ie = ((clientPC.indexOf("msie") != -1) && (clientPC.indexOf("opera") == -1));
  var is_nav = ((clientPC.indexOf('mozilla')!=-1) && (clientPC.indexOf('spoofer')==-1)
      && (clientPC.indexOf('compatible') == -1) && (clientPC.indexOf('opera')==-1)
      && (clientPC.indexOf('webtv')==-1) && (clientPC.indexOf('hotjava')==-1));
  var is_win = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1));
  
  var dialog = null;
  var s_dialog = null;
  var sim_dialog = null;

  var maxChars = 200; // 回應字限
  var msg = new Object();
  msg["post"] = "發表回應";
  msg["remaining"] = "剩餘的字元數：";
  msg["discard"] = "取消";
  msg["exceeded"] = "字元數超過限制：";
  msg["add"] = "正在新增,請稍後...";
  msg["show_comment"] = "讀取回應中,請稍後...";
  msg["empty"] = "您必須輸入回應！";
  msg["toolong"] = "您的回應必須少於 "+maxChars+" 個字元！";
  msg["msg_comment"] = "回應數最多10筆！";


  function mozWrap(txtarea, text)
  {
    var selLength = txtarea.textLength;
    var selStart = txtarea.selectionStart;
    var selEnd = txtarea.selectionEnd;
    if (selEnd == 1 || selEnd == 2)
      selEnd = selLength;

    var s1 = (txtarea.value).substring(0,selStart);
    var s2 = (txtarea.value).substring(selStart, selEnd)
    var s3 = (txtarea.value).substring(selEnd, selLength);
    txtarea.value = s1 + s2 + text + s3;
    return;
  }

  function send_textarea(text, txtarea) {
    if ((clientVer >= 4) && is_ie && is_win) {
       if (txtarea.createTextRange && txtarea.caretPos) {
         var caretPos = txtarea.caretPos;
         caretPos.text =
           caretPos.text.charAt(caretPos.text.length - 1) == ' ' ?
             text + ' ' : text;
       }
       else
         txtarea.value += text;
       return;
    }
    else 
    {
      mozWrap(txtarea, text);
      return;
    }
    store_text(txtarea);
  }

  function store_text(text_obj) {
    if (text_obj.createTextRange)
      text_obj.caretPos = document.selection.createRange().duplicate();
  }

  function parse_taglist(txtarea, tag_elmt) {
    //clean tag list
    var tag_list = document.getElementById(tag_elmt);
    if(tag_list != null) {
      for(var i=0;i<tag_list.childNodes.length;i++) {
        if(tag_list.childNodes[i].style != null){
          tag_list.childNodes[i].style.background = "";
          var cld_node = tag_list.childNodes[i].firstChild;
          if(cld_node.style != null) cld_node.style.color = "#006699";
        }
      }
    }

    var o = document.getElementById(txtarea);
    var text = o.value;
    var text_array = text.split(",");
    for(i=0;i<text_array.length;i++) {
      if(text_array[i].length == 0)  continue;
      var div_elmt = document.getElementById(text_array[i]);
      if(div_elmt != null) {
        div_elmt.style.background = "#007EBD";
        //div_elmt.style.color = "#FFFFFF";
        var cld_node = div_elmt.firstChild;
        cld_node.style.color = "#FFFFFF";
      }
      //計算字數
      var str_num = text_array[i].length;
      if( str_num>15) {
	var alert_str= "單一標籤字數上限為15字，請縮短您所設定的標籤內容。";
	alert("\""+text_array[i]+"\"\n " + alert_str);
      }
      //計算字數

    }
  }

  function updateCharCount(charCount_id, label_id, textArea, d_maxChar) {

    if(d_maxChar > 0) maxChars = d_maxChar;

    if(textArea.value.length>maxChars){
      if(document.getElementById(label_id).innerHTML!=msg["exceeded"]){
        document.getElementById(label_id).innerHTML = msg["exceeded"];
        document.getElementById(label_id).style.color = "#FE2020";
      }
      //document.getElementById(charCount_id).value = textArea.value.length-maxChars;
      document.getElementById(charCount_id).innerHTML = textArea.value.length-maxChars;
    }else{
      if(document.getElementById(label_id).innerHTML!=msg["remaining"]){
        document.getElementById(label_id).innerHTML =msg["remaining"];
        document.getElementById(label_id).style.color = "#414141";
      }
      //document.getElementById(charCount_id).value = maxChars-(textArea.value.length);
      document.getElementById(charCount_id).innerHTML = maxChars-(textArea.value.length);
    }
  }

  function check_txtarea(txtarea,num,form) {
    var elmt = document.getElementById(txtarea);

    var re = /^\s{1,}$/g; //match any white space including space, tab, form-feed, etc.
    //幫它清光,不寫入值
    if (elmt.value.length==0 || elmt.value==null || ((elmt.value.search(re)) > -1)){
      document.getElementById(txtarea).value='';
    }
    if(elmt.value.length > num) {
      alert(msg["exceeded"]);
      return false;
    }
    return true;
  }

  function show_div(div_id) {
    document.getElementById(div_id).style.display = "block";
  }

  function hide_div(div_id) {
    document.getElementById(div_id).style.display = "none";
  }
/*
  function set_review_recomm(review_id,score) {
    var connectSuccess = function(o) {
      var result = eval("(" + o.responseText + ")");
      var win_width = 300;
      if(!result.param_check) yui_alert(win_width,"資料有誤, 請重新載入網頁後再試");
      else if(!result.login_status) {
        if(ap == "WEB") {
          web_login(location.pathname);
        }
      }
      else if(result.is_rated) {
        yui_alert(win_width,"您已經發表過評分囉，謝謝您。");
      }
      else if(!result.is_success) {
        yui_alert(win_width,"資料寫入失敗，請重試，若情節嚴重請洽管理員");
      }
      else {
        yui_alert(win_width,"此專輯已經收到您的評分，謝謝您！");
        document.getElementById('total_recomm_'+review_id).innerHTML = result.total_rate;
        document.getElementById('recomm_'+review_id).innerHTML = result.rate_good;
      }
    };

    var sUrl = "ajax/set_review_recomm.php";
    var getData = "review_id="+review_id+"&rate="+score;

    yui_ajax('GET',sUrl,getData,connectSuccess);
  }
 */
function ajax_connect(url,method,pars,show_out){
  var container = { success: show_out };
  var options = {
method: method,
	parameters: pars,
	evalScripts: true
  };

  obj = new Ajax.Updater(
      container,
      url,
      options
      );
  return obj;
}
var path_ajax_recomm = 'ajax/set_review_recomm.php'; //推或噓動作
var div_parse_msg = "js_msg";
function set_review_recomm(review_id,rate) {
  var div_id = div_parse_msg;
  var pars ="review_id="+review_id+ "&rate=" + rate;
  var SuccessFn = function(o) {
    $("#js_msg").html(o);
  };
  jquery_ajax('GET',path_ajax_recomm,pars,SuccessFn);
}
function add_recomm_num(rid,v){
  var div_id = "recomm_"+rid; // recom
  var div_id_all = "total_recomm_"+rid; //total
  if(div_id && div_id_all){
    var total = document.getElementById(div_id_all).innerHTML;
    document.getElementById(div_id_all).innerHTML = parseInt(total)+1;
    if(v>0){
      var num = document.getElementById(div_id).innerHTML;
      document.getElementById(div_id).innerHTML = parseInt(num)+v;
    }
  }
}
  function get_comments_mybox(review_id, force_close, offset, num) {
    if( document.getElementById('comment_'+review_id).style.display == "block" && force_close == 1) {
      document.getElementById('comment_'+review_id).style.display = "none";
      document.getElementById('comment_show_'+review_id).src = "img/comment_show.gif";
      return false;
    }

    var connectSuccess = function(o) {
      document.getElementById('comment_'+review_id).innerHTML = o;
      document.getElementById('comment_'+review_id).style.display = "block";

      //run javascript
      var js = o.replace(/[\w\W]*\<script\>/i,"").replace(/\<\/script\>/i,"");
      eval(js);
    };

    var sUrl = "/ajax/get_comments.php";
    var postData = "review_id="+review_id+"&tpl_type=mybox";
    if (offset && num)
      postData = "review_id="+review_id+"&tpl_type=mybox&offset="+offset+"&num="+num;

    jquery_ajax('POST',sUrl,postData,connectSuccess);  
    
    // 顯示+/-
    document.getElementById('comment_show_'+review_id).src = "img/comment_hide.gif";
  }

function add_comment(review_id) {
  var comment = document.getElementById('newcomment_'+review_id);
  var comment_num = document.getElementById('comment_num_'+review_id).innerHTML;
  comment_num = parseInt(comment_num);

  if(comment_num >=10){
    alert(msg["msg_comment"]);

  }else{

    var re = /^\s{1,}$/g; //match any white space including space, tab, form-feed, etc.

    if (comment.value.length==0||comment.value==null || ((comment.value.search(re)) > -1)){
      alert(msg["empty"]);
      document.getElementById('button').disabled = false;
      return false;
    }
    if(comment.value.length>maxChars)
    {
      alert(msg["toolong"]);
      document.getElementById('button').disabled = false;
      return false;
    }


    var connectSuccess = function(o) {
      document.getElementById('newcomment_'+review_id).value = "";
      document.getElementById('addcomment_'+review_id).style.display = "none";
      //get_comments_mybox(review_id,0);
      alert("新增成功！");
      get_comments_mybox(review_id, 2, 0, 10);
      // document.location.reload();
    }

    var sUrl = "/ajax/add_review_comment.php";
    var postData = "review_id="+review_id+"&comment="+comment.value;

    jquery_ajax('POST',sUrl,postData,connectSuccess);
  }
}

  function update_comment_num(review_id,num) {
    document.getElementById('comment_num_'+review_id).innerHTML = num;
  }

  function jquery_dialog(win_width, dia_div, title_div, submitFn, cancelFn)
  {
    var handleSubmit = function(o) 
    {
      try{ submitFn(); } catch(e) {};
      $("#"+dia_div).dialog('close');
    };

    var handleCancel = function(o) 
    {
      try{ cancelFn(); } catch(e) {};
      $("#"+dia_div).dialog('close');
    };

    if(s_dialog == null)
    {
      document.getElementById(dia_div).style.display = "block";
      
      $("#"+dia_div).dialog({
	width: win_width+"px", modal: true, resizable: false, title: title_div,
	buttons: {
	  "暫不評分": handleCancel
	}
      });

      s_dialog = $("#"+dia_div);
    }
    else
      $("#"+dia_div).dialog('open');
  }

  function yui_dialog(win_width,dia_div,submitFn,cancelFn) {
    if(dialog==null){
      dialog = new YAHOO.util.YUILoader({
		  require:['element','button','dragdrop','container'],
		  base: 'http://i.eimg.com.tw/s/yui/2.5.2/build/',
		  //base: '/contrib/yui/build/',
		  onSuccess: function(o) {
		    var handleSubmit = function(o) {
		      try{ submitFn(); } catch(e) {};
		      this.hide();
		    };
		    var handleCancel = function(o) {
		      try{ cancelFn(); } catch(e) {};
		      this.hide();
		    };
		    document.getElementById(dia_div).style.display = "block";
		    //alert(document.getElementById(dia_div).innerHTML);
		    document.body.className = "yui-skin-sam";

		    if(s_dialog==null){
		      s_dialog = new YAHOO.widget.Dialog(dia_div,
				       { width : win_width+"px",modal: true,fixedcenter : true,visible : false,
					 constraintoviewport : true,
					 buttons : [ { text:"送出", handler:handleSubmit, isDefault:true },
						     { text:"取消", handler:handleCancel } ]
		      });
		      s_dialog.render();
		      s_dialog.show();
		    }else{
		      s_dialog.show();
		    }
		  },
		  onFailure: function(o) {
		  }
		});
	dialog.insert();
      }
      else{
	s_dialog.show();
      }
  }

  function jquery_alert(win_width, win_text, clickFn)
  {
    var handleYes = function(o) {
      try 
      {
	clickFn();
      } 
      catch(e) {}; //可以不傳function!
      $("#sim_dialog").dialog('close');
    };

    if(sim_dialog == null) 
    {
      $("<div id='sim_dialog'></div>").dialog({
	width: win_width+"px", draggable: false, modal: true, title: "訊息", resizable: false,
	buttons: {"Yes": handleYes}
      });

      $("#sim_dialog").html(win_text);

      sim_dialog = $("#sim_dialog");
    }
    else
    {
      $("#sim_dialog").html(win_text);
      sim_dialog = $("#sim_dialog");
      $("#sim_dialog").dialog('open');
    }
  }

  function yui_alert(win_width,win_text,clickFn) {
    var alert_dialog = new YAHOO.util.YUILoader({
                require:['element','button','dragdrop','container'],
                base: 'http://i.eimg.com.tw/s/yui/2.5.2/build/',
		//base: '/contrib/yui/build/',
                onSuccess: function(o) {
                  var handleYes = function(o) {
                    try {
                      clickFn();
                    } catch(e) {}; //可以不傳function!
                    this.hide();
                  }
                  document.body.className = " yui-skin-sam";
                  var sim_dialog = new YAHOO.widget.SimpleDialog("sim_dialog",
                                     { width: win_width+"px",fixedcenter: true,visible: false,draggable: false,close: false,
                                       text: win_text,constraintoviewport: true,modal: true,
                                       buttons: [ { text:"Yes", handler:handleYes, isDefault:true } ]}
                                   );
                  sim_dialog.render(document.body);
                  sim_dialog.show();
                },
                onFailure: function(o) {
                }
              });
    alert_dialog.insert();

  }

  function jquery_ajax(method, url, data, SuccessFn)
  {
    var connectSuccess = function(o)
    {
      SuccessFn(o);
    };

    var connectFailure = function()
    {
      alert("連線失敗！請稍後再試。");	
    };

    var sUrl = url;
    var con_data = data;
    if(method == "GET") sUrl += "?"+con_data;
    $.ajax({
      type: method,
      url: sUrl,
      success: connectSuccess,
      error: connectFailure,
      data: con_data
    });
  }

  function yui_ajax(method,url,data,SuccessFn) {
    var connect = new YAHOO.util.YUILoader({
                    require:['yahoo','event','connection','yahoo-dom-event'],
                    base: 'http://i.eimg.com.tw/s/yui/2.5.2/build/',
		    //base: '/contrib/yui/build/',
                    onSuccess: function(o) {
                      var connectSuccess = function(o) {
                        SuccessFn(o);
                      };

                      var connectFailure = function() {
                        alert("連線失敗！請稍後再試。");
                      };

                      var callback = {
                        success:connectSuccess,
                        failure:connectFailure,
                        argument:['like']
                      };

                      var sUrl = url;
                      var con_data = data;
                      if(method == "GET") sUrl += "?"+con_data;
                      var request = YAHOO.util.Connect.asyncRequest(method, sUrl, callback, con_data);
                    },
                    onFailure: function(o) {
                    }
                  });
      connect.insert(); 
  }

  function yui_ajax_form(formId,method,action,SuccessFn) {
    var connect = new YAHOO.util.YUILoader({
                    require:['event','connection','yahoo-dom-event'],
                    base: 'http://i.eimg.com.tw/s/yui/2.5.2/build/',
		    //base: '/contrib/yui/build/',
                    onSuccess: function(o) {
                      var connectSuccess = function(o) {
                        SuccessFn(o);
                      };

                      var connectFailure = function() {
                        alert("連線失敗, 請稍後再試!");
                      };

                      var callback = {
                        success:connectSuccess,
                        failure:connectFailure,
                        argument:['like']
                      };

                      var formObject = document.getElementById(formId);
                      YAHOO.util.Connect.setForm(formObject);
                      var cObj = YAHOO.util.Connect.asyncRequest(method, action, callback);  
                    },
                    onFailure: function(o) {
                    }
                  });
      connect.insert();
  }
