(function($){
	$.fn.paginator = function(s){
		var options = {
			limit : 10,
			clickHandler : null,
			total : 1,
			cssClass : 'paginator_item',
			pages : 10,
			page : 1
		};
		$.extend(options, s);
		var pageCount = Math.floor(options.total/options.limit) + (options.total % options.limit>0?1:0);
		function init(){
			var $this = $(this);
			var currentPage = options.page;
			if(null != options.clickHandler){
				$("." + options.cssClass, this).live(
					'click',
					function(){
						currentPage = Math.floor($(this).text());
//						currentPage = Number.valueOf(currentPage);
						draw();
						options.clickHandler((currentPage-1) * options.limit)
					}
				);
			}
			function draw(){
				$this.empty();
				if (pageCount == 1){
					return
				}
				if (options.pages >= pageCount){
					for (var i=1; i<=pageCount; i++){
						addItem(i);
					}
				} else if (currentPage <= options.pages/2){
					for (var i=1; i<=(options.pages-2); i++){
						addItem(i);
					}
					$this.append($("<span>&#8230;</span>"));
					addItem(pageCount);
				} else if (currentPage >= pageCount - options.pages/2){
					addItem(1);
					$this.append($("<span>&#8230;</span>"));
					for (var i=pageCount-options.pages+2; i<=pageCount; i++){
						addItem(i);
					}
				} else {
					addItem(1);
					$this.append($("<span>&#8230;</span>"));
					for (var i=Math.floor(currentPage-options.pages/2) + 2; i<=Math.floor(currentPage+options.pages/2) - 1; i++){
						addItem(i);
					}
					$this.append($("<span>&#8230;</span>"));
					addItem(pageCount);
					
				}
			}
			function addItem(page){
				var p = $("<span></span>").text(page);
				if (page != currentPage){
					p.addClass(options.cssClass);
				}
				$this.append(p);
			}
			draw();
		}
		
		return this.each(init);
	}
})(jQuery);
