//////////////////////////////////////////////////////////////////////
//
// Twitter Javascript API
// version:	beta 1, customized
// release:	September 30, 2007
// license: This api is free to use and distribute as long as
//			this copyright notice remains attached
//
// (c) 2007 Justin Bezanson <justinbezanson@gmail.com>
// (c) ustomized by Stefan Werner <werner@i-gelb.com>
//
//	original Script -> twitter.js
//
//////////////////////////////////////////////////////////////////////

var Twitter = {};
Twitter.AjaxPage = "http://www.welthungerhilfe.de/typo3conf/ext/ig_twitter/ig_twitter.php";
Twitter.AjaxLoadImage = "http://www.welthungerhilfe.de/typo3conf/ext/ig_twitter/img/loading.gif";
Twitter.UserProfile = {};

/**
 * updates the specified element with the latest statuses
 * @params : 
 *		- user : accepts twitter username or id
 * 		- update : string of the element to update
 *		- count : optional, number of statuses to return, default is 20 which is also the maximum
 *		- limit : true || false, false by default, if true leaves out the user image and screen name links
 */
Twitter.UserTimeline = function(params) {
	if(typeof params.update == "string") {
		params.update = document.getElementById(params.update);
	}
	var user = params.user;
	var update = params.update;
	var limit = params.limit;
	var currentContents = update.innerHTML;
	update.innerHTML = '<div style="width:100%;text-align:center"><img src="' + Twitter.AjaxLoadImage + '" alt=""/></div>';
	var url = Twitter.AjaxPage + "?user_timeline=" + user;
	if(params.count){url += "&count=" + params.count;}else{url += "&count=20";}
	var parameters = {
		onComplete:function(response) {
			update.innerHTML = currentContents;
			var json = eval(response.text);			
			for(var i=0;i<json.length;i++) {
				var twitter = json[i];
				var image = '<img src="' + twitter.user.profile_image_url + '" alt="" style="float:left"/>';
				var userlink = '<span class="TwitterUser"><a href="http://www.twitter.com/' + user + '">' + user + '</a></span> ';
				var time = Twitter.TimePhrase((new Date().getTime() - Twitter.CreatedOn(twitter.created_at)));
				time = 	' <span class="twitter_time">' + time + '</span>';
				var html = '<div class="twitter"><span class="twitter_user">Welthungerhilfe: </span>';
				
				var newtext = '';
				var splatter = twitter.text.split(" ");
				for(var j=0;j<splatter.length;j++) {
					if(splatter[j].substr(0,4) == 'www.') {
						newtext += '<a href="http://'+splatter[j]+'">'+splatter[j]+'</a> ';
					}else if(splatter[j].substr(0,7) == 'http://') {
						newtext += '<a href="'+splatter[j]+'">'+splatter[j]+'</a> ';
					}else{
						newtext += splatter[j]+' ';
					}
				}
				
				if(limit) {
					html += newtext + time;
				}
				else {
					html += image + userlink + newtext + time ;
				}
				html += '<div style="clear:left"></div></div>';
				update.innerHTML += html;
			}
		}
	};
	new Twitter.Ajax(url,parameters).request();
};



Twitter.CreatedOn = function(createdOn) {
	var parts = createdOn.split(" ");
	parts[4] = "UTC" + parts[4];
	return (new Date(parts.join(" "))).getTime();
};

Twitter.TimePhrase = function(ms) {
	var seconds = ms/1000;
	if(seconds < 1) { seconds = 1; }
	if(seconds < 60) { return "vor weniger als " + seconds + " Sekunden"; }
	else if(seconds < 3600) {
		var minutes = Math.round(seconds/60);
		if(minutes == 1) { return "vor einer Minute"; }else { return "vor " + minutes + " Minuten"; }
	} else if(seconds < 86400) {
		var hours = Math.round(seconds/3600);
		if(hours == 1) { return "vor einer Stunde"; } else { return "vor " + hours + " Stunden"; }
	} else {
		var days = Math.round(seconds/86400);
		if(days == 1) { return "vor einem Tag"; }
		else { return "vor " + days + " Tagen"; }
	}
};

Twitter.Ajax = function(sender,parameters) {
	this.request = function() {
		var http = null;
		var method = (parameters.method == null) ? "get" : parameters.method;
		var async = (parameters.async == null) ? true : parameters.async;
		//Firefox,Opera 8.0+,Safari
		try{http = new XMLHttpRequest();}
		catch(e) {
			//Internet Explorer
			try{http = new ActiveXObject("Msxml2.XMLHTTP");}
			catch(e) {
				try{http = new ActiveXObject("Microsoft.XMLHTTP");}
				catch(e) {
					alert("Your browser does not support Ajax!");
					return false;
				}
			}
		}
		http.onreadystatechange = function(){_OnComplete(parameters.onComplete,parameters.onFailure,parameters.update,http)};
		if(typeof sender == "string") {
			http.open(method,sender,async);
			http.send(null);
		}
		else {
			var action = (sender.action == null) ? parameters.action : sender.action;
			var args = this.toQueryString(sender);
			http.open(method,action,async);
			http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
			http.setRequestHeader("Content-length",parameters.length);
			if(!document.all){http.setRequestHeader("Connection","close");}
			http.send(args);
		}
	}
	
	this.toQueryString = function(object) {
		var str = "";
		var count = 0;
		if(object.length) {
			for(var i=0;i<object.length;i++) {
				//filter out ASP.Net system elements
				var sysElem = (	object[i].name == null ||
								object[i].name == "__EVENTTARGET" ||
								object[i].name == "__EVENTARGUMENT" ||
								object[i].name == "__VIEWSTATE");
				if(!sysElem) {
					if(count == 0) {
						str += object[i].name + "=" + encodeURIComponent(object[i].value);
					}
					else {
						str += "&" + object[i].name + "=" + encodeURIComponent(object[i].value);
					}
					count++;
				}
			}
		}
		else {
			for(key in object) {
				if(count == 0) {
					str += key + "=" + encodeURIComponent(object[key]);
				}
				else {
					str += "&" + key + "=" + encodeURIComponent(object[key]);
				}
				count++;
			}
		}
		return str;
	}
}

function _OnComplete(fnComplete,fnFailure,update,http) {
	if(http.readyState == 4) {
		if(http.status == 200) {
			if(fnComplete){fnComplete({text:http.responseText});}
			if(update) {
				if(typeof update == "string")
					update = document.getElementById(update);
				update.innerHTML = http.responseText;
			}
		}
		else {
			if(fnFailure){fnFailure({text:http.responseText,status:http.status});}
		}
	}
}