/**
 * This jQuery plugin displays pagination links inside the selected elements.
 * 
 * This plugin needs at least jQuery 1.4.2
 *
 * @author Gabriel Birke (birke *at* d-scribe *dot* de)
 * @version 2.2
 * @param {int} maxentries Number of entries to paginate
 * @param {Object} opts Several options (see README for documentation)
 * @return {Object} jQuery Object
 */
(function(a){a.PaginationCalculator=function(b,c){this.maxentries=b;this.opts=c};a.extend(a.PaginationCalculator.prototype,{numPages:function(){return Math.ceil(this.maxentries/this.opts.items_per_page)},getInterval:function(f){var d=Math.floor(this.opts.num_display_entries/2);var e=this.numPages();var c=e-this.opts.num_display_entries;var g=f>d?Math.max(Math.min(f-d,c),0):0;var b=f>d?Math.min(f+d+(this.opts.num_display_entries%2),e):Math.min(this.opts.num_display_entries,e);return{start:g,end:b}}});a.PaginationRenderers={};a.PaginationRenderers.defaultRenderer=function(b,c){this.maxentries=b;this.opts=c;this.pc=new a.PaginationCalculator(b,c)};a.extend(a.PaginationRenderers.defaultRenderer.prototype,{createLink:function(b,e,d){var f,c=this.pc.numPages();b=b<0?0:(b<c?b:c-1);d=a.extend({text:b+1,classes:""},d||{});if(b==e){f=a("<span class='current'>"+d.text+"</span>")}else{f=a("<a>"+d.text+"</a>").attr("href",this.opts.link_to.replace(/__id__/,b))}if(d.classes){f.addClass(d.classes)}f.data("page_id",b);return f},appendRange:function(c,f,g,b,e){var d;for(d=g;d<b;d++){this.createLink(d,f,e).appendTo(c)}},getLinks:function(h,e){var f,b,c=this.pc.getInterval(h),g=this.pc.numPages(),d=a("<div class='pagination'></div>");if(this.opts.prev_text&&(h>0||this.opts.prev_show_always)){d.append(this.createLink(h-1,h,{text:this.opts.prev_text,classes:"prev"}))}if(c.start>0&&this.opts.num_edge_entries>0){b=Math.min(this.opts.num_edge_entries,c.start);this.appendRange(d,h,0,b,{classes:"sp"});if(this.opts.num_edge_entries<c.start&&this.opts.ellipse_text){jQuery("<span>"+this.opts.ellipse_text+"</span>").appendTo(d)}}this.appendRange(d,h,c.start,c.end);if(c.end<g&&this.opts.num_edge_entries>0){if(g-this.opts.num_edge_entries>c.end&&this.opts.ellipse_text){jQuery("<span>"+this.opts.ellipse_text+"</span>").appendTo(d)}f=Math.max(g-this.opts.num_edge_entries,c.end);this.appendRange(d,h,f,g,{classes:"ep"})}if(this.opts.next_text&&(h<g-1||this.opts.next_show_always)){d.append(this.createLink(h+1,h,{text:this.opts.next_text,classes:"next"}))}a("a",d).click(e);return d}});a.fn.pagination=function(i,b){b=jQuery.extend({items_per_page:10,num_display_entries:11,current_page:0,num_edge_entries:0,link_to:"#",prev_text:"Prev",next_text:"Next",ellipse_text:"...",prev_show_always:true,next_show_always:true,renderer:"defaultRenderer",load_first_page:false,callback:function(){return false}},b||{});var c=this,f,k,e;function d(m){var n,l=a(m.target).data("page_id"),o=g(l);if(!o){m.stopPropagation()}return o}function g(l){c.data("current_page",l);k=f.getLinks(l,d);c.empty();k.appendTo(c);var m=b.callback(l,c);return m}e=b.current_page;c.data("current_page",e);i=(!i||i<0)?1:i;b.items_per_page=(!b.items_per_page||b.items_per_page<0)?1:b.items_per_page;if(!a.PaginationRenderers[b.renderer]){throw new ReferenceError("Pagination renderer '"+b.renderer+"' was not found in jQuery.PaginationRenderers object.")}f=new a.PaginationRenderers[b.renderer](i,b);var h=new a.PaginationCalculator(i,b);var j=h.numPages();c.bind("setPage",{numPages:j},function(m,l){if(l>=0&&l<m.data.numPages){g(l);return false}});c.bind("prevPage",function(l){var m=a(this).data("current_page");if(m>0){g(m-1)}return false});c.bind("nextPage",{numPages:j},function(l){var m=a(this).data("current_page");if(m<l.data.numPages-1){g(m+1)}return false});k=f.getLinks(e,d);c.empty();k.appendTo(c);if(b.load_first_page){b.callback(e,c)}}})(jQuery);

