﻿/// <reference path="jquery-vsdoc.js" />
//  bgTools 1.0 | bgTwitter.js version 4 | requires jquery.js 1.3.2+ | made by Kyle Weems of Mindfly Web Studio (http://mindfly.com/)
// Created Aug 31, 2010 | Last Modified : Mar 24, 2011
if (!bg) {
    var bg = {};
    var BrainGnat = bg;
}
bg.Twitter = {
    version: "bgTools 1.0 | bg.Twitter Extension - version 4 (requires jQuery 1.3.2+)",
	user: new Array(),
    location: new Array(),
	username: new Array(),
	features: new Array(),
    getUser: function(username, callback) {
        var script = 'http://twitter.com/users/' + username + '.json?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);
		bg.Twitter.features.push('tweet');
        bg.Twitter.getUser(username, function(data) {
            for (i = 0; i < bg.Twitter.username.length; i++) {
                if (data.screen_name == bg.Twitter.username[i]) {
                    var update = bg.Twitter.replaceURLWithHTMLLinks(data.status.text);
                    $(bg.Twitter.location[i]).append('<p class="tweet">' + update + '</p>');
                }
            }
        });
    },
	buildABadge: function(username, location, features){
		// 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";
		features = features.split(" ");
		bg.Twitter.location.push(location);
		bg.Twitter.username.push(username);
		bg.Twitter.features.push(features);
        bg.Twitter.getUser(username, function(data) {
            for (i = 0; i < bg.Twitter.username.length; i++) {
                if (data.screen_name == bg.Twitter.username[i]) {
					var features = bg.Twitter.features[i];
					for(j=0;j<features.length;j++){
						var text = ""
						switch(features[j]){
							case "tweet":
								text = '<p class="tweet">' + bg.Twitter.replaceURLWithHTMLLinks(data.status.text) + '</p>';
								break;
							case "joined":
								text = ' <span class="joined">Joined Twitter on ' + data.created_at + '</span> ';
								break;
							case "description":
								text = '<p class="description">' + data.description + '</p>';
								break;
							case "followers":
								text = ' <span class="followers">followers: ' + data.followers_count + '</span> ';
								break;
							case "friends":
								text = ' <span class="friends">friends: ' + data.friends_count + '</span> ';
								break;
							case "location":
								text = ' <span class="location">location: ' + data.location + '</span> ';
								break;
							case "name":
								text = ' <span class="name">name: ' + data.name + '</span> ';
								break;
							case "avatar":
								text = ' <img class="avatar" src="' + data.profile_image_url + '" alt="twitter avatar" /> ';
								break;
							case "screen-name":
								text = ' <a class="screen-name" href="http://twitter.com/' + data.screen_name+'">' + data.screen_name+'</a> ';
								break;
							case "url":
								text = ' <a class="url" href="'+data.url+'">' + data.url + '</a> '
								break;
							case "timezone":
								text = ' <span class="timezone">time zone: ' + data.time_zone + '</span> ';
								break;
							case "tweet-time":
								text = '<a class="tweet-time" href="http://twitter.com/' + data.screen_name + '/status/' + data.status.id_str + '">'+ bg.Twitter.relTime(data.status.created_at) + '</a>';
								break;
							case "tweet-source":
								text = ' <span class="source">via '+data.status.source + '</span> ';
								break;
							case "tweet-time-and-source":
								text = '<span class="time-and-source"><a class="tweet-time" href="http://twitter.com/' + data.screen_name + '/status/' + data.status.id_str + '">'+ bg.Twitter.relTime(data.status.created_at) + '</a> <span class="source">via '+data.status.source + '</span></span>';

								break;
							case "in-reply-to":
								if(data.status.in_reply_to_screen_name!=null){
									text = ' <a class="in-reply" href="http://twitter.com/'+ data.status.in_reply_to_screen_name + '/status/' + data.status.in_reply_to_status_id_str + '" >in reply to '+ data.status.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';
     }
}
