/**
* Revision: 1/14/2009, Jamie Krug
* Changed signature to accept one optional argument (options) as an associative array to better support more optional Ňarguments" in a more readable fashion.
* Added overflow option, to override default CSS declaration.
* Added addToHeight option, to optionally pad tallest height (can be used as a quick fix in quirky situations where a couple extra pixels will avoid overflow).
*
* Example 1: $(".cols").equalHeights();
* Example 2: $(".cols").equalHeights( { minHeight: 400 } );
* Example 3: $(".cols").equalHeights( { minHeight: 100, maxHeight: 300 } );
* Example 4: $(".cols").equalHeights( { overflow: 'visible' } );
* Example 5: $(".cols").equalHeights( { addToHeight: 3 } );
*


(function($) {
$.fn.equalHeights = function(optionsArg) {
var options = { minHeight: 0, overflow: 'auto', addToHeight: 0 };
for (var n in arguments[0]) { options[n] = arguments[0][n]; }
var tallest = options.minHeight;
this.each(function() {
if($(this).height() > tallest) {
tallest = $(this).height();
}
});
if((options.maxHeight) && tallest > options.maxHeight) tallest = options.maxHeight;
tallest = tallest + options.addToHeight;
return this.each(function() {
$(this).height(tallest).css("overflow",options.overflow);
});
}
})(jQuery);
*/


(function($) {
$.fn.equalHeights = function(minHeight, maxHeight) {
var tallest = (minHeight) ? minHeight : 0;
function addSize(elem,baseHeight,operation) {
var border_top = parseInt(elem.css('border-top-width'));
var border_bottom = parseInt(elem.css('border-bottom-width'));
var padding_top = parseInt(elem.css('padding-top'));
var padding_bottom = parseInt(elem.css('padding-bottom'));
if (operation == 'subtract') {
if (!isNaN(padding_top)) baseHeight -= padding_top;
if (!isNaN(padding_bottom)) baseHeight -= padding_bottom;
if (!isNaN(border_top)) baseHeight -= border_top;
if (!isNaN(border_bottom)) baseHeight -= border_bottom;
} else {
if (!isNaN(padding_top)) baseHeight += padding_top;
if (!isNaN(padding_bottom)) baseHeight += padding_bottom;
if (!isNaN(border_top)) baseHeight += border_top;
if (!isNaN(border_bottom)) baseHeight += border_bottom;
}
return baseHeight;
}
this.each(function() {
var height = $(this).height();
height = addSize($(this),height);
if (height > tallest) tallest = height;
});
if((maxHeight) && tallest > maxHeight) tallest = maxHeight;
return this.each(function() {
tallest2 = addSize($(this),tallest,'subtract')
$(this).height(tallest2);
});
}
})(jQuery);
