$.fn.pager = function(clas, options) {

    var settings = {
        //navId: 'nav',
        nav: 'nav',
        navClass: 'pagination',
        navAttach: 'append',
        highlightClass: 'selected',
        prevText: '&laquo;',
        nextText: '&raquo;',
        linkText: null,
        linkWrap: null,
        height: null,
        itemsPerPage: 0
    };
    if (options)
        $.extend(settings, options);

    return this.each(function() {

        var me = $(this);
        var size;
        var i = 0;
        var nav = '.' + settings.nav;
        //var navId = '#' + settings.navId;

        function init() {
            size = $(clas, me).not(nav).size();
            if (settings.height == null) {
                settings.height = getHighest();
            }
                makeNav();
                i = getPage() - 1;
                show();
                $(".pages").each(
                    function() {
                        $(this).find("a:first").addClass("selected");
                        $(".prevRecipes").css("display", "none");

                    }
                );
                highlight();
                if (size == 1) {
                    $(".nav .right").css("display","none");
                }
           
           
            recipesDisplayed();

            sizePanel();
            if (settings.linkWrap != null) {
                linkWrap();
            }
        }

        function makeNav() {

            // var str = '<div id="' + settings.navId + '" class="' + settings.navClass + '"><div class="right">';
            var str = '<div class="' + settings.nav + " " + settings.navClass + '">';
            str += '<div class="left"></div>';
            str += '<div class="right">';
            str += '<a href="#pageTop" rel="prev" class="prevRecipes"></a><div class="pages">';
            for (var i = 0; i < size; i++) {
                var j = i + 1;
                str += '<a href="#pageTop" rel="' + j + '">';
                str += (settings.linkText == null) ? j : settings.linkText[j - 1];
                str += '</a>';
            }
            str += '</div><a href="#pageTop" rel="next" class="nextRecipes"></a>';
            str += '</div></div>';
            switch (settings.navAttach) {
                case 'before':
                    $(me).before(str);
                    break;
                case 'after':
                    $(me).after(str);
                    break;
                case 'prepend':
                    $(me).prepend(str);
                    break;
                case 'both':
                    $(me).append(str);
                    $(me).prepend(str);
                    break;
                default:
                    $(me).append(str);
                    break;
            }
        }

        function show() {
           $(me).find(clas).not(nav).hide();
           var show = $(me).find(clas).not(nav).get(i);
            $(show).show();

        }

        function highlight() {
            $(me).find(nav).find('a').removeClass(settings.highlightClass);
            /*var show = $(me).find(nav).find('a').get(i + 1);
            $(show).addClass(settings.highlightClass);*/
            $(".pages a").eq(i).addClass(settings.highlightClass);
            $(".pages a").eq(i + size).addClass(settings.highlightClass);
            if ($(".pages a:last").hasClass("selected")) {
                $(".nextRecipes").css("display", "none");
            } else {
                $(".nextRecipes").css("display", "block");
            }

            if ($(".pages a:first").hasClass("selected")) {
                $(".prevRecipes").css("display", "none");
            } else {
                $(".prevRecipes").css("display", "block");
            }
        }

        function sizePanel() {
            if ($.browser.msie) {
                $(me).find(clas).not(nav).css({
                    height: settings.height
                });
            } else {
                $(me).find(clas).not(nav).css({
                    minHeight: settings.height
                });
            }
        }

        function getHighest() {
            var highest = 0;
            $(me).find(clas).not(nav).each(function() {

                if (this.offsetHeight > highest) {
                    highest = this.offsetHeight;
                }
            });
            highest = highest + "px";
            return highest;
        }

        function getNavHeight() {
            var nav = $(nav).get(0);
            return nav.offsetHeight;
        }

        function linkWrap() {
            $(me).find(nav).find("a").wrap(settings.linkWrap);
        }

        function setPage(nb) {
            if (nb <= 0)
                nb = 1;

            var id = "#" + nb;
            if (window.location.hash)
                window.location.href = window.location.href.replace(window.location.hash, id);
            else
                window.location.href = id;
        }

        function getPage() {
            var nb = 1;
            if (window.location.hash) {
                try {
                    nb = Number(window.location.hash.substr(1));
                } catch (e) {
                    nb = 1;
                }

                if (nb <= 0)
                    nb = 1;
            }
            return nb;
        }

        function getParam(name) {
            name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
            var regexS = "[\\?&]" + name + "=([^&#]*)";
            var regex = new RegExp(regexS);
            var results = regex.exec(window.location.href);
            if (results == null)
                return "";
            else
                return results[1];
        }

        function recipesDisplayed() {
            var totalRecipes, nbrePage, nbreRecipesInThisPage = 0;
            totalRecipes = $(".recipesSearchResultsContent").size();
            nbrePage = size;
            //nbreRecipesPerPage = Math.ceil(totalRecipes / nbrePage);
            nbreRecipesInThisPage = $(".recipesSearchResultsContent:visible").size();
            var selectPage = $(".pages a.selected");
            var selectedPage = $(".pages a").index(selectPage) + 1;
            var pageFirst = (selectedPage - 1) * settings.itemsPerPage + 1;
            var pageLast = selectedPage * settings.itemsPerPage;

            var cats = [];
            var t = getParam("Keywords");
            if (t)
                cats.push(t);
            t = getParam("Meal");
            if (t)
                cats.push(t);
            var recipesCategory = cats.join(" and ");
            if (pageLast > totalRecipes) { pageLast = totalRecipes; }
            var htmlToInsert = pageFirst + '-' + pageLast + ' of ' + totalRecipes + ' results for <span>' + recipesCategory + '</span>';
            $("#results .pagination .left").html(htmlToInsert);
            $(".recipesSearchResultsContent").eq((selectedPage * settings.itemsPerPage) - 1).css("background", "none");

        }

        init();
        $(this).find(nav).find("a").click(function() {
            var indexSelected = $(".pages a.selected");
            var indexSelectedPage = $(".pages a").index(indexSelected);
            if ($(this).attr('rel') == 'next') {

                if (indexSelectedPage < size) {
                    i = indexSelectedPage + 1;
                }
            } else if ($(this).attr('rel') == 'prev') {
                if (indexSelectedPage > 0) {
                    i = indexSelectedPage - 1;
                }
            } else {
                var j = $(this).attr('rel');
                i = j - 1;
            }
            nbreRecipesPerPage = $(".recipesSearchResultsContent:visible").size();
            $(".recipesSearchResultsContent").eq((indexSelectedPage * nbreRecipesPerPage) - 1).css("background", "none");

            setPage(i + 1);
            show();
            highlight();
            recipesDisplayed();
            $.scrollTo($('#header'),0); 

            return false;
        });
    });
};
