/*=========================================================
	하위 메뉴 펼침
=========================================================*/

var MenuOpen=function(objName, menuID){

	this.menuObj=$(menuID);
	this.dlEle=null;
	this.subMenuObj=null;
	this.subMenuObjDT=null;

	this.subMenuOpen=function(obj){

		this.subMenuCloseAll();	// 모든 DD 태그를 닫는다.

		var obj=$(obj);
		var eleDD=this.getSubDD(obj);
		if(!eleDD) return false;
		var locationDD=obj.getCoordinates();
		var top=Number(locationDD.top)+Number(locationDD.height);
		var left=Number(locationDD.left);

		eleDD.setStyle('position','absolute');
		eleDD.setStyle('display','block');
		eleDD.setStyle('top', top+'px');
		eleDD.setStyle('left', left+'px');

	}
	this.subMenuCloseAll=function(){

		var len=this.subMenuObj.length;
		for(var i=0 ; i < len ; i++){
			if(this.subMenuObj[i].tagName=='DD') $(this.subMenuObj[i]).setStyle('display','none'); 
		}

	}

	// 해당 dt의 링크 메뉴에 대한 dd 객체 반환
	this.getSubDD=function(obj){

		var len=this.subMenuObj.length;
		for(var i=0 ; i < len ; i++){
			if(this.subMenuObj[i] == obj) break;
		}

		if(!this.subMenuObj[(i+1)]) return false;
		if(this.subMenuObj[(i+1)].tagName!='DD') return false;
		return $(this.subMenuObj[(i+1)]);

	}

	// 롤오버시, 아웃시 메뉴가 컨트롤 이벤트 추가
	this.setEvent=function(dtEle){

		// document 객체에 롤오버시 메뉴 항목들이 닫힘
		document.addEvent('mouseover', function(){
			eval(objName+'.subMenuCloseAll()');
		})

		var len=dtEle.length;
		for(var i=0 ; i < len ; i++){
			var ele=$(dtEle[i]);
			ele.addEvent('mouseover', function(event){ 
				eval(objName+'.subMenuOpen(this)');

				// document 객체에 롤오버시 닫힘 열외 (DT)
				var event = new Event(event);
				event.stopPropagation();
			}); // 롤오버시
		}

		// document 객체에 롤버시 닫힘 열외(DD)
		var ddEle=this.menuObj.getElements('DD');
		var len=ddEle.length;
		for(var i=0 ; i < len ; i++){
			ddEle[i].addEvent('mouseover', function(event){
				var event = new Event(event);
				event.stopPropagation();
			});
		}


	}

	this.RunMenu=function(){

		if(!this.menuObj) return false;
		this.dlEle=this.menuObj.getElements('DL');
		if(!this.dlEle) return false;
		this.subMenuObj=getChildNodes(this.dlEle[0]);
		this.subMenuObjDT=getChildNodes(this.dlEle[0], {name:'DT'});
		this.setEvent(this.subMenuObjDT);
		this.subMenuCloseAll();

	}

}

/*=========================================================
	리스트 출력
=========================================================*/

