/**
 * jQuery plugin for www.varldenidag.se (sitespecific) (jquery.vidBlog.js)
 *
 * Handles the blog for the site
 *
 * CSS and XHTML required
 * Other plugin required: .scrollTo()
 *
 * @version 0.1
 * @Created: 2010-11-15
 * @Author: Oscar Engström, www.engstream.se
 *
 */
(function($) {
  $.fn.vidBlog = function(options) {
      var opts = $.extend({}, $.fn.vidBlog.defaults, options);

      //Is this a webkit-browser? (like Safari or Chrome)
      if($.browser.webkit){
          //Yes it is, then we need to wait until document is loaded, otherwise it will look messy
          $tmp = this; //Otherwise it won't be recognized in window load-function
          $(window).load(function(){
              return $.fn.vidBlog.initSideSlide($tmp);
          });
      } else {
          //No, that's good, just continue
          return $.fn.vidBlog.initSideSlide(this);
      }
  };

  $.fn.vidBlog.initSideSlide = function(){
      //How many items are there?
      var noOfItems = $("#blogBox .itemHolder .item").length;
      //How wide are they?
      $.fn.vidBlog.params.itemWidth = $("#blogBox .itemHolder .item:first").width() + parseInt($("#blogBox .itemHolder .item:first").css('marginLeft')) + parseInt($("#blogBox .itemHolder .item:first").css('marginRight')) + $("#blogBox .itemHolder .divider:first").width();

      //How wide should the holder be?
      //At end, subtract width for a/one divider, since the loop never ends with a divider
      var holderWidth = ($.fn.vidBlog.params.itemWidth * noOfItems) - $("#blogBox .itemHolder .divider:first").width();
      $.fn.vidBlog.params.endLeftScroll = $.fn.vidBlog.params.itemWidth * (noOfItems-2);
      //Set holders width
      $("#blogBox .itemHolder").css({ 'width' : holderWidth + 'px' });

      $.fn.vidBlog.setInterval();

      //Bind the arrows at the sides to action
      //Show previous item
      $("#blogBox .previous").click(function(ev){
          ev.preventDefault();
          $.fn.vidBlog.goPrevious();

          //Stop slideshow, temporary
          clearInterval($.fn.vidBlog.defaults.intervalHolder);
          clearTimeout($.fn.vidBlog.defaults.timeoutHolder);

          $.fn.vidBlog.restart();
      });

      //Show next item
      $("#blogBox_next").click(function(ev){
          ev.preventDefault();
          $.fn.vidBlog.goNext();

          //Stop slideshow, temporary
          clearInterval($.fn.vidBlog.defaults.intervalHolder);
          clearTimeout($.fn.vidBlog.defaults.timeoutHolder);

          $.fn.vidBlog.restart();
      });

      //When hovering a link/item, stop slideshow
      $("#blogBox a.item").live('mouseenter', function(){
          //Stop slideshow, temporary
          clearInterval($.fn.vidBlog.defaults.intervalHolder);
          clearTimeout($.fn.vidBlog.defaults.timeoutHolder);
      });

      //On mouseleave, restart slideshow
      $("#blogBox a.item").live('mouseleave', function(){
          $.fn.vidBlog.restart();
      });
  }

  $.fn.vidBlog.setInterval = function(){
      $.fn.vidBlog.defaults.intervalHolder = setInterval(function(){
          $.fn.vidBlog.goNext();
      }, $.fn.vidBlog.defaults.slideInterval);
  }

  $.fn.vidBlog.goPrevious = function(){
      $("#blogBox .rightBoxMiddle .itemWrapper").scrollTo({top:'+=0px', left:'-=' + $.fn.vidBlog.params.itemWidth + 'px'}, $.fn.vidBlog.defaults.duration);
  }

  $.fn.vidBlog.goNext = function(){
      $.fn.vidBlog.defaults.position = $("#blogBox .rightBoxMiddle .itemWrapper").scrollLeft();

      if($("#blogBox .rightBoxMiddle .itemWrapper").scrollLeft() == $.fn.vidBlog.params.endLeftScroll){
            clearInterval($.fn.vidBlog.defaults.intervalHolder);
            clearTimeout($.fn.vidBlog.defaults.timeoutHolder);

            $("#blogBox .rightBoxMiddle .itemWrapper").scrollTo({top:'+=0px', left:'0px'}, $.fn.vidBlog.defaults.duration*3);
            $.fn.vidBlog.restart();
        } else {
            $("#blogBox .rightBoxMiddle .itemWrapper").scrollTo({top:'+=0px', left:'+=' + $.fn.vidBlog.params.itemWidth + 'px'}, $.fn.vidBlog.defaults.duration);
        }
      
  }

  $.fn.vidBlog.restart = function(){
    //Restart it after X seconds of inactivity
    $.fn.vidBlog.defaults.timeoutHolder = setTimeout(function(){
        $.fn.vidBlog.setInterval();
    }, $.fn.vidBlog.defaults.waitTimeOut);
  }

  $.fn.vidBlog.defaults = {
    duration:             750,   //Integer, how many milliseconds for animation for each slide
    slideInterval:        12500,   //Integer, how many milliseconds between each slide
    waitTimeOut:          6500,   //Integer, how many milliseconds from click to restart of slideshow
    timeoutHolder:        0,      //Just a holder of the timeout, needed so that we can control whether the slideshow should re-start or not
    position:             0,      //Just a value of current position, updated in goNext-function
    intervalHolder:       0       //Just a holder of the interval, needed so that we can cancel and re-start it when wanted
  }

  $.fn.vidBlog.params = {
      itemWidth:            300,  //Integer, how wide are one item, or more accurate, how much do we have to scroll to see the next item correctly
      endLeftScroll:        false
  }

})(jQuery);
