//CAROUSEL PHOTOS
$.fn.infiniteCarousel = function () {

  //REPEAT FUNCTION
  function repeat(str, n) {
    return new Array( n + 1 ).join( str );
  }

  return this.each(function () {
    //plugin code
    var $wrapper = $('> div', this).css('overflow','hidden'),
        $slider = $wrapper.find('> ul'),
        $items = $slider.find('> li'),
        $single = $items.filter(':first'),
        
        //outerWidth: width + padding (doesnt include margin)
        singleWidth = $single.outerWidth(),
        
        //note: doesnt include padding or border
        visible = 1,//Math.ceil($wrapper.innerWidth() / singleWidth),
        currentPage = 1,
        pages = Math.ceil($items.length / visible);
        
    //PADDING WITH EMPTY ITEMS    
    /*if(($items.length % visible) !=0) {
      $slider.append(repeat('<li class="empty" />', visible - ($items.length % visible)));
      $items = $slider.find('> li');
    } */
    
    // GENERATING CLONES  
    $items.filter(':first').before($items.slice(-1).clone().addClass('cloned'));
    $items.filter(':last').after($items.slice(0, 1).clone().addClass('cloned')); 
    //$items.filter(':first').before($items.slice(-visible).clone().addClass('cloned'));
    //$items.filter(':last').after($items.slice(0, visible).clone().addClass('cloned'));
    $items = $slider.find('> li'); //reselect
    
    //RESET SCROLL LEFT
    $wrapper.scrollLeft(singleWidth * visible);
    
    //GOTO METHOD
    function gotoPage(page) {
      var dir = page < currentPage ? -1: 1,
          n = Math.abs(currentPage - page),
          left = singleWidth * dir * visible * n;
      $wrapper.filter(':not(:animated)').animate({
        scrollLeft : '+=' + left
      }, 700, function () {
        if(page == 0){
          $wrapper.scrollLeft(singleWidth * visible * pages);
          page = pages;
        } else if (page > pages){
          $wrapper.scrollLeft(singleWidth * visible);
          page = 1;
        }  
        currentPage = page;
      });
      
      return false;    
    }
    
    //NAVIGATION BUTTONS
    $wrapper.after('<a class="arrow back"></a><a class="arrow forward"></a>');
    $('a.back', this).click(function() {
      return gotoPage(currentPage - 1);
    });
    $('a.forward', this).click(function() {
      return gotoPage(currentPage + 1);
    });
    $(this).bind('goto', function (event, page) {
     gotoPage(page);
     });
  });  
};