var PrintList=function(objName, linkAreaID, listAreaID, searchFormID, pageAreaID){

	this.linkAreaEle=$(linkAreaID);
	this.listAreaEle=$(listAreaID);
	this.pageAreaEle=$(pageAreaID);
	this.searchFormEle=$(searchFormID);
	this.linkEle=(this.linkAreaEle)? this.linkAreaEle.getElements('A'):null;
	this.listPrintPath='';

	this.setPath=function(obj){

		if(obj){	// 강제적으로 지정되면
			this.listPrintPath=obj.href;
			if(!this.linkEle) return;
			var i=0;
			while(this.linkEle[i]){
				this.linkEle[i].className='';
				i++;
			}
			obj.className='selected';
		}else{	// 강제적으로 지정되지 않으면
			if(typeof(this.listPrintPath)=='string' && this.listPrintPath!='') return false; // 이미 프린트 목록 경로가 존재하면 리턴
			this.listPrintPath=this.linkEle[0].href;
			var i=0;
			while(this.linkEle[i]){
				this.linkEle[i].className='';
				i++;
			}
			this.linkEle[0].className='selected';
		}

	}
	this.sumHeight=function(tagName){

		var ele=this.listAreaEle.getElements(tagName);
		var len=ele.length;

		var height=0;
		for(var i=0 ; i < len ; i++){
			height+=Number(ele[i].getCoordinates().height);
		}

		return height;

	}

	// 표시되는 table 태그의 크기에 맞게 LIST_PRINT_AREA 영역의 사이즈를 재조정
	this.resizeListArea=function(){

		var listHeight=this.listAreaEle.getCoordinates().height;
		var height=0;
//		height+=Number(this.sumHeight('DIV'));
		height+=Number(this.sumHeight('TABLE'));
//		height+=Number(this.sumHeight('DL'));
//		height+=Number(this.sumHeight('UL'));
//		height+=Number(this.sumHeight('SPASN'));

		// 리스트 영역을 키우기
		var myFx = new Fx.Tween(this.listAreaEle, {duration: 500, onComplete:function(){
			$(listAreaID).setStyle('overflow', 'visible');
		}});
		myFx.start('height', listHeight, height);

		return height;

	}

	// LIST_PRINT_AREA 영역내에 내용 출력
	this.printList=function(){
	
		var ele=this.searchFormEle;
		ele.set('load', {update:this.listAreaEle, onComplete:function(){

			var listAreaEle=$(listAreaID);
			listAreaEle.fade('in');
			$('IFC_LOADING_LIST').fade('out');
			eval(objName+'.resizeListArea()');

		}});
		ele.load(this.listPrintPath);
		this.convertLink();	// 리스트 내 링크수정
		this.convertSrc();	// 리스트 내 src 수정
	
	}

	// LIST_PRINT_AREA 영역내에 표시되는 내용중 a 태그 및 span 태그에 대한 스크립트 처리
	this.convertLink=function(areaEle){

		var areaEle=(areaEle)? areaEle:this.listAreaEle;	// 지정된 영역이 있으면 지정된 영역으로 대체

		DOMsetLink(areaEle);	// 리스트 영역내 a 스크립트 설정

		if(DOMsetIcon) DOMsetIcon(areaEle, 'A');	// 영역내 a 태그 속성 설정
		if(DOMsetIcon) DOMsetIcon(areaEle, 'SPAN');	// 영역내 span 태그 속성 설정

	}

	this.convertSrc=function(){

		// 리스트 영역내 img 태그 스크립트 설정
		var ele=this.listAreaEle.getElements('IMG');
		var len=ele.length;

		for(var i=0 ; i < len ; i++){
			var srcString=ele[i].src;
			ele[i].src=srcString.replace('_store/', 'marketong/_store/');
		}

	}

	// 리스트영역내 레이어용 form 태그(name:Layer)가 있으면 숨김
	// 처리 form이면 스크립트 처리
	this.SetStyleLayer=function(){

		var ele=this.listAreaEle.getElements('FORM');
		var len=ele.length;

		for(var i=0 ; i < len ; i++){
			if(ele[i].getAttribute('allowScript')=='no') continue;
			ele[i].addEvent('submit', function(){
				formSubmit(this);
				return false;
			});
			if(ele[i].name=='Layer') $(ele[i]).setStyle('display', 'none');
		}

	}

	// 검색용 form 영역내에 input 태그 삽입
	this.SetControl=function(){

		var spanEle=new Element('SPAN');
		var controlType='hidden';

		spanEle.appendChild(new Element('INPUT', {name:'page', type:controlType}));
		spanEle.appendChild(new Element('INPUT', {name:'query_string', type:controlType}));
		spanEle.appendChild(new Element('INPUT', {name:'page_first', type:controlType}));
		spanEle.appendChild(new Element('INPUT', {name:'page_last', type:controlType}));
		spanEle.appendChild(new Element('INPUT', {name:'page_pages', type:controlType}));
		spanEle.setStyle('display', 'none');

		this.searchFormEle.appendChild(spanEle);

	}

	// 분할 페이지 링크 세팅
	this.SetPage=function(){

		var page=1;
		var form=this.searchFormEle;
		var pageOver=false;

		page=Number(form.page.value);
		// 페이지 표시 수 구하기
		if(form.page_pages.value==''){
			this.pageAreaEle.innerHTML='';
			return false;
		}
		var pageArr=form.page_pages.value.split(',');
		var pageCnt=pageArr.length;

		pageOver=(Number(form.page_last.value) >  pageCnt)? true:false;

		this.pageAreaEle.innerHTML='';	// 초기화

		// 처음 링크
		var spanEle=new Element('SPAN');
		spanEle.appendText('처음');
		spanEle.addClass('first');
		spanEle.addEvent('click', function(){setParmValue('?page=1');});
		this.pageAreaEle.appendChild(spanEle);

		if(pageOver){
			var movePage=(Number(pageArr[0]) > 15 )? Number(pageArr[0])-15:1;
			var spanEle=new Element('SPAN');
			spanEle.appendText('앞');
			spanEle.setAttribute('page', movePage);
			spanEle.addEvent('click', function(){ setParmValue('?page='+this.getAttribute('page'));});
			this.pageAreaEle.appendChild(spanEle);
		}

		// 페이지 표시 영역에 태그 삽입
		for(var i=0 ; i < pageCnt ; i++){

			var pageNum=pageArr[i];
			var spanEle=new Element('SPAN');
			if(page==pageNum){ spanEle.addClass('selected');	// 현재 페이지면
			}else{ spanEle.addEvent('click', function(){setParmValue('?page='+this.innerHTML);}); }	// 현재 페이지가 아니면 페이지 이동스크립트 추가

			spanEle.appendText(pageNum);
			this.pageAreaEle.appendChild(spanEle);

		}

		if(pageOver){
			var movePage=(Number(pageArr[(pageCnt)-1])+1)? Number(pageArr[(pageCnt)-1])+1 : pageArr[(pageCnt)-1];
			var spanEle=new Element('SPAN');
			spanEle.appendText('다음');
			spanEle.setAttribute('page', movePage);
			spanEle.addEvent('click', function(){setParmValue('?page='+this.getAttribute('page'));});
			this.pageAreaEle.appendChild(spanEle);
		}

		// 마지막 링크
		var spanEle=new Element('SPAN');
		spanEle.appendText('마지막');
		spanEle.addEvent('click', function(){setParmValue('?page='+form.page_last.value);});
		spanEle.addClass('last');
		this.pageAreaEle.appendChild(spanEle);

	}

	// 링크태그 및 검색폼 에 스크립트 설정
	this.SetScript=function(){

		if(!this.linkAreaEle) return false;
		if(!this.listAreaEle) return false;

		// 링크태그
		var len=this.linkEle.length;
		for(var i=0 ; i < len ; i++){

			this.linkEle[i].addEvent('click', function(){
				eval(objName+'.Print(this)');
				return false;
			});

		}

		// 검색폼
		this.searchFormEle.addEvent('submit', function(){
			eval(objName+'.Print()');
			return false;
		});

	}

	// 리스트 출력
	this.Print=function(obj){

		if(!this.listAreaEle) return false;

		this.listAreaEle.setStyle('overflow', 'hidden');	// 리스트 출력되기 전 오버플로우

		if(this.linkEle && this.linkEle.length <= 1) this.linkAreaEle.setStyle('display', 'none');	// 링크 버튼이 하나 이하면 링크영역 숨김

		this.setPath(obj);	// 리스트 출력 페이지 경로 설정

		var ele=this.listAreaEle.getCoordinates();
		var top=ele.top;
		var width=ele.width;
		var left=ele.left;

		// 로딩중 메세지 레이어 생성
		this.listAreaEle.setOpacity(0);	// 리스트 출력 영역은 투명처리
		if($('IFC_LOADING_LIST')) $('IFC_LOADING_LIST').destroy();	// 생성전에 이미 존재하면 제거
		var loadEle=new Element('DIV', {id:'IFC_LOADING_LIST'});
		$('GRP_contents').appendChild(loadEle);

		loadEle.setStyle('top', top+'px');
		loadEle.setStyle('left', left+'px');
		loadEle.setStyle('width', width+'px');

		this.printList();
		return false;

	}

}

