$.fn.pager = function(query, options) {
	
	var settings = {		
		navId: 'pagerNav',
		navClass: 'pagerNav',
		navAttach: 'after',
		navTitle: "",
		activeClass: 'selected',
		prevNextPosition: "split",
		prevText: '&laquo;',
		nextText: '&raquo;',
		linkText: null,
		linkWrap: null,
		height: null,
		perPage: 1,
		fixedHeight:true
	}
	
	if(options) $.extend(settings, options);
	
		
	return this.each( function () {
		
		var me = $(this);
		var page = 0;
		var itemCount;
		var pageCount;
		var nav;
		var navid = '#'+settings.navId;
		
		function init() {
			itemCount = $(query, me).not(navid).size();
			pageCount = Math.ceil(itemCount/settings.perPage);
			if(pageCount > 1) {			    
				makeNav();
				update();
				//updateNav(); pour pas enlever la class "selected" onload
			}			
			if(settings.fixedHeight) sizePanel();
			if(settings.linkWrap != null) {
				linkWrap();
			}
		}
		
		function makeNav() {
			var previousHtml = '<a href="#" rel="prev" class="previous">'+settings.prevText+'</a>';
			var nextHtml = '<a href="#" rel="next" class="next">'+settings.nextText+'</a>';
			var placedNav = $("#"+settings.navId);
			var navExists = (placedNav.length==1)?true:false; 
			
			var navHtml = "";
			if(!navExists) navHtml += '<div id="'+settings.navId+'" class="'+settings.navClass+'">';
			navHtml += '<span class="title">'+settings.navTitle+'</span>';
			if(settings.prevNextPosition=="split" || settings.prevNextPosition=="before") navHtml += previousHtml;
			if(settings.prevNextPosition=="before") navHtml += nextHtml;
			for(var i = 0; i < pageCount; i++) {
				var j = i+1;
				var cssClass="num";
				if(i==0) cssClass += " selected";
				navHtml += '<a href="#" rel="'+j+'" class="'+cssClass+'">';
				navHtml += (settings.linkText == null) ? j : settings.linkText[j-1];				
				navHtml += '</a>';
			}
			if(settings.prevNextPosition=="after") navHtml += previousHtml;
			if(settings.prevNextPosition=="split" || settings.prevNextPosition=="after") navHtml += nextHtml;
			if(!navExists) navHtml += '</div>';
			
			
			if(navExists) {
				placedNav.html(navHtml);
				return;
			}
			
			switch (settings.navAttach) {		
				case 'before':
					$(me).before(navHtml);
					break;
				case 'after':		
					$(me).after(navHtml);
					break;
				case 'prepend':
					$(me).prepend(navHtml);
					break;
				default:
					$(me).append(navHtml);
					break;
			}
			
		}
		
		function update() {
			$(me).find(query).not(navid).hide();
			var min = page*settings.perPage;
			var max = min+settings.perPage;
			var show = $(me).find(query).not(navid).slice(min,max);
			$(show).show();
		}		
		
		function updateNav() {
			$(nav).find('a').removeClass(settings.activeClass);
			var activeItem = $(nav).find('a').get(page);			
			$(activeItem).addClass(settings.activeClass);
		}

		function sizePanel() {
			if(settings.perPage>1) {
				// TODO
			} else {
				if(settings.height == null) settings.height = getHighest();
				var cssHeight = {minHeight: settings.height};
				if($.browser.msie) cssHeight.height = settings.height;
				$(me).find(query).not(navid).css(cssHeight);	
			}
		}
		
		function getHighest() {
			var highest = 0;
			$(me).find(query).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();
		
		// Setup Nav items
		if(settings.navAttach=="append" || settings.navAttach=="prepend") {
			nav = $(me).find(navid)			
		} else {
			nav = $(navid);
		}
		
		$(nav).find("a").click(function () {
			if($(this).attr('rel') == 'next') {
				if(page + 1 < pageCount) {
					page = page+1;
				}
			} else if($(this).attr('rel') == 'prev') { 
				if(page > 0) {	
					page = page-1;
				}
			} else {		
				var j = $(this).attr('rel');	
				page = j-1;		
			}
			update();
			updateNav();
			return false;
		});
	});	
}