var textSpeed = 30;
var slideSpeed = 10;
var slideInterval = 14000;

var annotations = new Array(nSlides);

var activeSlide = 0;
var startY = 0;
var stepY = 0;
var stopY = 0;
var textTimeoutID = 0;
var slideTimeoutID = 0;
var autoTimeoutID = 0;
var autoSlide=false;
var hasTextAnimation=false;

function advanceSlide(sDirection)
{
    switch (sDirection)
    {
        case "next":
        {
            activeSlide++;
            if (activeSlide==nSlides)
                document.getElementById('btnNext').disabled=true;
            if (document.getElementById('btnPrev').disabled && activeSlide>1)
                document.getElementById('btnPrev').disabled=false; 
            break;
        }
        case "prev":
        {
            activeSlide--;
            if (activeSlide==1)
                document.getElementById('btnPrev').disabled=true;
            if (document.getElementById('btnNext').disabled)
                document.getElementById('btnNext').disabled=false; 
            break;
        }
        case "stop":
        {
            window.clearTimeout(autoTimeoutID);
            autoSlide=false;
            if (activeSlide>1)
                document.getElementById('btnPrev').disabled=false;
            if (activeSlide<nSlides)
                document.getElementById('btnNext').disabled=false;

            document.getElementById('btnAuto').disabled=false;
            document.getElementById('btnStop').disabled=true; 
            window.clearTimeout(textTimeoutID);
            document.getElementById('annotation').innerHTML=annotations[activeSlide];
            break;
        }
        case "auto":
        {
            autoSlide=true;
            document.getElementById('btnPrev').disabled=true;
            document.getElementById('btnNext').disabled=true;
            document.getElementById('btnAuto').disabled=true;
            document.getElementById('btnStop').disabled=false; 
            break;
        }
    }
    prepareSlide();
}

function prepareSlide()
{
    var ot = document.getElementById('slideCarousel');
    if (autoSlide)
    {
        activeSlide++;
        if (activeSlide>nSlides)
        {
            ot.style.left="" + eval(-290*nSlides) + "px";
            activeSlide=1;
        }
    }
    
    startY = parseInt(ot.style.left);
    if (isNaN(startY))
    {
        startY=-imageWidth*nSlides;
    }
    
    stopY = (nSlides-activeSlide)*(-imageWidth);
    stepY = slideSpeed;
    if (stopY<startY)
    {
        stepY= -stepY
    }
    
    if (Math.abs(stopY-startY)<=Math.abs(stepY))
    {
        return;
    }
    
    startY = startY+stepY;
    doSlide();
    window.clearTimeout(textTimeoutID);
    timedText(activeSlide,0);
    document.getElementById('imgcounter').innerHTML="Slide " + activeSlide + " of " + nSlides;
}

function doSlide()
{
    var ot = document.getElementById('slideCarousel');
    ot.style.left = '' + startY + 'px'; 
    
    if (Math.abs(stopY-startY)<=Math.abs(stepY))
    {
        ot.style.left = '' + stopY + 'px';
    }
    else
    {
        startY = startY+stepY;
        slideTimeoutID=window.setTimeout ("doSlide();",20);
    }
}

function setup()
{
    var ot = document.getElementById('slideCarousel');
    //alert(ot.style.width);
    ot.cellSpacing="0px";
    ot.cellPadding="0px";
    ot.style.left="" + eval(-imageWidth*nSlides) + "px";
}

// Display text using a type-writer effect (flickers terribly in Mozilla)
function timedText(s, n)
{
    var oAnnotation = document.getElementById('annotation');
    if (hasTextAnimation)
    {
        if (n<annotations[s].length)
        {
            oAnnotation.innerHTML=annotations[s].substring(0,n)+" *";
            textTimeoutID = window.setTimeout ("timedText("+s+","+(n+1)+");",textSpeed);
        }
        else
        {
            oAnnotation.innerHTML=annotations[s];
            if (autoSlide) 
            {
                autoTimeoutID=window.setTimeout("prepareSlide();",slideInterval);
            }
        }
    }
    else
    {
        oAnnotation.innerHTML=annotations[s];
        if (autoSlide)
        {
            autoTimeoutID=window.setTimeout("prepareSlide();",slideInterval);
        }
    }
}

// Toggles the text animation on or off
function toggleText()
{
    if (hasTextAnimation)
    {
        hasTextAnimation=false;
        slideInterval += 2000;
    }
    else
    {
        hasTextAnimation=true;
        slideInterval -= 2000; 
    }
}
