//*****************************************************************************
// Constructor.
//*****************************************************************************
function Scroller(x, y, width, height, border, padding)
{
	this.x = x;
	this.y = y;
	this.width = width;
	this.height = height;
	this.border = border;
	this.padding = padding;
	this.items = new Array();
	this.created = false;
	
	// Set default colors.
	this.fgColor = "#000000";
	this.bgColor = "#ffffff";
	this.bdColor = "#000000";
	
	// Set default font.
	this.fontFace = "±¼¸²";
	this.fontSize = "2";
	
	// Set default scroll timing values.
	this.speed		= 600;
	this.pauseTime	= 2000;

	// Define methods.
	this.setColors	= scrollerSetColors;
	this.setFont	= scrollerSetFont;
	this.setSpeed	= scrollerSetSpeed;
	this.setPause	= scrollersetPause;
	this.addItem	= scrollerAddItem;
	this.create		= scrollerCreate;
	this.show		= scrollerShow;
	this.hide		= scrollerHide;
	this.moveTo		= scrollerMoveTo;
	this.moveBy		= scrollerMoveBy;
	this.getzIndex	= scrollerGetzIndex;
	this.setzIndex	= scrollerSetzIndex;
	this.stop		= scrollerStop;
	this.start		= scrollerStart;
}

//*****************************************************************************
// Methods.
//*****************************************************************************
function scrollerSetColors(fgcolor, bgcolor, bdcolor)
{
	if (this.created)
	{
		alert("Scroller Error: Scroller °´Ã¼´Â ÀÌ¹Ì »ý¼ºµÇ¾î ÀÖ½À´Ï´Ù.");
		return;
	}
	this.fgColor = fgcolor;
	this.bgColor = bgcolor;
	this.bdColor = bdcolor;
}

function scrollerSetFont(face, size)
{
	if (this.created)
	{
		alert("Scroller Error: Scroller °´Ã¼´Â ÀÌ¹Ì »ý¼ºµÇ¾î ÀÖ½À´Ï´Ù.");
		return;
	}
	this.fontFace = face;
	this.fontSize = size;
}

function scrollerSetSpeed(pps)
{
	if (this.created)
	{
		alert("Scroller Error: Scroller °´Ã¼´Â ÀÌ¹Ì »ý¼ºµÇ¾î ÀÖ½À´Ï´Ù.");
		return;
	}
	this.speed = pps;
}

function scrollersetPause(ms)
{
	if (this.created)
	{
		alert("Scroller Error: Scroller °´Ã¼´Â ÀÌ¹Ì »ý¼ºµÇ¾î ÀÖ½À´Ï´Ù.");
		return;
	}
	this.pauseTime = ms;
}

function scrollerAddItem( sItem)
{
	if (this.created)
	{
		alert("Scroller Error: Scroller °´Ã¼´Â ÀÌ¹Ì »ý¼ºµÇ¾î ÀÖ½À´Ï´Ù.");
		return;
	}
	this.items[ this.items.length] = sItem;
}

