function browserdetect() {
    var A = navigator.userAgent.toLowerCase();
    this.isIE = A.indexOf("msie") > -1;
    this.ieVer = this.isIE ? /msie\s(\d\.\d)/.exec(A)[1] : 0;
    this.isMoz = A.indexOf("firefox") !== -1;
    this.isSafari = A.indexOf("safari") !== -1;
    this.quirksMode = this.isIE && (!document.compatMode || document.compatMode.indexOf("BackCompat") > -1);
    this.isOp = "opera" in window;
    this.isWebKit = A.indexOf("webkit") != -1;
    if (this.isIE) {
        this.get_style = function (D, F) {
            if (! (F in D.currentStyle)) {
                 return "";
            }
            var C = /^([\d.]+)(\w*)/.exec(D.currentStyle[F]);
            if (!C) {
               return D.currentStyle[F];
            }
            if (C[1] === 0) {
                return "0";
            }
            if (C[2] && C[2] !== "px") {
                var B = D.style.left;
                var E = D.runtimeStyle.left;
                D.runtimeStyle.left = D.currentStyle.left;
                D.style.left = C[1] + C[2];
                C[0] = D.style.pixelLeft;
                D.style.left = B;
                D.runtimeStyle.left = E;
            }
            return C[0];
        };
    } else {
        this.get_style = function (B, C) {
            C = C.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
            return document.defaultView.getComputedStyle(B, "").getPropertyValue(C);
        };
    }
}
var curvyBrowser = new browserdetect();
if (curvyBrowser.isIE) {
    try {
        document.execCommand("BackgroundImageCache", false, true);
    } catch (e) {}
}
function curvyCnrSpec(A) {
    this.selectorText = A;
    this.tlR = this.trR = this.blR = this.brR = 0;
    this.tlu = this.tru = this.blu = this.bru = "";
    this.antiAlias = true;
}
curvyCnrSpec.prototype.setcorner = function (B, C, A, D) {
    if (!B) {
        this.tlR = this.trR = this.blR = this.brR = parseInt(A);
        this.tlu = this.tru = this.blu = this.bru = D;
    } else {
        propname = B.charAt(0) + C.charAt(0);
        this[propname + "R"] = parseInt(A);
        this[propname + "u"] = D
    }
};
curvyCnrSpec.prototype.get = function(D) {
    if (/^(t|b)(l|r)(R|u)$/.test(D)) {
        return this[D]
    }
    if (/^(t|b)(l|r)Ru$/.test(D)) {
        var C = D.charAt(0) + D.charAt(1);
        return this[C + "R"] + this[C + "u"]
    }
    if (/^(t|b)Ru?$/.test(D)) {
        var B = D.charAt(0);
        B += this[B + "lR"] > this[B + "rR"] ? "l": "r";
        var A = this[B + "R"];
        if (D.length === 3 && D.charAt(2) === "u") {
            A += this[B = "u"]
        }
        return A
    }
    throw new Error("Don't recognize property " + D)
};
curvyCnrSpec.prototype.radiusdiff = function(A) {
    if (A !== "t" && A !== "b") {
        throw new Error("Param must be 't' or 'b'")
    }
    return Math.abs(this[A + "lR"] - this[A + "rR"])
};
curvyCnrSpec.prototype.setfrom = function(A) {
    this.tlu = this.tru = this.blu = this.bru = "px";
    if ("tl" in A) {
        this.tlR = A.tl.radius
    }
    if ("tr" in A) {
        this.trR = A.tr.radius
    }
    if ("bl" in A) {
        this.blR = A.bl.radius
    }
    if ("br" in A) {
        this.brR = A.br.radius
    }
    if ("antiAlias" in A) {
        this.antiAlias = A.antiAlias
    }
};
curvyCnrSpec.prototype.cloneOn = function(G) {
    var E = ["tl", "tr", "bl", "br"];
    var H = 0;
    var C,
    A;
    for (C in E) {
        if (!isNaN(C)) {
            A = this[E[C] + "u"];
            if (A !== "" && A !== "px") {
                H = new curvyCnrSpec;
                break
            }
        }
    }
    if (!H) {
        H = this
    } else {
        var B,
        D,
        F = curvyBrowser.get_style(G, "left");
        for (C in E) {
            if (!isNaN(C)) {
                B = E[C];
                A = this[B + "u"];
                D = this[B + "R"];
                if (A !== "px") {
                    var F = G.style.left;
                    G.style.left = D + A;
                    D = G.style.pixelLeft;
                    G.style.left = F
                }
                H[B + "R"] = D;
                H[B + "u"] = "px"
            }
        }
        G.style.left = F
    }
    return H
};
curvyCnrSpec.prototype.radiusSum = function(A) {
    if (A !== "t" && A !== "b") {
        throw new Error("Param must be 't' or 'b'")
    }
    return this[A + "lR"] + this[A + "rR"]
};
curvyCnrSpec.prototype.radiusCount = function(A) {
    var B = 0;
    if (this[A + "lR"]) {++B
    }
    if (this[A + "rR"]) {++B
    }
    return B
};
curvyCnrSpec.prototype.cornerNames = function() {
    var A = [];
    if (this.tlR) {
        A.push("tl")
    }
    if (this.trR) {
        A.push("tr")
    }
    if (this.blR) {
        A.push("bl")
    }
    if (this.brR) {
        A.push("br")
    }
    return A
};
function operasheet(C) {
    var A = document.styleSheets.item(C).ownerNode.text;
    A = A.replace(/\/\*(\n|\r|.)*?\*\//g, "");
    var D = new RegExp("^s*([\\w.#][-\\w.#, ]+)[\\n\\s]*\\{([^}]+border-((top|bottom)-(left|right)-)?radius[^}]*)\\}", "mg");
    var G;
    this.rules = [];
    while ((G = D.exec(A)) !== null) {
        var F = new RegExp("(..)border-((top|bottom)-(left|right)-)?radius:\\s*([\\d.]+)(in|em|px|ex|pt)", "g");
        var E,
        B = new curvyCnrSpec(G[1]);
        while ((E = F.exec(G[2])) !== null) {
            if (E[1] !== "z-") {
                B.setcorner(E[3], E[4], E[5], E[6])
            }
        }
        this.rules.push(B)
    }
}
operasheet.contains_border_radius = function(A) {
    return /border-((top|bottom)-(left|right)-)?radius/.test(document.styleSheets.item(A).ownerNode.text)
};
function curvyCorners() {
    var G,
    D,
    E,
    B,
    J;
    if (typeof arguments[0] !== "object") {
        throw curvyCorners.newError("First parameter of curvyCorners() must be an object.")
    }
    if (arguments[0] instanceof curvyCnrSpec) {
        B = arguments[0];
        if (!B.selectorText && typeof arguments[1] === "string") {
            B.selectorText = arguments[1]
        }
    } else {
        if (typeof arguments[1] !== "object" && typeof arguments[1] !== "string") {
            throw curvyCorners.newError("Second parameter of curvyCorners() must be an object or a class name.")
        }
        D = arguments[1];
        if (typeof D !== "string") {
            D = ""
        }
        if (D !== "" && D.charAt(0) !== "." && "autoPad" in arguments[0]) {
            D = "." + D
        }
        B = new curvyCnrSpec(D);
        B.setfrom(arguments[0])
    }
    if (B.selectorText) {
        J = 0;
        var I = B.selectorText.replace(/\s+$/, "").split(/,\s*/);
        E = new Array;
        function A(M) {
            var L = M.split("#");
            return (L.length === 2 ? "#": "") + L.pop()
        }
        for (G = 0; G < I.length; ++G) {
            var K = A(I[G]);
            var H = K.split(" ");
            switch (K.charAt(0)) {
            case "#":
                D = H.length === 1 ? K: H[0];
                D = document.getElementById(D.substr(1));
                if (D === null) {
                    curvyCorners.alert("No object with ID " + K + " exists yet.\nCall curvyCorners(settings, obj) when it is created.")
                } else {
                    if (H.length === 1) {
                        E.push(D)
                    } else {
                        E = E.concat(curvyCorners.getElementsByClass(H[1], D))
                    }
                }
                break;
            default:
                if (H.length === 1) {
                    E = E.concat(curvyCorners.getElementsByClass(K))
                } else {
                    var C = curvyCorners.getElementsByClass(H[0]);
                    for (D = 0; D < C.length; ++D) {
                        E = E.concat(curvyCorners.getElementsByClass(H[1], C))
                    }
                }
            }
        }
    } else {
        J = 1;
        E = arguments
    }
    for (G = J, D = E.length; G < D; ++G) {
        if (E[G] && (!("IEborderRadius" in E[G].style) || E[G].style.IEborderRadius != "set")) {
            if (E[G].className && E[G].className.indexOf("curvyRedraw") !== -1) {
                if (typeof curvyCorners.redrawList === "undefined") {
                    curvyCorners.redrawList = new Array
                }
                curvyCorners.redrawList.push({
                    node: E[G],
                    spec: B,
                    copy: E[G].cloneNode(false)
                })
            }
            E[G].style.IEborderRadius = "set";
            var F = new curvyObject(B, E[G]);
            F.applyCorners()
        }
    }
}
curvyCorners.prototype.applyCornersToAll = function() {
    curvyCorners.alert("This function is now redundant. Just call curvyCorners(). See documentation.")
};
curvyCorners.redraw = function() {
    if (!curvyBrowser.isOp && !curvyBrowser.isIE) {
        return
    }
    if (!curvyCorners.redrawList) {
        throw curvyCorners.newError("curvyCorners.redraw() has nothing to redraw.")
    }
    var E = curvyCorners.bock_redraw;
    curvyCorners.block_redraw = true;
    for (var A in curvyCorners.redrawList) {
        if (isNaN(A)) {
            continue
        }
        var D = curvyCorners.redrawList[A];
        if (!D.node.clientWidth) {
            continue
        }
        var B = D.copy.cloneNode(false);
        for (var C = D.node.firstChild; C != null; C = C.nextSibling) {
            if (C.className === "autoPadDiv") {
                break
            }
        }
        if (!C) {
            curvyCorners.alert("Couldn't find autoPad DIV");
            break
        }
        D.node.parentNode.replaceChild(B, D.node);
        while (C.firstChild) {
            B.appendChild(C.removeChild(C.firstChild))
        }
        D = new curvyObject(D.spec, D.node = B);
        D.applyCorners()
    }
    curvyCorners.block_redraw = E
};
curvyCorners.adjust = function(obj, prop, newval) {
    if (curvyBrowser.isOp || curvyBrowser.isIE) {
        if (!curvyCorners.redrawList) {
            throw curvyCorners.newError("curvyCorners.adjust() has nothing to adjust.")
        }
        var i,
        j = curvyCorners.redrawList.length;
        for (i = 0; i < j; ++i) {
            if (curvyCorners.redrawList[i].node === obj) {
                break
            }
        }
        if (i === j) {
            throw curvyCorners.newError("Object not redrawable")
        }
        obj = curvyCorners.redrawList[i].copy
    }
    if (prop.indexOf(".") === -1) {
        obj[prop] = newval
    } else {
        eval("obj." + prop + "='" + newval + "'")
    }
};
curvyCorners.handleWinResize = function() {
    if (!curvyCorners.block_redraw) {
        curvyCorners.redraw()
    }
};
curvyCorners.setWinResize = function(A) {
    curvyCorners.block_redraw = !A
};
curvyCorners.newError = function(A) {
    return new Error("curvyCorners Error:\n" + A)
};
curvyCorners.alert = function(A) {
    if (typeof curvyCornersVerbose === "undefined" || curvyCornersVerbose) {
        alert(A)
    }
};
function curvyObject() {
    var U;
    this.box = arguments[1];
    this.settings = arguments[0];
    this.topContainer = this.bottomContainer = this.shell = U = null;
    var K = this.box.clientWidth;
    if (!K && curvyBrowser.isIE) {
        this.box.style.zoom = 1;
        K = this.box.clientWidth
    }
    if (!K) {
        if (!this.box.parentNode) {
            throw this.newError("box has no parent!")
        }
        for (U = this.box;; U = U.parentNode) {
            if (!U || U.tagName === "BODY") {
                this.applyCorners = function() {};
                curvyCorners.alert(this.errmsg("zero-width box with no accountable parent", "warning"));
                return
            }
            if (U.style.display === "none") {
                break
            }
        }
        U.style.display = "block";
        K = this.box.clientWidth
    }
    if (arguments[0] instanceof curvyCnrSpec) {
        this.spec = arguments[0].cloneOn(this.box)
    } else {
        this.spec = new curvyCnrSpec("");
        this.spec.setfrom(this.settings)
    }
    var b = curvyBrowser.get_style(this.box, "borderTopWidth");
    var J = curvyBrowser.get_style(this.box, "borderBottomWidth");
    var D = curvyBrowser.get_style(this.box, "borderLeftWidth");
    var B = curvyBrowser.get_style(this.box, "borderRightWidth");
    var I = curvyBrowser.get_style(this.box, "borderTopColor");
    var G = curvyBrowser.get_style(this.box, "borderBottomColor");
    var A = curvyBrowser.get_style(this.box, "borderLeftColor");
    var E = curvyBrowser.get_style(this.box, "backgroundColor");
    var C = curvyBrowser.get_style(this.box, "backgroundImage");
    var Y = curvyBrowser.get_style(this.box, "backgroundRepeat");
    if (this.box.currentStyle && this.box.currentStyle.backgroundPositionX) {
        var R = curvyBrowser.get_style(this.box, "backgroundPositionX");
        var P = curvyBrowser.get_style(this.box, "backgroundPositionY")
    } else {
        var R = curvyBrowser.get_style(this.box, "backgroundPosition");
        R = R.split(" ");
        var P = R[1];
        R = R[0]
    }
    var O = curvyBrowser.get_style(this.box, "position");
    var Z = curvyBrowser.get_style(this.box, "paddingTop");
    var c = curvyBrowser.get_style(this.box, "paddingBottom");
    var Q = curvyBrowser.get_style(this.box, "paddingLeft");
    var a = curvyBrowser.get_style(this.box, "paddingRight");
    var S = curvyBrowser.get_style(this.box, "border");
    filter = curvyBrowser.ieVer > 7 ? curvyBrowser.get_style(this.box, "filter") : null;
    var H = this.spec.get("tR");
    var M = this.spec.get("bR");
    var W = function(f) {
        if (typeof f === "number") {
            return f
        }
        if (typeof f !== "string") {
            throw new Error("unexpected styleToNPx type " + typeof f)
        }
        var d = /^[-\d.]([a-z]+)$/.exec(f);
        if (d && d[1] != "px") {
            throw new Error("Unexpected unit " + d[1])
        }
        if (isNaN(f = parseInt(f))) {
            f = 0
        }
        return f
    };
    var T = function(d) {
        return d <= 0 ? "0": d + "px"
    };
    try {
        this.borderWidth = W(b);
        this.borderWidthB = W(J);
        this.borderWidthL = W(D);
        this.borderWidthR = W(B);
        this.boxColour = curvyObject.format_colour(E);
        this.topPadding = W(Z);
        this.bottomPadding = W(c);
        this.leftPadding = W(Q);
        this.rightPadding = W(a);
        this.boxWidth = K;
        this.boxHeight = this.box.clientHeight;
        this.borderColour = curvyObject.format_colour(I);
        this.borderColourB = curvyObject.format_colour(G);
        this.borderColourL = curvyObject.format_colour(A);
        this.borderString = this.borderWidth + "px solid " + this.borderColour;
        this.borderStringB = this.borderWidthB + "px solid " + this.borderColourB;
        this.backgroundImage = ((C != "none") ? C: "");
        this.backgroundRepeat = Y
    } catch(X) {
        throw this.newError("getMessage" in X ? X.getMessage() : X.message)
    }
    var F = this.boxHeight;
    var V = K;
    if (curvyBrowser.isOp) {
        R = W(R);
        P = W(P);
        if (R) {
            var N = V + this.borderWidthL + this.borderWidthR;
            if (R > N) {
                R = N
            }
            R = (N / R * 100) + "%"
        }
        if (P) {
            var N = F + this.borderWidth + this.borderWidthB;
            if (P > N) {
                P = N
            }
            P = (N / P * 100) + "%"
        }
    }
    if (curvyBrowser.quirksMode) {} else {
        this.boxWidth -= this.leftPadding + this.rightPadding;
        this.boxHeight -= this.topPadding + this.bottomPadding
    }
    this.contentContainer = document.createElement("div");
    if (filter) {
        this.contentContainer.style.filter = filter
    }
    while (this.box.firstChild) {
        this.contentContainer.appendChild(this.box.removeChild(this.box.firstChild))
    }
    if (O != "absolute") {
        this.box.style.position = "relative"
    }
    this.box.style.padding = "0";
    this.box.style.border = this.box.style.backgroundImage = "none";
    this.box.style.backgroundColor = "transparent";
    this.box.style.width = (V + this.borderWidthL + this.borderWidthR) + "px";
    this.box.style.height = (F + this.borderWidth + this.borderWidthB) + "px";
    var L = document.createElement("div");
    L.style.position = "absolute";
    if (filter) {
        L.style.filter = filter
    }
    if (curvyBrowser.quirksMode) {
        L.style.width = (V + this.borderWidthL + this.borderWidthR) + "px"
    } else {
        L.style.width = V + "px"
    }
    L.style.height = T(F + this.borderWidth + this.borderWidthB - H - M);
    L.style.padding = "0";
    L.style.top = H + "px";
    L.style.left = "0";
    if (this.borderWidthL) {
        L.style.borderLeft = this.borderWidthL + "px solid " + this.borderColourL
    }
    if (this.borderWidth && !H) {
        L.style.borderTop = this.borderWidth + "px solid " + this.borderColour
    }
    if (this.borderWidthR) {
        L.style.borderRight = this.borderWidthR + "px solid " + this.borderColourL
    }
    if (this.borderWidthB && !M) {
        L.style.borderBottom = this.borderWidthB + "px solid " + this.borderColourB
    }
    L.style.backgroundColor = E;
    L.style.backgroundImage = this.backgroundImage;
    L.style.backgroundRepeat = this.backgroundRepeat;
    this.shell = this.box.appendChild(L);
    K = curvyBrowser.get_style(this.shell, "width");
    if (K === "" || K === "auto" || K.indexOf("%") !== -1) {
        throw this.newError("Shell width is " + K)
    }
    this.boxWidth = (K != "" && K != "auto" && K.indexOf("%") == -1) ? parseInt(K) : this.shell.clientWidth;
    this.applyCorners = function() {
        if (this.backgroundObject) {
            var w = function(AO, i, t) {
                if (AO === 0) {
                    return 0
                }
                var k;
                if (AO === "right" || AO === "bottom") {
                    return t - i
                }
                if (AO === "center") {
                    return (t - i) / 2
                }
                if (AO.indexOf("%") > 0) {
                    return (t - i) * 100 / parseInt(AO)
                }
                return W(AO)
            };
            this.backgroundPosX = w(R, this.backgroundObject.width, V);
            this.backgroundPosY = w(P, this.backgroundObject.height, F)
        } else {
            if (this.backgroundImage) {
                this.backgroundPosX = W(R);
                this.backgroundPosY = W(P)
            }
        }
        if (H) {
            v = document.createElement("div");
            v.style.width = this.boxWidth + "px";
            v.style.fontSize = "1px";
            v.style.overflow = "hidden";
            v.style.position = "absolute";
            v.style.paddingLeft = this.borderWidth + "px";
            v.style.paddingRight = this.borderWidth + "px";
            v.style.height = H + "px";
            v.style.top = -H + "px";
            v.style.left = -this.borderWidthL + "px";
            this.topContainer = this.shell.appendChild(v)
        }
        if (M) {
            var v = document.createElement("div");
            v.style.width = this.boxWidth + "px";
            v.style.fontSize = "1px";
            v.style.overflow = "hidden";
            v.style.position = "absolute";
            v.style.paddingLeft = this.borderWidthB + "px";
            v.style.paddingRight = this.borderWidthB + "px";
            v.style.height = M + "px";
            v.style.bottom = -M + "px";
            v.style.left = -this.borderWidthL + "px";
            this.bottomContainer = this.shell.appendChild(v)
        }
        var AG = this.spec.cornerNames();
        for (var AK in AG) {
            if (!isNaN(AK)) {
                var AC = AG[AK];
                var AD = this.spec[AC + "R"];
                var AE,
                AH,
                j,
                AF;
                if (AC == "tr" || AC == "tl") {
                    AE = this.borderWidth;
                    AH = this.borderColour;
                    AF = this.borderWidth
                } else {
                    AE = this.borderWidthB;
                    AH = this.borderColourB;
                    AF = this.borderWidthB
                }
                j = AD - AF;
                var u = document.createElement("div");
                u.style.height = this.spec.get(AC + "Ru");
                u.style.width = this.spec.get(AC + "Ru");
                u.style.position = "absolute";
                u.style.fontSize = "1px";
                u.style.overflow = "hidden";
                var r,
                q,
                p;
                var n = filter ? parseInt(/alpha\(opacity.(\d+)\)/.exec(filter)[1]) : 100;
                for (r = 0; r < AD; ++r) {
                    var m = (r + 1 >= j) ? -1: Math.floor(Math.sqrt(Math.pow(j, 2) - Math.pow(r + 1, 2))) - 1;
                    if (j != AD) {
                        var h = (r >= j) ? -1: Math.ceil(Math.sqrt(Math.pow(j, 2) - Math.pow(r, 2)));
                        var f = (r + 1 >= AD) ? -1: Math.floor(Math.sqrt(Math.pow(AD, 2) - Math.pow((r + 1), 2))) - 1
                    }
                    var d = (r >= AD) ? -1: Math.ceil(Math.sqrt(Math.pow(AD, 2) - Math.pow(r, 2)));
                    if (m > -1) {
                        this.drawPixel(r, 0, this.boxColour, n, (m + 1), u, true, AD)
                    }
                    if (j != AD) {
                        if (this.spec.antiAlias) {
                            for (q = m + 1; q < h; ++q) {
                                if (this.backgroundImage != "") {
                                    var g = curvyObject.pixelFraction(r, q, j) * 100;
                                    this.drawPixel(r, q, AH, n, 1, u, g >= 30, AD)
                                } else {
                                    if (this.boxColour !== "transparent") {
                                        var AB = curvyObject.BlendColour(this.boxColour, AH, curvyObject.pixelFraction(r, q, j));
                                        this.drawPixel(r, q, AB, n, 1, u, false, AD)
                                    } else {
                                        this.drawPixel(r, q, AH, n >> 1, 1, u, false, AD)
                                    }
                                }
                            }
                            if (f >= h) {
                                if (h == -1) {
                                    h = 0
                                }
                                this.drawPixel(r, h, AH, n, (f - h + 1), u, false, 0)
                            }
                            p = AH;
                            q = f
                        } else {
                            if (f > m) {
                                this.drawPixel(r, (m + 1), AH, n, (f - m), u, false, 0)
                            }
                        }
                    } else {
                        p = this.boxColour;
                        q = m
                    }
                    if (this.spec.antiAlias) {
                        while (++q < d) {
                            this.drawPixel(r, q, p, (curvyObject.pixelFraction(r, q, AD) * n), 1, u, AF <= 0, AD)
                        }
                    }
                }
                for (var y = 0, AJ = u.childNodes.length; y < AJ; ++y) {
                    var s = u.childNodes[y];
                    var AI = parseInt(s.style.top);
                    var AM = parseInt(s.style.left);
                    var AN = parseInt(s.style.height);
                    if (AC == "tl" || AC == "bl") {
                        s.style.left = (AD - AM - 1) + "px"
                    }
                    if (AC == "tr" || AC == "tl") {
                        s.style.top = (AD - AN - AI) + "px"
                    }
                    s.style.backgroundRepeat = this.backgroundRepeat;
                    if (this.backgroundImage) {
                        switch (AC) {
                        case "tr":
                            s.style.backgroundPosition = (this.backgroundPosX - this.borderWidthL + AD - V - AM) + "px " + (this.backgroundPosY + AN + AI + this.borderWidth - AD) + "px";
                            break;
                        case "tl":
                            s.style.backgroundPosition = (this.backgroundPosX - AD + AM + this.borderWidthL) + "px " + (this.backgroundPosY - AD + AN + AI + this.borderWidth) + "px";
                            break;
                        case "bl":
                            s.style.backgroundPosition = (this.backgroundPosX - AD + AM + 1 + this.borderWidthL) + "px " + (this.backgroundPosY - F - this.borderWidth + (curvyBrowser.quirksMode ? AI: -AI) + AD) + "px";
                            break;
                        case "br":
                            if (curvyBrowser.quirksMode) {
                                s.style.backgroundPosition = (this.backgroundPosX + this.borderWidthL - V + AD - AM) + "px " + (this.backgroundPosY - F - this.borderWidth + AI + AD) + "px"
                            } else {
                                s.style.backgroundPosition = (this.backgroundPosX - this.borderWidthL - V + AD - AM) + "px " + (this.backgroundPosY - F - this.borderWidth + AD - AI) + "px"
                            }
                        }
                    }
                }
                switch (AC) {
                case "tl":
                    u.style.top = u.style.left = "0";
                    this.topContainer.appendChild(u);
                    break;
                case "tr":
                    u.style.top = u.style.right = "0";
                    this.topContainer.appendChild(u);
                    break;
                case "bl":
                    u.style.bottom = u.style.left = "0";
                    this.bottomContainer.appendChild(u);
                    break;
                case "br":
                    u.style.bottom = u.style.right = "0";
                    this.bottomContainer.appendChild(u)
                }
            }
        }
        var x = {
            t: this.spec.radiusdiff("t"),
            b: this.spec.radiusdiff("b")
        };
        for (z in x) {
            if (typeof z === "function") {
                continue
            }
            if (!this.spec.get(z + "R")) {
                continue
            }
            if (x[z]) {
                if (this.backgroundImage && this.spec.radiusSum(z) !== x[z]) {
                    curvyCorners.alert(this.errmsg("Not supported: unequal non-zero top/bottom radii with background image"))
                }
                var AL = (this.spec[z + "lR"] < this.spec[z + "rR"]) ? z + "l": z + "r";
                var l = document.createElement("div");
                l.style.height = x[z] + "px";
                l.style.width = this.spec.get(AL + "Ru");
                l.style.position = "absolute";
                l.style.fontSize = "1px";
                l.style.overflow = "hidden";
                l.style.backgroundColor = this.boxColour;
                switch (AL) {
                case "tl":
                    l.style.bottom = l.style.left = "0";
                    l.style.borderLeft = this.borderString;
                    this.topContainer.appendChild(l);
                    break;
                case "tr":
                    l.style.bottom = l.style.right = "0";
                    l.style.borderRight = this.borderString;
                    this.topContainer.appendChild(l);
                    break;
                case "bl":
                    l.style.top = l.style.left = "0";
                    l.style.borderLeft = this.borderStringB;
                    this.bottomContainer.appendChild(l);
                    break;
                case "br":
                    l.style.top = l.style.right = "0";
                    l.style.borderRight = this.borderStringB;
                    this.bottomContainer.appendChild(l)
                }
            }
            var o = document.createElement("div");
            if (filter) {
                o.style.filter = filter
            }
            o.style.position = "relative";
            o.style.fontSize = "1px";
            o.style.overflow = "hidden";
            o.style.width = this.fillerWidth(z);
            o.style.backgroundColor = this.boxColour;
            o.style.backgroundImage = this.backgroundImage;
            o.style.backgroundRepeat = this.backgroundRepeat;
            switch (z) {
            case "t":
                if (this.topContainer) {
                    if (curvyBrowser.quirksMode) {
                        o.style.height = 100 + H + "px"
                    } else {
                        o.style.height = 100 + H - this.borderWidth + "px"
                    }
                    o.style.marginLeft = this.spec.tlR ? (this.spec.tlR - this.borderWidthL) + "px": "0";
                    o.style.borderTop = this.borderString;
                    if (this.backgroundImage) {
                        var AA = this.spec.tlR ? (this.backgroundPosX - (H - this.borderWidthL)) + "px ": "0 ";
                        o.style.backgroundPosition = AA + this.backgroundPosY + "px";
                        this.shell.style.backgroundPosition = this.backgroundPosX + "px " + (this.backgroundPosY - H + this.borderWidthL) + "px"
                    }
                    this.topContainer.appendChild(o)
                }
                break;
            case "b":
                if (this.bottomContainer) {
                    if (curvyBrowser.quirksMode) {
                        o.style.height = M + "px"
                    } else {
                        o.style.height = M - this.borderWidthB + "px"
                    }
                    o.style.marginLeft = this.spec.blR ? (this.spec.blR - this.borderWidthL) + "px": "0";
                    o.style.borderBottom = this.borderStringB;
                    if (this.backgroundImage) {
                        var AA = this.spec.blR ? (this.backgroundPosX + this.borderWidthL - M) + "px ": this.backgroundPosX + "px ";
                        o.style.backgroundPosition = AA + (this.backgroundPosY - F - this.borderWidth + M) + "px"
                    }
                    this.bottomContainer.appendChild(o)
                }
            }
        }
        this.contentContainer.style.position = "absolute";
        this.contentContainer.className = "autoPadDiv";
        this.contentContainer.style.left = this.borderWidthL + "px";
        this.contentContainer.style.paddingTop = this.topPadding + "px";
        this.contentContainer.style.top = this.borderWidth + "px";
        this.contentContainer.style.paddingLeft = this.leftPadding + "px";
        this.contentContainer.style.paddingRight = this.rightPadding + "px";
        z = V;
        if (!curvyBrowser.quirksMode) {
            z -= this.leftPadding + this.rightPadding
        }
        this.contentContainer.style.width = z + "px";
        this.contentContainer.style.textAlign = curvyBrowser.get_style(this.box, "textAlign");
        this.box.style.textAlign = "left";
        this.box.appendChild(this.contentContainer);
        if (U) {
            U.style.display = "none"
        }
    };
    if (this.backgroundImage) {
        R = this.backgroundCheck(R);
        P = this.backgroundCheck(P);
        if (this.backgroundObject) {
            this.backgroundObject.holdingElement = this;
            this.dispatch = this.applyCorners;
            this.applyCorners = function() {
                if (this.backgroundObject.complete) {
                    this.dispatch()
                } else {
                    this.backgroundObject.onload = new Function("curvyObject.dispatch(this.holdingElement);")
                }
            }
        }
    }
}
curvyObject.prototype.backgroundCheck = function(B) {
    if (B === "top" || B === "left" || parseInt(B) === 0) {
        return 0
    }
    if (! (/^[-\d.]+px$/.test(B)) && !this.backgroundObject) {
        this.backgroundObject = new Image;
        var A = function(D) {
            var C = /url\("?([^'"]+)"?\)/.exec(D);
            return (C ? C[1] : D)
        };
        this.backgroundObject.src = A(this.backgroundImage)
    }
    return B
};
curvyObject.dispatch = function(A) {
    if ("dispatch" in A) {
        A.dispatch()
    } else {
        throw A.newError("No dispatch function")
    }
};
curvyObject.prototype.drawPixel = function(J, G, A, F, H, I, C, E) {
    var B = document.createElement("div");
    B.style.height = H + "px";
    B.style.width = "1px";
    B.style.position = "absolute";
    B.style.fontSize = "1px";
    B.style.overflow = "hidden";
    var D = this.spec.get("tR");
    B.style.backgroundColor = A;
    if (C && this.backgroundImage != "") {
        B.style.backgroundImage = this.backgroundImage;
        B.style.backgroundPosition = "-" + (this.boxWidth - (E - J) + this.borderWidth) + "px -" + ((this.boxHeight + D + G) - this.borderWidth) + "px"
    }
    if (F != 100) {
        curvyObject.setOpacity(B, F)
    }
    B.style.top = G + "px";
    B.style.left = J + "px";
    I.appendChild(B)
};
curvyObject.prototype.fillerWidth = function(A) {
    var B = curvyBrowser.quirksMode ? 0: this.spec.radiusCount(A) * this.borderWidthL;
    return (this.boxWidth - this.spec.radiusSum(A) + B) + "px"
};
curvyObject.prototype.errmsg = function(C, D) {
    var B = "\ntag: " + this.box.tagName;
    if (this.box.id) {
        B += "\nid: " + this.box.id
    }
    if (this.box.className) {
        B += "\nclass: " + this.box.className
    }
    var A;
    if ((A = this.box.parentNode) === null) {
        B += "\n(box has no parent)"
    } else {
        B += "\nParent tag: " + A.tagName;
        if (A.id) {
            B += "\nParent ID: " + A.id
        }
        if (A.className) {
            B += "\nParent class: " + A.className
        }
    }
    if (D === undefined) {
        D = "warning"
    }
    return "curvyObject " + D + ":\n" + C + B
};
curvyObject.prototype.newError = function(A) {
    return new Error(this.errmsg(A, "exception"))
};
curvyObject.IntToHex = function(B) {
    var A = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];
    return A[B >>> 4] + "" + A[B & 15]
};
curvyObject.BlendColour = function(L, J, G) {
    if (L === "transparent" || J === "transparent") {
        throw this.newError("Cannot blend with transparent")
    }
    if (L.charAt(0) !== "#") {
        L = curvyObject.format_colour(L)
    }
    if (J.charAt(0) !== "#") {
        J = curvyObject.format_colour(J)
    }
    var D = parseInt(L.substr(1, 2), 16);
    var K = parseInt(L.substr(3, 2), 16);
    var F = parseInt(L.substr(5, 2), 16);
    var C = parseInt(J.substr(1, 2), 16);
    var I = parseInt(J.substr(3, 2), 16);
    var E = parseInt(J.substr(5, 2), 16);
    if (G > 1 || G < 0) {
        G = 1
    }
    var H = Math.round((D * G) + (C * (1 - G)));
    if (H > 255) {
        H = 255
    }
    if (H < 0) {
        H = 0
    }
    var B = Math.round((K * G) + (I * (1 - G)));
    if (B > 255) {
        B = 255
    }
    if (B < 0) {
        B = 0
    }
    var A = Math.round((F * G) + (E * (1 - G)));
    if (A > 255) {
        A = 255
    }
    if (A < 0) {
        A = 0
    }
    return "#" + curvyObject.IntToHex(H) + curvyObject.IntToHex(B) + curvyObject.IntToHex(A)
};
curvyObject.pixelFraction = function(H, G, A) {
    var J;
    var E = A * A;
    var B = new Array(2);
    var F = new Array(2);
    var I = 0;
    var C = "";
    var D = Math.sqrt(E - Math.pow(H, 2));
    if (D >= G && D < (G + 1)) {
        C = "Left";
        B[I] = 0;
        F[I] = D - G; ++I
    }
    D = Math.sqrt(E - Math.pow(G + 1, 2));
    if (D >= H && D < (H + 1)) {
        C += "Top";
        B[I] = D - H;
        F[I] = 1; ++I
    }
    D = Math.sqrt(E - Math.pow(H + 1, 2));
    if (D >= G && D < (G + 1)) {
        C += "Right";
        B[I] = 1;
        F[I] = D - G; ++I
    }
    D = Math.sqrt(E - Math.pow(G, 2));
    if (D >= H && D < (H + 1)) {
        C += "Bottom";
        B[I] = D - H;
        F[I] = 0
    }
    switch (C) {
    case "LeftRight":
        J = Math.min(F[0], F[1]) + ((Math.max(F[0], F[1]) - Math.min(F[0], F[1])) / 2);
        break;
    case "TopRight":
        J = 1 - (((1 - B[0]) * (1 - F[1])) / 2);
        break;
    case "TopBottom":
        J = Math.min(B[0], B[1]) + ((Math.max(B[0], B[1]) - Math.min(B[0], B[1])) / 2);
        break;
    case "LeftBottom":
        J = F[0] * B[1] / 2;
        break;
    default:
        J = 1
    }
    return J
};
curvyObject.rgb2Array = function(A) {
    var B = A.substring(4, A.indexOf(")"));
    return B.split(", ")
};
curvyObject.rgb2Hex = function(B) {
    try {
        var C = curvyObject.rgb2Array(B);
        var G = parseInt(C[0]);
        var E = parseInt(C[1]);
        var A = parseInt(C[2]);
        var D = "#" + curvyObject.IntToHex(G) + curvyObject.IntToHex(E) + curvyObject.IntToHex(A)
    } catch(F) {
        var H = "getMessage" in F ? F.getMessage() : F.message;
        throw new Error("Error (" + H + ") converting RGB value to Hex in rgb2Hex")
    }
    return D
};
curvyObject.setOpacity = function(F, C) {
    C = (C == 100) ? 99.999: C;
    if (curvyBrowser.isSafari && F.tagName != "IFRAME") {
        var B = curvyObject.rgb2Array(F.style.backgroundColor);
        var E = parseInt(B[0]);
        var D = parseInt(B[1]);
        var A = parseInt(B[2]);
        F.style.backgroundColor = "rgba(" + E + ", " + D + ", " + A + ", " + C / 100 + ")"
    } else {
        if (typeof F.style.opacity !== "undefined") {
            F.style.opacity = C / 100
        } else {
            if (typeof F.style.MozOpacity !== "undefined") {
                F.style.MozOpacity = C / 100
            } else {
                if (typeof F.style.filter != "undefined") {
                    F.style.filter = "alpha(opacity=" + C + ")"
                } else {
                    if (typeof F.style.KHTMLOpacity != "undefined") {
                        F.style.KHTMLOpacity = C / 100
                    }
                }
            }
        }
    }
};
function addEvent(D, C, B, A) {
    if (D.addEventListener) {
        D.addEventListener(C, B, A);
        return true
    }
    if (D.attachEvent) {
        return D.attachEvent("on" + C, B)
    }
    D["on" + C] = B;
    return false
}
curvyObject.getComputedColour = function(E) {
    var F = document.createElement("DIV");
    F.style.backgroundColor = E;
    document.body.appendChild(F);
    if (window.getComputedStyle) {
        var D = document.defaultView.getComputedStyle(F, null).getPropertyValue("background-color");
        F.parentNode.removeChild(F);
        if (D.substr(0, 3) === "rgb") {
            D = curvyObject.rgb2Hex(D)
        }
        return D
    } else {
        var A = document.body.createTextRange();
        A.moveToElementText(F);
        A.execCommand("ForeColor", false, E);
        var B = A.queryCommandValue("ForeColor");
        var C = "rgb(" + (B & 255) + ", " + ((B & 65280) >> 8) + ", " + ((B & 16711680) >> 16) + ")";
        F.parentNode.removeChild(F);
        A = null;
        return curvyObject.rgb2Hex(C)
    }
};
curvyObject.format_colour = function(A) {
    if (A != "" && A != "transparent") {
        if (A.substr(0, 3) === "rgb") {
            A = curvyObject.rgb2Hex(A)
        } else {
            if (A.charAt(0) !== "#") {
                A = curvyObject.getComputedColour(A)
            } else {
                if (A.length === 4) {
                    A = "#" + A.charAt(1) + A.charAt(1) + A.charAt(2) + A.charAt(2) + A.charAt(3) + A.charAt(3)
                }
            }
        }
    }
    return A
};
curvyCorners.getElementsByClass = function(H, F) {
    var E = new Array;
    if (F === undefined) {
        F = document
    }
    H = H.split(".");
    var A = "*";
    if (H.length === 1) {
        A = H[0];
        H = false
    } else {
        if (H[0]) {
            A = H[0]
        }
        H = H[1]
    }
    var D,
    C,
    B;
    if (A.charAt(0) === "#") {
        C = document.getElementById(A.substr(1));
        if (C) {
            E.push(C)
        }
    } else {
        C = F.getElementsByTagName(A);
        B = C.length;
        if (H) {
            var G = new RegExp("(^|\\s)" + H + "(\\s|$)");
            for (D = 0; D < B; ++D) {
                if (G.test(C[D].className)) {
                    E.push(C[D])
                }
            }
        } else {
            for (D = 0; D < B; ++D) {
                E.push(C[D])
            }
        }
    }
    return E
};
if (curvyBrowser.isMoz || curvyBrowser.isWebKit) {
    var curvyCornersNoAutoScan = true
} else {
    curvyCorners.scanStyles = function() {
        function B(F) {
            var G = /^[\d.]+(\w+)$/.exec(F);
            return G[1]
        }
        var E,
        D,
        C;
        if (curvyBrowser.isIE) {
            function A(L) {
                var J = L.style;
                if (curvyBrowser.ieVer > 6) {
                    var H = J["-webkit-border-radius"] || 0;
                    var K = J["-webkit-border-top-right-radius"] || 0;
                    var F = J["-webkit-border-top-left-radius"] || 0;
                    var G = J["-webkit-border-bottom-right-radius"] || 0;
                    var M = J["-webkit-border-bottom-left-radius"] || 0
                } else {
                    var H = J["webkit-border-radius"] || 0;
                    var K = J["webkit-border-top-right-radius"] || 0;
                    var F = J["webkit-border-top-left-radius"] || 0;
                    var G = J["webkit-border-bottom-right-radius"] || 0;
                    var M = J["webkit-border-bottom-left-radius"] || 0
                }
                if (H || F || K || G || M) {
                    var I = new curvyCnrSpec(L.selectorText);
                    if (H) {
                        I.setcorner(null, null, parseInt(H), B(H))
                    } else {
                        if (K) {
                            I.setcorner("t", "r", parseInt(K), B(K))
                        }
                        if (F) {
                            I.setcorner("t", "l", parseInt(F), B(F))
                        }
                        if (M) {
                            I.setcorner("b", "l", parseInt(M), B(M))
                        }
                        if (G) {
                            I.setcorner("b", "r", parseInt(G), B(G))
                        }
                    }
                    curvyCorners(I)
                }
            }
            for (E = 0; E < document.styleSheets.length; ++E) {
                if (document.styleSheets[E].imports) {
                    for (D = 0; D < document.styleSheets[E].imports.length; ++D) {
                        for (C = 0; C < document.styleSheets[E].imports[D].rules.length; ++C) {
                            A(document.styleSheets[E].imports[D].rules[C])
                        }
                    }
                }
                for (D = 0; D < document.styleSheets[E].rules.length; ++D) {
                    A(document.styleSheets[E].rules[D])
                }
            }
        } else {
            if (curvyBrowser.isOp) {
                for (E = 0; E < document.styleSheets.length; ++E) {
                    if (operasheet.contains_border_radius(E)) {
                        C = new operasheet(E);
                        for (D in C.rules) {
                            if (!isNaN(D)) {
                                curvyCorners(C.rules[D])
                            }
                        }
                    }
                }
            } else {
                curvyCorners.alert("Scanstyles does nothing in Webkit/Firefox")
            }
        }
    };
    curvyCorners.init = function() {
        if (arguments.callee.done) {
            return
        }
        arguments.callee.done = true;
        if (curvyBrowser.isWebKit && curvyCorners.init.timer) {
            clearInterval(curvyCorners.init.timer);
            curvyCorners.init.timer = null
        }
        curvyCorners.scanStyles()
    }
}
if (typeof curvyCornersNoAutoScan === "undefined" || curvyCornersNoAutoScan === false) {
    if (curvyBrowser.isOp) {
        document.addEventListener("DOMContentLoaded", curvyCorners.init, false)
    } else {
        addEvent(window, "load", curvyCorners.init, false)
    }
};
