jQuery.fn.supersleight = function(settings) {
	settings = jQuery.extend({
		input_src: true,
		imgs: true,
		backgrounds: true,
		shim: 'x.gif',
		apply_positioning: true
	}, settings);
	
	var SSHeight = function(self, args) {
		var arguments = {
			border: ('border' in args)?args['border']:true,
			margin: ('margin' in args)?args['margin']:true,
			padding: ('padding' in args)?args['padding']:true
		};
		if (!self||(('exists' in self)&&!self.exists())) {return 0;}
	
		var totalHeight = (self.height()>0)?self.height():self.css("height").replace(/px/g,"");
	
		var borderHeight = parseInt(self.css("borderTopWidth")) + parseInt(self.css("borderBottomWidth"));
		var marginHeight = parseInt(self.css("margin-top")) + parseInt(self.css("margin-bottom"));
		var paddingHeight = parseInt(self.css("padding-top")) + parseInt(self.css("padding-bottom"));
		
		if (arguments.border && borderHeight > 0) {
			totalHeight -= borderHeight;
		}
		if (arguments.margin && marginHeight > 0) {
			totalHeight -= marginHeight;
		}
		if (arguments.padding && paddingHeight > 0) {
			totalHeight -= paddingHeight;
		}
		return totalHeight;
	};

	var SSWidth = function(self, args) {
		var arguments = {
			border: ('border' in args)?args['border']:true,
			margin: ('margin' in args)?args['margin']:true,
			padding: ('padding' in args)?args['padding']:true
		};
		if (!self||(('exists' in self)&&!self.exists())) {return 0;}
	
		var totalWidth = (self.width()>0)?self.width():self.css("width").replace(/px/g,"");
	
		var borderWidth = parseInt(self.css("borderLeftWidth")) + parseInt(self.css("borderRightWidth"));
		var marginWidth = parseInt(self.css("margin-left")) + parseInt(self.css("margin-right"));
		var paddingWidth = parseInt(self.css("padding-left")) + parseInt(self.css("padding-right"));
	
		if (arguments.border && borderWidth > 0) {
			totalWidth -= borderWidth;
		}
		if (arguments.margin && marginWidth > 0) {
			totalWidth -= marginWidth;
		}
		if (arguments.padding && paddingWidth > 0) {
			totalWidth -= paddingWidth;
		}
		
		return totalWidth;
	}

	return this.each(function(){
		if (jQuery.browser.msie && parseInt(jQuery.browser.version, 10) < 7 && parseInt(jQuery.browser.version, 10) > 4) {
			jQuery(this).find('*').andSelf().each(function(i,obj) {
				var self = jQuery(obj);
				// background pngs
				if (settings.backgrounds && self.css('background-image').match(/\.png/i) !== null) {
					var bg = self.css('background-image');
					var src = bg.substring(5,bg.length-2);
					var mode = (self.css('background-repeat') == 'no-repeat' ? 'crop' : 'scale');
					var styles = {
						'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='" + mode + "')",
						'background-image': 'url('+settings.shim+')'
					};
					self.css(styles);
				};
				// image elements
				if (settings.imgs && self.is('img[src$=png]')){
					var styles = {
						'width': SSWidth(self,{margin:false}) + 'px',
						'height': SSHeight(self,{margin:false}) + 'px',
						'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + self.attr('src') + "', sizingMethod='scale')"
					};
					self.css(styles).attr('src', settings.shim);
				};
				// input image elements with src
				if (settings.input_src && self.is('input[src$=png]')){
					var styles = {
						'width': SSWidth(self,{margin:false}) + 'px',
						'height': SSHeight(self,{margin:false}) + 'px',
						'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + self.attr('src') + "', sizingMethod='scale')"
					};
					self.css(styles).attr('src', settings.shim);
				};
				// apply position to 'active' elements
				if (settings.apply_positioning && self.is('a, input, label') && (self.css('position') === '' || self.css('position') == 'static')){
					self.css('position', 'relative');
				};
			});
		};
	});
};


