var tweetsList = new Array();

$(document).ready(function() 
{
    // utilizamos jquery con la api de twitter
    $.getJSON("http://twitter.com/status/user_timeline/reactivo.json?count=24&callback=?", function(data) 
    {
		tweetsControl(data);
    }); 
	
});

// Para cargar un tweet determinado y mostrarlo en la caja
function mostrarTweet(i)
{
	var $tweetText = $('#tweetText p');
	var $tweetWhen = $('#tweetWhen');
	var $twitter = $('#twitter');
	var $tweetNext = $('#tweetNext');
	var $tweetPrevious = $('#tweetPrevious');
	var $tweetRetweet = $('#tweetRetweet');
	var $tweetAnswer = $('#tweetAnswer');
	var $tweetFollow = $('#tweetFollow');
	
	var htmlText = tweetsList[i].htmlText;
	var date = tweetsList[i].date;$tweetNext;
	var id = tweetsList[i].id;
	
	$tweetWhen.stop().animate({'opacity':'0'},200);
	$tweetText.stop().animate({'opacity':'0'},200, function()
	{
		$tweetText.html(htmlText);
	    $tweetWhen.html(date);
	    $tweetWhen.attr('href','http://twitter.com/reactivo/status/' + id);
	    $tweetText.animate({'opacity':'1'},200, function()
    	{
    		// Puto Internet Exploder...
    		if (jQuery.browser.msie) { $tweetText.get(0).style.removeAttribute('filter'); }
    	});
	    $tweetWhen.animate({'opacity':'1'},200, function()
    	{
    		// Puto Internet Exploder...
    		if (jQuery.browser.msie) { $tweetWhen.get(0).style.removeAttribute('filter'); }
    	});
	    if ($twitter.css('display') == 'none')
	    { 
	    	// Puto Internet Exploder...
	    	if(jQuery.browser.msie)
	    	{
		    	$tweetText.css('background-color','#F3F3F3');
		    	$tweetWhen.css('background-color','#F3F3F3');
	    		$tweetRetweet.css('background-color','#F3F3F3');
	    		$tweetAnswer.css('background-color','#F3F3F3');
	    		$tweetFollow.css('background-color','#F3F3F3');
    		}
    		//
	    	$twitter.css({'opacity':'0', 'display':'block'});
	    	$twitter.animate({'opacity':'1'},300, function()
	    	{
	    		// Puto Internet Exploder...
	    		if(jQuery.browser.msie)
	    		{
		    		$twitter.get(0).style.removeAttribute('filter');
		    		$('*',$twitter).each(function(index)
		    		{
		    			$(this).get(0).style.removeAttribute('filter');
		    		});
	    		}
	    	});
	    }
	});
	
   
    $tweetNext.unbind('click');
    $tweetPrevious.unbind('click');
    
    if (i <= 0)
    { 
    	$tweetNext.bind('click', function(e) { e.preventDefault(); return false; });
    	$tweetPrevious.bind('click', function(e) { e.preventDefault(); mostrarTweet(i+1); });
    }
    else if ((i > 0) && (i <= tweetsList.length-1))
    {
    	$tweetPrevious.bind('click', function(e) { e.preventDefault(); mostrarTweet(i+1); });
    	$tweetNext.bind('click', function(e) { e.preventDefault(); mostrarTweet(i-1); });
    }
    else
    {
    	$tweetPrevious.bind('click', function(e) { e.preventDefault(); return false; });
    }
    
    var tempRT = 'RT @reactivo: ' + tweetsList[i].simpleText;
    var tempAnswr = '@reactivo ';
    
    $tweetRetweet.attr('href', 'http://twitter.com/?status=' + encodeURIComponent(tempRT)); 
    $tweetAnswer.attr('href', 'http://twitter.com/?status=' + encodeURIComponent(tempAnswr));
}

// Constructor del objeto tweet
function tweetObject(id,htmlText,date,simpleText)
{
	this.id = id;
	this.htmlText = htmlText;
	this.date = date;
	this.simpleText = simpleText;
}

// Coger los tweets y meterlos en array
function tweetsControl(tweets)
{
	for (var i = 0; i < tweets.length; i++) 
	{
		var tempTweet = new tweetObject(tweets[i].id_str, usersHashtags(urlToLink(tweets[i].text)), relTime(tweets[i].created_at), tweets[i].text);
		tweetsList.push(tempTweet);
	}
	mostrarTweet(0);
}

// Formatear la fecha del tweet
function relTime(time_value)
{
  time_value = time_value.replace(/(\+[0-9]{4}\s)/ig,"");
  var parsed_date = Date.parse(time_value);
  var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
  var timeago = parseInt((relative_to.getTime() - parsed_date) / 1000);
  if (timeago < 60) return 'hace menos de un minuto';
  else if(timeago < 120) return 'hace un minuto';
  else if(timeago < (45*60)) return 'hace ' + (parseInt(timeago / 60)).toString() + ' minutos';
  else if(timeago < (90*60)) return 'hace menos de una hora';
  else if(timeago < (24*60*60)) return 'hace ' + (parseInt(timeago / 3600)).toString() + ' horas';
  else if(timeago < (48*60*60)) return 'hace un día';
  else return 'hace ' + (parseInt(timeago / 86400)).toString() + ' días';
}

// Convertir usuarios y hashtags en links
function usersHashtags(text)
{
	var tweet = text.replace(/(^|\s)@(\w+)/g, '$1<a href="http://www.twitter.com/$2">@$2</a>');
   	return tweet.replace(/(^|\s)#(\w+)/g, '$1<a href="http://search.twitter.com/search?q=%23$2">#$2</a>');
}

// convertir urls en links
function urlToLink(text)
{
  var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
  return text.replace(exp,"<a href='$1'>$1</a>");
}

