function ScrollableLayer(name, parent)
{
	this.ns4 = (document.layers) ? true : false;
	this.ie4 = (document.all) ? true : false;
	
	this.parentStr = (this.ns4) ? ("document.layers['" + parent + "']") : ("document.all['" + parent + "']");
	this.refStr = (this.ns4) ? (this.parentStr + ".document.layers['" + name + "']") : ("document.all['" + name + "'].style");

	this.name = name;

	this.obj = 'SLObj_' + this.name;
	eval(this.obj + '=this');
}

var slp = ScrollableLayer.prototype;
slp.getX = sl_getX;
slp.getY = sl_getY;
slp.getWidth = sl_getWidth;
slp.getHeight = sl_getHeight;
slp.show = sl_show;
slp.hide = sl_hide;
slp.scroll = sl_scroll;
slp.scrollX = sl_scrollX;
slp.scrollY = sl_scrollY;
slp.scrollXY = sl_scrollXY;
slp.stop = sl_stop;

function sl_show()
{
	refObj = eval(this.refStr);

	if (this.ns4)
		refObj.visibility = 'show';
	else if (this.ie4)
		refObj.visibility = 'visible';
}

function sl_hide()
{
	refObj = eval(this.refStr);

	if (this.ns4)
		refObj.visibility = 'hide';
	else if (this.ie4)
		refObj.visibility = 'hidden';
}

function sl_getX()
{
	refObj = eval(this.refStr);

	if (refObj.left == null || refObj.left == "")
		refObj.left = 0;
	return parseInt(refObj.left, 10);
}

function sl_getY()
{
	refObj = eval(this.refStr);

	if (refObj.top == null || refObj.top == "")
		refObj.top = 0;
	return parseInt(refObj.top, 10);
}

function sl_getWidth()
{
	refObj = eval(this.refStr);

	if (this.ns4)
		return refObj.clip.width;
	else
		return parseInt(eval("document.all['" + this.name + "'].offsetWidth"), 10);
}

function sl_getHeight()
{
	refObj = eval(this.refStr);

	if (this.ns4)
		return refObj.clip.height;
	else
		return parseInt(eval("document.all['" + this.name + "'].offsetHeight"), 10);
}

function sl_scroll(xOffset, yOffset, windowWidth, windowHeight, interval)
{
	layerObj = eval(this.refStr);
	layerObj.timer = setInterval(this.obj + '.scrollXY(' + xOffset + ', ' + yOffset + ', ' + windowWidth + ', ' + windowHeight + ')', interval);
}

function sl_scrollXY(xOffset, yOffset, windowWidth, windowHeight)
{
	layerObj = eval(this.refStr);
	layerHeight = this.getHeight();
	layerWidth = this.getWidth();
	layerX = this.getX();
	layerY = this.getY();

	if (layerWidth < windowWidth)
		newX = layerX;
	else
	{
		newX = layerX + xOffset;
		if (newX > 0)
			newX = 0;
		else if (newX < (-1 * layerWidth + windowWidth))
			newX = -1 * layerWidth + windowWidth;
	}

	if (layerHeight < windowHeight)
		newY = layerY;
	else
	{
		newY = layerY + yOffset;
		if (newY > 0)
			newY = 0;
		else if (newY < (-1 * layerHeight + windowHeight))
			newY = -1 * layerHeight + windowHeight;
	}

	layerObj.left = newX;
	layerObj.top = newY;

}

function sl_scrollX(xOffset, windowWidth, interval)
{
	this.scroll(xOffset, 0, windowWidth, 0, interval);
}

function sl_scrollY(yOffset, windowHeight, interval)
{
	this.scroll(0, yOffset, 0, windowHeight, interval);
}

function sl_stop()
{
	layerObj = eval(this.refStr);
	if (layerObj.timer != null)
		clearInterval(layerObj.timer);
}