/**
 * jQuery-Plugin "tweets"
 * 
 * @version: 1.0, 09.22.2009
 * 
 * @author: Stijn Van Minnebruggen
 *          stijn@donotfold.be
 *          http://www.donotfold.be
 * 
 * @example: $('selector').tweets({ user: 'donotfold' });
 * @example: $('selector').tweets({ user: 'donotfold', number: 5, showLoader: true });
 * 
 */

(function($) {

$.fn.tweets = function(settings) {
	
	/**
	 * Settings
	 * 
	 */
	
	var settings = $.extend({
		
		user: 'donotfold',					// twitter user
		number: 10,							// number of tweets to fetch
		
		showLoader: true,					// show loader while fetching tweets
		loaderHtml: 'Loading tweets...',	// loader html content
		loaderClass: 'tweetsLoading',		// className while loading
		
		linkTweets: true,					// link tweets
		showDate: false,					// show date of every tweet
		dateClass: 'tweetsDate',			// className for the date span element
		
		fullWrapElement: 'ol',				// html tag that wraps the full html result
		itemWrapElement: 'li'				// html tag that wraps each tweet
		
	}, settings);
	
	
	/**
	 * Fetch elements
	 * 
	 */
	
	var el = $(this);
	if(el.size() == 0) return $;
	
	
	/**
	 * Show loader
	 * 
	 */
	
	if(settings.showLoader) {
		el.addClass(settings.loaderClass).html(settings.loaderHtml);
	}
	
	
	/**
	 * Fetch tweets
	 * 
	 */
	
	var apiUrl = 'http://twitter.com/statuses/user_timeline/'+settings.user+'.json?count='+settings.number+'&callback=?';
	
	$.getJSON(apiUrl, function(resp) {
		
		/**
		 * Templates
		 * 
		 */
		
		var tpl_fullHtml = (settings.fullWrapElement == '') ? '%ITEMS%' : '<'+settings.fullWrapElement+'>%ITEMS%</'+settings.fullWrapElement+'>';
		var tpl_itemHtml = (settings.itemWrapElement == '') ? '%LINK%%DATE%' : '<'+settings.itemWrapElement+'>%LINK%%DATE%</'+settings.itemWrapElement+'>'+"\n";
		var tpl_linkHtml = (settings.linkTweets) ? '<a href="http://twitter.com/'+settings.user+'/status/%STATUSID%">%TEXT%</a>' : '%TEXT%';
		var tpl_dateHtml = (settings.showDate) ? ' <span class="'+settings.dateClass+'">%DATE%</span>' : '';
		
		
		/**
		 * Fetch results
		 * 
		 */
		
		var itemsHtml = '';
		$(resp).each(function(i) {
			
			// get values
				var id = $(this).attr('id');
				var text = $(this).attr('text');
				var date = $(this).attr('created_at');
			
			// add to items html
				var dateHtml = tpl_dateHtml.replace('%DATE%', date);
				var linkHtml = tpl_linkHtml.replace('%STATUSID%', id).replace('%TEXT%', text);
				var itemHtml = tpl_itemHtml.replace('%LINK%', linkHtml).replace('%DATE%', dateHtml);
				itemsHtml += itemHtml;
			
		});
		
		
		/**
		 * Hide loader
		 * 
		 */
		
		if(settings.showLoader) {
			el.removeClass(settings.loaderClass);
		}
		
		
		/**
		 * Add html content
		 * 
		 */
		
		var html = tpl_fullHtml.replace('%ITEMS%', itemsHtml);
		el.html(html);
		
		
	});
	
};

})(jQuery);
