/*
* Plugin JQuery de pagination, modifié par Michael Loock <mloock@cyo.com>
*/

$.fn.pager = function(clas, options) {

    var settings = {
        navId: 'nav',
        navClass: 'nav',
        navAttach: 'append',
        highlightClass: 'highlight',
        prevText: '&laquo;',
        nextText: '&raquo;',
        linkText: null,
        linkWrap: null,
        height: null
    }
    if(options) $.extend(settings, options);


    return this.each( function () {

        var me = $(this);
        var size;
        var i = 0;
        var navid = '#'+settings.navId;

        function init () {
            size = $(clas, me).not(navid).size();
            if(settings.height == null) {
                settings.height = getHighest();
            }
            if(size > 1) {
                makeNav();
                //show();
                //highlight();
            }

            show();
            highlight();

            sizePanel();
            if(settings.linkWrap != null) {
                linkWrap();
            }
        }
        function makeNav () {
            var str = '<span id="'+settings.navId+'" class="'+settings.navClass+'"><strong>Allez &agrave;</strong> : ';

            str += '<a href="#" rel="first"><< 1&egrave;re page</a> &nbsp; ';
            str += '<a href="#" rel="prev">< pr&eacute;c.</a> / ';

            for (var i = 0; i < size; i++) {
                var j = i+1;
                str += '<a href="#" rel="'+j+'">';
                str += (settings.linkText == null) ? j : settings.linkText[i];
                str += '</a> / ';
            }

            str += '<a href="#" rel="next">suiv. ></a> ';
            str += '&nbsp; <a href="#" rel="last">derni&egrave;re page >></a>';

            str += '</span>';

            switch (settings.navAttach) {
                case 'before':
                    $(me).before(str);
                    $(me).after(str);
                    break;
                case 'after':
                    $(me).after(str);
                    break;
                case 'prepend':
                    $(me).prepend(str);
                    break;
                default:
                    $(me).append(str);
                    break;
            }

            updateNavLinks(settings.index);
        }
        function show () {
            $(me).find(clas).not(navid).hide();
            var show = $(me).find(clas).not(navid).get(i);
            //remplissage
            //console.log(tabliste[settings.index][i]);
            $(show).empty();
            $(show).append(tabliste[settings.index][i]);

            $(show).show();
        }
        function highlight () {
            $(me).find('navul').find('li').find('a').removeClass(settings.highlightClass);
            var show = $(me).find('navul').find('li').find('a').get(i+1);
            $(show).addClass(settings.highlightClass);
        }

        function sizePanel () {
            if($.browser.msie) {
                $(me).find(clas).not(navid).css( {
                    height: settings.height
                });
            } else {
                $(me).find(clas).not(navid).css( {
                    minHeight: settings.height
                });
            }
        }
        function getHighest () {
            var highest = 0;
            $(me).find(clas).not(navid).each(function () {

                if(this.offsetHeight > highest) {
                    highest = this.offsetHeight;
                }
            });
            highest = highest + "px";
            return highest;
        }
        function getNavHeight () {
            var nav = $(navid).get(0);
            return nav.offsetHeight;
        }
        function linkWrap () {
            $(me).find(navid).find("a").wrap(settings.linkWrap);
        }
        init();


        $('span.navigation a').unbind("click").click(function () {

            if ($(this).attr('rel') == 'next') {
                if (i + 1 < size) {
                    i = i+1;
                }
            }
            else if ($(this).attr('rel') == 'prev') {
                if (i > 0) {
                    i = i-1;
                }
            }
            else if ($(this).attr('rel') == 'first') {
                i = 0;
            }
            else if ($(this).attr('rel') == 'last') {
                i = size-1;

            }

            else {
                var j = $(this).attr('rel');
                i = j-1;
            }
            show();
            highlight();

            updateNavLinks(settings.index);

            return false;
        });

    });
}

function updateNavLinks(ind) {
    if ($('div#liste'+ind+' ul.pager:first').css("display") != 'none') {
        $('span.navigation a').each(function () {
            if (($(this).attr('rel') == 'first') || ($(this).attr('rel') == 'prev')) {
                //$(this).css("visibility", "hidden");
                $(this).css("display", "none");
            }

            else if (($(this).attr('rel') == 'last') || ($(this).attr('rel') == 'next')) {
                $(this).css("display", "inline");
            }
        });
    }

    else if ($('div#liste'+ind+' ul.pager:last').css("display") != 'none') {
        $('span.navigation a').each(function () {
            if (($(this).attr('rel') == 'first') || ($(this).attr('rel') == 'prev')) {
                $(this).css("display", "inline");
            }

            else if (($(this).attr('rel') == 'last') || ($(this).attr('rel') == 'next')) {
                $(this).css("display", "none");
            }
        });
    }

    else {
        $('span.navigation a').each(function () {
            $(this).css("display", "inline");
        });
    }

    var $c = 0;
    var current_page = 0;
    $('div#liste'+ind+' ul.pager').each(function () {
        $c++;
        if (($(this).css("display") != 'none') && (!current_page)) {
            current_page = $c;
        }
    });

    $('span.navigation a').each(function () {
        if ($(this).attr('rel') == current_page) {
            $(this).addClass("on");
        }
        else {
            $(this).removeClass("on");
        }
    });

}
