/*
// jquery.activescroll.js
// dependencies: jquery.scrollTo
*/
(function($) {
  //
  // plugin definition
  //
  $.fn.activescroll = function(options) {
    // build main options before element iteration
    var opts = $.extend({}, $.fn.activescroll.defaults, options);
    // iterate and reformat each matched element
    return this.each(function() {
        var $this = $(this),
            $itemList = $this.find(opts.itemClass),
            $slider = $this.find(opts.viewSliderClass),
            $featuredItems = $this.find(opts.featuredClass);
            
        // init
        $slider.addClass("view-slider-setup");
        var $images = $slider.find('img').not('[src]'),
            $slider_body = $slider.children('ul'),
            slider_body_width = _calculateBodyWidth($slider_body);
          if ($slider_body.width() !== slider_body_width) {
              $slider_body.width(slider_body_width + 300);
          }

          _initActiveScrollBehavior();
        
          // private functions
          function _calculateBodyWidth(slider_body) {
              slider_body = slider_body || $slider.children('ul');
              var total_body_width = 0;
              slider_body.children('li').each(function(i) {
                  var $this = $(this);
                  var list_item_width = $this.outerWidth() + parseInt($this.css('margin-left')) + parseInt($this.css('margin-right'));
                  total_body_width = total_body_width + list_item_width;
              });
              return total_body_width;
          };
          function _initActiveScrollBehavior() {
              var activeItem = _getInitialActiveItem();
              currentActiveElement = activeItem;
              activeItem.addClass(opts.activeClass);
              $slider.scrollTo(activeItem, 350, {
                  offset: opts.sliderOffset
              });
              $itemList.parent().click(_onItemPodClick);
          };
          function _getInitialActiveItem() {
              var activeItem;
              if ((typeof($featuredItems) == "object") && ($featuredItems.length > 0)) {
                  activeItem = $($featuredItems[Math.floor(Math.random() * ($featuredItems.length))]);
              }
              else {
                  activeItem = $itemList.eq(0);
              }
              return activeItem;
          };
          function _onItemPodClick(evt) {
              var allowDefaultBehavior = true,
                  clicked = $(evt.target);
              if (!clicked.hasClass(opts.itemClass)) {
                  clicked = clicked.parents(".item").eq(0);
              }
              if (!clicked.hasClass(opts.activeClass)) {
                  var activeItem = $this.find("."+opts.activeClass);
                  activeItem.removeClass(opts.activeClass);
                  clicked.addClass(opts.activeClass);
                  $slider.scrollTo(clicked, {
                      duration: 150,
                      offset: opts.sliderOffset
                  });
                  allowDefaultBehavior = false;
              }
              return allowDefaultBehavior;
          };
    });
  };
  // public functions
  $.fn.activescroll.functionName = function(txt) {
    return 'something';
  };

  // plugin defaults
  $.fn.activescroll.defaults = {
    itemClass       :   '.item',
    featuredClass   :   '.featured',
    viewSliderClass :   '.view-slider',
    activeClass     :   'active',
    sliderOffset    :   -175
  };

})(jQuery);
