jQuery.noConflict();

(function($) {
    function parseIsoDate(v) {
        return new Date(v.replace(/-/g,"/").replace(/[TZ]/g," "));
    };
    function prettyDate(date){
        /* Taken from http://ejohn.org/files/pretty.js */
        var diff = (((new Date()).getTime() - date.getTime()) / 1000), day_diff = Math.floor(diff / 86400);

        if (isNaN(day_diff) || day_diff < 0 || day_diff >= 31)
            return;

        return day_diff == 0 && (
                diff < 60 && "just now" ||
                diff < 120 && "1 minute ago" ||
                diff < 3600 && Math.floor( diff / 60 ) + " minutes ago" ||
                diff < 7200 && "1 hour ago" ||
                diff < 86400 && Math.floor( diff / 3600 ) + " hours ago") ||
            day_diff == 1 && "Yesterday" ||
            day_diff < 7 && day_diff + " days ago" ||
            day_diff < 31 && Math.ceil( day_diff / 7 ) + " weeks ago";
    };

    $.extend($.template.helpers, {
        html: function(v, preserveBr, truncate) {
        	if (truncate) {
        		v = v.substring(0, truncate) + "...";
        	}
            if (preserveBr) {
                var html = [];
                var lines = v.split('\n');
                for (var i = 0; i<lines.length; i++) {
                    html.push($.template.helpers.html(lines[i]));
                    html.push('<br>');
                }
                return html.slice(0, html.length-1).join('');
            } else {
                return $('<div/>').text(v).html();
            }
        },
        date: function(d) {
            return prettyDate(d) || [d.getDate(), d.getMonth(), d.getFullYear()].join('/');
        }
    });

    var pressTpl = $.template([
        '<li>',
            '<h5><a href="{href:html}">{title:html}</a> <span class="date">{added:date}</span></h5>',
			'<div class="buzz-img"><img src="{thumbnailLink:html}" alt="{title:html}"></div>',
            '<div class="buzz-info">',
                '<p>{abstract:html(true,190)}<span class="learn-more"> <a href="{href:html}">Learn more</a></span></p>',
            '</div>',
        '</li>'
    ].join(''), {compile: true, regx: 'ext'});

    var blogTpl = $.template([
        '<li>',
            '<h5><a href="{permalink:html}">{title:html}</a> <span class="date">{date}</span></h5>',
            '<p>{excerpt}</p>',
            '<p class="learn-more"><a href="{permalink:html}">Learn more</a></p>',
        '</li>'
    ].join(''), {compile: true, regx: 'ext'});
    
    var twitterTpl = $.template('<p><a class="twitter-user" href="http://twitter.com/{screen_name:html}">{screen_name:html}</a> {text:html(false,100)}</p>', {compile: true, regx: 'ext'});

    var merge = function(tiles, limit) {
        var found = {};
        var sorted = [];
        $.each(tiles, function() {
            $.each(this, function() {
                this.added = parseIsoDate(this.added);
                if (!found[this.href]) {
                    sorted.push(this);
                    found[this.href] = true;
                }
            });
        });
        sorted.sort(function(t1, t2) {
            return t2.added - t1.added
        });
        return sorted.slice(0, limit);
    };

    $.fn.extend({
        press: function(limit) {
            var el = this;
            $.ajax({
                url: 'https://whatevr.knowledgeplaza.net/plugin/water_closet/mentions',
                cache: true,
                dataType: 'jsonp',
                success: function(response) {
                    var html = [];
                    var tiles = response.tiles;
                    jQuery.each(merge([tiles['type:kp mention'], tiles['type:mp mention']], limit), function() {
                        html.push(pressTpl.apply(this));
                    });
                    el.html(html.join('')).show().prev('.loading').hide();
                }
            });
        },
        blog: function(limit) {
            var el = this;
            $.ajax({
                url: 'http://blog.knowledgeplaza.net/index.php/feed/?feed=json&jsonp=?',
                cache: true,
                dataType: 'jsonp',
                success: function(response) {
                    var html = [];
                    jQuery.each(response.slice(0, limit), function() {
                        //this.added = parseIsoDate(this.added);
                        html.push(blogTpl.apply(this));
                    });
                    el.html(html.join('')).show().prev('.loading').hide();
                }
            });
        },
        twitter: function(name, limit) {
        	var el = this;
        	$.getJSON("http://twitter.com/status/user_timeline/" + name + ".json?count="+limit+"&callback=?",
        		function(response) {
        			var html = [];
        			jQuery.each(response, function() {
        				this.screen_name = this.user.screen_name;
        				this.text = $('<textarea/>').html(this.text).val();
        				html.push(twitterTpl.apply(this));
        			});
        			el.html(html.join('')).show().prev('.loading').hide();
        		});
        }
    });
}(jQuery));

