(function($) {
  $.fn.clearScrolling = function(opts) {
    opts = $.extend({
      speed:100, // vitesse d'animation
      tag:'li' // tag à utiliser
    },opts||{});

    var $this = $(this);
    var containerWidth = 0; // initialisation de la largeur totale du conteneur
    var totalImg = $this.find(opts.tag).length; // nombre total d'images
    var is_unique = false;
    var speed;

    if (totalImg == 1) {
      var htmlObject = $this.html();
      $(htmlObject).appendTo($this);
      totalImg = 2;
      is_unique = true;
    }

    // $container = conteneur de la liste à puce
    function nextPanel($container) {
        imgWidth = $container.eq(0).find(opts.tag).width(); // récupère la dimension de la première image

        speed = 1000*(imgWidth/1000);
        $container.animate(
          { left: -imgWidth }, // on anime le bloc sur la distance de la largeur de la première image
          (speed*opts.speed),
          'linear',
          // callback : une fois qu'il a terminé l'animation
          function() {
            if (is_unique) {
              $container.css('left',parseInt($container.parent().width())+30);
            } else {
              $container.css('left',0); // on repositionne le conteneur à 0px
            }

            $container.find(opts.tag).eq(0).insertAfter( $container.find(opts.tag).eq(totalImg-1) ); // on place la première image à la fin de la liste d'éléments
            nextPanel($container); // on relance la fonction (en boucle)
          }
        );
    }

    // une fois que le DOM est chargé
    $(window).load(function() {
       $this.find(opts.tag).each(function() {
        containerWidth += $(this).width(); // on récupère la largeur de chaque image puis on additionne
      });
      $this.width(containerWidth); // on attribue la largeur totale au conteneur

      if (is_unique) {
        $this.css('left',parseInt($this.parent().width())+30);
      }

      nextPanel( $this ); // on lance la fonction qui tourne en boucle
    });
  }
})(jQuery);


