var nbPage = new Array();

jQuery.fn.pagination = function(opts) {
	opts = jQuery.extend({
			current_page: 1,
			prev_text: "Prev",
			next_text: "Next",
			prev_show_always: true,
			next_show_always: true,
			pagination_location: "both",
			pagination_id: 1
		}, opts||{});
	nbPage.push(1);
	return this.each(function() {
		var selector = jQuery(this);	
		var pageCounter = 1;
		
		/* pour chaque div de contenu */
		selector.children().each(function(i) { 
			// ajoute l'attribu class au div de la forme : page1, page2 ... pageN
			jQuery(this).addClass("page" + (pageCounter));
			// masque/affiche le div en fonction de la page courante
			if (pageCounter == opts.current_page) {
				jQuery(this).show();
			} else {
				jQuery(this).hide();
			}
			pageCounter++;
		});

		// s'il n'y a qu'une page on s'arrete
		if (pageCounter <= 2) {
			selector.children().show();
			return;
		}

		/* creation de la pagination */
		var pageNav = "<div class='pagination'>";	
		if (opts.current_page == 1) {
			pageNav += "<a class='noPrev' rel='" + opts.current_page + "' href='#'>" + opts.prev_text + "</a>";	
		} else {
			pageNav += "<a class='prev' rel='" + (opts.current_page - 1) + "' href='#'>" + opts.prev_text + "</a>";
		}
		for (i = 1; i < pageCounter; i++) {
			if (i == opts.current_page) {
				pageNav += "<a rel='" + i + "' class='current' href='#'>" + i + "</a>";	
			} else {
				pageNav += "<a rel='" + i + "' href='#'>" + i + "</a>";
			}
		}	
		nbPage[opts.pagination_id] = pageCounter - 1;
		if (opts.current_page == nbPage[opts.pagination_id]) {
			pageNav += "<a class='noNext' rel='" + opts.current_page + "' href='#'>" + opts.next_text + "</a>";	
		} else {
			pageNav += "<a class='next' rel='" + (opts.current_page + 1) + "' href='#'>" + opts.next_text + "</a>";
		}
		pageNav += "</div>";

		/* affichage de la pagination a la fin ou au debut ou a la fin et au debut */
		switch(opts.pagination_location) {
			case "before":
				selector.before(pageNav);
				break;
			case "both":
				selector.before(pageNav);
				selector.after(pageNav);
				break;
			default:
				selector.after(pageNav);
		}

		/* on masque le bouton "precedent" si on est a la premier page (car pas necessaire) et si on veu pas qu'il soit toujours affiche */
		if (!opts.prev_show_always) {
			jQuery(".documentList").find(".pagination").find(".noPrev").css("display", "none");
		}
		/* on masque le bouton "suivant" si on est a la derniere page (car pas necessaire) et si on veut pas qu'il soit toujours affiche */
		if (!opts.next_show_always) {
			jQuery(".documentList").find(".pagination").find(".noNext").css("display", "none");
		}
		
		/* pour chaque lien de la pagination, on ajoute le traitement qu'il faut */
		selector.parent().find(".pagination a").click(function() {
			// numero du lien sur lequel on a clique
			var clickedLink = parseInt(jQuery(this).attr("rel"));
			// si le numero de la page sur laquelle on a clique est le meme que la page courante on s'arrete
			if (clickedLink == opts.current_page) {
				return;
			}

			// affiche la bonne page dans le bloc
			selector.children().hide();			
			selector.find(".page" + clickedLink).show();

			opts.current_page = clickedLink;
			// on recherche toutes les barres de pagination pour le bloc
			var divNav = jQuery(this).parent(".pagination").parent(".documentList").find(".pagination");

			// mise a jour des barres de navigation
			divNav.find(".current").removeClass("current");
			divNav.find("a[rel='" + clickedLink + "']").not(jQuery(".prev")).not(jQuery(".noPrev")).not(jQuery(".next")).not(jQuery(".noNext")).addClass("current");

			// gestion des boutons "suivant" et "precedent"
			if (clickedLink > 1) {
				divNav.find(".noPrev").removeClass("noPrev").addClass("prev");
				divNav.find(".prev").attr("rel", (clickedLink - 1));
				divNav.find(".prev").css("display", "block");
			}
			if (clickedLink < nbPage[opts.pagination_id]) {
				divNav.find(".noNext").removeClass("noNext").addClass("next");	
				divNav.find(".next").attr("rel", (clickedLink + 1));
				divNav.find(".next").css("display", "block");
			}
			if (opts.current_page == 1) {
				if (opts.prev_show_always) {
					divNav.find(".prev").removeClass("prev").addClass("noPrev");
				} else {
					divNav.find(".prev").css("display", "none");
				}
			}
			if (opts.current_page == nbPage[opts.pagination_id]) {
				if (opts.next_show_always) {
					divNav.find(".next").removeClass("next").addClass("noNext");
				} else {
					divNav.find(".next").css("display", "none");
				}	
			}
			
			return false;
		});
	});
}


