
function init() {

    // Options:
    var useMetaKeyword = true; // Otherwise, page title
    var minLength = 40; // Min selection chars
    var useMetaAuthor = true; // Otherwise use domain
    var addLinks = true; // Otherwise, just cite at end
    var skip = new Array("home", "link", "click here"); // Don't link these (lowercase!)

    function D(b, a, c) {
        if (b.addEventListener) b.addEventListener(a, c, false);
        else b.attachEvent && b.attachEvent("on" + a, c)
    }
    function o(b, a) {
        if (typeof b == "undefined" || b == null || !RegExp) return false;
        a = new RegExp("(^|\\s)" + a + "(\\s|$)");
        if (typeof b == "string") return a.test(b);
        else if (typeof b == "object" && b.className) return a.test(b.className);
        return false
    }
    function E(b, a) {
        var c = false,
            j;
        for (j = b.parentNode; j != undefined;) {
            if (b.parentNode == e.body) break;
            else if (b.parentNode == a) {
                c = true;
                break
            }
            j = j.parentNode
        }
        return c
    }

    function F(b) {
        return b.replace(/^\s*/, "")
    }
    function G(b) {
        return b.replace(/\s*$/, "")
    }
    function H(b) {
        return G(F(b))
    }
    var I = new Array("home", "link", "click here"),
        e = document,
        x = window,
        t = e.getElementsByTagName("body")[0],
        p = e.getElementsByName("author"),
        i = e.getElementsByName("keywords"),
        q = x.location.toString(),
        u = e.title.toString(),
        d;
    if (!Array.indexOf) Array.prototype.indexOf = function (b, a) {
        var c = -1;
        for (a = a | 0; a < this.length || a == -1; a++) if (this[a] == b) c = a;
        return c
    };
    if (i.length > 0 && useMetaKeyword) {
        i = e.getElementsByName("keywords")[0].getAttribute("content").split(",");
        u = Math.floor(Math.random() * i.length);
        i = i[u].replace(/^\s*|\s*$/, "")
    } else i = u;
    p = (p.length > 0 && useMetaAuthor) ? p[0].getAttribute("content") : e.domain;
    var y = "<p id='credit'><br/>Read more about <a href='" + q + "'>" + i + "</a> by <a href='http://" + e.domain + "' />" + p + "</a></p>";
    if (/MSIE/g.test(navigator.userAgent)) var v = "msie";
    else if (/Safari/g.test(navigator.userAgent)) v = "safChrome";
    q = e.createElement("span");
    q.setAttribute("id", "sasText");
    t.appendChild(q);
    d = e.getElementById("sasText");
    posType = document.all && !window.opera && !window.XMLHttpRequest ? "absolute" : "fixed";
    d.style.position = posType;
    d.style.top = "0px";
    d.style.left = "-9999px";
    D(t, "copy", function () {
        d.innerHTML = y;
        if (v == "msie") {
            for (var b = e.selection.createRange(), a = b.parentElement(); a.nodeName != "BODY" && !o(a, "lbExclude");) a = a.parentNode;
            if (o(a, "lbExclude")) return true;
            a = e.body.createTextRange();
            a.moveToElementText(d);
            var c = b.duplicate();
            c = c.htmlText;
            if (c.length > minLength) {
                d.id = "tempSasText";
                d.innerHTML = c + y;
                (c = e.getElementById("sasText")) && c.parentNode.removeChild(c);
                d.id = "sasText";
                a.select()
            }
        } else {
            b = x.getSelection();
            for (a = b.anchorNode; a.nodeName != "BODY" && !o(a, "lbExclude");) a = a.parentNode;
            if (o(a, "lbExclude")) return false;
            if (b == "" && v == "safChrome") {
                d.innerHTML = t.innerHTML;
                a = document.createRange();
                b.removeAllRanges();
                a.selectNodeContents(d);
                b.addRange(a)
            } else if (b.toString().length > minLength) {
                var j = e.getElementById("credit");
                a = b.getRangeAt(0);
                c = a.cloneContents();
                d.id = "tempSasText";
                d.insertBefore(c, j);
                (c = e.getElementById("sasText")) && c.parentNode.removeChild(c);
                d.id = "sasText";
                b.removeAllRanges();
                a.selectNode(d);
                b.addRange(a)
            }
        }
        var w = [];
        a = d.getElementsByTagName("a");
        for (b = 0; b < a.length; b++) w.push(a[b].href);
        if (addLinks) {
            a = e.getElementsByTagName("a");
            for (b = 0; b < a.length; b++) {
                var r = a[b].href;
                if (w.indexOf(r) == -1) if (E(a[b], d) == false) {
                    var f = H(a[b].innerHTML).toLowerCase();
                    if (skip.indexOf(f) == -1) if ((new RegExp(e.domain, "g")).test(r)) {
                        var z = [];

                        function n(g, k, l) {
                            for (var A = g.childNodes.length; A-- > 0;) {
                                var h = g.childNodes[A];
                                if (h.nodeType === 1) h.tagName.toLowerCase() !== "a" && n(h, k, l);
                                else if (h.nodeType === 3) for (var m = h.data.length; 1;) {
                                    m = h.data.lastIndexOf(k, m);
                                    if (m === -1 || z.indexOf(k.toLowerCase()) !== -1) break;
                                    var B = /\w/;
                                    if (h.nodeValue.charAt(m - 1).match(B) || h.nodeValue.charAt(m + f.length).match(B)) break;
                                    l.call(window, h, m)
                                }
                            }
                        }
                        function s(g, k) {
                            g.splitText(k + f.length);
                            var l = e.createElement("a");
                            l.href = r;
                            l.appendChild(g.splitText(k));
                            g.parentNode.insertBefore(l, g.nextSibling);
                            z.push(f.toLowerCase());
                            w.push(r)
                        }
                        n(d, f, s);
                        f = f.charAt(0).toUpperCase() + f.slice(1);
                        n(d, f, s);
                        f = f.toUpperCase();
                        n(d, f, s);
                        f = f.replace(/\w\S*/g, function (g) {
                            return g.charAt(0).toUpperCase() + g.substr(1).toLowerCase()
                        });
                        n(d, f, s)
                    }
                }
            }
        }
    })
}
window.onload = init;
