var $j = jQuery.noConflict()
$j.fn.pager = function(clas, options) {

    var settings = {
        navId: 'nav',
        navClass: 'nav',
        navAttach: 'append',
        highlightClass: 'highlight',
        prevText: '&laquo;',
        nextText: '&raquo;',
        linkText: null,
        linkWrap: null,
        height: "auto"
    }
    if(options) $j.extend(settings, options);
		
    return this.each( function () {
		
        var me = $j(this);
        var size;
        var i = 0;
        var navid = '#'+settings.navId;
		
        function init () {
            size = $j(clas, me).not(navid).size();
            if(settings.height == null) {
                settings.height = getHighest();
            }
            if(size > 1) {
                makeNav();
                cleanNav();
                show();
                highlight();
            }
            sizePanel();
            if(settings.linkWrap != null) {
                linkWrap();
            }
        }

        function cleanNav () {
            if (i == 0) {
                $j("#prev").hide();
                $j("#next").show();
                $j("#span_next").hide();
                $j("#span_prev").show();
            } else if (i == size-1) {
                $j("#prev").show();
                $j("#next").hide();
                $j("#span_next").show();
                $j("#span_prev").hide();
            } else {
                $j("#prev").show();
                $j("#next").show();
                $j("#span_next").hide();
                $j("#span_prev").hide();
            }
        }

        function makeNav () {
            var anchor = "#";
            var str = '<div id="'+settings.navId+'" class="'+settings.navClass+'">';
            str += '<span id="span_prev" class="pagination">'+settings.prevText+'</span>';
            str += '<a href="#" id="prev" rel="prev" class="pagination">'+settings.prevText+'</a>';
            for(var i = 0; i < size; i++) {
                var j = i+1;
                str += '<a href="'+anchor+'" rel="'+j+'" class="pagination">';
                str += (settings.linkText == null) ? j : settings.linkText[j-1];
                str += '</a>';
            }
            str += '<a href="#" id="next" rel="next" class="pagination">'+settings.nextText+'</a>';
            str += '<span id="span_next" class="pagination">'+settings.nextText+'</span>';
            str += '</div>';

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

        function show () {
            $j(me).find(clas).not(navid).hide();
            var show = $j(me).find(clas).not(navid).get(i);
            $j(show).fadeIn("slow");
        }

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

        function sizePanel () {
            if($j.browser.msie) {
                $j(me).find(clas).not(navid).css( {
                    height: settings.height
                });
            } else {
                $j(me).find(clas).not(navid).css( {
                    minHeight: settings.height
                });
            }
        }

        function getHighest () {
            var highest = 0;
            $j(me).find(clas).not(navid).each(function () {
				
                if(this.offsetHeight > highest) {
                    highest = this.offsetHeight;
                }
            });
            highest = highest + "px";
            return highest;
        }

        function getNavHeight () {
            var nav = $j(navid).get(0);
            return nav.offsetHeight;
        }

        function linkWrap () {
            $j(me).find(navid).find("a").wrap(settings.linkWrap);
        }

        function enableDisable() {
            if (i == 0) {
                $j("#prev").hide();
                $j("#next").show();
                $j("#span_prev").show();
                $j("#span_next").hide();
            } else if (i == size - 1) {
                $j("#next").hide();
                $j("#prev").show();
                $j("#span_next").show();
                $j("#span_prev").hide();
            } else {
                $j("#prev").show();
                $j("#next").show();
                $j("#span_prev").hide();
                $j("#span_prev").hide();
            }
        }
        
        init();
        $j(this).find(navid).find("a").click(function () {
            $j("input").focus();
            $j("#prev").hide();
            $j("#span_prev").show();
            $j("#next").show();
            $j("#span_next").hide();
            if ((i == 0) || (i == size-1)) {
                $j("#prev").show();
                $j("#next").show();
                $j("#span_next").hide();
                $j("#span_prev").hide();
            }
            if($j(this).attr('rel') == 'next') {
                if(i + 1 < size) {
                    i = i+1;
                } else {
                    return false;
                }
            } else if($j(this).attr('rel') == 'prev') {
                if(i > 0) {
                    i = i-1;
                } else {
                    return false;
                }
            } else {
                var j = $j(this).attr('rel');
                i = j-1;
            }
            
            show();
            enableDisable();
            highlight();
            return false;
            
        });
    });
    
}

