/**
	* GetTweets v@VERSION
	*
	* A jQuery plugin to retrive tweets from multiple users
	*
	* https://github.com/adamatmonk/jquery-gettweets
	*
	* Copyright 2011 by Adam Randlett
    * Released under the MIT License
    * http://en.wikipedia.org/wiki/MIT_License
**/
(function($){$.fn.getTweets=function(settings){var defaults={twitter_api_url:"http://api.twitter.com/1/statuses/user_timeline",twitter_users:["monkdev"],format:"json",howmany:4,retweets:true,no_replies:true,rate_limit_status:false,tweetstring:"<div class='tweet'><div class='header'><p class='summary'>{tweettext}</p><p class='meta'>{tweetdate} by <a href='http://twitter.com/{tweetuser:screenname}'>{tweetuser:name}</a></p></div> <div class='image'><a href='http://twitter.com/{tweetuser:screenname}'><img src='{tweetuser:image}' width='48' height='48'></a></div></div>",retweetstring:"<div class='tweet'><div class='header'><p class='summary'>{tweettext}</p><p class='meta'>{tweetdate} <a href='http://twitter.com/{retweetuser:screenname}'>{retweetuser:name}</a> <span class='rt'>retweeted</span> by <a href='http://twitter.com/{tweetuser:screenname}'>{tweetuser:name}</a> </p></div> <div class='image'><a href='http://twitter.com/{tweetuser:screenname}'><img src='{retweetuser:image}' width='48' height='48'></a></div></div>"};var options=$.extend(defaults,settings);return this.each(function(){var $this=$(this),tweetoptions={twitter_users:options.twitter_users,howmany:options.howmany,tweetstring:options.tweetstring,retweetstring:options.retweetstring,retweets:options.retweets,no_replies:options.no_replies,rate_limit_status:options.rate_limit_status},global_tweets=[],user_count,twitter_users_last=tweetoptions.twitter_users.length-1;function twitter_relative_time(time_value){var values=time_value.split(" ");time_value=values[1]+" "+values[2]+", "+values[5]+" "+values[3];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);delta=delta+(relative_to.getTimezoneOffset()*60);if(delta<60){return"less than a minute ago";}else{if(delta<120){return"about a minute ago";}else{if(delta<(60*60)){return(parseInt(delta/60)).toString()+" minutes ago";}else{if(delta<(120*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";}}}}}}}String.prototype.parseUrl=function(){var urlRegex=new RegExp(/[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi);return this.replace(urlRegex,function(url){return'<a href="'+url+'">'+url+"</a>";});};String.prototype.parseUsername=function(){return this.replace(new RegExp(/[@]+[A-Za-z0-9-_]+/g),function(u){var username=u.replace("@","");return u.link("http://twitter.com/"+username);});};String.prototype.parseHashtag=function(){return this.replace(new RegExp(/[#]+[A-Za-z0-9-_]+/g),function(t){var tag=t.replace("#","%23");return t.link("http://search.twitter.com/search?q="+tag);});};String.prototype.multiReplace=function(hash){var str=this,key;for(key in hash){str=str.replace(new RegExp(key,"g"),hash[key]);}return str;};function twitter_parser(tweets){$.each(tweets,function(i,tweet){if(tweet.text!==undefined){var tweettext=tweet.text;var tweetapi={"{tweetdate}":twitter_relative_time(tweet.created_at),"{tweeturl}":"http://www.twitter.com/"+tweet.user.name+"/status/"+tweet.id,"{tweettext}":tweettext.parseUrl().parseUsername().parseHashtag(),"{tweetuser:name}":tweet.user.name,"{tweetuser:screenname}":tweet.user.screen_name,"{tweetuser:location}":tweet.user.location,"{tweetuser:description}":tweet.user.description,"{tweetuser:url}":tweet.user.url,"{tweetuser:image}":tweet.user.profile_image_url,"{tweetsource}":tweet.source};var tweet_html,output;if(tweet.retweeted_status){tweetapi["{retweetuser:name}"]=tweet.retweeted_status.user.name;tweetapi["{retweetuser:screenname}"]=tweet.retweeted_status.user.screen_name;tweetapi["{retweetuser:image}"]=tweet.retweeted_status.user.profile_image_url;output=tweetoptions.retweetstring;}else{output=tweetoptions.tweetstring;}var tweet_html=output.multiReplace(tweetapi);global_tweets.push({id:tweet.id,status:tweet_html});}});}function twitter_output(){global_tweets.sort(function(a,b){return(b.id-a.id);});twitter_count=global_tweets.length;for(var i=0;i<tweetoptions.howmany;i++){$this.append(global_tweets[i].status);}}function rate_limit_return(request){$.getJSON("http://api.twitter.com/1/account/rate_limit_status.json?&callback=?",function(data){console.log("-------------------------------------------------------");console.log("RATE LIMIT STATUS");console.log("  Hourly Limit: "+data.hourly_limit);console.log("  Remaining Hits: "+data.remaining_hits);console.log("  Reset Time: "+data.reset_time);console.log("-------------------------------------------------------");});}function get_tweets(index){$.ajax({dataType:"jsonp",url:options.twitter_api_url+"."+options.format+"?&screen_name="+tweetoptions.twitter_users[index]+"&include_rts="+tweetoptions.retweets+"&exclude_replies="+tweetoptions.no_replies+"&count="+tweetoptions.howmany+"&callback=?",timeout:1000,type:"GET",async:false,crossDomain:true,error:function(){},success:function(data){twitter_parser(data);},complete:function(){if(index<twitter_users_last){get_tweets(++index);}else{twitter_output();}}});}if(tweetoptions.rate_limit_status){rate_limit_return();}get_tweets(0);});};})(jQuery);
