// requestAnimationFrame shim
window.requestAnimationFrame || (window.requestAnimationFrame = 
  window.webkitRequestAnimationFrame || 
  window.mozRequestAnimationFrame    || 
  window.oRequestAnimationFrame      || 
  window.msRequestAnimationFrame     || 
  function(callback, element) {
    return window.setTimeout(function() {
      callback(+new Date());
  }, 1000 / 60);
});
// paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/
window.log = function(){
  log.history = log.history || [];   // store logs to an array for reference
  log.history.push(arguments);
  arguments.callee = arguments.callee.caller;  
  if(this.console) console.log( Array.prototype.slice.call(arguments) );
};
// make it safe to use console.log always
(function(b){function c(){}for(var d="assert,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profileEnd,time,timeEnd,trace,warn".split(","),a;a=d.pop();)b[a]=b[a]||c})(window.console=window.console||{});



(function ($) {

  var $timeline =$('#timeline');
  function addToTimeline($li) {

    $lis = $timeline.find('ol li');
    for(var i = 0; i < $lis.length; i++) {
      if ($li.data('time') > $lis.eq(i).data('time')) {
        return $lis.eq(i).before($li); 
      }
    };

    // add to bottom if oldest
    $timeline.find('ol').append($li);
  }

  // GET YOUTUBE VIDEOS ASYNC
  $.getJSON('http://gdata.youtube.com/feeds/api/users/vildhjarta/uploads?&v=2&max-results=20&alt=jsonc&callback=?',
    function (data, textStatus, jqXHR) {
      if (data && data.data && data.data.items) {

        var items = data.data.items;
        for(var i in items  ) {
          var item = items[i];

          $h4 = $('<h4>').text(item.title);
          $img = $('<img>', {src: item.thumbnail.sqDefault, alt: item.description});
          $aImg = $('<a>', {href: item.player.default, title: 'view on youtube..'}).append($img);
          $p = $('<p>').text(item.description);
          
          var time = new Date(Date.parse(item.uploaded)).getTime();

          $li = $('<li>', {class: 'youtube'}).data('time', time).append($h4, $aImg, $p);
          addToTimeline($li);
        }
      }
    });

   
  // GET TWEETS ASYNC
  $.getJSON('http://twitter.com/statuses/user_timeline/vildhjarta.json?count=20&callback=?',
    function (data, textStatus, jqXHR) {
      if (data && data.length > 0) {
        
        for(var i in data) {
          var item = data[i];

          $a = $('<a>', {href: 'http://twitter.com/#!/vildhjarta/statuses/' + item.id_str, title: 'view on twitter..'}).text(item.text);
          var time = new Date(Date.parse(item.created_at)).getTime();
         
          $li = $('<li>', {class: 'twitter'}).data('time', time).append($a);
          addToTimeline($li);
        }
      }
    });

})(jQuery);




/* 
 * SETUP SCROLL
 */
(function ($) {

  var $body     = $('body'),
      $document = $(document),
      $bg       = $('#bg'),
      $video    = $('iframe.video'),
      $booklet  = $('iframe.booklet'),
      $timeline = $('#timeline');


  var scrollPercentage  = 0,
      mouseOffset       = 0,
      mouseOffsetMAX    = 50, // max pixelshift for mouse movement
      scrollWidth       = $bg.width()-$document.width()-mouseOffsetMAX,
      scrollTarget      = 0, 
      updating          = false; 


  function getScrollPercentage() {
    return ($document.scrollTop() / ($document.height() - $(window).height()) );
  }

  function updateScrollTarget() {
    scrollPercentage = getScrollPercentage();
    scrollTarget = -scrollWidth * scrollPercentage - mouseOffset;
  }


  // update background position on mousemoev
  $document.mousemove(function (e) {
    
    // calculate mouse offset
    var mousePercentage = e.pageX / $document.width();
    mouseOffset = mouseOffsetMAX * mousePercentage;
    
    updateScrollTarget();
    if (!updating) update();  
  });


  // update background position on scroll
  $document.scroll(function (e) {
    updateScrollTarget();
    if (!updating) update();  
  });


  // animation loop
  var left = 0;
  function update() {
    updating = true;
   
    var distance = (scrollTarget - left);
    left += distance * 0.1;
    
    if (Modernizr.csstransforms) {
      $bg.css(Modernizr.prefixed('transform'), 'translateX('+left+'px)');  
    }
    else {
      $bg.css('left', left); 
    }
    
    // run loop if needed
    if (Math.abs(distance) > 10) {
       window.requestAnimationFrame(update);
    }
    else {
      updating = false;
    }

    // toggle ui items
    var percentage = Math.abs(left/scrollWidth);
    percentage > .05 ? $video.filter('.visible').removeClass('visible') : $video.not('.visible').addClass('visible');
    percentage > .05 && percentage < .9 ? $('.light').not('.burning').addClass('burning') : $('.light.burning').removeClass('burning');
    percentage > .9 ? $timeline.not('.disabled').addClass('disabled') : $timeline.filter('.disabled').removeClass('disabled'); 
    percentage < .9 ? $booklet.filter('.visible').removeClass('visible') : $booklet.not('.visible').addClass('visible');
  }

  $('#btnPressKit').click(function (e) {
    $('#press').toggleClass('open');
    e.preventDefault();
  })

})(jQuery);
