function browserdetect() {
    var b = navigator.userAgent.toLowerCase();
    this.isIE=(b.indexOf("msie")>-1&&/msie\s(\d\.\d)/.exec(b)[1]<9);
    if (this.isIE) {
        this.ieVer = /msie\s(\d\.\d)/.exec(b)[1];
        this.quirksMode = !document.compatMode || document.compatMode.indexOf("BackCompat") > -1;
        this.get_style = function (f, h) {
            if (!(h in f.currentStyle)) {
                return ""
            }
            var d = /^([\d.]+)(\w*)/.exec(f.currentStyle[h]);
            if (!d) {
                return f.currentStyle[h]
            }
            if (d[1] == 0) {
                return "0"
            }
            if (d[2] && d[2] !== "px") {
                var c = f.style.left;
                var g = f.runtimeStyle.left;
                f.runtimeStyle.left = f.currentStyle.left;
                f.style.left = d[1] + d[2];
                d[0] = f.style.pixelLeft;
                f.style.left = c;
                f.runtimeStyle.left = g
            }
            return d[0]
        };
        this.supportsCorners = false
    } else {
        this.ieVer = this.quirksMode = 0;
        this.get_style = function (c, d) {
            d = d.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
            return document.defaultView.getComputedStyle(c, "").getPropertyValue(d)
        };
        this.isSafari = b.indexOf("safari") != -1;
        this.isWebKit = b.indexOf("webkit") != -1;
        this.isOp = "opera" in window;
        if (this.isOp) {
            this.supportsCorners = (this.isOp = window.opera.version()) >= 10.5
        } else {
            if (!this.isWebkit) {
                if (!(this.isMoz = b.indexOf("firefox") !== -1)) {
                    for (var a = document.childNodes.length; --a >= 0;) {
                        if ("style" in document.childNodes[a]) {
                            this.isMoz = "MozBorderRadius" in document.childNodes[a].style;
                            break
                        }
                    }
                }
            }
            this.supportsCorners = this.isWebKit || this.isMoz
        }
    }
}
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 {
        var f = b.charAt(0) + c.charAt(0);
        this[f + "R"] = parseInt(a);
        this[f + "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 (f) {
    var j = ["tl", "tr", "bl", "br"];
    var k = 0;
    var d, g;
    for (d in j) {
        if (!isNaN(d)) {
            g = this[j[d] + "u"];
            if (g !== "" && g !== "px") {
                k = new curvyCnrSpec;
                break
            }
        }
    }
    if (!k) {
        k = this
    } else {
        var c, b, h = curvyBrowser.get_style(f, "left");
        for (d in j) {
            if (!isNaN(d)) {
                c = j[d];
                g = this[c + "u"];
                b = this[c + "R"];
                if (g !== "px") {
                    var a = f.style.left;
                    f.style.left = b + g;
                    b = f.style.pixelLeft;
                    f.style.left = a
                }
                k[c + "R"] = b;
                k[c + "u"] = "px"
            }
        }
        f.style.left = h
    }
    return k
};
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 h;
    this.rules = [];
    while ((h = d.exec(a)) !== null) {
        var g = new RegExp("(..)border-((top|bottom)-(left|right)-)?radius:\\s*([\\d.]+)(in|em|px|ex|pt)", "g");
        var f, b = new curvyCnrSpec(h[1]);
        while ((f = g.exec(h[2])) !== null) {
            if (f[1] !== "z-") {
                b.setcorner(f[3], f[4], f[5], f[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, c, d, b, l;
    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.")
        }
        c = arguments[1];
        if (typeof c !== "string") {
            c = ""
        }
        if (c !== "" && c.charAt(0) !== "." && "autoPad" in arguments[0]) {
            c = "." + c
        }
        b = new curvyCnrSpec(c);
        b.setfrom(arguments[0])
    }
    if (b.selectorText) {
        l = 0;
        var h = b.selectorText.replace(/\s+$/, "").split(/,\s*/);
        d = new Array;
        for (g = 0; g < h.length; ++g) {
            if ((c = h[g].lastIndexOf("#")) !== -1) {
                h[g] = h[g].substr(c)
            }
            d = d.concat(curvyCorners.getElementsBySelector(h[g].split(/\s+/)))
        }
    } else {
        l = 1;
        d = arguments
    }
    for (g = l, c = d.length; g < c; ++g) {
        var k = d[g];
        var a = false;
        if (!k.className) {
            k.className = "curvyIgnore"
        } else {
            a = k.className.indexOf("curvyIgnore") !== -1;
            if (!a) {
                k.className += " curvyIgnore"
            }
        }
        if (!a) {
            if (k.className.indexOf("curvyRedraw") !== -1) {
                if (typeof curvyCorners.redrawList === "undefined") {
                    curvyCorners.redrawList = new Array
                }
                curvyCorners.redrawList.push({
                    node: k,
                    spec: b,
                    copy: k.cloneNode(false)
                })
            }
            var f = new curvyObject(b, k);
            f.applyCorners()
        }
    }
}
curvyCorners.prototype.applyCornersToAll = function () {
    throw curvyCorners.newError("This function is now redundant. Just call curvyCorners(). See documentation.")
};
curvyCorners.redraw = function () {
    if (curvyBrowser.supportsCorners) {
        return
    }
    //if (!curvyCorners.redrawList) {
    //    throw curvyCorners.newError("curvyCorners.redraw() has nothing to redraw.")
    //}
    var h = curvyCorners.block_redraw;
    curvyCorners.block_redraw = true;
    for (var c in curvyCorners.redrawList) {
        if (isNaN(c)) {
            continue
        }
        var g = curvyCorners.redrawList[c];
        if (!g.node.clientWidth) {
            continue
        }
        var d = g.copy.cloneNode(false);
        for (var f = g.node.firstChild; f !== null; f = f.nextSibling) {
            if (f.className.indexOf("autoPadDiv") !== -1) {
                break
            }
        }
        if (!f) {
            curvyCorners.alert("Couldn't find autoPad DIV");
            break
        }
        g.node.parentNode.replaceChild(d, g.node);
        var a = f.getElementsByTagName("script");
        for (var b = a.length - 1; b >= 0; --b) {
            a[b].parentNode.removeChild(a[b])
        }
        while (f.firstChild) {
            d.appendChild(f.removeChild(f.firstChild))
        }
        g = new curvyObject(g.spec, g.node = d);
        g.applyCorners()
    }
    curvyCorners.block_redraw = h
};
curvyCorners.adjust = function (obj, prop, newval) {
    if (!curvyBrowser.supportsCorners) {
        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 B;
    this.box = arguments[1];
    this.settings = arguments[0];
    this.topContainer = this.bottomContainer = this.shell = B = null;
    var p = this.box.clientWidth;
    if (("canHaveChildren" in this.box && !this.box.canHaveChildren) || this.box.tagName === "TABLE") {
        throw new Error(this.errmsg("You cannot apply corners to " + this.box.tagName + " elements.", "Error"))
    }
    if (!p && curvyBrowser.isIE) {
        this.box.style.zoom = 1;
        p = this.box.clientWidth
    }
    if (!p && curvyBrowser.get_style(this.box, "display") === "inline") {
        this.box.style.display = "inline-block";
        curvyCorners.alert(this.errmsg("Converting inline element to inline-block", "warning"));
        p = this.box.clientWidth
    }
    if (!p) {
        if (!this.box.parentNode) {
            throw this.newError("box has no parent!")
        }
        for (B = this.box;; B = B.parentNode) {
            if (!B || B.tagName === "BODY") {
                this.applyCorners = function () {};
                curvyCorners.alert(this.errmsg("zero-width box with no accountable parent", "warning"));
                return
            }
            if (curvyBrowser.get_style(B, "display") === "none") {
                break
            }
        }
        var u = B.style.display;
        B.style.display = "block";
        p = this.box.clientWidth
    }
    if (!p) {
        curvyCorners.alert(this.errmsg("zero-width box, cannot display", "error"));
        this.applyCorners = function () {};
        return
    }
    if (arguments[0] instanceof curvyCnrSpec) {
        this.spec = arguments[0].cloneOn(this.box)
    } else {
        this.spec = new curvyCnrSpec("");
        this.spec.setfrom(this.settings)
    }
    var J = curvyBrowser.get_style(this.box, "borderTopWidth");
    var o = curvyBrowser.get_style(this.box, "borderBottomWidth");
    var h = curvyBrowser.get_style(this.box, "borderLeftWidth");
    var c = curvyBrowser.get_style(this.box, "borderRightWidth");
    var n = curvyBrowser.get_style(this.box, "borderTopColor");
    var k = curvyBrowser.get_style(this.box, "borderBottomColor");
    var b = curvyBrowser.get_style(this.box, "borderLeftColor");
    var I = curvyBrowser.get_style(this.box, "borderRightColor");
    var d = curvyBrowser.get_style(this.box, "borderTopStyle");
    var m = curvyBrowser.get_style(this.box, "borderBottomStyle");
    var g = curvyBrowser.get_style(this.box, "borderLeftStyle");
    var a = curvyBrowser.get_style(this.box, "borderRightStyle");
    var i = curvyBrowser.get_style(this.box, "backgroundColor");
    var f = curvyBrowser.get_style(this.box, "backgroundImage");
    var F = curvyBrowser.get_style(this.box, "backgroundRepeat");
    var z, x;
    if (this.box.currentStyle && this.box.currentStyle.backgroundPositionX) {
        z = curvyBrowser.get_style(this.box, "backgroundPositionX");
        x = curvyBrowser.get_style(this.box, "backgroundPositionY")
    } else {
        z = curvyBrowser.get_style(this.box, "backgroundPosition");
        z = z.split(" ");
        x = z.length === 2 ? z[1] : 0;
        z = z[0]
    }
    var w = curvyBrowser.get_style(this.box, "position");
    var G = curvyBrowser.get_style(this.box, "paddingTop");
    var K = curvyBrowser.get_style(this.box, "paddingBottom");
    var y = curvyBrowser.get_style(this.box, "paddingLeft");
    var H = curvyBrowser.get_style(this.box, "paddingRight");
    var s = curvyBrowser.ieVer > 7 ? curvyBrowser.get_style(this.box, "filter") : null;
    var l = this.spec.get("tR");
    var r = this.spec.get("bR");
    var D = function (L) {
            if (typeof L === "number") {
                return L
            }
            if (typeof L !== "string") {
                throw new Error("unexpected styleToNPx type " + typeof L)
            }
            var t = /^[-\d.]([a-z]+)$/.exec(L);
            if (t && t[1] != "px") {
                throw new Error("Unexpected unit " + t[1])
            }
            if (isNaN(L = parseInt(L))) {
                L = 0
            }
            return L
        };
    var A = function (t) {
            return t <= 0 ? "0" : t + "px"
        };
    try {
        this.borderWidth = D(J);
        this.borderWidthB = D(o);
        this.borderWidthL = D(h);
        this.borderWidthR = D(c);
        this.boxColour = curvyObject.format_colour(i);
        this.topPadding = D(G);
        this.bottomPadding = D(K);
        this.leftPadding = D(y);
        this.rightPadding = D(H);
        this.boxWidth = p;
        this.boxHeight = this.box.clientHeight;
        this.borderColour = curvyObject.format_colour(n);
        this.borderColourB = curvyObject.format_colour(k);
        this.borderColourL = curvyObject.format_colour(b);
        this.borderColourR = curvyObject.format_colour(I);
        this.borderString = this.borderWidth + "px " + d + " " + this.borderColour;
        this.borderStringB = this.borderWidthB + "px " + m + " " + this.borderColourB;
        this.borderStringL = this.borderWidthL + "px " + g + " " + this.borderColourL;
        this.borderStringR = this.borderWidthR + "px " + a + " " + this.borderColourR;
        this.backgroundImage = ((f != "none") ? f : "");
        this.backgroundRepeat = F
    } catch (E) {
        throw this.newError(E.message)
    }
    var j = this.boxHeight;
    var C = p;
    if (curvyBrowser.isOp) {
        var v;
        z = D(z);
        x = D(x);
        if (z) {
            v = C + this.borderWidthL + this.borderWidthR;
            if (z > v) {
                z = v
            }
            z = (v / z * 100) + "%"
        }
        if (x) {
            v = j + this.borderWidth + this.borderWidthB;
            if (x > v) {
                x = v
            }
            x = (v / x * 100) + "%"
        }
    }
    if (curvyBrowser.quirksMode) {} else {
        this.boxWidth -= this.leftPadding + this.rightPadding;
        this.boxHeight -= this.topPadding + this.bottomPadding
    }
    this.contentContainer = document.createElement("div");
    if (s) {
        this.contentContainer.style.filter = s
    }
    while (this.box.firstChild) {
        this.contentContainer.appendChild(this.box.removeChild(this.box.firstChild))
    }
    if (w != "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 = (C + this.borderWidthL + this.borderWidthR) + "px";
    this.box.style.height = (j + this.borderWidth + this.borderWidthB) + "px";
    var q = document.createElement("div");
    q.style.position = "absolute";
    if (s) {
        q.style.filter = s
    }
    if (curvyBrowser.quirksMode) {
        q.style.width = (C + this.borderWidthL + this.borderWidthR) + "px"
    } else {
        q.style.width = C + "px"
    }
    q.style.height = A(j + this.borderWidth + this.borderWidthB - l - r);
    q.style.padding = "0";
    q.style.top = l + "px";
    q.style.left = "0";
    if (this.borderWidthL) {
        q.style.borderLeft = this.borderStringL
    }
    if (this.borderWidth && !l) {
        q.style.borderTop = this.borderString
    }
    if (this.borderWidthR) {
        q.style.borderRight = this.borderStringR
    }
    if (this.borderWidthB && !r) {
        q.style.borderBottom = this.borderStringB
    }
    q.style.backgroundColor = i;
    q.style.backgroundImage = this.backgroundImage;
    q.style.backgroundRepeat = this.backgroundRepeat;
    q.style.direction = "ltr";
    this.shell = this.box.appendChild(q);
    p = curvyBrowser.get_style(this.shell, "width");
    if (p === "" || p === "auto" || p.indexOf("%") !== -1) {
        throw this.newError("Shell width is " + p)
    }
    this.boxWidth = (p !== "" && p != "auto" && p.indexOf("%") == -1) ? parseInt(p) : this.shell.clientWidth;
    this.applyCorners = function () {
        this.backgroundPosX = this.backgroundPosY = 0;
        if (this.backgroundObject) {
            var Z = function (ar, ap, aq) {
                    if (ar === 0) {
                        return 0
                    }
                    if (ar === "right" || ar === "bottom") {
                        return aq - ap
                    }
                    if (ar === "center") {
                        return (aq - ap) / 2
                    }
                    if (ar.indexOf("%") > 0) {
                        return (aq - ap) * 100 / parseInt(ar)
                    }
                    return D(ar)
                };
            this.backgroundPosX = Z(z, this.backgroundObject.width, C);
            this.backgroundPosY = Z(x, this.backgroundObject.height, j)
        } else {
            if (this.backgroundImage) {
                this.backgroundPosX = D(z);
                this.backgroundPosY = D(x)
            }
        }
        if (l) {
            q = document.createElement("div");
            q.style.width = this.boxWidth + "px";
            q.style.fontSize = "1px";
            q.style.overflow = "hidden";
            q.style.position = "absolute";
            q.style.paddingLeft = this.borderWidth + "px";
            q.style.paddingRight = this.borderWidth + "px";
            q.style.height = l + "px";
            q.style.top = -l + "px";
            q.style.left = -this.borderWidthL + "px";
            this.topContainer = this.shell.appendChild(q)
        }
        if (r) {
            q = document.createElement("div");
            q.style.width = this.boxWidth + "px";
            q.style.fontSize = "1px";
            q.style.overflow = "hidden";
            q.style.position = "absolute";
            q.style.paddingLeft = this.borderWidthB + "px";
            q.style.paddingRight = this.borderWidthB + "px";
            q.style.height = r + "px";
            q.style.bottom = -r + "px";
            q.style.left = -this.borderWidthL + "px";
            this.bottomContainer = this.shell.appendChild(q)
        }
        var ah = this.spec.cornerNames();
        for (var al in ah) {
            if (!isNaN(al)) {
                var ad = ah[al];
                var ae = this.spec[ad + "R"];
                var af, ai, O, ag;
                if (ad == "tr" || ad == "tl") {
                    af = this.borderWidth;
                    ai = this.borderColour;
                    ag = this.borderWidth
                } else {
                    af = this.borderWidthB;
                    ai = this.borderColourB;
                    ag = this.borderWidthB
                }
                O = ae - ag;
                var Y = document.createElement("div");
                Y.style.height = this.spec.get(ad + "Ru");
                Y.style.width = this.spec.get(ad + "Ru");
                Y.style.position = "absolute";
                Y.style.fontSize = "1px";
                Y.style.overflow = "hidden";
                var W, V, T;
                var R = s ? parseInt(/alpha\(opacity.(\d+)\)/.exec(s)[1]) : 100;
                for (W = 0; W < ae; ++W) {
                    var Q = (W + 1 >= O) ? -1 : Math.floor(Math.sqrt(Math.pow(O, 2) - Math.pow(W + 1, 2))) - 1;
                    if (O != ae) {
                        var N = (W >= O) ? -1 : Math.ceil(Math.sqrt(Math.pow(O, 2) - Math.pow(W, 2)));
                        var L = (W + 1 >= ae) ? -1 : Math.floor(Math.sqrt(Math.pow(ae, 2) - Math.pow((W + 1), 2))) - 1
                    }
                    var t = (W >= ae) ? -1 : Math.ceil(Math.sqrt(Math.pow(ae, 2) - Math.pow(W, 2)));
                    if (Q > -1) {
                        this.drawPixel(W, 0, this.boxColour, R, (Q + 1), Y, true, ae)
                    }
                    if (O != ae) {
                        if (this.spec.antiAlias) {
                            for (V = Q + 1; V < N; ++V) {
                                if (this.backgroundImage !== "") {
                                    var M = curvyObject.pixelFraction(W, V, O) * 100;
                                    this.drawPixel(W, V, ai, R, 1, Y, M >= 30, ae)
                                } else {
                                    if (this.boxColour !== "transparent") {
                                        var ac = curvyObject.BlendColour(this.boxColour, ai, curvyObject.pixelFraction(W, V, O));
                                        this.drawPixel(W, V, ac, R, 1, Y, false, ae)
                                    } else {
                                        this.drawPixel(W, V, ai, R >> 1, 1, Y, false, ae)
                                    }
                                }
                            }
                            if (L >= N) {
                                if (N == -1) {
                                    N = 0
                                }
                                this.drawPixel(W, N, ai, R, (L - N + 1), Y, false, 0)
                            }
                            T = ai;
                            V = L
                        } else {
                            if (L > Q) {
                                this.drawPixel(W, (Q + 1), ai, R, (L - Q), Y, false, 0)
                            }
                        }
                    } else {
                        T = this.boxColour;
                        V = Q
                    }
                    if (this.spec.antiAlias && this.boxColour !== "transparent") {
                        while (++V < t) {
                            this.drawPixel(W, V, T, (curvyObject.pixelFraction(W, V, ae) * R), 1, Y, ag <= 0, ae)
                        }
                    }
                }
                var ak;
                for (v = 0, ak = Y.childNodes.length; v < ak; ++v) {
                    var X = Y.childNodes[v];
                    var aj = parseInt(X.style.top);
                    var an = parseInt(X.style.left);
                    var ao = parseInt(X.style.height);
                    if (ad == "tl" || ad == "bl") {
                        X.style.left = (ae - an - 1) + "px"
                    }
                    if (ad == "tr" || ad == "tl") {
                        X.style.top = (ae - ao - aj) + "px"
                    }
                    X.style.backgroundRepeat = this.backgroundRepeat;
                    if (this.backgroundImage) {
                        switch (ad) {
                        case "tr":
                            X.style.backgroundPosition = (this.backgroundPosX - this.borderWidthL + ae - C - an) + "px " + (this.backgroundPosY + ao + aj + this.borderWidth - ae) + "px";
                            break;
                        case "tl":
                            X.style.backgroundPosition = (this.backgroundPosX - ae + an + 1 + this.borderWidthL) + "px " + (this.backgroundPosY - ae + ao + aj + this.borderWidth) + "px";
                            break;
                        case "bl":
                            X.style.backgroundPosition = (this.backgroundPosX - ae + an + 1 + this.borderWidthL) + "px " + (this.backgroundPosY - j - this.borderWidth + (curvyBrowser.quirksMode ? aj : -aj) + ae) + "px";
                            break;
                        case "br":
                            if (curvyBrowser.quirksMode) {
                                X.style.backgroundPosition = (this.backgroundPosX - this.borderWidthL - C + ae - an) + "px " + (this.backgroundPosY - j - this.borderWidth + aj + ae) + "px"
                            } else {
                                X.style.backgroundPosition = (this.backgroundPosX - this.borderWidthL - C + ae - an) + "px " + (this.backgroundPosY - j - this.borderWidth + ae - aj) + "px"
                            }
                        }
                    }
                }
                switch (ad) {
                case "tl":
                    Y.style.top = Y.style.left = "0";
                    this.topContainer.appendChild(Y);
                    break;
                case "tr":
                    Y.style.top = Y.style.right = "0";
                    this.topContainer.appendChild(Y);
                    break;
                case "bl":
                    Y.style.bottom = Y.style.left = "0";
                    this.bottomContainer.appendChild(Y);
                    break;
                case "br":
                    Y.style.bottom = Y.style.right = "0";
                    this.bottomContainer.appendChild(Y)
                }
            }
        }
        var aa = {
            t: this.spec.radiusdiff("t"),
            b: this.spec.radiusdiff("b")
        };
        for (var U in aa) {
            if (typeof U === "function") {
                continue
            }
            if (!this.spec.get(U + "R")) {
                continue
            }
            if (aa[U]) {
                var am = (this.spec[U + "lR"] < this.spec[U + "rR"]) ? U + "l" : U + "r";
                var P = document.createElement("div");
                P.style.height = aa[U] + "px";
                P.style.width = this.spec.get(am + "Ru");
                P.style.position = "absolute";
                P.style.fontSize = "1px";
                P.style.overflow = "hidden";
                P.style.backgroundColor = this.boxColour;
                if (s) {
                    P.style.filter = s
                }
                P.style.backgroundImage = this.backgroundImage;
                P.style.backgroundRepeat = this.backgroundRepeat;
                switch (am) {
                case "tl":
                    P.style.bottom = P.style.left = "0";
                    P.style.borderLeft = this.borderStringL;
                    P.style.backgroundPosition = this.backgroundPosX + "px " + (this.borderWidth + this.backgroundPosY - this.spec.tlR) + "px";
                    this.topContainer.appendChild(P);
                    break;
                case "tr":
                    P.style.bottom = P.style.right = "0";
                    P.style.borderRight = this.borderStringR;
                    P.style.backgroundPosition = (this.backgroundPosX - this.boxWidth + this.spec.trR) + "px " + (this.borderWidth + this.backgroundPosY - this.spec.trR) + "px";
                    this.topContainer.appendChild(P);
                    break;
                case "bl":
                    P.style.top = P.style.left = "0";
                    P.style.borderLeft = this.borderStringL;
                    P.style.backgroundPosition = this.backgroundPosX + "px " + (this.backgroundPosY - this.borderWidth - this.boxHeight + aa[U] + this.spec.blR) + "px";
                    this.bottomContainer.appendChild(P);
                    break;
                case "br":
                    P.style.top = P.style.right = "0";
                    P.style.borderRight = this.borderStringR;
                    P.style.backgroundPosition = (this.borderWidthL + this.backgroundPosX - this.boxWidth + this.spec.brR) + "px " + (this.backgroundPosY - this.borderWidth - this.boxHeight + aa[U] + this.spec.brR) + "px";
                    this.bottomContainer.appendChild(P)
                }
            }
            var S = document.createElement("div");
            if (s) {
                S.style.filter = s
            }
            S.style.position = "relative";
            S.style.fontSize = "1px";
            S.style.overflow = "hidden";
            S.style.width = this.fillerWidth(U);
            S.style.backgroundColor = this.boxColour;
            S.style.backgroundImage = this.backgroundImage;
            S.style.backgroundRepeat = this.backgroundRepeat;
            switch (U) {
            case "t":
                if (this.topContainer) {
                    if (curvyBrowser.quirksMode) {
                        S.style.height = 100 + l + "px"
                    } else {
                        S.style.height = 100 + l - this.borderWidth + "px"
                    }
                    S.style.marginLeft = this.spec.tlR ? (this.spec.tlR - this.borderWidthL) + "px" : "0";
                    S.style.borderTop = this.borderString;
                    if (this.backgroundImage) {
                        var ab = this.spec.tlR ? (this.borderWidthL + this.backgroundPosX - this.spec.tlR) + "px " : this.backgroundPosX + "px ";
                        S.style.backgroundPosition = ab + this.backgroundPosY + "px";
                        this.shell.style.backgroundPosition = this.backgroundPosX + "px " + (this.backgroundPosY - l + this.borderWidthL) + "px"
                    }
                    this.topContainer.appendChild(S)
                }
                break;
            case "b":
                if (this.bottomContainer) {
                    if (curvyBrowser.quirksMode) {
                        S.style.height = r + "px"
                    } else {
                        S.style.height = r - this.borderWidthB + "px"
                    }
                    S.style.marginLeft = this.spec.blR ? (this.spec.blR - this.borderWidthL) + "px" : "0";
                    S.style.borderBottom = this.borderStringB;
                    if (this.backgroundImage) {
                        var ab = this.spec.blR ? (this.backgroundPosX + this.borderWidthL - this.spec.blR) + "px " : this.backgroundPosX + "px ";
                        S.style.backgroundPosition = ab + (this.backgroundPosY - j - this.borderWidth + r) + "px"
                    }
                    this.bottomContainer.appendChild(S)
                }
            }
        }
        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";
        U = C;
        if (!curvyBrowser.quirksMode) {
            U -= this.leftPadding + this.rightPadding
        }
        this.contentContainer.style.width = U + "px";
        this.contentContainer.style.textAlign = curvyBrowser.get_style(this.box, "textAlign");
        this.box.style.textAlign = "left";
        this.box.appendChild(this.contentContainer);
        if (B) {
            B.style.display = u
        }
    };
    if (this.backgroundImage) {
        z = this.backgroundCheck(z);
        x = this.backgroundCheck(x);
        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 (k, h, a, g, i, j, c, f) {
    var b = document.createElement("div");
    b.style.height = i + "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 - (f - k) + this.borderWidth) + "px -" + ((this.boxHeight + d + h) - this.borderWidth) + "px"
    }
    if (g != 100) {
        curvyObject.setOpacity(b, g)
    }
    b.style.top = h + "px";
    b.style.left = k + "px";
    j.appendChild(b)
};
curvyObject.prototype.fillerWidth = function (b) {
    var a, c;
    a = curvyBrowser.quirksMode ? 0 : this.spec.radiusCount(b) * this.borderWidthL;
    if ((c = this.boxWidth - this.spec.radiusSum(b) + a) < 0) {
        throw this.newError("Radius exceeds box width")
    }
    return c + "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 (m, k, h) {
    if (m === "transparent" || k === "transparent") {
        throw this.newError("Cannot blend with transparent")
    }
    if (m.charAt(0) !== "#") {
        m = curvyObject.format_colour(m)
    }
    if (k.charAt(0) !== "#") {
        k = curvyObject.format_colour(k)
    }
    var d = parseInt(m.substr(1, 2), 16);
    var l = parseInt(m.substr(3, 2), 16);
    var g = parseInt(m.substr(5, 2), 16);
    var c = parseInt(k.substr(1, 2), 16);
    var j = parseInt(k.substr(3, 2), 16);
    var f = parseInt(k.substr(5, 2), 16);
    if (h > 1 || h < 0) {
        h = 1
    }
    var i = Math.round((d * h) + (c * (1 - h)));
    if (i > 255) {
        i = 255
    }
    if (i < 0) {
        i = 0
    }
    var b = Math.round((l * h) + (j * (1 - h)));
    if (b > 255) {
        b = 255
    }
    if (b < 0) {
        b = 0
    }
    var a = Math.round((g * h) + (f * (1 - h)));
    if (a > 255) {
        a = 255
    }
    if (a < 0) {
        a = 0
    }
    return "#" + curvyObject.IntToHex(i) + curvyObject.IntToHex(b) + curvyObject.IntToHex(a)
};
curvyObject.pixelFraction = function (i, h, a) {
    var k;
    var f = a * a;
    var b = new Array(2);
    var g = new Array(2);
    var j = 0;
    var c = "";
    var d = Math.sqrt(f - Math.pow(i, 2));
    if (d >= h && d < (h + 1)) {
        c = "Left";
        b[j] = 0;
        g[j] = d - h;
        ++j
    }
    d = Math.sqrt(f - Math.pow(h + 1, 2));
    if (d >= i && d < (i + 1)) {
        c += "Top";
        b[j] = d - i;
        g[j] = 1;
        ++j
    }
    d = Math.sqrt(f - Math.pow(i + 1, 2));
    if (d >= h && d < (h + 1)) {
        c += "Right";
        b[j] = 1;
        g[j] = d - h;
        ++j
    }
    d = Math.sqrt(f - Math.pow(h, 2));
    if (d >= i && d < (i + 1)) {
        c += "Bottom";
        b[j] = d - i;
        g[j] = 0
    }
    switch (c) {
    case "LeftRight":
        k = Math.min(g[0], g[1]) + ((Math.max(g[0], g[1]) - Math.min(g[0], g[1])) / 2);
        break;
    case "TopRight":
        k = 1 - (((1 - b[0]) * (1 - g[1])) / 2);
        break;
    case "TopBottom":
        k = Math.min(b[0], b[1]) + ((Math.max(b[0], b[1]) - Math.min(b[0], b[1])) / 2);
        break;
    case "LeftBottom":
        k = g[0] * b[1] / 2;
        break;
    default:
        k = 1
    }
    return k
};
curvyObject.rgb2Array = function (a) {
    var b = a.substring(4, a.indexOf(")"));
    return b.split(/,\s*/)
};
curvyObject.rgb2Hex = function (b) {
    try {
        var c = curvyObject.rgb2Array(b);
        var h = parseInt(c[0]);
        var f = parseInt(c[1]);
        var a = parseInt(c[2]);
        var d = "#" + curvyObject.IntToHex(h) + curvyObject.IntToHex(f) + curvyObject.IntToHex(a)
    } catch (g) {
        var i = "getMessage" in g ? g.getMessage() : g.message;
        throw new Error("Error (" + i + ") converting RGB value to Hex in rgb2Hex")
    }
    return d
};
curvyObject.setOpacity = function (g, c) {
    c = (c == 100) ? 99.999 : c;
    if (curvyBrowser.isSafari && g.tagName != "IFRAME") {
        var b = curvyObject.rgb2Array(g.style.backgroundColor);
        var f = parseInt(b[0]);
        var d = parseInt(b[1]);
        var a = parseInt(b[2]);
        g.style.backgroundColor = "rgba(" + f + ", " + d + ", " + a + ", " + c / 100 + ")"
    } else {
        if (typeof g.style.opacity !== "undefined") {
            g.style.opacity = c / 100
        } else {
            if (typeof g.style.MozOpacity !== "undefined") {
                g.style.MozOpacity = c / 100
            } else {
                if (typeof g.style.filter !== "undefined") {
                    g.style.filter = "alpha(opacity=" + c + ")"
                } else {
                    if (typeof g.style.KHTMLOpacity !== "undefined") {
                        g.style.KHTMLOpacity = c / 100
                    }
                }
            }
        }
    }
};
curvyCorners.addEvent = function (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
};
if (typeof addEvent === "undefined") {
    addEvent = curvyCorners.addEvent
}
curvyObject.getComputedColour = function (g) {
    var h = document.createElement("DIV");
    h.style.backgroundColor = g;
    document.body.appendChild(h);
    if (window.getComputedStyle) {
        var f = document.defaultView.getComputedStyle(h, null).getPropertyValue("background-color");
        h.parentNode.removeChild(h);
        if (f.substr(0, 3) === "rgb") {
            f = curvyObject.rgb2Hex(f)
        }
        return f
    } else {
        var a = document.body.createTextRange();
        a.moveToElementText(h);
        a.execCommand("ForeColor", false, g);
        var b = a.queryCommandValue("ForeColor");
        var c = "rgb(" + (b & 255) + ", " + ((b & 65280) >> 8) + ", " + ((b & 16711680) >> 16) + ")";
        h.parentNode.removeChild(h);
        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 (j, g) {
    var f = new Array;
    if (g === undefined) {
        g = document
    }
    j = j.split(".");
    var a = "*";
    if (j.length === 1) {
        a = j[0];
        j = false
    } else {
        if (j[0]) {
            a = j[0]
        }
        j = j[1]
    }
    var d, c, b;
    if (a.charAt(0) === "#") {
        c = document.getElementById(a.substr(1));
        if (c) {
            f.push(c)
        }
    } else {
        c = g.getElementsByTagName(a);
        b = c.length;
        if (j) {
            var h = new RegExp("(^|\\s)" + j + "(\\s|$)");
            for (d = 0; d < b; ++d) {
                if (h.test(c[d].className)) {
                    f.push(c[d])
                }
            }
        } else {
            for (d = 0; d < b; ++d) {
                f.push(c[d])
            }
        }
    }
    return f
};
curvyCorners.getElementsBySelector = function (f, g) {
    var b;
    var h = f[0];
    if (g === undefined) {
        g = document
    }
    if (h.indexOf("#") === -1) {
        b = curvyCorners.getElementsByClass(h, g)
    } else {
        var d = g.getElementById(h.substr(1));
        if (!d) {
            return []
        }
        b = [d]
    }
    if (f.length > 1) {
        var a = [];
        for (var c = b.length; --c >= 0;) {
            a = a.concat(curvyCorners.getElementsBySelector(f.slice(1), b[c]))
        }
        b = a
    }
    return b
};
if (curvyBrowser.supportsCorners) {
    var curvyCornersNoAutoScan = true;
    curvyCorners.init = function () {}
} else {
    curvyCorners.scanStyles = function () {
        function b(h) {
            if (!parseInt(h)) {
                return "px"
            }
            var i = /^[\d.]+(\w+)$/.exec(h);
            return i[1]
        }
        var f, d, c;
        if (curvyBrowser.isIE) {
            function a(o) {
                var j = o.style,
                    h, i, m, l, n;
                if (curvyBrowser.ieVer > 6) {
                    h = j["-moz-border-radius"] || 0;
                    i = j["-moz-border-radius-topright"] || 0;
                    m = j["-moz-border-radius-topleft"] || 0;
                    l = j["-moz-border-radius-bottomright"] || 0;
                    n = j["-moz-border-radius-bottomleft"] || 0
                } else {
                    h = j["moz-border-radius"] || 0;
                    i = j["moz-border-radius-topright"] || 0;
                    m = j["moz-border-radius-topleft"] || 0;
                    l = j["moz-border-radius-bottomright"] || 0;
                    n = j["moz-border-radius-bottomleft"] || 0
                }
                if (h) {
                    var p = h.split("/");
                    p = p[0].split(/\s+/);
                    if (p[p.length - 1] === "") {
                        p.pop()
                    }
                    switch (p.length) {
                    case 3:
                        m = p[0];
                        i = n = p[1];
                        l = p[2];
                        h = false;
                        break;
                    case 2:
                        m = l = p[0];
                        i = n = p[1];
                        h = false;
                    case 1:
                        break;
                    case 4:
                        m = p[0];
                        i = p[1];
                        l = p[2];
                        n = p[3];
                        h = false;
                        break;
                    default:
                        curvyCorners.alert("Illegal corners specification: " + h)
                    }
                }
                if (h || m || i || l || n) {
                    var k = new curvyCnrSpec(o.selectorText);
                    if (h) {
                        k.setcorner(null, null, parseInt(h), b(h))
                    } else {
                        if (i) {
                            k.setcorner("t", "r", parseInt(i), b(i))
                        }
                        if (m) {
                            k.setcorner("t", "l", parseInt(m), b(m))
                        }
                        if (n) {
                            k.setcorner("b", "l", parseInt(n), b(n))
                        }
                        if (l) {
                            k.setcorner("b", "r", parseInt(l), b(l))
                        }
                    }
                    curvyCorners(k)
                }
            }
            for (f = 0; f < document.styleSheets.length; ++f) {
                try {
                    if (document.styleSheets[f].imports) {
                        for (d = 0; d < document.styleSheets[f].imports.length; ++d) {
                            for (c = 0; c < document.styleSheets[f].imports[d].rules.length; ++c) {
                                a(document.styleSheets[f].imports[d].rules[c])
                            }
                        }
                    }
                    for (d = 0; d < document.styleSheets[f].rules.length; ++d) {
                        a(document.styleSheets[f].rules[d])
                    }
                } catch (g) {
                    if (typeof curvyCornersVerbose !== "undefined" && curvyCornersVerbose) {
                        alert(g.message + " - ignored")
                    }
                }
            }
        } else {
            if (curvyBrowser.isOp) {
                for (f = 0; f < document.styleSheets.length; ++f) {
                    if (operasheet.contains_border_radius(f)) {
                        c = new operasheet(f);
                        for (d in c.rules) {
                            if (!isNaN(d)) {
                                curvyCorners(c.rules[d])
                            }
                        }
                    }
                }
            } /*else {
                curvyCorners.alert("Scanstyles does nothing in Webkit/Firefox/Opera")
            }*/
        }
    };
    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 {
        curvyCorners.addEvent(window, "load", curvyCorners.init, false)
    }
};