/*=========================================================
	레이어 열기
-----------------------------------------------------------
	사용방법

	msgBox.prototype.alert=function(obj){

		this.layerOpen('alert', {width:200, height:300, standardObject:obj, modal:true});	// modal: [true/false]

	}
	msgBox.prototype.message=function(obj){

		this.layerOpen('massage', {width:200, height:300, standardObject:obj});

	}

	var msgBox1=new msgBox('msgBox1', 'layer.css');

	<input type="button" onclick="msgBox1.alert(this)" value="메세지1" />

===============================================================*/

var msgBox=function(objName, obj){

	var msgBoxID='GRPMASSAGEBOX';
	var cssPath='';
	var dragMove=false;

	if(obj){
		if(obj.msgBoxID) msgBoxID=obj.msgBoxID;
		cssPath=(obj.cssFile)? obj.cssFile:'';
		dragMove=(obj.dragMove)? true:false;
	}

	this.close=function(){ this.layerClose(); }

	/*=========내부함수 및 속성=========*/

	this.msgBoxID=msgBoxID;
	this.msgBoxClass='GRPMASSAGEBOX';
	this.closeAreaClassName='GRP_close';
	this.blindID='GRPBLIND';
	this.contentAreaID='GRPMASSAGE';
	this.containID='GRP_contain';
	this.objectName=objName;
	this.blindMotionTerm=200;
	this.msgBoxMotionTerm=200;
	this.standardObject=null;
	this.closeAreaEle=null;
	this.contents='';
	this.dragMove=dragMove;
	this.resetLayers=true;
	this.onSuccess=function(){};
	this.setFocus=false;

	this.layerOpen=function(contents, obj){	// 레이어 열기

		var width=0;
		var height=0;
		var standardObject=null;
		var modal=false;
		var openMsgBoxObj=null;
		var position=new Array();
		var zIndex='1001';
		position['v']='top';
		position['h']='left';

		if(obj){
			var width=(obj.width)? obj.width:0;
			var height=(obj.height)? obj.height:0;
			var standardObject=(obj.standardObject)? obj.standardObject:null;
			var modal=(obj.modal)? obj.modal:false;
			var openMsgBoxObj=(obj.boxObj)? obj.boxObj:null;
			var position=(obj.position)? obj.position:position;
			var zIndex=(obj.zIndex)? obj.zIndex:zIndex;
			this.dragMove=(obj.dragMove)? true:false;
			this.setFocus=(obj.setFocus)? true:false;
			if(obj.boxClass) this.msgBoxClass=obj.boxClass;
		}

		var bodyEle=document.getElement('body');
		bodyEle.onresize=function(){eval(objName+'.resizeLayer()'); }	// 창크기 변화시 각 레이어 재조정
		if(this.resetLayers) this.close();	// 기존 열려있는 레이어 닫기

		if(standardObject) this.standardObject=$(standardObject);
		this.contents=contents;

		if(modal && !openMsgBoxObj){

			this.setUpBlind();	// 블라인드 객체 생성
			var blindEle=$(this.blindID);

			// 블라인드 모션
			blindEle.setOpacity(0);	// 투명도 먼저 설정
			var myFx = new Fx.Tween(blindEle, {duration: this.blindMotionTerm, onComplete:function(){
				eval(objName+'.setMassageBox('+width+', '+height+')');
			}});
			myFx.start('opacity', 0, 0.5);

		}else if(!modal && !openMsgBoxObj){
			this.setMassageBox(width, height);
		}else if(modal && openMsgBoxObj){

			this.setUpBlind();	// 블라인드 객체 생성
			var blindEle=$(this.blindID);

			// 블라인드 모션
			blindEle.setOpacity(0);	// 투명도 먼저 설정
			var myFx = new Fx.Tween(blindEle, {duration: this.blindMotionTerm, onComplete:function(){
				eval(objName+'.openLayerDirect($("'+openMsgBoxObj.id+'"), '+width+', '+height+')');
			}});
			myFx.start('opacity', 0, 0.5);

		}else{
			this.openLayerDirect(openMsgBoxObj, width, height, position);
		}

	}

	this.layerClose=function(msgBoxID){

		var msgBoxID=(msgBoxID)? msgBoxID : this.msgBoxID ;
		if($(msgBoxID)) this.removeEle(msgBoxID);// 메세지 박스 제거

		// 블라인드 제거
		var blindEle=$(this.blindID);
		if(blindEle){
			var myFx = new Fx.Tween(blindEle, {duration: this.blindMotionTerm, onComplete:function(){
				eval(objName+'.removeEle('+objName+'.blindID)');
			}});
			myFx.start('opacity', 0.5, 0);
		}

		if($(this.containID)) $(this.containID).setStyle('min-height', '100%');

	}
	this.setUpBlind=function(){	// 블라인드 개체 추가

		if(!this.blindID) return false;
		if($(this.blindID)) this.removeEle(this.blindID);

		var blindEle=new Element('div', {id:this.blindID, styles:{'display':'block', 'position':'absolute', 'top':'0px', 'left':'0px', 'z-index':'1000', 'background-color':'#000000'}});
		var scEle=this.getSizeWindow();

		blindEle.attLayer='blind';
		blindEle.setStyle('width', scEle['width']+'px');
		blindEle.setStyle('height', scEle['height']+'px');
		blindEle.setOpacity(0);

		// 외각 닫기 관련
		blindEle.addEvent('click', function (event) {
			var event = new Event(event);
			event.stopPropagation();
		});

		document.body.appendChild(blindEle);

	}

	this.openLayerDirect=function(msgBoxEle, width, height, position){

		var width=(width)? width: parseInt(msgBoxEle.getStyle('width'));
		var height=(height)? height:0;

		var ele=this.getMessageBoxLocation(width, height);

		if(position){
			switch(position['v']){
				case 'top': ele['top']=ele['top']-ele['height']; break;
				case 'bottom':  break;
			}
			switch(position['h']){
				case 'left': break;
				case 'right': ele['left']=ele['left']+ele['width']; break;
			}
		}

		if(Number(ele['top']) < 0 ) ele['top']=0;
		if(Number(ele['left']) < 0 ) ele['left']=0;

		msgBoxEle.setOpacity(0);
		msgBoxEle.setStyle('display', 'block');
		msgBoxEle.setStyle('position', 'absolute');
		msgBoxEle.setStyle('z-index', this.zIndex);
		msgBoxEle.setStyle('top', ele['top']+'px');
		msgBoxEle.setStyle('left', ele['left']+'px');
		if(width) msgBoxEle.setStyle('width', width+'px');
		if(height) msgBoxEle.setStyle('height', height+'px');

		if(this.dragMove) var myMove = new Drag.Move(msgBoxEle);	// 드래그기능 지정

		// 외각 닫기 관련
		msgBoxEle.addEvent('click', function (event) {
			var event = new Event(event);
			event.stopPropagation();
		});

		// 메세지 박스 모션
		var myFx = new Fx.Tween(msgBoxEle, {duration: this.blindMotionTerm, onComplete:function(){
			document.addEvent('click', function(){
				eval(objName+".layerClose('"+msgBoxEle.id+"');");
			});
		}});
		myFx.start('opacity', 0, 1);

	}

	this.setMassageBox=function(width, height){	// 메세지 박스 개체 추가

		if($(this.msgBoxID)) this.removeEle(this.msgBoxID);

		var msgBoxEle=new Element('div', {id:this.msgBoxID, styles:{'display':'block', 'position':'absolute', 'z-index':'1001'}});
		msgBoxEle.className=this.msgBoxClass;
		msgBoxEle.setOpacity(0);
		document.body.appendChild(msgBoxEle);

		var width=(width)? width: parseInt(msgBoxEle.getStyle('width'));
		var ele=this.getMessageBoxLocation(width, height);

		msgBoxEle.attLayer='layer';
		msgBoxEle.setStyle('top', ele['top']+'px');
		msgBoxEle.setStyle('left', ele['left']+'px');
		if(width) msgBoxEle.setStyle('width', width+'px');

		if(this.dragMove) var myMove = new Drag.Move(msgBoxEle);	// 드래그기능 지정

		// 메세지 박스 모션
		eval(objName+'.setCloseArea()');
		eval(objName+'.setMassage()');

		if(height){	// 실제 높이가 지정된 높이 보다 크면 스크롤
			var cEle=$(this.contentAreaID);
			var msgEle=cEle.getCoordinates();
			if(Number(height) < Number(msgEle.height)){
				cEle.setStyle('overflow', 'scroll');
				cEle.setStyle('height', height+'px');
			}
		}

		if($(this.blindID)){	// 블라인드가 있으면 외각닫기 생략 (모달은 외각닫기 생략함)

			var myFx = new Fx.Tween(msgBoxEle, {duration: this.blindMotionTerm});
			myFx.start('opacity', 0, 1);

		}else{	// 블라인드가 없으면 외각닫기 기능 추가

			// 외각 닫기 관련
			msgBoxEle.addEvent('click', function (event) {
				var event = new Event(event);
				event.stopPropagation();
			});

			var myFx = new Fx.Tween(msgBoxEle, {duration: this.blindMotionTerm, onComplete:function(){
				document.addEvent('click', function(){
					eval(objName+'.close();');
				});
			}});
			myFx.start('opacity', 0, 1);

		}

		this.setPositFocus($(this.contentAreaID));

	}

	this.setPositFocus=function(areaEle){

		if(!this.setFocus) return false;

		var inputEle=areaEle.getElements('input');
		if(!inputEle) return false;
		var len=inputEle.length;
		for(var i=0 ; i < len ; i++){
			if(inputEle[i].type!='text') continue;
			inputEle[i].focus();
			break;
		}
	}

	this.setCloseArea=function(){	// 닫기 버튼 영역 및 닫기 버튼 생성

		var ele=$(this.msgBoxID);

		// 버튼 영역 생성
		var closeAreaEle=new Element('div');
		closeAreaEle.className=this.closeAreaClassName;
		this.closeAreaEle=closeAreaEle;
		ele.appendChild(closeAreaEle);

		// 닫기 버튼 생성
		var closeBtnEle=new Element('input');
		closeBtnEle.type='button';
		closeBtnEle.value='';
		closeBtnEle.addEvent('click', function(){eval(objName+'.close()')});
		closeAreaEle.appendChild(closeBtnEle);

		if(this.dragMove) closeAreaEle.setStyle('cursor', 'move');

	}

	this.setMassage=function(){	// 내용 표시 영역 생성

		var msgEle=new Element('div', {id:this.contentAreaID});
		msgEle.className='GRPMASSAGE';
		var msgBoxEle=$(this.msgBoxID);
		msgBoxEle.appendChild(msgEle);
		if(this.contents) $(this.contentAreaID).innerHTML=this.contents;
		this.setFormSubmit();

		var height=msgBoxEle.getCoordinates().height;
		var ele=this.getMessageBoxLocation(0, height);
		msgBoxEle.setStyle('top', ele.top+'px');
		this.onSuccess();

	}
	this.setFormSubmit=function(){	// 레이어 메세지 영역내 form 태그중 post 요청되는 태그의 onsubmit 속성 추가

		var form=$(this.contentAreaID).getElements('FORM');
		var len=form.length;

		for(var i=0 ; i < len ; i++){
			DOMsetInput(form[i]);	// 폼객체내 텍스트 박스 스타일 설정
			if(form[i].method!='post') continue;
			if(form[i].getAttribute('allowScript')=='no') continue;
			form[i].addEvent('submit', function(){ formSubmit(this, {msgObjName:objName}); return false; });	// 폼객체의 onsubmit 속성 설정
		}

	}

	this.getSizeWindow=function(){	// 현재 브라우저 사이즈 (스크롤길이 포함)

		return getSizeWindow();

	}

	this.getMessageBoxLocation=function(width, height){	// 메세지 박스 위치 지정

		var width=processNumber(width);
		var height=processNumber(height);

		if(this.standardObject){	// 기준 엘리먼트가 존재하면

			var scEle=this.getSizeWindow();
			var ele=this.standardObject.getCoordinates();

			var termTop=Number(ele.top)-Number(scEle.scrollTop);
			var termBottom=Number(scEle.screenHeight)-Number(termTop+ele.height);
			var termLeft=Number(ele.left)-Number(scEle.scrollLeft);
			var termRight=Number(scEle.screenWidth)-Number(termLeft+ele.width);

			// top
			if(scEle.screenHeight < height){
				ele.top=0;
			}else if(termTop > height){	//지정된 엘리먼트를 기준으로 위의 여백이 레이어의 높이보다 크면
				ele.top=(ele.top-height)+ele.height;
			}else if(termBottom > height){	// 아래의 여백이 레이어 높이보다 크면
				ele.top=ele.top;
			}else if(termTop > termBottom){	// 위의 여백이 아래의 여백보다 클때
				ele.top=(scEle.scrollTop+scEle.screenHeight)-height;
			}else{
				ele.top=scEle.scrollTop;
			}

			// left
			if(termRight < width){
				ele.left=(ele.left-width)+ele.width;
			}

		}else{	// 기준 엘리먼트가 존재하지 않으면 (화면의 정중앙에 배치)

			var ele=this.getSizeWindow();
			var left=0;
			var top=0;

			// top
			if(ele.screenHeight < height){	// 브라우저 창높이가 레이어보다 작으면
				top=ele.scrollTop;
			}else{
				top=((ele.screenHeight-height)/2)+ele.scrollTop;
			}

			// left;
			if(ele.screenWidth < width){	// 브라우저 창넓이가 레이어보다 작으면
				left=ele.scrollLeft;
			}else{
				left=((ele.screenWidth-width)/2)+ele.scrollLeft;
			}

			var ele=new Object();
			ele.top=top;
			ele.left=left;

		}

		// 레이어가 컨텐츠 영역에서 벗어날때
		var bottomPoint=Number(ele.top)+height;
		var bodyBottom=($(this.containID))? $(this.containID).getCoordinates().height : Number(document.getElement('body').getCoordinates().height);

		if(bottomPoint > bodyBottom){
			if($(this.containID)) $(this.containID).setStyle('min-height', (bottomPoint+10)+'px');
			if($(this.blindID)) $(this.blindID).setStyle('height', (bottomPoint+10)+'px');
		}

		return ele;

	}

	this.resizeLayer=function(){	// 윈도우 resize시 블라인드크기 재조정

		var ele=$(this.blindID);
		if(ele){
			var dEle=this.getSizeWindow();
			ele.setStyle('width', dEle.width+'px');
			ele.setStyle('height', dEle.height+'px');
		}

		var boxEle=$(this.msgBoxID);
		if(boxEle){
			var ele=this.getMessageBoxLocation(parseInt(boxEle.style.width), 0);
			boxEle.setStyle('top', ele.top+'px');
			boxEle.setStyle('left', ele.left+'px');
		}

	}

	this.removeEle=function(eleID){	// div 개체 제거

		if(eleID==this.msgBoxID || eleID==this.blindID){

			var ele=$(eleID);
			ele.innerHTML='';
			document.body.removeChild(ele);

		}else{

			$(eleID).setStyle('display','none');

		}

		// 글로벌 설정값 초기화
		this.standardObject=null;
		this.contents='';

		document.removeEvents('click');

	}

	if(cssPath) new Asset.css(cssPath);	// css 파일 경로가 지정되어 있으면

}

