function RollSet()
{
	var gSetChk        = true;
	var gSetObj        = null;
	var gRollSetObj    = null;
	var gRollChk       = false;

	var gArrDat        = new Array();
	var gArrCnt        = -1;
	var gArrCntBool    = false;
	var gArrTotCnt     = 0;
	var gMoveSpeed     = 50;
	var gPauseTime     = 1000;
	var gPauseChk      = false;
	var gCurPos        = 15;
	var gEndPos        = 0;
	var gChkCnt        = 0;
	var gWordheight    = 15;
	var gOwordHeight   = 15;
	var gRwordHeight   = -1;
	var gWordSet       = false;
	var gWordSetTime   = 1000;
	var gRollType      = new Array('up','shine');
	var gRollSelect    = 'shine';

	var gTid1          = 0;
	var gTid2          = 0;

	var xSetChk        = false;

	var gDetailObj      = null;
	var gDetailObjCnt   = -1;
	var gDetailChkNum   = -1;
	var gDetailViewNum  = -1;
	var gDetailClickNum = -1;

	this.Init = function ( setObj, data, moveSpeed, pauseTime, wrdHeight, RollObj, type, rWrdheight )
	{
		gSetObj     = setObj;
		gRollSetObj = RollObj;
		gArrDat     = data;
		gArrTotCnt  = gArrDat.length;

		if( gSetObj == null || gSetObj == '' || gSetObj == 'undefined' )                { gSetChk = false; return; }
		if( gRollSetObj == null || gRollSetObj == '' || gRollSetObj == 'undefined' )    { gSetChk = false; return; }
		if( gArrDat[0] == null || gArrDat[0] == '' || gArrDat[0] == 'undefined' )       { gSetChk = false; return; }

		if( moveSpeed != null && moveSpeed > 0 ) {
			gMoveSpeed = moveSpeed;
		}

		if( pauseTime != null && pauseTime > 0 ) {
			gPauseTime = pauseTime;
		}

		if( wrdHeight != null && wrdHeight > 0 ) {
			gWordheight  = wrdHeight;
			gOwordHeight = wrdHeight;
			gCurPos = wrdHeight;
		}

		if( rWrdheight != '' )
		{
			var gBw = rWrdheight.split(',');

			if( gBw[0] && gBw[1] )
			{
				if( navigator.appVersion.indexOf("MSIE") != -1 )
					gRwordHeight = gBw[0];
				else
					gRwordHeight = gBw[1];
			}
			else
			{
				gSetChk = false;
			}
		} else {
			gSetChk = false;
		}

		if( type != null && type != '' )
		{
			for(var i=0;i<gRollType.length;i++)
			{
				if( type == gRollType[i] )
				{
					gRollSelect = type;
					gSetChk = true;
					break;
				}
				else
				{
					gSetChk = false;
					continue;
				}
			}
		}

		return;
	}

	this.numSet = function ( cnt )
	{
		gArrCnt = cnt; 
		return;
	}

	this.Play = function ()
	{
		if( gSetChk == false) return;

		gRollChk = true;

		RollStart();
		return;
	}

	this.Stop = function ()
	{
		clearInterval( gTid1 );
		clearTimeout( gTid2 );

		return;
	}

	this.OnMouse = function ()
	{
		if( gSetChk == false) return;

		gPauseChk = true;
		clearInterval( gTid1 );
		clearTimeout( gTid2 );
		return;
	}

	this.OutMouse = function ()
	{
		if( gSetChk == false) return;

		gPauseChk = false;
		this.Play();
		return;
	}

	this.PrevDat = function ()
	{
		if( gSetChk == false) return;
		if( gRollChk==false && gArrCnt==-1 ) gArrCnt = 0;

		clearInterval( gTid1 );
		clearTimeout( gTid2 );

		gCurPos = gEndPos;

		gArrCnt--;
		if( gArrCnt < 0 ) 
			gArrCnt = gArrTotCnt-2;

		if( gArrCnt == 0 )
		{
			gWordheight = gOwordHeight;
		}
		else
		{
			gWordheight = gRwordHeight;
		}

		gCurPos           = 0;
		gChkCnt           = 0;
		gSetObj.style.top = gCurPos + 'px';
		gSetObj.innerHTML = gArrDat[gArrCnt];
		gWordSet          = false;

		if( gRollChk == true )
			gTid2 = setTimeout( gRollSetObj.Play, gPauseTime );
		return;
	}

	this.NextDat = function ()
	{
		if( gSetChk == false) return;
		if( gRollChk==false && gArrCnt==-1 ) gArrCnt = 0;

		clearInterval( gTid1 );
		clearTimeout( gTid2 );

		gArrCnt++;
		if( gArrCnt == (gArrTotCnt-1) )
		{
			gWordheight = gOwordHeight;
			gArrCnt = 0;
		}
		else
		{
			gWordheight = gRwordHeight;
		}

		gCurPos           = 0;
		gChkCnt           = 0;
		gSetObj.style.top = gCurPos + 'px';
		gSetObj.innerHTML = gArrDat[gArrCnt];
		gWordSet          = false;

		if( gRollChk == true )
			gTid2 = setTimeout( gRollSetObj.Play, gPauseTime );

		return;
	}
	this.Detail = function ( detailObj )
	{
		gDetailObj     = detailObj;
		gDetailObjCnt  = gDetailObj.length;
		gDetailChkNum  = ( (gArrTotCnt - 1) / gDetailObjCnt );

		if( gDetailObj[0] == null || gDetailObj[0] == '' || gDetailObj[0] == 'undefined' )       { gSetChk = false; return; }
		if( gDetailChkNum == -1 )                                                                { gSetChk = false; return; }
	}

	this.OnDetail = function ()
	{
		gDetailViewNum = DetailViewNum();
		if( gDetailViewNum != null )
		{
			gDetailClickNum = gDetailViewNum;
			this.OnMouse();

			for( i=0; i<gDetailObjCnt; i++ )
			{
				if( i == gDetailViewNum )
				{
					gDetailObj[i].style.display = 'block';
					break;
				}
			}
		}
		else
		{
			gDetailClickNum = 0;
			this.OnMouse();
			gDetailObj[gDetailClickNum].style.display = 'block';
		}

		return;
	}

	this.OnDetailExtend = function ()
	{
		if( gPauseChk == true )
			return;

		gDetailObj[gDetailClickNum].style.display = 'block';
		this.OnMouse();
		return;
	}

	this.OutDetailExtend = function ()
	{
		if( gPauseChk == false )
			return;

		gDetailObj[gDetailClickNum].style.display = 'none';
		this.OutMouse();
		return;
	}

	this.PrevDatDetail = function ()
	{
		for( i=0; i<gDetailObjCnt; i++ )
		{
			gDetailObj[ i ].style.display = 'none';
		}

		gDetailClickNum = gDetailClickNum - 1;
		if( gDetailClickNum == -1 )
		{
			gDetailClickNum = gDetailObjCnt - 1;
		}
		gDetailObj[ gDetailClickNum ].style.display = 'block';

		return;
	}

	this.NextDatDetail = function ()
	{
		for( i=0; i<gDetailObjCnt; i++ )
		{
			gDetailObj[ i ].style.display = 'none';
		}

		gDetailClickNum = gDetailClickNum + 1;
		if( gDetailClickNum >= gDetailObjCnt )
		{
			gDetailClickNum = 0;
		}
		gDetailObj[ gDetailClickNum ].style.display = 'block';
		return;
	}
	function RollStart()
	{
		if( xSetChk == true )
		{
			if( gRollSelect == 'up' )           gTid1 = setInterval( RollUpExt , gMoveSpeed );
			else                                gSetObj.innerHTML = 'Not Valid';
		}
		else
		{
			if( gRollSelect == 'up' )           gTid1 = setInterval( RollUp , gMoveSpeed );
			else if( gRollSelect == 'shine' )   gTid1 = setInterval( RollShine , gPauseTime );
			else                                gSetObj.innerHTML = 'Not Valid';
		}

		return;
	}

	function RollUp()
	{
		if( gWordSet == false )
		{
			var gTxt = '';
			var gPrevCnt;

			gPrevCnt = gArrCnt;

			gArrCnt++;
			if( gArrCnt == (gArrTotCnt-1) )
			{
				gArrCnt = 0;
			}

			if( gPrevCnt != -1 )
			{
				gTxt = gArrDat[gPrevCnt];
				gCurPos = 0;
			}

			gTxt += gArrDat[gArrCnt];

			gSetObj.innerHTML = gTxt;
			gWordSet = true;
		}

		gCurPos--;
		gSetObj.style.top = gCurPos + 'px';

		gChkCnt++;
		if( gChkCnt == gWordheight )
		{
			clearInterval( gTid1 );

			gWordSet = false;
			gChkCnt  = 0;

			if( gArrCnt >= gArrTotCnt-1 )
			{
				gWordheight       = gRwordHeight;
				gArrCnt           = -1;
				gSetObj.style.top = gCurPos + 'px';
				gSetObj.innerHTML = '';
			}
			else
			{
				gWordheight = gRwordHeight;
			}

			gTid2 = setTimeout( gRollSetObj.Play, gPauseTime );
			return;
		}

	}

	function RollShine()
	{
		if( (gArrCnt == -1) || (gArrCnt == gArrTotCnt))
			gArrCnt = 0;

		gSetObj.style.top = gEndPos;
		gSetObj.innerHTML = gArrDat[gArrCnt++];

		return;
	}

	function DetailViewNum()
	{
		var SelNum = 0;
		var srtNum = 0;
		var endNum = 0;

		if( gArrCnt == -1 )
		{
			return null;
		}
		else
		{
			for( var i=1; i<=gDetailObjCnt; i++ )
			{
				endNum = ( i * gDetailChkNum );
				for( var k=srtNum; k < endNum; k++ )
				{
					if( k == gArrCnt )
					{
						SelNum = i - 1;
						return SelNum;
					}
				}

				srtNum = k;
			}
		}
	}
}
