/*
MODO DE USO:
scroll(containerId, divsIdPrefix, scrollingSpeed, pauseBetweenItems), donde:
containerId ... El ID del
donde se presentara la info
(por ejemplo: "miScroller")
divsIdPrefix ... El prefijo del ID de los
con la informacion a ser presentada
scrollingSpeed ... La velocidad de scrolling (mayor el numero, mayor la velocidad)
pauseBetweenItems ... El numero de segundos que deseamos congelar el scroll cada vez
que un item llega al tope del contenedor.
Ejemplo:
scroll('container', 'item', 5, 2);
*/
function pause(numberMillis) {
var now = new Date();
var exitTime = now.getTime() + numberMillis;
while (true) {
now = new Date();
if (now.getTime() > exitTime)
return;
}
}
//var refresh;
var isScrollingPaused = false;
function toogleScrolling() {
isScrollingPaused = !isScrollingPaused;
}
function initializeScroll(containerId, divsIdPrefix, spacingBetweenItems) {
var items = getItemsByIdKey(divsIdPrefix);
var container = document.getElementById(containerId);
container.onmouseover = toogleScrolling;
container.onmouseout = toogleScrolling;
if (container == null) {
return false;
}
var containerHeight = container.offsetHeight;
var cumulOffset = containerHeight;
for (var i = 0; i < items.length; i++) {
var item = items[i];
item.style.top = (cumulOffset) + "px";
cumulOffset = cumulOffset + spacingBetweenItems + item.offsetHeight;
}
return true;
}
function getItemsByIdKey(divsIdKey) {
var itemCount = 0;
var outArray = new Array();
while (document.getElementById(divsIdKey+itemCount) != null) {
outArray[itemCount] = document.getElementById(divsIdKey + itemCount);
itemCount++
}
return outArray;
}
function scrollingEngine(containerId, divsIdPrefix, scrollingSpeed, stopNPixelsBeforeBorder, pauseBetweenItems, spacingBetweenItems, invisibleItemsCount) {
if (!isScrollingPaused) {
var items = getItemsByIdKey(divsIdPrefix);
if (items.length == invisibleItemsCount) {
// Ya mostramos todos, volvemos a comenzar
initializeScroll(containerId, divsIdPrefix, spacingBetweenItems);
invisibleItemsCount = 0;
} else {
var mustPause = false;
for (var i = 0; i < items.length; i++) {
var item = items[i];
var currentTop = parseInt(item.style.top);
var newValue = eval(currentTop) - 1;
item.style.top = newValue + "px";
if (newValue == stopNPixelsBeforeBorder) {
// Pausa entre items
//pause(pauseBetweenItems * 1000);
mustPause = true;
} else if (newValue == (0 - item.offsetHeight)) {
invisibleItemsCount++;
}
}
if (mustPause) {
toogleScrolling();
setTimeout("toogleScrolling();", pauseBetweenItems * 1000);
}
}
}
// Controlamos la velocidad de Scrolling
// controlando el intervalo entre invocaciones
//refresh = setTimeout("scrollingEngine('" + containerId + "', '" + divsIdPrefix + "', " + scrollingSpeed + ", " + stopNPixelsBeforeBorder + ", " + pauseBetweenItems + ", " + invisibleItemsCount+")", 120 / scrollingSpeed);
setTimeout("scrollingEngine('" + containerId + "', '" + divsIdPrefix + "', " + scrollingSpeed + ", " + stopNPixelsBeforeBorder + ", " + pauseBetweenItems + ", " + spacingBetweenItems + ", " + invisibleItemsCount+")", 120 / scrollingSpeed);
}
function launchScroll(containerId, divsIdPrefix, scrollingSpeed, pauseBetweenItems, spacingBetweenItems) {
if (initializeScroll(containerId, divsIdPrefix, spacingBetweenItems)) {
scrollingEngine(containerId, divsIdPrefix, scrollingSpeed, 2, pauseBetweenItems, spacingBetweenItems, 0);
} else {
alert("ERROR: no se pudo inicializar el scroller");
}
}
function scroll(containerId, divsIdPrefix, scrollingSpeed, pauseBetweenItems, spacingBetweenItems) {
if (scrollingSpeed == null) {
scrollingSpeed = 5;
}
if (pauseBetweenItems == null) {
pauseBetweenItems = 0;
}
if (spacingBetweenItems == null) {
spacingBetweenItems = 0;
}
// Retrasamos el lanzamiento un poco
// para evitar problema de carga de
// la pagina de IE
setTimeout("launchScroll('" + containerId + "', '"+ divsIdPrefix + "', " + scrollingSpeed + ", " + pauseBetweenItems + ", " + spacingBetweenItems + ")", 150);
}