function Comment(idObject, idInstance, count, showCaptcha, uniqKey) {
  this.idObject    = idObject;
  this.idInstance  = idInstance;
  this.count       = count;
  this.showCaptcha = showCaptcha;

  //if (typeof(commentAreaClass) == "undefined") commentAreaClass = "mCommentArea";
  this.uniqKey      = uniqKey;
  this.commentArea  = $("#commentArea_"+uniqKey);
  this.formClass    = "mCommentFormBody";
  var form = this.commentArea.find("."+this.formClass);
  if (form.length) this.commentForm = form;
  this.commentClass = "mCommentList";
  this.commentCount = "mCommentTag";
}

Comment.updateNumberComments = function(commentArea, count) {
  //(Циферка в числе комментариев + 1)
  //<h2 class="mCommentTag">Комментарии (3)</h2>
  var commentTag = commentArea.find(".mCommentTag");
  if (commentTag.length > 0) {
    var arr = /(.*? \()(\d+)([^\d]+)/.exec(commentTag.html());
    if ((arr != null) && (arr.length == 4)) {
      if ((typeof(count) == "undefined")) {
        count = parseInt(arr[2]) + 1;
      }
      commentTag.html(arr[1] + count + arr[3]);
    }
  }
}

Comment.prototype = {
  //Отсылка формы
  sendCommentForm: function() {
    //Отключить активность кнопки
    this.commentForm.find(".button").prop("disabled", "disabled");
    //Показать вертелку
    this.commentForm.find(".mCommentProcess").show();
    var values = new Object();
    values["uniqKey"]      = this.uniqKey;
    values["formClass"]    = this.formClass;
    values["commentClass"] = this.commentClass;
    values["commentCount"] = this.commentCount;
    this.commentForm.find("[name]").each(function() {
      var value = $.trim($(this).val());
      if (this.tagName.toLowerCase() == "textarea") {
        //if tinyMCE
        var ifr = $('#' + $(this).attr('id') + '_ifr');
        if (ifr.length > 0) {
          var value = document.getElementById(ifr.attr('id')).contentWindow.document.body.innerHTML;
          value = value.replace(/\s*_mce[^\s>]+/g, '');
          value = value.replace(/\<p\>\<br\>\<\/p\>/g, '');
        }
      }
      values[$(this).attr("name")] = value;
    });

    //Проверка данных формы
    da_commentFormCheck(values, this.count);
   },

  //Перелистывание комментариев
  listPages: function(page) {
    da_listingComment(this.idObject, this.idInstance, this.count, page, null, this.uniqKey, this.formClass, this.commentClass);
  }
}


function CommentHierarchical(text_svernut, text_razvernut, text_svernut_all, text_razvernut_all, text_svernut_vetku, text_razvernut_vetku, uniqKey) {
  this.text_svernut = text_svernut;
  this.text_razvernut = text_razvernut;
  this.text_svernut_all = text_svernut_all;
  this.text_razvernut_all = text_razvernut_all;
  this.text_svernut_vetku = text_svernut_vetku;
  this.text_razvernut_vetku = text_razvernut_vetku;

  //if (typeof(commentAreaClass) == "undefined") commentAreaClass = 'mCommentArea';
  this.uniqKey     = uniqKey;
  this.commentArea = $("#commentArea_"+uniqKey);
  this.commentTag  = this.commentArea.find('.mCommentTag');
  var form = this.commentArea.find(".mCommentFormBody");
  if (form.length) this.commentForm = form;
}
  
CommentHierarchical.prototype = {
  //Развернуть тело определённого комментария
  showCommentBody: function (el) {
    var comment     = el.parents(".item");
    var commentBody = comment.find(".body");
    comment.find('.minimize').html( (commentBody.css("display")=="none") ? this.text_svernut : this.text_razvernut );
    commentBody.slideToggle();
  },

  //Развернуть/Свернуть всю ветку
  showCommentBranch: function(el) {
    var comment = el.parents('.item');
    if (comment.find('.body').css("display") == "none") {
      var t       = this.text_svernut;
      var t2      = this.text_svernut_vetku;
      comment.parent().find('.body').slideDown();
    } else {
      var t       = this.text_razvernut;
      var t2      = this.text_razvernut_vetku;
      comment.parent().find('.body').slideUp();
    }
    comment.find('.minimize').html(t2).end().next('ul').find('.item').each(function () {
      var minim = $(this).find('.minimize');
      ($(this).next('ul').length) ? minim.html(t2) : minim.html(t);
    });
  },

  //Развернуть все комментарии
  showAllCommentsBody: function() {
    var turnOnOff = this.commentArea.find(".commentsTurnOnOff");
    if (turnOnOff.length > 0) {
      if (turnOnOff.html() != this.text_svernut_all) {
        var t  = this.text_svernut;
        var t2 = this.text_svernut_all;
        var t3 = this.text_svernut_vetku;
        this.commentArea.find('ul ul .body').slideDown();
      } else {
        var t  = this.text_razvernut;
        var t2 = this.text_razvernut_all;
        var t3 = this.text_razvernut_vetku;
        this.commentArea.find('ul ul .body').slideUp();
      }
      
      this.commentArea
        .find("ul ul .minimize").html(t).end()            //Ссылка "Свернуть"/"Развернуть" у подчинённых комментариев
        .find("ul > li > div > .minimize").html(t3).end()//Ссылка "Свернуть ветку"/"Развернуть ветку" у родительских комментариев
        .find(".commentsTurnOnOff").html(t2);           //Ссылка "Развернуть всё"
    }
  },

  // Вставка комментария из ajax
  insertComment: function(text, idParent, idChild, level) {
    var elem = this.commentArea.find(".mCommentFormBody + ul[rel='"+level+"']");
    var comment = $("#comment_"+idParent);
    // Если ul с таким rel нет, создаём его
    if (elem.length == 0) {
      comment.after('<ul rel="'+level+'"></ul>');
      elem = comment.next("ul");
    }
    elem.append('<li>'+text+'</li>');
    //(Циферка в числе комментариев + 1)
    Comment.updateNumberComments(this.commentArea);
    //Скрываем форму, показываем комментарий, перескакиваем на место комментария
    this.commentForm.hide();
  },

  //"Ответить"
  //Помещаем форму после нужного ответа, меняем поле id_parent, показать ссылку в конце формы
  moveCommentFormToComment: function(id) {
    //Вычислить уровень добавляемого комментария, поместить его в скрытое поле
    //alert(this.commentForm.find(".comment_level_comment").length);
    var c = parseFloat($("#comment_"+id).parents("ul").attr('rel')) + 1;

    this.commentForm
      .insertAfter("#comment_"+id).end()
      .find(".comment_level_comment").val(c).end()
      .find(".comment_id_parent_comment").val(id).end()  
      .show(); //Строчка на случай, если форма скрыта

    //Показываем текст родителя, если не раскрыт
    $("#comment_"+id+' .body').show();
    $("#comment_"+id+' .minimize').html(this.text_svernut);

    //Показываем кнопку возврата формы
    this.commentArea.find(".blankFormLink").show();
  },

  //Перемещение формы в исходное положение, зануляем id_parent, скрываем ссылку
  blankForm: function() {
    if (this.commentTag.length) this.commentTag.after(this.commentForm);
    else this.commentArea.prepend(this.commentForm);
    //Строчка на случай, если форма скрыта
    this.commentForm.show().find(".comment_id_parent_comment").val("");
    this.commentArea.find(".blankFormLink").hide();
  }
}

function setCommentTagLink(uniqKey) {
  $('#commentArea_'+uniqKey+' .mCommentTag').html('<a href="#" onclick="$(\'#commentArea_'+uniqKey+' .mCommentList, #commentArea_'+uniqKey+' .mCommentFormBody\').slideToggle(); return false">'+ $('#commentArea_'+uniqKey+' .mCommentTag').html() +'</a>' );
}


function saveModeratedCommentBind(idComment) {
  $("#btSaveComment").click(function(){
    da_saveModeratedComment(idComment, $("#commentModerationForm").serialize());
  });
}

