(function($){(function(factory){if(typeof define==='function'&&define.amd){define(factory);}else{factory();}}(function(){var defaultOptions={align:'center',autoResize:true,comparator:null,direction:undefined,ignoreInactiveItems:true,inactiveClass:'wookmark-inactive',itemSelector:undefined,itemWidth:0,fillEmptySpace:false,flexibleWidth:0,offset:5,outerOffset:0,onLayoutChanged:undefined,placeholderClass:'wookmark-placeholder',possibleFilters:[],resizeDelay:50,verticalOffset:undefined};function __bind(fn,me){return function(){return fn.apply(me,arguments);};}var executeNextFrame=window.requestAnimationFrame||function(callback){callback();};function setCSS(el,properties){var key;for(key in properties){if(properties.hasOwnProperty(key)){el.style[key]=properties[key];}}}function bulkUpdateCSS(data,callback){executeNextFrame(function(){var i,item;for(i=0;i1){activeItems=removeDuplicates(activeItems);}if(!dryRun){i=this.items.length;while(i--){if(indexOf(activeItems,this.items[i])===-1){addClass(this.items[i],this.inactiveClass);}}}}else{activeItems=this.items;}if(!dryRun){i=activeItems.length;while(i--){removeClass(activeItems[i],this.inactiveClass);}this.columns=null;this.layout();}return activeItems;};Wookmark.prototype.refreshPlaceholders=function(columnWidth,sideOffset){var i,containerHeight=getHeight(this.container),columnsLength=this.columns.length,column,height,innerOffset,lastColumnItem,placeholdersHtml='',placeholder,top;if(this.placeholders.length';}this.container.insertAdjacentHTML('beforeend',placeholdersHtml);this.placeholders=this.container.querySelectorAll('.'+this.placeholderClass);}innerOffset=(this.offset+parseInt(getStyle(this.placeholders[0],'border-left-width'),10)*2)||0;innerOffset+=(parseInt(getStyle(this.placeholders[0],'padding-left'),10)*2)||0;for(i=0;i=columnsLength||column.length===0){placeholder.style.display='none';}else{lastColumnItem=column[column.length-1];top=getData(lastColumnItem,'top',true)+getData(lastColumnItem,'height',true)+this.verticalOffset;height=Math.max(0,containerHeight-top-innerOffset);setCSS(placeholder,{position:'absolute',display:height>0?'block':'none',left:(i*columnWidth+sideOffset)+'px',top:top+'px',width:(columnWidth-innerOffset)+'px',height:height+'px'});}}};Wookmark.prototype.getActiveItems=function(){var inactiveClass=this.inactiveClass,i,result=[],item,items=this.items;if(this.ignoreInactiveItems){for(i=0;i0&&(itemWidth===undefined||(itemWidth===0&&!this.flexibleWidth))){itemWidth=getWidth(this.items[0]);}else if(typeof itemWidth==='string'&&itemWidth.indexOf('%')>=0){itemWidth=parseFloat(itemWidth)/100*innerWidth;}if(flexibleWidth){if(typeof flexibleWidth==='function'){flexibleWidth=flexibleWidth();}if(typeof flexibleWidth==='string'&&flexibleWidth.indexOf('%')>=0){flexibleWidth=parseFloat(flexibleWidth)/100*innerWidth;}var paddedInnerWidth=(innerWidth+this.offset),flexibleColumns=Math.floor(0.5+paddedInnerWidth/(flexibleWidth+this.offset)),fixedColumns=Math.floor(paddedInnerWidth/(itemWidth+this.offset)),columns=Math.max(flexibleColumns,fixedColumns),columnWidth=Math.min(flexibleWidth,Math.floor((innerWidth-(columns-1)*this.offset)/columns));itemWidth=Math.max(itemWidth,columnWidth);}return itemWidth;};Wookmark.prototype.layout=function(force,callback){if(!force&&isHidden(this.container)){return;}var calculatedItemWidth=this.getItemWidth(),columnWidth=calculatedItemWidth+this.offset,containerWidth=getWidth(this.container),innerWidth=containerWidth-2*this.outerOffset,columns=Math.floor((innerWidth+this.offset)/columnWidth),offset,maxHeight=0,activeItems=this.getActiveItems(),activeItemsLength=activeItems.length,item;if(force||this.itemHeightsDirty||!this.itemHeightsInitialized){for(var i=0;i>1);}this.direction=this.direction||(this.align==='right'?'right':'left');if(!force&&this.columns!==null&&this.columns.length===columns&&this.activeItemCount===activeItemsLength){maxHeight=this.layoutColumns(columnWidth,offset);}else{maxHeight=this.layoutFull(columnWidth,columns,offset);}this.activeItemCount=activeItemsLength;this.container.style.height=maxHeight+'px';if(this.fillEmptySpace){this.refreshPlaceholders(columnWidth,offset);}if(this.onLayoutChanged!==undefined&&typeof this.onLayoutChanged==='function'){this.onLayoutChanged();}if(typeof callback==='function'){callback();}};Wookmark.prototype.sortElements=function(elements){return typeof this.comparator==='function'?elements.sort(this.comparator):elements;};Wookmark.prototype.layoutFull=function(columnWidth,columns,offset){var item,k=0,i=0,activeItems,activeItemCount,shortest=null,shortestIndex=null,sideOffset,heights=[],itemBulkCSS=[],leftAligned=this.align==='left',self=this;this.columns=[];activeItems=this.sortElements(this.getActiveItems());activeItemCount=activeItems.length;while(heights.length0||!leftAligned){sideOffset+=shortestIndex*columnWidth;}itemBulkCSS[i]={el:item,css:{position:'absolute',top:shortest+'px'}};itemBulkCSS[i].css[this.direction]=sideOffset+'px';heights[shortestIndex]+=getData(item,'height',true)+this.verticalOffset;this.columns[shortestIndex].push(item);i++;}bulkUpdateCSS(itemBulkCSS,function(){if(!hasClass(self.container,'wookmark-initialised')){addClass(self.container,'wookmark-initialised');}});return Math.max.apply(Math,heights);};Wookmark.prototype.layoutColumns=function(columnWidth,offset){var heights=[],itemBulkCSS=[],k=0,j=0,i=this.columns.length,currentHeight,column,item,sideOffset;while(i--){currentHeight=this.outerOffset;heights.push(currentHeight);column=this.columns[i];sideOffset=i*columnWidth+offset;for(k=0;k1){while(i--){$(this).eq(i).wookmark(options);}}else if(i===1){if(!this.wookmarkInstance){this.wookmarkInstance=new Wookmark(this[0],options||{});}else{this.wookmarkInstance.updateOptions(options||{});}}return this;};}window.Wookmark=Wookmark;return Wookmark;}));})(jQuery);