/*
 * Actu.js
 * Gestion d'une rubrique actu
 *
 */

(function($){

	$.fn.slide = function (params){
			new $.slide($(this),params);
			return this;
	};

	$.slide = function (element, params) {
		this.init(element, params);
	};

	/*
	 * Definition de notre objet slide
	 */
	$.slide.prototype = {

		/* Parametres par defaut */
		p:{},	
		viewer:0,							//objet jquery contenant l'element qui sert de visionneur
		numberOfSlide:0,					//nombre de diapo de notre slide
		sMenu:"",							//objet jquery contenant le menu
		currentItem:0,						//objet jquery contenant l'élément du menu en cours

		/*Fonction d'initiamisatin de notre prototype...*/
		init:function (viewer,params){

				//applicationd es parametres par defaut.
				this.p = $.extend({
					speed:600,						//durée des différentes animation
					horizontal:true,				//le défilement est-il horizontal?
					allSlidesCSS:'.box-allnews',	//classe CSS contenant tout les elements à "slider"
					slideCSS:'.box-news',			//classe CSS correspondant à un slide
					sWidth:476,						//largeur de l'elemeny permettant de vois le slide
					sHeight:160						//hauteur de l'élément  permettant de voir le slide
				},params);

			this.viewer=viewer;
			this.numberOfSlide = this.count();
			this.currentSlide = 1;
			//Construction du menu
			var This = this;
			var i=1;
			var htmlMenu="";
			var margin=0;

			//initialisation des parametres css du viewer
			this.viewer.css({
				position:'relative',
				overflow:'hidden',
				height:this.p.sHeight,
				width:this.p.sWidth
			});

			this.viewer.children(this.p.allSlidesCSS).css({
				position:'absolute'
			});

			//initialisation css des diapos
			if(this.p.horizontal){
				this.viewer.children(this.p.allSlidesCSS).children(this.p.slideCSS).each(function(){
					$(this).css('float','left');
				});
			}
			//on rajoute le menu à l'intérieur de notre viewer
			this.sMenu=$('<ul class="slide-menu"></ul>');

			// contruction du menu.
			for (i=1;i<=this.numberOfSlide;i++){
				switch (i) {
					case 1:
						htmlMenu = $('<li class="first-slide currentSlide slide' + i + '">' + i + '</i>');
						this.currentSlide = 1;
						break;
					case this.numberOfSlide:
						htmlMenu = $('<li class="last-slide slide' + i + '">' + i + '</i>');
						break;
					default:
						htmlMenu = $('<li class="slide' + i + '">' + i + '</i>');
				}
				// on gère le clic sur notre element de menu
				// (différent su notre slide est horizontal ou vertical)
				if (this.p.horizontal){
					this.addClick(htmlMenu, i, this.p.sWidth, this.p.allSlidesCSS);
				}
				else {
					this.addClick(htmlMenu,i);
				}
				// on rajoute l'émément de menu à notre meny
				htmlMenu.appendTo(this.sMenu);
			}
			if (this.p.horizontal){
				margin=this.p.sWidth*i;
				this.viewer.children(this.p.allSlidesCSS).width(margin);
			}
			else {
				margin=this.p.sHeight*i;
				this.viewer.children(this.p.allSlidesCSS).height(margin);
			}
			this.sMenu.prependTo($(this.viewer));
			this.sMenu.css('opacity',0);
			this.viewer.hover(function(){This.sMenu.animate({opacity:1},This.p.speed);}, function(){This.sMenu.animate({opacity:0},This.p.speed);});
		},

		count:function (){
			return (this.viewer).children().children().size();
		},

		/* GotoSlide
		 *
		 * Aller à une diapositive en particulier
		 * params
		 * slide : numero de la diapositive a trouver
		 */
		gotoSlide:function(slide){
			// animation de notre diaporama en fonction du sens de notre diaporama
			if (this.p.horizontal){
				//
				var margin = -(slide-1)*this.p.sWidth;
				this.viewer.children(this.p.allSlidesCSS).animate({
					marginLeft:margin
				}, this.p.speed);
			}
			else{
				var margin = -(slide-1)*this.p.sHeight;
				this.viewer.children(this.p.allSlidesCSS).animate({
					marginTop:margin
				}, this.p.speed);
			}
			// Modification du menu pour prendre en compte le nouvel élément en cours
			$(this.sMenu.children().get(this.currentSlide-1)).removeClass('currentSlide');
			this.currentSlide = slide;
			$(this.sMenu.children().get(this.currentSlide-1)).addClass('currentSlide');
		},

		addClick:function(element,i){;
			var This = this;
			//gestion du clic sur un element de menu en fonction du
			//sens de notre slide
			element.click(function(){
				This.gotoSlide(i);
			});
		}
	};
	
})(jQuery);
