/*
 * Easy Retweet Button
 * http://ejohn.org/blog/retweet/
 *   by John Resig (ejohn.org)
 *
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 */

(function () {

    window.RetweetJS = {
        // Your Bit.ly Username
        bitly_user: "retweetjs",

        // Your Bit.ly API Key
        // Found here: http://bit.ly/account
        bitly_key: "R_6287c92ecaf9efc6f39e4f33bdbf80b1",

        // The text to replace the links with
        link_text: "&nbsp;Retweet",

        // What # to show (Use "clicks" for # of clicks or "none" for nothing)
        count_type: "clicks",

        // Tweet Prefix text
        // "RT @jeresig " would result in: "RT @jeresig Link Title http://bit.ly/asdf"
        prefix: "",

        // Style information
        styling: "a.retweet { font: 12px Helvetica,Arial; color: #000; text-decoration: none; border: 0px; }" +
		"a.retweet span { color: #FFF; background: #94CC3D; margin-left: 2px; border: 1px solid #43A52A; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; padding: 3px; }" +
		"a.vert { display: block; text-align: center; font-size: 16px; float: left; margin: 4px; }" +
		"a.retweet strong.vert { display: block; margin-bottom: 4px; background: #F5F5F5; border: 1px solid #EEE; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; padding: 3px; }" +
		"a.retweet span.vert { display: block; font-size: 12px; margin-left: 0px; }"
    };

    //////////////// No Need to Configure Below Here ////////////////

    var loadCount = 1;

    // Asynchronously load the Bit.ly JavaScript API
    // If it hasn't been loaded already
    if (typeof BitlyClient === "undefined") {
        var head = document.getElementsByTagName("head")[0] ||
		document.documentElement;
        var script = document.createElement("script");
        script.src = "http://bit.ly/javascript-api.js?version=latest&login=" +
		RetweetJS.bitly_user + "&apiKey=" + RetweetJS.bitly_key;
        script.charSet = "utf-8";
        head.appendChild(script);

        var check = setInterval(function () {
            if (typeof BitlyCB !== "undefined") {
                clearInterval(check);
                head.removeChild(script);
                loaded();
            }
        }, 10);

        loadCount = 0;
    }

    if (document.addEventListener) {
        document.addEventListener("DOMContentLoaded", loaded, false);

    } else if (window.attachEvent) {
        window.attachEvent("onload", loaded);
    }

    // Added by eFORUM to support ASP.NET Update Panel
    $(document).ready(function () {
        try {
            var prm = Sys.WebForms.PageRequestManager.getInstance();
            prm.add_endRequest(function () {
                loaded()
            });
        } catch (e) { }
    });

    function loaded() {
        // Need to wait for doc ready and js ready
        if (++loadCount < 2) {
            return;
        }

        var elems = [], urlElem = {}, hashURL = {};

        BitlyCB.shortenResponse = function (data) {
            for (var url in data.results) {
                var hash = data.results[url].userHash;
                hashURL[hash] = url;

                var elems = urlElem[url];

                for (var i = 0; i < elems.length; i++) {
                    elems[i].href += hash;
                }

                if (RetweetJS.count_type === "clicks") {
                    BitlyClient.stats(hash, 'BitlyCB.statsResponse');
                }
            }
        };

        BitlyCB.statsResponse = function (data) {
            var clicks = data.results.clicks, hash = data.results.userHash;
            var url = hashURL[hash], elems = urlElem[url];

            if (clicks > 0) {
                for (var i = 0; i < elems.length; i++) {
                    var strong = document.createElement("strong");
                    strong.appendChild(document.createTextNode(clicks + " "));
                    elems[i].insertBefore(strong, elems[i].firstChild);

                    if (/(^|\s)vert(\s|$)/.test(elems[i].className)) {
                        elems[i].firstChild.className = elems[i].lastChild.className = "vert";
                    }
                }
            }

            hashURL[hash] = urlElem[url] = null;
        };

        if (document.getElementsByClassName) {
            elems = document.getElementsByClassName("retweet");
        } else {
            var tmp = document.getElementsByTagName("a");
            for (var i = 0; i < tmp.length; i++) {
                if (/(^|\s)retweet(\s|$)/.test(tmp[i].className)) {
                    elems.push(tmp[i]);
                }
            }
        }

        if (elems.length && RetweetJS.styling) {
            var style = document.createElement("style");

            style.type = "text/css";

            try {
                style.appendChild(document.createTextNode(RetweetJS.styling));
            } catch (e) {
                if (style.styleSheet) {
                    style.styleSheet.cssText = RetweetJS.styling;
                }
            }
            var head = document.getElementsByTagName("head")[0];
            if (head == null) {
                document.body.appendChild(style);
            } else {
                head.appendChild(style);
            }
        }

        for (var i = 0; i < elems.length; i++) {
            var elem = elems[i];

            if (/(^|\s)self(\s|$)/.test(elem.className)) {
                elem.href = window.location;
                elem.title = document.title;
            }

            var origText = elem.title || elem.textContent || elem.innerText,
			href = elem.href;

            elem.innerHTML = "<span>" + RetweetJS.link_text + "</span>";
            elem.title = "";
            elem.href = "http://twitter.com/home?status=" +
			encodeURIComponent(RetweetJS.prefix + origText + " http://bit.ly/");

            if (urlElem[href]) {
                urlElem[href].push(elem);
            } else {
                urlElem[href] = [elem];
                BitlyClient.shorten(href, 'BitlyCB.shortenResponse');
            }
        }

    }

})();

