﻿(function ($) {

    $.fn.tweet = function (o) {
        var s = {
            avatar_size: 48,                      // [integer]  height and width of avatar if displayed (48px max)                          
            loading_text: null,
            username:"USPM"                   // [string]   optional loading text, displayed while tweets load                       
        };

        if (o) $.extend(s, o);
        
        $.fn.extend({
        linkUrl: function () {
        var returning = [];
        var regexp = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
        this.each(function () {
        returning.push(this.replace(regexp, "<a href=\"$1\">$1</a>"))
        });
        return $(returning);
        },
        linkUser: function () {
        var returning = [];
        var regexp = /[\@]+([A-Za-z0-9-_]+)/gi;
        this.each(function () {
        returning.push(this.replace(regexp, "<a href=\"http://twitter.com/$1\">@$1</a>"))
        });
        return $(returning);
        },
        linkHash: function () {
        var returning = [];
        var regexp = / [\#]+([A-Za-z0-9-_]+)/gi;
        this.each(function () {
        returning.push(this.replace(regexp, ' <a href="http://search.twitter.com/search?q=&tag=$1&lang=all&from=' + s.username.join("%2BOR%2B") + '">#$1</a>'))
        });
        return $(returning);
        },
        capAwesome: function () {
        var returning = [];
        this.each(function () {
        returning.push(this.replace(/(a|A)wesome/gi, 'AWESOME'))
        });
        return $(returning);
        },
        capEpic: function () {
        var returning = [];
        this.each(function () {
        returning.push(this.replace(/(e|E)pic/gi, 'EPIC'))
        });
        return $(returning);
        },
        makeHeart: function () {
        var returning = [];
        this.each(function () {
        returning.push(this.replace(/(&lt;)+[3]/gi, "<tt class='heart'>&#x2665;</tt>"))
        });
        return $(returning);
        }
        });
        
        function parseDate(str) {
            var v = str.split(' ');
            return new Date(Date.parse(v[1] + " " + v[2] + ", " + v[5] + " " + v[3] + " UTC"));
        }

        function relative_time(time_value) {
            var parsed_date = Date.parse(parseDate(time_value));
            var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
            var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
            if (delta < 60) {
                return 'less than a minute ago';
            } else if (delta < 120) {
                return 'about a minute ago';
            } else if (delta < (45 * 60)) {
                return (parseInt(delta / 60)).toString() + ' minutes ago';
            } else if (delta < (90 * 60)) {
                return 'about an hour ago';
            } else if (delta < (24 * 60 * 60)) {
                return 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
            } else if (delta < (48 * 60 * 60)) {
                return '1 day ago';
            } else {
                return (parseInt(delta / 86400)).toString() + ' days ago';
            }
        }

        return this.each(function () {
            var list = $('<div class="tweet-list">').appendTo(this);
            var loading = $('<p class="loading">' + s.loading_text + '</p>');
            if (typeof (s.username) == "string") {
                s.username = [s.username];
            }
            //var query = '';
            //if (s.query) {
            //    query += 'q=' + s.query;
            //}
            //query += '&q=from:' + s.username.join('%20OR%20from:');

            //var tweeturl = "http://twitter.com/status/user_timeline/" + s.username + ".json?count=" + s.count + "&callback=?";
            //alert('start');
            var tweeturl = "/services/TweetLibService.svc/TweetsGetJson";
            $.getJSON(tweeturl, function (data) {
                
                var counter = 0;
                $.each(data, function (i, item) {
                    var baseIntentTwitterURL = 'http://twitter.com/intent/';
                    var baseTwitterURL = 'http://twitter.com/' + s.username;
                    var twitterStatusURL = 'http://twitter.com/' + s.username + '/statuses/';
                    //alert([item]);
                    var user_link = '<a href="' + baseTwitterURL + '" title="' + [item.user.screen_name] + '" target="_blank">' + [item.user.screen_name] + '</a>';
                    var avatar_template = '<a class="tweet_avatar" href="' + baseTwitterURL + '" target="_blank"><img src="' + [item.user.profile_image_url] + '" height="' + s.avatar_size + '" width="' + s.avatar_size + '" alt="' + [item.user.screen_name] + '\'s avatar" title="' + [item.user.screen_name] + '\'s avatar" border="0"/></a>';
                    var avatar = (s.avatar_size ? avatar_template : '')
                    var date = '<a href="' + baseTwitterURL + '" title="view tweet on twitter" target="_blank">' + relative_time(item.created_at) + '</a>';
                    var text = ' <span class="tweet_text">' + $([item.text]).linkUrl().linkUser().linkHash().makeHeart().capAwesome().capEpic()[0] + '</span>';
                    //var text = ' <span class="tweet_text">' + [item.text] + '</span>';
                    var reply = '<a href="' + baseIntentTwitterURL + 'tweet?in_reply_to=' + [item.id_str] + '" title="reply" target="_blank">' + 'reply' + '</a>';
                    var retweet = '<a href="' + baseIntentTwitterURL + 'retweet?tweet_id=' + [item.id_str] + '" title="retweet" target="_blank">' + 'retweet' + '</a>';
                    var favorite = '<a href="' + baseIntentTwitterURL + 'favorite?tweet_id=' + [item.id_str] + '" title="favorite" target="_blank">' + 'favorite' + '</a>';
                    list.append('<div id="Tweet' + counter + '" class="tweet-each"><div class="tweet-avatar" style="">' + avatar_template + '</div><div class="tweet-text"  style="">' + user_link + text + '</div><div class="tweet-links" style="">' + date + '&nbsp;' + reply + '&nbsp;' + retweet + '&nbsp;' + favorite + '</div></div>');
                    
                    counter++;
                });

            });

        });
    };
})(jQuery);
