(function($) {
  
  var perPage = 5;
  
  // $(document).ready(init);
  $(window).bind('load', init);
  
  
  function init () {
    var conf = {
      scroll: 2,
      itemLoadCallback : {
        onBeforeAnimation: cb_before
      }        
    };
    
    $('div.jcarousel-container ul')
      .each(function() {
        var lconf = $.extend({}, conf);
        var $car = $(this);
				var $start = $car.find('li[a.selected]');
				var start = 0;
				if ($start.length) {
					var $lis = $car.find('li');
					start = $lis.index($start[0]);
					lconf.start = start + 1;
				}
        var scroll = this.className.match(/(:?^|\s)jcarousel-scroll-([\d]+)(:?$|\s)/);
        scroll = scroll ? (+scroll[2]) : 2;          
        var size = $car.next().find('span.count').text();
        if (size) {
          lconf.size = size;
        }
        var urlMore = $car.next().find('a.more').attr('href');
        if (urlMore) {
          urlMore += urlMore.indexOf('?') != 1 ? '?' : '&';
          urlMore += 'page=';
          lconf.urlMore = urlMore;
        }
        $car.jcarousel(lconf);
      });

  }
      
  function cb_before(car, state) {
    if (!car.options.urlMore) {
      return;
    }
    var insertAt;
    if (!car.loading)
      car.loading = {};

    for (var i = car.first; i <= car.last; i++) {
      if (!car.has(i + car.options.scroll) && car.options.size >= i + car.options.scroll) {
        insertAt = i + car.options.scroll;
        break;
      }
    }
    
    if (!insertAt)
      return;


    var page = Math.floor((insertAt) / perPage);
    if (page <= 0)
      page = 1;
    
    if (car.loading[page])
      return;
    
    
    car.loading[page] = true;
    
    $.get(car.options.urlMore + page, function(r) {
        loadedData(car, r, insertAt);
    });
  }
  
  function loadedData(car, r, i) {
    $(r).find('li').each(function() {
      car.add(i, $(this).html());
      i++;
    });
  }
  
  
})(jQuery);