var jumpTo;

$(function () {

  var _util = {
    //wraps an integer n between 0 and max
    wrap:function(n,max){return(n<0?n%max+max:n%max);}
  }

  var images;
  var rollTime = 6000;
  var numRolls = 25;
  var imageSrc = heroImages;
  var imagesLoaded = 0;
  var imageIdx = 0;
  var rollTimeout;
  var roller = $('#home-heros');
  
  var jump = $('#home-heros-jump');
  var blocking = false;


  var unblock = function() { blocking = false; };
  var   block = function() { blocking = true ; };

  jumpTo = function (e) {

    jump.find('.active').removeClass('active');
    $(this).addClass('active');

    var to = e.data;

    if ( ! blocking ) {
      if ( imageIdx == to ) {
        return;
      }
      clearTimeout ( rollTimeout );
      rollTimeout = setTimeout ( roll, rollTime );
      block();
      images.eq ( imageIdx ).fadeOut();
      images.eq( imageIdx = _util.wrap ( to, images.length ) ).fadeIn( unblock );
      roller.attr('href', imageSrc[imageIdx].href);
    }
  }

  var roll = function () {
 
    block();
    images.eq ( imageIdx ).fadeOut();
    images.eq( imageIdx = _util.wrap ( imageIdx + 1, images.length ) ).fadeIn( unblock );
    roller.attr('href', imageSrc[imageIdx].href);

    jump.find('.active').removeClass('active');
    jump.children().eq(imageIdx - 1).addClass('active');

    numRolls--;
    if ( numRolls > 0 ) {
      rollTimeout = setTimeout ( roll, rollTime );
    }
  }

  var loaded = function () {
    imagesLoaded += 1;
    if ( imagesLoaded >= imageSrc.length ) {
      images = roller.find('img');
      roll.call();
    }
  }

  var c=0;
  for ( var i in imageSrc ) {
    $('<img src='+ imageSrc[i].src +' />').bind('load', loaded ).appendTo(roller).hide();
    c++;
    $('<a class="jump" href="javascript:;">' + c + '</a>').appendTo(jump).bind('click', c, jumpTo);
  }

});
