/**************************************************************************************************************
JAVASCRIPT SCROLLER v 1.0c (by B&W)

PER UTILIZZARE LO SCROLLER OCCORRE: 
1) includere il js
	<script language="Javascript" type="text/javascript" src="js/scroller.js"></script>

2) Creare gli oggetti scroller (sotto alla riga del punto 1) e definire le proprietą di scrolling
	var OScroller01 = new CScroller("scroller01")					// ID del DIV che contiene lo scroller
	OScroller01.nShiftTop = 1;														// Quantitą di cui si sposta a alto (opzionale)
	... (vedi le prime righe di CScroller)

3) Piazzare una tabella delle dimensione giusta con un div altrettato grande con id che conterranno gli scroller con overflow:hidden e altezza e larghezza fissi
	<table width="250" height="112"><tr><td><div id="scroller01" style="height: 112px; width: 250px; overflow:hidden;"></div></td></tr></table>

4) Inserire dei tag <a name="break####"></a> nei punti dove si vuole che lo scroller faccia una pausa:
		- #### sono i millisecondi di pausa
		- in firefox il punto di break si riferisce alla cella parent e non direttamente al div quindi occhio a dove si posiziona l'anchor!!

5) Se si vuole usare lo scrolling orizzontale occorre inserire nel div un'immagine anche trasparente della larghezza dello scroller interno

NB: Attenzione il contenuto del div deve essere pił grande del div stesso nella direzione di scrolling
**************************************************************************************************************/

AScrollersHolder = new Array();

function CScroller(sScroller_DIVID)
{
// PARAMETRI PERSONALIZZABILI ************************************************************
	this.nShiftTop = 1;															// SOLO VERSO L'ALTO PER ORA
	this.nShiftLeft = 0;														// ANCORA NON VA
	this.nWaitInterval = 20;												// Intervallo di tempo fra gli spostamenti
	this.nFirstStopInterval = 0;										// Pausa iniziale prima dello scorrimento
	this.BPauseOnMouseOver = true;									// Si deve pausare onmouseover ?
	
// FINE PARAMETRI PERSONALIZZABILI ************************************************************

// Private variables
	this.id = "OScr_" + sScroller_DIVID
	this.DIVID = sScroller_DIVID;
	this.initScroller = initScroller;
	this.Top = 0;
	this.Left = 0;
	this.LastStop = 0;
	this.BPause = false;
	this.ABreaksPos = new Array();
	this.ABreaksLen = new Array();
	
	AScrollersHolder[AScrollersHolder.length]	= this;
}

function initScroller(iScroller)
{
	this.OScrollerDIV = document.getElementById(this.DIVID);

	if (this.OScrollerDIV)
	{
// Determino i punti dove ci sono  elementi break
		for (i = 0; i < document.anchors.length; i++)
			if (document.anchors[i].name.substr(0, 5) == "break") initScroller_findbreaks(this, document.anchors[i], document.anchors[i]);
				
		sInnerHTML = this.OScrollerDIV.innerHTML.replace(/^\s+|\s+$/g, "");

// Quadruplico gli elementi per fare anche lo spastamento orizzontale		
		sNewInnerHTML = '<table id="' + this.DIVID + '_cell" border="0" cellspacing="0" cellpadding="0" onmouseover="pauseScroller(' + iScroller + ', true);" onmouseout="pauseScroller(' + iScroller + ', false);"><tr><td>' + sInnerHTML + '</td>';
		if (this.nShiftLeft != 0) sNewInnerHTML += '<td>' + sInnerHTML + '</td>';
		sNewInnerHTML += '</tr><tr><td>' + sInnerHTML + '</td>';
		if (this.nShiftLeft != 0) sNewInnerHTML += '<td>' + sInnerHTML + '</td>';
		sNewInnerHTML += '</tr></table>'
		this.OScrollerDIV.innerHTML = sNewInnerHTML;

// Reset
		this.OScrollerDIV.scrollTop = 0;

		this.nTurnOverHeight = document.getElementById(this.DIVID + '_cell').scrollHeight / 2;

		setTimeout("scrollScroller(" + iScroller + ")", this.nFirstStopInterval)
	}
}

