function Scroller(x, y, width, height, border, padding, align) {

  this.x = x;
  this.y = y;
  this.width = width;
  this.height = height;
  this.border = border;
  this.padding = padding;
  this.items = new Array();
  this.created = false;
  this.fgColor = "#000000";
  this.bgColor = "#FFFFFF";
  this.bdColor = "#000000";
  this.fontFace = "Arial,Helvetica";
  this.fontSize = "2";
  this.align = align;
  this.speed = 50;
  this.pauseTime = 0;
  this.setColors = scrollerSetColors;
  this.setFont = scrollerSetFont;
  this.setSpeed = scrollerSetSpeed;
  this.setPause = scrollersetPause;
  this.addItem = scrollerAddItem;
  this.create = scrollerCreate;
  this.show = scrollerShow;
  this.hide = scrollerHide;
  this.moveTo = scrollerMoveTo;
  this.moveBy = scrollerMoveBy;
  this.getzIndex = scrollerGetzIndex;
  this.setzIndex = scrollerSetzIndex;
  this.stop = scrollerStop;
  this.start = scrollerStart;
  this.itemHeight = 40;
}

function scrollerSetColors(fgcolor, bgcolor, bdcolor) {

  if (this.created) {
    alert("Scroller Error: Scroller has already been created.");
    return;
  }
  this.fgColor = '';//fgcolor;
  this.bgColor = '';//bgcolor;
  this.bdColor = '';//bdcolor;
}

function scrollerSetFont(face, size) {

  if (this.created) {
    alert("Scroller Error: Scroller has already been created.");
    return;
  }
  this.fontFace = face;
  this.fontSize = size;
}

function scrollerSetSpeed(pps) {

  if (this.created) {
    alert("Scroller Error: Scroller has already been created.");
    return;
  }
  this.speed = pps;
}

function scrollersetPause(ms) {

  if (this.created) {
    alert("Scroller Error: Scroller has already been created.");
    return;
  }
  this.pauseTime = ms;
}

function scrollerAddItem(str) {

  if (this.created) {
    alert("Scroller Error: Scroller has already been created.");
    return;
  }
  this.items[this.items.length] = str;
}

function scrollerCreate() {

  var start, end;
  var str;
  var i, j;
  var x, y;

//  if (!isMinNS4 && !isMinIE4)
//    return;

  if (scrollerList.length == 0)
    setInterval('scrollerGo()', scrollerInterval);

   if (this.created) {
    alert("Scroller Error: Scroller has already been created.");
    return;
  }
  this.created = true;
  
  // si il y a plus de 4 elements on copie les 4 premiers en fin pour ne pas avoir de blancs
  if (this.items.length > 4)
  {
	this.items[this.items.length] = this.items[0];
	this.items[this.items.length] = this.items[1];
	this.items[this.items.length] = this.items[2];
	this.items[this.items.length] = this.items[3];
  }

  start = '<table border="0"'
        + ' cellpadding="' + (this.padding + this.border) + '"'
        + ' cellspacing="0"'
        + ' width="' + this.width + '"'
        + ' height="' + this.itemHeight + '">'
        + '<tr><td align="' + this.align + '">'
        + '<font'
        + ' color="' + this.fgColor + '"'
        + ' face="' + this.fontFace + '"'
        + ' size="' + this.fontSize + '">';
  end   = '</font></td></tr></table>';

  if (isNS) { // NETSCAPE
    this.baseLayer = new Layer(this.width);
    this.scrollLayer = new Layer(this.width, this.baseLayer);
    this.scrollLayer.visibility = "inherit";
    this.itemLayers = new Array();
    for (i = 0; i < this.items.length; i++) {
      this.itemLayers[i] = new Layer(this.width, this.scrollLayer);
      this.itemLayers[i].document.open();
      this.itemLayers[i].document.writeln(start + this.items[i] + end);
      this.itemLayers[i].document.close();
      this.itemLayers[i].visibility = "inherit";
    }

    setBgColor(this.baseLayer, this.bdColor);
    setBgColor(this.scrollLayer, this.bgColor);
  }

  else { // IE, MOZILLA
    i = scrollerList.length;

    str = '<div id="scroller' + i + '_baseLayer"'
        + ' onmouseover="pauseScroll();" '
        + ' onmouseout="unpauseScroll();" '
        + ' style="position:absolute;'
        + ' background-color:' + this.bdColor + ';'
        + ' width:' + this.width + 'px;'
        + ' height:' + this.height + 'px;'
        + ' overflow:hidden;'
        + ' visibility:hidden;">\n'
        + '<div id="scroller' + i + '_scrollLayer"'
        + ' style="position:absolute;'
        + ' background-color: ' + this.bgColor + ';'
        + ' width:' + this.width + 'px;'
        + ' height:' + (this.itemHeight * this.items.length) + 'px;'
        + ' visibility:inherit;">\n';
       
    for (j = 0; j < this.items.length; j++) {
      str += '<div id="scroller' + i + '_itemLayers' + j + '"'
          +  ' style="position:absolute;'
          +  ' width:' + this.width + 'px;'
          +  ' height:' + this.itemHeight + 'px;'
          +  ' visibility:inherit;">\n'
          +  start + this.items[j] + end
          +  '</div>\n';
    }
    str += '</div>\n'
        +  '</div>\n';
        

//    if (!isMinIE5) {
//      x = getPageScrollX();
//      y = getPageScrollY();
//      window.scrollTo(getPageWidth(), getPageHeight());
//    }

	if (isMZ) {
		document.body.innerHTML += str;
//		var r = document.createRange();
//		r.setStartAfter(document.body.lastChild);
//		document.body.appendChild(r.createContextualFragment(str));
	}
	else
		document.body.insertAdjacentHTML("beforeEnd", str);

//    if (!isMinIE5)
//      window.scrollTo(x, y);

    this.baseLayer = getLayer("scroller" + i + "_baseLayer");
    this.scrollLayer = getLayer("scroller" + i + "_scrollLayer");
    this.itemLayers = new Array();
    for (j = 0; j < this.items.length; j++)
      this.itemLayers[j] = getLayer("scroller" + i + "_itemLayers" + j);
  }

  moveLayerTo(this.baseLayer, this.x, this.y);
  clipLayer(this.baseLayer, 0, 0, this.width, this.height);
  moveLayerTo(this.scrollLayer, this.border, this.border);
  clipLayer(this.scrollLayer, 0, 0, this.width - 2 * this.border, this.height - 2 * this.border);

  x = 0;
  y = 0;
  for (i = 0; i < this.items.length; i++) {
    moveLayerTo(this.itemLayers[i], x, y);
    clipLayer(this.itemLayers[i], 0, 0, this.width, this.itemHeight);
    y += this.itemHeight;
  }
  

  this.stopped = false;
  this.currentY = 0;
  this.stepY = this.speed / (1000 / scrollerInterval);
  this.stepY = Math.min(this.itemHeight, this.stepY);
  this.nextY = this.itemHeight;
  this.maxY = this.itemHeight * (this.items.length - 4);
  this.paused = false;
  this.counter = 0;

  scrollerList[scrollerList.length] = this;
  
  showLayer(this.baseLayer);
}

