;(function($){var event=$.event,resizeTimeout;event.special.smartresize={setup:function(){$(this).bind("resize",event.special.smartresize.handler)},teardown:function(){$(this).unbind("resize",event.special.smartresize.handler)},handler:function(event,execAsap){var context=this,args=arguments;event.type="smartresize";if(resizeTimeout){clearTimeout(resizeTimeout)}resizeTimeout=setTimeout(function(){jQuery.event.handle.apply(context,args)},execAsap==="execAsap"?0:100)}};$.fn.smartresize=function(fn){return fn?this.bind("smartresize",fn):this.trigger("smartresize",["execAsap"])};$.fn.masonry=function(options,callback){var msnry={getBricks:function($wall,props,opts){var hasItemSelector=(opts.itemSelector===undefined);if(opts.appendedContent===undefined){props.$bricks=hasItemSelector?$wall.children():$wall.find(opts.itemSelector)}else{props.$bricks=hasItemSelector?opts.appendedContent:opts.appendedContent.filter(opts.itemSelector)}},placeBrick:function($brick,setCount,setY,props,opts){var minimumY=Math.min.apply(Math,setY),setHeight=minimumY+$brick.outerHeight(true),i=setY.length,shortCol=i,setSpan=props.colCount+1-i;while(i--){if(setY[i]==minimumY){shortCol=i}}var position={left:props.colW*shortCol+props.posLeft,top:minimumY};$brick.applyStyle(position,$.extend(true,{},opts.animationOptions));for(i=0;i<setSpan;i++){props.colY[shortCol+i]=setHeight}},setup:function($wall,opts,props){msnry.getBricks($wall,props,opts);if(props.masoned){props.previousData=$wall.data('masonry')}if(opts.columnWidth===undefined){props.colW=props.masoned?props.previousData.colW:props.$bricks.outerWidth(true)}else{props.colW=opts.columnWidth}props.colCount=Math.floor($wall.width()/props.colW);props.colCount=Math.max(props.colCount,1)},arrange:function($wall,opts,props){var i;if(!props.masoned||opts.appendedContent!==undefined){props.$bricks.css('position','absolute')}if(!props.masoned){$wall.css('position','relative');var $cursor=$(document.createElement('div'));$wall.prepend($cursor);props.posTop=Math.round($cursor.position().top);props.posLeft=Math.round($cursor.position().left);$cursor.remove()}else{props.posTop=props.previousData.posTop;props.posLeft=props.previousData.posLeft}if(props.masoned&&opts.appendedContent!==undefined){props.colY=props.previousData.colY;for(i=props.previousData.colCount;i<props.colCount;i++){props.colY[i]=props.posTop}}else{props.colY=[];i=props.colCount;while(i--){props.colY.push(props.posTop)}}$.fn.applyStyle=(props.masoned&&opts.animate)?$.fn.animate:$.fn.css;if(opts.singleMode){props.$bricks.each(function(){var $brick=$(this);msnry.placeBrick($brick,props.colCount,props.colY,props,opts)})}else{props.$bricks.each(function(){var $brick=$(this),colSpan=Math.ceil($brick.outerWidth(true)/props.colW);colSpan=Math.min(colSpan,props.colCount);if(colSpan===1){msnry.placeBrick($brick,props.colCount,props.colY,props,opts)}else{var groupCount=props.colCount+1-colSpan,groupY=[];for(i=0;i<groupCount;i++){var groupColY=props.colY.slice(i,i+colSpan);groupY[i]=Math.max.apply(Math,groupColY)}msnry.placeBrick($brick,groupCount,groupY,props,opts)}})}props.wallH=Math.max.apply(Math,props.colY);var wallCSS={height:props.wallH-props.posTop};$wall.applyStyle(wallCSS,$.extend(true,[],opts.animationOptions));if(!props.masoned){setTimeout(function(){$wall.addClass('masoned')},1)}callback.call(props.$bricks);$wall.data('masonry',props)},resize:function($wall,opts,props){props.masoned=!!$wall.data('masonry');var prevColCount=0;msnry.setup($wall,opts,props);if(props.colCount!=prevColCount){msnry.arrange($wall,opts,props)}}};return this.each(function(){var $wall=$(this),props={};props.masoned=!!$wall.data('masonry');var previousOptions=props.masoned?$wall.data('masonry').options:{},opts=$.extend({},$.fn.masonry.defaults,previousOptions,options),resizeOn=previousOptions.resizeable;props.options=opts.saveOptions?opts:previousOptions;callback=callback||function(){};msnry.getBricks($wall,props,opts);if(!props.$bricks.length){return this}msnry.setup($wall,opts,props);msnry.arrange($wall,opts,props);if(!resizeOn&&opts.resizeable){$(window).bind('smartresize.masonry',function(){msnry.resize($wall,opts,props)})}if(resizeOn&&!opts.resizeable){$(window).unbind('smartresize.masonry')}})};$.fn.masonry.defaults={singleMode:false,columnWidth:undefined,itemSelector:undefined,appendedContent:undefined,saveOptions:true,resizeable:true,animate:false,animationOptions:{}}})(jQuery);
