﻿jQuery.fn.center = function() {
    // Always return each...
    return this.each(function() {
        var t = jQuery(this);

        // Set position to other than 'static' so element shrink-wraps and width/height is calculated properly
        //t.css({position: 'fixed'});

        // Why are there no jQuery.fn.outerWidth/Height:s?
        var w = t.width(),
        h = t.height(),
        lrPadding = parseInt(t.css('paddingLeft'), 10) + parseInt(t.css('paddingRight'), 10),
        lrBorder = parseInt(t.css('borderLeftWidth'), 10) + parseInt(t.css('borderRightWidth'), 10),
        tbPadding = parseInt(t.css('paddingTop'), 10) + parseInt(t.css('paddingBottom'), 10),
        tbBorder = parseInt(t.css('borderTopWidth'), 10) + parseInt(t.css('borderBottomWidth'), 10);

        if (isNaN(lrPadding)) { lrPadding = 0; }
        if (isNaN(lrBorder)) { lrBorder = 0; }
        if (isNaN(tbPadding)) { tbPadding = 0; }
        if (isNaN(tbBorder)) { tbBorder = 0; }

        var leftMargin = (w + lrPadding + lrBorder) / 2;
        var topMargin = (h + tbPadding + tbBorder) / 2;
        t.css({
            position: 'fixed',
            left: '50%',
            top: '50%',
            marginLeft: '-' + leftMargin + 'px',
            marginTop: '-' + topMargin + 'px'
        });

        /* Use this code if you care about IE<7, this requires the dimensions plug-in tho
        // Calculate left and top pos values
        var leftPos = (jQuery(window).width() - jQuery(this).outerWidth()) / 2 + jQuery(window).scrollLeft(), 
        topPos = (jQuery(window).height() - jQuery(this).outerHeight()) / 2 + jQuery(window).scrollTop();

                // Make sure element is not out of bounds
        leftPos = (leftPos < 0) ? 0 : leftPos;
        topPos = (topPos < 0) ? 0 : topPos;

                jQuery(this).css({left: leftPos +'px', top: topPos +'px', zIndex: '1000'});
        */
    });
};
