var carousel, index = 0, duration = 0.4;

document.observe('dom:loaded', function() {
    carousel = $$('div[rel=carousel]');

    carousel.without(carousel.first()).each(function(div) {
        div.hide();
    });

    carousel.without(carousel.first(), carousel.last()).each(function(div) {
        appendNewline(div);
        appendPrev(div);
        appendDivider(div);
        appendNext(div);
    });
    
    if (carousel.size()) {
        var div;
        if (div = carousel.first()) {
            appendNewline(div);
            appendNext(div);
        }    
        if (div = carousel.last()) {
            appendNewline(div);
            appendPrev(div);
        }
    }
} );

function appendNewline(div) {
    div.appendChild(Builder.node('br'));    
}

function appendNext(div) {
    appendLink(div, 'next', 'Next');
}

function appendPrev(div) {
    appendLink(div, 'prev', 'Previous');
}

function appendLink(div, type, text) {
    var link = Builder.node('a', {href: '#'}, [text]);
    switch (type) {
        case 'next' :    
            link.observe('click', function(event) { 
                event.stop(); 
                next();
            });
            break;
        case 'prev' :    
            link.observe('click', function(event) { 
                event.stop(); 
                prev();
            });
            break;
    }
    div.appendChild(link);
}

function appendDivider(div) {
    div.appendChild(document.createTextNode(' | '));
}

function prev() {
    if (carousel[index] != carousel.first()) {        
        Effect.Fade(carousel[index--], {
            afterFinish: appear,
            duration: duration
        });    
    }
}

function next() {
    if (carousel[index] != carousel.last()) {
        Effect.Fade(carousel[index++], {
            afterFinish: appear,
            duration: duration
        });   
    }
}

function appear() {
    Effect.Appear(carousel[index], {
        duration: duration
    });
}
