function slideshow(name, parent, nickname, data, autoPlay, delay)
{
    this.name = name;
    this.parent = document.getElementById(parent);
    this.nickname = nickname;
    this.data = data;
    this.autoPlay = autoPlay;
    this.delay = delay;
    
    var timer;
    var N = data.length;
    var currentSlide = 0;
    
    var title,text,image;
    
    this.parent.innerHTML = '';
    for (i=0; i<N; i++)
    {
        title = data[i][0];
        text = data[i][1];
        image = data[i][2];
        
        slide = document.createElement('DIV');
        slide.id = '' + nickname + i;
        if (i != 0) slide.style.display = 'none';
        
        slide.innerHTML +=  image;
        slide.innerHTML += '<h3>' + title + '</h3>';
        slide.innerHTML += '<p>' + text + '</p>';
        
        this.parent.appendChild(slide);
    }
    
    nav = document.createElement('P');
    nav.id = '' + nickname + 'Nav';
    nav.className = 'slideshowNav';
    nav.innerHTML += '<a href="#" class="back_slideshow" onclick="'+name+'.pause(); return '+name+'.back();">Back</a>';
    for (i=0; i<N; i++)
    {
        nav.innerHTML += '<a id="'+nickname+'Nav'+i+'" href="#" onclick="return '+name+'.show1('+i+');">' + (i+1) + '</a>';
    }
    nav.innerHTML += '<a class="next_slideshow" href="#" onclick="'+name+'.pause(); return '+name+'.next();"></a>';
    nav.innerHTML += '<a class="play_slideshow" href="#" onclick="return '+name+'.play();" id="'+name+'Play">Play</a>';
    nav.innerHTML += '<a class="pause_slideshow" href="#" onclick="return '+name+'.pause();" id="'+name+'Pause" style="display:none;">Pause</a>';
    this.parent.appendChild(nav);
    document.getElementById(nickname+'Nav0').className = 'selected';
    
    this.show = function(n)
    {
        /*
        if (n!=currentSlide)
        {
            currentSlideID = '' + nickname + currentSlide;
            Effect.Fade(currentSlideID, {queue: 'front'});
            newSlideID = '' + nickname + n;            
            Effect.Appear(newSlideID, {queue: 'end'});
            document.getElementById(nickname+'Nav'+currentSlide).className = '';
            document.getElementById(nickname+'Nav'+n).className = 'selected';
            currentSlide = n;
        }
        return false;
        */
        if (n!=currentSlide)
        {
            // hide current slide
            currentSlideID = '' + nickname + currentSlide;
            animateOpacity(currentSlideID, 100, 0, 800);
            setTimeout("hide('"+currentSlideID+"')",800);
            
            // show new slide
            newSlideID = '' + nickname + n;
            animateOpacity(newSlideID, 0, 100, 900);
            setTimeout("show('"+newSlideID+"')",800); // delay to reduce flicker
            
            // update nav highlight states
            document.getElementById(nickname+'Nav'+currentSlide).className = '';
            document.getElementById(nickname+'Nav'+n).className = 'selected';
            
            currentSlide = n;
        }
        return false;
    }
    
    this.show1 = function(n)
    {
        this.show(n);
        this.pause();
        return false;
    }
    
    this.back = function()
    {
        x = currentSlide -1;
        if (x < 0) x = N-1;
        this.show(x);
        return false;
    }
    
    this.next = function()
    {
        x = currentSlide + 1;
        if (x >= N) x = 0;
        this.show(x);
        return false;
    }
    
    this.play = function()
    {
        str = name + '.next()';
        timer = setInterval(str,delay);
        document.getElementById(name+'Play').style.display = 'none';
        document.getElementById(name+'Pause').style.display = 'inline';
        return false;
    }
    
    this.pause = function()
    {
        clearInterval(timer);
        document.getElementById(name+'Play').style.display = 'inline';
        document.getElementById(name+'Pause').style.display = 'none';
        return false;
    }
    
    if (autoPlay)
    {
        this.play();
    }
    else
    {
        n = Math.floor(Math.random()*N);
        this.show(n);
    }
}

function animateOpacity(id, opacStart, opacEnd, millisec)
{
    var skip = 5;
    var speed = Math.round((millisec / 100) * skip);
    var timer = 0;
    
    //determine the direction for the blending, if start and end are the same nothing happens
    if(opacStart > opacEnd)
    {
        for (i = opacStart; i >= opacEnd; i-=skip)
        {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    }
    else if(opacStart < opacEnd)
    {
        for (i = opacStart; i <= opacEnd; i+=skip)
        {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    }
}

//change the opacity for different browsers
function changeOpac(opacity, id)
{
    var object = document.getElementById(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = (opacity < 100 ? "alpha(opacity=" + opacity + ")" : "none");
}

function show(id)
{
    document.getElementById(id).style.display = 'block';
}
function hide(id)
{
    document.getElementById(id).style.display = 'none';
}