(function( $ ) {
	
	window.bt_min_item_width = 250;
	
	window.bt_packery_tweak = function( $this, type ) {
		
		if ( ( navigator.userAgent.match( /iPhone/i ) ) || ( navigator.userAgent.match( /iPod/i ) ) || ( navigator.userAgent.match( /iPad/i ) ) ) {
			appleMobileDevice = true;
		} else {
			appleMobileDevice = false;
		}		
		
		if ( type == 'classic' ) {
			//$this.packery( 'destroy' );
			bt_packery_tweak1( $this );
			$this.packery();
			bt_packery_tweak3( $this );
			bt_packery_tweak1( $this );
			$this.packery();
			bt_packery_tweak3( $this );
		} else {
			if ( appleMobileDevice ) {
				$this.packery();
				$this.packery( 'destroy' );
				bt_packery_ttweak1( $this );
				$this.packery({
					itemSelector: '.gridItem',
					columnWidth: '.gridSizer',
					gutter: 0,
					percentPosition: true,
					transitionDuration: 0,
					isResizeBound: false
				});
				bt_packery_ttweak3( $this );
			} else {
				bt_packery_ttweak1( $this );
				$this.packery();
				bt_packery_ttweak3( $this );
			}
		}
		
	}
	
	var bt_packery_tweak1 = function( $this ) {
	
		$this.find( '.btMediaBox' ).each(function() {
			if ( $( this ).attr( 'data-hw' ) != undefined ) {
				$( this ).height( $( this ).outerWidth() * $( this ).attr( 'data-hw' ) );
			}
		});
		
		var container_w = $this.width();
		var col = $this.data( 'col' );
		var grid_sizer_w = $this.find( '.gridSizer' ).width();

		if ( container_w < 2 * window.bt_min_item_width ) {
			$this.find( '.gridSizer, .gridItem' ).each(function() {
				$( this ).css( 'width', '100%' );
				if ( grid_sizer_w > 0 ) {
					var new_w = parseInt( $( this ).css( 'width' ) );
					if ( 1 * new_w > container_w ) new_w = new_w - 1;
					$( this ).width( new_w );	
				}					
			});
			
		} else if ( container_w < 3 * window.bt_min_item_width ) {
			$this.find( '.gridSizer, .gridItem' ).each(function() {
				$( this ).css( 'width', '50%' );
				if ( grid_sizer_w > 0 ) {
					var new_w = parseInt( $( this ).css( 'width' ) );
					if ( 2 * new_w > container_w ) new_w = new_w - 1;
					$( this ).width( new_w );
				}					
			});
	
		} else if ( container_w < 4 * window.bt_min_item_width ) {
			$this.find( '.gridSizer, .gridItem' ).each(function() {
				$( this ).css( 'width', '33.333333333%' );
				if ( grid_sizer_w > 0 ) {
					var new_w = parseInt( $( this ).css( 'width' ) );
					if ( 3 * new_w > container_w ) new_w = new_w - 1;
					$( this ).width( new_w );	
				}					
			});
			
		} else if ( container_w < 5 * window.bt_min_item_width && col > 4 ) {
			$this.find( '.gridSizer, .gridItem' ).each(function() {
				$( this ).css( 'width', '25%' );
				if ( grid_sizer_w > 0 ) {
					var new_w = parseInt( $( this ).css( 'width' ) );
					if ( 4 * new_w > container_w ) new_w = new_w - 1;
					$( this ).width( new_w );	
				}					
			});
			
		} else if ( container_w < 6 * window.bt_min_item_width && col > 5 ) {
			$this.find( '.gridSizer, .gridItem' ).each(function() {
				$( this ).css( 'width', '20%' );
				if ( grid_sizer_w > 0 ) {
					var new_w = parseInt( $( this ).css( 'width' ) );
					if ( 5 * new_w > container_w ) new_w = new_w - 1;
					$( this ).width( new_w );	
				}					
			});
			
		} else {
			
			$this.find( '.gridSizer, .gridItem' ).each(function() {
				if ( col == '3' ) {
					$( this ).css( 'width', '33.333333333%' );
				} else if ( col == '4' ) {
					$( this ).css( 'width', '25%' );
				} else if ( col == '5' ) {
					$( this ).css( 'width', '20%' );
				} else if ( col == '6' ) {
					$( this ).css( 'width', '16.666666667%' );
				}
				if ( grid_sizer_w > 0 ) {
					var new_w = parseInt( $( this ).css( 'width' ) );
					if ( col * new_w > container_w ) new_w = new_w - 1;
					$( this ).width( new_w );	
				}					
			});
		}
	}
	
	var bt_packery_tweak2 = function( $this ) {
		var container_w = $( this ).width();
		var grid_sizer_w = $( this ).find( '.gridSizer' ).width();
		$( this ).find( '.gridItem' ).each(function() {
			var l = $( this ).css( 'left' );
			var m = parseFloat( l ) / grid_sizer_w;
			$( this ).css( 'left', Math.round( m ) * Math.floor( grid_sizer_w ) );
			
			var w = $( this ).css( 'width' );
			m = parseFloat( w ) / grid_sizer_w;
			$( this ).width( Math.round( m ) * Math.floor( grid_sizer_w ) );
		});
	}
	
	var bt_packery_tweak3 = function( $this ) {
		var container_w = $( this ).width();
		$( this ).find( '.gridItem' ).each(function() {
			var l = $( this ).css( 'left' );
			var w = $( this ).width();
			var d = container_w - ( parseInt( l ) + w );
			if ( Math.abs( d ) < 15 ) {
				$( this ).width( parseInt( w ) + d );
			}
		});
	}
	
	var bt_packery_ttweak1 = function( $this ) {

		var container_w = $this.width();

		var col = $this.data( 'col' );
		var grid_sizer_w = $this.find( '.gridSizer' ).width();
		var new_w = 0;
		
		if ( container_w < 2 * window.bt_min_item_width ) {
			
			$this.find( '.gridSizer, .gridItem.bt11, .gridItem.bt12' ).each(function() {
				$( this ).css( 'width', '100%' );
				if ( grid_sizer_w > 0 ) {
					new_w = parseInt( $( this ).css( 'width' ) );
					if ( 1 * new_w > container_w ) new_w = new_w - 1;
					$( this ).width( new_w );	
				}					
				$( this ).innerHeight( $( this ).width() );
				if ( $( this ).hasClass( 'bt12' ) ) {
					$( this ).innerHeight( $( this ).width() * 2 );
				}
				if ( $( this ).hasClass( 'gridSizer' ) ) {
					$( this ).innerHeight( 0 );
				}
			});
			
			$this.find( '.gridItem.bt21, .gridItem.bt22' ).each(function() {
				$( this ).width( new_w );				
				$( this ).innerHeight( $( this ).width() );
				if ( $( this ).hasClass( 'bt21' ) ) {
					$( this ).innerHeight( grid_sizer_w * .5 );
				} else if ( $( this ).hasClass( 'bt22' ) ) {
					$( this ).innerHeight( grid_sizer_w );
				}
			});
			
		} else if ( container_w < 3 * window.bt_min_item_width ) {
			$this.find( '.gridSizer, .gridItem.bt11, .gridItem.bt12' ).each(function() {
				$( this ).css( 'width', '50%' );
				if ( grid_sizer_w > 0 ) {
					new_w = parseInt( $( this ).css( 'width' ) );
					if ( 2 * new_w > container_w ) new_w = new_w - 1;
					$( this ).width( new_w );	
				}					
				$( this ).innerHeight( $( this ).width() );
				if ( $( this ).hasClass( 'bt12' ) ) {
					$( this ).innerHeight( $( this ).width() * 2 );
				}
				if ( $( this ).hasClass( 'gridSizer' ) ) {
					$( this ).innerHeight( 0 );
				}
			});

			$this.find( '.gridItem.bt21, .gridItem.bt22' ).each(function() {
				$( this ).width( new_w * 2 );					
				$( this ).innerHeight( $( this ).width() );
				if ( $( this ).hasClass( 'bt21' ) ) {
					$( this ).innerHeight( grid_sizer_w );
				} else if ( $( this ).hasClass( 'bt22' ) ) {
					$( this ).innerHeight( grid_sizer_w * 2 );
				}
			});
			
		} else if ( container_w < 4 * window.bt_min_item_width ) {
			$this.find( '.gridSizer, .gridItem.bt11, .gridItem.bt12' ).each(function() {
				$( this ).css( 'width', '33.333333333%' );
				
				if ( grid_sizer_w > 0 ) {
					new_w = parseInt( $( this ).css( 'width' ) );
					if ( 3 * new_w > container_w ) new_w = new_w - 1;
					$( this ).width( new_w );
				}
				
				$( this ).innerHeight( $( this ).width() );
				if ( $( this ).hasClass( 'bt12' ) ) {
					$( this ).innerHeight( $( this ).width() * 2 );
				}
				if ( $( this ).hasClass( 'gridSizer' ) ) {
					$( this ).innerHeight( 0 );
				}
			});

			$this.find( '.gridItem.bt21, .gridItem.bt22' ).each(function() {
				$( this ).width( new_w * 2 );
				$( this ).innerHeight( $( this ).width() );
				if ( $( this ).hasClass( 'bt21' ) ) {
					$( this ).innerHeight( grid_sizer_w );
				} else if ( $( this ).hasClass( 'bt22' ) ) {
					$( this ).innerHeight( grid_sizer_w * 2 );
				}
			});
			
		} else if ( container_w < 5 * window.bt_min_item_width && col > 4 ) {
			$this.find( '.gridSizer, .gridItem.bt11, .gridItem.bt12' ).each(function() {
				$( this ).css( 'width', '25%' );
				
				if ( grid_sizer_w > 0 ) {
					new_w = parseInt( $( this ).css( 'width' ) );
					if ( 4 * new_w > container_w ) new_w = new_w - 1;
					$( this ).width( new_w );
				}
				
				$( this ).innerHeight( $( this ).width() );
				if ( $( this ).hasClass( 'bt12' ) ) {
					$( this ).innerHeight( $( this ).width() * 2 );
				}
				if ( $( this ).hasClass( 'gridSizer' ) ) {
					$( this ).innerHeight( 0 );
				}
			});

			$this.find( '.gridItem.bt21, .gridItem.bt22' ).each(function() {
				$( this ).width( new_w * 2 );
				$( this ).innerHeight( $( this ).width() );
				if ( $( this ).hasClass( 'bt21' ) ) {
					$( this ).innerHeight( grid_sizer_w );
				} else if ( $( this ).hasClass( 'bt22' ) ) {
					$( this ).innerHeight( grid_sizer_w * 2 );
				}
			});
			
		} else if ( container_w < 6 * window.bt_min_item_width && col > 5 ) {
			$this.find( '.gridSizer, .gridItem.bt11, .gridItem.bt12' ).each(function() {
				$( this ).css( 'width', '20%' );
				
				if ( grid_sizer_w > 0 ) {
					new_w = parseInt( $( this ).css( 'width' ) );
					if ( 5 * new_w > container_w ) new_w = new_w - 1;
					$( this ).width( new_w );
				}
				
				$( this ).innerHeight( $( this ).width() );
				if ( $( this ).hasClass( 'bt12' ) ) {
					$( this ).innerHeight( $( this ).width() * 2 );
				}
				if ( $( this ).hasClass( 'gridSizer' ) ) {
					$( this ).innerHeight( 0 );
				}
			});

			$this.find( '.gridItem.bt21, .gridItem.bt22' ).each(function() {
				$( this ).width( new_w * 2 );
				$( this ).innerHeight( $( this ).width() );
				if ( $( this ).hasClass( 'bt21' ) ) {
					$( this ).innerHeight( grid_sizer_w );
				} else if ( $( this ).hasClass( 'bt22' ) ) {
					$( this ).innerHeight( grid_sizer_w * 2 );
				}
			});
			
		} else {

			$this.find( '.gridSizer, .gridItem.bt11, .gridItem.bt12' ).each(function() {
				if ( col == '3' ) {
					$( this ).css( 'width', '33.333333333%' );
				} else if ( col == '4' ) {
					$( this ).css( 'width', '25%' );
				} else if ( col == '5' ) {
					$( this ).css( 'width', '20%' );
				} else if ( col == '6' ) {
					$( this ).css( 'width', '16.666666667%' );
				}

				if ( grid_sizer_w > 0 ) {
					new_w = parseInt( $( this ).css( 'width' ) );
					if ( col * new_w > container_w ) new_w = new_w - 1;
					$( this ).width( new_w );	
				}
				
				$( this ).innerHeight( $( this ).width() );
				if ( $( this ).hasClass( 'bt12' ) ) {
					$( this ).innerHeight( $( this ).width() * 2 );
				}
				if ( $( this ).hasClass( 'gridSizer' ) ) {
					$( this ).innerHeight( 0 );
				}
			});
			
			$this.find( '.gridItem.bt21, .gridItem.bt22' ).each(function() {
				$( this ).width( new_w * 2 );
	
				$( this ).innerHeight( $( this ).width() );
				if ( $( this ).hasClass( 'bt21' ) ) {
					$( this ).innerHeight( grid_sizer_w );
				} else if ( $( this ).hasClass( 'bt22' ) ) {
					$( this ).innerHeight( grid_sizer_w * 2 );
				}
				if ( $( this ).hasClass( 'gridSizer' ) ) {
					$( this ).innerHeight( 0 );
				}
			});
		}
	}
	
	var bt_packery_ttweak2 = function( $this ) {
		var container_w = $this.width();
		var grid_sizer_w = $this.find( '.gridSizer' ).width();
		$this.find( '.gridItem' ).each(function() {
			var l = $( this ).css( 'left' );
			var m = parseFloat( l ) / grid_sizer_w;
			$( this ).css( 'left', Math.round( m ) * Math.floor( grid_sizer_w ) );

			if ( container_w > 480 ) {
				var t = $( this ).css( 'top' );
				m = parseFloat( t ) / grid_sizer_w;
				$( this ).css( 'top', Math.round( m ) * Math.floor( grid_sizer_w ) );
			}
			
			var w = $( this ).css( 'width' );
			m = parseFloat( w ) / grid_sizer_w;
			$( this ).width( Math.round( m ) * Math.floor( grid_sizer_w ) );
		});
	}
	
	var bt_packery_ttweak3 = function( $this ) {
		var container_w = $this.width();
		$this.find( '.gridItem' ).each(function() {
			
			var new_l = parseFloat( $( this ).css( 'left' ) );
			new_l = Math.round( new_l );
			$( this ).css( 'left',  new_l + 'px' );
			
			var w = $( this ).width();
			var d = container_w - ( new_l + w );
			if ( Math.abs( d ) < 15 ) {
				$( this ).width( parseInt( w ) + d );
			}
		});
	}

})( jQuery );