$.fn.slideShow = function(settings) {

	settings = $.extend({
        R2L: true,
		autoHeight: true,
		autoHeightEaseDuration: 1000,
		autoHeightEaseFunction: "easeInOutExpo",
		autoSlide: false,
		autoSlideInterval: 3000,
		autoSlideStopWhenClicked: true,
		crossLinking: true,
		dynamicArrows: false,
		dynamicArrowLeftText: "&#171; left",
		dynamicArrowRightText: "right &#187;",
		dynamicTabs: true,
		dynamicTabsAlign: "center",
		dynamicTabsPosition: "top",
		externalTriggerSelector: "a.xtrig",
		firstPanelToLoad: 1,
		panelTitleSelector: "h2.title",
		slideEaseDuration: 1000,
		slideEaseFunction: "easeInOutExpo",
        thumbContainer: '.linksPosition'
	}, settings);
	
	return this.each(function(){
		
		var slider = $(this);
        var container = slider.parent();
        var loc_rg = new RegExp(location.protocol + '//' + location.hostname);
		
        function isLoaded(href)
        {
            if(slider.find("div.link:contains('"+ href.replace(loc_rg, '') +"')").size() > 0)
                return slider.find("div.link:contains('"+ href.replace(loc_rg, '') +"')").first().closest('li');
            else
                return false;
        }

        function tnLiWithHref(href)
        {
            return $(settings.thumbContainer).find("li a[href|=" + href.replace(loc_rg, '') + "]").closest('li');
        }

        function onAnimationComplete()
        {
            if($(this).hasClass('current'))
                $(this).removeClass('current');
            else
            {
                $(this).removeClass('right left top bottom').addClass('current');
                slider.find('li').not($(this)).removeClass('current');
            }
            $(this).removeAttr('style');
            $('div.loading').hide();
            setImageTitle();
        }

        function positionInPlace(new_li, previous_thumbs)
        {
            //put on the right
            if(previous_thumbs.find("a[href|=" + slider.find("li.current div.link").html() + "]").length > 0) {
                var RorL = settings.R2L ? 'right' : 'bottom';
                var sign = '-'; 
            } else { //put on the left
                var RorL = settings.R2L ? 'left' : 'top';
                var sign = '+'; 
            }
            var cssToMove = {left: sign + '=1000'};
            if(!settings.R2L) {
                cssToMove = {top: sign + '=666'};
            }
            new_li.addClass(RorL).animate(cssToMove, { 
                duration: settings.slideEaseDuration,
                easing: settings.slideEaseFunction,
                complete: onAnimationComplete
            });
            $('li.current').animate(cssToMove, { 
                duration: settings.slideEaseDuration,
                easing: settings.slideEaseFunction
            });
            $(settings.thumbContainer).animate({left: 4 * 111 - previous_thumbs.length * 111}, { 
                duration: settings.slideEaseDuration,
                easing: settings.slideEaseFunction
            });
        }

        function updateArrowLinks(current_tn)
        {
            if(current_tn.next().length > 0)
                $('.next')[0].href = current_tn.next().find('a')[0].href; 
            else
                $('.next')[0].href = $(settings.thumbContainer).find('li:first a')[0].href; 
            if(current_tn.prev().length > 0)
                $('.previous')[0].href = current_tn.prev().find('a')[0].href; 
            else
                $('.previous')[0].href = $(settings.thumbContainer).find('li:last a')[0].href; 
        }

        function showAsCurrent(href)
        {
            //clicked the current one nothing to do
            if(slider.find("li.current div.link").first().html() == href.replace(loc_rg, '')) return;
            var clicked_tn = tnLiWithHref(href);
            $(settings.thumbContainer).find('li.active').add(clicked_tn).toggleClass('active')
            $('div.loading').show();
            if(returned_li = isLoaded(href)) {
                positionInPlace(returned_li, clicked_tn.prevAll());
            }
            else {
                $.get(href, {}, function(data){
                    returned_li = $(data);
	   	    returned_li.find('img').load(function(){
			    slider.append(returned_li);
			    positionInPlace(returned_li, clicked_tn.prevAll());
		    });
                });
            }
            updateArrowLinks(clicked_tn);
        }

		var navClicks = 0; // Used if autoSlideStopWhenClicked = true
        var autoClick = false;
		
		// Specify the current panel.
        var currentPanel = 1;
			
        updateArrowLinks(tnLiWithHref(slider.find("li.current div.link").html()));//initiate previous and next links

		// Left arrow click
		// Right arrow click
        $('.next').add('.previous').click(function(){
            if(!autoClick)
                navClicks++;
            showAsCurrent(this.href);
            return false;
        });

        $(settings.thumbContainer).find('li a').click(function(event){
            navClicks++;
            event.preventDefault();
            showAsCurrent(this.href);
        });

        $('.play').click(function(event){
            if(!autoSliding) {
                navClicks = 0;
                autoSliding = true;
                autoSlide();
            }
            return false;
        });

        $('.pause').click(function(event){
            navClicks++;
            autoSliding = false;
            return false;
        });

        $(document).keydown(function(event){
            switch(parseInt(event.keyCode)) {
                case 37:
                    $('.previous').trigger('click');
                    break;
                case 39:
                    $('.next').trigger('click');
                    break;
                case 32:
                    navClicks++;
                    break;
            }
        });
		
		// Trigger autoSlide
		if (settings.autoSlide) {
			slider.ready(function() {
                autoSliding = true;
				setTimeout(autoSlide,settings.autoSlideInterval);
			});
		};
		
        var autoSliding = false;

		function autoSlide() {
			if (autoSliding && (navClicks == 0 || !settings.autoSlideStopWhenClicked)) {
                autoClick = true;
                $('.next').trigger('click');
                autoClick = false;
                setTimeout(autoSlide,settings.autoSlideInterval);
			} 		
        };
	});
};

