(function (d) {
    function r(e, c, l, b, a) {
        function f() {
            n.unbind("webkitTransitionEnd transitionend otransitionend oTransitionEnd");
            c && x(c, l, b, a);
            a.startOrder = [];
            a.newOrder = [];
            a.origSort = [];
            a.checkSort = [];
            v.removeStyle(a.prefix + "filter, filter, " + a.prefix + "transform, transform, opacity, display").css(a.clean).removeAttr("data-checksum");
            window.atob || v.css({
                display: "none",
                opacity: "0"
            });
            n.removeStyle(a.prefix + "transition, transition, " + a.prefix + "perspective, perspective, " + a.prefix + "perspective-origin, perspective-origin, " + (a.resizeContainer ? "height" : ""));
            "list" == a.layoutMode ? (p.css({
                display: a.targetDisplayList,
                opacity: "1"
            }), a.origDisplay = a.targetDisplayList) : (p.css({
                display: a.targetDisplayGrid,
                opacity: "1"
            }), a.origDisplay = a.targetDisplayGrid);
            a.origLayout = a.layoutMode;
            setTimeout(function () {
                v.removeStyle(a.prefix + "transition, transition");
                a.mixing = !1;
                if ("function" == typeof a.onMixEnd) {
                    var b = a.onMixEnd.call(this, a);
                    a = b ? b : a
                }
            })
        }
        clearInterval(a.failsafe);
        a.mixing = !0;
        a.filter = e;
        if ("function" == typeof a.onMixStart) {
            var g = a.onMixStart.call(this, a);
            a = g ? g : a
        }
        for (var k = a.transitionSpeed, g = 0; 2 > g; g++) {
            var h = 0 == g ? h = a.prefix : "";
            a.transition[h + "transition"] = "all " + k + "ms linear";
            a.transition[h + "transform"] = h + "translate3d(0,0,0)";
            a.perspective[h + "perspective"] = a.perspectiveDistance + "px";
            a.perspective[h + "perspective-origin"] = a.perspectiveOrigin
        }
        var w = a.targetSelector,
            v = b.find(w);
        v.each(function () {
            this.data = {}
        });
        var n = v.parent();
        n.css(a.perspective);
        a.easingFallback = "ease-in-out";
        "smooth" == a.easing && (a.easing = "cubic-bezier(0.25, 0.46, 0.45, 0.94)");
        "snap" == a.easing && (a.easing = "cubic-bezier(0.77, 0, 0.175, 1)");
        "windback" == a.easing && (a.easing = "cubic-bezier(0.175, 0.885, 0.320, 1.275)", a.easingFallback = "cubic-bezier(0.175, 0.885, 0.320, 1)");
        "windup" == a.easing && (a.easing = "cubic-bezier(0.6, -0.28, 0.735, 0.045)", a.easingFallback = "cubic-bezier(0.6, 0.28, 0.735, 0.045)");
        g = "list" == a.layoutMode && null != a.listEffects ? a.listEffects : a.effects;
        Array.prototype.indexOf && (a.fade = -1 < g.indexOf("fade") ? "0" : "", a.scale = -1 < g.indexOf("scale") ? "scale(.01)" : "", a.rotateZ = -1 < g.indexOf("rotateZ") ? "rotate(180deg)" : "", a.rotateY = -1 < g.indexOf("rotateY") ? "rotateY(90deg)" : "", a.rotateX = -1 < g.indexOf("rotateX") ? "rotateX(90deg)" : "", a.blur = -1 < g.indexOf("blur") ? "blur(8px)" : "", a.grayscale = -1 < g.indexOf("grayscale") ? "grayscale(100%)" : "");
        var p = d(),
            s = d(),
            t = [],
            r = !1;
        "string" === typeof e ? t = z(e) : (r = !0, d.each(e, function (a) {
            t[a] = z(this)
        }));
        "or" == a.filterLogic ? ("" == t[0] && t.shift(), 1 > t.length ? s = s.add(b.find(w + ":visible")) : v.each(function () {
            var a = d(this);
            if (r) {
                var b = 0;
                d.each(t, function (d) {
                    this.length ? a.is("." + this.join(", .")) && b++ : 0 < b && b++
                });
                b == t.length ? p = p.add(a) : s = s.add(a)
            } else a.is("." + t.join(", .")) ? p = p.add(a) : s = s.add(a)
        })) : (p = p.add(n.find(w + "." + t.join("."))), s = s.add(n.find(w + ":not(." + t.join(".") + "):visible")));
        e = p.length;
        var u = d(),
            q = d(),
            m = d();
        s.each(function () {
            var a = d(this);
            "none" != a.css("display") && (u = u.add(a), m = m.add(a))
        });
        if (p.filter(":visible").length == e && !u.length && !c) {
            if (a.origLayout == a.layoutMode) return f(), !1;
            if (1 == p.length) return "list" == a.layoutMode ? (b.addClass(a.listClass), b.removeClass(a.gridClass), m.css("display", a.targetDisplayList)) : (b.addClass(a.gridClass), b.removeClass(a.listClass), m.css("display", a.targetDisplayGrid)), f(), !1
        }
        a.origHeight = n.height();
        if (p.length) {
            b.removeClass(a.failClass);
            p.each(function () {
                var a = d(this);
                "none" == a.css("display") ? q = q.add(a) : m = m.add(a)
            });
            if (a.origLayout != a.layoutMode && !1 == a.animateGridList) return "list" == a.layoutMode ? (b.addClass(a.listClass), b.removeClass(a.gridClass), m.css("display", a.targetDisplayList)) : (b.addClass(a.gridClass), b.removeClass(a.listClass), m.css("display", a.targetDisplayGrid)), f(), !1;
            if (!window.atob) return f(), !1;
            v.css(a.clean);
            m.each(function () {
                this.data.origPos = d(this).offset()
            });
            "list" == a.layoutMode ? (b.addClass(a.listClass), b.removeClass(a.gridClass), q.css("display", a.targetDisplayList)) : (b.addClass(a.gridClass), b.removeClass(a.listClass), q.css("display", a.targetDisplayGrid));
            q.each(function () {
                this.data.showInterPos = d(this).offset()
            });
            u.each(function () {
                this.data.hideInterPos = d(this).offset()
            });
            m.each(function () {
                this.data.preInterPos = d(this).offset()
            });
            "list" == a.layoutMode ? m.css("display", a.targetDisplayList) : m.css("display", a.targetDisplayGrid);
            c && x(c, l, b, a);
            if (c && A(a.origSort, a.checkSort)) return f(), !1;
            u.hide();
            q.each(function (a) {
                this.data.finalPos = d(this).offset()
            });
            m.each(function () {
                this.data.finalPrePos = d(this).offset()
            });
            a.newHeight = n.height();
            c && x("reset", null, b, a);
            q.hide();
            m.css("display", a.origDisplay);
            "block" == a.origDisplay ? (b.addClass(a.listClass), q.css("display", a.targetDisplayList)) : (b.removeClass(a.listClass), q.css("display", a.targetDisplayGrid));
            a.resizeContainer && n.css("height", a.origHeight + "px");
            e = {};
            for (g = 0; 2 > g; g++) h = 0 == g ? h = a.prefix : "", e[h + "transform"] = a.scale + " " + a.rotateX + " " + a.rotateY + " " + a.rotateZ, e[h + "filter"] = a.blur + " " + a.grayscale;
            q.css(e);
            m.each(function () {
                var b = this.data,
                    c = d(this);
                c.hasClass("mix_tohide") ? (b.preTX = b.origPos.left - b.hideInterPos.left, b.preTY = b.origPos.top - b.hideInterPos.top) : (b.preTX = b.origPos.left - b.preInterPos.left, b.preTY = b.origPos.top - b.preInterPos.top);
                for (var e = {}, k = 0; 2 > k; k++) {
                    var h = 0 == k ? h = a.prefix : "";
                    e[h + "transform"] = "translate(" + b.preTX + "px," + b.preTY + "px)"
                }
                c.css(e)
            });
            "list" == a.layoutMode ? (b.addClass(a.listClass), b.removeClass(a.gridClass)) : (b.addClass(a.gridClass), b.removeClass(a.listClass));
            setTimeout(function () {
                if (a.resizeContainer) {
                    for (var b = {}, c = 0; 2 > c; c++) {
                        var e = 0 == c ? e = a.prefix : "";
                        b[e + "transition"] = "all " + k + "ms ease-in-out";
                        b.height = a.newHeight + "px"
                    }
                    n.css(b)
                }
                u.css("opacity", a.fade);
                q.css("opacity", 1);
                q.each(function () {
                    var b = this.data;
                    b.tX = b.finalPos.left - b.showInterPos.left;
                    b.tY = b.finalPos.top - b.showInterPos.top;
                    for (var c = {}, e = 0; 2 > e; e++) {
                        var h = 0 == e ? h = a.prefix : "";
                        c[h + "transition-property"] = h + "transform, " + h + "filter, opacity";
                        c[h + "transition-timing-function"] = a.easing + ", linear, linear";
                        c[h + "transition-duration"] = k + "ms";
                        c[h + "transition-delay"] = "0";
                        c[h + "transform"] = "translate(" + b.tX + "px," + b.tY + "px)";
                        c[h + "filter"] = "none"
                    }
                    d(this).css("-webkit-transition", "all " + k + "ms " + a.easingFallback).css(c)
                });
                m.each(function () {
                    var b = this.data;
                    b.tX = 0 != b.finalPrePos.left ? b.finalPrePos.left - b.preInterPos.left : 0;
                    b.tY = 0 != b.finalPrePos.left ? b.finalPrePos.top - b.preInterPos.top : 0;
                    for (var c = {}, e = 0; 2 > e; e++) {
                        var h = 0 == e ? h = a.prefix : "";
                        c[h + "transition"] = "all " + k + "ms " + a.easing;
                        c[h + "transform"] = "translate(" + b.tX + "px," + b.tY + "px)"
                    }
                    d(this).css("-webkit-transition", "all " + k + "ms " + a.easingFallback).css(c)
                });
                b = {};
                for (c = 0; 2 > c; c++) e = 0 == c ? e = a.prefix : "", b[e + "transition"] = "all " + k + "ms " + a.easing + ", " + e + "filter " + k + "ms linear, opacity " + k + "ms linear", b[e + "transform"] = a.scale + " " + a.rotateX + " " + a.rotateY + " " + a.rotateZ, b[e + "filter"] = a.blur + " " + a.grayscale, b.opacity = a.fade;
                u.css(b);
                n.bind("webkitTransitionEnd transitionend otransitionend oTransitionEnd", function (a) {
                    if (-1 < a.originalEvent.propertyName.indexOf("transform") || -1 < a.originalEvent.propertyName.indexOf("opacity")) - 1 < w.indexOf(".") ? d(a.target).hasClass(w.replace(".", "")) && f() : d(a.target).is(w) && f()
                })
            }, 10);
            a.failsafe = setTimeout(function () {
                a.mixing && f()
            }, k + 400)
        } else {
            a.resizeContainer && n.css("height", a.origHeight + "px");
            if (!window.atob) return f(), !1;
            u = s;
            setTimeout(function () {
                n.css(a.perspective);
                if (a.resizeContainer) {
                    for (var c = {}, e = 0; 2 > e; e++) {
                        var d = 0 == e ? d = a.prefix : "";
                        c[d + "transition"] = "height " + k + "ms ease-in-out";
                        c.height = a.minHeight + "px"
                    }
                    n.css(c)
                }
                v.css(a.transition);
                if (s.length) {
                    c = {};
                    for (e = 0; 2 > e; e++) d = 0 == e ? d = a.prefix : "", c[d + "transform"] = a.scale + " " + a.rotateX + " " + a.rotateY + " " + a.rotateZ, c[d + "filter"] = a.blur + " " + a.grayscale, c.opacity = a.fade;
                    u.css(c);
                    n.bind("webkitTransitionEnd transitionend otransitionend oTransitionEnd", function (c) {
                        if (-1 < c.originalEvent.propertyName.indexOf("transform") || -1 < c.originalEvent.propertyName.indexOf("opacity")) b.addClass(a.failClass), f()
                    })
                } else a.mixing = !1
            }, 10)
        }
    }
    function x(e, c, l, b) {
        function a(a, b) {
            var c = isNaN(1 * a.attr(e)) ? a.attr(e).toLowerCase() : 1 * a.attr(e),
                d = isNaN(1 * b.attr(e)) ? b.attr(e).toLowerCase() : 1 * b.attr(e);
            return c < d ? -1 : c > d ? 1 : 0
        }
        function f(a) {
            "asc" == c ? k.prepend(a).prepend(" ") : k.append(a).append(" ")
        }
        function g(a) {
            a = a.slice();
            for (var b = a.length, c = b; c--;) {
                var e = parseInt(Math.random() * b),
                    d = a[c];
                a[c] = a[e];
                a[e] = d
            }
            return a
        }
        l.find(b.targetSelector).wrapAll('<div class="mix_sorter"/>');
        var k = l.find(".mix_sorter");
        b.origSort.length || k.find(b.targetSelector + ":visible").each(function () {
            d(this).wrap("<s/>");
            b.origSort.push(d(this).parent().html().replace(/\s+/g, ""));
            d(this).unwrap()
        });
        k.empty();
        if ("reset" == e) d.each(b.startOrder, function () {
            k.append(this).append(" ")
        });
        else if ("default" == e) d.each(b.origOrder, function () {
            f(this)
        });
        else if ("random" == e) b.newOrder.length || (b.newOrder = g(b.startOrder)), d.each(b.newOrder, function () {
            k.append(this).append(" ")
        });
        else if ("custom" == e) d.each(c, function () {
            f(this)
        });
        else {
            if ("undefined" === typeof b.origOrder[0].attr(e)) return console.log("No such attribute found. Terminating"), !1;
            b.newOrder.length || (d.each(b.origOrder, function () {
                b.newOrder.push(d(this))
            }), b.newOrder.sort(a));
            d.each(b.newOrder, function () {
                f(this)
            })
        }
        b.checkSort = [];
        k.find(b.targetSelector + ":visible").each(function (a) {
            var c = d(this);
            0 == a && c.attr("data-checksum", "1");
            c.wrap("<s/>");
            b.checkSort.push(c.parent().html().replace(/\s+/g, ""));
            c.unwrap()
        });
        l.find(b.targetSelector).unwrap()
    }
    function B(e) {
        for (var c = ["Webkit", "Moz", "O", "ms"], d = 0; d < c.length; d++) if (c[d] + "Transition" in e.style) return c[d];
        return "transition" in e.style ? "" : !1
    }
    function A(e, c) {
        if (e.length != c.length) return !1;
        for (var d = 0; d < c.length; d++) if (e[d].compare && !e[d].compare(c[d]) || e[d] !== c[d]) return !1;
        return !0
    }
    function z(e) {
        e = e.replace(/\s{2,}/g, " ");
        var c = e.split(" ");
        d.each(c, function (d) {
            "all" == this && (c[d] = "mix_all")
        });
        "" == c[0] && c.shift();
        return c
    }
    var y = {
        init: function (e) {
            return this.each(function () {
                var c = window.navigator.appVersion.match(/Chrome\/(\d+)\./),
                    c = c ? parseInt(c[1], 10) : !1,
                    l = function (a) {
                        a = document.getElementById(a);
                        var b = a.parentElement,
                            c = document.createElement("div"),
                            d = document.createDocumentFragment();
                        b.insertBefore(c, a);
                        d.appendChild(a);
                        b.replaceChild(a, c)
                    };
                (c && 31 == c || 32 == c) && l(this.id);
                var b = {
                    targetSelector: ".mix",
                    filterSelector: ".filter",
                    sortSelector: ".sort",
                    buttonEvent: "click",
                    effects: ["fade", "scale"],
                    listEffects: null,
                    easing: "smooth",
                    layoutMode: "grid",
                    targetDisplayGrid: "inline-block",
                    targetDisplayList: "block",
                    listClass: "",
                    gridClass: "",
                    transitionSpeed: 600,
                    showOnLoad: "all",
                    sortOnLoad: !1,
                    multiFilter: !1,
                    filterLogic: "or",
                    resizeContainer: !0,
                    minHeight: 0,
                    failClass: "fail",
                    perspectiveDistance: "3000",
                    perspectiveOrigin: "50% 50%",
                    animateGridList: !0,
                    onMixLoad: null,
                    onMixStart: null,
                    onMixEnd: null,
                    container: null,
                    origOrder: [],
                    startOrder: [],
                    newOrder: [],
                    origSort: [],
                    checkSort: [],
                    filter: "",
                    mixing: !1,
                    origDisplay: "",
                    origLayout: "",
                    origHeight: 0,
                    newHeight: 0,
                    isTouch: !1,
                    resetDelay: 0,
                    failsafe: null,
                    prefix: "",
                    easingFallback: "ease-in-out",
                    transition: {},
                    perspective: {},
                    clean: {},
                    fade: "1",
                    scale: "",
                    rotateX: "",
                    rotateY: "",
                    rotateZ: "",
                    blur: "",
                    grayscale: ""
                };
                e && d.extend(b, e);
                this.config = b;
                d.support.touch = "ontouchend" in document;
                d.support.touch && (b.isTouch = !0, b.resetDelay = 350);
                b.container = d(this);
                var a = b.container;
                b.prefix = B(a[0]);
                b.prefix = b.prefix ? "-" + b.prefix.toLowerCase() + "-" : "";
                a.find(b.targetSelector).each(function () {
                    b.origOrder.push(d(this))
                });
                if (b.sortOnLoad) {
                    var f;
                    d.isArray(b.sortOnLoad) ? (c = b.sortOnLoad[0], f = b.sortOnLoad[1], d(b.sortSelector + "[data-sort=" + b.sortOnLoad[0] + "][data-order=" + b.sortOnLoad[1] + "]").addClass("active")) : (d(b.sortSelector + "[data-sort=" + b.sortOnLoad + "]").addClass("active"), c = b.sortOnLoad, b.sortOnLoad = "desc");
                    x(c, f, a, b)
                }
                for (f = 0; 2 > f; f++) c = 0 == f ? c = b.prefix : "", b.transition[c + "transition"] = "all " + b.transitionSpeed + "ms ease-in-out", b.perspective[c + "perspective"] = b.perspectiveDistance + "px", b.perspective[c + "perspective-origin"] = b.perspectiveOrigin;
                for (f = 0; 2 > f; f++) c = 0 == f ? c = b.prefix : "", b.clean[c + "transition"] = "none";
                "list" == b.layoutMode ? (a.addClass(b.listClass), b.origDisplay = b.targetDisplayList) : (a.addClass(b.gridClass), b.origDisplay = b.targetDisplayGrid);
                b.origLayout = b.layoutMode;
                f = b.showOnLoad.split(" ");
                d.each(f, function () {
                    d(b.filterSelector + '[data-filter="' + this + '"]').addClass("active")
                });
                a.find(b.targetSelector).addClass("mix_all");
                "all" == f[0] && (f[0] = "mix_all", b.showOnLoad = "mix_all");
                var g = d();
                d.each(f, function () {
                    g = g.add(d("." + this))
                });
                g.each(function () {
                    var a = d(this);
                    "list" == b.layoutMode ? a.css("display", b.targetDisplayList) : a.css("display", b.targetDisplayGrid);
                    a.css(b.transition)
                });
                setTimeout(function () {
                    b.mixing = !0;
                    g.css("opacity", "1");
                    setTimeout(function () {
                        "list" == b.layoutMode ? g.removeStyle(b.prefix + "transition, transition").css({
                            display: b.targetDisplayList,
                            opacity: 1
                        }) : g.removeStyle(b.prefix + "transition, transition").css({
                            display: b.targetDisplayGrid,
                            opacity: 1
                        });
                        b.mixing = !1;
                        if ("function" == typeof b.onMixLoad) {
                            var a = b.onMixLoad.call(this, b);
                            b = a ? a : b
                        }
                    }, b.transitionSpeed)
                }, 10);
                b.filter = b.showOnLoad;
                d(b.sortSelector).bind(b.buttonEvent, function () {
                    if (!b.mixing) {
                        var c = d(this),
                            e = c.attr("data-sort"),
                            f = c.attr("data-order");
                        if (!c.hasClass("active")) d(b.sortSelector).removeClass("active"), c.addClass("active");
                        else if ("random" != e) return !1;
                        a.find(b.targetSelector).each(function () {
                            b.startOrder.push(d(this))
                        });
                        r(b.filter, e, f, a, b)
                    }
                });
                d(b.filterSelector).bind(b.buttonEvent, function () {
                    if (!b.mixing) {
                        var c = d(this);
                        if (!1 == b.multiFilter) d(b.filterSelector).removeClass("active"), c.addClass("active"), b.filter = c.attr("data-filter"), d(b.filterSelector + '[data-filter="' + b.filter + '"]').addClass("active");
                        else {
                            var e = c.attr("data-filter");
                            c.hasClass("active") ? (c.removeClass("active"), b.filter = b.filter.replace(RegExp("(\\s|^)" + e), "")) : (c.addClass("active"), b.filter = b.filter + " " + e)
                        }
                        r(b.filter, null, null, a, b)
                    }
                })
            })
        },
        toGrid: function () {
            return this.each(function () {
                var e = this.config;
                "grid" != e.layoutMode && (e.layoutMode = "grid", r(e.filter, null, null, d(this), e))
            })
        },
        toList: function () {
            return this.each(function () {
                var e = this.config;
                "list" != e.layoutMode && (e.layoutMode = "list", r(e.filter, null, null, d(this), e))
            })
        },
        filter: function (e) {
            return this.each(function () {
                var c = this.config;
                c.mixing || (d(c.filterSelector).removeClass("active"), d(c.filterSelector + '[data-filter="' + e + '"]').addClass("active"), r(e, null, null, d(this), c))
            })
        },
        sort: function (e) {
            return this.each(function () {
                var c = this.config,
                    l = d(this);
                if (!c.mixing) {
                    d(c.sortSelector).removeClass("active");
                    if (d.isArray(e)) {
                        var b = e[0],
                            a = e[1];
                        d(c.sortSelector + '[data-sort="' + e[0] + '"][data-order="' + e[1] + '"]').addClass("active")
                    } else d(c.sortSelector + '[data-sort="' + e + '"]').addClass("active"), b = e, a = "desc";
                    l.find(c.targetSelector).each(function () {
                        c.startOrder.push(d(this))
                    });
                    r(c.filter, b, a, l, c)
                }
            })
        },
        multimix: function (e) {
            return this.each(function () {
                var c = this.config,
                    l = d(this);
                multiOut = {
                    filter: c.filter,
                    sort: null,
                    order: "desc",
                    layoutMode: c.layoutMode
                };
                d.extend(multiOut, e);
                c.mixing || (d(c.filterSelector).add(c.sortSelector).removeClass("active"), d(c.filterSelector + '[data-filter="' + multiOut.filter + '"]').addClass("active"), "undefined" !== typeof multiOut.sort && (d(c.sortSelector + '[data-sort="' + multiOut.sort + '"][data-order="' + multiOut.order + '"]').addClass("active"), l.find(c.targetSelector).each(function () {
                    c.startOrder.push(d(this))
                })), c.layoutMode = multiOut.layoutMode, r(multiOut.filter, multiOut.sort, multiOut.order, l, c))
            })
        },
        remix: function (e) {
            return this.each(function () {
                var c = this.config,
                    l = d(this);
                c.origOrder = [];
                l.find(c.targetSelector).each(function () {
                    var b = d(this);
                    b.addClass("mix_all");
                    c.origOrder.push(b)
                });
                c.mixing || "undefined" === typeof e || (d(c.filterSelector).removeClass("active"), d(c.filterSelector + '[data-filter="' + e + '"]').addClass("active"), r(e, null, null, l, c))
            })
        }
    };
    d.fn.mixitup = function (d, c) {
        if (y[d]) return y[d].apply(this, Array.prototype.slice.call(arguments, 1));
        if ("object" === typeof d || !d) return y.init.apply(this, arguments)
    };
    d.fn.removeStyle = function (e) {
        return this.each(function () {
            var c = d(this);
            e = e.replace(/\s+/g, "");
            var l = e.split(",");
            d.each(l, function () {
                var b = RegExp(this.toString() + "[^;]+;?", "g");
                c.attr("style", function (a, c) {
                    if (c) return c.replace(b, "")
                })
            })
        })
    }
})(jQuery);