// this file contains the twitter widget
// author:    Dominik Scholz, schlotzz@go4u.de
// changed:   2010-01-12


var TWITTER = {
	
	// private vars
	url: 'items/objecttwitter/ajax.gettimeline.php',
	ajax: [],
	data: [],

	
	// start twitter widget
	start: function(account, id)
	{
		this.getTimeline(decodeURIComponent(account), id);
	},
	
	
	// do ajax call to get twitter data
	getTimeline: function(account, id)
	{

		this.ajax[id] = this.getAjaxObject();
		this.ajax[id].open('POST', this.url, true);
		this.ajax[id].setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		this.ajax[id].onreadystatechange = new Function('fx', 'TWITTER.receiveTimeline("'+encodeURIComponent(account)+'", '+id+')');
		this.ajax[id].send('account='+encodeURIComponent(account));
		
	},


	// received timeline data
	receiveTimeline: function(account, id)
	{

		if(this.ajax[id].readyState != 4)
			return;
			
		if(this.ajax[id].status != 200)
			return;
			
		var data = null;
		
		try {
			data = eval(this.ajax[id].responseText);
		}
		catch(e) {
			return;
		}

		this.displayTimeline(decodeURIComponent(account), id, data);

	},
	
	
	// display the timeline
	displayTimeline: function(account, id, data)
	{
		
		var obj = document.getElementById('twitter'+id);
		var html = '';
		
		// do for all tweets
		html += '<ol class="tweets">';
		for (var i in data)
		{
			var item = data[i];
			html += '<li class="tweet">'+"\n";
			html += '	<span class="tweet-thumb">'+"\n";
			html += '		<a class="tweet-url" href="http://www.twitter.com/'+encodeURI(item.user.screen_name)+'" target="_blank" rel="nofollow">'+"\n";
			html += '			<img class="tweet-image" width="48" height="48" src="'+item.user.profile_image_url+'" alt="'+item.user.name+'">'+"\n";
			html += '		</a>'+"\n";
			html += '	</span>'+"\n";
			html += '	<span class="tweet-body">'+"\n";
			html += '		<strong>'+"\n";
			html += '			<a class="tweet-user" href="http://www.twitter.com/'+encodeURI(item.user.screen_name)+'" target="_blank" rel="nofollow" title="'+item.user.name+'">'+item.user.screen_name+'</a>'+"\n";
			html += '		</strong>'+"\n";
			html += '		<span class="tweet-text">'+this.parseUrls(item.text)+'</span>'+"\n";
			html += '		<span class="tweet-meta">'+"\n";
			html += '			'+this.parseDate(item.created_at)+' <span>via '+item.source+'</span>'+this.parseReply(item)+"\n";
			html += '		</span>'+"\n";
			html += '	</span>'+"\n";
			html += '</li>'+"\n";
		}
		html += '</ol>';
		
		obj.innerHTML = html;
		
	},
	
	
	// replace urls with links
	parseUrls: function(html)
	{
	
		html = html.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*)/g, '<a href="$1" rel="nofollow" target="_blank">$1</a>');
		html = html.replace(/\B\#([_a-z0-9]+)/ig, function(tag) { return '<a href="http://twitter.com/search?q='+encodeURIComponent(tag)+'" rel="nofollow" target="_blank">'+tag+'</a>'; });
		html = html.replace(/\B@([_a-z0-9]+)/ig, function(reply) { return  reply.charAt(0)+'<a href="http://twitter.com/'+reply.substring(1)+'">'+reply.substring(1)+'</a>'; });
		return html;
	
	},
	
	
	// parse date
	parseDate: function(value)
	{
		var values = value.split(" ");
		value = values[1] + " " + values[2] + ", " + values[5] + " " + values[3];
		var parsed_date = Date.parse(value);
		var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
		var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
		delta = delta + (relative_to.getTimezoneOffset() * 60);

		if (delta < 60) {
			return 'vor weniger als '+delta+' Sekunden';
		} else if(delta < 120) {
			return 'vor einer Minute';
		} else if(delta < (60*60)) {
			return 'vor '+(parseInt(delta / 60)).toString() + ' Minuten';
		} else if(delta < (120*60)) {
			return 'vor ungef&auml;hr einer Stunde';
		} else if(delta < (24*60*60)) {
			return 'vor ungef&auml;hr ' + (parseInt(delta / 3600)).toString() + ' Stunden';
		} else if(delta < (48*60*60)) {
			return 'vor einem Tag';
		} else {
			return 'vor '+(parseInt(delta / 86400)).toString() + ' Tagen';
		}
	},
	
	
	// parse a reply
	parseReply: function(item)
	{
		// no reply, return
		if (item.in_reply_to_status_id <= 0)
			return '';
			
		return ' <a href="http://twitter.com/'+encodeURI(item.in_reply_to_screen_name)+'/status/'+item.in_reply_to_status_id+'" target="_blank" rel="nofollow">als Antwort auf '+item.in_reply_to_screen_name+'</a>';
	},


	// create browser independent ajax object
	getAjaxObject: function()
	{
		if (navigator.appName == "Microsoft Internet Explorer")
		{
			try
			{
				return new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (e)
			{
				return new ActiveXObject("Microsoft.XMLHTTP");
			}
		}
		else
		{
			return new XMLHttpRequest();
		}
	}

};
