﻿/*********************************************
 *
 *  Funzioni per lo scroll di liste di oggetti:
 *  Autore: Roberto Roncato & Simone Longo
 *  Copyright: Softimax 2010
 * 
 *  Versione 1: 02/02/2010
 *
 *********************************************
 
Needs:
    Questa libreria dipende dalla presenza di MovingObjects.js


Usage:

    SO_SetVerticalParams(idContainer, idContent, idScrollUp, idScrollDown, verticalStep, useAnimation)
    
        Note:
            idContent è un oggetto che può muoversi dentro all'oggetto idContainer
                E' necessario che entrambi gli oggetti abbiano style.height assegnato prima di chiamare
                questa funzione
            idScrollUp e idScrollDown sono i cursori (di solito immagini) che effettuano lo scroll
                la funzione si occupa già di assegnare gli eventi ai cursori, per cui non è necessario
                fare nulla via JavaScript nella pagina ospitante.
            verticalStep
                indica quanto deve essere lo spostamento di idContent ad ogni pressione di uno dei cursori
            useAnimation
                se vale 1 (come numero e non '1' come stringa) indica che lo spostamento di idContent
                verrà fatto utilizzando la libreria MovingObjects. E' possibile definire i parametri di
                MovingObjects all'esterno di questa funzione

    SO_UpdateHeights(idContainer)
        
        Serve per aggiornare le altezze di Container e di Content, di conseguenza potranno essere
        anche disabilitati i cursori.

Library for external use:
    
    SO_VerticalParams[idContainer]["contentVerticalOffset"]        
        indica l'attuale offset dell'oggetto idContent all'interno di idContainer
        
*/



var SO_VerticalParams = new Array();

function SO_SetVerticalParams(idContainer, idContent, idScrollUp, idScrollDown, verticalStep, useAnimation)
{   
    SO_VerticalParams[idContainer] = new Array();
    SO_VerticalParams[idContainer]["idContainer"] = idContainer;
    SO_VerticalParams[idContainer]["idContent"] = idContent;
    SO_VerticalParams[idContainer]["idScrollUp"] = idScrollUp;
    SO_VerticalParams[idContainer]["idScrollDown"] = idScrollDown;
    SO_VerticalParams[idContainer]["verticalStep"] = verticalStep;
    SO_VerticalParams[idContainer]["useAnimation"] = useAnimation;    
    SO_VerticalParams[idContainer]["contentVerticalOffset"] = 0;

    SO_UpdateHeights(idContainer, idContent);
}
function SO_UpdateHeights(idContainer)
{
    var obj = document.getElementById(idContainer);
    var containerHeight = parseInt(obj.style.height);
    SO_VerticalParams[idContainer]["containerHeight"] = containerHeight;
    
    var idContent = SO_VerticalParams[idContainer]["idContent"];
    obj = document.getElementById(idContent);
    var contentHeight = parseInt(obj.style.height);
    if (isNaN(contentHeight) && obj.offsetHeight != 0)    
        contentHeight = obj.offsetHeight;
    SO_VerticalParams[idContainer]["contentHeight"] = contentHeight;

    var scrollDisabled = (contentHeight<=containerHeight);

    var idScrollUp=SO_VerticalParams[idContainer]["idScrollUp"];
    obj = document.getElementById(idScrollUp);
    if (scrollDisabled)
        obj.style.display = 'none';
    else {
        obj.style.display = 'block';
        obj.onclick = function() { SO_ScrollUp(idContainer) };
    }

    var idScrollDown = SO_VerticalParams[idContainer]["idScrollDown"];
    obj = document.getElementById(idScrollDown);
    if (scrollDisabled)
        obj.style.display = 'none';
    else {
        obj.style.display = 'block';
        obj.onclick = function() { SO_ScrollDown(idContainer) };
    }
}

function SO_ScrollDown(idContainer)
{
    var offset = SO_VerticalParams[idContainer]["contentVerticalOffset"];
    offset -= SO_VerticalParams[idContainer]["verticalStep"];
    var maxOffset = SO_VerticalParams[idContainer]["containerHeight"] - SO_VerticalParams[idContainer]["contentHeight"];
    if (offset<maxOffset) offset=maxOffset;
    
    SO_SetNewVerticalOffset(idContainer, offset)
}
function SO_ScrollUp(idContainer)
{
    var offset = SO_VerticalParams[idContainer]["contentVerticalOffset"];
    offset += SO_VerticalParams[idContainer]["verticalStep"];
    if (offset>0) offset=0;
    
    SO_SetNewVerticalOffset(idContainer, offset)
}

function SO_SetNewVerticalOffset(idContainer, newOffset)
{
    SO_VerticalParams[idContainer]["contentVerticalOffset"] = newOffset;
    if (SO_VerticalParams[idContainer]["useAnimation"])
    {        
        MO_MoveObjTo(SO_VerticalParams[idContainer]["idContent"], -1, newOffset, -1, -1, -1);
    }
    else
    {
        var obj = document.getElementById(SO_VerticalParams[idContainer]["idContent"]);
        obj.style.top = newOffset + 'px';    
    }
}