// 객체생성
var targetLayer=new msgBox('targetLayer');	// 기존 레이어 열기 전용
targetLayer.blindID=null;

var msgBox1=new msgBox('msgBox1');

var msgBox2=new msgBox('msgBox2');
msgBox2.closeAreaClassName='GRP_close';
msgBox2.contentAreaID='GRPMASSAGE2';
msgBox2.msgBoxID='GRPMASSAGEBOX2';
msgBox2.blindID='GRPBLIND2';

var ctlLayer=new msgBox('ctlLayer');

var fileZipBox=new msgBox('fileZipBox');
fileZipBox.closeAreaClassName='GRP_close';
fileZipBox.contentAreaID='GRPZIPLIST';
fileZipBox.msgBoxID='GRPZIPBOX';
fileZipBox.blindID=null;
fileZipBox.resetLayers=false;

var mediaBox=new msgBox('mediaBox');
mediaBox.closeAreaClassName='GRP_close';
mediaBox.contentAreaID='GRPMEDIA';
mediaBox.msgBoxID='GRPMEDIABOX';
mediaBox.blindID=null;
mediaBox.resetLayers=false;

var boardArticle=new msgBox('boardArticle');
boardArticle.msgBoxClass='GRPARTICLEBOX';
boardArticle.closeAreaClassName='GRP_close';
boardArticle.contentAreaID='GRPARTICLE';
boardArticle.msgBoxID='GRPARTICLEBOX';
boardArticle.blindID='GRPBLINDARTICLE';

