/*************************************************
 **  jQuery Masonry version 1.3.2
 **  Copyright David DeSandro, licensed MIT
 **  http://desandro.com/resources/jquery-masonry
 **************************************************/
(function(e) {
    var n = e.event,
        o;
    n.special.smartresize = {
        setup: function() {
            e(this).bind("resize", n.special.smartresize.handler)
        },
        teardown: function() {
            e(this).unbind("resize", n.special.smartresize.handler)
        },
        handler: function(j, l) {
            var g = this,
                d = arguments;
            j.type = "smartresize";
            o && clearTimeout(o);
            o = setTimeout(function() {
                jQuery.event.handle.apply(g, d)
            }, l === "execAsap" ? 0 : 100)
        }
    };
    e.fn.smartresize = function(j) {
        return j ? this.bind("smartresize", j) : this.trigger("smartresize", ["execAsap"])
    };
    e.fn.masonry = function(j, l) {
        var g = {
            getBricks: function(d, b, a) {
                var c = a.itemSelector === undefined;
                b.$bricks = a.appendedContent === undefined ? c ? d.children() : d.find(a.itemSelector) : c ? a.appendedContent : a.appendedContent.filter(a.itemSelector)
            },
            placeBrick: function(d, b, a, c, h) {
                b = Math.min.apply(Math, a);
                for (var i = b + d.outerHeight(true), f = a.length, k = f, m = c.colCount + 1 - f; f--;) if (a[f] == b) k = f;
                d.applyStyle({
                    left: c.colW * k + c.posLeft,
                    top: b
                }, e.extend(true, {}, h.animationOptions));
                for (f = 0; f < m; f++) c.colY[k + f] = i
            },
            setup: function(d, b, a) {
                g.getBricks(d, a, b);
                if (a.masoned) a.previousData = d.data("masonry");
                a.colW = b.columnWidth === undefined ? a.masoned ? a.previousData.colW : a.$bricks.outerWidth(true) : b.columnWidth;
                a.colCount = Math.floor(d.width() / a.colW);
                a.colCount = Math.max(a.colCount, 1)
            },
            arrange: function(d, b, a) {
                var c;
                if (!a.masoned || b.appendedContent !== undefined) a.$bricks.css("position", "absolute");
                if (a.masoned) {
                    a.posTop = a.previousData.posTop;
                    a.posLeft = a.previousData.posLeft
                } else {
                    d.css("position", "relative");
                    var h = e(document.createElement("div"));
                    d.prepend(h);
                    a.posTop = Math.round(h.position().top);
                    a.posLeft = Math.round(h.position().left);
                    h.remove()
                }
                if (a.masoned && b.appendedContent !== undefined) {
                    a.colY = a.previousData.colY;
                    for (c = a.previousData.colCount; c < a.colCount; c++) a.colY[c] = a.posTop
                } else {
                    a.colY = [];
                    for (c = a.colCount; c--;) a.colY.push(a.posTop)
                }
                e.fn.applyStyle = a.masoned && b.animate ? e.fn.animate : e.fn.css;
                b.singleMode ? a.$bricks.each(function() {
                    var i = e(this);
                    g.placeBrick(i, a.colCount, a.colY, a, b)
                }) : a.$bricks.each(function() {
                    var i = e(this),
                        f = Math.ceil(i.outerWidth(true) / a.colW);
                    f = Math.min(f, a.colCount);
                    if (f === 1) g.placeBrick(i, a.colCount, a.colY, a, b);
                    else {
                        var k = a.colCount + 1 - f,
                            m = [];
                        for (c = 0; c < k; c++) {
                            var p = a.colY.slice(c, c + f);
                            m[c] = Math.max.apply(Math, p)
                        }
                        g.placeBrick(i, k, m, a, b)
                    }
                });
                a.wallH = Math.max.apply(Math, a.colY);
                d.applyStyle({
                    height: a.wallH - a.posTop
                }, e.extend(true, [], b.animationOptions));
                a.masoned || setTimeout(function() {
                    d.addClass("masoned")
                }, 1);
                l.call(a.$bricks);
                d.data("masonry", a)
            },
            resize: function(d, b, a) {
                a.masoned = !! d.data("masonry");
                var c = d.data("masonry").colCount;
                g.setup(d, b, a);
                a.colCount != c && g.arrange(d, b, a)
            }
        };
        return this.each(function() {
            var d = e(this),
                b = {};
            b.masoned = !! d.data("masonry");
            var a = b.masoned ? d.data("masonry").options : {},
                c = e.extend({}, e.fn.masonry.defaults, a, j),
                h = a.resizeable;
            b.options = c.saveOptions ? c : a;
            l = l ||
            function() {};
            g.getBricks(d, b, c);
            if (!b.$bricks.length) return this;
            g.setup(d, c, b);
            g.arrange(d, c, b);
            !h && c.resizeable && e(window).bind("smartresize.masonry", function() {
                g.resize(d, c, b)
            });
            h && !c.resizeable && e(window).unbind("smartresize.masonry")
        })
    };
    e.fn.masonry.defaults = {
        singleMode: false,
        columnWidth: undefined,
        itemSelector: undefined,
        appendedContent: undefined,
        saveOptions: true,
        resizeable: true,
        animate: false,
        animationOptions: {}
    }
})(jQuery);

