jQuery.noConflict();

if (!('console' in window)) { window.console = { log: function() {}, dir: function() {} }; }

B = (function($) {
	return {
		tumblr_stream: function(tumblr, container_id, single, style, per_page) {
			var posts = tumblr.posts, container = $('#'+container_id);
			style = (!style || style === '' ? 'full' : style);
			var translate = {

				summarise: function(html) {
					var c = $(html).first().text();
					var w = c.split(' '), n = 0, s = [], m = 55;
					for (var i = 0, ii = w.length; i < ii; i++) {
						if (n <= m) {
							s.push(w[i]);
							n += w[i].length;
						} else {
							break;
						}
					}
					s.push('&hellip;');
					return s.join(' ');
				},
				url: function(post) {
					return '/blog/post/' + post.id;
				},
				defaults: function(result, post) {
					result.date = Date.parse(post['date-gmt']).toString('dddd, MMMM d, yyyy');
					result.type = post.type;
					result.url = this.url(post);
					result.id = post.id;
					result.tags = post.tags;

					return result;
				},
				regular: function(post) {
					var c, more = '<!-- more -->';
					if (single) {
						c = $(post['regular-body']);
					} else {
						c = $(post['regular-body'].replace(more, '<p class="meta more"><a href="'+this.url(post)+'">Read more &rarr;</a></p>'+more).split(more)[0]);;
					}
					var n = [];
					return this.defaults({
						title: post['regular-title'],
						url: post['url'],
						content: c
					}, post);
				},
				photo: function(post) {
					return this.defaults({
						title: "Photo",
						content: $('<p><img src="'+(post['photo-url-250'])+'" alt="" /></p>' + post['photo-caption']),
						summary: this.summarise(post['photo-caption'])
					}, post);
				},
				video: function(post) {
					return this.defaults({
						title: 'Video',
						content: $( '<p>'+post['video-player']+'</p>' + post['video-caption']),
						summary: this.summarise(post['video-caption'])

					}, post);
				},
				link: function(post) {
					return this.defaults({
						title: "Link",
						content: $('<p><a href="'+post['link-url']+'">'+post['link-text']+'</a></p>' + post['link-description']),
						summary: this.summarise(post['link-description'])
					}, post);
				}
			};
			var styles = {
				summaries: function() {
					var link = $('<a/>', {href: post['url'], 'title': 'Read this post'}).html(post['title']),
					entry = $('<div/>', {'class': 'post '+post.type + ' ' + style , 'id':'post-'+post.id}),
					wrap = $('<div/>', {'class':''}),
					title = $('<h3/>').html(link),
					date = $('<h4/>', {'class':'date'}).text(B.relative_time(post.date));

					var c = '';
					if (post.summary) {
						c = $('<p/>').html(post.summary);
					}
					wrap.append(title).append(c).append(date);
					entry.append(wrap).append($('<span/>', {'class':'speech speech_12'}));
					return entry;
				},
				full: function() {
					var title = '', link = false, desc = '',
					entry = $('<div/>', {'class': 'post '+post.type + ' ' + style, 'id':'post-'+post.id}),
					date = $('<h4/>', {'class':'date'}).text(post.date);

					if (post.title && !single) {
						link = $('<a/>', {href: post['url'], title:'Read this post', 'class':'title'}).html(post['title']);
						link;
						title = $('<h3/>').append(link).append($('<span/>', {'class':'speech speech_15'}))
					}
					if (single) {
						$(container).prev('h2').find('.title').text(post.title);
					}

					var wrap = $('<div/>', {'class':(single ? '' : 'postoutline')});
					wrap.append(date).append(post.content);
					// desc = $(post.content);
					var content = entry.append(title).append(wrap);

					var comment_link = '', tags = '';
					if (!single) {
						comment_link = $('<a/>', {href: post['url']+'#disqus_thread'}).text('0 Comments');
					} else {
            document.title = String(document.title) + " :  " + post['title'] ;
          }
					if (post.tags) {
						tags = [];
						for (var j = 0, jj = post.tags.length; j < jj; j++) {
							tags.push('<a href="/blog/tag/'+post.tags[j]+'"><em>'+post.tags[j]+'</em></a>');
						}
						tags = (single ? '' : '&nbsp;&nbsp;|&nbsp;&nbsp;')+'Tags: ' + tags.join(', ');
					}
					entry.append($('<div/>', {'class':(single ? '' : '')}).append($('<p/>', {'class':'meta'}).append(comment_link).append(tags)));
					return content;
				}
			};
			container.find('.waiting').remove();
			if (tumblr_kicker) window.clearTimeout(tumblr_kicker);
			for (var i = 0, ii = posts.length; i < ii; i++) {
				var p = posts[i];
				var post = translate[p.type](p);
				container.append(styles[style]());
			}
			var total_posts = tumblr['posts-total'];
			if (!single && style === 'full') {
				if (posts.length < total_posts) {
					var paging = $('<div/>', {'class':'tumblr-paging'});
					var num_pages = Math.ceil(total_posts / per_page),
					current_page = tumblr['posts-start'] / per_page, next_page = current_page + 1;
					var click = function(page) {
						return function() {
							tumblr_load_function(page);
						};
					};
					if (current_page > 0) {
						paging.append($('<a/>', {'href': '#page/'+(current_page), 'class':'prev'}).text('< Prev').click(click(current_page-1)));
					}
					for (var i = 0; i < num_pages; i++) {
						paging.append($('<a/>', {'href': '#page/'+(i+1), 'class': (current_page === i ? 'current' : '')}).text(i+1).click(click(i)));
					}
					if (next_page < num_pages) {
						paging.append($('<a/>', {'href': '#page/'+(next_page+1), 'class': 'next'}).text('Next >').click(click(next_page)));
					}
					container.append(paging);
				}
			}
			if (typeof disqus_comments === 'function') {
				disqus_comments();
			}
		},
		twitter_stream: function(tweets, container_id, is_search) {
			var wwwregular = /\bwww\.\w+(\.\w+)+/ig,
			regular = /\b((https?|s?ftp|ssh)\:\/\/[^ "'><]+)/g,
			atregular = /\B@([_a-z0-9]+)/ig,
			hashregular = /\B#([_a-z0-9]+)/ig,
			container = $('#'+container_id);
			container.find('.waiting').remove();
			var convert_time = function(twitter_time) {
        if (twitter_time.match(/^\w+,/)) {
          return twitter_time;
        }
        // why twitter returns dates in two formats i'll never know
        // and why the second format is so weird either
        var p = twitter_time.split(/ /);
        return [ (p[0] + ", " + p[2]), p[1], p[5], p[3], p[4] ].join(" ");
			}
			for (var i = 0, ii = tweets.length; i < ii; i++) {
				var tweet = tweets[i], t = "", username = (tweet.user ? tweet.user.screen_name : tweet.from_user);
				t = (tweet.text).replace(wwwregular, 'http://$&');
				t = t.replace(regular, '<a href="$1">$1</a>');
				t = t.replace(atregular, '<a class="at" href="http://twitter.com/$1">@$1</a>');
				t = t.replace(hashregular, '<a class="hash" href="http://twitter.com/search?q=%23$1">#$1</a>');

				t = (is_search ? '<a href="http://twitter.com/'+tweet.from_user+'" class="from_user">'+tweet.from_user+'</a>: ' : '' ) + t;
				// 
				container.append($('<li/>').append($('<p/>', {'class': ''}).append($('<span/>').html(t)).append(' ').append($('<a/>', {'class':'tweet', href:'http://twitter.com/'+username+'/statuses/'+tweet.id}).html(this.relative_time(convert_time(tweet.created_at)))).append($('<span/>', {'class':'speech speech_8'}))));
			}
		},
		relative_time: function(time_value) {
			var parsed_date = Date.parse(time_value);
			var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
			var delta = parseInt((relative_to - parsed_date) / 1000),
			_60=60, _3600=3600;
			delta = delta ;
			// return time_value;

			if (delta < _60) {
				return 'less than a minute ago';
			} else if(delta < 120) {
				return 'about a minute ago';
			} else if(delta < (_3600)) {
				return (parseInt(delta / _60)).toString() + ' minutes ago';
			} else if(delta < (120*_60)) {
				return 'about an hour ago';
			} else if(delta < (24*_3600)) {
				return 'about ' + (parseInt(delta / _3600)).toString() + ' hours ago';
			} else if(delta < (48*_3600)) {
				return '1 day ago';
			} else {
				return (parseInt(delta / 86400)).toString() + ' days ago';
			}
		}
	};
})(jQuery);