/*
 * timeago: a jQuery plugin, version: 0.9.3 (2011-01-21)
 * @requires jQuery v1.2.3 or later
 *
 * Timeago is a jQuery plugin that makes it easy to support automatically
 * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago").
 *
 * For usage and examples, visit:
 * http://timeago.yarp.com/
 *
 * Licensed under the MIT:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * Copyright (c) 2008-2011, Ryan McGeary (ryanonjavascript -[at]- mcgeary [*dot*] org)
 */
(function(d){d.timeago=function(g){if(g instanceof Date){return a(g)}else{if(typeof g==="string"){return a(d.timeago.parse(g))}else{return a(d.timeago.datetime(g))}}};var f=d.timeago;d.extend(d.timeago,{settings:{refreshMillis:60000,allowFuture:false,strings:{prefixAgo:null,prefixFromNow:null,suffixAgo:"ago",suffixFromNow:"from now",seconds:"less than a minute",minute:"about a minute",minutes:"%d minutes",hour:"about an hour",hours:"about %d hours",day:"a day",days:"%d days",month:"about a month",months:"%d months",year:"about a year",years:"%d years",numbers:[]}},inWords:function(l){var m=this.settings.strings;var i=m.prefixAgo;var q=m.suffixAgo;if(this.settings.allowFuture){if(l<0){i=m.prefixFromNow;q=m.suffixFromNow}l=Math.abs(l)}var o=l/1000;var g=o/60;var n=g/60;var p=n/24;var j=p/365;function h(r,t){var s=d.isFunction(r)?r(t,l):r;var u=(m.numbers&&m.numbers[t])||t;return s.replace(/%d/i,u)}var k=o<45&&h(m.seconds,Math.round(o))||o<90&&h(m.minute,1)||g<45&&h(m.minutes,Math.round(g))||g<90&&h(m.hour,1)||n<24&&h(m.hours,Math.round(n))||n<48&&h(m.day,1)||p<30&&h(m.days,Math.floor(p))||p<60&&h(m.month,1)||p<365&&h(m.months,Math.floor(p/30))||j<2&&h(m.year,1)||h(m.years,Math.floor(j));return d.trim([i,k,q].join(" "))},parse:function(h){var g=d.trim(h);g=g.replace(/\.\d\d\d+/,"");g=g.replace(/-/,"/").replace(/-/,"/");g=g.replace(/T/," ").replace(/Z/," UTC");g=g.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2");return new Date(g)},datetime:function(h){var i=d(h).get(0).tagName.toLowerCase()==="time";var g=i?d(h).attr("datetime"):d(h).attr("title");return f.parse(g)}});d.fn.timeago=function(){var h=this;h.each(c);var g=f.settings;if(g.refreshMillis>0){setInterval(function(){h.each(c)},g.refreshMillis)}return h};function c(){var g=b(this);if(!isNaN(g.datetime)){d(this).text(a(g.datetime))}return this}function b(g){g=d(g);if(!g.data("timeago")){g.data("timeago",{datetime:f.datetime(g)});var h=d.trim(g.text());if(h.length>0){g.attr("title",h)}}return g.data("timeago")}function a(g){return f.inWords(e(g))}function e(g){return(new Date().getTime()-g.getTime())}document.createElement("abbr");document.createElement("time")}(jQuery));


/**
* jQuery tumblr plugin
* This jQuery plugin was inspired by the work of Chris Tran - https://chris-tran.com/blog/?p=236
* @name jquery-tumblr-0.2.js
* @author Alex Hayes - http://alution.com
* @version 0.3
* @date Aug 17, 2011
* @category jQuery plugin
* @copyright (c) 2011 Alex Hayes (alution.com)
* @license Dual licensed under the MIT and GPL licenses.
* @todo Add ability to define hooks for user defined markup.
*/
(function(b){var a={init:function(c){var d={loading:false,pagination:false,perPage:20,start:0,paginationOptions:{},photoSize:400,videoSize:false,timeago:true,shortLength:50,mediumLength:100,fancybox:true,photoThumbSize:75,photoLightboxSize:500,timeout:10000};var e=this;return this.each(function(){var h=b(this),g=h.data("tumblr"),f=b('<ul class="tumblr-posts"/>');if(!g){if(c){b.extend(d,c)}if(d.pagination){d.pagination=b(d.pagination);if(d.pagination.length<1){d.pagination=false}}if(d.loading){d.loading=b(d.loading);if(d.loading.length<1){d.loading=false}}b(this).data("tumblr",{target:h,start:d.start,options:d,posts:f,pagination_setup:false})}h.tumblr("load")})},load:function(e){this.each(function(){var i=b(this),h=i.data("tumblr");if(h.options.loading){h.options.loading.show()}i.slideUp()});var f=this,d=this.data("tumblr"),g={start:e==undefined?d.start*d.options.perPage:e*d.options.perPage,num:d.options.perPage},c=d.options.url+"/api/read/json?"+b.param(g);b.ajax({url:c,dataType:"script",timeout:d.options.timeout,success:function(){f.tumblr("handleAjaxSuccess",tumblr_api_read)},error:function(j,h,i){f.append('<h2>Ooops...</h2><p>It looks like tumblr is having issues - it happens to the best of us. Don\'t worry it should be fixed soon!</p><p style="display: none;">'+i+": "+j.responseText+"</p>")}});return this},handleAjaxSuccess:function(c){return this.each(function(){var g=b(this),f=g.data("tumblr"),e=f.posts,d=0;f.posts.empty();g.empty();if((c==undefined)||(c==null)){g.append('<div class="tumblr-error">Unable to load tumblr - its probably down...</div>');return}b.each(c.posts,function(j,h){g.tumblr("addPost",h,d);d++});if(f.options.timeago&&b("abbr.timeago",f.posts).length>0){b("abbr.timeago",f.posts).timeago()}if(f.options.fancybox&&b("a.lightbox",f.posts).length>0){b("a.lightbox",f.posts).fancybox()}g.html(f.posts);if(f.options.loading){f.options.loading.hide()}g.slideDown();if(f.options.pagination&&!f.pagination_setup){f.pagination_setup=true;b.extend(f.options.paginationOptions,{items_per_page:f.options.perPage,callback:function(i,h){g.tumblr("load",i)}});f.options.pagination.pagination(c["posts-total"],f.options.paginationOptions)}})},addPost:function(l,f){var j=b(this),e=j.data("tumblr"),h=f%2?"even":"odd",g="",m="";switch(l.type){case"regular":var d=j.tumblr("getCssTextLength",l["regular-title"]);g='<div class="title '+d+'">'+l["regular-title"]+"</div>";if(l["regular-body"]){g+='<div class="description">'+l["regular-body"]+"</div>"}break;case"photo":g='<div class="media">';if(l.photos.length>0){g+='<ul class="photos">';b.each(l.photos,function(p,o){var n=p%2?"even":"odd";var q="";if(o["photo-caption"]!=undefined){q=' alt="'+o["photo-caption"]+'"'}g+='<li class="'+n+'"><a href="'+o["photo-url-"+e.options.photoLightboxSize]+'" rel="post-'+l.id+'" class="lightbox"><img src="'+o["photo-url-"+e.options.photoThumbSize]+'"'+q+"></a></li>"});g+="</ul>"}else{if(l["photo-link-url"]){g+='<a href="'+l["photo-link-url"]+'">'}g+='<img alt="'+b(l["photo-caption"]).text()+'" src="'+l["photo-url-"+e.options.photoSize]+'">';if(l["photo-link-url"]){g+="</a>"}}if(l["photo-caption"]){g+='<div class="description">'+l["photo-caption"]+"</div>"}g+="</div>";break;case"link":var d=j.tumblr("getCssTextLength",l["link-text"]);g='<div class="link '+d+'"><a href="'+l["link-url"]+'">'+l["link-text"]+"</a></div>";if(l["link-description"]){g+='<div class="description">'+l["link-description"]+"</div>"}break;case"quote":var d=j.tumblr("getCssTextLength",l["quote-text"]);g='<div class="quote"><div class="quote-text '+d+'">'+l["quote-text"]+'</div><div class="source">&mdash; '+l["quote-source"]+"</div></div>";break;case"conversation":var d=j.tumblr("getCssTextLength",l["conversation-title"]);g='<div class="caption '+d+'">'+l["conversation-title"]+'</div><div class="conversation"><ul>';var c=[];b.each(l.conversation,function(o,p){if(b.inArray(c,p.name)==-1){c.push(p.name)}var n=b.inArray(c,p.name)+1;g+='<li class="odd"><span class="label user-'+n+'">'+p.label+'</span><span class="phrase">'+p.phrase+"</span></li>"});g+="</div>";break;case"audio":g='<div class="media">'+l["audio-player"]+"</div>";if(l["audio-caption"]){g+='<div class="description">'+l["audio-caption"]+"</div>"}break;case"video":var k="video-player";if(e.options.videoSize){k="video-player-"+e.options.videoSize}g='<div class="media">'+l[k]+"</div>";if(l["video-caption"]){g+='<div class="description">'+l["video-caption"]+"</div>"}break;default:break}m='<li class="tumblr-post tumblr-post-'+l.type+" post-id-"+l.id+" "+h+'"><div class="post-body">'+g+'</div><div class="post-footer"><div class="date"><span class="posted">Posted</span> <abbr class="timeago" title="'+l.date+'">'+l.date+'</abbr></div><div class="permalink"><a href="'+l["url-with-slug"]+'" class="permalink" target="_blank"><span class="permalink-icon">&#167;</span> <span class="permalink-text">Permalink</span></a></div>';if(l.tags){m+='<div class="tags"><span class="tagged">Tagged </span> <ul>';b.each(l.tags,function(p,n){var o='<span class="tag-commas">, </span>';var q="";if(p==l.tags.length-1){q="last";o=""}else{if(p==0){q="first"}}m+='<li class="'+q+'"><a href="'+e.options.url+"/tagged/"+n+'" target="_blank">#'+n+"</a>"+o+"</li>"});m+="</ul></div>"}m+="</div></li>";e.posts.append(m)},getCssTextLength:function(f){var e=b(this),d=e.data("tumblr"),h=d.options.shortLength,c=d.options.mediumLength;var g="long";if(f!=null&&f.length<h){g="short"}else{if(f!=null&&f.length<c){g="medium"}}return g},destroy:function(){return this.each(function(){var d=b(this),c=d.data("tumblr");b(window).unbind(".tumblr");c.posts.remove();d.removeData("tumblr")})},};b.fn.tumblr=function(c){if(a[c]){return a[c].apply(this,Array.prototype.slice.call(arguments,1))}else{if(typeof c==="object"||!c){return a.init.apply(this,arguments)}else{b.error("Method "+c+" does not exist on jQuery.tooltip")}}}})(jQuery);

