(function($) {
	// plugin definition
	$.fn.nansPager = function(options)
	{
		//__warn("Plugin 'nansPager'\n---------------------------------");
		debug(this);
		// build main options before element iteration
		var opts = $.extend({}, $.fn.nansPager.defaults, options);
		
		// iterate and reformat each matched element
		
		return this.each(function()
		{
			$this = $(this);
			// build element specific options
			var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
			
			var numObj = $this.find(o.element).length;
			
			
			//Infos relative au contexte
			//__info("classe des éléments : "+o.element);
			//__info("nombre à trier des éléments : "+o.numElement);
			//__info("nombre total d'éléments : "+numObj);
			
			//Définit le nombre de page nécessaire
			var numPage = 0;
			for(var i=0; i<numObj; i++ )
			{
				//__log("modulo i : "+(i%o.numElement));
				if(i%o.numElement == 0)
					numPage++;
			}
			//__log("nombre de page : "+(numPage));
			
			var $pager = _makePager(numPage, o);
			//__info("Pager : " + $pager);
			var tabPosition = o.pagerPosition.split(",");
			for(var pos in tabPosition)
			{
				//__log("position : "+tabPosition[pos]);
				if(tabPosition[pos] == "bottom")
					$this.append($pager);
				if(tabPosition[pos] == "top")
					$this.prepend($pager);
			}
			
			_click(o,$this);
			
			
			$this.find(o.element).addClass(o.elementClassDisplay);
			$this.find(o.element).slice((o.depart*o.numElement), ((o.depart*o.numElement)+o.numElement)).removeClass(o.elementClassDisplay);
			$("."+o.pagerClass+(o.depart+1)).addClass("current");
			$this.find(o.element).show()
			$("."+o.elementClassDisplay).hide();
		});
	};
	function _click(o, pEl)
	{
		$("."+o.pagerClass).find(o.pagerBtType).click(function()
		{
			
			var debut = (parseInt($(this).text()))-1;
			$("."+o.pagerClass).find(o.pagerBtType).removeClass("current");
			$("."+o.pagerClass+(debut+1)).addClass("current");
			pEl.find(o.element).addClass(o.elementClassDisplay);
			pEl.find(o.element).slice((debut*o.numElement), ((debut*o.numElement)+o.numElement)).removeClass(o.elementClassDisplay);
			//__log("Click : Debut : "+(debut*o.numElement) + " Fin : "+ ((debut*o.numElement)+o.numElement));
			pEl.find(o.element).show();
			$("."+o.elementClassDisplay).hide();
			
		});
	}
	function _makePager(pNum, o)
	{
		m = "";
		m += "\n<" + o.pagerType + " class='" + o.pagerClass + "'>\n";
		if(pNum>1)
		{
			for(var i = 1; i<=pNum; i++)
			{
				m += "\t<" + o.pagerBtType + " class='" + o.pagerClass + i + "'>" + i + "</" +o.pagerBtType+ ">\n";
			}
		}
		else
			m += "\t<" + o.pagerBtType + " class='" + o.pagerClass + i + "'>&nbsp;</" +o.pagerBtType+ ">\n";
		m += "</" + o.pagerType + ">\n";
		return m;
	}
	
	// private function for debugging
	
	function debug($obj) 
	{
			//__log('nansPager selection count: ' + $obj.size());
	};
	$.fn.nansPager.defaults = 
	{
		foreground: 'red',
		background: 'yellow',
		element : "",
		numElement : 1,
		depart : 0,
		elementClassDisplay : "notDisplay",
		pagerType : "div",
		pagerBtType : "b",
		pagerClass : "pages",
		pagerPosition : "bottom"
	};
	// end of closure
})(jQuery);