/*=========================================================
	테이블 줄 구분
=========================================================*/

var TableRowDivision=function(objName, divisionColor){

	this.tableObj=null;
	this.scanCells=Array();
	this.rowTdEle=null;

	this.swapStyleOnOver=function(obj){
	
		var ele=getChildNodes(obj);	// 롤오버된 줄의 각 셀을 가져온다.
		var len=ele.length;
		this.rowTdEle=ele;

		for(var i=0 ; i < len ; i++){

			// 각 행의 셀들의 배경스타일 정보 스캔
			var rowEle=$(ele[i]);
			this.scanCells[i]=Array();
			this.scanCells[i]['color']=rowEle.getStyle('background-color');
			this.scanCells[i]['img']=rowEle.getStyle('background-image');

			// 스캔후 지정 색상으로 교체
			rowEle.setStyle('background-color', divisionColor);

		}

	}
	this.swapStyleOnOut=function(obj){

		var ele=getChildNodes(obj);	// 롤오버된 줄의 각 셀을 가져온다.
		var len=ele.length;
		this.rowTdEle=null;

		for(var i=0 ; i < len ; i++){

			// 스캔된 스타일 정보를 다시 되돌림
			var rowEle=$(ele[i]);
			rowEle.setStyle('background-color', this.scanCells[i]['color']);
			rowEle.setStyle('background-image', this.scanCells[i]['img']);

			// 되돌린후 값들을 null로 교체
			this.scanCells[i]['color']=null;
			this.scanCells[i]['img']=null;

		}

	}

	this.SetEvent=function(){

		var ele=getChildNodes(this.tableObj, {name:'TBODY'});
		var ele=getChildNodes(ele[0], {name:'TR'});
		var len=ele.length;

		for(var i=0 ; i < len ; i++){

			$(ele[i]).addEvent('mouseover', function(){
				eval(objName+'.swapStyleOnOver(this)');
			});
			$(ele[i]).addEvent('mouseout', function(){
				eval(objName+'.swapStyleOnOut(this)');
			});

		}

	}

	this.SetChecked=function(){

		var ele=this.rowTdEle;
		var len=ele.length;

		for(var i=0 ; i < len ; i++){

			if(!ele[i].getAttribute('markCheck')) continue;
			ele[i].setStyle('background-color', null);
			ele[i].setStyle('backgroudn-image', null);
			ele[i].className='checked';

			// 되돌린후 값들을 null로 교체
			this.scanCells[i]['color']=null;
			this.scanCells[i]['img']=null;

		}

		return false;

	}

}

