function getTwitterXML(userid, maxStatuses, nodeID, prefixString, templateString, suffixString) {
	var url = '/.element/ssi/auto/3.0/sdms/fanZone/body/'+userid+'.xml';
	new Ajax.Request(url, {
		method: 'get',
		onSuccess: function(transport) {
			var numOfTableDataRows = (maxStatuses)? maxStatuses:99;
			var outputElementRef = $(nodeID);
			var oHTML_ = prefixString;
			
			var tweetTemplate = new Template(templateString);

			var refNodeId;
			var tweetCount = 0;
			var statuses;
			var tweets = {};
			tweets.meta = [];

			if (transport.responseText.match(/statuses/)) {

				// Ok We have the XML we are expecting.

				statuses = transport.responseXML.getElementsByTagName('status');

				for (var i = 0; i < statuses.length; i++) {
					if (tweetCount >= numOfTableDataRows){
						// break out of the loop if we have met our limit.
						break;
					}
					_nodeRef = statuses[i];

					var tempText = linkify(_nodeRef.getElementsByTagName('text')[0].childNodes[0].nodeValue);
					tempText = tempText.replace(/<a/ig, '<a target="_blank"');

					var tempWhere = _nodeRef.getElementsByTagName('source')[0].childNodes[0].nodeValue;
					tempWhere = tempWhere.replace(/<a/ig, '<a target="_blank"');

					tweets.meta.push({
						text:tempText, 
						when:relative_time(_nodeRef.getElementsByTagName('created_at')[0].childNodes[0].nodeValue), 
						where:tempWhere
					});
					tweetCount++;
				}

				for (var m = 0; m < tweets.meta.length; m++) {
					oHTML_ += tweetTemplate.evaluate(tweets.meta[m]);
				}
			}

			oHTML_ += suffixString;
			outputElementRef.update(oHTML_);

			function relative_time(time_value) {
				var values = time_value.split(" "),
					parsed_date = Date.parse(values[1] + " " + values[2] + ", " + values[5] + " " + values[3]),
					date = new Date(parsed_date),
					relative_to = (arguments.length > 1) ? arguments[1] : new Date(),
					delta = parseInt((relative_to.getTime() - parsed_date) / 1000),
					r = '';
				
				function formatTime(date) {
					var hour = date.getHours(),
						min = date.getMinutes() + "",
						ampm = 'AM';
					
					if (hour == 0) {
						hour = 12;
					} else if (hour > 12) {
						hour -= 12;
						ampm = 'PM';
					}
					
					if (min.length == 1) {
						min = '0' + min;
					}
					
					return hour + ':' + min + ' ' + ampm;
				}
				
				function formatDate(date) {
					var ds = date.toDateString().split(/ /),
						mon = ds[1],
						day = ds[2],
						dayi = parseInt(day),
						year = date.getFullYear(),
						thisyear = (new Date()).getFullYear(),
						th = 'th';
					
					// anti-'th' - but don't do the 11th, 12th or 13th
					if ((dayi % 10) == 1 && day.substr(0, 1) != '1') {
						th = 'st';
					} else if ((dayi % 10) == 2 && day.substr(0, 1) != '1') {
						th = 'nd';
					} else if ((dayi % 10) == 3 && day.substr(0, 1) != '1') {
						th = 'rd';
					}
					
					if (day.substr(0, 1) == '0') {
						day = day.substr(1);
					}
					
					return mon + ' ' + day + th + (thisyear != year ? ', ' + year : '');
				}
				
				delta = delta + (relative_to.getTimezoneOffset() * 60);

				if (delta < 5) {
					r = 'less than 5 seconds ago';
				} else if (delta < 30) {
					r = 'half a minute ago';
				} else if (delta < 60) {
					r = 'less than a minute ago';
				} else if (delta < 120) {
					r = '1 minute ago';
				} else if (delta < (45*60)) {
					r = (parseInt(delta / 60)).toString() + ' minutes ago';
				} else if (delta < (2*90*60)) { // 2* because sometimes read 1 hours ago
					r = 'about 1 hour ago';
				} else if (delta < (24*60*60)) {
					r = 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
				} else {
					if (delta < (48*60*60)) {
						r = formatTime(date) + ' yesterday';
					} else {
						r = formatTime(date) + ' ' + formatDate(date);
						// r = (parseInt(delta / 86400)).toString() + ' days ago';
					}
				}

				return r;
			};

			function linkify(s) {
				var entities = {
					'"' : '&quot;',
					'&' : '&amp;',
					'<' : '&lt;',
					'>' : '&gt;'
				};
				
				return s.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/g, function(m) {
					return m.link(m);
				}).replace(/(^|[^\w])(@[\d\w\-]+)/g, function(d, m1, m2) {
					return m1 + '@<a href="http://twitter.com/' + m2.substr(1) + '">' + m2.substr(1) + '</a>';
				}).replace(/"&<>/, function (m) {
					return entities[m];
				});
			}

		}
	});
}


//PGATOUR.addEvent(window, 'load', '');