	// ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
	// Cross-Browser Functions
	var dom = document.getElementById;
	var iex = document.all;
	var ns4 = document.layers;
	
	function addEvent(event,method){
		this[event] = method;
		if(ns4) this.captureEvents(Event[event.substr(2,event.length).toUpperCase()]);
	}
	function removeEvent(event){
		this[event] = null;
		if(ns4) this.releaseEvents(Event[event.substr(2,event.length).toUpperCase()]);
	}
	function getElement(name,nest){
		nest = nest ? 'document.'+nest+'.' : '';
		var el = dom ? document.getElementById(name) : iex ? document.all[name] : ns4 ? eval(nest+'document.'+name) : false;
		el.css = ns4 ? el : el.style;
		el.getTop = function(){return parseInt(el.css.top) || 0};
		el.setTop = function(y){el.css.top=y};
		el.getHeight = function(){return ns4 ? el.document.height : el.offsetHeight};
		el.getClipHeight = function(){return ns4 ? el.clip.height : el.offsetHeight};
		el.addEvent = addEvent;
		el.removeEvent = removeEvent;
		return el;
	}
	function getMouse(e){
		return iex ? event.clientY : e.pageY;
	}
	
	document.addEvent = addEvent;
	document.removeEvent = removeEvent;
	
	// ||||||||||||||||||||||||||||||||||||||||||||||||||
	// Misc Functions
	
	function fixNetscapeCSS(){
		if(ns4origWidth != window.innerWidth || ns4origHeight != window.innerHeight){
			window.location.reload();
		}	
	}
	if(document.layers){
		ns4origWidth = window.innerWidth;
		ns4origHeight = window.innerHeight;
		window.onresize = fixNetscapeCSS;
	}
	
	// ||||||||||||||||||||||||||||||||||||||||||||||||||
	// Scroll Functions
	
	function initScroller(){
		scrollSpeed = 6; // scrolling speed
		dragHeight = 0; // DEFINISCE IL PIXEL DI INIZIO DEL DRAG
		trackHeight = 320; // DEFINISCE IL PIXEL FINALE DELLO SCRRIMENTO DEL DRAG
		trackObj = getElement('track'); // Reference to the scrollbar track div
		upObj = getElement('up'); // Reference to the up arrow div
		downObj = getElement('down'); // Reference to the down arrow div
		dragObj = getElement('drag'); // Reference to the scrollbar drag div
		contentMaskObj = getElement('contentMask'); // Reference to the content mask div
		contentObj = getElement('content','contentMask'); // Reference to the content div
		trackTop = dragObj.getTop(); // Scrollbar top contraint
		trackLength = trackHeight-dragHeight; // Adjusted track height
		trackBottom = trackTop+trackLength; // Scrollbar bottom contraint
		contentMaskHeight = contentMaskObj.getClipHeight();// Height of the div that masks the content div
		contentHeight = contentObj.getHeight(); // Height of the content div
		contentLength = contentHeight-contentMaskHeight; // Adjusted content height
		scrollLength = trackLength/contentLength; // Height difference between the scrollbar track and the content
		scrollTimer = null;
		
		trackObj.addEvent('onmousedown',scrollJump);
		
		upObj.addEvent('onmousedown', function(){scroll(scrollSpeed);return false});
		upObj.addEvent('onmouseup', stopScroll);
		upObj.addEvent('onmouseout', stopScroll);
		
		downObj.addEvent('onmousedown', function(){scroll(-scrollSpeed);return false});
		downObj.addEvent('onmouseup', stopScroll);
		downObj.addEvent('onmouseout', stopScroll);
		
		dragObj.addEvent('onmousedown', startDrag);
		dragObj.addEvent('ondragstart', function(){return false});
	}
	function startDrag(e){
		dragStartMouse = getMouse(e); // Holds the starting y mouse position
		dragStartOffset = dragObj.getTop(); // Holds the starting top position of the scrollbar drag
		document.addEvent('onmousemove', drag);
		document.addEvent('onmouseup', stopDrag);
		return false;
	}
	function stopDrag(){
		document.removeEvent('onmousemove');
		document.removeEvent('onmouseup');
	}
	function drag(e){
		var currentMouse = getMouse(e);
		var mouseDifference = currentMouse-dragStartMouse;
		var dragDistance = dragStartOffset+mouseDifference;
		var dragMovement = (dragDistance<trackTop) ? trackTop : (dragDistance>trackBottom) ? trackBottom : dragDistance;
		dragObj.setTop(dragMovement);
		var contentMovement = -(dragMovement-trackTop)*(1/scrollLength);
		contentObj.setTop(contentMovement);
		return false;
	}
	function scroll(speed){
		var contentMovement = contentObj.getTop()+speed;
		var dragMovement = trackTop-Math.round(contentObj.getTop()*(trackLength/contentLength));
		if(contentMovement > 0){
			contentMovement = 0;
		}else if(contentMovement < -contentLength){
			contentMovement = -contentLength;
		}
		if(dragMovement < trackTop){
			dragMovement = trackTop;
		}else if(dragMovement > trackBottom){
			dragMovement = trackBottom;
		}
		contentObj.setTop(contentMovement);
		dragObj.setTop(dragMovement);
		scrollTimer = window.setTimeout('scroll('+speed+')',25);
	}
	function stopScroll(){
		if(scrollTimer){
			window.clearTimeout(scrollTimer);
			scrollTimer = null;
		}
	}
	function scrollJump(e){
		var currentMouse = getMouse(e);
		var dragDistance = currentMouse-(dragHeight/2);
		var dragMovement = (dragDistance<trackTop) ? trackTop : (dragDistance>trackBottom) ? trackBottom : dragDistance;
		dragObj.setTop(dragMovement);
		var contentMovement = -(dragMovement-trackTop)*(1/scrollLength);
		contentObj.setTop(contentMovement);
		return false;
	}
	
	// ||||||||||||||||||||||||||||||||||||||||||||||||||
	
	window.onload = initScroller;