//객체생성
var TableRowDivision1=new TableRowDivision('TableRowDivision1', '#E6E6E6');

/*=========================================================
	떠있는 레이어
=========================================================*/

var FloatLayer=function(objName,LayoutArea, FloatArea, option){

	this.LAEle=$(LayoutArea);
	this.FAEle=$(FloatArea);
	this.optionTop=(option && option.top)? option.top:0;
	this.optionLeft=(option && option.left)? option.left:0;
	this.optionMotion=(option && option.motion)? option.motion:0;

	this.getTop=function(){

		var scrollTop=0
		if(document.body.scrollTop){
			scrollTop=Number(document.body.scrollTop);
		}else if(document.documentElement.scrollTop){
			scrollTop=Number(document.documentElement.scrollTop);
		}
		return Number(scrollTop)+Number(this.optionTop);

	}

	this.styleSet=function(){

		var positionTop=this.getTop();
		this.FAEle.setStyle('top', positionTop+'px');

	}
	this.moveByScroll=function(){

		var positionTop=this.getTop();
		var tP=this.FAEle.getCoordinates();
		this.FAEle.setStyle('top', positionTop+'px');

	}
	this.start=function(){

		this.styleSet();

		window.onscroll=function(){
			eval(objName+'.moveByScroll()');
		}

	}

}

