/*
	ScrollableLayer constructor
*/
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");

	// Mandatory parameters
	this.name = name;

	// Create object through evaluate function (eval)
	this.obj = 'SLObj_' + this.name;
	eval(this.obj + '=this');
}

/*
	Object functions <properties = func_name>
*/
{
	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;
}

/*
	Show layer
	external call by [object].show
*/
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);
//this.parentStr
}

function sl_getHeight()
{
	refObj = eval(this.refStr);

	if (this.ns4)
		return refObj.clip.height;
	else
		return parseInt(eval("document.all['" + this.name + "'].offsetHeight"), 10);
//this.parentStr
}

/*
	Start the Scroll Timer
*/
function sl_scroll(xOffset, yOffset, windowWidth, windowHeight, interval)
{
	layerObj = eval(this.refStr);
	layerObj.timer = setInterval(this.obj + '.scrollXY(' + xOffset + ', ' + yOffset + ', ' + windowWidth + ', ' + windowHeight + ')', interval);
}


/*
	Scroll X, Y coordinates
*/
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;

}


/*
	Scroll on X coordinates
*/
function sl_scrollX(xOffset, windowWidth, interval)
{
	this.scroll(xOffset, 0, windowWidth, 0, interval);
}


/*
	Scroll on Y coordinates
*/
function sl_scrollY(yOffset, windowHeight, interval)
{
	this.scroll(0, yOffset, 0, windowHeight, interval);
}


/*
	Stop the Scroll Timer
*/
function sl_stop()
{
	layerObj = eval(this.refStr);
	if (layerObj.timer != null)
		clearInterval(layerObj.timer);
}