/* 	Twitter Friends v1.0
	Blog : http://www.moretechtips.net
	Project: http://code.google.com/p/twitter-friends-widget/
	Date: 2011-06-09
	Copyright 2009 [Mike @ moretechtips.net] 
	Licensed under the Apache License, Version 2.0 
	(the "License"); you may not use this file except in compliance with the License. 
	You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
*/
(function (d) {
    d.fn.twitterFriends = function (o) {
        var s = {
            debug: 0,
            username: "",
            friends: 0,
            users: 20,
            users_max: 100,
            loop: 0,
            user_link: 0,
            user_image: 48,
            user_animate: "opacity",
            user_change: 200,
            user_swap: 5E3,
            user_append: 1,
            header: "",
            tweet: 0,
            tweet_avatar: 1,
            tweet_author: 0,
            tweet_date: 1,
            tweet_source: 1,
            tweet_image: 48,
            tweet_stay: 5E3,
            tweet_change: 200,
            tweet_animate: "opacity",
			nameplace: 20,
            info: ''
        };
        o = d.extend({}, s, o);
        return this.each(function () {
            var t = 0,
                f = [],
                i = -1,
                k = -1,
                l = -1,
                g = d(this),
                j = null,
                m = null,
                p = null,
                b = o;
            if (g.attr("options")) {
                try {
                    b = eval("(" + g.attr("options") + ")")
                } catch (B) {
                    g.html('<b style="color:red">' + B + "</b>");
                    return
                }
                b = d.extend({}, s, b)
            }
            var q = function () {
                    if ((i + 1) * b.users >= f.length) if (b.loop) i = -1;
                    else return;
                    j.html("");
                    i++;
                    for (var a = i * b.users; a < (i + 1) * b.users; a++) {
                        if (a >= f.length) break;
                        var c = f[a],
                            e = b.user_link && c.url ? c.url : "http://twitter.com/" + c.screen_name,
                            h = c.name + (c.status && b.tweet ? ": " + c.status.text : "");
                        h = h.replace(/"/g, "&quot;").replace(/'/g, "&#39;");
                        d('<a target="_blank" style="display:none;height:80px" href="' + e + '" title="' + h + '"><img src="' + c.profile_image_url + '" border="0" height="' + b.user_image + '" width="' + b.user_image + '"/><div class="name">' + c.screen_name + '</div></a>').appendTo(j)
                    }
                    k = b.user_append ? -1 : d("a", j).length;
                    u();
                    l = -1;
                    b.tweet && v()
                },
                u = function () {
                    k = b.user_append ? k + 1 : k - 1;
                    var a = d("a:eq(" + k + ")", j);
                    if (a.length) {
                        var c = {};
                        c[b.user_animate] = "show";
                        a.animate(c, b.user_change, "linear", u)
                    } else b.tweet || j.animate({
                        opacity: 1
                    }, b.user_swap, "linear", q)
                },
                v = function () {
                    l > -1 ? d("div", m).fadeOut(b.tweet_change, w) : w()
                },
                w = function () {
                    for (var a = null, c = null; !c;) {
                        l++;
                        if (l >= d("a", j).length) {
                            q();
                            return
                        }
                        a = f[i * b.users + l];
                        c = a.status
                    }
                    a = a;
                    c = c;
                    var e = b.user_link && a.url ? a.url : "http://twitter.com/" + a.screen_name,
                        h = a.name;
                    m.html('<div style="display:none;">' + (b.tweet_avatar ? '<span class="tf-avatar"><a href="' + e + '" title="' + h + '"><img src="' + a.profile_image_url + '" height="' + b.tweet_image + '" width="' + b.tweet_image + '" border="0"/></a></span>' : "") + '<span class="tf-body">' + (b.tweet_author ? '<strong><a href="' + e + '" title="' + h + '">' + a.screen_name + "</a></strong>" : "") + '<span class="tf-content">' + C(c.text) + '</span><span class="tf-meta">' + (b.tweet_date ? '<a class="tf-date" href="http://twitter.com/' + a.screen_name + "/status/" + c.id + '">' + D(c.created_at) + "</a>" : "") + (b.tweet_source ? '<span class="tf-source"> from ' + c.source.replace(/&lt;/gi, "<").replace(/&gt;/gi, ">").replace(/&quot;/gi, '"') + "</span>" : "") + "</span></span></div>");
                    a = {};
                    a[b.tweet_animate] = "show";
                    d("div", m).animate(a, b.tweet_change, "linear", E)
                },
                E = function () {
                    d("div", m).animate({
                        opacity: 1
                    }, b.tweet_stay, "linear", v)
                },
                C = function (a) {
                    return a.replace(/\bhttps?\:\/\/\S+/gi, function (c) {
                        var e = "";
                        c = c.replace(/(\.*|\?*|\!*)$/, function (h, r) {
                            e = r;
                            return ""
                        });
                        return '<a class="tf-link" href="' + c + '">' + (c.length > 25 ? c.substr(0, 24) + "..." : c) + "</a>" + e
                    }).replace(/\B\@([A-Z0-9_]{1,15})/gi, '@<a class="tf-at" href="http://twitter.com/$1">$1</a>').replace(/\B\#([A-Z0-9_]+)/gi, '<a class="tf-hashtag" href="http://search.twitter.com/search?q=%23$1">#$1</a>')
                },
                D = function (a) {
                    if (/^(\w\w\w) (\w\w\w) (\d\d?) (\d\d?:\d\d?:\d\d?) ([\+\-]\d+) (\d\d\d\d)$/i.test(a)) a = a.replace(/^(\w\w\w) (\w\w\w) (\d\d?) (\d\d?:\d\d?:\d\d?) ([\+\-]\d+) (\d\d\d\d)$/i, "$1, $3 $2 $6 $4 $5");
                    var c = new Date,
                        e = new Date;
                    c.setTime(Date.parse(a));
                    var h = e.getDate(),
                        r = e.getMonth() + 1,
                        F = e.getFullYear(),
                        G = e.getHours(),
                        n = e.getMinutes();
                    e = e.getSeconds();
                    var x = c.getDate(),
                        y = c.getMonth() + 1,
                        z = c.getFullYear(),
                        H = c.getHours(),
                        I = c.getMinutes();
                    a = c.getSeconds();
                    if (z == F && y == r && x == h) {
                        c = G - H;
                        if (c > 0) return c + " hour" + (c > 1 ? "s" : "") + " ago";
                        n = n - I;
                        if (n > 0) return n + " minute" + (n > 1 ? "s" : "") + " ago";
                        a = e - a;
                        return a + " second" + (a > 1 ? "s" : "") + " ago"
                    } else return y + "/" + x + "/" + z
                },
                J = function (a) {
                    A();
                    if (a.screen_name) p.html(b.header.replace(/_tp_/g, "http://twitter.com/" + a.screen_name).replace(/_fr_/g, a.friends_count).replace(/_fo_/g, a.followers_count).replace(/_ti_/g, a.profile_image_url));
                    else if (b.debug) p.html('<b style="color:red">Error:' + (a.error ? a.error : "unkown") + "</b>")
                },
                A = function () {
                    if (!t) {
                        t = 1;
                        g.html("");
                        b.info && g.append(b.info);
                        if (b.header) p = d('<div class="tf-header"></div>').appendTo(g);
                        j = d('<div class="tf-users"></div>').appendTo(g);
                        if (b.tweet) m = d('<div class="tf-tweet"></div>').appendTo(g)
                    }
                };
            b.header && d.ajax({
                url: "http://api.twitter.com/1/users/show.json",
                data: {
                    screen_name: b.username
                },
                success: J,
                dataType: "jsonp",
                cache: true
            });
            d.ajax({
                url: b.friends ? "http://api.twitter.com/1/statuses/friends.json" : "http://api.twitter.com/1/statuses/followers.json",
                data: {
                    screen_name: b.username,
                    cursor: -1
                },
                success: function (a) {
                    if (a.users) {
                        f = a.users;
                        if (f.length != 0) {
                            if (f.length > b.users_max) f.length = b.users_max;
                            f = f.reverse();
                            A();
                            i = -1;
                            q()
                        }
                    } else if (b.debug) g.html('<b style="color:red">Error:' + (a.error ? a.error : "unkown") + "</b>")
                },
                dataType: "jsonp",
                cache: true
            })
        })
    }
})(jQuery);
jQuery(document).ready(function () {
    jQuery("div.twitter-friends").twitterFriends()
});
