var commentManager;

CommentManager = function() {
    this.name="Commnet Manager v. 0.5";
    this.lastCalled = null;
    this.Params = { };
    this.Inputs = new Array();
    this.startup();
}

CommentManager.prototype = {
    startup: function(){
        var self = this;
        this.Params['parent_id'] = 1;
        this.commentsForm = $("#commentsForm");
        this.commentsForm.children("form").bind("submit",function(){ self.checkForm(); return false;});
    },
    publComment: function(el){
        var self = this;
        var publParams = { };
        publParams['comment_id'] = el.id;
        publParams['art_id'] = $("#commentsForm input[name='art_id']").attr("value");
        publParams['SESS_ID'] = $("#commentsForm input[name='SESS_ID']").attr("value");
        publParams['node_id'] = $("#commentsForm input[name='node_id']").attr("value");
        publParams['object'] = 'comments';
        publParams['_act'] = 'publ';
        $.post('/xData/',publParams,function(data){self.showCommentBar(el,data)},"xml");
    },
    showCommentBar: function(el,xml){
        var self = this;
        if(xml.getElementsByTagName('error')[0]){
          var error = xml.getElementsByTagName('error')[0].getAttribute('type');
          if(error == 'rules'){
            alert('Вы не имеете права на публикацию комментария');
          }
        }else{
          var content = xml.getElementsByTagName('content')[0];
          $(el).parent().html(_getTextContent(content));
        }
    },
    showForm: function(el){
        var self = this;
        if(this.lastCalled != el){
            this.commentsForm.remove();
            this.commentsForm.appendTo($(el).parent().parent());
            this.lastCalled = el;
            this.Params['parent_id'] = $(el).attr("id");
            this.commentsForm.children("form").bind("submit",function(){ self.checkForm(); return false;});
        }
    },
    checkForm: function(){
        var self = this;
        this.Params['user'] = $("#commentsForm input[name='user']").attr("value");
        this.Params['comment'] = $("#commentsForm textarea[name='comment']").val();
        this.Params['art_id'] = $("#commentsForm input[name='art_id']").attr("value");
        this.Params['node_id'] = $("#commentsForm input[name='node_id']").attr("value");
        this.Params['SESS_ID'] = $("#commentsForm input[name='SESS_ID']").attr("value");
        this.Params['object'] = 'comments';
        this.Params['_act'] = 'add';
        if((this.Params['user'] == '')||(this.Params['comment'] == '')){
            alert('Не заполнены обязательные поля!');
        }else{
            $.post('/xData/',self.Params,function(data){ self.showAnswer(data) },"xml");
        }
    },
    showAnswer: function(xml){
        var self = this;
        var content = xml.getElementsByTagName('content')[0];
        if(xml.getElementsByTagName('error')[0]){
          var error = xml.getElementsByTagName('error')[0].getAttribute('type');
          if(error == 'time'){
            alert('Можно добавлять комментарии не чаще 1 раза в две минуты');
          }
        }else{
            $("#commentsForm input[name='user']").attr("value","");
            $("#commentsForm textarea[name='comment']").val("");
            if(xml.getElementsByTagName('commentadded')[0]){
                alert('Ваш комментарий добавлен и будет опубликован после проверки модератором');
            }else{
                var content = xml.getElementsByTagName('content')[0];
                if(this.Params['parent_id']==1){
                    var parent = $("#commentsContent").find(".recursive:first");
                    if(parent.length==0){
                      $("#commentsContent").append(_getTextContent(content))
                    }else{
                      parent.append(_getTextContent(content))
                    }
                }else{
                    this.commentsForm.remove();
                    var parent = $(this.lastCalled).parent().parent().parent().find(".recursive:first");
                    if(parent.length==0){
                      $(this.lastCalled).parent().parent().parent().append(_getTextContent(content))
                    }else{
                      parent.append(_getTextContent(content))
                    }
                    this.lastCalled = null;
                }
            }
        }
    }
}

var _getTextContent = window._getTextContent = function(xmlElement) {
    if (xmlElement.text != undefined) return xmlElement.text;
    else if (xmlElement.textContent != undefined) return xmlElement.textContent;
    else if (xmlElement.firstChild != undefined) return xmlElement.firstChild.nodeValue;
}
