/*
 * g.Raphael 0.4.1 - Charting library, based on Raphaël
 *
 * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com)
 * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
 */
(function () {
    var a = Math.max,
        c = Math.min;
    Raphael.fn.g = Raphael.fn.g || {};
    Raphael.fn.g.markers = {
        disc: "disc",
        o: "disc",
        flower: "flower",
        f: "flower",
        diamond: "diamond",
        d: "diamond",
        square: "square",
        s: "square",
        triangle: "triangle",
        t: "triangle",
        star: "star",
        "*": "star",
        cross: "cross",
        x: "cross",
        plus: "plus",
        "+": "plus",
        arrow: "arrow",
        "->": "arrow"
    };
    Raphael.fn.g.shim = {
        stroke: "none",
        fill: "#000",
        "fill-opacity": 0
    };
    Raphael.fn.g.txtattr = {
        font: "12px Arial, sans-serif"
    };
    Raphael.fn.g.colors = [];
    var e = [0.6, 0.2, 0.05, 0.1333, 0.75, 0];
    for (var b = 0; b < 10; b++) {
        if (b < e.length) {
            Raphael.fn.g.colors.push("hsb(" + e[b] + ", .75, .75)");
        } else {
            Raphael.fn.g.colors.push("hsb(" + e[b - e.length] + ", 1, .5)");
        }
    }
    Raphael.fn.g.text = function (f, h, g) {
        return this.text(f, h, g).attr(this.g.txtattr);
    };
    Raphael.fn.g.labelise = function (f, h, g) {
        if (f) {
            return (f + "").replace(/(##+(?:\.#+)?)|(%%+(?:\.%+)?)/g, function (i, k, j) {
                if (k) {
                    return (+h).toFixed(k.replace(/^#+\.?/g, "").length);
                }
                if (j) {
                    return (h * 100 / g).toFixed(j.replace(/^%+\.?/g, "").length) + "%";
                }
            });
        } else {
            return (+h).toFixed(0);
        }
    };
    Raphael.fn.g.finger = function (l, k, g, m, h, i, j) {
        if ((h && !m) || (!h && !g)) {
            return j ? "" : this.path();
        }
        i = {
            square: "square",
            sharp: "sharp",
            soft: "soft"
        }[i] || "round";
        var o;
        m = Math.round(m);
        g = Math.round(g);
        l = Math.round(l);
        k = Math.round(k);
        switch (i) {
        case "round":
            if (!h) {
                var f = ~~ (m / 2);
                if (g < f) {
                    f = g;
                    o = ["M", l + 0.5, k + 0.5 - ~~ (m / 2), "l", 0, 0, "a", f, ~~ (m / 2), 0, 0, 1, 0, m, "l", 0, 0, "z"];
                } else {
                    o = ["M", l + 0.5, k + 0.5 - f, "l", g - f, 0, "a", f, f, 0, 1, 1, 0, m, "l", f - g, 0, "z"];
                }
            } else {
                f = ~~ (g / 2);
                if (m < f) {
                    f = m;
                    o = ["M", l - ~~ (g / 2), k, "l", 0, 0, "a", ~~ (g / 2), f, 0, 0, 1, g, 0, "l", 0, 0, "z"];
                } else {
                    o = ["M", l - f, k, "l", 0, f - m, "a", f, f, 0, 1, 1, g, 0, "l", 0, m - f, "z"];
                }
            }
            break;
        case "sharp":
            if (!h) {
                var n = ~~ (m / 2);
                o = ["M", l, k + n, "l", 0, -m, a(g - n, 0), 0, c(n, g), n, -c(n, g), n + (n * 2 < m), "z"];
            } else {
                n = ~~ (g / 2);
                o = ["M", l + n, k, "l", -g, 0, 0, -a(m - n, 0), n, -c(n, m), n, c(n, m), n, "z"];
            }
            break;
        case "square":
            if (!h) {
                o = ["M", l, k + ~~ (m / 2), "l", 0, -m, g, 0, 0, m, "z"];
            } else {
                o = ["M", l + ~~ (g / 2), k, "l", 1 - g, 0, 0, -m, g - 1, 0, "z"];
            }
            break;
        case "soft":
            if (!h) {
                f = c(g, Math.round(m / 5));
                o = ["M", l + 0.5, k + 0.5 - ~~ (m / 2), "l", g - f, 0, "a", f, f, 0, 0, 1, f, f, "l", 0, m - f * 2, "a", f, f, 0, 0, 1, -f, f, "l", f - g, 0, "z"];
            } else {
                f = c(Math.round(g / 5), m);
                o = ["M", l - ~~ (g / 2), k, "l", 0, f - m, "a", f, f, 0, 0, 1, f, -f, "l", g - 2 * f, 0, "a", f, f, 0, 0, 1, f, f, "l", 0, m - f, "z"];
            }
        }
        if (j) {
            return o.join(",");
        } else {
            return this.path(o);
        }
    };
    Raphael.fn.g.disc = function (f, h, g) {
        return this.circle(f, h, g);
    };
    Raphael.fn.g.line = function (f, h, g) {
        return this.rect(f - g, h - g / 5, 2 * g, 2 * g / 5);
    };
    Raphael.fn.g.square = function (f, h, g) {
        g = g * 0.7;
        return this.rect(f - g, h - g, 2 * g, 2 * g);
    };
    Raphael.fn.g.triangle = function (f, h, g) {
        g *= 1.75;
        return this.path("M".concat(f, ",", h, "m0-", g * 0.58, "l", g * 0.5, ",", g * 0.87, "-", g, ",0z"));
    };
    Raphael.fn.g.diamond = function (f, h, g) {
        return this.path(["M", f, h - g, "l", g, g, -g, g, -g, -g, g, -g, "z"]);
    };
    Raphael.fn.g.flower = function (j, h, f, g) {
        f = f * 1.25;
        var o = f,
            m = o * 0.5;
        g = +g < 3 || !g ? 5 : g;
        var p = ["M", j, h + m, "Q"],
            l;
        for (var k = 1; k < g * 2 + 1; k++) {
            l = k % 2 ? o : m;p = p.concat([+(j + l * Math.sin(k * Math.PI / g)).toFixed(3), +(h + l * Math.cos(k * Math.PI / g)).toFixed(3)]);
        }
        p.push("z");
        return this.path(p.join(","));
    };
    Raphael.fn.g.star = function (f, n, m, h, g) {
        h = h || m * 0.382;
        g = g || 5;
        var l = ["M", f, n + h, "L"],
            k;
        for (var j = 1; j < g * 2; j++) {
            k = j % 2 ? m : h;l = l.concat([(f + k * Math.sin(j * Math.PI / g)), (n + k * Math.cos(j * Math.PI / g))]);
        }
        l.push("z");
        return this.path(l.join(","));
    };
    Raphael.fn.g.cross = function (f, h, g) {
        g = g / 2.5;
        return this.path("M".concat(f - g, ",", h, "l", [-g, -g, g, -g, g, g, g, -g, g, g, -g, g, g, g, -g, g, -g, -g, -g, g, -g, -g, "z"]));
    };
    Raphael.fn.g.plus = function (f, h, g) {
        g = g / 2;
        return this.path("M".concat(f - g / 2, ",", h - g / 2, "l", [0, -g, g, 0, 0, g, g, 0, 0, g, -g, 0, 0, g, -g, 0, 0, -g, -g, 0, 0, -g, "z"]));
    };
    Raphael.fn.g.arrow = function (f, h, g) {
        return this.path("M".concat(f - g * 0.7, ",", h - g * 0.4, "l", [g * 0.6, 0, 0, -g * 0.4, g, g * 0.8, -g, g * 0.8, 0, -g * 0.4, -g * 0.6, 0], "z"));
    };
    Raphael.fn.g.tag = function (f, m, l, k, i) {
        k = k || 0;
        i = i == null ? 5 : i;l = l == null ? "$9.99" : l;
        var h = 0.5522 * i,
            g = this.set(),
            j = 3;g.push(this.path().attr({
            fill: "#000",
            stroke: "#000"
        }));g.push(this.text(f, m, l).attr(this.g.txtattr).attr({
            fill: "#fff",
            "font-family": "Helvetica, Arial"
        }));g.update = function () {
            this.rotate(0, f, m);
            var o = this[1].getBBox();
            if (o.height >= i * 2) {
                this[0].attr({
                    path: ["M", f, m + i, "a", i, i, 0, 1, 1, 0, -i * 2, i, i, 0, 1, 1, 0, i * 2, "m", 0, -i * 2 - j, "a", i + j, i + j, 0, 1, 0, 0, (i + j) * 2, "L", f + i + j, m + o.height / 2 + j, "l", o.width + 2 * j, 0, 0, -o.height - 2 * j, -o.width - 2 * j, 0, "L", f, m - i - j].join(",")
                });
            } else {
                var n = Math.sqrt(Math.pow(i + j, 2) - Math.pow(o.height / 2 + j, 2));
                this[0].attr({
                    path: ["M", f, m + i, "c", -h, 0, -i, h - i, -i, -i, 0, -h, i - h, -i, i, -i, h, 0, i, i - h, i, i, 0, h, h - i, i, -i, i, "M", f + n, m - o.height / 2 - j, "a", i + j, i + j, 0, 1, 0, 0, o.height + 2 * j, "l", i + j - n + o.width + 2 * j, 0, 0, -o.height - 2 * j, "L", f + n, m - o.height / 2 - j].join(",")
                });
            }
            this[1].attr({
                x: f + i + j + o.width / 2,
                y: m
            });
            k = (360 - k) % 360;
            this.rotate(k, f, m);
            k > 90 && k < 270 && this[1].attr({
                x: f - i - j - o.width / 2,
                y: m,
                rotation: [180 + k, f, m]
            });
            return this;
        };g.update();
        return g;
    };
    Raphael.fn.g.popupit = function (l, k, m, g, t) {
        g = g == null ? 2 : g;t = t || 5;l = Math.round(l);k = Math.round(k);
        var j = m.getBBox(),
            n = Math.round(j.width / 2),
            i = Math.round(j.height / 2),
            s = [0, n + t * 2, 0, -n - t * 2],
            o = [-i * 2 - t * 3, -i - t, 0, -i - t],
            f = ["M", l - s[g], k - o[g], "l", -t, (g == 2) * -t, -a(n - t, 0), 0, "a", t, t, 0, 0, 1, -t, -t, "l", 0, -a(i - t, 0), (g == 3) * -t, -t, (g == 3) * t, -t, 0, -a(i - t, 0), "a", t, t, 0, 0, 1, t, -t, "l", a(n - t, 0), 0, t, !g * -t, t, !g * t, a(n - t, 0), 0, "a", t, t, 0, 0, 1, t, t, "l", 0, a(i - t, 0), (g == 1) * t, t, (g == 1) * -t, t, 0, a(i - t, 0), "a", t, t, 0, 0, 1, -t, t, "l", -a(n - t, 0), 0, "z"].join(","),
            q = [{
                x: l,
                y: k + t * 2 + i
            },
            {
                x: l - t * 2 - n,
                y: k
            },
            {
                x: l,
                y: k - t * 2 - i
            },
            {
                x: l + t * 2 + n,
                y: k
            }][g];m.translate(q.x - n - j.x, q.y - i - j.y);
        return this.path(f).attr({
            fill: "#000",
            stroke: "none"
        }).insertBefore(m.node ? m : m[0]);
    };
    Raphael.fn.g.popup = function (f, l, k, g, i) {
        g = g == null ? 2 : g > 3 ? 3 : g;i = i || 5;k = k || "$9.99";
        var h = this.set(),
            j = 3;h.push(this.path().attr({
            fill: "#000",
            stroke: "#000"
        }));h.push(this.text(f, l, k).attr(this.g.txtattr).attr({
            fill: "#fff",
            "font-family": "Helvetica, Arial"
        }));h.update = function (o, n, q) {
            o = o || f;
            n = n || l;
            var t = this[1].getBBox(),
                u = t.width / 2,
                s = t.height / 2,
                y = [0, u + i * 2, 0, -u - i * 2],
                v = [-s * 2 - i * 3, -s - i, 0, -s - i],
                m = ["M", o - y[g], n - v[g], "l", -i, (g == 2) * -i, -a(u - i, 0), 0, "a", i, i, 0, 0, 1, -i, -i, "l", 0, -a(s - i, 0), (g == 3) * -i, -i, (g == 3) * i, -i, 0, -a(s - i, 0), "a", i, i, 0, 0, 1, i, -i, "l", a(u - i, 0), 0, i, !g * -i, i, !g * i, a(u - i, 0), 0, "a", i, i, 0, 0, 1, i, i, "l", 0, a(s - i, 0), (g == 1) * i, i, (g == 1) * -i, i, 0, a(s - i, 0), "a", i, i, 0, 0, 1, -i, i, "l", -a(u - i, 0), 0, "z"].join(","),
                x = [{
                    x: o,
                    y: n + i * 2 + s
                },
                {
                    x: o - i * 2 - u,
                    y: n
                },
                {
                    x: o,
                    y: n - i * 2 - s
                },
                {
                    x: o + i * 2 + u,
                    y: n
                }][g];
            x.path = m;
            if (q) {
                this.animate(x, 500, ">");
            } else {
                this.attr(x);
            }
            return this;
        };
        return h.update(f, l);
    };
    Raphael.fn.g.flag = function (f, k, j, i) {
        i = i || 0;
        j = j || "$9.99";
        var g = this.set(),
            h = 3;
        g.push(this.path().attr({
            fill: "#000",
            stroke: "#000"
        }));
        g.push(this.text(f, k, j).attr(this.g.txtattr).attr({
            fill: "#fff",
            "font-family": "Helvetica, Arial"
        }));
        g.update = function (l, o) {
            this.rotate(0, l, o);
            var n = this[1].getBBox(),
                m = n.height / 2;
            this[0].attr({
                path: ["M", l, o, "l", m + h, -m - h, n.width + 2 * h, 0, 0, n.height + 2 * h, -n.width - 2 * h, 0, "z"].join(",")
            });
            this[1].attr({
                x: l + m + h + n.width / 2,
                y: o
            });
            i = 360 - i;
            this.rotate(i, l, o);
            i > 90 && i < 270 && this[1].attr({
                x: l - r - h - n.width / 2,
                y: o,
                rotation: [180 + i, l, o]
            });
            return this;
        };
        return g.update(f, k);
    };
    Raphael.fn.g.label = function (f, i, h) {
        var g = this.set();
        g.push(this.rect(f, i, 10, 10).attr({
            stroke: "none",
            fill: "#000"
        }));
        g.push(this.text(f, i, h).attr(this.g.txtattr).attr({
            fill: "#fff"
        }));
        g.update = function () {
            var k = this[1].getBBox(),
                j = c(k.width + 10, k.height + 10) / 2;
            this[0].attr({
                x: k.x - j / 2,
                y: k.y - j / 2,
                width: k.width + j,
                height: k.height + j,
                r: j
            });
        };
        g.update();
        return g;
    };
    Raphael.fn.g.labelit = function (h) {
        var g = h.getBBox(),
            f = c(20, g.width + 10, g.height + 10) / 2;
        return this.rect(g.x - f / 2, g.y - f / 2, g.width + f, g.height + f, f).attr({
            stroke: "none",
            fill: "#000"
        }).insertBefore(h.node ? h : h[0]);
    };
    Raphael.fn.g.drop = function (f, k, j, h, i) {
        h = h || 30;
        i = i || 0;
        var g = this.set();
        g.push(this.path(["M", f, k, "l", h, 0, "A", h * 0.4, h * 0.4, 0, 1, 0, f + h * 0.7, k - h * 0.7, "z"]).attr({
            fill: "#000",
            stroke: "none",
            rotation: [22.5 - i, f, k]
        }));
        i = (i + 90) * Math.PI / 180;
        g.push(this.text(f + h * Math.sin(i), k + h * Math.cos(i), j).attr(this.g.txtattr).attr({
            "font-size": h * 12 / 30,
            fill: "#fff"
        }));
        g.drop = g[0];
        g.text = g[1];
        return g;
    };
    Raphael.fn.g.blob = function (g, m, l, k, i) {
        k = (+k + 1 ? k : 45) + 90;
        i = i || 12;
        var f = Math.PI / 180,
            j = i * 12 / 12;
        var h = this.set();
        h.push(this.path().attr({
            fill: "#000",
            stroke: "none"
        }));
        h.push(this.text(g + i * Math.sin((k) * f), m + i * Math.cos((k) * f) - j / 2, l).attr(this.g.txtattr).attr({
            "font-size": j,
            fill: "#fff"
        }));
        h.update = function (t, s, y) {
            t = t || g;
            s = s || m;
            var A = this[1].getBBox(),
                D = a(A.width + j, i * 25 / 12),
                z = a(A.height + j, i * 25 / 12),
                o = t + i * Math.sin((k - 22.5) * f),
                B = s + i * Math.cos((k - 22.5) * f),
                q = t + i * Math.sin((k + 22.5) * f),
                C = s + i * Math.cos((k + 22.5) * f),
                F = (q - o) / 2,
                E = (C - B) / 2,
                p = D / 2,
                n = z / 2,
                x = -Math.sqrt(Math.abs(p * p * n * n - p * p * E * E - n * n * F * F) / (p * p * E * E + n * n * F * F)),
                v = x * p * E / n + (q + o) / 2,
                u = x * -n * F / p + (C + B) / 2;
            if (y) {
                this.animate({
                    x: v,
                    y: u,
                    path: ["M", g, m, "L", q, C, "A", p, n, 0, 1, 1, o, B, "z"].join(",")
                }, 500, ">");
            } else {
                this.attr({
                    x: v,
                    y: u,
                    path: ["M", g, m, "L", q, C, "A", p, n, 0, 1, 1, o, B, "z"].join(",")
                });
            }
            return this;
        };
        h.update(g, m);
        return h;
    };
    Raphael.fn.g.colorValue = function (i, h, g, f) {
        return "hsb(" + [c((1 - i / h) * 0.4, 1), g || 0.75, f || 0.75] + ")";
    };
    Raphael.fn.g.snapEnds = function (n, o, m) {
        var k = n,
            p = o;
        if (k == p) {
            return {
                from: k,
                to: p,
                power: 0
            };
        }
        function q(f) {
            return Math.abs(f - 0.5) < 0.25 ? ~~ (f) + 0.5 : Math.round(f);
        }
        var l = (p - k) / m,
            g = ~~ (l),
            j = g,
            h = 0;
        if (g) {
            while (j) {
                h--;
                j = ~~ (l * Math.pow(10, h)) / Math.pow(10, h);
            }
            h++;
        } else {
            while (!g) {
                h = h || 1;
                g = ~~ (l * Math.pow(10, h)) / Math.pow(10, h);
                h++;
            }
            h && h--;
        }
        p = q(o * Math.pow(10, h)) / Math.pow(10, h);
        if (p < o) {
            p = q((o + 0.5) * Math.pow(10, h)) / Math.pow(10, h);
        }
        k = q((n - (h > 0 ? 0 : 0.5)) * Math.pow(10, h)) / Math.pow(10, h);
        return {
            from: k,
            to: p,
            power: h
        };
    };
    Raphael.fn.g.axis = function (v, u, o, G, l, J, m, L, n, g) {
        g = g == null ? 2 : g;n = n || "t";J = J || 10;
        var F = n == "|" || n == " " ? ["M", v + 0.5, u, "l", 0, 0.001] : m == 1 || m == 3 ? ["M", v + 0.5, u, "l", 0, -o] : ["M", v, u + 0.5, "l", o, 0],
            z = this.g.snapEnds(G, l, J),
            K = z.from,
            B = z.to,
            I = z.power,
            H = 0,
            C = this.set();d = (B - K) / J;
        var s = K,
            q = I > 0 ? I : 0;w = o / J;
        if (+m == 1 || +m == 3) {
            var h = u,
                A = (m - 1 ? 1 : -1) * (g + 3 + !! (m - 1));
            while (h >= u - o) {
                n != "-" && n != " " && (F = F.concat(["M", v - (n == "+" || n == "|" ? g : !(m - 1) * g * 2), h + 0.5, "l", g * 2 + 1, 0]));
                C.push(this.text(v + A, h, (L && L[H++]) || (Math.round(s) == s ? s : +s.toFixed(q))).attr(this.g.txtattr).attr({
                    "text-anchor": m - 1 ? "start" : "end"
                }));
                s += d;
                h -= w;
            }
            if (Math.round(h + w - (u - o))) {
                n != "-" && n != " " && (F = F.concat(["M", v - (n == "+" || n == "|" ? g : !(m - 1) * g * 2), u - o + 0.5, "l", g * 2 + 1, 0]));
                C.push(this.text(v + A, u - o, (L && L[H]) || (Math.round(s) == s ? s : +s.toFixed(q))).attr(this.g.txtattr).attr({
                    "text-anchor": m - 1 ? "start" : "end"
                }));
            }
        } else {
            s = K;
            q = (I > 0) * I;
            A = (m ? -1 : 1) * (g + 9 + !m);
            var k = v,
                w = o / J,
                D = 0,
                E = 0;
            while (k <= v + o) {
                n != "-" && n != " " && (F = F.concat(["M", k + 0.5, u - (n == "+" ? g : !! m * g * 2), "l", 0, g * 2 + 1]));
                C.push(D = this.text(k, u + A, (L && L[H++]) || (Math.round(s) == s ? s : +s.toFixed(q))).attr(this.g.txtattr));
                var p = D.getBBox();
                if (E >= p.x - 5) {
                    C.pop(C.length - 1).remove();
                } else {
                    E = p.x + p.width;
                }
                s += d;
                k += w;
            }
            if (Math.round(k - w - v - o)) {
                n != "-" && n != " " && (F = F.concat(["M", v + o + 0.5, u - (n == "+" ? g : !! m * g * 2), "l", 0, g * 2 + 1]));
                C.push(this.text(v + o, u + A, (L && L[H]) || (Math.round(s) == s ? s : +s.toFixed(q))).attr(this.g.txtattr));
            }
        }
        var M = this.path(F);M.text = C;M.all = this.set([M, C]);M.remove = function () {
            this.text.remove();
            this.constructor.prototype.remove.call(this);
        };
        return M;
    };
    Raphael.el.lighter = function (g) {
        g = g || 2;
        var f = [this.attrs.fill, this.attrs.stroke];
        this.fs = this.fs || [f[0], f[1]];
        f[0] = Raphael.rgb2hsb(Raphael.getRGB(f[0]).hex);
        f[1] = Raphael.rgb2hsb(Raphael.getRGB(f[1]).hex);
        f[0].b = c(f[0].b * g, 1);
        f[0].s = f[0].s / g;
        f[1].b = c(f[1].b * g, 1);
        f[1].s = f[1].s / g;
        this.attr({
            fill: "hsb(" + [f[0].h, f[0].s, f[0].b] + ")",
            stroke: "hsb(" + [f[1].h, f[1].s, f[1].b] + ")"
        });
    };
    Raphael.el.darker = function (g) {
        g = g || 2;
        var f = [this.attrs.fill, this.attrs.stroke];
        this.fs = this.fs || [f[0], f[1]];
        f[0] = Raphael.rgb2hsb(Raphael.getRGB(f[0]).hex);
        f[1] = Raphael.rgb2hsb(Raphael.getRGB(f[1]).hex);
        f[0].s = c(f[0].s * g, 1);
        f[0].b = f[0].b / g;
        f[1].s = c(f[1].s * g, 1);
        f[1].b = f[1].b / g;
        this.attr({
            fill: "hsb(" + [f[0].h, f[0].s, f[0].b] + ")",
            stroke: "hsb(" + [f[1].h, f[1].s, f[1].b] + ")"
        });
    };
    Raphael.el.original = function () {
        if (this.fs) {
            this.attr({
                fill: this.fs[0],
                stroke: this.fs[1]
            });
            delete this.fs;
        }
    };
})();