/*
  Plugin ClearCarousel par Olivier Gorzalka
  permet de créer un caroussel
  Dernière mise à jour : 6 avril 2009
*/
(function($) {
  $.fn.extend({
    clearCarousel: function(options) {
      // Default options
      var settings = {
        insideContainer:'ul', // conteneur de la liste des panneaux à défiler
        panelTag:'li', // balise des différents panneaux
        nextBtn:'.nextitem', // selecteur suivant
        prevBtn:'.previousitem', // selecteur précédent
        classInsideWrapper:'.wrappernavigation', // classe du conteneur ajouté en javascript
        nbrToShow:5, // nbre de diapo à afficher par défaut
        timing:500, // vitesse de l'animation
        activeBtnCss: {
          cursor:'pointer',
          opacity:1
        },
        inactiveBtnCss: {
          cursor:'default',
          opacity:0.5
        }
      };
      if(options) $.extend(settings, options);

      var widthElem;
      var page = 0;
      var baseWidth = 0;

      function c(classSelector) { return classSelector.substr(1, classSelector.length); }  // remove the "." form the class selector

      var $this = $(this);
      $this.addClass('clearCarousel');
      var $container =  $this.find(settings.insideContainer);
      var $screens = $container.find(settings.panelTag);
      var totalScreen = $screens.length;
      if (totalScreen <= settings.nbrToShow) { $(settings.nextBtn+','+settings.prevBtn).css('display','none'); } else {
        $(settings.prevBtn).css(settings.inactiveBtnCss);
      }

      function nextPrevSlide(sense) {
        if(sense=='next') {
          $(settings.prevBtn).css(settings.activeBtnCss);
          if (page+settings.nbrToShow != totalScreen) {
            page++;
            //if (page+page)
            var movementNext = $container.offset().left - $screens.eq(page).offset().left;
            $container.stop().animate({
              'left':movementNext
            },settings.timing,function() {
              if (page+settings.nbrToShow == totalScreen) { $(settings.nextBtn).css(settings.inactiveBtnCss); }
              else { $(settings.nextBtn).css(settings.activeBtnCss); }
            });
          }
        } else {
          if (page != 0) {
            page--
            $(settings.nextBtn).css(settings.activeBtnCss);
            var movementPrevious = $container.offset().left - $screens.eq(page).offset().left;
            $container.stop().animate({
              'left':movementPrevious
            },settings.timing,function() {
              if (page == 0) { $(settings.prevBtn).css(settings.inactiveBtnCss); }
              else { $(settings.prevBtn).css(settings.activeBtnCss); }
            })
          }
        }
      }

      $container.wrap('<div class="'+c(settings.classInsideWrapper)+'"></div>')

      $(settings.classInsideWrapper)
        .css('overflow','hidden')
        .find(settings.insideContainer);


      $(settings.nextBtn).click(function() { nextPrevSlide('next'); return false });
      $(settings.prevBtn).click(function() { nextPrevSlide('previous'); return false });

      $(window).load(function() {
        var highest = 0;
        $screens.each(function() {

          var border_left = parseInt($(this).css('border-left-width'));
          var border_right = parseInt($(this).css('border-right-width'));
          var padding_left = parseInt($(this).css('padding-left'));
          var padding_right = parseInt($(this).css('padding-right'));
          var margin_left = parseInt($(this).css('margin-left'));
          var margin_right = parseInt($(this).css('margin-right'));
          widthElem = $(this).width();
          if (!isNaN(margin_left)) widthElem += margin_left;
          if (!isNaN(margin_right)) widthElem += margin_right;
          if (!isNaN(padding_left)) widthElem += padding_left;
          if (!isNaN(padding_right)) widthElem += padding_right;
          if (!isNaN(border_left)) widthElem += border_left;
          if (!isNaN(border_right)) widthElem += border_right;
          baseWidth += widthElem;

          var border_top = parseInt($(this).css('border-top-width'));
          var border_bottom = parseInt($(this).css('border-bottom-width'));
          var padding_top = parseInt($(this).css('padding-top'));
          var padding_bottom = parseInt($(this).css('padding-bottom'));
          var margin_top = parseInt($(this).css('margin-top'));
          var margin_bottom = parseInt($(this).css('margin-bottom'));
          heightElem = $(this).height();
          if (!isNaN(padding_bottom)) heightElem += padding_top;
          if (!isNaN(padding_top)) heightElem += padding_top;
          if (!isNaN(border_top)) heightElem += border_top;
          if (!isNaN(border_bottom)) heightElem += border_bottom;

          var heightContainer = heightElem;
          if (!isNaN(margin_bottom)) heightContainer += margin_bottom;
          if (!isNaN(margin_top)) heightContainer += margin_top;

          if (heightContainer>=highest) {
            highest = heightContainer;
          }
          $screens.css('height',heightElem)


          $(settings.classInsideWrapper).find(settings.insideContainer).css('width',baseWidth);
        });
        $this.find(settings.classInsideWrapper).css('height',highest-10)
      });
    }
  });
})(jQuery);


/*---------------------------------------

  SELECTEURS ADDITIONNELS

----------------------------------------*/


