/* Source: http://delete.me.uk/2005/03/iso8601.html */
Date.prototype.toISO8601String = function (format, offset) {
    /* accepted values for the format [1-6]:
     1 Year:
       YYYY (eg 1997)
     2 Year and month:
       YYYY-MM (eg 1997-07)
     3 Complete date:
       YYYY-MM-DD (eg 1997-07-16)
     4 Complete date plus hours and minutes:
       YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)
     5 Complete date plus hours, minutes and seconds:
       YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)
     6 Complete date plus hours, minutes, seconds and a decimal
       fraction of a second
       YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00)
    */
    if (!format) { var format = 6; }
    if (!offset) {
        var offset = 'Z';
        var date = this;
    } else {
        var d = offset.match(/([-+])([0-9]{2}):([0-9]{2})/);
        var offsetnum = (Number(d[2]) * 60) + Number(d[3]);
        offsetnum *= ((d[1] == '-') ? -1 : 1);
        var date = new Date(Number(Number(this) + (offsetnum * 60000)));
    }

    var zeropad = function (num) { return ((num < 10) ? '0' : '') + num; }

    var str = "";
    str += date.getUTCFullYear();
    if (format > 1) { str += "-" + zeropad(date.getUTCMonth() + 1); }
    if (format > 2) { str += "-" + zeropad(date.getUTCDate()); }
    if (format > 3) {
        str += "T" + zeropad(date.getUTCHours()) +
               ":" + zeropad(date.getUTCMinutes());
    }
    if (format > 5) {
        var secs = Number(date.getUTCSeconds() + "." +
                   ((date.getUTCMilliseconds() < 100) ? '0' : '') +
                   zeropad(date.getUTCMilliseconds()));
        str += ":" + zeropad(secs);
    } else if (format > 4) { str += ":" + zeropad(date.getUTCSeconds()); }

    if (format > 3) { str += offset; }
    return str;
}

function tweetLoader()
{
	if (this.readyState != 4) return;
	
	if (this.status != 200 || this.responseText == '')
		alert('Could not open it');
	
	if (!JSON) return;
	var tweets = JSON.parse(this.responseText);
	
	for (i in tweets)
	{
		var tweetDiv = document.createElement('div');
		tweetDiv.className = 'tweet';
		
		var tweetP = document.createElement('p');
		tweetDiv.appendChild(tweetP);
		
		var tweetText = tweets[i].text;
		
		tweetText = tweetText.replace(/(http:\/\/\S+)/g, "<a href=\"$1\">$1</a>");
		tweetText = tweetText.replace(/#([A-Za-z0-9]+)/g, "<a href=\"http://twitter.com/search?q=%23$1\">#$1</a>");
		tweetText = tweetText.replace(/@([A-Za-z0-9]+)/g, "<a href=\"http://twitter.com/$1\">@$1</a>");
		tweetP.innerHTML = tweetText;
		
		var bottomP = document.createElement('p');
		bottomP.className = 'information';
		bottomP.appendChild(abbrDate(new Date(tweets[i].created_at), lang));
		
		if (tweets[i].in_reply_to_status_id != null)
		{
			var usernameLink = document.createElement('a');
			usernameLink.href = 'http://twitter.com/' + tweets[i].in_reply_to_screen_name + '/status/' + tweets[i].in_reply_to_status_id;
			usernameLink.appendChild(document.createTextNode(tweets[i].in_reply_to_screen_name));
			
			if (lang == 'de') bottomP.appendChild(document.createTextNode(' als Antwort auf '));
			else bottomP.appendChild(document.createTextNode(' in reply to '));
			
			bottomP.appendChild(usernameLink);
		}
		
		tweetDiv.appendChild(bottomP);
		
		document.getElementById('twitter_post_area').appendChild(tweetDiv);
	}
}

var monthNamesDE = new Array('Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'Dezember');
var monthNamesEN = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'December');

function abbrDate(date, lang)
{
	var abbr = document.createElement('abbr');
	abbr.title = date.toISO8601String(4);
	var abbrString;
	if (lang == 'de')
		abbrString = date.getDate() + '. ' + monthNamesDE[date.getMonth()] + ' ' + date.getFullYear() + ' um ' + withLeadingZero(date.getHours()) + ':' + withLeadingZero(date.getMinutes());
	else
	{
		var day = date.getDate();
		if (day % 10 == 1) day = day + 'st';
		else if (day % 10 == 2) day = day + 'nd';
		else if (day % 10 == 3) day = day + 'rd';
		else day = day + 'th';
		
		var hours = date.getHours();
		var suffix = '';
		if (hours < 12)
			suffix = 'am';
		else
		{
			hours -= 12;
			suffix = 'pm';
		}
		
		abbrString = monthNamesEN[date.getMonth()] + ' ' + day + ', ' + date.getFullYear() + ' at ' + withLeadingZero(hours) + ':' + withLeadingZero(date.getMinutes()) + ' ' + suffix;
	}
	abbr.appendChild(document.createTextNode(abbrString));
	
	return abbr;
}

function withLeadingZero(number)
{
	return number < 10 ? '0' + number : number;
}

function loadTweets()
{
	if (!XMLHttpRequest) alert('Get a real browser');
	twitterRequest = new XMLHttpRequest()
	twitterRequest.onreadystatechange = tweetLoader;
	twitterRequest.open("GET", "/twitterfeed.php", true);
	twitterRequest.send();
}

window.onload=loadTweets;