/*=========================================================
	체크박스 및 라디오 버튼 리스트 레이어
=========================================================*/

var CheckLayer=function(objName, targetID){

	this.emptyStr='';
	this.areaEle=null;
	this.labelEle=null;
	this.dtEle=null;
	this.titleHeight=12;
	this.minWidth=150;
	this.maxWidth=600;
	this.checkboxUnexistent='선택항목이 없습니다.';
	this.onClickThis=function(){};
	this.releaseEle=null;

	this.ctlLayer=function(obj){

		var position=new Array();
		position['v']='bottom';
		position['h']='left';

		// dd 객체 가져오기
		var ele=$(obj).getElement('dd');
		switch(ele.getStyle('display')){
			case 'block': ele.setStyle('display', 'none'); break;
			case 'none': 
				if(ele.getElements('SPAN').length <=0) ele.innerHTML=this.checkboxUnexistent;
				ctlLayer.layerOpen('', {standardObject:obj, boxObj:$(ele), position:position}); 
			break;
		}

	}

	this.resizeTitle=function(motion){

		var motion=(motion)? true:false;

		var ele=this.dtEle.getElements('span');
		var len=ele.length;
		var cEle=ele.getCoordinates();

		var width=0;
		for(var i=0 ; i < len ; i++){
			var obj=ele[i].getCoordinates();
			width+=Number(obj.width);
//			ele[i].setStyle('display', 'inline');	// span을 inline속성으로 변경
//			ele[i].setStyle('float', 'none');	// float 속성 제거
		}

		var height=this.titleHeight;
		if(width < this.minWidth) width=this.minWidth;	// 최소 길이보다 작으면
		if(width > this.maxWidth){	// 최대 길이보다 크면
			width=this.maxWidth;
			height=Number(this.titleHeight)*((width / this.maxWidth)+1);	// 표시 영역에 세로길이를 x배로 키움
		}

		if(motion){

			if(height){
				var myFx = new Fx.Tween(this.dtEle, {duration: 250, onComplete:function(){
	//				$(listAreaID).setStyle('overflow', 'visible');
				}});
				myFx.start('height', cEle.height, height);
			}

			var myFx = new Fx.Tween(this.areaEle, {duration: 250, onComplete:function(){
//				$(listAreaID).setStyle('overflow', 'visible');
			}});
			myFx.start('width', cEle.width, width);
			var myFx = new Fx.Tween(this.dtEle, {duration: 250, onComplete:function(){
//				$(listAreaID).setStyle('overflow', 'visible');
			}});
			myFx.start('width', cEle.width, width);
		}else{
			this.areaEle.setStyle('width', width+'px');
			this.dtEle.setStyle('width', width+'px');
		}

	}

	this.injectTitle=function(ele, cmdObj){

		var motion=(cmdObj && cmdObj.motion)? true:false;

		if(this.dtEle.getElements('span').length==0) this.dtEle.innerHTML='';	// dt영역내 span 객체가 존재하지 않으면 dt 영역내 모든 내용을 제거

		var labelEleFor=getFor(ele);
		var newEle=new Element('span', {id:'checked_label'+labelEleFor});
		newEle.setStyle('display', 'block');	// 초기 span 태그 삽입시 block 속성을 둔다. (가로크기 구할때 정상작동을 위해)
		newEle.setStyle('float', 'left');	// 초기 span 태그 삽입시 float 속성을 둔다. (가로크기 구할때 정상작동을 위해)

		newEle.innerHTML=ele.innerHTML;
		this.dtEle.appendChild(newEle);

		this.resizeTitle(motion);

	}
	this.removeTitle=function(ele){

		var labelEleFor=getFor(ele);
		if(!$('checked_label'+labelEleFor)) return false;
		var titleEle=$('checked_label'+labelEleFor);

		titleEle.innerHTML='';
		this.dtEle.removeChild(titleEle);

		this.resizeTitle(true);

		if(this.dtEle.getElements('span').length==0){
			this.dtEle.innerHTML=this.emptyStr;	// dt영역내 span 객체가 존재하지 않으면 기본 텍스트 삽입
		}

	}

	this.getLabel=function(inputID){

		var len=this.labelEle.length;

		for(var i=0 ; i < len ; i++){
			if(getFor(this.labelEle[i])==inputID) return this.labelEle[i];
		}

		return null;

	}

	this.releaseAll=function(obj){

		var labelEle=this.getLabel(obj.getAttribute('id'));

		if(!obj.checked){
			labelEle.className='';
			this.removeTitle(labelEle, {motion:true});
			return;
		}

		var inputEle=$(targetID).getElements('input');
		var len=inputEle.length;

		for(var i=0 ; i < len ; i++){
			if(inputEle[i].getAttribute('name')=='') continue;
			if(inputEle[i].checked==false) continue;
			inputEle[i].checked=false;
			this.checkThis(inputEle[i]);
		}

		obj.checked=true;
		labelEle.className='checked';
		this.injectTitle(labelEle, {motion:true});

	}
	this.checkThis=function(obj){

		this.onClickThis(obj);

		var inputEle=$(obj);
		var labelEle=this.getLabel(inputEle.getAttribute('id'));

		if(inputEle.checked){
			labelEle.className='checked';
			this.injectTitle(labelEle, {motion:true});
		}else{
			labelEle.className='';
			this.removeTitle(labelEle, {motion:true});
		}

		if(this.releaseEle && this.releaseEle.checked==true){
			this.releaseEle.checked=false;
			this.checkThis(this.releaseEle);
		}

	}
	this.checkSet=function(obj){

		var ele=$(getFor(obj));
		if(ele.checked){
			obj.className='checked';
			this.injectTitle(obj, {motion:false});
		}else{
			obj.className='';
			this.removeTitle(obj, {motion:false});
		}

	}

	this.set=function(){

		this.areaEle=$(targetID);
		var dtEle=this.areaEle.getElement('dt');
		this.dtEle=dtEle;

		if(!this.areaEle.className) this.areaEle.className='MULTI_SELECT';
		this.labelEle=this.areaEle.getElements('label');
		var len=this.labelEle.length;
		this.emptyStr=dtEle.innerHTML;

		// 라벨에 onclick 이벤트 설정 및 스타일 설정
		dtEle.innerHTML='';
		for(var i=0 ; i < len ; i++){
/*
			$(this.labelEle[i]).addEvent('click', function(){
				eval(objName+'.checkThis(this)');
			});
*/
			var inputEle=$(getFor(this.labelEle[i]));

			if(!inputEle.getAttribute('name')){
				this.releaseEle=inputEle;
				inputEle.addEvent('click', function(){ eval(objName+'.releaseAll(this)'); });
			}else{
				inputEle.addEvent('click', function(){ eval(objName+'.checkThis(this)'); });
			}
	
			this.checkSet(this.labelEle[i]);
		}

		if(dtEle.innerHTML=='') dtEle.innerHTML=this.emptyStr;

		// dl 영역에 onclick 이벤트 설정
		$(targetID).addEvent('click', function(){
			eval(objName+'.ctlLayer(this)');
		});

		this.ctlLayer(this.areaEle);

		// reset 버튼 설정
		var reset=$('reset');
		if(reset){
			reset.addEvent('click', function(){
				eval(objName+'.reset()');
			});
		}

	}

	this.reset=function(){

		this.dtEle.innerHTML='';
		this.resizeTitle(true);
		this.dtEle.innerHTML=this.emptyStr;

	}

}

