/**
 * Homepage carousel
 */
var coverFlow = (function(){
  var self = {

    // Base element
    el: null,

    // Window interval object
    animation: null,

    // Mouse position
    checkMousePos: true,
    mousePos: {
      left: 0,
      top: 0
    },

    // Carousel fx settings
    fx: {
      speed:        1000,       // transition speed
      interval:     3 * 1000   // time between transitions
    },

    init: function(){
      self.el = $('#site-preview ul');
	  self.el.parent().addClass('loaded');

      if( self.el.size() == 0) return;

      // Setup Boutique carousel
      self.el.addClass('carousel')
          .attr('id', 'coverflow')
          .boutique({
            front_img_width:    360,
            front_img_height:   265,
            starter:            2,
            speed:              self.fx.speed,
            hoverspeed:         300,
            behind_opac:        1,
            back_opac:          1,
            behind_size:        0.9,
            back_size:          0.75,
            autoplay:           false,
            freescroll:         false,
            link_callback:      self.handleFrontClick
          });

      // Add video play element on specific links
      self.el.find('a').each(function(){
        if ($(this).hasClass('video')) {
          $(this).append('<span class="video"></span>');
        };
      });

      // Stop/Start carousel on mouse over/out
      self.el.hoverIntent({
        over: coverFlow.stop,
        out: coverFlow.start,
        timeout: 300
      });
      
      // Start carousel after load
      window.setTimeout(function(){coverFlow.start();}, 1000);

      // Save mouse position to check if mouse over carousel on load
      $(window).mousemove(self.handleMouseMove);
    },

    /* Handle mouse move event */
    handleMouseMove: function(e) {
      coverFlow.mousePos = {
        left: e.pageX,
        top: e.pageY
      };
    },

    /* Check if mouse cursor is over carousel element */
    isMouseOver: function() {
      var offset    = self.el.offset(),
          left      = offset.left,
          top       = offset.top,
          bottom    = top + self.el.outerHeight(),
          right     = offset.left + self.el.outerWidth();

      if ((self.mousePos.left < left) || (self.mousePos.left > right) || (self.mousePos.top < top) || (self.mousePos.top > bottom)) {
        return false;
      } else {
        return true;
      }

    },

    /* Trigger carousel next item */
    next: function() {
      if ($('#colorbox').is(':visible') || self.isMouseOver()) {
        self.stop();
      } else {
        coverflow_ext_next();
      }
    },

    /* Start carousel animation */
    start: function() {
      coverFlow.animation = window.setInterval("coverFlow.next()", coverFlow.fx.interval + coverFlow.fx.speed);
    },

    /* Stop carousel animation */
    stop: function() {
      window.clearInterval(coverFlow.animation);
    },

    /* Handle click event on front item */
    handleFrontClick: function(item) {
      var item = $(item);

      if (item.hasClass("video")){
        $.colorbox({
          opacity: 0.8,
          href: item.attr('href'),
          onOpen:     coverFlow.stop,
          onClosed:   coverFlow.start
        });
        
        return false;
        
      }else{
        return true; // redirect        
      }

    }
  };
  return self;
})();

