//plugin de carousel (basé sur celui de la carousel)

(function($){
	
	$.fn.carousel = function(args){
		
		args = $.extend({
			theight: '100',
			twidth: '100',
			limit:3,
			orientation: 'horizontal',
			resize: true,
			complete: function(){},
			change: function(){},
			click: function(){}
		}, args);
	
		var _ul = $(this);
		var _li = $(this).find('> li');
		
		var id = _ul.attr('id');
		
		var div_lnk = 'carousel-lnk-lightbox';
		var nb_li = _li.length;
		
		if(nb_li > 0){
			_li.addClass('thumb');
		}
		else{
			return _ul;
		}
		
		var vert = args.orientation == 'vertical' ? true : false;
		
		//flag limit
		var limited = !args.limit || !args.limit > 1 ? false : true;
		
		if(limited && (nb_li <= args.limit)){
			limited = false;
		}
		
		var largeur_thumb = largeur_defil = nb_pages = largeur_totale = 0;
		if(vert){
			_ul.css({
				position: 'absolute',
				top: 0,
				left: 0
			});
		}
		else{
			_ul.css({
				position: 'absolute',
				top: 0,
				left: 0
			});
		}
		
		//on encapsule la carousel
		_ul.wrap('<div class="carousel-cont-photos"></div>');
		
		var _galcont = _ul.parent('.carousel-cont-photos');
		
		_galcont.wrap('<div class="global-carousel '+(vert ? 'vertical' : 'horizontal')+'"></div>');
		var _globalp = _galcont.parent('.global-carousel');
		
		var padw = padh = 0;
		if(limited){
			//ajout des pad
			if(vert){
				_globalp.prepend('<div class="pad go-up"></div>');
				_globalp.append('<div class="pad go-down"></div>');
				//place pour le pad
				padh = _globalp.find('.pad.go-up').height() + 5;
				_galcont.css('margin-top', padh);
			}
			else{
				_globalp.prepend('<div class="pad go-left"></div>');
				_globalp.append('<div class="pad go-right"></div>');
				//place pour le pad
				padw = _globalp.find('.pad.go-left').width() + 5;
				_galcont.css('margin-left', padw);
			}
		}
		largeur_thumb = _galcont.find('.thumb:first').innerWidth() + $.carousel.vborder(_galcont.find('.thumb:first')) + parseInt(_galcont.find('.thumb:first').css('margin-right').replace('px', '')) + parseInt(_galcont.find('.thumb:first').css('margin-left').replace('px', ''));
		hauteur_thumb = _galcont.find('.thumb:first').innerHeight() + $.carousel.hborder(_galcont.find('.thumb:first')) + parseInt(_galcont.find('.thumb:first').css('margin-top').replace('px', '')) + parseInt(_galcont.find('.thumb:first').css('margin-bottom').replace('px', ''));
		
		// largeur de la zone de defilement
		largeur_defil = largeur_thumb * args.limit;
		
		// hauteur de la zone de defilement
		hauteur_defil = hauteur_thumb * args.limit;
		
		if(vert){
			//on set la hauteur du conteneur du ul
			_galcont.height(hauteur_defil);
			//ajustement de la largeur globale
			_galcont.width(largeur_thumb);
			_globalp.width(largeur_thumb);
		}
		else{
			//on set la largeur du conteneur du ul
			_galcont.width(largeur_defil);
			//ajustement de la hauteur globale
			_galcont.height(hauteur_thumb);
			_globalp.height(hauteur_thumb);
		}
		
		//nombre de page
		nb_pages = Math.ceil(nb_li / args.limit);
		
		if(vert){
			//on calcule la hauteur de la zone qui contiendra les miniatures
			hauteur_totale_ul = hauteur_thumb * nb_li;
			_ul.height(hauteur_totale_ul);
			
			//calcul de la hauteur du conteneur principal
			var hauteur_pad = _galcont.find('.pad').outerHeight();
			var hauteur_totale = _galcont.height() + $.carousel.cleanpx(_galcont.css('margin-top')) + hauteur_pad + $.carousel.cleanpx(_ul.css('margin-top'));
			
			_globalp.height(hauteur_totale + padh);
			$.carousel.events(_ul, hauteur_defil, nb_pages, vert);
		}
		else{
			//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 = _galcont.find('.pad').outerWidth();
			var largeur_totale = _galcont.width() + $.carousel.cleanpx(_galcont.css('margin-left')) + largeur_pad + $.carousel.cleanpx(_ul.css('margin-left'));
			
			_globalp.width(largeur_totale + padw);
			$.carousel.events(_ul, largeur_defil, nb_pages, vert);
		}
		
		
		if(args.lightbox){
			
			$(this).before('<div id="'+div_lnk+'"/>');
			
		}
		
		if(nb_li > 0){
		
			_li.each(function(i){
				
				var _thumb = $(this);
				
				if(args.resize){
					$.carousel.redim(_thumb.find('img'), args.twidth, args.theight);
				}
			
				var rel = _a = '';
				
				_thumb.click(function(){
					
					args.click();
					
				});
				
				
				if(_a.length > 0){
					
					$('#img-big').unbind('click').click(function(){
						
						 $('#'+div_lnk+' a[rel="'+$(this).attr('rel')+'"]').click();
						
					});
					
				}
				
			});
		}
		
		args.complete();
		
		return $(this);
		
	};
	
	
	$.carousel = {
		hborder: function(_el){
			return $.carousel.cleanpx(_el.css('borderLeftWidth')) + $.carousel.cleanpx(_el.css('borderRightWidth'));
		},
		vborder: function(_el){
			return $.carousel.cleanpx(_el.css('borderTopWidth')) + $.carousel.cleanpx(_el.css('borderBottomWidth'));
		},
		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){
			if(string == 'auto'){
				return 0;
			}
			return parseInt(string.replace('px', '').replace('pt', ''));
		
		},
		events: function(_ul, largeur_defil, nb_pages, vert){
		
			//obj
			var _galcont = _ul.parent('.carousel-cont-photos');
			var _main = _galcont.parent('.global-carousel');
			
			//pads
			var _pads = _main.find('.pad');
			var _left = _main.find('.go-left');
			var _right = _main.find('.go-right');
			
			var _up = _main.find('.go-up');
			var _down = _main.find('.go-down');
			
			//on vire les evenements
			_pads.unbind('click');
			//on check si on est sur la derniere
			
			if(vert){
				
				var top = $.carousel.cleanpx(_ul.css('top'));
				
				//on recupere la page
				var page = Math.abs((top / largeur_defil) - 1);
				
				_down.removeClass('disabled');
				
				if(page < nb_pages){
					
					_down.show();
					//events
					_down.click(function(){
						
						$(this).unbind('click');
			
						var new_top = top - largeur_defil;
						
						//on avance
						_ul.animate({top: new_top+'px'}, 300, function(){
							$.carousel.events(_ul, largeur_defil, nb_pages, vert);
						});
			
					});
				}
				else{
					_down.addClass('disabled');
				}
				
				_up.removeClass('disabled');
				
				if(page > 1){
					_up.show();
					//events
					_up.click(function(){
						
						$(this).unbind('click');
			
						var new_top = top + largeur_defil;
			
						//on avance
						_ul.animate({top: new_top+'px'}, 300, function(){
							$.carousel.events(_ul, largeur_defil, nb_pages, vert);
						});
						
					});
				}
				else{
					_up.addClass('disabled');
				}
			
			}
			else{
				
				var left = $.carousel.cleanpx(_ul.css('left'));
		
				//on recupere la page
				var page = Math.abs((left / largeur_defil) - 1);
			
				_right.removeClass('disabled');
				
				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(){
							$.carousel.events(_ul, largeur_defil, nb_pages);
						});
			
					});
				}
				else{
					_right.addClass('disabled');
				}
			
				_left.removeClass('disabled');
				
				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(){
							$.carousel.events(_ul, largeur_defil, nb_pages);
						});
						
					});
				}
				else{
					_left.addClass('disabled');
				}
			}
		
		}
	};
	
	
})(jQuery);
