;(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=$wall.data('masonry').colCount;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);
