function vscroll() {
	this.contDiv;
	this.bar;
	this.mouse;
	this.initY;
	this.dragging;
	this.barY;
	this.minY;
	this.maxY;
	this.ratio;
	this.clipDiv;
	
	this.init = function() {
		this.contDiv = document.getElementById(this.contDiv);
		this.clipDiv = document.getElementById(this.clipDiv);
		this.bar = document.getElementById(this.bar);
		this.initY = findPos(this.bar)[1];
		this.bar.style.marginTop = this.minY+"px";
		this.ratio = (this.contDiv.offsetHeight-this.clipDiv.offsetHeight)/(this.maxY-this.minY);
		this.mouse = new MousePosition();
		
		this.registerEvents();
	}
	
	this.reinit = function(obj) {
		this.contDiv.style.marginTop = "0px";
		
		if(obj) {
			var pos = findPos(obj)[1]-this.initY;
		} else {
			var pos = 0;
			
			if(oldans) {
				oldans.style.display = 'none';
			}
		}
		
		this.registerEvents();
		
		this.ratio = (this.contDiv.offsetHeight-this.clipDiv.offsetHeight)/(this.maxY-this.minY);
		this.setPos(Math.ceil(pos/this.ratio));
	}
	
	this.registerEvents = function() {
		if(this.contDiv.offsetHeight <= this.maxY-this.minY) {
			this.bar.style.display = 'none';
			return false;
		} else {
			this.bar.style.display = 'block';
		}
		
		if (document.addEventListener) {
			this.bar.addEventListener('mousedown', Delegate(this, startDrag), false);
			document.addEventListener('mouseup', Delegate(this, stopDrag), false);
			document.addEventListener('mousemove', Delegate(this, move), false);
		} else if (document.attachEvent) {
			this.bar.attachEvent('onmousedown', Delegate(this, startDrag));
			document.attachEvent('onmouseup', Delegate(this, stopDrag));
			document.attachEvent('onmousemove', Delegate(this, move));
		}
		
		document.onmousedown = function() { return false; };
		document.onmousemove = function() { return false; };

		if (window.addEventListener) {
			window.addEventListener('DOMMouseScroll', wheel, false);
		}
		
		window.onmousewheel = document.onmousewheel = wheel;
	};
	
	var startDrag = function(e) {
		this.barY = this.mouse.y-findPos(this.bar)[1];
		this.dragging = true;
	};
	
	var stopDrag = function(e) {
		this.dragging = false;
	};
	
	var move = function(e) {
		if(this.dragging) {
			this.setPos(this.mouse.y-this.initY-this.barY);
		}
	};

	this.setPos = function(margin) {
		if(this.bar.style.display == 'none') {
			return false;
		}
		var cont;
		
		if(margin < this.minY) {
			margin = this.minY;
		} else if(margin > this.maxY) {
			margin = this.maxY;
		}
		
		cont = Math.floor((this.minY-margin)*this.ratio);
		
		this.bar.style.marginTop = margin+"px";
		this.contDiv.style.marginTop = cont+"px";
	}
	
	this.wheel = function(step) {
		var pos = -10*step+parseInt(this.bar.style.marginTop);
		
		this.setPos(pos);
	}
}



function MousePosition() {
	this.x;
	this.y;
	this.IE;
	
	this.MousePosition = function() {
		this.IE = (document.all)? true: false;
		
		if (document.addEventListener) {
			document.addEventListener('mousemove', Delegate(this, this.getPosition), false); 
		} else if (document.attachEvent) {
			document.attachEvent('onmousemove', Delegate(this, this.getPosition));
		}
	};
	
	
	this.getPosition = function(e) {
		if (this.IE) {
			this.x = event.clientX;
			this.y = event.clientY;
		} else {
			this.x = e.pageX;
			this.y = e.pageY;
		}
	};
	
	this.MousePosition();
}



function handle(delta) {
	scroll.wheel(delta);
}


function wheel(event){
        var delta = 0;
        if (!event)
                event = window.event;
        if (event.wheelDelta) {
                delta = event.wheelDelta/120;
                if (window.opera)
                        delta = -delta;
        } else if (event.detail) {
                delta = -event.detail/3;
        }
		
        if (delta)
                handle(delta);
        if (event.preventDefault)
                event.preventDefault();
	event.returnValue = false;
}

