(function( $ ) {
	
	$.fn.delayedResizer = function(_delay, _ignoredVariance) {
		
		var resizeTimeout;
		var resizeDelay = _delay ? _delay : 250;
		var isResizing = false;
		var windowWidth = $(window).width();
		var windowHeight = $(window).height();
		var ignoredVariance = _ignoredVariance ? _ignoredVariance : 20;
		
		function runResizer() {
			resizeTimeout = setTimeout( function () {
				var newWindowWidth = $(window).width();
				var newWindowHeight = $(window).height();
				var diffW = windowWidth - newWindowWidth;
				var diffH = windowHeight - newWindowHeight;
				
				// Check difference in window with, if there is very little or none then
				// don't perform the resize. IE is notorious for firing resize events when
				// nothing has changed. This adds a lot of extra burden on the UI
				if ((diffW < (-1*ignoredVariance) || diffW > ignoredVariance) || (diffH < (-1*ignoredVariance) || diffH > ignoredVariance))
				{
					isResizing = true;
					
					windowWidth = $(window).width();
					windowHeight = $(window).height();
					
					var event = jQuery.Event("delayed_resize");
					$(window).trigger(event);
					
					isResizing = false;
				}
			}, resizeDelay);
		}
		
		$(window).resize(function() {
			if (resizeTimeout)
				clearTimeout(resizeTimeout);
			if (!isResizing) {}
				runResizer();
		});
	
	};
	
})( jQuery );
