var diScroller_data = new Array;

function diScroller(obj_id, interval, container_width)
{
  this.set_obj_id(obj_id);
  this.content = '';
  this.interval = arguments[1] ? arguments[1] : 30;
  this.timer_id = 0;

  this.data_id = diScroller_data.length;
  diScroller_data[this.data_id] = {
    obj: this.obj,
    content: this.content,
    left: 0,
    width: 0,
    container_width: container_width || getWidth(this.obj),
    sign: 1
  };
}

diScroller.prototype.obj_id;
diScroller.prototype.obj;
diScroller.prototype.content;
diScroller.prototype.interval;
diScroller.prototype.data_id;
diScroller.prototype.timer_id;

diScroller.prototype.set_obj_id = function(obj_id)
{
  this.obj_id = obj_id;
  this.obj = _ge(this.obj_id);
  this.obj.style.overflow = 'hidden';
}

diScroller.prototype.set_content = function(content)
{
  this.content = content;
  this.obj.innerHTML = '<span style="position:relative;white-space:nowrap;">'+content+'</span>';

  diScroller_data[this.data_id].content = content;
  //diScroller_data[this.data_id].width = this.obj.firstChild.getWidth();
  diScroller_data[this.data_id].width = getWidth(this.obj.firstChild);
  diScroller_data[this.data_id].width = this.obj.firstChild.offsetWidth;

  if (diScroller_data[this.data_id].width > diScroller_data[this.data_id].container_width)
  {
    diScroller_data[this.data_id].sign = -1;
    if (!this.is_running()) this.run();
  }
  else
  {
    if (this.is_running()) this.stop();
  }
}

diScroller.prototype.is_running = function()
{
  return this.timer_id ? true : false;
}

diScroller.prototype.run = function()
{
  this.timer_id = setInterval('diScroller_scroll_big("'+this.obj_id+'",'+this.data_id+')', this.interval);
}

diScroller.prototype.stop = function()
{
  if (this.timer_id) clearInterval(this.timer_id);
  this.timer_id = 0;
}

function diScroller_scroll_small(obj_id, data_id)
{
  var e = diScroller_data[data_id].obj;
  var e2 = e.firstChild;
  var sign;

  // out of right bound
  if (
      diScroller_data[data_id].sign > 0 &&
      diScroller_data[data_id].width + diScroller_data[data_id].left >= diScroller_data[data_id].container_width
     )
  {
    diScroller_data[data_id].sign = -1;
  }
  else if (
      diScroller_data[data_id].sign < 0 &&
      diScroller_data[data_id].left <= 0
     )
  {
    diScroller_data[data_id].sign = 1;
  }

  diScroller_data[data_id].left += diScroller_data[data_id].sign;

  e2.style.left = diScroller_data[data_id].left+'px';
}

function diScroller_scroll_big(obj_id, data_id)
{
  var e = diScroller_data[data_id].obj;
  var e2 = e.firstChild;
  var sign;

  // out of right bound
  if (
      diScroller_data[data_id].sign > 0 &&
      diScroller_data[data_id].left >= 0
     )
  {
    diScroller_data[data_id].sign = -1;
  }
  else if (
      diScroller_data[data_id].sign < 0 &&
      diScroller_data[data_id].container_width - diScroller_data[data_id].left >= diScroller_data[data_id].width
     )
  {
    diScroller_data[data_id].sign = 1;
  }

  diScroller_data[data_id].left += diScroller_data[data_id].sign;

  e2.style.left = diScroller_data[data_id].left+'px';
}
