function ScrollBar(scrollarea, window, content)
{
	var self = this;
	var scrolling;
	var scrollarea;
	var scrollwindow;
	var scrollcontent;
	var scrollbar;
	var scrollbararea;
	var scrollbarmark;
	var scrollbarup;
	var scrollbardown;
	var scrollareaX;
	var scrollareaY;
	var scrollareaHeight;
	var scrollmarkHeight;
	var scrollwindowHeight;
	var cursorDiffY;

	// Methods
	this.adjust_scroll = adjust_scroll;
	this.start_scroll = start_scroll;
	this.stop_scroll = stop_scroll;
	this.move_scroll = move_scroll;
	this.start_up = start_up;
	this.start_down = start_down;
	this.scroll_ignore = scroll_ignore;
	this.end_scroll = end_scroll;
	this.scrolldown = scrolldown;
	this.scrollup = scrollup;
	this.scroll_jump = scroll_jump;
	this.scroll_by = scroll_by;

	// Load Variables
	self.scrollarea = scrollarea;
	self.scrollwindow = window;
	self.scrollcontent = content;
	
	// Initialise
	if (getItemHeight(self.scrollcontent) > getItemHeight(self.scrollwindow))
	{
		self.scrollbar = document.createElement("div");
		self.scrollbar.className = "scrollbar";
		setStyle(self.scrollbar,"width","10px");
		setStyle(self.scrollbar,"height",getItemHeight(self.scrollwindow) + "px");
		getItemFromId(self.scrollarea).appendChild(self.scrollbar);
		self.scrollbarup = document.createElement("img");
		self.scrollbarup.src = "/images/scroll_up.gif";
		self.scrollbararea = document.createElement("img");
		self.scrollbararea.src = "/images/scrollarea.gif";
		setStyle(self.scrollbararea,"width","10px");
		setStyle(self.scrollbararea,"height",getItemHeight(self.scrollwindow) - 28 + "px");
		self.scrollbardown = document.createElement("img");
		self.scrollbardown.src = "/images/scroll_down.gif";
		self.scrollbar.appendChild(self.scrollbarup);
		br = document.createElement("br");
		self.scrollbar.appendChild(br);
		self.scrollbar.appendChild(self.scrollbararea);
		br = document.createElement("br");
		self.scrollbar.appendChild(br);
		self.scrollbar.appendChild(self.scrollbardown);
		
		self.scrollbarmark = document.createElement("div");
		self.scrollbarmark.className = "scrollmark";
		self.scrollbarmark.style.width = "10px";
		self.scrollbarmark.style.height = "15px";
		markimg = document.createElement("img");
		markimg.src = "/images/scrollmark.gif";
		markimg.style.width = "10px";
		markimg.style.height = "15px";
		self.scrollbarmark.appendChild(markimg);
		self.scrollbar.appendChild(self.scrollbarmark);
		
		self.scrollareaX = getItemX(self.scrollbararea);
		self.scrollareaY = getItemY(self.scrollbararea);
		self.scrollareaHeight = getItemHeight(self.scrollbararea);
		self.scrollmarkHeight = 15;
		self.scrollwindowHeight = getItemHeight(self.scrollcontent) - getItemHeight(self.scrollwindow);
		setItemPos(self.scrollbarmark,self.scrollareaX,self.scrollareaY);
		objectVisible(self.scrollbarmark,true);
		addEventHandler("window","resize",self.adjust_scroll,false);
		addEventHandler(self.scrollbarmark,"mousedown",self.start_scroll,true);
		addEventHandler(self.scrollbarup,"mousedown",self.start_up,true);
		addEventHandler(self.scrollbardown,"mousedown",self.start_down,true);
		addEventHandler(self.scrollbararea,"mousedown",self.scroll_jump,true);		
	}

	function adjust_scroll(event)
	{
		self.scrollareaX = getItemX(self.scrollbararea);
		setItemPos(self.scrollbarmark,self.scrollareaX,getItemY(self.scrollbarmark));
	}


	function start_scroll(event)
	{
		if (ie4)
		{
			y = event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
			self.cursorDiffY = y - getItemY(self.scrollbarmark);
			event.cancelBubble = true;
			event.returnValue = false;
		}
		else
		{
			y = event.pageY;
			self.cursorDiffY = y - getItemY(self.scrollbarmark);
			event.preventDefault();
		}
		addEventHandler("", "mousemove", self.move_scroll, true);
		addEventHandler("", "mouseup", self.stop_scroll, true);
	}

	function stop_scroll(event)
	{
		removeEventHandler("", "mousemove", self.move_scroll, true);
		removeEventHandler("", "mouseup", self.stop_scroll, true);
	}

	function move_scroll(event)
	{
		var y;
		if(ie4)
		{
			y = event.clientY + document.documentElement.scrollTop + document.body.scrollTop - self.cursorDiffY;
			event.cancelBubble = true;
			event.returnValue = false;
		}
		else
		{
			y = event.pageY - self.cursorDiffY;
			event.preventDefault();
		}
		if (y < self.scrollareaY)
			y = self.scrollareaY;
		if (y > self.scrollareaY + self.scrollareaHeight - self.scrollmarkHeight)
			y = self.scrollareaY + self.scrollareaHeight - self.scrollmarkHeight;
		setItemPos(self.scrollbarmark,self.scrollareaX,y);
		setItemY(self.scrollcontent,(((y - self.scrollareaY) / (self.scrollareaHeight - self.scrollmarkHeight)) * self.scrollwindowHeight) * -1);
	}

	function start_up(event)
	{
		self.scrollup();
		if (ie4)
		{
			event.cancelBubble = true;
			event.returnValue = false;
		}
		else
		{
			event.preventDefault();
		}
		addEventHandler("", "mousemove", self.scroll_ignore, true);
		addEventHandler("", "mouseup", self.end_scroll, true);
		self.scrolling = setInterval(self.scrollup,50);
	}

	function start_down(event)
	{
		self.scrolldown();
		if (ie4)
		{
			event.cancelBubble = true;
			event.returnValue = false;
		}
		else
		{
			event.preventDefault();
		}
		addEventHandler("", "mousemove", self.scroll_ignore, true);
		addEventHandler("", "mouseup", self.end_scroll, true);
		self.scrolling = setInterval(self.scrolldown,50);
	}

	function scroll_ignore(event)
	{
		if(ie4)
		{
			event.cancelBubble = true;
			event.returnValue = false;
		}
		else
		{
			event.preventDefault();
		}
	}

	function end_scroll()
	{
		clearInterval(self.scrolling);
		removeEventHandler("", "mousemove", self.scroll_ignore, true);
		removeEventHandler("", "mouseup", self.end_scroll, true);
	}

	function scrolldown()
	{
		y = getScrollY(self.scrollcontent);
		self.scroll_by(-4);
	}

	function scrollup()
	{
		y = getScrollY(self.scrollcontent);
		self.scroll_by(4);
	}

	function scroll_jump(event)
	{
		if(ie4)
		{
			y = event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
			event.cancelBubble = true;
			event.returnValue = false;
		}
		else
		{
			y = event.pageY;
			event.preventDefault();
		}
		markY = getItemY(self.scrollbarmark);
		if (y < markY)
			self.scroll_by(40);
		else
			self.scroll_by(-40);
	}
	
	function scroll_by(value)
	{
		var y = getScrollY(self.scrollcontent);
		if (isNaN(y))
			y = 0;
		y += value;
		if (y < (self.scrollwindowHeight * -1))
			y = (self.scrollwindowHeight * -1);
		if (y > 0)
			y = 0;
		setItemY(self.scrollcontent,y);
		setItemPos(self.scrollbarmark,self.scrollareaX,(((y * -1) / self.scrollwindowHeight) * (self.scrollareaHeight - self.scrollmarkHeight)) + self.scrollareaY);
	}
}
