var tw = "http://twitter.com/";
var $head = $$('head')[0];
var fmt = new DateFormat("%I:%M %p %b %e");

function replaceLink(source) {
	return source.replace(new RegExp("((https?|ftp)://([-\\w\.]+)+(:\\d+)?(/([\\w/_\\.]*(\\?\\S+)?)?)?)", "g"), "<a target='_blank' rel='nofollow' href='$1'>$1</a>");
}

function insert() {
	//$('tweets').insert(createTweetDiv(window.tweet));
	alert(window.tweet);
}
function showTweet(tweet) {
	$('tweets').insert(createTweetDiv(tweet));
	createTweetStyle(tweet);
} 
function jsonPCall(id, url, cback){
	var script = $("jsonPCall_"+id);
	if (script) {
		script.remove();
	}
//	if(!script) {
		var e= new Element("script", {src : url + (cback ? "?callback=" + cback : ""), id : "jsonPCall_" + id, type: "text/javascript"});
		$head.insert(e);
//	} else {
//		script.writeAttribute("src", url + (cback ? "?callback=" + cback : ""));
//	}
}
function loadTweet(tweetId, cback){
	var url = 'http://twitter.com/statuses/show/'+ tweetId + '.json';
	jsonPCall('show', url, cback);
}

function  encodeComponent(decodedURLComponent) {
   	var regexp = /%20/g;
   	return encodeURIComponent(decodedURLComponent).replace(regexp, "+");
}
function parseTwitter(str) {
	return fmt.parseTwitter(str);
}
function formatTwitter(date) {
	var now = new Date();
	var hours = dateDiff(date, now, TimeUnit.HOURS);
	if (hours <= 0) {
		var minutes = dateDiff(date, now, TimeUnit.MINUTES);
		if (minutes <= 0) {
			var seconds = dateDiff(now, date, TimeUnit.SECONDS);
			var tens = seconds /10;
			return "about " +  (tens+1) *10 + " seconds ago";
		}
		return String.valueOf(minutes) + " minutes ago";
	}
	if (hours <= 24) {
		return "about " + hours + " hours ago";
	} 
	return fmt.format(date);
}
function createMainDiv(tweet) {
	var e= new Element("div", {"class" : "tweets", id : 'tweets'});
	e.insert(createTweetDiv(tweet));
	return e;
}
function insertOrgTweet(tweet) {
	$("org"+tweet.id).remove();
	$("tweets").insert({top: createTweetDiv(tweet)});
}

function createTweetDiv(tweet) {
	var e= new Element("div", {"class" : "tweet"});
	if (tweet.in_reply_to_status_id) {
		e.insert(createInReplyTo(tweet));
	}
	var t= new Element("table", {cellspacing:0, cellpadding: 0});
	var tb = new Element("tbody", {});
	t.insert(tb);
	var tr= new Element("tr", {});
	tb.insert(tr);
	var td= new Element("td", {"class" : "user-cell"});
	tr.insert(td);
	td.insert(createUserInfo(tweet));
	td= new Element("td", {"class" : "tweet-arrow"});
	tr.insert(td);
	td= new Element("td", {"class" : "content-cell"});
	tr.insert(td);
	td.insert(createStatusBody(tweet));
	e.insert(t);
	return e;
}

function createInReplyTo(tweet) {
	var e= new Element("div", {"class" : "tweet-org", id: 'org' + tweet.in_reply_to_status_id});
	var a = new Element("a", {href: '#',id: tweet.in_reply_to_status_id});
	a.update('in reply to ' + tweet.in_reply_to_screen_name);
	a.onclick=function() {
		loadTweet(this.id, 'insertOrgTweet');
		return false;
	};
	e.insert(a);
	return e;
}
function createUserInfo(tweet) {
	var e= new Element("div", {"class" : "user-info", align : "right"});
	e.style.float = "left";
	var u = tweet.user;
	var t = new Element("div", {"class" : "thumb"});
	var a = new Element("a", {href : tw + u.screen_name, target: "_blank"});
	a.insert(new Element("img", {height : 73, width: 73, "src" : u.profile_image_url}));
	t.insert(a);
	e.insert(t);
	t = new Element("div", {"class" : "screen-name"});
	a = new Element("a", {href : tw + u.screen_name, target: "_blank"});
	a.update(u.screen_name);
	t.insert(a);
	e.insert(t);
	t = new Element("div", {"class" : "full-name"});
	t.update(u.name);
	e.insert(t);
	t = new Element("div", {"class" : "user-count"});
	t.update("<b>" + u.followers_count + "</b> followers / <b>" + u.friends_count + "</b> friends");
	e.insert(t);
	if (u.location && !u.location.empty()) {
		t = new Element("div", {"class" : "user-location"});
		t.update("<b>Location</b> " + u.location);
		e.insert(t);
	}
	if (u.url && !u.url.empty()) {
		t = new Element("div", {"class" : "user-web"});
		t.update("<b>Web</b> ");
		a = new Element("a", {href : u.url, target: "_blank"});
		a.insert(u.url);
		t.insert(a);
		e.insert(t);
	}
	if (u.description && !u.description.empty()) {
		t = new Element("div", {"class" : "user-desc"});
		t.update("<b>Bio</b> " + u.description);
		e.insert(t);
	}
	return e;
}
function createStatusBody(tweet) {
	var e= new Element("div", {"class" : "status-body"});
	var s = new Element("span", {"class" : "status-content"});
	s.insert(replaceLink(tweet.text));
	e.insert(s);
	s = new Element("span", {"class" : "status-meta"});
	var p = new Element("span", {"class" : "published"});
	p.insert(formatTwitter(parseTwitter(tweet.created_at)));
	s.insert(p);
	s.insert("&nbsp;");
	p = new Element("span", {});
	p.insert("from " + tweet.source);
	s.insert(p);
	var s1 = new Element("span", {"class" : "actions"});
	var a = new Element("a", {"class" : "action", target: "_blank", href : "http://twitter.com/home?status=" + encodeComponent('@' + tweet.user.screen_name) + "&in_reply_to_status_id=" + tweet.id + "&in_reply_to=" + tweet.user.screen_name + "&source=Smub"});
	a.insert("Reply");
	s1.insert(a);
	a = new Element("a", {"class" : "action", target: "_blank", href : "http://twitter.com/home?status=" + encodeComponent("RT@" + tweet.user.screen_name + " " + tweet.text) + "&in_reply_to_status_id=" + tweet.id + "&in_reply_to=" + tweet.user.screen_name + "&source=Smub"});
	a.insert("Retweet");
	s1.insert(a);
	a = new Element("a", {"class" : "action", target: "_blank", href : "http://smub.it/?u=" + encodeComponent("http://twitter.com/" + tweet.user.screen_name + "/status/" + tweet.id)});
	a.insert("Smub it");
	s1.insert(a);
	s.insert(s1);
	e.insert(s);
	return e;
}
function createTweetStyle(tweet) {
	var u = tweet.user;

	if (!Prototype.Browser.IE) {
		var e= new Element("style", {type: "text/css"});
		e.insert("body { background: #" + u.profile_background_color + " url('" + u.profile_background_image_url + "') fixed " + (u.profile_background_tile ? "repeat" : "no-repeat") + " top left; } \n");
		$head.insert(e);
	} else {	
		document.body.style.background= "#" + u.profile_background_color + " url('" + u.profile_background_image_url + "') fixed " + (u.profile_background_tile ? "repeat" : "no-repeat") + " top left";
	}
	
}

