var Homepage = {

   vignettes: null,
   vignetteCount: null,
   vignetteOrder: [],
   vignetteDelay: 8000,
   vignetteIndex: 0,
   vignetteAnimation: null,
   vignettePause: false,
   vignetteStopped: false,
   animationDuration: 800,

   vignetteNav: null,
   vignetteNavItem: null,

   init: function()
   {
      this.vignettes = jQuery(".vignettes .vignette");
      this.vignetteNav = jQuery('.vignette-nav');
      this.vignetteNavItem = '<a href="/" class="item"><div class="on"></div></a>';
      this.vignetteCount = this.vignettes.length;

      for (var i = 0; i < this.vignetteCount; i++)
      {
         this.vignetteOrder[i] = i;
         this.vignetteNav.append(this.vignetteNavItem);
      }
//      this.vignetteOrder.sort(this.randomize);

      this.vignetteIndex = 1;//Math.round(Math.random() * 2) * 3;

      jQuery(this.vignettes[this.vignetteOrder[this.vignetteIndex]]).hide()
         .css('left', '0px')
         .fadeIn(this.delayNextVigette());
      nextItem = this.vignetteIndex + 1;
      jQuery(this.vignetteNav).find('a.item:nth-child('+nextItem+') .on').fadeIn();

      this.handleVignetteNav();
   },

   randomize: function()
   {
      return (Math.round(Math.random()) - 0.5);
   },

   animateVignettes: function(newIndex)
   {
      if ((this.vignettePause == true) && (newIndex == null))
      {
         return;
      }
      if (newIndex != null)
      {
         this.vignetteStopped = true;
      }

      for (var i = 0; i < this.vignetteCount; i++)
      {
         if (jQuery(this.vignettes[i]).position().left <= -1000) /* in IE it does't animate all the way to -960  */
         {
            jQuery(this.vignettes[i]).css('left', '1000px');
         }
      }

      jQuery(this.vignettes[this.vignetteOrder[this.vignetteIndex]]).animate({
         left: '-1000px'
      }, this.animationDuration, 'swing');

      jQuery(this.vignetteNav).find('a.item:nth-child(' + (this.vignetteIndex + 1) + ') .on').fadeOut();
      if (newIndex != null)
      {
         this.vignetteIndex = newIndex;
      }
      else
      {
         this.vignetteIndex = (this.vignetteIndex + 1) % this.vignetteCount;
      }
      jQuery(this.vignetteNav).find('a.item:nth-child(' + (this.vignetteIndex + 1) + ') .on').fadeIn();

      jQuery(this.vignettes[this.vignetteOrder[this.vignetteIndex]]).animate({
         left: '0'
      }, this.animationDuration, 'swing', function() {
         Homepage.delayNextVigette();
      });
   },

   delayNextVigette: function()
   {
      clearTimeout(this.vignetteAnimation);
      if (this.vignetteStopped == false)
      {
         this.vignetteAnimation = setTimeout('Homepage.animateVignettes()', this.vignetteDelay);
      }
   },

   handleVignetteNav: function()
   {
      jQuery(this.vignetteNav).find('a.item').each(function(index)
      {
         jQuery(this).mouseenter(function()
         {
            Homepage.vignettePause = true;
         });
         jQuery(this).mouseleave(function()
         {
            Homepage.vignettePause = false;
            if (Homepage.vignetteStopped == false)
            {
               Homepage.delayNextVigette();
            }
         });
         jQuery(this).click(function(e)
         {
            if ((index != Homepage.vignetteIndex) &&
               (jQuery(Homepage.vignettes[Homepage.vignetteOrder[index]]).queue('fx') == 0))
            {
               clearTimeout(Homepage.vignetteAnimation);
               Homepage.animateVignettes(index);
            }
            e.preventDefault();
         });
      });
   }

}

jQuery(function() {

   Homepage.init();

});
