// Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

request = {action: "should_scroll"}

chrome.extension.sendRequest(request, function(response) {
  if (response.should_scroll) {
    window.focus();
    lastOffset = window.pageYOffset;
    var start_interval = Math.max(10000, response.scroll_interval);
    function smoothScrollDown() {
      window.scrollBy(0, response.scroll_by);
      if (window.pageYOffset != lastOffset) {
        lastOffset = window.pageYOffset;
        setTimeout(smoothScrollDown, response.scroll_interval);
      } else if (response.should_scroll_up) {
        setTimeout(smoothScrollUp, start_interval);
      }
    }
    function smoothScrollUp() {
      window.scrollBy(0, -1 * response.scroll_by);
      if (window.pageYOffset != lastOffset) {
        lastOffset = window.pageYOffset;
        setTimeout(smoothScrollUp, response.scroll_interval);
      } else if (response.scroll_loop) {
        setTimeout(smoothScrollDown, start_interval);
      }
    }
    setTimeout(smoothScrollDown, start_interval);
  }
});

