/*
 * MultiSlides - jQuery plugin
 *
 *	http://www.anthor.net/
 *
 * Copyright (c) 2008 FOURNET Loïc
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 */
 
(function($) {
	// Fonction d'appel
	$.fn.MultiSlides = function(options) {
        return this.each(function() {   
            $.MultiSlides(this, options);
        });
    };
    
    // Fonctions Privées
	$.MultiSlides = function(container, options) {
		// Options par défauts
		var opts = $.extend({
			'autoStart' :			true,
			'height':    			'235px',
			'width':    			'620px',
			'animationtype':    	'fade',
			'speed':            	2000,
			'speedMenu':           	750,
			'timeout':          	5000,
			'runningclass':     	'multislides',
            'children':         	null,
            'SliderWidth':			'175px',
            'SliderOpacity':		'0.7',
            'SliderColor':			'#FFFFFF',
            'SliderBackground':		'#000000',
            'SliderBtnText':		'Visites 360°&nbsp;&nbsp;&nbsp;^'
		}, options);

		// Images contenus dans l'enfant ou un élément précis.
		if (opts.children === null)
            var images = $(container).children();
        else
            var images = $(container).children(opts.children);
        
        // Vérification du nombre d'éléments
        if (images.length > 1) {
        	// Mise à jour de la hauteur du conteneur, et ajout de la classe
        	$(container).css({'position': 'relative', 'height': opts.height, 'width': opts.width, 'overflow': 'hidden'}).addClass(opts.runningclass);
        	
        	// Parcours des éléments et mise à jour CSS
        	for (var i = 0; i < images.length; i++) {
                $(images[i]).css({
					'z-index': String(images.length-i),
					'position': 'absolute',
					'margin' : 0,
					'padding': 0
				}).hide();
            };

            // Mise en route de la rotation si démarrage automatique
            if(opts.autoStart)
            {
	            MultiSlidesTimeOut = setTimeout(function() {
	                do { 
						current = Math.floor ( Math.random ( ) * ( images.length ) );
					} while (0 == current);
					$.MultiSlides.next(images, opts, current, 0);
	            }, opts.timeout / 2);
	            
	            $(container).addClass('MultiStarted');
            }
            $(images[0]).show();            
            
            // Création du slide des miniatures
            $(container).append('<div class="Slider"></div>')
				.find(".Slider")
					.css({
						'color': opts.SliderColor,
						'width': opts.SliderWidth,
						'height': opts.height,
						'z-index': String(images.length *2),
						'position': 'absolute'
					})
				.append('<div class="SliderContent"><div class="SliderThumbs"><div class="left">&lt;</div><div class="right">&gt;</div><div class="content"><div></div></div></div><div class="SliderLegende">&nbsp;</div><br />&nbsp;&nbsp;&nbsp;'+opts.SliderBtnText+'<div class="SliderPano"><div class="left">&lt;</div><div class="right">&gt;</div><div class="content"><div></div></div></div></div><div class="SliderBack"></div><div class="SliderBtn">Diaporama | '+opts.SliderBtnText+'</div>');
				
				// Donne une taille fixe au contenu
				$(".SliderContent, .SliderBack").css({
					'position': 'absolute',
					'width': opts.SliderWidth,
					'height': 0,
					'top': String( parseInt(opts.height) - $(".SliderBtn").height() )+'px',
					'z-index': String(images.length *3)
				}).hide();
				$(".SliderBack").css({
					'background-color': opts.SliderBackground,
					opacity: opts.SliderOpacity,
					'z-index': String($(".SliderContent").css("z-index")-1)
				});

				// Place le bouton en dessous du contenu
				$(".SliderBtn").css({
						'top': String( parseInt(opts.height) - $(".SliderBtn").height() ) + 'px',
						'z-index': String(images.length *4),
						'width': opts.SliderWidth,
						'position': 'absolute'
				});
				
				// Remplissage Panoramique / Miniatures
				for (var i = 0; i < images.length; i++) {
					var legend = ' legend="'+$(images[i]).attr('legend')+'"';
					var image_src = $(images[i]).find('img').attr('src');
					
					// Panoramique
    	    		if($(images[i]).width() > parseInt(opts.width))
						$(".SliderPano .content div").append('<span rel="'+i+'"'+legend+'><img src="'+image_src+'" width="140" height="40" vspace="9" /></span><br />');
					// Miniatures
					else
						$(".SliderThumbs .content div").append('<span rel="'+i+'"'+legend+'><img src="./_libs/img_crop.php?src='+image_src+'" width="40" height="40" hspace="3" vspace="4" /></span>');
            	};
            	
            	// onClick sur miniatures et hover legend ^^
				$(".SliderThumbs span, .SliderPano span").each(function(){
					$(this).click(function(){
						$.MultiSlides.forceNext(images, opts, $(this).attr('rel'));
					}).mouseover(function(){
						if($(this).attr('legend') !== 'undefined')
							$('.SliderLegende').html($(this).attr('legend'));
					}).css('cursor', 'pointer');
				});
				
				// Pause HOVER
				$(container).hover(function(){
					$(this).addClass('in_pause');
					$(this).stop();
				}, function(){
					$(this).removeClass('in_pause');
				});
				
				// Pano Slide
				$(container).append('<div id="MultiSlidesGoLeft">&nbsp;</div><div id="MultiSlidesFAKE">&nbsp;</div><div id="MultiSlidesGoRight">&nbsp;</div>');
	            $('#MultiSlidesGoLeft').css({
					'z-index': String(images.length + 4),
					'position': 'absolute',
					'background-color': '#000000',
					'opacity': '0.1',
					'height': opts.height,
					'width': '210px'
				}).hover(function(){
					var parent = $(this).parent();
					$(parent).addClass('in_goleft');
					$.MultiSlides.panoLeft(images, opts);
				}, function(){
					var parent = $(this).parent();
					$(parent).removeClass('in_goleft');
				});
				
				$('#MultiSlidesFAKE').css({
					'z-index': String(images.length + 4),
					'position': 'absolute',
					'background-color': '#000000',
					'opacity': '0.1',
					'height': opts.height,
					'width': '200px',
					'margin-left': '210px'
				});
				
				$('.Slider').hover(function(){
					var parent = $(this).parent();
					$(parent).addClass('in_goleft');
					$.MultiSlides.panoLeft(images, opts);
				}, function(){
					var parent = $(this).parent();
					$(parent).removeClass('in_goleft');
				});
	
				$('#MultiSlidesGoRight').css({
					'z-index': String(images.length + 5),
					'position': 'absolute',
					'background-color': '#000000',
					'opacity': '0.1',
					'height': opts.height,
					'width': '210px',
					'margin-left': '410px'
				}).hover(function(){
					var parent = $(this).parent();
					$(parent).addClass('in_goright');
					$.MultiSlides.panoRight(images, opts);
				}, function(){
					var parent = $(this).parent();
					$(parent).removeClass('in_goright');
				});
				
				// Hover sur le bouton et le slider...
				$(".SliderBtn, .SliderContent, .SliderBack").hover(function(){
					// Get Sliding Menu
					$(".SliderContent, .SliderBack").show().animate({
						height: String( parseInt(opts.height) - $(".SliderBtn").height() )+'px', 
						top: 0
					},{ 
						queue: false, 
						duration: opts.speedMenu
					});
				}, function(){
					// Hide Sliding Menu
					$(".SliderContent, .SliderBack").animate({
						height: 0, 
						top: String( parseInt(opts.height) - $(".SliderBtn").height() )+'px'
					}, {
						queue: false, 
						duration: opts.speedMenu
					}).hide();
				});

				// Déplacement petite thumbs
				$(".SliderThumbs .content").css({'position': 'relative', 'height': '96px'});
				$(".SliderThumbs .content div").css("margin-top", 0); // Prevent IE auto margin...
				
				$('.SliderThumbs .left').click(function(){
					var marginTop = parseInt($(".SliderThumbs .content div").css("margin-top"))+96;
					if(marginTop <= 0)
						$(".SliderThumbs .content div").css({'position': 'absolute', 'margin-top': marginTop+'px'});
				});
				$('.SliderThumbs .right').click(function(){
					var marginTop = parseInt($(".SliderThumbs .content div").css("margin-top"))-96;
					//alert($(".SliderThumbs .content div").css("margin-top"));
					if(marginTop + $(".SliderThumbs .content div").height() > 0)
						$(".SliderThumbs .content div").css({'position': 'absolute', 'margin-top': marginTop+'px'});
				});
				
				// Déplacement Panoramique
				$(".SliderPano .content div").css({'margin-top': 0}); // Also prevent the IE auto margin...
				
				$('.SliderPano .left').click(function(){
					var marginTop = parseInt($(".SliderPano .content div").css("margin-top"))+58;
					if(marginTop <= 0)
						$(".SliderPano .content div").css({'margin-top': marginTop+'px'});	
				});
				$('.SliderPano .right').click(function(){
					var marginTop = parseInt($(".SliderPano .content div").css("margin-top"))-58;
					if(marginTop + $(".SliderPano .content div").height() > 0)
						$(".SliderPano .content div").css({'margin-top': marginTop+'px'});
				});
        }
	};
	
	// Fonction permettant de switcher entre deux images...
	$.MultiSlides.next = function(images, opts, current, last) {
		var p = $(images[0]).parent();
		
		if(!$(p).hasClass('in_pause'))
		{		
			// Image normale ou panoramique ?
			if($(images[current]).width() > parseInt(opts.width))
			{
				$(images[current]).css({'left': '0px'});
				$(images[current]).animate({
					left: String( parseInt(opts.width) - $(images[current]).width() )
				},{ 
					queue: false, 
					duration: opts.timeout + opts.speed
				});
			}
	
			// On enleve l'image actuelle
			$(images[last]).animate({opacity:'hide'}, { queue: false, duration: opts.speed });
			// On affiche la prochaine image
	        $(images[current]).fadeIn(opts.speed, function() {
				removeFilter($(this)[0]);
			});
		}
		// On prépare le prochain TimeOut
		MultiSlidesTimeOut = setTimeout(function() {
            do { 
				new_current = Math.floor(Math.random() * images.length);
			} while (current == new_current );

			//window.console.log('Next Slide : '+ current +' => '+new_current); // Debugging only
			$.MultiSlides.next(images, opts, new_current, current);
        }, opts.timeout);
	};
	
	// Fonction permettant de forcer le switch entre deux images...
	$.MultiSlides.forceNext = function(images, opts, current) {
		// Lancement timeout si autostart a false et non lancé
		if(!$(images[0]).parent().hasClass('MultiStarted'))
        {
        	//alert('go multi');
            MultiSlidesTimeOut = setTimeout(function() {
                do { 
					current = Math.floor ( Math.random ( ) * ( images.length ) );
				} while (0 == current);
				$.MultiSlides.next(images, opts, current, 0);
            }, opts.timeout);
            
            $(images[0]).parent().addClass('MultiStarted');
        }
		
		
		// Image en cours ?
		for (var i = 0; i < images.length; i++)
			if($(images[i]).css('display') == 'block')
				var last = i;
		// Image normale ou panoramique ?
		if($(images[current]).width() > parseInt(opts.width))
		{
			// Panoramique au milieu
			var middle = (parseInt(opts.width) - $(images[current]).width())/2;
			$(images[current]).css({'left': middle +'px'});
		}
	
		// On enleve l'image actuelle
		$(images[last]).animate({opacity:'hide'}, { queue: false, duration: opts.speed });
		// On affiche la prochaine image
        $(images[current]).fadeIn(opts.speed, function() {
			removeFilter($(this)[0]);
		});
	};
	
	// Fonction permettant de forcer le panoramique vers la gauche
	$.MultiSlides.panoLeft = function(images, opts) {
		var p = $(images[0]).parent();
		if($(p).hasClass('in_goleft'))
		{
			// Empeche le slide si le menu est ouvert
			if($('.SliderContent').css('top') !== '0px')
			{			
				// Image en cours ?
				for (var i = 0; i < images.length; i++)
					if($(images[i]).css('display') == 'block')
						var pano = i;
		
				if($(images[pano]).width() > parseInt(opts.width))
				{	
					var new_css = parseInt($(images[pano]).css('left'))+2;
					if(new_css <= 0)
						$(images[pano]).css({ 'left': new_css + 'px' });
				}
			}
			
			var left_pano = setTimeout(function(){
				$.MultiSlides.panoLeft(images, opts);
			}, 10); 
		}
	};
	// Fonction permettant de forcer le panoramique vers la droite
	$.MultiSlides.panoRight = function(images, opts) {
		var p = $(images[0]).parent();
		if($(p).hasClass('in_goright'))
		{
			// Image en cours ?
			for (var i = 0; i < images.length; i++)
				if($(images[i]).css('display') == 'block')
					var pano = i;
	
			if($(images[pano]).width() > parseInt(opts.width))
			{	
				//$(images[pano]).stop();
				
				var new_css = parseInt($(images[pano]).css('left'))-2;
				var max_css = parseInt(opts.width) - $(images[pano]).width();
				
				if(max_css <= new_css)
					$(images[pano]).css({ 'left': new_css + 'px' });
			}
			
			var right_pano = setTimeout(function(){
				$.MultiSlides.panoRight(images, opts);
			}, 10); 
		}
	};
})(jQuery);

// **** remove Opacity-Filter in ie ****
function removeFilter(element) {
	if(element.style.removeAttribute){
		element.style.removeAttribute('filter');
	}
}