var ARIAboardComment = Class.create({
  /* Common */
  initialize: function(oTG, oOPT){
    this.TG = oTG;
    this.OPT = oOPT;
    
    this.pageNo = 1;
    this.pageCount = 0;
    this.nextActive = true;
    this.processStat = false;
    this.pgwidth = this.TG.getWidth();
    this.makeHeader();
  },
  /* Common */
  /* Event */
  onResize: function(){

  },
  onmouseover: function(event){
    var TGID = this.TG.id;
    
  },
  onmouseout: function(event){
    var TGID = this.TG.id;

  },
  onmousedown: function(event){
    var TGID = this.TG.id;
    
  },
  onmouseup: function(event){
    var TGID = this.TG.id;

  },
  onmousemove: function(event){
    var TGID = this.TG.id;
    
  },
  onclick: function(event){
    var TGID = this.TG.id;
    var EL = Event.element(event);
    if(EL.id == TGID+"#btn"){
      //댓글 등록 시작 
      this.addComment();
    }else if(EL.id == TGID+"#reload"){
      //댓글 목록 새로고침
      this.listLoad();
    }
  },
  listOnclick: function(event){
    var TGID = this.TG.id;
    var EL = Event.findElement(event, "IMG");
    if(EL){
      var ELact = ARIA.findID(EL.id, "act");
      var seq  = ARIA.findID(EL.id, "seq");
      if(ELact == "DEL"){
         this.delComment(seq);
      }else if(ELact == "ADD"){
         this.reComment(seq);
      }
    }else{
      var ELA = Event.findElement(event, "A");
      if(ELA){
        if(ELA.id == TGID+"#rebtn"){
          this.reCommentFn();
        }else if(ELA.id == TGID+"#rebtnCancle"){
          if($(TGID+"#reform")) $(TGID+"#reform").remove();
        }
      }
    }
  },
  ondblclick: function(event){
    var TGID = this.TG.id;

  },
  oncontextmenu: function(event){

  },
  onchange: function(event){

  },
  onKeyPress: function(event){
    switch(event.keyCode){
      case Event.KEY_TAB:
      case Event.KEY_RETURN:
      case Event.KEY_ESC:
        Event.stop(event);
        break;
      case Event.KEY_LEFT:
      case Event.KEY_RIGHT:
      case Event.KEY_UP:
      case Event.KEY_DOWN:
      default:
    }
  },
  logincheck: function(event){
    if(this.OPT.memberNo == "")
    if(this.OPT.loginFn) this.OPT.loginFn();
  },
  /* Event */
  /* Method */
  ProcessIng: function(signal){
    var TGID = this.TG.id;
    if(signal){
      $(TGID+"#temploading").show();
      this.processStat = false;
    }else{
      var goProcessStat = this.setProcessStat.bind(this);
      new PeriodicalExecuter(function(pe) {
        $(TGID+"#temploading").hide();
        goProcessStat();
        pe.stop();
      }, 0.5);
    }
  },
  setProcessStat: function(){
    this.processStat = true;
  },
  openQuickMenu: function(seq){
    this.QuickMenuSeq = seq;
    
  },
  closeQuickMenu: function(){

  },
  /* Method */
  /* Header */
  makeHeader: function(){
  	var TGID = this.TG.id;
    var p_out = [];
    
    p_out.push("<div class=\"boardCommentTitle\" id=\""+TGID+"#title\">");
    p_out.push("<img src=\"/_img/com/comments.gif\" align=\"middle\" alt=\"\">댓글 <span id=\""+TGID+"#tots\" style=\"color:#994D00;\"></span> ");
    p_out.push("<a href=\"javascript:;\" class=\"reload\" title=\"새로고침\" id=\""+TGID+"#reload\">새로고침</a>");
    p_out.push("<div class=\"boardCommentBoxloader\" id=\""+TGID+"#temploading\" align=\"center\"><img src=\"/_img/aria/loading_circle.gif\" align=\"middle\" /></div>");
    p_out.push("</div>");    
    
    
    p_out.push("<div class=\"boardCommentBox\" id=\""+TGID+"#container\"></div>");    
    p_out.push("<div class=\"boardCommentForm\" id=\""+TGID+"#form\">");
    p_out.push("<table width=\"100%\" cellspacing=\"0\">");
    p_out.push("<col /><col width=\"50\" />");
    p_out.push("<tbody>");
    p_out.push("  <tr>");
    p_out.push("    <td><textarea name=\"content\" id=\""+TGID+"#content\" style=\"width:100%;overflow:auto;\" rows=\"3\"></textarea></td>");
    p_out.push("    <td align=\"center\"><span class=\"BT45_50\"><a href=\"javascript:;\" title=\"댓글달기\" id=\""+TGID+"#btn\">댓글</a></span></td>");
    p_out.push("  </tr>");
    p_out.push("</tbody>");
    p_out.push("</table>");
    p_out.push("</div>");

    this.TG.update(p_out.join(''));
    this.listLoad();
    Event.observe($(TGID+"#content"), "focus", this.logincheck.bindAsEventListener(this));
    Event.observe($(TGID+"#btn"), "click", this.onclick.bindAsEventListener(this));
    Event.observe($(TGID+"#reload"), "click", this.onclick.bindAsEventListener(this));
    Event.observe($(TGID+"#container"), "click", this.listOnclick.bindAsEventListener(this));
  },
  /* Header */
  /* List */
  listLoad: function(){
    var TGID = this.TG.id;
    this.TG.scrollTop = 0;
    this.ProcessIng(true);

    var url = this.OPT.load;

    if(!url){
      alert("Not Found Url."); 
      return;
    }
    
    if(this.OPT.pars != "")
    var pars = this.OPT.pars+"&pageNo="+this.pageNo+"&dummy="+ARIA.nTime();
    else
    var pars = "pageNo="+this.pageNo+"&dummy="+ARIA.nTime();
    
    if(this.OPT.urlTest){
      alert(url+"?"+pars);
    }
    
    var CompleateAC = this.listLoadOK.bind(this);
    var reportErrorAC = this.ajaxReportError.bind(this);
    var myAjax = new Ajax.Request(
    url,
    {
     method: 'post',
     parameters: pars,
     onComplete: CompleateAC,
     onFailure: reportErrorAC
    });
  },
  listLoadOK: function(req){
    var TGID          = this.TG.id;
    var width         = this.pgwidth;
    var contentWidth  = width - 169;
    var memberNo      = this.OPT.memberNo;
    var adminCD       = this.OPT.adminCD;
    var rowNum        = this.rowNum;
    var pars          = this.OPT.Pars;
    this.ProcessIng(false);
    var RES = req.responseText.toOBJ();
    var p_out = [];
    var DatasLength = RES.Datas.length;
    p_out.push("<div class=\"commentListBox\">");
    RES.Datas.each(function(n, index){
    if(n[4] > 0)
    var leftmargin = (n[4]*20);
    else
    var leftmargin = 0;
    
    p_out.push("<div id=\""+TGID+"CB_"+n[2]+"\">");
    if(index > 0 && leftmargin == 0)
    p_out.push("<div class=\"line\"></div>");
    else if(leftmargin > 0 && index > 0)
    p_out.push("<div class=\"line2\"></div>");

    p_out.push("<dl>");
    if(leftmargin > 0)
    p_out.push("  <dt class=\"icon\" style=\"padding-left:"+leftmargin+"px\"><img src=\"/_img/com/re.gif\" align=\"middle\" alt=\"\" /></dt>");
    p_out.push("  <dt class=\"writer\">"+n[6].decode()+"<br/><span>"+n[7]+"</span></dt>");
    p_out.push("  <dd class=\"content\" style=\"width:"+(contentWidth-leftmargin)+"px;\">"+n[8].decode()+"&nbsp;&nbsp;<span>"+n[9]+", "+n[10]+"</span></dd>");
    p_out.push("  <dd class=\"control\">");
    if(memberNo == n[5] || adminCD == 1)
    p_out.push("  <img src=\"/_img/com/cmdel.gif\" align=\"middle\" alt=\"삭제하기\" title=\"삭제하기\" id=\"BT#act{DEL}#seq{"+n[2]+"}\" style=\"cursor:pointer;\" />");
    p_out.push("  <img src=\"/_img/com/cmadd.gif\" align=\"middle\" alt=\"추가댓글\" title=\"답변댓글 달기\" id=\"BT#act{ADD}#seq{"+n[2]+"}\" style=\"cursor:pointer;\" />");
    p_out.push("  </dd>");
    p_out.push("</dl>");  
    p_out.push("<br style=\"font-size:1px;line-height:1px;\" />");
    /*
    if(leftmargin == 0)
    p_out.push("<div class=\"line\"></div>");
    else
    p_out.push("<div class=\"line2\"></div>");
    */
    p_out.push("</div>");
    });
    if(RES.Datas.length)
    p_out.push("<div class=\"line\"></div>");
    
    p_out.push("</div>");
    $(TGID+"#container").update(p_out.join(''));
    $(TGID+"#tots").update(RES.Total+"개");

  },
  /* List */
  /* Etc */
  addComment: function(){
    var TGID = this.TG.id;
    var content = $(TGID+"#content").value.strip();
    
    if(content == ""){
      alert("등록 하실 댓글 내용을 입력하세요"); 
      $(TGID+"#content").focus();
      return;
    }
    var url = this.OPT.proc;
    var pars = this.OPT.pars+"&content="+content.encode()+"&dummy="+ARIA.nTime();

    var CompleateAC = this.addCommentOK.bind(this);
    var reportErrorAC = this.ajaxReportError.bind(this);
    var myAjax = new Ajax.Request(  
    url,
    {
     method: 'post',
     parameters: pars,
     onComplete: CompleateAC,
     onFailure: reportErrorAC
    });
  },
  addCommentOK: function(req){
    var TGID = this.TG.id;
    var RES = req.responseText.toOBJ();
    if(RES.result == "ok"){
      $(TGID+"#content").value = "";
      this.pageNo = 1;
      this.listLoad();
    }else{
      alert(RES.msg.decode()); 
    }
  },
  delComment: function(seq){
    var TGID = this.TG.id;
    ans = confirm("정말 삭제하시겠습니까?");
    if(ans){
      var url = this.OPT.proc;
      var pars = this.OPT.pars+"&seq="+seq+"&act=del&dummy="+ARIA.nTime();
  
      var CompleateAC = this.delCommentOK.bind(this);
      var reportErrorAC = this.ajaxReportError.bind(this);
      var myAjax = new Ajax.Request(  
      url,
      {
       method: 'post',
       parameters: pars,
       onComplete: CompleateAC,
       onFailure: reportErrorAC
      });
    }
  },
  delCommentOK: function(req){
    var TGID = this.TG.id;
    var RES = req.responseText.toOBJ();
    if(RES.result == "ok"){
      $(TGID+"CB_"+RES.seq).remove();
      $(TGID+"#tots").update(RES.Total+"개");
    }else{
      alert(RES.msg.decode()); 
    }
  },
  reComment: function(seq){
    var TGID = this.TG.id;
    if($(TGID+"#reform")) $(TGID+"#reform").remove();

    var p_out = [];
    p_out.push("<div class=\"boardCommentForm\" id=\""+TGID+"#reform\">");
    p_out.push("<input type=\"hidden\" id=\""+TGID+"#reseq\" value=\""+seq+"\" />");
    p_out.push("<table width=\"100%\" cellspacing=\"0\">");
    p_out.push("<col width=\"30\" /><col /><col width=\"50\" />");
    p_out.push("<tbody>");
    p_out.push("  <tr>");
    p_out.push("    <td align=\"right\"><img src=\"/_img/com/re.gif\" align=\"middle\" alt=\"\" /></td>");
    p_out.push("    <td><textarea name=\"content\" id=\""+TGID+"#recontent\" style=\"width:100%;overflow:auto;\" rows=\"3\"></textarea></td>");
    p_out.push("    <td align=\"center\">");
    p_out.push("    <span class=\"BT45_23\"><a href=\"javascript:;\" title=\"댓글달기\" id=\""+TGID+"#rebtn\">등록</a></span>");
    p_out.push("    <span class=\"BT45_23\"><a href=\"javascript:;\" title=\"취소\" id=\""+TGID+"#rebtnCancle\">취소</a></span>");
    p_out.push("    </td>");
    p_out.push("  </tr>");
    p_out.push("</tbody>");
    p_out.push("</table>");
    p_out.push("</div>");

    Element.insert($(TGID+"CB_"+seq), {after:p_out.join('')});
    $(TGID+"#recontent").focus();
    
  },
  reCommentFn: function(){
    var TGID = this.TG.id;
    var content = $(TGID+"#recontent").value.strip();
    var seq     = $(TGID+"#reseq").value;
    
    if(content == ""){
      alert("등록 하실 댓글 내용을 입력하세요"); 
      $(TGID+"#recontent").focus();
      return;
    }
    var url = this.OPT.proc;
    var pars = this.OPT.pars+"&content="+content.encode()+"&seq="+seq+"&dummy="+ARIA.nTime();

    var CompleateAC = this.reCommentFnOK.bind(this);
    var reportErrorAC = this.ajaxReportError.bind(this);
    var myAjax = new Ajax.Request(  
    url,
    {
     method: 'post',
     parameters: pars,
     onComplete: CompleateAC,
     onFailure: reportErrorAC
    });
  },
  reCommentFnOK: function(req){
    var TGID = this.TG.id;
    var RES = req.responseText.toOBJ();
    if(RES.result == "ok"){
      $(TGID+"#content").value = "";
      this.pageNo = 1;
      this.listLoad();
    }else{
      alert(RES.msg.decode()); 
    }
  },
  /* Etc */
  ajaxReportError: function(reqeust){
   alert(request.responseText);
  }
  
});