(function ($) {
    function int_prop(a) {
        a.elem.style[a.prop] = parseInt(a.now, 10) + a.unit
    }
    var j = function (a) {
        throw ({
            name: "jquery.flip.js plugin error",
            message: a
        })
    };
    var k = function () {
        return ( /*@cc_on!@*/ false && (typeof document.body.style.maxHeight === "undefined"))
    };
    var l = {
        aqua: [0, 255, 255],
        azure: [240, 255, 255],
        beige: [245, 245, 220],
        black: [0, 0, 0],
        blue: [0, 0, 255],
        brown: [165, 42, 42],
        cyan: [0, 255, 255],
        darkblue: [0, 0, 139],
        darkcyan: [0, 139, 139],
        darkgrey: [169, 169, 169],
        darkgreen: [0, 100, 0],
        darkkhaki: [189, 183, 107],
        darkmagenta: [139, 0, 139],
        darkolivegreen: [85, 107, 47],
        darkorange: [255, 140, 0],
        darkorchid: [153, 50, 204],
        darkred: [139, 0, 0],
        darksalmon: [233, 150, 122],
        darkviolet: [148, 0, 211],
        fuchsia: [255, 0, 255],
        gold: [255, 215, 0],
        green: [0, 128, 0],
        indigo: [75, 0, 130],
        khaki: [240, 230, 140],
        lightblue: [173, 216, 230],
        lightcyan: [224, 255, 255],
        lightgreen: [144, 238, 144],
        lightgrey: [211, 211, 211],
        lightpink: [255, 182, 193],
        lightyellow: [255, 255, 224],
        lime: [0, 255, 0],
        magenta: [255, 0, 255],
        maroon: [128, 0, 0],
        navy: [0, 0, 128],
        olive: [128, 128, 0],
        orange: [255, 165, 0],
        pink: [255, 192, 203],
        purple: [128, 0, 128],
        violet: [128, 0, 128],
        red: [255, 0, 0],
        silver: [192, 192, 192],
        white: [255, 255, 255],
        yellow: [255, 255, 0],
        transparent: [255, 255, 255]
    };
    var m = function (a) {
        if (a && a.indexOf("#") == -1 && a.indexOf("(") == -1) {
            return "rgb(" + l[a].toString() + ")"
        } else {
            return a
        }
    };
    $.extend($.fx.step, {
        borderTopWidth: int_prop,
        borderBottomWidth: int_prop,
        borderLeftWidth: int_prop,
        borderRightWidth: int_prop
    });
    $.fn.revertFlip = function () {
        return this.each(function () {
            var a = $(this);
            a.flip(a.data('flipRevertedSettings'))
        })
    };
    $.fn.flip = function (i) {
        return this.each(function () {
            var c = $(this),
                flipObj, $clone, dirOption, dirOptions, newContent, ie6 = k();
            if (c.data('flipLock')) {
                return false
            }
            var e = {
                direction: (function (a) {
                    switch (a) {
                    case "tb":
                        return "bt";
                    case "bt":
                        return "tb";
                    case "lr":
                        return "rl";
                    case "rl":
                        return "lr";
                    default:
                        return "bt"
                    }
                })(i.direction),
                bgColor: m(i.color) || "#999",
                color: m(i.bgColor) || c.css("background-color"),
                content: c.html(),
                speed: i.speed || 500,
                onBefore: i.onBefore ||
                function () {},
                onEnd: i.onEnd ||
                function () {},
                onAnimation: i.onAnimation ||
                function () {}
            };
            c.data('flipRevertedSettings', e).data('flipLock', 1).data('flipSettings', e);
            flipObj = {
                width: c.width(),
                height: c.height(),
                bgColor: m(i.bgColor) || c.css("background-color"),
                fontSize: c.css("font-size") || "12px",
                direction: i.direction || "tb",
                toColor: m(i.color) || "#999",
                speed: i.speed || 500,
                top: c.offset().top,
                left: c.offset().left,
                target: i.content || null,
                transparent: "transparent",
                dontChangeColor: i.dontChangeColor || false,
                onBefore: i.onBefore ||
                function () {},
                onEnd: i.onEnd ||
                function () {},
                onAnimation: i.onAnimation ||
                function () {}
            };
            ie6 && (flipObj.transparent = "#123456");
            $clone = c.css("visibility", "hidden").clone(true).data('flipLock', 1).appendTo("body").html("").css({
                visibility: "visible",
                position: "absolute",
                left: flipObj.left,
                top: flipObj.top,
                margin: 0,
                zIndex: 9999
            });
            var f = function () {
                return {
                    backgroundColor: flipObj.transparent,
                    fontSize: 0,
                    lineHeight: 0,
                    borderTopWidth: 0,
                    borderLeftWidth: 0,
                    borderRightWidth: 0,
                    borderBottomWidth: 0,
                    borderTopColor: flipObj.transparent,
                    borderBottomColor: flipObj.transparent,
                    borderLeftColor: flipObj.transparent,
                    borderRightColor: flipObj.transparent,
                    background: "none",
                    borderStyle: 'solid',
                    height: 0,
                    width: 0
                }
            };
            var g = function () {
                var a = (flipObj.height / 100) * 25;
                var b = f();
                b.width = flipObj.width;
                return {
                    "start": b,
                    "first": {
                        borderTopWidth: 0,
                        borderLeftWidth: a,
                        borderRightWidth: a,
                        borderBottomWidth: 0,
                        borderTopColor: '#999',
                        borderBottomColor: '#999',
                        top: (flipObj.top + (flipObj.height / 2)),
                        left: (flipObj.left - a)
                    },
                    "second": {
                        borderBottomWidth: 0,
                        borderTopWidth: 0,
                        borderLeftWidth: 0,
                        borderRightWidth: 0,
                        borderTopColor: flipObj.transparent,
                        borderBottomColor: flipObj.transparent,
                        top: flipObj.top,
                        left: flipObj.left
                    }
                }
            };
            var h = function () {
                var a = (flipObj.height / 100) * 25;
                var b = f();
                b.height = flipObj.height;
                return {
                    "start": b,
                    "first": {
                        borderTopWidth: a,
                        borderLeftWidth: 0,
                        borderRightWidth: 0,
                        borderBottomWidth: a,
                        borderLeftColor: '#999',
                        borderRightColor: '#999',
                        top: flipObj.top - a,
                        left: flipObj.left + (flipObj.width / 2)
                    },
                    "second": {
                        borderTopWidth: 0,
                        borderLeftWidth: 0,
                        borderRightWidth: 0,
                        borderBottomWidth: 0,
                        borderLeftColor: flipObj.transparent,
                        borderRightColor: flipObj.transparent,
                        top: flipObj.top,
                        left: flipObj.left
                    }
                }
            };
            dirOptions = {
                "tb": function () {
                    var d = g();
                    d.start.borderTopWidth = flipObj.height;
                    d.start.borderTopColor = flipObj.bgColor;
                    d.second.borderBottomWidth = flipObj.height;
                    d.second.borderBottomColor = flipObj.toColor;
                    return d
                },
                "bt": function () {
                    var d = g();
                    d.start.borderBottomWidth = flipObj.height;
                    d.start.borderBottomColor = flipObj.bgColor;
                    d.second.borderTopWidth = flipObj.height;
                    d.second.borderTopColor = flipObj.toColor;
                    return d
                },
                "lr": function () {
                    var d = h();
                    d.start.borderLeftWidth = flipObj.width;
                    d.start.borderLeftColor = flipObj.bgColor;
                    d.second.borderRightWidth = flipObj.width;
                    d.second.borderRightColor = flipObj.toColor;
                    return d
                },
                "rl": function () {
                    var d = h();
                    d.start.borderRightWidth = flipObj.width;
                    d.start.borderRightColor = flipObj.bgColor;
                    d.second.borderLeftWidth = flipObj.width;
                    d.second.borderLeftColor = flipObj.toColor;
                    return d
                }
            };
            dirOption = dirOptions[flipObj.direction]();
            ie6 && (dirOption.start.filter = "chroma(color=" + flipObj.transparent + ")");
            newContent = function () {
                var a = flipObj.target;
                return a && a.jquery ? a.html() : a
            };
            $clone.queue(function () {
                flipObj.onBefore($clone, c);
                $clone.html('').css(dirOption.start);
                $clone.dequeue()
            });
            $clone.animate(dirOption.first, flipObj.speed);
            $clone.queue(function () {
                flipObj.onAnimation($clone, c);
                $clone.dequeue()
            });
            $clone.animate(dirOption.second, flipObj.speed);
            $clone.queue(function () {
                if (!flipObj.dontChangeColor) {
                    c.css({
                        backgroundColor: flipObj.toColor
                    })
                }
                c.css({
                    visibility: "visible"
                });
                var a = newContent();
                if (a) {
                    c.html(a)
                }
                $clone.remove();
                flipObj.onEnd($clone, c);
                c.removeData('flipLock');
                $clone.dequeue()
            })
        })
    }
})(jQuery);
