var onSeek = undefined;

var container;
var previousNav;
var nextNav;
var currentPage;
var totalPages;
var pageWidth;
var pageHeight;
var scrollHorizontal = true;
var autoScrollInterval;

function createAutoscroll(containerSelector, previousClass, nextClass, pageClass) {
    // check if there is only one container, only one element for previous page, only one element for next page
    if ($(containerSelector).length != 1 ||
        $(previousClass).length != 1 || 
        $(nextClass).length != 1) return;
    
    // Get the container
    container = $(containerSelector);
    
    // Get the element for previous page
    previousNav = $(previousClass);
    previousNav.click(prev);

    // Get the element for next page
    nextNav = $(nextClass);
    if (totalPages == 1) {
        nextNav.addClass('disabled');
    }
    else {
        nextNav.removeClass('disabled');
    }
    nextNav.click(next);
    
    // set current page
    currentPage = 0;

    // set page width, needed for paging and animation
    pageWidth = parseInt($(pageClass).width());
    pageHeight = parseInt($(pageClass).height());

    if (autoScrollInterval != undefined) {
        setInterval(next, autoScrollInterval);
    }
}

function next() {
    seekTo(currentPage + 1);
}

function prev() {
    seekTo(currentPage - 1);
}

function seekTo(pageNumber) {
    if (pageNumber == totalPages) {
        currentPage = 0;
    }
    else {
        currentPage = pageNumber;
    }
    
    if (scrollHorizontal) { 
        container.animate({'margin-left': ( - currentPage * pageWidth).toString() + 'px'}, 200);
    }
    else { 
        container.animate({'margin-top': (- currentPage * pageHeight).toString() + 'px'}, 200);
    }

    if (totalPages > 1 && currentPage + 1 < totalPages) { nextNav.removeClass('disabled'); }
    else { nextNav.addClass('disabled'); }
    if (currentPage > 0) { previousNav.removeClass('disabled'); }
    else { previousNav.addClass('disabled'); }

    if (pageNumber < 0) {
        return;
    }

    if (onSeek != undefined) {
        onSeek();
    }
}
