var buffer=new Array();
var started=false;
var speed=16;
var moving=false;
var fancyHover=false; //schöne hovereffekte aktivieren
var step=0;
var loadPerRequest=15;

$(function(){
   $('<div id="scrollerMiddle"><div id="scrollerInner"></div></div>').appendTo('#scroller');
   getNewItems(loadPerRequest);
});

function getNewItems(count) {
   $.getJSON('/extensions/ajax/logoscroller.php', { count: count, skip: collectIds().join(",") }, function(data) {
      var loader=new Array();
      for(var i=0;i<data.length;i++) {
         buffer[buffer.length]=data[i];
         if(fancyHover) {
            loader[loader.length]= $('<img />').attr('src', data[i].image);
            loader[loader.length]= $('<img />').attr('src', data[i].hover);
         }
      }
      if(!started) {
         started=true;
         animateScroller();
      }
   });
}

function addItem() {
   step++;
   if(step%loadPerRequest==0)
      getNewItems(loadPerRequest);
   var nextItem=buffer[0];
   RotateArr(buffer,1);
   if(fancyHover) {
      $('<a />').attr({
         href:   nextItem.link,
         title:  nextItem.title,
         target: '_blank'
      }).addClass('scrollerItem').append('<img />').find('img').attr('src',nextItem.image).addClass('default').end().append('<img />').find('img:not(:first)').attr('src',nextItem.hover).addClass('hover').end().hover(function(){
         $(this).find('.hover').stop().css('opacity',0).show().animate({
            opacity: 1
         },200);
      },function(){
         $(this).find('.hover').stop().animate({
            opacity: 0
         },500);
      }).appendTo('#scrollerInner');
   }
   else {
      $('<a />').attr({
         href:   nextItem.link,
         title:  nextItem.title,
         target: '_blank'
      }).addClass('scrollerItem').append('<img />').find('img').attr('src',nextItem.image).addClass('default').end().hover(function(){
         $(this).find('img').attr('src',nextItem.hover);
      },function(){
         $(this).find('img').attr('src',nextItem.image);
      }).appendTo('#scrollerInner');
   }
   $('#scrollerInner').hover(function(){
      $(this).stop();
      moving=false;
   },function(){
      if(!moving)
         animateScroller();
   });
}

function animateScroller() {
   if($('#scrollerInner .scrollerItem').length) {
      while(getItemLeft($('#scrollerInner .scrollerItem:first'))<-200) {
         $('#scrollerInner .scrollerItem:first').remove();
         $('#scrollerInner').css('left',parseInt($('#scrollerInner').css('left'))+200);
      }
   }
   while(getItemLeft($('#scrollerInner .scrollerItem:last'))<=$('#scroller').width()+100) {
      addItem();
   }
   if(moving)
      return false;
   var left = 150-( ($('#scrollerInner').position().left-60)%150  );
   moving=true;
   $('#scrollerInner').animate({
      left: '-='+left,
      width: '+='+200
   }, speed*left, 'linear', function() {
      moving=false;
      animateScroller();
   });
}

function RotateArr(arr, turns) {
   for(var l = arr.length, turns = (Math.abs(turns) >= l && (turns %= l), turns < 0 && (turns += l), turns), i, x; turns; turns = (Math.ceil(l / turns) - 1) * turns - l + (l = turns))
   for(i = l; i > turns; x = arr[--i], arr[i] = arr[i - turns], arr[i - turns] = x);
   return arr;
};

function collectIds() {
   var ids=new Array();
   for(var i=0;i<buffer.length;i++) {
      ids[ids.length]=buffer[i].id;
   }
   return ids;
}

function getItemLeft(item) {
   if(!item || !item.offset() || !$('#scroller').offset())
      return 0;
   return item.offset().left-$('#scroller').offset().left;
}