(function($j){
	$j.positionFixed=function(el){
		$j(el).each(function(){
			new fixed(this);
		})
		return el;
	}
	$j.fn.positionFixed=function(){
		return $j.positionFixed(this);
	}
	var fixed=$j.positionFixed.impl=function(el){
		var o=this;
		o.sts={
			target:$j(el).css('position','fixed'),
			container:$j(window)
		}
		o.sts.currentCss={
			top:o.sts.target.css('top'),
			right:o.sts.target.css('right'),
			bottom:o.sts.target.css('bottom'),
			left:o.sts.target.css('left')
		}
		if(!o.ie6)return;
		o.bindEvent();
	}
	$j.extend(fixed.prototype,{
		ie6:$.browser.msie&&$.browser.version<7.0,
		bindEvent:function(){
			var o=this;
			o.sts.target.css('position','absolute')
			o.overRelative().initBasePos();
			o.sts.target.css(o.sts.basePos);
			o.sts.container.scroll(o.scrollEvent()).resize(o.resizeEvent());
			o.setPos();
		},
		overRelative:function(){
			var o=this;
			var relative=o.sts.target.parents().filter(function(){
				if($j(this).css('position')=='relative')return this;
			});
			if(relative.size()>0)relative.after(o.sts.target);
			return o;
		},
		initBasePos:function(){
			var o=this;
			o.sts.basePos={
				top:o.sts.target.offset().top-(o.sts.currentCss.top=='auto'?o.sts.container.scrollTop():0),
				left:o.sts.target.offset().left-(o.sts.currentCss.left=='auto'?o.sts.container.scrollLeft():0)
			}
			return o;
		},
		setPos:function(){
			var o=this;
			o.sts.target.css({
				top:o.sts.container.scrollTop()+o.sts.basePos.top,
				left:o.sts.container.scrollLeft()+o.sts.basePos.left
			});
		},
		scrollEvent:function(){
			var o=this;
			return function(){
				o.setPos();
			}
		},
		resizeEvent:function(){
			var o=this;
			return function(){
				setTimeout(function(){
					o.sts.target.css(o.sts.currentCss);
					o.initBasePos();
					o.setPos();
				},1);
			}
		}
	});
})(jQuery);

jQuery(function($j){
	$j('.fixed').positionFixed();
});

