﻿(function($) {


    $.fn.fadeBack = function(options) {

        var _s = $.extend($.fn.fadeBack.defaultOptions, options);

        return this.each(function() {

            var t = $(this);
            var oh = t.height();
            var ow = t.width();
            var ih = t.html();
            var p = t.parent();
            var tl = t.position();
            var id = t[0].id + "_content";

            t.css({ height: oh, width: ow }).html("").fadeTo("fast", _s.opacity);

            var padding = dimSum(getPadding(t), getBorderSizes(t));

            var ncss = { top: tl.top, left: tl.left,
                position: "absolute", height: oh, width: ow,
                paddingTop: padding.top, paddingBottom: padding.bottom,
                paddingLeft: padding.left, paddingRight: padding.right
            };

            $("<div id='" + id + "'>" + ih + "</div>").css(ncss).appendTo(p);

        });

        function dimSum(dim1, dim2) {
            return { top: dim1.top + dim2.top,
                bottom: dim1.bottom + dim2.bottom,
                left: dim1.left + dim2.top,
                right: dim1.right + dim2.right
            }
        };

        function getBorderSizes(sel) {
            return {
                top: toNum(sel.css("borderTopWidth")),
                bottom: toNum(sel.css("borderBottomWidth")),
                left: toNum(sel.css("borderLeftWidth")),
                right: toNum(sel.css("borderRightWidth"))
            };
        };

        function getPadding(sel) {
            return { top: toNum(sel.css("paddingTop")),
                bottom: toNum(sel.css("paddingTop")),
                left: toNum(sel.css("paddingLeft")),
                right: toNum(sel.css("paddingRight"))
            };
        };

        function toNum(strNum) {
            if (strNum && strNum != "")
                return parseFloat(strNum);
            return 0;
        };

    }

})(jQuery);

$.fn.fadeBack.defaultOptions = { opacity: 0.4 }