﻿function SetupPaging() {
    $("[id^='pageLinks_']").each(function(i) {
        var divId = this.getAttribute('id');
        var year = divId.substring(divId.lastIndexOf('_') + 1, divId.length);

        var currentPage = currentPages[year];
        var totalPages = pageCounts[year];
        var challengeId = challengeIds[year];

        // These params control output of pager.  i.e. prev | 1 | 2 | 3 ... 19 | 20 | 21 | 22 | 23 ... 97 | 98 | 99
        var pagesAtStart = 1;
        var pagesInMiddle = 3; // This should be an odd number so that the selected page is always in the middle.
        var pagesAtEnd = 1;

        var middleStartIndex = currentPage - Math.floor(pagesInMiddle / 2);
        var middleEndIndex = middleStartIndex + pagesInMiddle - 1;
        var endStartIndex = totalPages - pagesAtEnd + 1;
        
//        var showPreviousLink = currentPage > 1;
//        var showNextLink     = currentPage < totalPages;
        var showPreviousLink = true;
        var showNextLink     = true;
        
        $(this).empty();

        if (showPreviousLink) {
            $(this).append('<li class="first-child"><a class="previous" href="#" onclick=\"LoadMore(' + challengeIds[year] + ',' + Math.max(currentPage - 1, 1) + ',' + year + '); return false;\">Prev</a></li>');
        }

        if (totalPages < (pagesAtStart + pagesInMiddle + pagesAtEnd)) {
            // Few pages so no spacers / jumprs required. Render a straight list of all pages.
            RenderPagingElements(this, 1, totalPages, currentPage, challengeId, year);
        }
        else if (currentPage < pagesAtStart + pagesInMiddle) {
            // Current page is within first+middle pages, so no need for first spacer (first and middle sections are combined).
            RenderPagingElements(this, 1, pagesAtStart + pagesInMiddle, currentPage, challengeId, year);
            RenderPagingSpacer(this);
            RenderPagingElements(this, endStartIndex, totalPages, currentPage, challengeId, year);
        }
        else if (currentPage > totalPages - pagesInMiddle - pagesAtEnd) {
            // Current page is within middle+last pages, so no need for last spacer (middle and last sections are combined).
            RenderPagingElements(this, 1, pagesAtStart, currentPage, challengeId, year);
            RenderPagingSpacer(this);
            RenderPagingElements(this, endStartIndex - pagesInMiddle, totalPages, currentPage, challengeId, year);
        }
        else {
            // Current page is somewhere outwith the beginning and end.  Output all 3 sections with spacers between each.
            RenderPagingElements(this, 1, pagesAtStart, currentPage, challengeId, year);
            RenderPagingSpacer(this);
            RenderPagingElements(this, middleStartIndex, middleEndIndex, currentPage, challengeId, year);
            RenderPagingSpacer(this);
            RenderPagingElements(this, endStartIndex, totalPages, currentPage, challengeId, year);
        }

        if (showNextLink) { // NEXT link
            $(this).append('<li class="first-child"><a class="next" href="#" onclick=\"LoadMore(' + challengeIds[year] + ',' + Math.min(totalPages, currentPage + 1) + ',' + year + '); return false;\">Next</a></li>');
        }
    });
}

function RenderPagingElements(olElement, startPage, endPage, currentPage, challengeId, year) {
    for (var pageIndex = startPage; pageIndex <= endPage; pageIndex++) {
        var appendClass = '';
        if (pageIndex == startPage) appendClass = "first-child ";
        if (pageIndex == currentPage) appendClass += "here";        
        $(olElement).append('<li class="' + appendClass + '"><a href="#" onclick=\"LoadMore(' + challengeId + ',' + pageIndex + ',' + year + '); return false;\">' + pageIndex + '</a></li>');
    }
}

function RenderPagingSpacer(olElement) {
    $(olElement).append('<li class="spacer first-child">...</li>');
}

function LoadMore(challengeId, pageNumber, year) {
    var animSpeedMilliSec = 250;

    DisplaySpinner(animSpeedMilliSec);    

    var postUrl = siteRoot + "challenge/getajaxscores?challengeId=" + challengeId + "&year=" + year + "&pageNumber=" + pageNumber + "&pageSize=" + pageSizes[year];
    $.get(postUrl, function(data) {
        if (data != '') {
            $('#year-' + year + " table tbody").empty().append(data);
            RemoveSpinner(animSpeedMilliSec);
        } else {
            current = -1;
        }
    });
    
    currentPages[year] = pageNumber;
    SetupPaging();
}

function DisplaySpinner(animSpeedMilliSec) {
    $('.loading').fadeIn(animSpeedMilliSec);
    $('tbody').animate({ opacity: 0.2 }, animSpeedMilliSec);
}

function RemoveSpinner(animSpeedMilliSec) {
    $('.loading').fadeOut(animSpeedMilliSec);
    $('tbody').animate({ opacity: 1.0 }, animSpeedMilliSec);        
}
