(function($) {

	var numNansPager = 0;
	// 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);
		
		var $this = {};
		var o = {}
		var debut = 0;
		//Définit le nombre de page nécessaire
		var numPage = 0;
		var trancheBegin = 0;
		var trancheEnd = 0;
		var numObj = 0;
		var $num = 0;
		numNansPager++;
		// iterate and reformat each matched element
		return this.each(function(num)
		{	
			$this = $(this);
			$num = numNansPager;
			// build element specific options
			o = $.meta ? $.extend({}, opts, $this.data()) : opts;
			o.numTest = $num;
			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);
			
			if(numObj>o.numElement)
			{
				for(var i=0; i<numObj; i++ )
				{
					//__log("modulo i : "+(i%o.numElement));
					if(i%o.numElement == 0)
						numPage++;
				}
				//__info("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" && o.pagerPosIn)
						$this.append($pager);
					if(tabPosition[pos] == "bottom" && !o.pagerPosIn)
						$this.after($pager);
					if(tabPosition[pos] == "top" && o.pagerPosIn)
						$this.prepend($pager);
					if(tabPosition[pos] == "top" && !o.pagerPosIn)
						$this.before($pager);
				}
				o.debut = o.depart;
				if(o.pagerType == "fleche"){
					trancheBegin=debut;
					trancheEnd=(debut*o.numElement)+o.numElement;
				}
				
				$("."+o.pagerClass+"_"+$num).find(o.pagerBtType).click(function()
				{
					_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");
			}
		});
		function _click(o,$el)
		{
			
				if(opts.pagerType == "pager")
				{
					debut = (parseInt($el.text()))-1;
					$("."+opts.pagerClass+"_"+$num).find(o.pagerBtType).removeClass("current");
					$("."+opts.pagerClass+(debut+1)).addClass("current");
					$this.find(opts.element).addClass(o.elementClassDisplay);
					$this.find(opts.element).slice((debut*opts.numElement), ((debut*opts.numElement)+opts.numElement)).removeClass(opts.elementClassDisplay);
					//__log("Click : Debut : "+(debut*opts.numElement) + " Fin : "+ ((debut*opts.numElement)+opts.numElement));
				}
				else if(opts.pagerType == "fleche")
				{
					var boolNav = false;
					if($el.hasClass("prev") && !$el.hasClass("disabled") && trancheBegin >=opts.numElement)
					{
						boolNav = true;
						trancheEnd = trancheBegin;
						trancheBegin = trancheBegin - opts.numElement;
					}
					if($el.hasClass("next") && !$el.hasClass("disabled") && trancheEnd<numObj)
					{
						boolNav = true;
						trancheBegin = trancheBegin+opts.numElement;
						trancheEnd = trancheEnd + opts.numElement;
					}
					
					if(boolNav)
					{
						//__log("trancheBegin : "+trancheBegin+" trancheEnd : "+trancheEnd);
						$this.find(opts.element).addClass(opts.elementClassDisplay);
						$this.find(opts.element).slice(trancheBegin, trancheEnd).removeClass(opts.elementClassDisplay);
						
						if(trancheBegin < opts.numElement) $el.parent().find(".prev").addClass("disabled");
						else $el.parent().find(".prev").removeClass("disabled");
						if(trancheEnd >= numObj) $el.parent().find(".next").addClass("disabled");
						else $el.parent().find(".next").removeClass("disabled");	
					}
				}
		}
		function _makePager(pNum, o)
		{
			m = "";
			m += "\n<" + opts.pagerElType + " class='" + opts.pagerClass + " " + opts.pagerClass +"_"+ $num + "'>\n";
			if(opts.pagerType == "pager")
			{
				if(pNum>1)
				{
					for(var i = 1; i<=pNum; i++)
					{
						m += "\t<" + opts.pagerBtType + " class='" + opts.pagerClass + i + "'>" + i + "</" +opts.pagerBtType+ ">\n";
					}
				}
				else
					m += "\t<" + opts.pagerBtType + " class='" + opts.pagerClass + i + "'>&nbsp;</" +opts.pagerBtType+ ">\n";
			}
			else if(opts.pagerType == "fleche")
			{
			    m += "\t<" + opts.pagerBtType + " class='fleche prev disabled'></" +opts.pagerBtType+ ">\n";
			    m += "\t<" + opts.pagerBtType + " class='fleche next'></" +opts.pagerBtType+ ">\n";
			}
			m += "</" + opts.pagerElType + ">\n";
			return m;
		
		}
	};
	
		
	// private function for debugging
	
	function debug($obj) 
	{
			__log('DEBUGG :: nansPager selection count: ' + $obj.size());
	};
	$.fn.nansPager.defaults = 
	{
		foreground: 'red',
		background: 'yellow',
		element : "",
		numElement : 1,
		depart : 0,
		elementClassDisplay : "notDisplay",
		pagerElType : "div",
		pagerType :	"pager",
		pagerBtType : "b",
		pagerClass : "pages",
		pagerPosition : "bottom",
		pagerPosIn :	true,
		numTest:		0
	};
	// end of closure
})(jQuery);

