(function($) {
	$.totteroDefaults = {
		username: null,
		interval: 5000,
		animTime: 500,
		maxLength: 90
	};
	
	function truncIf(s, maxLen) {
		s = "" + s;
		if(s.length > maxLen - 3) s = s.substring(0, maxLen - 3) + "...";
		return s;
	}
	
	function timeSince(oldTime, currTime) {
		if(!currTime) currTime = new Date();
		oldTime = (+oldTime) / 1000;
		currTime = (+currTime) / 1000;
		if(oldTime > currTime) return "";
		var delta = currTime - oldTime;
		if(delta < 60) return "" + (0 | delta) + " sek. sitten";
		delta /= 60;
		if(delta < 2) return "minuutti sitten";
		if(delta < 60) return "" + (0 | delta) + " min. sitten";
		delta /= 60;
		if(delta < 2) return "tunti sitten";
		if(delta < 24) return "" + (0 | delta) + " tuntia sitten";
		delta /= 24;
		if(delta < 2) return "eilen";
		if(delta < 3) return "toissapäivänä";
		if(delta > 7) return "viime viikolla";
		if(delta > 14) return "toissaviikolla";
		return "" + (0 | delta) + " päivää sitten";
	}
	
	
	$.fn.tottero = function(options) {
		options = $.extend($.totteroDefaults, options);
		if(!options.username) throw "tottero requires username";
		
		var $el = $(this);
		var callback = "_tottero_" + (0 | (Math.random() * 81051));
		var twitterUrl = "http://twitter.com/status/user_timeline/" + options.username + ".json?count=10&callback=" + callback;
		
		var $authorEl = $(".author", $el);
		var $contentEl = $(".content", $el);
		var $sinceEl = $(".since", $el);
		
		var tweets = null;
		
		function initiateTimeout() {
			setTimeout(nextSlide, options.interval);
		}
		
	
		
		function fadeInSlide() {
			var idx = 0 | ($el.data("index"));
			var tweet = tweets[idx];
			$authorEl.text("@" + tweet.user.screen_name);
			$contentEl.text(truncIf(tweet.text, options.maxLength));
			$sinceEl.text(timeSince(Date.parse(tweet.created_at)));
			$el.attr("href", "http://twitter.com/" + tweet.user.screen_name + "/status/" + tweet.id_str);
			$el.animate({opacity:1}, {duration: options.animTime, complete: initiateTimeout});
		}
		
		function nextSlide() {
			var currentIndex = 0 | $el.data("index");
			var newIndex = (currentIndex + 1) % tweets.length;
			$el.data("index", newIndex);
			if(currentIndex >= 0) {
				$el.animate({opacity:0}, {duration: options.animTime, complete: fadeInSlide});
			} else {
				$el.css("opacity", 0);
				fadeInSlide();
			}
		}
		
		window[callback] = function(data) {
			tweets = data;
			$el.addClass("loaded");
			nextSlide();
			window[callback] = null;
		}
		
		$el.data("index", -1);
		$.getScript(twitterUrl);
		
	};

}(jQuery));