/*=========================================================
	number format
=========================================================*/
var Money=function(){

	this.val;
	this.minus=false

	this.removeMark=function(val){
		var val=(val)? val: this.val;
		val=String(val);
		var arr=val.split(',');
		var len=arr.length;
		var money='';

		for(var i=0 ; i < len ; i++){ money+=arr[i]; } // 콤마 제거
		this.minus=(parseInt(money) < 0 || money=='-')? true:false; // 음수인지 양수인지 확인

		money=money.replace('-', '');
		return money;
	}

	this.mark=function(val){
		this.val=val;
		money=this.removeMark(val);

		// 단위별로 나누어서 배열로 저장
		var unit=Array();
		var len=money.length;
		var unitLen=(money.length==0)? 0: Math.floor(money.length/3);
		var etcLen=len-(unitLen*3);

		unit[0]=money.substr(0, etcLen);

		for(var i=1 ; i <= unitLen ; i++){
			unit[i]=money.substr(etcLen+((i-1)*3), 3);
		}

		// 나누어진 배열사이에 콤마로 연결
		var len=unit.length;
		var rtnStr='';
		for(var i=0 ; i < len ; i++){
			if(i==0 && unit[i]==''){
				rtnStr+=unit[i];
			}else if((i+1) == len){
				rtnStr+=unit[i];
			}else if((i+1) < len){
				rtnStr+=unit[i]+',';
			}
		}

		if(this.minus) rtnStr='-'+rtnStr;
		return rtnStr;

	}
	this.unmark=function(val){

		this.val=val;
		var money='';
		money=this.removeMark(val);
		return (this.minus)? '-'+money : money;

	}

}
var Money=new Money();
