/*
	##########################
	SELECTIVE TWITTER STATUS
	JAVASCRIPT BADGE
	##########################
	
	Grabs the specified user's twitter feed, and shows
	the latest x feeds with the specified hashtag.
	
	Usage:
	<script type="text/javascript" src="http://lab.bandit.co.nz/scripts/selectivetwitter/bandit-selective-twitter.js">({username:'Bandit',hashtag:'fb',count:1})</script>
	<script type="text/javascript" src="http://pipes.yahoo.com/pipes/pipe.run?_id=qjafMhoS3hGdTjn51ZzWFw&_render=json&count=1&hashtag=%23fb&username=Bandit&_callback=bd_twitter_cb"></script>
	
	Note the 3 variables in the Pipes URL: count, hashtag and username.
	
	##########################
	BY JAMES <at> BANDIT.CO.NZ
	##########################
	
	Some modified Javascript from twitter.com/javascripts/blogger.js
*/

// this doesn't work:
//username = ""; hashtag = ""; count = 0;
function bd_selective_twitter(un,ht,c) {
	username = un; hashtag = ht; count = c;
	document.write(unescape("%3Cscript src='http://pipes.yahoo.com/pipes/pipe.run?_id=qjafMhoS3hGdTjn51ZzWFw&_render=json&count="+count+"&hashtag=%23"+hashtag+"&username="+username+"&_callback=bd_twitter_cb' type='text/javascript'%3E%3C/script%3E"));
}

// my callback
function bd_twitter_cb(obj) {
	var twitters = obj.value.items;
	var statusHTML = "";
	if(typeof hashtag!="undefined") hreplace = "#"+hashtag; else hreplace = /(#[a-z0-9_\-]+\s*)/ig;
	for (var i=0; i<twitters.length; i++){
		permalink = twitters[i].link;
		tweet = autoLink(twitters[i].description.replace(/([a-z0-9_\-]+:\s*)/i,"").replace(hreplace,""));
		statusHTML += ('<li><span>'+tweet+'</span> <a style="font-size:85%" href="'+permalink+'">'+relative_time(twitters[i].pubDate)+'</a></li>')
	}
	document.getElementById('twitter_update_list').innerHTML = statusHTML;
}

// twitter's relative time function
function relative_time(time_value) {
	var values = time_value.split(" ");
	time_value = values[1] + " " + values[2] + ", " + values[3] + " " + values[4];
	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'; }
}

// auto url linking
// by james <at> bandit.co.nz
function autoLink(what) {
	str = what; out = ""; url = ""; i = 0;
	do {
		url = str.match(/(((ht|f)tps?:\/\/)?([a-z\-]+\.)*[\-\w]+(\.[a-z]{2,4})+(\/[\w\_\-\?\=\&\.]*)*(?![a-z]))/i);
		if(url!=null) {
			// get href value
			href = url[0];
			if(href.substr(0,7)!="http://") href = "http://"+href;
		
			// where the match occured
			where = str.indexOf(url[0]);
		
			// add it to the output
			out += str.substr(0,where);
		
			// link it
			out += '<a href="'+href+'" target="_blank">'+url[0]+'</a>';
		
			// prepare str for next round
			str = str.substr((where+url[0].length));
		} else {
			out += str;
			str = "";
		}
	} while(str.length>0);
	return out.replace(/\B@([_a-z0-9]+)/ig,'<a href="http://twitter.com/$1">@$1</a>');
}