var problem_timeout = false;
var queries = new Array();
var current_query = 0;

var twitter_url_prefix = 'http://twitter.com/';
var stream_url_prefix = 'http://twitter.com/'; //http://live.sebmos.at/';

function tweet_wall_run()
{
	// create queries (each query can't be longer than 140 chars
	var query = keywords.split(',');
	query = query.join('+OR+');
	query = query.replace(/#/gi, '%23');
	
	while (query != '')
	{
		var sub_query = '';
		var ready = false;
		while (!ready)
		{
			if (sub_query != '')
				sub_query += '+OR+';
			
			if (query.indexOf('+OR+') != -1)
			{
				sub_query += query.substr(0, query.indexOf('+OR+'));
				query = query.substr(query.indexOf('+OR+') + 4);
				
				if (sub_query.length >= 140)
				{
					query += sub_query.substr(sub_query.lastIndexOf('+OR+'));
					sub_query = sub_query.substr(0, sub_query.lastIndexOf('+OR+'));
					
					ready = true;
				}
			}
			else
			{
				sub_query += query;
				query = '';
				ready = true;
			}
		}
		
		queries.push(sub_query);
	}
	
	tweet_wall_get_tweets();
}
window.onload = tweet_wall_run;

function tweet_wall_get_tweets()
{
	var url = 'http://search.twitter.com/search.json?q=-from%3Awebtermineat+'
		+ queries[current_query]
		+ '&rpp=' + count;
	
	if (since_id != 0 && since_id != null)
		url += '&since_id=' + since_id;
	url += '&callback=tweet_wall_process_tweets&_c=' + Math.random();
	
	tweet_wall_show_loading();
	
	problem_timeout = window.setTimeout('tweet_wall_show_problem()', 20 * 1000);
	jQuery('div#hdn_tweets').html('<script type="text/javascript" src="' + url + '"></' + 'script>');
}

function tweet_wall_process_tweets(data)
{
	if (problem_timeout !== false)
		window.clearTimeout(problem_timeout);
	
	tweet_wall_hide_loading();
	
	if (!(data.error == undefined))
	{
		tweet_wall_show_problem();
		
		return;
	}
	
	tweet_wall_hide_problem();
	
	// restart searching for tweets or go to next batch of users
	current_query++;
	if (queries[current_query] == null)
	{
		current_query = 0;
		window.setTimeout('tweet_wall_get_tweets()', reload_seconds * 1000);
	}
	else
	{
		tweet_wall_get_tweets();
	}
	
	since_id = data['max_id'];
	data = data['results'];
	
	if (data.length == 0)
		return;
	
	var h = '';
	for (var i = 0; i < data.length; i++)
	{
		var tweet = data[i];
		
		tweet_wall_insert_tweet(
			tweet['id'],
			tweet_wall_tweet_to_html(tweet)
		);
	}
	
	// if more than {count} tweets, delete from bottom!
	var tweets = jQuery('div#tweets div.tweet');
	for (var i = 40; i < tweets.length; i++)
	{
		jQuery(tweets[i]).remove();
	}
}

function tweet_wall_tweet_to_html(tweet)
{
	var id = tweet['id'];
	
	var h = '';
	
	var dt = new Date(tweet['created_at']);
	
	h += '<div class="tweet" id="tweet-' + id + '">';
	
	h +=  '<span class="arrow_left"><!----></span>';
	
	h +=  '<a target="_blank" title="Twitterprofil von @'+ tweet['from_user'] + ' aufrufen" href="http://twitter.com/'+ tweet['from_user'] + '"><img class="profile_pic" src="'
		+ tweet['profile_image_url'] + '" alt="'
		+ tweet['from_user'] + '" /></a>';
	
	h +=  '<div class="text"><div class="text">'
		+ '<span class="from_user">';
	
	h +=  '<span class="meta"><a title="Permalink zum Tweet aufrufen" href="'
		+ twitter_url_prefix + tweet['from_user'] + '/statuses/' + id + '">'
		+ dt.getDate() + '.'
		+ (dt.getMonth() + 1) + '.'
		+ dt.getFullYear() + ' '
		+ dt.getHours() + ':'
		+ dt.getMinutes() + ' Uhr</a>'
		+ '</span>';
	
	h +=  'von <a target="_blank" title="Twitterprofil von @'+ tweet['from_user'] + ' aufrufen" href="'
		+ stream_url_prefix
		+ tweet['from_user'] + '"><strong>'
		+ tweet['from_user'] + '</strong></a>:</span>';
	
	h +=  tweet_wall_format_tweet(tweet['text']);
	
	h += '</div></div>';
	
	h += '</div>';
	
	return h;
}

function tweet_wall_insert_tweet(tweet_id, html)
{
	var tweets = jQuery('div#tweets div.tweet');
	for (var i = 0; i < tweets.length; i++)
	{
		var curr_tweet_id = tweets[i].id;
		curr_tweet_id = curr_tweet_id.substr(curr_tweet_id.indexOf('-') + 1);
		
		if (tweet_id > curr_tweet_id)
		{
			jQuery(tweets[i]).before(html);
			jQuery('div#tweet-' + tweet_id).slideDown('slow');
			return;
		}
	}
	
	jQuery("div#tweets").append(html);
	jQuery('div#tweet-' + tweet_id).slideDown('slow');
}

function tweet_wall_format_tweet(text)
{
	// detect names
	text = text.replace(
		/\@([a-zA-Z0-9_]+)/gi,
		'<a href="' + stream_url_prefix + '$1">@$1</a>'
	);
	
	// detect urls
	text = (' ' + text).replace(
		/(\s)http\:\/\/([^\s]+)/gi,
		'$1<a href="http://$2">http://$2</a>'
	);
	
	return text;
}

function tweet_wall_show_problem()
{
	tweet_wall_hide_loading();
	jQuery('#tweet_wall_problem').show();
}

function tweet_wall_hide_problem()
{
	jQuery('#tweet_wall_problem').hide();
}

function tweet_wall_show_loading()
{
	jQuery('#tweet_wall_loading').show();
}

function tweet_wall_hide_loading()
{
	jQuery('#tweet_wall_loading').hide();
}
