private int GetPagesCount(Pager pager, out int leftPages, out int rightPages)
{
Argument.IsNotNull(() => pager);
leftPages = 0;
rightPages = 0;
var rightItems = pager.ItemsCount - pager.ItemIndex;
var leftItems = pager.ItemsCount - rightItems;
var totalRightPages = (int) Math.Ceiling(rightItems/(double) pager.ItemsPerPage) - 1;
var totalLeftPages = (int) Math.Ceiling(leftItems/(double) pager.ItemsPerPage);
var totalPagesCount = totalRightPages + totalLeftPages;
var currentPage = totalLeftPages + 1;
pager.CurrentPage = currentPage.ToString(CultureInfo.InvariantCulture);
var leftAdding = true;
var pageCouner = 0;
while (pageCouner < pager.VisiblePages - 1 && pageCouner < totalPagesCount)
{
if (totalLeftPages.Equals(0))
{
leftAdding = false;
}
if (totalRightPages.Equals(0))
{
leftAdding = true;
}
if (totalLeftPages > 0 && leftAdding)
{
leftAdding = false;
leftPages++;
totalLeftPages--;
pageCouner++;
continue;
}
if (totalRightPages > 0 && !leftAdding)
{
leftAdding = true;
rightPages++;
totalRightPages--;
pageCouner++;
}
}
return currentPage;
}