(function($){
    // plugin initialization
    $.fn.resize = function(selector){
        var resize = this;
        if (resize.length==0) { return resize; }
        
        // Find element to resize
        var elementToResize = resize.find(selector);
        
        // Find ideal height
        var masterHeight = resize.height();
        var sliblings = elementToResize.parent().children();
        var sliblingsH = 0;
        
        var getStyleHeight = function(elem,style) {
            var sh = parseInt(elem.css(style));
            return isNaN(sh) ? 0 : sh;
        };
        
        for (var i=0,len=sliblings.length;i<len;i++) {
            var sib = $(sliblings[i]);
            
            if (sib.css("display") != "none" && (sib.css("position") != "absolute" || sib.is('.footer'))) {
                sliblingsH += sib.height();
                sliblingsH += getStyleHeight(sib,"margin-top");
                sliblingsH += getStyleHeight(sib,"margin-bottom");
                sliblingsH += getStyleHeight(sib,"padding-top");
                sliblingsH += getStyleHeight(sib,"padding-bottom");
            }
        }
        
        var maxH = masterHeight - (sliblingsH - elementToResize.height());
        
        // Set new height
        elementToResize.height(maxH);
        
        // Return
        return resize;
    };

})(jQuery);