// Funzione ricorsiva che naviga in tutti gli elementi del DIV per trovare i break;
function initScroller_findbreaks(OScr, OAnc, ObjCur)
{
	if (OAnc.offsetTop == undefined) return;
	
	if (ObjCur.id == OScr.DIVID)
	{		
// Ho trovato un punto di brek per questo scroller
		OScr.ABreaksPos[OScr.ABreaksPos.length] = OAnc.offsetTop;	
		
		if (!isNaN(parseInt(OAnc.name.substr(5))))
			OScr.ABreaksLen[OScr.ABreaksLen.length] = parseInt(OAnc.name.substr(5));	
		else
			OScr.ABreaksLen[OScr.ABreaksLen.length] = 2000;	
	}
	else	
		if (ObjCur.parentNode)
			initScroller_findbreaks(OScr, OAnc, ObjCur.parentNode)
}

function scrollScroller(iScroller)
{
	OScr = AScrollersHolder[iScroller]

	nInterval = OScr.nWaitInterval;

	if (!OScr.BPause || !OScr.BPauseOnMouseOver)
	{
// Sposto l'elemento
		OScr.Top = OScr.Top + OScr.nShiftTop;
		if (OScr.Top >= OScr.nTurnOverHeight) 
			OScr.Top = 0;
		if (OScr.Top < 0) 
			OScr.Top = OScr.nTurnOverHeight + OScr.nShiftTop;
		OScr.OScrollerDIV.scrollTop = OScr.Top;
		
		if (OScr.nShiftTop > 0)
		{
			for (i = 0; i < OScr.ABreaksPos.length; i++)
				if ((OScr.Top >= OScr.ABreaksPos[i]) && (OScr.Top < OScr.ABreaksPos[i] + OScr.nShiftTop))
					nInterval = OScr.ABreaksLen[i];
		}

		if (OScr.nShiftTop < 0)
		{
			for (i = 0; i < OScr.ABreaksPos.length; i++)
				if ((OScr.Top <= OScr.ABreaksPos[i]) && (OScr.Top > OScr.ABreaksPos[i] + OScr.nShiftTop))
					nInterval = OScr.ABreaksLen[i];
		}
	}


/*	
		BIntervallo = false
		if (OScr.nShiftTop > 0) 
		{
			nNextStop = OScr.LastStop + OScr.nStopEveryPx;
			if (nNextStop >= OScr.nTurnOverHeight) 
			{			
				nNextStop = 0;
				if (OScr.Top < OScr.LastStop) BIntervallo = true;
			}
			else
				if (OScr.Top >= nNextStop) BIntervallo = true;
		}
		
		if (OScr.nShiftTop < 0) 
		{
			nNextStop = OScr.LastStop - OScr.nStopEveryPx;
			if (nNextStop < 0) 
			{
				nNextStop = OScr.nTurnOverHeight - OScr.nStopEveryPx;
				if (OScr.Top > OScr.LastStop) BIntervallo = true;
			}
			else
				if (OScr.Top < nNextStop) BIntervallo = true;
		}
	
		if (BIntervallo && OScr.nStopEveryPx > 0) 	
		{
			nInterval = OScr.nStopInterval;
			OScr.LastStop = nNextStop;
		}		
	}
*//*	
	if ((OScr.Top >= document.getElementById("break6000").offsetTop) && (!OScr.BAlredy)) 
	{
		alert(document.getElementById("break6000").offsetTop);
		OScr.BAlredy = true;
		nInterval = OScr.nStopInterval;
	}
	else
		nInterval = OScr.nWaitInterval;
*/		
//	alert(document.getElementById("break01").offsetTop);
	setTimeout("scrollScroller(" + iScroller + ")", nInterval)
}
function pauseScroller(iScroller, BPause)
{
	AScrollersHolder[iScroller].BPause = BPause;
}

function onLoadScrollers()
{
// Inizializzo gli scrollers
	for (iScroller in AScrollersHolder)
		AScrollersHolder[iScroller].initScroller(iScroller);
}
	
if (window.addEventListener) 
	window.addEventListener("load", onLoadScrollers, false);
else if (window.attachEvent) window.attachEvent("onload", onLoadScrollers);