function scrollerCreate()
{
	var sPreHtml, sLstHtml, sHtml;
	var iCnt, iLoop, iListSize;
	var x, y;

	if (!isAppNS4 && !isAppIE4)	return;

	// On first scroller, start interval timer.
	if (scrollerList.length == 0)
		setInterval('scrollerGo()', scrollerInterval);

	// Create the scroller only once.
	if (this.created)
	{
		alert("Scroller Error: Scroller °´Ã¼´Â ÀÌ¹Ì »ý¼ºµÇ¾î ÀÖ½À´Ï´Ù.");
		return;
	}
	this.created = true;

	// Copy first item to the end of the list, this lets us scroll from the last
	// defined item to the first without jumping.
	this.items[ this.items.length] = this.items[ 0];

	// Set up HTML code for item text.
	sPreHtml	= '<table border=0 cellpadding='+ (this.padding + this.border) +' cellspacing=0'
				+ '		OnMouseOver="objScroller.stop()" OnMouseOut ="objScroller.start()" '
				+ '		width=' + this.width +' height=' + this.height + '>'
				+ '<tr><td valign=top>'
				+ '	<font	color ="'+ this.fgColor		+'"'
				+ '			face  ="'+ this.fontFace	+'"'
				+ '			size  = '+ this.fontSize	+'>';
	sLstHtml	= '</font></td></tr></table>';
	// Build the layers.
	if (isAppNS4)
	{
		this.baseLayer		= new Layer(this.width);
		this.scrollLayer	= new Layer(this.width, this.baseLayer);
		this.itemLayers		= new Array();
		this.scrollLayer.visibility = "inherit";
		for (iCnt = 0; iCnt < this.items.length; iCnt++)
		{
			this.itemLayers[ iCnt] = new Layer(this.width, this.scrollLayer);
			this.itemLayers[ iCnt].document.open();
			this.itemLayers[ iCnt].document.writeln( sPreHtml + this.items[ iCnt] + sLstHtml);
			this.itemLayers[ iCnt].document.close();
			this.itemLayers[ iCnt].visibility = "inherit";
		}
		// Set background colors.
		setBgColor(this.baseLayer,		this.bdColor);
		setBgColor(this.scrollLayer,	this.bgColor);
	}

	if (isAppIE4)
	{
		iListSize = scrollerList.length;
		sHtml	= '<div id="scroller'+ iListSize +'_baseLayer" style="position:absolute;background-color:'+ this.bdColor +';'
				+ '		width :'+ this.width  +'px; height:'+ this.height +'px;overflow:hidden; visibility:hidden;">\n'
				+ '		<div id="scroller' + iListSize + '_scrollLayer"'
				+ '			style="position:absolute; background-color:'+ this.bgColor + ';'
				+ '			width:' + this.width + 'px; height:' + (this.height * this.items.length) + 'px;'
				+ '			visibility:inherit;">';
			for (iLoop = 0; iLoop < this.items.length; iLoop++)
			{
				sHtml	+= '<div id="scroller' + iListSize + '_itemLayers' + iLoop + '" style="position:absolute;'
						+  '	width:'+ this.width +'px; height:'+ this.height +'px;visibility:inherit;">\n'
						+			sPreHtml + this.items[ iLoop] + sLstHtml
						+  '</div>';
			}
		sHtml	+= '	</div>\n'
				+  '</div>\n';

		// Insert HTML code at end of page. For IE4, need to scroll window to
		// end of page, insert and scroll back to correct bug.
		if (!isAppIE5)
		{
			x = getPageScrollX();
			y = getPageScrollY();
			window.scrollTo(getPageWidth(), getPageHeight());
		}
		document.body.insertAdjacentHTML("beforeEnd", sHtml);
		if (!isAppIE5)	window.scrollTo(x, y);
		
		// Get handles to each layer.
		this.baseLayer		= getLayer("scroller"+ iListSize +"_baseLayer");
		this.scrollLayer	= getLayer("scroller"+ iListSize +"_scrollLayer");
		this.itemLayers = new Array();
		for (iLoop = 0; iLoop < this.items.length; iLoop++)
			this.itemLayers[ iLoop] = getLayer("scroller"+ iListSize +"_itemLayers"+ iLoop);
	}

	// Position and clip base and scroll layers.
	moveLayerTo(this.baseLayer, this.x, this.y);
	clipLayer(this.baseLayer, 0, 0, this.width, this.height);
	moveLayerTo(this.scrollLayer, this.border, this.border);
	clipLayer(this.scrollLayer, 0, 0, this.width - 2 * this.border, this.height - 2 * this.border);

	// Position and clip each item layer.
	x = 0;
	y = 0;
	for (iCnt = 0; iCnt < this.items.length; iCnt++)
	{
		moveLayerTo(this.itemLayers[ iCnt], x, y);
		clipLayer(this.itemLayers[ iCnt], 0, 0, this.width, this.height);
		y += this.height;
	}

	// Set up scrolling parameters.
	this.stopped	= false;
	this.currentY	= 0;
	this.stepY		= this.speed / (1000 / scrollerInterval);
	this.stepY		= Math.min(this.height, this.stepY);
	this.nextY		= this.height;
	this.maxY		= this.height * (this.items.length - 1);
	this.paused		= true;
	this.counter	= 0;

	// Add to global list.
	scrollerList[scrollerList.length] = this;

	// Display it.
	showLayer( this.baseLayer);
}

