﻿$.fn.autolink = function (target) {
	target = target ? ' target="'+target+'"' : '';
	return this.each( function(){
		var re = /((http|https|ftp):\/\/[\w?=&.\/-;#~%-]+(?![\w\s?&.\/;#~%"=-]*>))/g;
		$(this).html( $(this).html().replace(re, '<a'+target+' href="$1">$1</a>') );
	});
};
$.twitter = function(username, options){
	
		if(!username) return;
		var opts = $.extend({
				autolink: true,
				autolinkTarget: "_blank",
				timePrepend: "",
				timeAppend: " ago...",
				success: function(){},
				limit: 7,
				dateFormat: "MM/dd/yy hh:mm t"
			}, options),
			$this = this, url;
		
		if(typeof username != "string"){
			var urls = []
			$.each(username, function(i, o){
					urls.push("url='http://twitter.com/status/user_timeline/"+o+".rss?count="+opts.limit+"'");
				});
			url = "http://query.yahooapis.com/v1/public/yql?q=select * from rss where " + urls.join(" or ") + " | sort(field='pubDate', descending='true')&format=json&callback=?";
		}
		else url = "http://twitter.com/status/user_timeline/"+username+".json?count="+opts.limit+"&callback=?";
		

		
		$.ajax({
			url: url,
			dataType: "jsonp",
			success: function(data){
			
					if(typeof username != "string")					
						data = (data.query && data.query.results) ? data.query.results.item : [{ pubDate: "", description: "Twitter feeds are having some issues."}];
						
					$.each(data, function(i, o){
							if(typeof username != "string"){
								data[i].text = o.text = o.description;
								try {
									data[i].created_at = o.created_at = Date.parseExact(o.pubDate.replace(" +0000",""), "ddd, dd MMM yyyy HH:mm:ss").toString("ddd MMM dd HH:mm:ss yyyy"); }
								catch(ex){}
							}
							if(o.created_at){
								var diff = $.datediff(Date.parseExact(o.created_at.replace(" +0000", ""), "ddd MMM dd HH:mm:ss yyyy").toString("MM/dd/yyyy HH:mm:ss")),
									amt, str = "";
								if(diff.days) (str = "day") && (amt = diff.days);
								else if(diff.hours) (str = "hour") && (amt = diff.hours);
								else if(diff.minutes) (str = "minute") && (amt = diff.minutes);
								else if(diff.seconds) (str = "second") && (amt = diff.seconds);
								if(amt > 1) str += "s";
								data[i].time = opts.timePrepend + amt + " " + str + opts.timeAppend;
								data[i].created_at = Date.parse(data[i].created_at).toString(opts.dateFormat);
							}
							else data[i].time = "";
							if(opts.autolink) 
								data[i].text = $("<div></div>").append(data[i].text).autolink("_blank").html();
						});
					
					if(!data.length) data = [{ text: "Twitter feeds are having some issues" }]
					else data = data.splice(0, opts.limit);
					
					opts.success.call($this[0], data);
				
				},
			error: function(){
					alert("error");
					$this.items([{ text: "Twitter feeds are having some issues" }]).chain({ builder: opts.builder });
				}
		})
		return this;
	};

