/* small plugin */

(function($) {
	$.fn.slide = function(settings) {

		options = { 
			debug: true,
			transition: 'slide',
			selected: 0,
			paginationId: 'navigation',
			paginationClass: 'bullets',
			bulletSelectedClass: 'selected',
			bulletHoverClass: 'over',
			imgLeft: 'img/portfolio/arrow_left.png',
			imgRight: 'img/portfolio/arrow_right.png'
		};

		var options = $.extend(options, settings);

		return this.each(function() {
			var $$ = $(this),
			$bullets = $('> ul', options.navigationElt);

			var $pages = $('> div', this);
			var pagesNum = $pages.length;
			var selected = (options.selected == "random") ? (Math.floor(Math.random()*pagesNum)) : options.selected;
			var $currentPage = $('> div:eq(' + selected + ')', this);

			// creation des elements dont on aura besoin
			var $pagination = $('<div/>').attr('id', options.paginationId);
			var $ul = $('<ul/>').addClass(options.paginationClass);

			function advancePage(direction)
			{
				selected += direction;
				if (selected >= pagesNum)
				{
					selected = 0;
				}
				else if (selected < 0)
				{
					selected = pagesNum - 1;
				}

				switchPage();
			}

			function switchPage()
			{
				// toggle new bullet
				$('ul li', $pagination).removeClass(options.bulletSelectedClass);
				$('ul li:eq(' + selected + ')', $pagination).addClass(options.bulletSelectedClass);
				$currentPage.fadeOut(function()
					{
						$currentPage = $('> div:eq(' + selected + ')', $$);
						$currentPage.fadeIn();
					}
				);
			}

			// 1. cacher tous les éléments, sauf le sélectionné
			$pages.hide();
			$currentPage.show();

			// ajout de la fleche de gauche
			var $link = $('<a href="#"><img src="' + options.imgLeft + '"></a>').click(function() { advancePage(-1); return false; });
			$pagination.append($link);

			// 2. ajouter le nombre de bullets
			for (i = 0; i < pagesNum; i++)
			{
				$('<li/>').appendTo($ul).hover(
					function() { $(this).addClass(options.bulletHoverClass); },
					function() { $(this).removeClass(options.bulletHoverClass); }
				).click(function()
				{
					// get element position inside ul
					index = $('li', $(this).parent()).index(this);

					// only switch page if new index 
					if (index == selected)
						return
					else
					{
						selected = index;
						switchPage();
					}
					return false;
				}
				);
			}
			// selection d'une des bullet
			$('> li:eq(' + selected + ')', $ul).addClass(options.bulletSelectedClass);

			// ajout du lien droite
			var $link = $('<a href="#"><img src="' + options.imgRight  +'"></a>').click(function() { advancePage(1); return false; });
			$pagination.append($ul).append($link).appendTo(this);
			
		});
	};
})(jQuery);