$.fn.smoothLink = function() {
    var settings = {duration: 1000,
                    easing: 'easeOutQuad'};
	return this.each(function(){
        function homeSmoothie(that)
        {
            $('div#main img.fond').animate({opacity: 0}, {
                duration: settings.duration,
                complete: function() {
                    $('div#main img.fond').animate({height: 'hide'}, {
                        duration: settings.duration,
                        easing: settings.easing,
                        complete: function() {
                        }
                    });
                    $('div.englobe').animate({top: 0}, {
                        duration: settings.duration,
                        easing: settings.easing,
                        complete: function() {
                            window.location = that.href + '?animate'
                        }
                    });
                }
            });
            $('h1.logo').animate({opacity: 0}, {
                duration: settings.duration
            });
        }

        function normalSmoothie(that)
        {
            $('div.thumbnailsVisible').animate({height: 'hide'}, settings.duration);
            $('div.content').add('div#footer').animate({opacity: 0, 'padding-top': 0}, {
                duration: settings.duration,
                complete: function() {
                    $('div.content').animate({height: 'hide'}, {
                        duration: settings.duration,
                        easing: settings.easing,
                        complete: function() {
                            $('div.nav_bar').animate({height: 'hide'}, {
                                duration: settings.duration,
                                complete: function() {
                                    window.location = that.href + '?animate'
                                }
                            });
                        }
                    });
                }
            });
        }

        $(this).click(function(event){
            var that = this;
            if($('body').hasClass('home'))//on the home
                homeSmoothie(that);
            else
                normalSmoothie(that);
            return false;
        });
    });
}

function smoothInit() {
    var settings = {duration: 1000,
                    easing: 'easeInQuad'};
    $('div.content.noHeight').animate({height: 666, 'padding-top': 20}, {
        duration: settings.duration,
        easing: settings.easing,
        complete: function() {
            $('div.thumbnailsVisible.noHeight').animate({height: 86},{
                duration: settings.duration,
                easing: settings.easing,
                complete: function() {
                }
            });
            $('div.content.noHeight').animate({opacity: 1}, {
                duration: settings.duration,
                complete: function() {
                        launchSlideshow();
                }
            });
            $('div#footer').animate({opacity: 1}, {
                duration: 500
            });
        }
    });
}

$.fn.smoothPanel = function(settings) {
    settings = $.extend({
        overCss: {},
        outCss: {},
        EaseDuration: 500,
        EaseFunction: 'easeOutQuad',
        compatClass: 'css3Compat',
        triggerEl: false
    }, settings);

    return this.each(function(){
        if(!jQuery.browser.webkit || !$(this).hasClass(settings.compatClass)) {
            var that = this;
            var triggerEl = that;  
            if(settings.triggerEl)
                triggerEl = settings.triggerEl;
            $(that).removeClass(settings.compatClass);
            var first_dimensions = $.extend({
                width: $(that).width(),
                height: $(that).height()
            }, settings.outCss);
            var animating = false;
            $(triggerEl).hover(
                function(){
                if(!animating){
                    animating = true;
                    $(that).animate(settings.overCss, settings.EaseDuration, settings.EaseFunction);
                }
            },
                function(){
                    $(that).animate(first_dimensions, settings.EaseDuration, settings.EaseFunction, function(){
                        animating = false;
                    });
            }
            );
        }
    });
};

$(window).load(function () {
    smoothInit();
});

function launchSlideshow()
{
    $('#slided_images').slideShow();
    $('#articles').slideShow({R2L: false});
}

function menuAnimations()
{
    $('.menuDroite').smoothPanel({
            overCss: { width: 271 }
    });
    if($('body').hasClass('home')) {
        $('.home .menu1imgs').smoothPanel({
            overCss: { height: 106, width: 265 }
        });
        $('.home .menu2imgs').smoothPanel({
            overCss: { height: 192, width: 265 }
        });
        $('.home .menu3imgs').smoothPanel({
            overCss: { height: 278, width: 265 }
        });
    } else {
        $('.menu1imgs').smoothPanel({
            overCss: { height: 120, width: 265 }
        });
        $('.menu2imgs').smoothPanel({
            overCss: { height: 200, width: 265 }
        });
        $('.menu3imgs').smoothPanel({
            overCss: { height: 280, width: 265 }
        });
    }
}

function setImageTitle()
{
    var title_h3 = $('li.part.current div.appearRight h3');
    var text = title_h3.length ? title_h3[0].innerHTML : '&nbsp;';
    if($('div.nav_bar h3').length)
        $('div.nav_bar h3')[0].innerHTML = text;
}

$(document).ready(function() {
    if(window.location.search.length == 0) //launch slideshow if no ?animate in the window.location
        launchSlideshow();
    $('div.menu a').add('div.nav_menu a').smoothLink();
    $('.content ul.container li.part .infoContainer').livequery(function(){
        $(this).smoothPanel({
            overCss: {width: 300}
        });
    });
    $('.content .plusContainer').smoothPanel({
            overCss: {width: 300}
    });
    $('.home').animate({opacity: 1}, 1000);
    menuAnimations();
    setImageTitle();
});


