// function to scroll the TopSales:
var gScrollOffset = 8;          // offset in pixel each time the elements are scrolled
var gScrollTimeMillis = 50;      // all scrolling elements are scrolled by gScrollOffset each gScrollTimeMillis milliseconds
var gDistanceBetweenElements = 150; // should be an integer multiple of the height of the scrollable element
var gMaxTop = gDistanceBetweenElements; // upon reaching this .style.top value an element is appended at the other end, thus scrolling through the elements in a cyclic way
var gKeepProductVisible = 20000;  // in Millis..
var gVisibleStarted = (new Date()).getTime(); // initialised with now.
var gScrolling = false;       // display first product on initialisation
var gScrolledByPixels = 0;    // not yet scrolled
var gCurrentMinTopValue = 0;
var gScrollFirstCall = true;


function scrollAllElements()
{
  if (gScrollFirstCall)
  {
    for ( var i=0; i<gNumScrollableElements; i++ )
    {
      gScrollableElements[i].style.top = gScrollableElementsTop[i] + "px";
      gScrollableElements[i].style.display = "inline";
    }
    gScrollFirstCall = false;
  }

  // are we currently scrolling:
  if ( !gScrolling && ((new Date()).getTime()-gVisibleStarted)>gKeepProductVisible )  // should we start scrolling?
  {
    gScrolling = true;
  }
  
  if (!gScrolling)
  {
    // use large offset here as we don not want JS functions to be called too often - lags..
    window.setTimeout( "scrollAllElements()", gKeepProductVisible );
    return
  }
  
  if ( gScrolling && gScrolledByPixels>=gDistanceBetweenElements )  // should we end scrolling
  {
    // temporarily stop scrolling:
    gScrolledByPixels = 0;
    gScrolling = false;
    gVisibleStarted = (new Date()).getTime();
  }
  
  // scroll all elements:
  var scrollBy = gScrollOffset;
  if (gScrolledByPixels>=gDistanceBetweenElements) scrollBy = 0;
  else if (gDistanceBetweenElements-gScrolledByPixels<gScrollOffset) scrollBy = gDistanceBetweenElements-gScrolledByPixels;
  gCurrentMinTopValue += scrollBy;
  gScrolledByPixels += scrollBy;
  for ( var i=0; i<gNumScrollableElements; i++ )
  {
    gScrollableElementsTop[i] += scrollBy;
    gScrollableElements[i].style.top = gScrollableElementsTop[i] + "px";
    
    if ( gScrollableElementsTop[i]>gMaxTop )
    {
      gScrollableElementsTop[i] = gCurrentMinTopValue-gDistanceBetweenElements;
      gCurrentMinTopValue = gScrollableElementsTop[i];
      //if (gCurrentMinTopValue>-gDistanceBetweenElements) gCurrentMinTopValue=-gDistanceBetweenElements; 
    }
  }
  
  window.setTimeout( "scrollAllElements()", gScrollTimeMillis );
}
