function relative_time(time_value) {
  var parsed_date = Date.parse(time_value);
  var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
  var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
  if(delta < 60) {
  return 'less than a minute ago';
  } else if(delta < 120) {
  return 'about a minute ago';
  } else if(delta < (45*60)) {
  return (parseInt(delta / 60)).toString() + ' minutes ago';
  } else if(delta < (90*60)) {
  return 'about an hour ago';
  } else if(delta < (24*60*60)) {
  return 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
  } else if(delta < (48*60*60)) {
  return '1 day ago';
  } else {
  return (parseInt(delta / 86400)).toString() + ' days ago';
  }
}
    
$(document).ready(function(){
  $.fn.extend({
      linkUrl: function() {
        var returning = [];
        var regexp = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
        this.each(function() {
          returning.push(this.replace(regexp,"<a href=\"$1\">$1</a>"))
        });
        return $(returning);
      },
      linkUser: function() {
        var returning = [];
        var regexp = /[\@]+([A-Za-z0-9-_]+)/gi;
        this.each(function() {
          returning.push(this.replace(regexp,"<a href=\"http://twitter.com/$1\">@$1</a>"))
        });
        return $(returning);
      },
      linkHash: function() {
        var returning = [];
        var regexp = / [\#]+([A-Za-z0-9-_]+)/gi;
        this.each(function() {
          returning.push(this.replace(regexp, ' <a href="http://search.twitter.com/search?q=&tag=$1&lang=all">#$1</a>'))
        });
        return $(returning);
      },
      capAwesome: function() {
        var returning = [];
        this.each(function() {
          returning.push(this.replace(/(a|A)wesome/gi, 'AWESOME'))
        });
        return $(returning);
      },
      capEpic: function() {
        var returning = [];
        this.each(function() {
          returning.push(this.replace(/(e|E)pic/gi, 'EPIC'))
        });
        return $(returning);
      },
      makeHeart: function() {
        var returning = [];
        this.each(function() {
          returning.push(this.replace(/[&lt;]+[3]/gi, "<tt class='heart'>&#x2665;</tt>"))
        });
        return $(returning);
      }
    });
      
  $.getJSON('../javascripts/skitzy.json', function(skitzies) {
    $(skitzies).each(function() {
      $('.skitzy_template')
        .clone()
        .removeClass('skitzy_template')
        .appendTo('.skitzies')
        .show()
        .find('img.skitzy').attr('src', this.skitzy_url).end()
        .find('img.profile').attr('src', this.profile_image_url).end()
        .find('.tweet .text').html($([this.text]).linkUrl().linkUser().linkHash().makeHeart().capAwesome().capEpic()[0]).end()
        .find('.tweet .name').html('<a href="http://twitter.com/' + this.from_user + '">' + this.from_user + '</a>').end()
        .find('.tweet .date').html(relative_time(this.created_at)).end();
    });
    
    $('.skitzy_template').remove();
    
    $('#slideshow ul').width(skitzies.length * 260);
    $('#slideshow').serialScroll({
       items:'li',
       prev:'.skitzy_view a.left',
       next:'.skitzy_view a.right',
       exclude: 2,
       jump: false,
       stop: true,
       // duration: 2000,
       interval: 0
     });
  });

  $('.photo_set a').click(function() {
    $('.skitzy .iphone object').hide();
    $('.zoom img').attr('src', this.href);
    $('.zoom').show();
    $('.close_button').show();
    return false;
  });
  
  $('.close_button').click(function() {
    $('.zoom').hide();
    $('.close_button').hide();
    $('.skitzy .iphone object').show();
  });
});
	