/**
* Twitter: A jQuery plugin to display public Twitter feeds
* @author: Stefan Zollinger 
*
*/

if(typeof jQuery != 'undefined') {
	
	jQuery(function($) {
		$.fn.extend({
			
			monthNames:{
			'Jan': '01', 
			'Feb': '02', 
			'Mar':'03',
			'Apr':'04',
			'May':'05',
			'Jun':'06',
			'Jul':'07',
			'Aug':'08',
			'Sep':'09',
			'Oct':'10',
			'Nov':'11',
			'Dec':'12'
			
			},
			
			autolink: function(t){
				t=String(t)
				
				var re = /((http|https|ftp):\/\/[\w?=&.\/-;#~%-]+(?![\w\s?&.\/;#~%"=-]*>))/g;
				
				if(t.indexOf('youtube.com') >0){
					return t.replace(re, '<a href="$1">[Video]</a>')	
				}else{
					return t.replace(re, '<a href="$1">$1</a>')
				}
				
				
			},
			twitpicThumbs: function(t){
				t=String(t)
				var re = /http:\/\/twitpic.com\/([a-z0-9]*)/g;
				return t.replace(re, '<a class="twitpic" href="http://twitpic.com/$1"><img src="http://twitpic.com/show/mini/$1" /></a>')
				
			},
			
			twitter: function(options) {
				
				
				
				var settings = $.extend({}, $.fn.twitter.defaults, options);
			
				return this.each(
					function() {
						if($.fn.jquery < '1.2.6') {return;}
						var $t = $(this);
						
						var o = $.metadata ? $.extend({}, settings, $t.metadata()) : settings;
						$t.text(o.loadingText);
						$t.attr('disabled', 'disabled');
			
						var url = this.href;
						
						if(url.substring(0, 25) == 'http://search.twitter.com'){
							var urlParts = url.split('?');
							var reqUrl = urlParts[0] + '.json?' + urlParts[1];
							//alert(reqUrl);
							
							$.getJSON(
								reqUrl +'&callback=?',													
								{},
								function(d){
									
									var container = document.createElement('ul');
									container.className = o.containerClass;
									
									
									if(d && d.results.length > 0){
									for(var i=0; (i < d.results.length  ); i++){
										
										if(o.limit > 0 && o.limit <= i){
											break;
										}
										
										
										var tweet = d.results[i]
										li = document.createElement('li');
										itemHtml = '<p>';
										
										
										
										if(tweet.text){
											itemHtml += jQuery.fn.autolink(jQuery.fn.twitpicThumbs(tweet.text));
										}
										
										
										itemHtml += '</p>'
										  
										li.innerHTML = itemHtml; 
										container.appendChild(li)
									}
									
									$t.after( container)
									}
									$t.remove()
									o.callback();
								}
								
							);
							
							
						}else if( url.substring(0, 18) == 'http://twitter.com' 
							|| url.substring(0, 22) == 'http://www.twitter.com'
							){
							
							if(url.substr(-1, 1) == '/'){
								url = url.substr(0, url.length -1);
							 
							}
							var user = $t.attr('rel');
							
							$t.text(o.loadingText);
							
							
							
							$.getJSON(
								'http://twitter.com/status/user_timeline/' +user+ '.json?count=' + o.limit  +'&callback=?',													
								{},
								function(d){
									
									var container = document.createElement('ul');
									container.className = o.containerClass;
									
									
									if(d){
									for(var i=0; (i < d.length  ); i++){
										
										if(o.limit > 0 && o.limit <= i){
											break;
										}
										
										
										var tweet = d[i]
										li = document.createElement('li');
										itemHtml = '<p>';
										
										if(tweet.created_at){
											var cd = tweet.created_at.split(' ');
											var ct = cd[3].split(':')
											
											
											itemHtml += '<span class="date">';
											itemHtml += cd[2] + '.' + jQuery.fn.monthNames[cd[1]] + '.' +cd[5] + ' ' ;
											itemHtml += ct[0] + ':' + ct[1]; 
											itemHtml += '</span>';
										}
										
										if(tweet.text){
											itemHtml += jQuery.fn.autolink(jQuery.fn.twitpicThumbs(tweet.text));
										}
										
										
										itemHtml += '</p>'
										  
										li.innerHTML = itemHtml; 
										container.appendChild(li)
									}
									
									$t.after( container)
									}
									$t.remove()
									o.callback();
								}
								
							);
							
						}
						
					}
				);
			}
		});
		
		
		$.fn.twitter.defaults = {
			
			containerClass: 'twitter-feed',
			loadingText: 'Loading...',
			callback: function(){},
			limit: 10
		};
	});
}
