function GenerateBreadCrumbsArray(cur_page, total_results, results_per_page, breads_count)
{
	if (breads_count > 0)
	{
		var first = 1;
		var last  = Math.floor((total_results - 1)/results_per_page) + 1;
		last  = (last < first) ? first : last;
		var cur   = ((cur_page < first) ? first : ((cur_page > last) ? last : cur_page));
		var next  = ((cur + 1) > last)  ? last  : (cur + 1);
		var prev  = ((cur - 1) < first) ? first : (cur - 1);
		 
		var crumbs = new Array();
		if(prev != cur)
		{
			crumbs["prev"] = prev;
		}

		breads_count = (breads_count <= (last-first)) ? breads_count : (last-first) + 1;
		
		var left_count  = Math.min(cur - first, Math.floor(breads_count / 2));
		var right_count = Math.min(breads_count - left_count - 1, last - cur);
		left_count  = Math.max(left_count, breads_count - 1 - right_count);
		
		if(cur > (left_count + first))
		{
			crumbs["first"] = first;
		}
		
		for(i = -left_count; i <= right_count; i ++)
		{
      crumbs[i] = cur + i;
			
		}
		
		if((cur + right_count) < last)
    {
      crumbs["last"]  = last;
    }

    if(cur != next)
    {
  	 crumbs["next"] = next;
    }
	}
	else
	{
		crumbs[0] = cur;
	}
	return crumbs;
}

function CollectionNav(pagerId, collection, curPage, resPerPage, countBreads)
{
    var commentsPager = $(pagerId);
    var absLinks = $("td", commentsPager);
    absLinks.addClass('absLinks');

    var prevLink = absLinks.filter(".nav-prev");
    var nextLink = absLinks.filter(".nav-next");
    var gap1     = absLinks.filter(".gap-1");
    var gap2     = absLinks.filter(".gap-2");
    var firstLink= absLinks.filter(".nav-first");
    var lastLink = absLinks.filter(".nav-last");

    var curId = 1;
    collection.each(function(i){
        $(this).addClass('c_' + (Math.floor(i / resPerPage) + 1));
    });
    
  UpdateNav(pagerId, collection, curPage, resPerPage, countBreads);
	function UpdateNav(pagerId, collection, curPage, resPerPage, countBreads)
	{
        absLinks.hide();
        collection.hide();
        var curSet = collection.filter('.c_' + curPage).show();
        curSet.filter(":last").addClass('no-border');
        
        var breadCrumbs = GenerateBreadCrumbsArray(curPage, collection.size(), resPerPage, countBreads);
        if(breadCrumbs.hasOwnProperty('prev') && breadCrumbs.hasOwnProperty('first'))
        {
            gap1.show();
        }
        if(breadCrumbs.hasOwnProperty('next') && breadCrumbs.hasOwnProperty('last'))
        {
            gap2.show();
        }
        for(var i in breadCrumbs)
        {
            if(!breadCrumbs.hasOwnProperty(i)) continue;
            switch(i)
            {
            case ('prev'):
                $("a", prevLink).attr('href', "#" + breadCrumbs[i]).removeData('page').data('page', breadCrumbs[i]);
                prevLink.show();
                break;
            case ('first'):
                $("a", firstLink).html(breadCrumbs[i]).attr('href', "#" + breadCrumbs[i]).removeData('page').data('page', breadCrumbs[i]);
                firstLink.show();
                break;
            case ('last'):
                $("a", lastLink).html(breadCrumbs[i]).attr('href', "#" + breadCrumbs[i]).removeData('page').data('page', breadCrumbs[i]);
            	lastLink.show();
                break;
            case ('next'):
                $("a", nextLink).attr('href', "#" + breadCrumbs[i]).removeData('page').data('page', breadCrumbs[i]);
                nextLink.show();
                break;
            case ('0'):
            	$(gap2).before("<td><strong>"+breadCrumbs[i]+"</strong></td>")
                break
            default:
                $(gap2).before($("<td><a href="+breadCrumbs[i]+">"+breadCrumbs[i]+"</a></td>"));
                $("a", $(gap2).prev("td")).attr('href', "#" + breadCrumbs[i]).data('page', breadCrumbs[i]);
                break;
            }

            $("a", commentsPager).unbind('click').click(function(){
            	newPageId = $(this).data('page');
            	$("td", commentsPager).not('.absLinks').remove();
            	UpdateNav(pagerId, collection, newPageId, resPerPage, countBreads);
            	return false;
            });
        }
	}
}
