/******************************************************************************
* scroller.js                                                                 *
*                                                                             *
* Copyright 1999 by Mike Hall.                                                *
* Visit http://www.dynamicdrive.com                                           *
* Last update: July 21st, '02 by Dynamic Drive for NS6 functionality.         *
*                                                                             *
* Allows you to create scrolling displays on a page. Multiple scrollers can   *
* be defined, each with it's own parameters and list of items. Item text can  *
* include basic HTML tags, including links and images.                        *
* Note: requires dhtmllib.js.                                                 *
******************************************************************************/

//*****************************************************************************
// Scroller constructor.
//*****************************************************************************

function Scroller(x, y, width, height, border, padding, tempholder) {

	this.x = x;
	this.y = y;
	this.width = width;
	this.height = height;
	this.border = border;
	this.padding = padding;
	this.tempholder = tempholder;

	this.items = new Array();
	this.created = false;

	// Set default colors.
	
	this.fgColor = "#000000";
	this.bgColor = "#ffffff";
	this.bdColor = "#000000";
	
	// Set default font.
	
	this.fontFace = "Arial,Helvetica";
	this.fontSize = "2";
	
	// Set default scroll timing values.
	
	this.speed = 50;
	this.pauseTime = 2000;
	
	// Define methods.
	
	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;
}

//*****************************************************************************
// Scroller methods.
//*****************************************************************************

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,espaco;
	espaco=50;
	if (!isMinNS4 && !ie && !dom)
		return;

	// On first scroller, start interval timer.

	if (scrollerList.length == 0)
		setInterval('scrollerGo()', scrollerInterval);

	// Create the scroller only once.

	if (this.created) {
		alert("Scroller Error: Scroller has already been created.");
		return;
	}
	this.created = true;

	// Copy first item to the end of the list, this lets us scroll from the last
	// defined item to the first without jumping.
	
	this.items[this.items.length] = this.items[0];
	
	// Set up HTML code for item text.
	espaco=this.height-70;
	start = '<table border=0'
        + ' cellpadding=' + (this.padding + this.border)
        + ' cellspacing=0'
        + ' width=' + this.width
        + ' height=' + espaco + '>'
        + '<tr><td>'
        + '<font'
        + ' color="' + this.fgColor + '"'
        + ' face="' + this.fontFace + '"'
        + ' size=' + this.fontSize + '>';
	end   = '</font></td></tr></table>';

	// Build the layers.

	if (isMinNS4) {
		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";
		}

		// Set background colors.
		
		setBgColor(this.baseLayer, this.bdColor);
		setBgColor(this.scrollLayer, this.bgColor);
	}

	if (ie||dom) {
		i = scrollerList.length;
		str = '<div id="scroller' + i + '_baseLayer"'
	        + ' 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.height * 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.height + 'px;'
				+  ' visibility:inherit;">\n'
				+  start + this.items[j] + end
				+  '</div>\n';
		}
		str += '</div>\n'
        	+  '</div>\n';

		// Insert HTML code at end of page. For IE4, need to scroll window to
		// end of page, insert and scroll back to correct bug.

		if (!(ie&&window.print)) {
			x = getPageScrollX();
			y = getPageScrollY();
			window.scrollTo(getPageWidth(), getPageHeight());
		}
		
		if (ie)
			eval('document.all.' + this.tempholder + '.innerHTML=str')
		else if (dom)
			eval('document.getElementById("' + this.tempholder + '").innerHTML=str')
			//EDIT HERE//////////////////////////////////////////////////////////////////////////////
		
		if (!(ie&&window.print))
      		window.scrollTo(x, y);

    	// Get handles to each layer.

	    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);
  	}

	// Position and clip base and scroll layers.
	
	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);

	// Position and clip each item layer.

	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.height);
		y += this.height;
	}

	// Set up scrolling parameters.

	this.stopped = false;
	this.currentY = 0;
	this.stepY = this.speed / (1000 / scrollerInterval);
	this.stepY = Math.min(this.height, this.stepY);
	this.nextY = this.height;
	this.maxY = this.height * (this.items.length - 1);
	this.paused = true;
	this.counter = 0;

	// Add to global list.

	scrollerList[scrollerList.length] = this;

	// Display it.

	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;
}

//*****************************************************************************
// Code for scrolling.
//*****************************************************************************

// An array is used to hold a pointer to each scroller that is defined. The
// scrollerGo() function runs at regular intervals and updates each scroller
// in this list.

var scrollerList     = new Array();
var scrollerInterval = 20;

function scrollerGo() {

  var i;

  // Update each scroller object in the list.

  for (i = 0; i < scrollerList.length; i++) {

    // If stopped, skip.

    if (scrollerList[i].stopped);

    // If paused, update counter.

    else if (scrollerList[i].paused) {
      scrollerList[i].counter += scrollerInterval;
      if (scrollerList[i].counter > scrollerList[i].pauseTime)
        scrollerList[i].paused = false;
    }

    // Scroll it.

    else {
      scrollerList[i].currentY += scrollerList[i].stepY;

      // Pause it if the next item has scrolled into view.

      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].height;
      }

      // When we reach the end, start over.

      if (scrollerList[i].currentY >= scrollerList[i].maxY) {
        scrollerList[i].currentY -= scrollerList[i].maxY;
        scrollerList[i].nextY = scrollerList[i].height;
      }

      scrollLayerTo(scrollerList[i].scrollLayer,
                    0, Math.round(scrollerList[i].currentY),
                    false);
    }
  }
}

	//*****************************************************************************
	// Code to handle a window resize.
	//*****************************************************************************
	
	// These variables are used to determine if a resize event is a true one.
	// Necessary due to a bug in older NS4 releases.

	var origWidth;
	var origHeight; 
	var origWidthAll = window.innerWidth;
	// Fix for resize bug.

	if (isMinNS4) {
		origWidth  = window.innerWidth;
		origHeight = window.innerHeight;
	}
	//window.onresize = scrollerReload;
	addEvent(window, 'resize', scrollerReload, false, true); 



function scrollerReload() {
	// Reload page in case of a browser resize. First make sure it's a true
	// resize.

	if (isMinNS4 && origWidth == window.innerWidth && origHeight == window.innerHeight)
		return;	
     
    // para evitar o reload da página há que fazer o reposicionamento da layer 'manualmente' 
    reload();
    
    /*
  	window.location.href = window.location.href;
  	*/
}

