!function(i){"function"==typeof define&&define.amd?define(["jquery"],i):i(jQuery)}(function(i){"use strict";function t(i,t){this.container=i,this.options=t,this.container.trigger("mosaicflow-start"),this.init(),this.container.trigger("mosaicflow-ready")}function s(i){function t(i,t){return t.toUpper()}var s={},e=i.data();for(var n in e)s[n.replace(/-(\w)/g,t)]=e[n];return s}function e(i){var t={};if(t.height=parseInt(i.attr("height"),10),t.width=parseInt(i.attr("width"),10),0===t.height||0===t.width){var s=new Image;s.src=i.attr("src"),t.width=s.width,t.height=s.height}return t}var n=0;i.fn.mosaicflow=function(e){var n=Array.prototype.slice.call(arguments,0);return this.each(function(){var o=i(this),h=o.data("mosaicflow");h?"string"==typeof e&&h[e](n[1]):(e=i.extend({},i.fn.mosaicflow.defaults,e,s(o)),h=new t(o,e),o.data("mosaicflow",h))})},i.fn.mosaicflow.defaults={itemSelector:"> *",columnClass:"mosaicflow__column",minItemWidth:240,minColumns:2,itemHeightCalculation:"auto",threshold:40},t.prototype={init:function(){this.__uid=n++,this.__uidItemCounter=0,this.items=this.container.find(this.options.itemSelector),this.columns=i([]),this.columnsHeights=[],this.itemsHeights={},this.tempContainer=i("<div>").css({visibility:"hidden",width:"100%"}),this.workOnTemp=!1,this.autoCalculation="auto"===this.options.itemHeightCalculation,this.container.append(this.tempContainer);var t=this;this.items.each(function(){var s=i(this),e=s.attr("id");e||(e=t.generateUniqueId(),s.attr("id",e))}),this.container.css("visibility","hidden"),this.autoCalculation?i(window).on("load",i.proxy(this.refill,this)):this.refill(),i(window).resize(i.proxy(this.refill,this))},refill:function(){this.container.trigger("mosaicflow-fill"),this.numberOfColumns=Math.floor(this.container.width()/this.options.minItemWidth),this.numberOfColumns<this.options.minColumns&&(this.numberOfColumns=this.options.minColumns);var i=this.ensureColumns();i&&(this.fillColumns(),this.columns.filter(":visible").length>0&&this.columns.filter(":hidden").remove()),this.container.css("visibility","visible"),this.container.trigger("mosaicflow-filled")},ensureColumns:function(){var t=this.columns.filter(":visible").length,s=this.numberOfColumns;if(this.workingContainer=0===t?this.tempContainer:this.container,s>t)for(var e=s-t,n=0;n<e;n++){var o=i("<div>",{"class":this.options.columnClass});this.workingContainer.append(o)}else if(s<t){for(var h=t;s<=h;)this.columns.eq(h).hide(),h--;var r=t-s;this.columnsHeights.splice(this.columnsHeights.length-r,r)}return s!==t&&(this.columns=this.workingContainer.find("."+this.options.columnClass),this.columns.css("width",100/s+"%"),!0)},fillColumns:function(){for(var i=this.numberOfColumns,t=this.items.length,s=0;s<i;s++){var e=this.columns.eq(s);this.columnsHeights[s]=0;for(var n=s;n<t;n+=i){var o=this.items.eq(n),h=0;e.append(o),h=this.autoCalculation?o.outerHeight():parseInt(o.find("img").attr("height"),10),this.itemsHeights[o.attr("id")]=h,this.columnsHeights[s]+=h}}this.levelBottomEdge(this.itemsHeights,this.columnsHeights),this.workingContainer===this.tempContainer&&this.container.append(this.tempContainer.children()),this.container.trigger("mosaicflow-layout")},levelBottomEdge:function(t,s){for(;;){var e=i.inArray(Math.min.apply(null,s),s),n=i.inArray(Math.max.apply(null,s),s);if(e===n)return;var o=this.columns.eq(n).children().last(),h=t[o.attr("id")],r=s[e],a=s[n],l=r+h;if(l>=a)return;if(a-l<this.options.threshold)return;this.columns.eq(e).append(o),s[n]-=h,s[e]+=h}},add:function(t){this.container.trigger("mosaicflow-item-add",[t]);var s=i.inArray(Math.min.apply(null,this.columnsHeights),this.columnsHeights),n=0;if(this.autoCalculation){t.css({position:"static",visibility:"hidden",display:"block"}).appendTo(this.columns.eq(s)),n=t.outerHeight();var o=t.find("img");0!==o.length&&o.each(function(){var t=i(this),s=e(t),o=t.width()*s.height/s.width;n+=o}),t.detach().css({position:"static",visibility:"visible"})}else n=parseInt(t.find("img").attr("height"),10);t.attr("id")||t.attr("id",this.generateUniqueId());var h=this.items.toArray();h.push(t),this.items=i(h),this.itemsHeights[t.attr("id")]=n,this.columnsHeights[s]+=n,this.columns.eq(s).append(t),this.levelBottomEdge(this.itemsHeights,this.columnsHeights),this.container.trigger("mosaicflow-layout"),this.container.trigger("mosaicflow-item-added",[t])},remove:function(i){this.container.trigger("mosaicflow-item-remove",[i]);var t=i.parents("."+this.options.columnClass);this.columnsHeights[t.index()-1]-=this.itemsHeights[i.attr("id")],i.detach(),this.items=this.items.not(i),this.levelBottomEdge(this.itemsHeights,this.columnsHeights),this.container.trigger("mosaicflow-layout"),this.container.trigger("mosaicflow-item-removed",[i])},empty:function(){var t=this.numberOfColumns;this.items=i([]),this.itemsHeights={};for(var s=0;s<t;s++){var e=this.columns.eq(s);this.columnsHeights[s]=0,e.empty()}this.container.trigger("mosaicflow-layout")},recomputeHeights:function(){function t(t,e){e=i(e);var o=0;o=s.autoCalculation?e.outerHeight():parseInt(e.find("img").attr("height"),10),s.itemsHeights[e.attr("id")]=o,s.columnsHeights[n]+=o}for(var s=this,e=this.numberOfColumns,n=0;n<e;n++){var o=this.columns.eq(n);this.columnsHeights[n]=0,o.children().each(t)}},generateUniqueId:function(){return this.__uidItemCounter++,"mosaic-"+this.__uid+"-itemid-"+this.__uidItemCounter}},i(function(){i(".mosaicflow").mosaicflow()})});