/**
 * Plugin: jquery.zTwitterFeed
 * 
 * Version: 1.0.1
 * (c) Copyright 2010, Zazar Ltd
 * 
 * Description: jQuery plugin for display of Twitter tweets
 *              (Based on original plugin twit by Yusuke Horie)
 * 
 * History:
 * 1.0.1 - Corrected issue with multiple instances
 *
 **/

(function($){
	
	$.fn.twitterfeed = function(username, options) {	
	
		// Set pluign defaults
		var defaults = {
			limit: 3,
			header: true,
			tweeticon: true,
			tweetname: true,
			tweettime: true
		};  
		var options = $.extend(defaults, options); 
		
		// Functions
		return this.each(function(i, e) {
			var $e = $(e);
			
			// Add feed class to user div
			if (!$e.hasClass('twitterFeed')) $e.addClass('twitterFeed');
			
			// Check for valid user name
			if(username == null) return false;

			// Define Twitter feed request
			var url = 'http://twitter.com/statuses/user_timeline/' + username + '.json';
			var params = {};

			params.count = options.limit;

			// Send request
			jQuery.ajax({
				url: url,
				data: params,
				dataType: 'jsonp',
				success: function (o) {
					_callback(e, o, options);
				}
			});
				
		});
	};
	
	// Callback function to create HTML result
	var _callback = function(e, feeds, options) {
		if (!feeds) {
			return false;
		}
		var html = '';	
		var row = 'odd';
		
		// Add header if required
		if (options.header)
			var name = feeds[0].user.name;
			var screenname = feeds[0].user.screen_name;
			var icon = feeds[0].user.profile_image_url;
			var link = '<a href="http://twitter.com/' + screenname + '/" title="Visit '+ name +' on Twitter">';
		
		// Add feeds
		for (var i=0; i<feeds.length; i++) {
			html += '<dl class="twiter clearfix" >';
			
			// Get individual feed
			var tweet= feeds[i];
			var link = '';

			// Add feed row
			html += '<dt>';

			// Add user icon if required
			if (options.tweeticon) {
				var icon = tweet.user.profile_image_url;
				html += '<img src="'+ icon +'" width="50" height="50" alt="'+ name +'" />';
			}

			html += '</dt>';

			// Add user if required
			html += '<dd style="color:#84811a">';
			if (options.tweetname) {
				var name = tweet.user.name;
				html += '<p class="id" style="color:#0563a0;">'+ name +'</a></p>'
			}
			//style="width:120px;padding-top:1px;position:absolute;top:10px;left:310px;color:#ccc302;_left:-100px;"
			// Add lapsed time if required
			if (options.tweettime) {
				var lapsedTime = getLapsedTime(tweet.created_at);
				html += '<p class="date" style="width:120px;position:absolute;left:300px;margin-top:-20px;color:#ccc302;">'+ lapsedTime +'</p>'
			}

			// Get tweet text and add links (by Yusuke Horie)
			var text = tweet.text
				.replace(/(https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/, function (u) {
					var shortUrl = '';
					return shortUrl;
				})
				.replace(/@([a-zA-Z0-9_]+)/g, '@$1')
				.replace(/(?:^|\s)#([^\s\.\+:!]+)/g, function (a, u) {
					return u;
			});

			var shortWord = (text.length > 80) ? text.substr(0, 80) + '...': text;

			html += '<p class="write">'+ shortWord +'</p>'

			// Alternate row classes
			if (row == 'odd')
				row = 'even';
			else
				row = 'odd';

  			html += '</dd>';
			html += '</dl>';
		}
		$(e).html(html);
	};

	function getLapsedTime(strDate) {
		
		// Reformat Twitter date so that IE can convert
		strDate = Date.parse(strDate.replace(/^([a-z]{3})( [a-z]{3} \d\d?)(.*)( \d{4})$/i, '$1,$2$4$3'));

		// Define current time and format tweet date
		var todayDate = new Date();	
		var tweetDate = new Date(strDate)

		// Get lasped time in seconds
		var lapsedTime = Math.round((todayDate.getTime() - tweetDate.getTime())/1000)

		// Return lasped time in seconds, minutes, hours, days and weeks
		if (lapsedTime < 60) {
			return '약 1분 전 작성된 글';
		} else if (lapsedTime < (60*60)) {
			return '약 ' + Math.round(lapsedTime / 60) + '분 전 작성된 글';
		} else if (lapsedTime < (24*60*60)) {
			return '약 ' + Math.round(lapsedTime / 3600) + '시간 전 작성된 글';
		} else if (lapsedTime < (7*24*60*60)) {
			return '약 ' + Math.round(lapsedTime / 86400) + '일 전 작성된 글';
		} else {
			return '약 ' + Math.round(lapsedTime / 604800) + '주 전 작성된 글';
		}
	};
})(jQuery);
