﻿ScrollObject = function(itemsToDisplay, rootElement) {
    var currentNumber = 0;
    var numberdisplayedItems = itemsToDisplay;
    var itemsPath = rootElement + " ul.Items li";
    var items = $(itemsPath);

    this.show = function(counter) {
        if (items.length <= numberdisplayedItems) {
            return;
        }

        currentNumber += counter;

        for (k = 0; k < items.length; k++) {
            $(items[k]).hide();
        }

        if (currentNumber < 0) {
            currentNumber = 0;
        }

        var i = currentNumber;
        var length = currentNumber + numberdisplayedItems;

        if ((currentNumber + numberdisplayedItems) > items.length) {
            currentNumber = i = items.length - numberdisplayedItems;
            length = items.length;
        }

        for (i; i < length; i++) {
            $(items[i]).show();
        }
    }

    this.RefreshItems = function() {
        items = $(itemsPath);
    }

    this.SetCurrentElement = function(elementNumer) {
        var items = $(itemsPath);
        if (elementNumer < 0) {
            currentNumber = 0;
            return;
        }

        if (elementNumer > items.length - numberdisplayedItems) {
            currentNumber = items.length - numberdisplayedItems;
            return;
        }

        currentNumber = elementNumer;
    }

    this.GetPreviousLinkVisibility = function() {
        if (currentNumber <= 0) {
            return false;
        }
        else {
            return true;
        }
    }

    this.GetNextLinkVisibility = function() {
        if (currentNumber >= items.length - numberdisplayedItems) {
            return false;
        }
        else {
            return true;
        }
    }
}

function ScrollManager(rootElement, itemsToDisplay) {

    var rootElement = rootElement;
    var scrollObject = new ScrollObject(itemsToDisplay, rootElement);

    this.SetUp = function() {
        $(rootElement + " .Next").click(function() {
            scrollObject.show(1);
            SetLinksVisibility();
        });

        $(rootElement + " .Previous").click(function() {
            scrollObject.show(-1);
            SetLinksVisibility();
        });

        scrollObject.show(0);
        SetLinksVisibility();
    }

    SetLinksVisibility = function() {
        if (scrollObject.GetPreviousLinkVisibility() == true) {
            if ($(rootElement + " .Previous").hasClass("InactivePrevious")) {
                $(rootElement + " .Previous").removeClass("InactivePrevious");
            }
        }
        else {
            if ($(rootElement + " .Previous").hasClass("InactivePrevious") == false) {
                $(rootElement + " .Previous").addClass("InactivePrevious");
            }
        }

        if (scrollObject.GetNextLinkVisibility() == true) {
            if ($(rootElement + " .Next").hasClass("InactiveNext")) {
                $(rootElement + " .Next").removeClass("InactiveNext");
            }
        }
        else {
            if ($(rootElement + " .Next").hasClass("InactiveNext") == false) {
                $(rootElement + " .Next").addClass("InactiveNext");
            }
        }
    }

    this.Refresh = function() {
        scrollObject.RefreshItems();
        scrollObject.show(0);
    }

    this.SetCurrentElement = function(elementNumber) {
        scrollObject.SetCurrentElement(elementNumber);
    }
}