(function($){

var ns = "Comment";

window[ns] = function ( options ) {
  this.options = options;
  
  this.form = $(options.form);
  this.trigger = $(options.trigger);
  
  this.url = AJAX_BASE + 'comment/?ajax';
  
  this.observe();
}

window[ns].prototype = {
  
  observe: function () {
    this.form.submit( $.proxy( this.submit, this ) );
    this.trigger.click( $.proxy( this.click, this ) );
  },
  
  register: function ( element ) {
    var $this = this;
    
    element.each(function (i, element) {
      var tag = element.nodeName.toLowerCase();
      
      if ( "form" == tag ) {
        $(element).submit( $.proxy( $this.submit, $this ) );
      } else if ( "a" == tag ) {
        $(element).click( $.proxy( $this.click, $this ) );
      }
      
    });
  },
  
  submit: function ( event ) {
    var form = $(event.currentTarget);
    event.preventDefault();
    form.find('.submit').blur();
    
    var textarea = form.find('textarea');
    if ( "" == $.trim(textarea.val()) ) {
      textarea.focus();
      return false;
    }
    
    if ( form.hasClass('loading') ) return false;
    form.addClass('loading');

    $.post( this.url, form.serialize(), function ( data ) {
      
      var ul = form.prev();
      var li = $(data).appendTo(ul).hide().fadeIn();
      var deleteButton = li.find('a.delete');
      window.deleter.register(deleteButton);
      
      form.find('textarea').val('');
      form.removeClass('loading');
      
    } );
  },
  
  click: function ( event ) {
    event.preventDefault();
    var element = $(event.currentTarget);
    var block = element.parent().next();
    block.slideDown(300, function(){
      if ( ! is_login() ) return;
      var textarea = block.find('textarea');
      if ( ! textarea.length ) return;
      var offset = textarea.offset();
      var win_height = $(window).height();
      var top = offset.top - (win_height/2);
      
      $('html, body').animate({scrollTop:top}, function() {
        textarea.focus();
      });
    });
    
  }
  
};

})(jQuery);
