var rollingList=function(winId, objName, tagName, moveType){

	this.speed=90;	//setTimeout에 적용시킬 숫자.
	this.term=1000;	//한줄이 사라질경우 지체시간
	this.winId=winId;
	this.rowHeight=0;
	this.moveTerm=0;
	this.objName=objName;
	this.moveType=moveType;
	this.tagName=tagName;
	this.moveAction='';

	this.getListObj=function(){	// 리스트 엘리먼트 반환

		var listObj=$(this.winId).getElementsByTagName(this.tagName)[0];
		listObj=$(listObj);
		return listObj;

	}

	this.setRowStyle=function(){	// 리스트의 스타일 지정

		var liObj=this.getListObj().childNodes;
		var len=liObj.length;

		if(this.tagName=='TABLE'){



		}else{

			for(var i=0 ; i < len ; i++){

				if(liObj[i].nodeType!=1) continue;
				$(liObj[i]).setStyle('height', this.rowHeight+'px');	// 높이 지정

			}

		}

	}

	this.swapRowList=function(listObj, liObj, len){	// 일반 리스트 태그 ul, ol 태그일경우

		var topObj;

		for(var i=0 ; i < len ; i++){

			if(liObj[i].nodeType!=1) continue;
			topObj=liObj[i];
			break;

		}

		listObj.appendChild(topObj);
		return true;

	}

	this.swapRowTable=function(listObj, liObj, len){	// table 태그일경우

		var scanTable=new Array();
		var idx=0;
		var trObj;

		for(var i=0 ; i < len ; i++){	// tbody 객체를 가져온다.

			if(liObj[i].nodeType!=1) continue;
			if(liObj[i].tagName!='TBODY') continue;
			trObj=liObj[i].childNodes;
			break;

		}

		var len=trObj.length;

		for(var i=0 ; i < len ; i++){	// td 안의 내용을 배열로 정리

			if(trObj[i].nodeType!=1) continue;

			scanTable[idx]=new Array();
			var tdObj=trObj[i].childNodes;
			var lenJ=tdObj.length;
			var idxJ=0;

			for(var j=0 ; j < lenJ ; j++){

				if(tdObj[j].nodeType!=1) continue;
				scanTable[idx][idxJ]=tdObj[j].innerHTML;
				idxJ++;

			}

			idx++;

		}

		var idx=1;
		for(var i=0 ; i < len ; i++){	// 배열에 저장된 값을 tddp 재저장

			if(trObj[i].nodeType!=1) continue;

			var tdObj=trObj[i].childNodes;
			var lenJ=tdObj.length;
			var idxJ=0;

			if(idx==scanTable.length) idx=0;

			for(var j=0 ; j < lenJ ; j++){

				if(tdObj[j].nodeType!=1) continue;

				tdObj[j].innerHTML=scanTable[idx][idxJ];

				idxJ++;

			}

			idx++;

		}



		return true;

	}

	this.swapRow=function(){	// 상위 한줄을 하위로 옮김

		var listObj=this.getListObj();
		var liObj=listObj.childNodes;
		var len=liObj.length;

		switch(this.tagName){

			case 'UL': this.swapRowList(listObj, liObj, len); break;
			case 'OL': this.swapRowList(listObj, liObj, len); break;
			case 'TABLE': this.swapRowTable(listObj, liObj, len); break;

		}

		return true;

	}

	this.actionCmd=function(type){

		switch(type){

			case 'stop': this.moveAction='stop'; break;
			case 'play': this.moveAction=''; eval(this.objName+'.motion();'); break;

		}

	}

	this.motion=function(){

		var listObj=this.getListObj();
		var style=parseInt(listObj.getStyle(this.moveType));
		style=(style)? style:0;

		if((style*-1)>=this.moveTerm){	// 리스트의 상위 한줄이 모두 올라가면

			if(this.swapRow()){

				listObj.setStyle(this.moveType, '0px');
				setTimeout(objName+'.motion()', this.term);

			}

			return false;

		}

		if(this.moveAction=='stop') return false;

		style--;
		listObj.setStyle(this.moveType, style+'px');

		setTimeout(this.objName+'.motion()', this.speed);

	}

	this.start=function(rowHeight, moveTerm){

		this.moveTerm=moveTerm;
		this.rowHeight=rowHeight;

		var rolling=$(this.winId);
		rolling.setStyle('overflow','hidden');
		this.setRowStyle();	// 리스트의 줄마다 스타일 지정

		this.motion();

	}

}