//plugin de galerie

(function($){
	
	$.fn.galerie = function(args){
		
		args = $.extend({
			theight: '100',
			twidth: '100',
			bheight: '300',
			bwidth: '300',
			container : '',
			lightbox: 3,
			limit:false,
			complete: function(){}
		}, args);
		
		var _ul = $(this);
		var _li = $(this).find('li');
		
		var div_lnk = 'galerie-lnk-lightbox';
		
		if(args.container != ''){
			var _wrapper = $(args.container);
		}
		else{
			$(this).before('<div class="wrapper"></div>')
			var _wrapper = $('.wrapper');
		}
		
		var nb_li = _li.length;
		
		if(nb_li > 0){
			
			_li.addClass('thumb');
			
		}
		
		//flag limit
		var limited = !args.limit || !args.limit > 1 ? false : true;
		//alert(args.limit+' '+limited);
		if(limited && args.limit > nb_li){
			
			limited = false;
			
		}
		
		// dans le cas d'une limitation on ajout tout ce qui va bien
		if(limited){
			
			var largeur_thumb = largeur_defil = nb_pages = largeur_totale = 0;
			
			_ul.css({
				position: 'absolute',
				top: 0,
				left: 0
			});
			
			//on encapsule la galerie
			_ul.wrap('<div class="galerie-cont-photos"></div>');
			
			var _galcont = _ul.parent('.galerie-cont-photos');
			
			_galcont.wrap('<div class="global-photos"></div>');
			
			//ajout des pad
			var _globalp = _galcont.parent('.global-photos');
			_globalp.prepend('<div class="pad go-left"></div>');
			_globalp.append('<div class="pad go-right"></div>');
			
			largeur_thumb = $('.thumb:first').outerWidth() + parseInt($('.thumb:first').css('margin-right').replace('px', ''));
			
			// largeur de la zone de defilement
			largeur_defil = largeur_thumb * args.limit;
			
			//on set la largeur du conteneur du ul
			_galcont.width(largeur_defil);
			
			//nombre de page
			nb_pages = Math.ceil(nb_li / args.limit);
			
			//on calcule la longueur de la zone qui contiendra les miniatures
			largeur_totale_ul = largeur_thumb * nb_li;
			_ul.width(largeur_totale_ul);
			
			//calcul de la longueur du conteneur principal
			var largeur_pad = $('.pad').outerWidth();
			
			var largeur_totale = _galcont.width() + $.galerie.cleanpx(_galcont.css('margin-left')) + largeur_pad + $.galerie.cleanpx(_ul.css('margin-left'));
			
			_globalp.width(largeur_totale);
			
			$.galerie.events(_ul, largeur_defil, nb_pages);
			
			
			
		}
		
		
		if(args.lightbox){
			
			$(this).before('<div id="'+div_lnk+'"/>');
			
		}
		
		if(nb_li > 0){
		
			_li.each(function(i){
				
				var _thumb = $(this);
				
				$.galerie.redim(_thumb.find('img'), args.twidth, args.theight);
				
				var largeur_big = _thumb.find('a').attr('width');
				var hauteur_big = _thumb.find('a').attr('height');
				
				var url_image = _thumb.find('a').attr('href');
				
				_thumb.find('a').attr('href', 'javascript:;');
				 
				var rel = _a = '';
				
				if(args.lightbox){
					
					_a = $('#'+div_lnk+' a');
					rel = 'rel="'+Math.round(Math.random()*1000)+'"';
					
					$('#'+div_lnk).append('<a '+rel+' href="'+url_image+'"></a>');
					
				}
				
				_thumb.mouseenter(function(){
					
					_wrapper.html('<img '+rel+' id="img-big" height="'+hauteur_big+'" width="'+largeur_big+'" src="'+url_image+'" />');
					
					$.galerie.redim($('#img-big'), args.bwidth, args.bheight);
					
					if(_a.length > 0){
					
						$('#img-big').unbind('click').click(function(){
							
							 $('#'+div_lnk+' a[rel="'+$(this).attr('rel')+'"]').click();
							
						});
						
					}
					
				});
				
				//activation de la premiere image
				if(i == 0){
					
					_wrapper.html('<img '+rel+' id="img-big" height="'+hauteur_big+'" width="'+largeur_big+'" src="'+url_image+'" />');
					
					$.galerie.redim($('#img-big'), args.bwidth, args.bheight);
				}
				
			
				if(_a.length > 0){
					
					$('#img-big').unbind('click').click(function(){
						
						 $('#'+div_lnk+' a[rel="'+$(this).attr('rel')+'"]').click();
						
					});
					
				}
				
		
			});
		}
		
		if(args.lightbox){
			
			var _a = $('#'+div_lnk+' a');
			
			_a.lightBox(options_lightbox);
			
		}
		
		args.complete();
		
		return $(this);
		
	};
	
	
	$.galerie = {
		redim: function(obj, width, height){
			
			obj.hide();
			//obj.addClass('gal-redim');
			//on mets les dimensions en dur ....
			//pour chrome et safari sinon ca couille faudra s'assurer que ca ne
			//pose pas de problemes avec d'autre articles dont les photos ne sont pas au meme ratio
			var or_w = obj.width();
			var or_h = obj.height();
			//----------------------------------
			var coef1 = obj.width() / width;
			var coef2 = obj.height() / height;
			var coef = coef1 > coef2 ? coef1 : coef2;
	
			var new_w = Math.round(or_w / coef);
			var new_h = Math.round(or_h / coef);
			
			if(new_w > or_w){
				obj.width(or_w);
				obj.height(or_h);
			}
			else{
				obj.width(new_w);
				obj.height(new_h);
			}
			
			//alignement des images
			var hauteur_cont = obj.parent().parent().height();
			var margeh = (hauteur_cont - obj.height()) / 2;
			//obj.css('margin-top', margeh+'px');
			var largeur_cont = obj.parent().parent().width();
			var margev = (largeur_cont - obj.width()) / 2;
			obj.css('margin-left', margev+'px');
	
			obj.show();
		
		},
		cleanpx: function(string){

			return parseInt(string.replace('px', '').replace('pt', ''));
		
		},
		events: function(_ul, largeur_defil, nb_pages){
		
			//obj
			var _galcont = _ul.parent('.galerie-cont-photos');
			var _main = _galcont.parent('.global-photos');
			
			//pads
			var _pads = _main.find('.pad');
			var _left = _main.find('.go-left');
			var _right = _main.find('.go-right');
			
			//on vire les evenements
			_pads.unbind('click');
			//on check si on est sur la derniere
			
			var left = $.galerie.cleanpx(_ul.css('left'));
		
			//on recupere la page
			var page = Math.abs((left / largeur_defil) - 1);
		
			if(page < nb_pages){
				
				_right.show();
				//events
				_right.click(function(){
					
					$(this).unbind('click');
		
					var new_left = left - largeur_defil;
					
					//on avance
					_ul.animate({left: new_left+'px'}, 300, function(){
						$.galerie.events(_ul, largeur_defil, nb_pages);
					});
		
				});
			}
			else{
				//_right.hide();
			}
		
			
			if(page > 1){
				_left.show();
				//events
				_left.click(function(){
					
					$(this).unbind('click');
		
					var new_left = left + largeur_defil;
		
					//on avance
					_ul.animate({left: new_left+'px'}, 300, function(){
						$.galerie.events(_ul, largeur_defil, nb_pages);
					});
					
				});
			}
			else{
				//_left.hide();
			}
		
		}
	};
	
	
})(jQuery);

$(document).ready(function(){
	
	$('#fa-photos').galerie({
		theight: '75',
		twidth: '75',
		bheight: '300',
		bwidth: '300',
		container : '#big-fa-photo',
		limit:3,
		complete: function(){
			
			$('#cont-photos').css('visibility', 'visible');
			
		}
	});
		
});

