var monthstring=new Array(12);monthstring[0]="Jan";monthstring[1]="Feb";monthstring[2]="Mar";monthstring[3]="Apr";monthstring[4]="May";monthstring[5]="Jun";monthstring[6]="Jul";monthstring[7]="Aug";monthstring[8]="Sep";monthstring[9]="Oct";monthstring[10]="Nov";monthstring[11]="Dec";

function date_ordinal_suffix(date){
	if(date==1 || date==21 || date==31) return "st";
	else if(date==2 || date==22) return "nd";
	else if(date==3 || date==23) return "rd";
	else return "th";
}
function date_twelve_hour_string(ts){
	var ms = "AM";
	var h = ts.getHours();

	if(h >= 12){
		h -= 12;
		ms = "PM";
	}
	if(h == 0) h = 12;
	
	return h + ":" + ts.getMinutes() + " " + ms;
}

function make_the_thingy(){
		var base = "he%23y";
		var dom = "patrick%23filler%23"; var top = "com";
 		var at = "@";
	
		var tot = base + at + dom + "." + top;
		return tot.replace(/%23/g,"");
}

 	$(function(){
			var e = make_the_thingy();
			$("#emspot").html(
				"<a href=\"mailto:" + e + "?subject=You are the best or worst!\">" + e + "</a>"
			);
	
			$("#tweetLoaded,#yelpLoaded").hide();
			
			$("#featured-work-container .featured-work").hover(function(){
					window.status = "View Patrick Filler's Work on " + $(this).find("a").attr("title");
					$(this).addClass("featured-work-over");
				},function(){
					window.status = "";
					$(this).removeClass("featured-work-over");
				}
			);
			$("#featured-work-container .featured-work").click(function(e){
				e.preventDefault();
				window.location = $(this).find("a").attr("href");
			});

      $("#tweetLoaded").tweet({
        username: "pfiller",
        join_text: "",
        avatar_size: 0,
        count: 1,
        loading_text: "loading tweets..."
      });
			
			$.ajax({
			  type: "GET",
			  url: "http://www.patrickfiller.com/misc/latest-yelp.php",
				dataType: "json",
				success: got_yelp_data,
				error: yelp_data_error,
				timeout: 5000
			});
		
	});
	
	function got_yelp_data(data){
		
		$("#yelpLoaded img").addClass("stars_"+data.review.rating);
		$("#yelpLoaded a").html(data.review.name).attr("href",data.review.url);
		$("#yelpLoaded span").html(data.review.location);
		$("#yelpLoaded, #yelpLoading").toggle();

	}
	function yelp_data_error(){
		$("#yelpLoading").html("There was an error loading my latest Yelp review. Check out my <a href=\"http://gopf.yelp.com/\">yelp profile</a> instead.");
	}
	
	
  (function($) {

    $.fn.tweet = function(o){
      var s = {
        username: ["seaofclouds"],              // [string]   required, unless you want to display our tweets. :) it can be an array, just do ["username1","username2","etc"]
        list: null,                              //[string]   optional name of list belonging to username
        avatar_size: null,                      // [integer]  height and width of avatar if displayed (48px max)
        count: 3,                               // [integer]  how many tweets to display?
        intro_text: null,                       // [string]   do you want text BEFORE your your tweets?
        outro_text: null,                       // [string]   do you want text AFTER your tweets?
        join_text:  null,                       // [string]   optional text in between date and tweet, try setting to "auto"
        auto_join_text_default: "i said,",      // [string]   auto text for non verb: "i said" bullocks
        auto_join_text_ed: "i",                 // [string]   auto text for past tense: "i" surfed
        auto_join_text_ing: "i am",             // [string]   auto tense for present tense: "i was" surfing
        auto_join_text_reply: "i replied to",   // [string]   auto tense for replies: "i replied to" @someone "with"
        auto_join_text_url: "i was looking at", // [string]   auto tense for urls: "i was looking at" http:...
        loading_text: null,                     // [string]   optional loading text, displayed while tweets load
        query: null,                            // [string]   optional search query
        refresh_interval: null                  // [integer]  optional number of seconds after which to reload tweets
      };

      if(o) $.extend(s, o);

      $.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&from='+s.username.join("%2BOR%2B")+'">#$1</a>'));
          });
          return $(returning);
        },
        capAwesome: function() {
          var returning = [];
          this.each(function() {
            returning.push(this.replace(/\b(awesome)\b/gi, '<span class="awesome">$1</span>'));
          });
          return $(returning);
        },
        capEpic: function() {
          var returning = [];
          this.each(function() {
            returning.push(this.replace(/\b(epic)\b/gi, '<span class="epic">$1</span>'));
          });
          return $(returning);
        },
        makeHeart: function() {
          var returning = [];
          this.each(function() {
            returning.push(this.replace(/(&lt;)+[3]/gi, "<tt class='heart'>&#x2665;</tt>"));
          });
          return $(returning);
        }
      });

      function parse_date(date_str) {
        // The non-search twitter APIs return inconsistently-formatted dates, which Date.parse
        // cannot handle in IE. We therefore perform the following transformation:
        // "Wed Apr 29 08:53:31 +0000 2009" => "Wed, Apr 29 2009 08:53:31 +0000"
        return Date.parse(date_str.replace(/^([a-z]{3})( [a-z]{3} \d\d?)(.*)( \d{4})$/i, '$1,$2$4$3'));
      }

      function relative_time(time_value) {
        var parsed_date = parse_date(time_value);
        var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
        var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
        var r = '';
        if (delta < 60) {
  	r = delta + ' seconds ago';
        } else if(delta < 120) {
  	r = 'a minute ago';
        } else if(delta < (45*60)) {
  	r = (parseInt(delta / 60, 10)).toString() + ' minutes ago';
        } else if(delta < (2*60*60)) {
  	r = 'an hour ago';
        } else if(delta < (24*60*60)) {
  	r = '' + (parseInt(delta / 3600, 10)).toString() + ' hours ago';
        } else if(delta < (48*60*60)) {
  	r = 'a day ago';
        } else {
  	r = (parseInt(delta / 86400, 10)).toString() + ' days ago';
        }
        return 'about ' + r;
      }

      function build_url() {
        var proto = ('https:' == document.location.protocol ? 'https:' : 'http:');
        if (s.list) {
          return proto+"//api.twitter.com/1/"+s.username[0]+"/lists/"+s.list+"/statuses.json?per_page="+s.count+"&callback=?";
        } else if (s.query == null && s.username.length == 1) {
          return proto+'//api.twitter.com/1/statuses/user_timeline.json?screen_name='+s.username[0]+'&count='+s.count+'&include_rts=1&callback=?';
        } else {
          var query = (s.query || 'from:'+s.username.join(' OR from:'));
          return proto+'//search.twitter.com/search.json?&q='+encodeURIComponent(query)+'&rpp='+s.count+'&callback=?';
        }
      }

      return this.each(function(i, widget){
        if(typeof(s.username) == "string"){ s.username = [s.username]; }
        $(widget).bind("load", function(){
          $.getJSON(build_url(), function(data){
            
            var tweets = (data.results || data);
            $.each(tweets, function(i,item){
              var from_user = item.from_user || item.user.screen_name;
              var date = '<span class="tweet_time"><a href="http://twitter.com/'+from_user+'/statuses/'+item.id+'" title="view tweet on twitter">'+relative_time(item.created_at)+'</a></span>';
              var text = '<span class="tweet_text">' +$([item.text]).linkUrl().linkUser().linkHash().makeHeart().capAwesome().capEpic()[0]+ '</span>';
              
              $("#recentTweet").html( text );
              $("#tweetDetails").html( date );
            });
            $("#tweetLoading").remove();
            $("#tweetLoaded").show();
          });
        }).trigger("load");
      });
    };
  })(jQuery);
	
	
	
	function got_twitter_data(data){
	  console.log( data.length );
		var d = new Date();
		d.setTime( Date.parse( data[0].created_at ) );

		var deetstring = "";
		deetstring += "<a href=\"http://twitter.com/pfiller\">pfiller</a> - ";
		deetstring +=  date_twelve_hour_string(d) + " " + monthstring[d.getMonth()] + " " + d.getDate() + date_ordinal_suffix(d.getDate());
		deetstring += " from " + data[0].source;
		
		$("#tweetDetails").html(deetstring);
		$("#recentTweet").html("&ldquo;" + data[0].text + "&rdquo;");
		
		$("#tweetLoading, #tweetLoaded").toggle();
	}
	function twitter_data_error(){
		$("#tweetLoading").html("There was an error loading my latest tweet. Check out my <a href=\"http://www.twitter.com/pfiller\">twitter profile</a> instead.");
	}
