function _comments(type, layoutId)
{
   this.page = -1;
   this.maxPage = 1;
   this.type = type;
   this.layoutId = layoutId;
}

_comments.prototype.page;
_comments.prototype.maxPage;
_comments.prototype.type;
_comments.prototype.layoutId;

_comments.prototype.fetchPage = function(page)
{
    if(page > this.maxPage || this.page == page)
    {
        return;
    }
    
    var data = 
    {
      "type" : this.type,
      "layoutId" : this.layoutId,
      "page" : page
    };
    
    var carrier =
    {
      "opcode" : 'CMSG_FETCH_COMMENTS',
      "data": data
    };

    var ts = this;
    new Ajax.Request("/ajax.php", {
      method: 'post',
      parameters: 'request=' + Object.toJSON(carrier),
      onSuccess: function(transport){
        var json = transport.responseText.evalJSON();
        ts.fetchPageResponse(json.data);
      }
    });
}

_comments.prototype.fetchPageResponse = function(data)
{
    this.maxPage = data.maxPage;
    this.page = data.page;
    
    var comments_list = $('comments_list');
    // remove all child nodes
    while (comments_list.childNodes[0])
    {
        comments_list.removeChild(comments_list.childNodes[0]);
    }
    data.comments.each(function(c){
        var commentLI = document.createElement('li');
        var posterName = document.createElement('div');
        posterName.innerHTML = c.posterName;
        try{posterName.addClassName('comments_list_posterName');}catch(e){posterName.setAttribute('className', 'comments_list_posterName')}
        var comment = document.createElement('div');
        comment.innerHTML = c.comment;
        try{comment.addClassName('comments_list_comment');}catch(e){comment.setAttribute('className', 'comments_list_comment')}
        
        commentLI.appendChild(posterName);
        commentLI.appendChild(comment);
        
        comments_list.appendChild(commentLI);
    });
    if(this.page >= 1)
    {
        $('comments_navigation_prev').show();
    }else
    {
        $('comments_navigation_prev').hide();
    }
    if(this.page < this.maxPage)
    {
        $('comments_navigation_next').show();
    }else
    {
        $('comments_navigation_next').hide();
    }
    
    var hg = $('main_content').getHeight() + $('wrapper_head').getHeight();
    $('wrapper_content_overlay').setStyle({height: hg});
}

_comments.prototype.next = function()
{
    this.fetchPage(this.page + 1);
}

_comments.prototype.prev = function()
{
    this.fetchPage(this.page - 1);
}

_comments.prototype.submitComment = function()
{
    var nickname = $('comments_form_nickname').value;
    var comment = $('comments_form_comment').value;
    var captcha = $('comments_form_captcha').value;
    
    if(nickname == "")
    {
        $('comments_form_error').innerHTML = "You have to enter a nickname";
        $('comments_form_error').show();
        return;
    }
    if(comment == "")
    {
        $('comments_form_error').innerHTML = "You have to enter a comment";
        $('comments_form_error').show();
        return;
    }
    if(captcha == "")
    {
        $('comments_form_error').innerHTML = "You have to enter a captcha";
        $('comments_form_error').show();
        return;
    }
    $('comments_form_error').innerHTML = "Submitting... please wait.";
    $('comments_form_error').show();
    
    var data = 
    {
      "type" : this.type,
      "layoutId" : this.layoutId,
      "posterName" : nickname,
      "comment" : comment,
      "captcha" : captcha
    };
    
    var carrier =
    {
      "opcode" : 'CMSG_SUBMIT_COMMENT',
      "data": data
    };
    
    var ts = this;
    new Ajax.Request("/ajax.php", {
      method: 'post',
      parameters: 'request=' + Object.toJSON(carrier),
      onSuccess: function(transport){
        var json = transport.responseText.evalJSON();
        ts.submitCommentResponse(json.data);
      }
    });
}

_comments.prototype.submitCommentResponse = function(data)
{
    if(data.result == "1")
    {
        $('comments_form_error').innerHTML = "Your comment has successfully been posted.";
        alert("Your comment has successfully been posted.");
        
        nickname = $('comments_form_nickname').value = "";
        comment = $('comments_form_comment').value = "";
        captcha = $('comments_form_captcha').value = "";
        if(this.page == 0)
        {
            this.page = -1;
            this.fetchPage(0);
        }
    }else
    {
        $('comments_form_error').innerHTML = data.error;
    }
    $('comments_form_error').show();
}
