/* globals jQuery, packery, sowb */

var sowb = window.sowb || {};

jQuery( function($){
	sowb.setupSimpleMasonries = function() {
		var $grid = $('.sow-masonry-grid');

		var resizeMasonry = function(){
			$grid.each(function(){
				var $gridEl = $(this);
				var layouts = $gridEl.data('layouts');
				var tabletQuery = window.matchMedia('(max-width: ' + layouts.tablet.breakPoint + 'px)');
				var mobileQuery = window.matchMedia('(max-width: ' + layouts.mobile.breakPoint + 'px)');
				var layout = layouts.desktop;
				if(mobileQuery.matches) {
					layout = layouts.mobile;
				} else if (tabletQuery.matches) {
					layout = layouts.tablet;
				}
				var numColumns = layout.numColumns;
				$gridEl.css('width', 'auto');
				var horizontalGutterSpace = layout.gutter * ( numColumns - 1 );
				var columnWidth = Math.floor( ( $gridEl.width() - ( horizontalGutterSpace ) ) / numColumns );
				$gridEl.width( ( columnWidth * numColumns ) + horizontalGutterSpace );

				$gridEl.imagesLoaded( function() {
					$gridEl.find('> .sow-masonry-grid-item').each(function(){
						var $$ = $(this);
						var colSpan = $$.data('colSpan');
						colSpan = Math.max(Math.min(colSpan, layout.numColumns), 1);
						$$.width( ( columnWidth * colSpan ) + (layout.gutter * (colSpan-1)));
						var rowSpan = $$.data('rowSpan');
						rowSpan = Math.max(Math.min(rowSpan, layout.numColumns), 1);
						//Use rowHeight if non-zero else fall back to matching columnWidth.
						var rowHeight = layout.rowHeight || columnWidth;
						$$.css('height', (rowHeight * rowSpan) + (layout.gutter * (rowSpan-1)));

						var $img = $$.find('> img,> a > img');
						var imgAR = $img.attr('height') > 0 ? $img.attr('width')/$img.attr('height') : 1;
						var itemAR = $$.height() > 0 ? $$.width()/$$.height() : 1;
						imgAR = parseFloat(imgAR.toFixed(3));
						itemAR = parseFloat(itemAR.toFixed(3));
						if(imgAR > itemAR) {
							$img.css('width', 'auto');
							$img.css('height', '100%');
							$img.css('margin-top', '');
							var marginLeft = ($img.width() - $$.width()) * -0.5;
							$img.css('margin-left', marginLeft+'px');
						}
						else {
							$img.css('height', 'auto');
							$img.css('width', '100%');
							$img.css('margin-left', '');
							var marginTop = ($img.height() - $$.height()) * -0.5;
							$img.css('margin-top', marginTop+'px');
						}
					});
					$gridEl.packery({
						itemSelector: '.sow-masonry-grid-item',
						columnWidth: columnWidth,
						gutter: layout.gutter
					});
				});
			});
		};

		$(window).on('resize panelsStretchRows', resizeMasonry);

		// Ensure that the masonry has resized correctly on load.
		setTimeout( function () {
			resizeMasonry();
		}, 100 );
	};
	sowb.setupSimpleMasonries();

	$( sowb ).on( 'setup_widgets', sowb.setupSimpleMasonries );
} );

window.sowb = sowb;