function scrollerShow() {

  if (this.created)
    showLayer(this.baseLayer);
}

function scrollerHide() {

  if (this.created)
    hideLayer(this.baseLayer);
}

function scrollerMoveTo(x, y) {

  if (this.created)
    moveLayerTo(this.baseLayer, x, y);
}

function scrollerMoveBy(dx, dy) {

  if (this.created)
    moveLayerBy(this.baseLayer, dx, dy);
}

function scrollerGetzIndex() {

  if (this.created)
    return(getzIndex(this.baseLayer));
  else
    return(0);
}

function scrollerSetzIndex(z) {

  if (this.created)
    setzIndex(this.baseLayer, z);
}

function scrollerStart() {

  this.stopped = false;
}

function scrollerStop() {

  this.stopped = true;
}

var scrollerList     = new Array();
var scrollerInterval = 20;

function scrollerGo() {

  var i;

  for (i = 0; i < scrollerList.length; i++) {
	// On fait tourner le bandeau seulement si il y a plus de 4 elements
	if(scrollerList[i].items.length > 4)
	{
		if (scrollerList[i].stopped);

		//else if (scrollerList[i].paused) {
		//  scrollerList[i].counter += scrollerInterval;
		//  if (scrollerList[i].counter > scrollerList[i].pauseTime)
		//    scrollerList[i].paused = false;
		//}

		else {
		  scrollerList[i].currentY += scrollerList[i].stepY;

		  //if (scrollerList[i].currentY >= scrollerList[i].nextY) {
		  //  scrollerList[i].paused = true;
		  //  scrollerList[i].counter = 0;
		  //  scrollerList[i].currentY = scrollerList[i].nextY;
		  //  scrollerList[i].nextY += scrollerList[i].itemHeight;
		  //}

		  if (scrollerList[i].currentY >= scrollerList[i].maxY) {
		    scrollerList[i].currentY -= scrollerList[i].maxY;
		    scrollerList[i].nextY = scrollerList[i].itemHeight;
		  }
		  
		  scrollLayerTo(scrollerList[i].scrollLayer,
		                0, Math.round(scrollerList[i].currentY),
		                false);
		}
	}
  }
}
