var itemsPerPage = 20;
var pageNumber = 1;

$(document).ready(setupPagination);

function backPage(element)
{
    if(!element.is(".disabled"))
    {
        pageNumber = pageNumber - 1;
        
        updatePagination(false);
    }
}

function changePagination(element)
{
    if(!element.is(".selected"))
    {
        itemsPerPage = element.attr("id").substring(8);
        pageNumber = 1;
    
        updatePagination(false);
    }
}

function firstPage(element)
{
    if(!element.is(".disabled"))
    {
        pageNumber = 1;
        
        updatePagination(false);
    }
}

function hoverElement(element, hover)
{
    if(hover && !element.is(".selected") && !element.is(".disabled"))
    {
        element.css("cursor", "pointer");
    }
    else
    {
        element.css("cursor", "auto");
    }
}

function lastPage(element)
{
    if(!element.is(".disabled"))
    {
        var offerCount = $("div.category_offer").length;
    
        pageNumber = Math.ceil(offerCount / itemsPerPage);
        
        updatePagination(false);
    }
}

function nextPage(element)
{
    if(!element.is(".disabled"))
    {
        pageNumber = pageNumber + 1;
        
        updatePagination(false);
    }
}

function setupPagination()
{
    //$("#pagination").append('<div id="view_per_page"><ul><li>View</li><li class="paginate" id="paginate10">10</li><li class="paginate" id="paginate20">20</li><li class="paginate" id="paginate50">50</li><li>items&nbsp;&nbsp;</li></ul></div>');
    //$("#pagination").append('<div class="cleaner"></div>');
    $("#pagination").append('<div id="page_number"><ul><li>Page</li><li><img src="" alt="" border="0" id="page-first"></li><li><img src="" alt="" border="0" id="page-back"></li><li><span id="page-number" class="selected"></span>&nbsp;of&nbsp;<span id="page-total"></span></li><li><img src="" alt="" border="0" id="page-next"></li><li><img src="" alt="" border="0" id="page-last"></li><li class="paginate" id="paginateall">&nbsp;View all</li></ul></div>');
    $("#pagination").append('<div class="cleaner"></div>');
    
    $("#page_number li.paginate").hover(function() { hoverElement($(this), true); }, function() { hoverElement($(this), false); });
    $("#page_number li.paginate").click(function() { changePagination($(this)); });

    $("#page_number img").hover(function() { hoverElement($(this), true); }, function() { hoverElement($(this), false); });
    $("#page-first").click(function() { firstPage($(this)); });
    $("#page-back").click(function() { backPage($(this)); });
    $("#page-next").click(function() { nextPage($(this)); });
    $("#page-last").click(function() { lastPage($(this)); });
    
    updatePagination(true);
}

function updatePagination(initial)
{
    var offerCount = $("div.category_offer").length;

    $("#page-number").html(pageNumber);
        
    if(itemsPerPage == "all")
    {
        $("#page-total").html("1");
    }
    else
    {
        $("#page-total").html(Math.ceil(offerCount / itemsPerPage));
    }
    
    if(pageNumber == 1)
    {
        $("#page-first").attr("src", "/img/other/button_skip_to_first_off.gif").addClass("disabled");
        $("#page-back").attr("src", "/img/other/button_back_off.gif").addClass("disabled");
    }
    else
    {
        $("#page-first").attr("src", "/img/other/button_skip_to_first_on.gif").removeClass("disabled");
        $("#page-back").attr("src", "/img/other/button_back_on.gif").removeClass("disabled");
    }
    
    if(itemsPerPage == "all" || (pageNumber * itemsPerPage) >= offerCount)
    {
        $("#page-next").attr("src", "/img/other/button_next_off.gif").addClass("disabled");
        $("#page-last").attr("src", "/img/other/button_skip_to_last_off.gif").addClass("disabled");
    }
    else
    {
        $("#page-next").attr("src", "/img/other/button_next_on.gif").removeClass("disabled");
        $("#page-last").attr("src", "/img/other/button_skip_to_last_on.gif").removeClass("disabled");
    }
    
    if(initial)
    {
        if(itemsPerPage >= offerCount)
        {
            $("#page_number").hide();
        }
        else
        {
            $("div.category_offer:gt(" + (itemsPerPage - 1) + ")").hide();
        }
    }
    else
    {
        var firstOffer = 1;

        $("#page_number li.paginate").removeClass("selected");
        $("#paginate" + itemsPerPage).addClass("selected");
        
        if(itemsPerPage == "all")
        {
            $("div.category_offer:hidden").show();
        }
        else
        {
            firstOffer = (pageNumber * itemsPerPage) - itemsPerPage + 1;
        
            $("div.category_offer:visible").hide();
            
            if($.browser.msie)
            {
                $("div.category_offer:hidden:gt(" + (firstOffer - 2) + "):lt(" + itemsPerPage + ")").show();
            }
            else
            {
                $("div.category_offer:hidden:gt(" + (firstOffer - 2) + "):lt(" + itemsPerPage + ")").slideDown("slow");
            }
        }
    }

    $("#category_offer_list h4, #category_offer_list div.cleaner").each(function() { 
        if($(this).next("div.category_offer").is(":hidden") || $(this).next("h4").is(":hidden"))
        {
            if($(this).is(":visible"))
            {
                $(this).hide();
            }
        }
        else if($(this).is(":hidden"))
        {
            $(this).show();
        }
    });

    if($("div.category_offer").length > 0)
    {
        var previousSibling = $("div.category_offer:visible:first").prev("*");

        while(previousSibling)
        {
            if(previousSibling.is("h4"))
            {
                if(previousSibling.is(":hidden"))
                {
                    previousSibling.show();
                }
                
                break;
            }
        
            previousSibling = previousSibling.prev("*");
        }
    }
}
