if (typeof renderTwitters != 'function')(function () {
	var j = (function () {
		var b = navigator.userAgent.toLowerCase();
		return {
			safari: /webkit/.test(b),
			opera: /opera/.test(b),
			msie: /msie/.test(b) && !(/opera/).test(b),
			mozilla: /mozilla/.test(b) && !(/(compatible|webkit)/).test(b)
		}
	})();
	var k = 0;
	var n = [];
	var o = false;
	window.renderTwitters = function (a, b) {
		function node(e) {
			return document.createElement(e)
		}
		function text(t) {
			return document.createTextNode(t)
		}
		var c = document.getElementById(b.twitterTarget);
		var d = null;
		var f = node('ul'),
			li, statusSpan, timeSpan, i, max = a.length > b.count ? b.count : a.length;
		for (i = 0; i < max && a[i]; i++) {
			d = getTwitterData(a[i]);
			if (b.ignoreReplies && a[i].text.substr(0, 1) == '@') {
				max++;
				continue
			}
			li = node('li');
			if (b.template) {
				li.innerHTML = b.template.replace(/%([a-z_\-\.]*)%/ig, function (m, l) {
					var r = d[l] + "" || "";
					if (l == 'text' && b.enableLinks) r = linkify(r);
					return r
				})
			} else {
				statusSpan = node('span');
				statusSpan.className = 'twitterStatus';
				timeSpan = node('span');
				timeSpan.className = 'twitterTime';
				statusSpan.innerHTML = a[i].text;
				if (b.enableLinks == true) {
					statusSpan.innerHTML = linkify(statusSpan.innerHTML)
				}
				timeSpan.innerHTML = relative_time(a[i].created_at);
				if (b.prefix) {
					var s = node('span');
					s.className = 'twitterPrefix';
					s.innerHTML = b.prefix.replace(/%(.*?)%/g, function (m, l) {
						return a[i].user[l]
					});
					li.appendChild(s);
					li.appendChild(text(' '))
				}
				li.appendChild(statusSpan);
				li.appendChild(text(' '));
				li.appendChild(timeSpan)
			}
			f.appendChild(li)
		}
		if (b.clearContents) {
			while (c.firstChild) {
				c.removeChild(c.firstChild)
			}
		}
		c.appendChild(f)
		
		
		var tweetCount = $("li", "#tweets").length-1;
		var activeTweet = 0;
		$("li", "#tweets").hide().addClass('tweet');
		$($("li", "#tweets")[0]).fadeIn();
		
		
		if (tweetCount > 0) {
			$('#scrollUp').bind({
				click: function() {
					$(".tweet").eq(activeTweet).fadeOut();
					if (activeTweet > 0) {
						activeTweet--;
					} else {
						activeTweet = tweetCount;
					}
					$(".tweet").eq(activeTweet).delay(150).fadeIn();
				}
			});
			
			$('#scrollDown').bind({
				click: function() {
					$(".tweet").eq(activeTweet).fadeOut();
					if (activeTweet < tweetCount) {
						activeTweet++;
					} else {
						activeTweet = 0;
					}
					$(".tweet").eq(activeTweet).delay(150).fadeIn();
				}
			});
		}

		
	};
	window.getTwitters = function (e, f, g, h) {
		k++;
		if (typeof f == 'object') {
			h = f;
			f = h.id;
			g = h.count
		}
		if (!g) g = 1;
		if (h) {
			h.count = g
		} else {
			h = {}
		}
		if (!h.timeout && typeof h.onTimeout == 'function') {
			h.timeout = 10
		}
		if (typeof h.clearContents == 'undefined') {
			h.clearContents = true
		}
		if (h.withFriends) h.withFriends = false;
		h['twitterTarget'] = e;
		if (typeof h.enableLinks == 'undefined') h.enableLinks = true;
		window['twitterCallback' + k] = function (a) {
			if (h.timeout) {
				clearTimeout(window['twitterTimeout' + k])
			}
			renderTwitters(a, h)
		};
		ready((function (c, d) {
			return function () {
				if (!document.getElementById(c.twitterTarget)) {
					return
				}
				var a = 'http://www.twitter.com/statuses/' + (c.withFriends ? 'friends_timeline' : 'user_timeline') + '/' + f + '.json?callback=twitterCallback' + d + '&count=20';
				if (c.timeout) {
					window['twitterTimeout' + d] = setTimeout(function () {
						if (c.onTimeoutCancel) window['twitterCallback' + d] = function () {};
						c.onTimeout.call(document.getElementById(c.twitterTarget))
					}, c.timeout)
				}
				var b = document.createElement('script');
				b.setAttribute('src', a);
				document.getElementsByTagName('head')[0].appendChild(b)
			}
		})(h, k))
	};
	DOMReady();

	function getTwitterData(a) {
		var b = a,
			i;
		for (i in a.user) {
			b['user_' + i] = a.user[i]
		}
		b.time = relative_time(a.created_at);
		return b
	}
	function ready(a) {
		if (!o) {
			n.push(a)
		} else {
			a.call()
		}
	}
	function fireReady() {
		o = true;
		var a;
		while (a = n.shift()) {
			a.call()
		}
	}
	function DOMReady() {
		if (j.mozilla || j.opera) {
			document.addEventListener("DOMContentLoaded", fireReady, false)
		} else if (j.msie) {
			document.write("<scr" + "ipt id=__ie_init defer=true src=//:><\/script>");
			var a = document.getElementById("__ie_init");
			if (a) {
				a.onreadystatechange = function () {
					if (this.readyState != "complete") return;
					this.parentNode.removeChild(this);
					fireReady.call()
				}
			}
			a = null
		} else if (j.safari) {
			var b = setInterval(function () {
				if (document.readyState == "loaded" || document.readyState == "complete") {
					clearInterval(b);
					b = null;
					fireReady.call()
				}
			}, 10)
		}
	}
	function relative_time(a) {
		var b = a.split(" ");
		a = b[1] + " " + b[2] + ", " + b[5] + " " + b[3];
		var c = Date.parse(a);
		var d = (arguments.length > 1) ? arguments[1] : new Date();
		var e = parseInt((d.getTime() - c) / 1000);
		e = e + (d.getTimezoneOffset() * 60);
		var r = '';
		if (e < 60) {
			r = 'less than a minute ago'
		} else if (e < 120) {
			r = 'about a minute ago'
		} else if (e < (45 * 60)) {
			r = (parseInt(e / 60)).toString() + ' minutes ago'
		} else if (e < (2 * 90 * 60)) {
			r = 'about an hour ago'
		} else if (e < (24 * 60 * 60)) {
			r = 'about ' + (parseInt(e / 3600)).toString() + ' hours ago'
		} else if (e < (48 * 60 * 60)) {
			r = '1 day ago'
		} else {
			r = (parseInt(e / 86400)).toString() + ' days ago'
		}
		return r
	}
	function linkify(s) {
		return s.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/g, function (m) {
			return m.link(m)
		}).replace(/@[\S]+/g, function (m) {
			return '<a href="http://twitter.com/' + m.substr(1) + '">' + m + '</a>'
		})
	}
})();
