﻿/// <reference path="jquery-vsdoc.js" />
//  bgTwitter.js version 6 | requires jquery.js 1.6.2+ | made by Kyle Weems of Mindfly Web Studio (http://mindfly.com/)
// Created Aug 31, 2010 | Last Modified : Jul 18, 2011

if (!bg) var bg = {};
if (!BrainGnat) var BrainGnat = bg;

bg.Twitter = {
    version: "bg.Twitter Extension - v6 (requires jQuery 1.6.2+)",
    user: new Array(),
    location: new Array(),
    username: new Array(),
    features: new Array(),
    getUser: function(username, count, callback) {
        if (!count) count = 1;
        var script = 'http://api.twitter.com/statuses/user_timeline.json?&screen_name=' + username + '&count=' + count + '&callback=?';
        $.getJSON(script, function(data) {
            bg.Twitter.user.push(data);
            callback(data);
        });
    },
    simpleBadge: function(username, location) {
        bg.Twitter.location.push(location);
        bg.Twitter.username.push(username.toLowerCase());
        bg.Twitter.features.push('tweet');
        bg.Twitter.getUser(username, 1, function(data) {
            for (i = 0; i < bg.Twitter.username.length; i++) {
                if (data[0].user.screen_name.toLowerCase() == bg.Twitter.username[i]) {
                    var update = bg.Twitter.replaceURLWithHTMLLinks(data[0].text);
                    $(bg.Twitter.location[i]).append('<p class="tweet">' + update + '</p>');
                }
            }
        });
    },
    badge: function(username, location) {
        if (!location) {
            if ($('#twitter').length > 0) {
                location = '#twitter';
            } else if ($('.twitter').length > 0) {
                location = '.twitter';
            }
        }
        bg.Twitter.simpleBadge(username, location);
    },
    buildABadge: function(username, location, features, count) {
        // tweet, joined, description, followers, friends, location, name, avatar, screen-name, url, timezone, tweet-time, tweet-source, tweet-time-and-source in-reply-to
        if (!features) features = "tweet";
        if (!count) count = 1;
        features = features.split(" ");
        bg.Twitter.location.push(location);
        bg.Twitter.username.push(username.toLowerCase());
        bg.Twitter.features.push(features);
        bg.Twitter.getUser(username, count, function(data) {
            for (i = 0; i < bg.Twitter.username.length; i++) {
                if (data[0].user.screen_name.toLowerCase() == bg.Twitter.username[i]) {
                    var features = bg.Twitter.features[i];
                    for (k = 0; k < data.length; k++) {
                        for (j = 0; j < features.length; j++) {
                            var text = ""
                            switch (features[j]) {
                                case "tweet":
                                    text = '<p class="tweet">' + bg.Twitter.replaceURLWithHTMLLinks(data[k].text) + '</p>';
                                    break;
                                case "tweet-and-screen-name":
                                    text = '<p class="tweet"><a class="screen-name" href="http://twitter.com/' + data[k].user.screen_name + '" target="_blank">@' + data[k].user.screen_name + ':</a> ' + bg.Twitter.replaceURLWithHTMLLinks(data[k].text) + '</p>';
                                    break;
                                case "joined":
                                    text = ' <span class="joined">Joined Twitter on ' + data[k].user.created_at + '</span> ';
                                    break;
                                case "description":
                                    text = '<p class="description">' + data[k].user.description + '</p>';
                                    break;
                                case "followers":
                                    text = ' <span class="followers">followers: ' + data[k].user.followers_count + '</span> ';
                                    break;
                                case "friends":
                                    text = ' <span class="friends">friends: ' + data[k].user.friends_count + '</span> ';
                                    break;
                                case "location":
                                    text = ' <span class="location">location: ' + data[k].user.location + '</span> ';
                                    break;
                                case "name":
                                    text = ' <span class="name">name: ' + data[k].user.name + '</span> ';
                                    break;
                                case "avatar":
                                    text = ' <img class="avatar" src="' + data[k].user.profile_image_url + '" alt="twitter avatar" /> ';
                                    break;
                                case "screen-name":
                                    text = ' <a class="screen-name" href="http://twitter.com/' + data[k].user.screen_name + '" target="_blank">' + data[k].user.screen_name + '</a> ';
                                    break;
                                case "url":
                                    text = ' <a class="url" href="' + data[k].user.url + '" target="_blank">' + data[k].user.url + '</a> '
                                    break;
                                case "timezone":
                                    text = ' <span class="timezone">time zone: ' + data[k].user.time_zone + '</span> ';
                                    break;
                                case "tweet-time":
                                    text = '<a class="tweet-time" href="http://twitter.com/' + data[k].user.screen_name + '/status/' + data[k].status.id_str + '" target="_blank">' + bg.Twitter.relTime(data[k].status.created_at) + '</a>';
                                    break;
                                case "tweet-source":
                                    text = ' <span class="source">via ' + data[k].source + '</span> ';
                                    break;
                                case "tweet-time-and-source":
                                    text = '<span class="time-and-source"><a class="tweet-time" href="http://twitter.com/' + data[k].user.screen_name + '/status/' + data[k].id_str + '" target="_blank">' + bg.Twitter.relTime(data[k].created_at) + '</a> <span class="source">via ' + data[k].source + '</span></span>';
                                    break;
                                case "in-reply-to":
                                    if (data[k].in_reply_to_screen_name != null) {
                                        text = ' <a class="in-reply" href="http://twitter.com/' + data[k].in_reply_to_screen_name + '/status/' + data[k].in_reply_to_status_id_str + '" target="_blank">in reply to ' + data[k].in_reply_to_screen_name + '</a> ';
                                    }
                                    break;
                                default:
                                    break;
                            }
                            $(bg.Twitter.location[i]).append(text);
                        }
                    }
                }
            }
        });
    },
    replaceURLWithHTMLLinks: function(text) {
        var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/i;
        return text.replace(exp, "<a href='$1'>$1</a>");
    },
    relTime: function(time_value) {
        time_value = time_value.replace(/(\+[0-9]{4}\s)/ig, "");
        var parsed_date = Date.parse(time_value);
        var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
        var t = new Date();
        var timeago = parseInt(((relative_to.getTime() + (t.getTimezoneOffset() * 60000)) - parsed_date) / 1000);
        if (timeago < 60) return 'less than a minute ago';
        else if (timeago < 120) return 'about a minute ago';
        else if (timeago < (45 * 60)) return (parseInt(timeago / 60)).toString() + ' minutes ago';
        else if (timeago < (90 * 60)) return 'about an hour ago';
        else if (timeago < (24 * 60 * 60)) return 'about ' + (parseInt(timeago / 3600)).toString() + ' hours ago';
        else if (timeago < (48 * 60 * 60)) return '1 day ago';
        else return (parseInt(timeago / 86400)).toString() + ' days ago';
    }
}

