(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jquery)})(function(t){function i(t){n(function(){var i,e;for(i=0;t.length>i;i++)e=t[i],e.obj.css(e.css)})}function e(i){return t.trim(i).tolowercase()}var s,h,o;o=function(t,i){return function(){return t.apply(i,arguments)}},h={align:"center",autoresize:!1,comparator:null,container:t("body"),direction:void 0,ignoreinactiveitems:!0,itemwidth:0,fillemptyspace:!1,flexiblewidth:0,offset:2,outeroffset:0,onlayoutchanged:void 0,possiblefilters:[],resizedelay:50,verticaloffset:void 0};var n=window.requestanimationframe||function(t){t()},r=t(window);s=function(){function s(i,e){this.handler=i,this.columns=this.containerwidth=this.resizetimer=null,this.activeitemcount=0,this.itemheightsdirty=!0,this.placeholders=[],t.extend(!0,this,h,e),this.verticaloffset=this.verticaloffset||this.offset,this.update=o(this.update,this),this.onresize=o(this.onresize,this),this.onrefresh=o(this.onrefresh,this),this.getitemwidth=o(this.getitemwidth,this),this.layout=o(this.layout,this),this.layoutfull=o(this.layoutfull,this),this.layoutcolumns=o(this.layoutcolumns,this),this.filter=o(this.filter,this),this.clear=o(this.clear,this),this.getactiveitems=o(this.getactiveitems,this),this.refreshplaceholders=o(this.refreshplaceholders,this),this.sortelements=o(this.sortelements,this),this.updatefilterclasses=o(this.updatefilterclasses,this),this.updatefilterclasses(),this.autoresize&&r.bind("resize.wookmark",this.onresize),this.container.bind("refreshwookmark",this.onrefresh)}return s.prototype.updatefilterclasses=function(){for(var t,i,s,h,o=0,n=0,r=0,a={},l=this.possiblefilters;this.handler.length>o;o++)if(i=this.handler.eq(o),t=i.data("filterclass"),"object"==typeof t&&t.length>0)for(n=0;t.length>n;n++)s=e(t[n]),a[s]===void 0&&(a[s]=[]),a[s].push(i[0]);for(;l.length>r;r++)h=e(l[r]),h in a||(a[h]=[]);this.filterclasses=a},s.prototype.update=function(i){this.itemheightsdirty=!0,t.extend(!0,this,i)},s.prototype.onresize=function(){cleartimeout(this.resizetimer),this.itemheightsdirty=0!==this.flexiblewidth,this.resizetimer=settimeout(this.layout,this.resizedelay)},s.prototype.onrefresh=function(){this.itemheightsdirty=!0,this.layout()},s.prototype.filter=function(i,s,h){var o,n,r,a,l,f=[],u=t();if(i=i||[],s=s||"or",h=h||!1,i.length){for(n=0;i.length>n;n++)l=e(i[n]),l in this.filterclasses&&f.push(this.filterclasses[l]);if(o=f.length,"or"==s||1==o)for(n=0;o>n;n++)u=u.add(f[n]);else if("and"==s){var c,d,m,p=f[0],g=!0;for(n=1;o>n;n++)f[n].lengthn;n++){for(d=p[n],g=!0,r=0;f.length>r&&g;r++)if(m=f[r],p!=m){for(a=0,c=!1;m.length>a&&!c;a++)c=m[a]==d;g&=c}g&&u.push(p[n])}}h||this.handler.not(u).addclass("inactive")}else u=this.handler;return h||(u.removeclass("inactive"),this.columns=null,this.layout()),u},s.prototype.refreshplaceholders=function(i,e){for(var s,h,o,n,r,a,l=this.placeholders.length,f=this.columns.length,u=this.container.innerheight();f>l;l++)s=t('
').appendto(this.container),this.placeholders.push(s);for(a=this.offset+2*parseint(this.placeholders[0].css("borderleftwidth"),10),l=0;this.placeholders.length>l;l++)if(s=this.placeholders[l],o=this.columns[l],l>=f||!o[o.length-1])s.css("display","none");else{if(h=o[o.length-1],!h)continue;r=h.data("wookmark-top")+h.data("wookmark-height")+this.verticaloffset,n=u-r-a,s.css({position:"absolute",display:n>0?"block":"none",left:l*i+e,top:r,width:i-a,height:n})}},s.prototype.getactiveitems=function(){return this.ignoreinactiveitems?this.handler.not(".inactive"):this.handler},s.prototype.getitemwidth=function(){var t=this.itemwidth,i=this.container.width()-2*this.outeroffset,e=this.handler.eq(0),s=this.flexiblewidth;if(void 0===this.itemwidth||0===this.itemwidth&&!this.flexiblewidth?t=e.outerwidth():"string"==typeof this.itemwidth&&this.itemwidth.indexof("%")>=0&&(t=parsefloat(this.itemwidth)/100*i),s){"string"==typeof s&&s.indexof("%")>=0&&(s=parsefloat(s)/100*i);var h=i+this.offset,o=~~(.5+h/(s+this.offset)),n=~~(h/(t+this.offset)),r=math.max(o,n),a=math.min(s,~~((i-(r-1)*this.offset)/r));t=math.max(t,a),this.handler.css("width",t)}return t},s.prototype.layout=function(t){if(this.container.is(":visible")){var i,e=this.getitemwidth()+this.offset,s=this.container.width(),h=s-2*this.outeroffset,o=~~((h+this.offset)/e),n=0,r=0,a=0,l=this.getactiveitems(),f=l.length;if(this.itemheightsdirty||!this.container.data("itemheightsinitialized")){for(;f>a;a++)i=l.eq(a),i.data("wookmark-height",i.outerheight());this.itemheightsdirty=!1,this.container.data("itemheightsinitialized",!0)}o=math.max(1,math.min(o,f)),n=this.outeroffset,"center"==this.align&&(n+=~~(.5+(h-(o*e-this.offset))>>1)),this.direction=this.direction||("right"==this.align?"right":"left"),r=t||null===this.columns||this.columns.length!=o||this.activeitemcount!=f?this.layoutfull(e,o,n):this.layoutcolumns(e,n),this.activeitemcount=f,this.container.css("height",r),this.fillemptyspace&&this.refreshplaceholders(e,n),void 0!==this.onlayoutchanged&&"function"==typeof this.onlayoutchanged&&this.onlayoutchanged()}},s.prototype.sortelements=function(t){return"function"==typeof this.comparator?t.sort(this.comparator):t},s.prototype.layoutfull=function(e,s,h){var o,n,r=0,a=0,l=t.makearray(this.getactiveitems()),f=l.length,u=null,c=null,d=[],m=[],p="left"==this.align?!0:!1;for(this.columns=[],l=this.sortelements(l);s>d.length;)d.push(this.outeroffset),this.columns.push([]);for(;f>r;r++){for(o=t(l[r]),u=d[0],c=0,a=0;s>a;a++)u>d[a]&&(u=d[a],c=a);o.data("wookmark-top",u),n=h,(c>0||!p)&&(n+=c*e),(m[r]={obj:o,css:{position:"absolute",top:u}}).css[this.direction]=n,d[c]+=o.data("wookmark-height")+this.verticaloffset,this.columns[c].push(o)}return i(m),math.max.apply(math,d)},s.prototype.layoutcolumns=function(t,e){for(var s,h,o,n,r=[],a=[],l=0,f=0,u=0;this.columns.length>l;l++){for(r.push(this.outeroffset),h=this.columns[l],n=l*t+e,s=r[l],f=0;h.length>f;f++,u++)o=h[f].data("wookmark-top",s),(a[u]={obj:o,css:{top:s}}).css[this.direction]=n,s+=o.data("wookmark-height")+this.verticaloffset;r[l]=s}return i(a),math.max.apply(math,r)},s.prototype.clear=function(){cleartimeout(this.resizetimer),r.unbind("resize.wookmark",this.onresize),this.container.unbind("refreshwookmark",this.onrefresh),this.handler.wookmarkinstance=null},s}(),t.fn.wookmark=function(t){return this.wookmarkinstance?this.wookmarkinstance.update(t||{}):this.wookmarkinstance=new s(this,t||{}),this.wookmarkinstance.layout(!0),this.show()}});