function scrollerShow()
{
	if (this.created)	showLayer(this.baseLayer);
}

function scrollerHide()
{
	if (this.created)	hideLayer(this.baseLayer);
}

function scrollerMoveTo(x, y)
{
	if (this.created)	moveLayerTo(this.baseLayer, x, y);
}

function scrollerMoveBy(dx, dy)
{
	if (this.created)	moveLayerBy(this.baseLayer, dx, dy);
}

function scrollerGetzIndex()
{
	if (this.created)
		return(getzIndex(this.baseLayer));
	else
		return(0);
}

function scrollerSetzIndex(z)
{
	if (this.created)	setzIndex(this.baseLayer, z);
}

function scrollerStart()
{
	this.stopped = false;
}

function scrollerStop()
{
	this.stopped = true;
}

//*****************************************************************************
// Code for scrolling.
//*****************************************************************************
// An array is used to hold a pointer to each scroller that is defined. The
// scrollerGo() function runs at regular intervals and updates each scroller
// in this list.

var scrollerList     = new Array();
var scrollerInterval = 20;

function scrollerGo()
{
	var i;
	// Update each scroller object in the list.
	for (i = 0; i < scrollerList.length; i++)
	{
		// If stopped, skip.
		if (scrollerList[i].stopped);
		// If paused, update counter.
		else if (scrollerList[i].paused)
		{
			scrollerList[i].counter += scrollerInterval;
			if (scrollerList[i].counter > scrollerList[i].pauseTime)
				scrollerList[i].paused = false;
		}
		// Scroll it.
		else
		{
			scrollerList[i].currentY += scrollerList[i].stepY;
			
			// Pause it if the next item has scrolled into view.
			if (scrollerList[i].currentY >= scrollerList[i].nextY)
			{
				scrollerList[i].paused = true;
				scrollerList[i].counter = 0;
				scrollerList[i].currentY = scrollerList[i].nextY;
				scrollerList[i].nextY += scrollerList[i].height;
			}

			// When we reach the end, start over.
			if (scrollerList[i].currentY >= scrollerList[i].maxY)
			{
				scrollerList[i].currentY -= scrollerList[i].maxY;
				scrollerList[i].nextY = scrollerList[i].height;
			}
			scrollLayerTo(scrollerList[i].scrollLayer, 0, Math.round(scrollerList[i].currentY), false);
		}
	}
}

//*****************************************************************************
// Code to handle a window resize.
//*****************************************************************************

// These variables are used to determine if a resize event is a true one.
// Necessary due to a bug in older NS4 releases.
var origWidth;
var origHeight;

// Fix for resize bug.
if (isAppNS4)
{
	origWidth  = window.innerWidth;
	origHeight = window.innerHeight;
}
// ÁÖ¼®Ã³¸® : ¸±·Îµå ¾ÈÇÏµµ·Ï
// window.onresize = scrollerReload;

function scrollerReload()
{
	// Reload page in case of a browser resize. First make sure it's a true resize.
	if (isAppNS4 && origWidth == window.innerWidth && origHeight == window.innerHeight)	return;
	window.location.href = window.location.href;
}



//*****************************************************************************
// Code to handle a Image OnMouse Over
//*****************************************************************************
var sOSBSrc;
function ImageRevOnMouse( sEvent, oImgName, sImgSrc)
{
	if (sEvent == "over")
	{
		sOSBSrc = oImgName.src;
		oImgName.src	= sImgSrc;
	}
	else
	{
		oImgName.src = sOSBSrc;
	}
}

