var wrapScroll=function(){this.initialize.apply(this,arguments);};

wrapScroll.prototype={
	Interval:10,
	Duration:100,
	marginTop:0,
	marginBottom:0,
	_timer:0,
	_obj:null,
	initialize:function(e,p,r){
		this.attach(window,'load',this.bind(this.prepare,arguments));},
	prepare:function(e,p,r){
		if(o=document.getElementById(e)){
			this._obj={'e':o,'p':(p)?document.getElementById(p):o.parentNode,'r':(r)?document.getElementById(r):null};
			o.style.position='absolute';
			if((c=o.offsetTop)!=(v=((o.style.top=o.offsetTop+'px')!='')?o.offsetTop:0)){
				o.style.marginTop=0;o.style.top=c+(v-c)+'px';}
			this.callback();}
		},
	callback:function(){
		f=this.event.update(this,this._obj);
		setTimeout(this.bind(this.callback),(f)?10:this.Interval);
		},
	bind:function(method,arg){
		var _this=this;var _arg=(arg)?arg:[];
		return function(){
			method.apply(_this,_arg);}
		},
	attach:function(e,name,func,cap){
		if(e.addEventListener){
			e.addEventListener(name,func,cap);}
		else if(e.attachEvent){
			e.attachEvent('on'+name,func);}
		},
	setTween:function(f,d){
		if(f){this.tween=f;}
		if(d){this.Duration=d;}
		},
	tween:function(t,b,c,d){
		return c*(t/=d)*t+b;}
};

wrapScroll.prototype.event={
	update:function(t,o){
		var tpos=Math.max(this.scroll(),(o.r)?this.offset(o.r)+this.height(o.r):this.offset(o.p));
		var bpos=(this.offset(o.p)+this.height(o.p))-(this.height(o.e)+t.marginBottom);
		var s=this.offset(o.e);
		var e=Math.min(bpos,tpos+t.marginTop);

		if((t._prev!=e)||(t._timer>t.Duration)){
			t._timer=0;}

		if((t._prev=e)!=s){
			o.e.style.top=t.tween(t._timer++,s,e-s,t.Duration,o.e.style)+'px';
			return true;}

return false;},

scroll:function(){
	return document.body.scrollTop||document.documentElement.scrollTop;},

height:function(o){
	return o.offsetHeight||document.body.scrollHeight||document.documentElement.scrollHeight;},

offset:function(o){
	y=o.offsetTop;if(o.style.position=='absolute')return y;
	while(o=o.offsetParent){y+=o.offsetTop;}return y;}

};