(function($){

var ns = "PageLoader";

window[ns] = function ( options ) {
  this.options = options;
  
  this.root = $(options.root);
  
  if ( ! this.root.length ) return;
  
  this.nav  = $(options.nav);
  this.ajax_base = AJAX_BASE + 'pageloader/?';
  
  this.init();
}

window[ns].prototype = {
  
  init: function () {

    if ( POST_PER_PAGE > this.root.find('.wall-row').length ) {
      this.end( true );
      return;
    }

    this.paged = this.nav.find('span.active').html();

    this.nav.empty();
    this.button = $('<a>').attr('href','#')
                          .addClass('ajax-page-loader')
                          .html(LANG.loadMore)
                          .appendTo(this.nav);
  
    this.observe();
  },
  
  observe: function () {
    this.button.click( $.proxy( this.click, this ) );
  },

  click: function ( event ) {
    event.preventDefault();
    var element = $(event.currentTarget);
    element.blur();
    if ( element.hasClass('loading') ) return false;
    
    element.addClass('loading');
    
    this.load();
  },
  
  load: function () {
    var para = {
      name: PAGE_NAME,
      paged: ++this.paged
    };
    var url = this.ajax_base + $.param(para);

    $.ajax(url).done( $.proxy( this.done, this ) );
  },
  
  done: function ( data ) {
    var $this = this;
    var counter = 0;
    $(data).each(function(i,element){
      if ( 1 != element.nodeType ) return;
      var block = $(element);
      block.hide().appendTo($this.root).slideDown();
      Activate(block);
      counter++;
    });
    
    this.button.removeClass('loading');
    
    if ( POST_PER_PAGE > counter ) {
      this.end();
    }
  },

  end: function ( empty ) {
    this.is_end = true;
    this.nav.empty();
    
    if ( ! empty ) {
      $('<div>').addClass('end').html(LANG.noMore).appendTo(this.nav);
    }
  }
  
};

})(jQuery);