// Extension CSS external: Olivier Gorzalka
// selecteur de lien externe
// utilisation $('a:external') ou tout simplement $(':external')
$.extend($.expr[':'],{
  external: function(a) {
    var url = a.href;
    var dom = window.location.hostname;
    var dom1 = dom.replace(/\./g, "\\.")
    var dom2 = dom1.replace(/\//g, "\\/")
    var pat = new RegExp("([^:]{2,6}://)?("+dom2+")?(.*)");
    var res;
    if( url && url.charAt(0) == '/' ) { return false; } // Chemin absolu avec slash ?
    res = url.match(pat);
    if( !res[1] || res[1].length == 0 ) { return false; } // Chemin relatif
    if( !res[2] || res[2].length == 0 ) { return true; } // Url externe
    if( $(a).attr("rel") == 'external') { return true; } // lien comportant déjà rel external
    return false ; // Sinon, lien interne
  }
});

/*---------------------------------------

  Plugins jQuery

----------------------------------------*/


/*
**  jquery.linkAnylizer.js -- jQuery plugin for anylising selected links
**  Olivier Gorzalka
**
**  Params :
**  @selectors: list of selector to retrieve (ex: selectors: ':external,:file(doc),:file(pdf)')
**  @ignore: selector of link to ignore separated by coma (ex: ignore: '.ignoreExternal, #linkId')
**  @new_window_txt: text to add in the title for external link (ex: new_window_txt: 'Open In A New Window')
**  LastChangedDate: 29 Dec 2008
*/
(function($) {
  $.fn.extend({
    linkAnylizer: function (options) {
      // Default options
      var settings = {
        selectors: null,
        ignore : '.ignoreExternal',
        new_window_txt : 'dans une nouvelle fenêtre'
      };
      if(options) $.extend(settings, options);

      var $link = $(this).find('a').not(settings.ignore);
      $link.each(function(i,item) {
        if( $(item).attr('href') == undefined ) return;
        if (settings.selectors != null) {
          var listSelectors = settings.selectors.split(','); // array of files to be tested
          var matchExp = new RegExp(/\:(file\()?(\w*)\)?$/);
          // file analysis
          $(listSelectors).each(function(i,selector){
            var classElem = selector.match(matchExp); // class to apply on the link
            if($(item).is(selector)) {
              if (selector == ':external') {
                var title;
                if( $(item).attr("title") != undefined )
                  title = $(item).attr("title");
                else
                  title = $(item).text();
                if( $(item).hasClass('iconAfter') ){
                  $(item).after('&nbsp;<span class="iconlink '+classElem[2]+'">&nbsp;</span>');
                }
                else{
                  $(item).attr({
                    'rel':'external',
                    'title': title +" ("+settings.new_window_txt+")"
                  }).addClass('iconlink '+classElem[2]); // give the class to the object
                  $(item).attr('target','blank');
                }
              } else {
                if( $(item).hasClass('iconAfter') ){
                  $(item).after('&nbsp;<span class="iconlink '+classElem[2]+'">&nbsp;</span>');
                }
                else
                  $(item).addClass('iconlink '+classElem[2]); // give the class to the object
              }
            }
          });
        }
      });
    }
  });
})(jQuery);


$(document).ready(function() {

  Shadowbox.init({
    overlayOpacity : '0.7'
  });

  $('<div class="roundedcorner"></div>').appendTo('#banner');

  $('#sidebarMenu,#mainContent').linkAnylizer({
    selectors: ':external,:file(doc),:file(pdf),:file(ppt),:file(image),:file(music),:file(archive),:file(video),:file(email)'
  });

  $('#previous_month,#next_month').live('click', function() {
    // var uri = this.href + ' #agenda>*'
    var uri = this.href.replace(/.*\?/, 'assets/snippets/calendar/calendar.php?')
    $('#agenda').fadeTo('fast', 0.1)
    $('#agenda').load(uri, function(){
      $('#agenda').fadeTo('slow', 1)
    })
    return false
  })

  $('#slideimg ul').clearScrolling({ speed: 30});
  $('#marquee p').clearScrolling({tag: 'span', speed: 40});

  $('#gallery .gallery_slider').clearCarousel({
    insideContainer:'ul', // conteneur de la liste des panneaux à défiler
    panelTag:'li', // balise des différents panneaux
    nextBtn:'#next_image', // selecteur suivant
    prevBtn:'#previous_image', // selecteur précédent
    classInsideWrapper:'.wrappernavigation', // classe du conteneur ajouté en javascript
    nbrToShow:2, // nbre de diapo à afficher
    timing:500, // vitesse de l'animation
    activeBtnCss: { cursor:'pointer', opacity:1 },
    inactiveBtnCss: { cursor:'default', opacity:0.5 }
  });

});
