/**
 * He8us' Twitter
 * Copyright 2011, Cedric Michaux
 * Licensed under the GPL Version 2 license.
 */

var HE8US = HE8US || {};

(function(){
	
	HE8US.twitter = (function(){
		var _opt = {
			"replacements": {
				"user_mentions" : '<a href="http://twitter.com/$2">$1</a>',
				"hashtags": '<a href="http://twitter.com/search?q=#$2">$1</a>',
				"urls": '<a href="$1">$1</a>'
			},
			username: "",
			hashtag: "",
			tweets: 5
		}, _cnt;

		var _init = function(el, options){
			$.extend(_opt, options);
			_cnt = $(el);
			if(_cnt[0]){
				var data = {
					count: _opt.tweets,
					trim_user: true,
					include_rts: true,
					include_entities: true
				}, url= "";



				if(_opt.hashtag != ""){
					url = "http://search.twitter.com/search.json"+"#"+_opt.hashtag;
					data.q = "#"+_opt.hashtag;
				}

				if( _opt.username != ""){
					if(url == ""){
						url = "http://api.twitter.com/1/statuses/user_timeline.json?screen_name="+_opt.username+'&count=5';
						//data.screen_name = _opt.username;
					}
					else{
						data.q += " from:"+_opt.username;
					}

				}

				if(url != ""){
					$.ajax({
						url: url,
						data: data,
						context: _cnt,
						dataType: "jsonp",
						jsonp:"callback",
						success: _ajax_cback
					})
				}

			}




		}

		var _ajax_cback = function(tweets){	
			$(this).empty();
			tTweets = [];
			if(tweets.results){
				for(var i = 0; tweets.results[i]; i++){
					tTweets.push(_create_string(tweets.results[i]));
				}
			}
			else if(tweets[0].text){
				for(var i = 0; tweets[i]; i++){
					tTweets.push(_create_string(tweets[i]));
				}
			}
			if(tTweets.length > 0){
				$(this).append(tTweets.join("")).trigger("tweets:loaded");
			}

		}

		var _create_string = function(tw_obj){
			var r, reg;

			if(tw_obj.entities){
				for(var u = 0; tw_obj.entities.urls[u]; u++){
					reg = new RegExp("("+tw_obj.entities.urls[u].url+")", "gi");
					tw_obj.text = tw_obj.text.replace(reg, _opt.replacements.urls);
				}
				for(var u = 0; tw_obj.entities.hashtags[u]; u++){
					reg = new RegExp("(#("+tw_obj.entities.hashtags[u].text+"))", "gi");
					tw_obj.text = tw_obj.text.replace(reg, _opt.replacements.hashtags);
				}
				for(var u = 0; tw_obj.entities.user_mentions[u]; u++){
					reg = new RegExp("(@("+tw_obj.entities.user_mentions[u].screen_name+"))", "gi");
					tw_obj.text = tw_obj.text.replace(reg, _opt.replacements.user_mentions);
				}
			}
			else{
				tw_obj.text = tw_obj.text.replace(/((https?:\/\/)?([-\w]+\.[-\w\.]+)+\w(:\d+)?((\/)?([-\w\/_\.]*(\?\S+)?)?)*)/g, _opt.replacements.urls)
			 	tw_obj.text = tw_obj.text.replace(/(@(\w+))/g, _opt.replacements.user_mentions);
				tw_obj.text = tw_obj.text.replace(/(#(\w+))/g, _opt.replacements.hashtags);				
			}



			tw_obj.created_at = tw_obj.created_at.replace(/^\w+ (\w+) (\d+) ([\d:]+) \+0000 (\d+)$/, "$1 $2 $4 $3 UTC");
			tw_obj.created_at = (new Date()) - (new Date(tw_obj.created_at));



			if(tw_obj.created_at < 1000*60)
				tw_obj.created_at = Math.round(tw_obj.created_at/1000)+" "+he8us_locale.sec;
			else if(tw_obj.created_at < 1000*60*60)
				tw_obj.created_at = Math.round(tw_obj.created_at/(1000*60))+" "+he8us_locale.min;
			else if(tw_obj.created_at < 1000*60*60*24)
				tw_obj.created_at = Math.round(tw_obj.created_at/(1000*60*60))+" "+he8us_locale.hours;
			else if(tw_obj.created_at > 1000*60*60*24)
				tw_obj.created_at = Math.round(tw_obj.created_at/(1000 * 60 * 60 * 24))+" "+he8us_locale.days;


			r = "<li>";
			r += '<div class="tweet">'+tw_obj.text+'</div>'
			r += '<span class="date"><a href="http://twitter.com/'+_opt.username+'/status/'+tw_obj.id_str+'">'+he8us_locale.itIs.replace("$", tw_obj.created_at)+'</a></span>';
			r += "</li>";
			return r;
		}

		return {
			init: _init
		}
	})();


	$.fn.twitter = function(options){
		new HE8US.twitter.init(this, options);
	}
	
})(jQuery)

