(function($){

	$.fn.equalizeHeights = function() {
		var opt = {};
		var tallestHeight, tallest;
		
		// extend our default options with anything passed in by user
		$.extend(opt, $.fn.equalizeHeights.defaults, arguments[0] || {});

		this.each(function(){

			// our extended element
			var el = $(this);

			if(!tallestHeight) {
				tallestHeight = el.outerHeight(opt.includeMargin);
				tallest = el;
			} else { 
				if((el.outerHeight(opt.includeMargin) > tallestHeight)) {
					tallestHeight = el.outerHeight(opt.includeMargin);
					tallest = el;
				}
			}
			
		});
		
		
		return this.each(function(){
			var height = $(this).height();
			var outerHeight = $(this).outerHeight(opt.includeMargin);
			
			if(tallest.get()[0] != this) {
				var finalHeight = height + (tallestHeight - outerHeight) + opt.offset;
				if(!opt.setChildren) {
						$(this).height(finalHeight);

				} else {
					var delta = finalHeight - $(this).outerHeight(opt.includeMargin);
					var child = $(this).find(opt.target);
					child.height(child.height() + delta + opt.offset);
				}
			}
		});

	};

	// Default options for the plugin.
	$.fn.equalizeHeights.defaults = {
		includeMargin: false,
		setChildren: false,
		target: ">:last-child",
		offset: 0
	};
	
})(jQuery);
