﻿


var ScrollBars = { Both: 0, Horizontal: 1, None: 2, Vertical: 3 };

function ScrollBar()
{
	this.Type = ScrollBars.None;
	this.Parent = null;
	this.Content = null;
	this.VerticalUpButton = null;
	this.VerticalDownButton = null;
	this.HorizontalUpButton = null;
	this.HorizontalDownButton = null;

	this.BeginScrollUp = function (handler)
	{
		window.clearInterval(ScrollBar.ScrollTimer);

		if (handler.target)
			ScrollBar.ScrollPtr = handler.target.ScrollBar;
		else if (handler.srcElement)
			ScrollBar.ScrollPtr = handler.srcElement.ScrollBar;

		if (ScrollBar.ScrollPtr != null)
			ScrollBar.ScrollTimer = window.setInterval("ScrollBar.ScrollPtr.ScrollUp()", 20);
	}
	this.BeginScrollDown = function (handler)
	{
		window.clearInterval(ScrollBar.ScrollTimer);

		if (handler.target)
			ScrollBar.ScrollPtr = handler.target.ScrollBar;
		else if (handler.srcElement)
			ScrollBar.ScrollPtr = handler.srcElement.ScrollBar;

		if (ScrollBar.ScrollPtr != null)
			ScrollBar.ScrollTimer = window.setInterval("ScrollBar.ScrollPtr.ScrollDown()", 20);
	}
	this.EndScroll = function ()
	{
		window.clearInterval(ScrollBar.ScrollTimer);
	}
	this.ScrollUp = function (handler)
	{
		var content = null;
		if (handler)
		{
			if (handler.target)
				content = handler.target.ScrollBar.Content;
			else if (handler.srcElement)
				content = handler.srcElement.ScrollBar.Content;
		} 
		else if (ScrollBar.ScrollPtr != null)
			content = ScrollBar.ScrollPtr.Content;

		if (content.scrollTop != null)
		{
			if (content.scrollTop >= 10)
				content.scrollTop -= 10;
			else
				content.scrollTop = 0;
		}
	}
	this.ScrollDown = function (handler)
	{
		var content = null;
		if (handler)
		{
			if (handler.target)
				content = handler.target.ScrollBar.Content;
			else if (handler.srcElement)
				content = handler.srcElement.ScrollBar.Content;
		}
		else if (ScrollBar.ScrollPtr != null)
			content = ScrollBar.ScrollPtr.Content;

		if (content.scrollTop != null)
			content.scrollTop += 10;
	}
	this.Update = function ()
	{
		if (this.Parent != null)
		{
			var html = this.Parent.innerHTML;
			var cells = null;
			html = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td rowspan=\"2\">" + html;
			html += "</td><td class=\"VerticalUpButton\">&#160;</td></tr><tr><td class=\"VerticalDownButton\">&#160;</td></tr></table>";
			this.Parent.innerHTML = html;
			this.Content = this.Parent.getElementsByTagName("div")[0];
			cells = this.Parent.getElementsByTagName("td");
			for (var i = 0; i < cells.length; i++)
			{
				switch (cells[i].className)
				{
					case "VerticalUpButton":
						this.VerticalUpButton = cells[i];
						cells[i].ScrollBar = this;
						break;
					case "VerticalDownButton":
						this.VerticalDownButton = cells[i];
						cells[i].ScrollBar = this;
						break;
					case "HorizontalUpButton":
						this.HorizontalUpButton = cells[i];
						cells[i].ScrollBar = this;
						break;
					case "HorizontalDownButton":
						this.HorizontalDownButton = cells[i];
						cells[i].ScrollBar = this;
						break;
					default:
						break;
				}
			}
			System.CreateEvent(new MouseEnterEventArgs(this.VerticalUpButton, this.BeginScrollUp));
			System.CreateEvent(new MouseEnterEventArgs(this.VerticalDownButton, this.BeginScrollDown));
			System.CreateEvent(new MouseLeaveEventArgs(this.VerticalUpButton, this.EndScroll));
			System.CreateEvent(new MouseLeaveEventArgs(this.VerticalDownButton, this.EndScroll));
		}
	}
	this.SetParent = function (value)
	{
		if (this.Parent == null && value != null)
		{
			this.Parent = value;
			System.CreateEvent(new ResizeEventArgs(this.Parent, this.Resize));
		}
	}
	this.Resize = function (sender, e)
	{
		if (!sender.srcElement && !sender.target)
		{
			var tableCells = sender.getElementsByTagName("td");
			var className = "";
			for (var i = 0; i < tableCells.length; i++)
			{
				className = tableCells[i].className;
				if ((className.indexOf("Vertical") > -1 && className.indexOf("Button") > -1) && (sender.clientHeight / 2 - 8) > 0)
				{
					tableCells[i].style.height = (sender.clientHeight / 2 - 8) + "px";
				}
			}
		}
	}
	this.Update();
}

ScrollBar.ScrollTimer = null;
ScrollBar.ScrollPtr = null;

ScrollBar.Attach = function (parent, type)
{
	if (parent != null)
	{
		parent.ScrollBar = new ScrollBar();
		parent.ScrollBar.Type = type;
		parent.ScrollBar.SetParent(parent);
		parent.ScrollBar.Update();
	}
}
