/*
	Twittergrid.me API
	By info@whseo.nl (09-2010)
	############################# */
	
var T = {me:{
	templates: {},
	monthnames: ['januari','februari','maart','april','mei','juni','juli','augustus','september','oktober','november','december'],
	init: function() {
		var qf = $(document.body).select('input.followers_q');
		var qs = $(document.body).select('input.followers_s');
		qf.each(function(field) { Event.observe(field, 'keypress', function(event){ if(event.keyCode == Event.KEY_RETURN) T.me.getgrid(this); }); });
		qs.each(function(field) { Event.observe(field, 'click', function() { T.me.getgrid(this); }); });
		this.gettweets();
	},
	gettweets: function() {
		$('tweets').show();
		$('tweets').update('Currently loading latest tweets&hellip;');
		new Ajax.Request('/twittergrid.php', {
			method: 'post',
			parameters: { action: 'gettweets' },
			evalJS: true,
			onSuccess: function(response) {
				$('loading').hide();
				var data = response.responseJSON;
				if (data) {
					if (data.status == 'error') {
						switch (data.msg) {
							default:
								alert(data.msg);
							break;
						}
					} else {
						if (!data.tweets || data.tweets.length==0) {
							$('tweets').update('There currently are no tweets available.');
						} else {
							$('tweets').update('');
							T.me.templates['latesttweet'] = data.templates['latesttweet'];
							data.tweets.each(function(tweet) {
								var li = new Element('li').update(T.me.parse_template('latesttweet',tweet));
								$('tweets').insert({bottom: li});
							});
						}
					}
				} else {
					//alert('Error: invalid response received from tgrid.me backend'); return false;
					alert(response.responseText);
				}
			}
		});
	},
	getgrid: function(caller) {
		var qf = caller.up(0).select('input.followers_q')[0];
		var q = qf.value;
		if (!q) {
			new Effect.Highlight(qf, { startcolor: '#ff0000', endcolor: '#ffffff' });
			qf.focus();
			return false;
		}
		$('display').update('');
		$('loading').show();
		$('loading').update('<img alt="Content Loading" src="images/loading.gif" />');
		new Ajax.Request('/twittergrid.php', {
			method: 'post',
			parameters: { action: 'getgrid', q: q },
			evalJS: true,
			onSuccess: function(response) {
				$('loading').hide();
				var data = response.responseJSON;
				if (data) {
					if (data.status == 'error') {
						switch (data.msg) {
							case "noq":
								qf.value = '';
								new Effect.Highlight(qf, { startcolor: '#ff0000', endcolor: '#ffffff' });
								qf.focus();
							break;
							case "invalidq":
								alert('Error: The twitter user seems to be invalid. ');
								new Effect.Highlight(qf, { startcolor: '#ff0000', endcolor: '#ffffff' });
								qf.focus();
							break;
							default:
								alert(data.msg);
							break;
						}
					} else {
						$('who').update('<a href="http://twitter.com/'+data.user.screen_name+'" target="_blank">@'+data.user.screen_name+'</a>');
						if ($('content').select('div.alert')[0]) {
							$('content').select('div.alert')[0].remove();
						}
						$('display').update('');
						T.me.templates = data.templates;
						if (data.followers.length == 0) {
							var li = new Element('li').update('This twitter user has no followers yet.');
							$('display').insert({bottom: li});
						} else {
							data.followers.each(function(follower) {
								var li = new Element('li').update(T.me.parse_template('gridresult',follower));
								$('display').insert({bottom: li});
								new Tip($('f'+follower.user_id), T.me.parse_template('gridresult_infobox',follower), {
									title: 'Twittergebruiker <a href="http://twitter.com/'+follower.screen_name+'">@'+follower.screen_name+'</a>',
									style: 'twittergrid',
									hideOn: false, hideAfter: 3, hideOthers: true, width: 350
								});
							});
						}
					}
				} else {
					//alert('Error: invalid response received from tgrid.me backend'); return false;
					alert(response.responseText);
				}
			}
		});
	},
	get_template: function(name) {
		return ((this.templates[name]) ? this.templates[name] : '');
	},
	parse_template: function(templatename,data) {
		var template = this.get_template(templatename);
		var results = template.match(/\$var\[([^\]]+)\]/g);
		if (results && results.length>0) {
			results.each(function(variable) {
				var varmatch = variable.match(/\$var\[([^\]]+)\]/);
				var regex = new RegExp("\\$var\\["+varmatch[1]+"\\]","g");
				switch (varmatch[1]) {
					case "last_tweet":
						if (data.last_tweet) {
							var tweet = T.me.parse_lasttweet(data);
							if (tweet.date) {
								var tweetdate = new Date((tweet.date*1000));
								tweet.date = tweetdate.getDate() + ' ' +T.me.monthnames[tweetdate.getMonth()] + ' ' + tweetdate.getFullYear();
							} else {
								tweet.date = '-';
							}
							template = template.replace(regex,T.me.parse_template('gridresult_infobox_last_tweet',tweet));
						} else {
							template = template.replace(regex,'');
						}
					break;
					case "retweets":
						var replacevar = (data[varmatch[1]]) ? data[varmatch[1]] : '0';
						template = template.replace(regex,replacevar);
					break;
					default: 
						var replacevar = (data[varmatch[1]]) ? data[varmatch[1]] : '-';
						template = template.replace(regex,replacevar);
					break;
				}
			});
		}
		return template;
	},
	parse_lasttweet: function(follower) {
		if (follower.last_tweet) {
			var tweet = {
				id: follower.last_tweet.id,
				text: follower.last_tweet.text,
				date: follower.last_tweet.date,
				retweets: follower.last_tweet.retweets,
				replyto: ((follower.last_tweet.reply) ? follower.last_tweet.reply.screen_name : '' )
			};
		} else {
			var tweet = {};
		}
		return tweet;
	}
}};
document.observe("dom:loaded", function() { T.me.init(); });
