﻿/******************************************************** 
   파일명 : lib.control.js
   설  명 : Form Control 기능 처리 공통 함수 모음
   작성자 : 김현배 
   작성일 : 2008.08.18 
   수정일 : 2008.08.18 
*********************************************************/ 


/**
	함수명 : prefixSameValueArray
	설  명 : Form Control의 이름의 앞자리가 동일한 컨트롤들의 value값을 한번에 설정한다.
	         단 arrayIndex에 지정한 값만 지정한다.
	인  자 : prefix : 컨트롤의 앞의 이름, value : 설정할 value, isFormater : 시퀀스가 두자리 여부
	리  턴 : 컨트롤들의 값을 설정
	사용법 : 
		var indexStr = "0,2,3,4,5,6,8,9,10";
		var indexArray = indexStr.split(",");
		prefixSameValueArray("nk", getOptionText(form.nk), indexArray);
		//nk0, nk2, nk...10까지 값을 form.nk의 값으로 갱신한다.
 */
function prefixSameValueArray(prefix, value, arrayIndex){
	for(var i = 0;i < arrayIndex.length; i++){

		var ctl = document.all[prefix + "" + arrayIndex[i]];

		if(ctl == null){
			continue;
		}
		try{
			if(ctl.type != null){
				ctl.value = value;
			}
		}catch(e){}
	}
}

/**
	함수명 : prefixSameValue
	설  명 : Form Control의 이름의 앞자리가 동일한 컨트롤들의 value값을 한번에 설정한다.
	         단 컨트롤은 최대 99개까지 가능
	인  자 : prefix : 컨트롤의 앞의 이름, value : 설정할 value, isFormater : 시퀀스가 두자리 여부
	리  턴 : 컨트롤들의 값을 설정
	사용법 : 
		prefixSameValue();
 */
function prefixSameValue(prefix, value, isFormater){
	for(var i = 0;i < 100; i++){
		var index = i;
		if(isFormater){
			if(index < 10){
				index = "0" + index;
			}
		}
		var ctl = document.all[prefix + "" + index];

		if(ctl == null){
			continue;
		}
		try{
			if(ctl.type != null){
				ctl.value = value;
			}
		}catch(e){}
	}
}
/**
	함수명 : prefixSameText
	설  명 : Form Control이 아닌 TD, DIV등의 innerText을 업데이트 하기 위해 이름의 앞자리가 동일한 컨트롤들의 value값을 한번에 설정한다.
	         단 컨트롤은 최대 99개까지 가능
	인  자 : prefix : 컨트롤의 앞의 이름, value : 설정할 value, isFormater : 시퀀스가 두자리 여부
	리  턴 : 컨트롤들의 값을 설정
	사용법 : 
		prefixSameValue();
 */
function prefixSameText(prefix, value, isFormater){
	for(var i = 0;i < 100; i++){
		var index = i;
		if(isFormater){
			if(index < 10){
				index = "0" + index;
			}
		}
		var ctl = document.all[prefix + "" + index];
		if(ctl == null){
			continue;
		}
		try{
			if(ctl.type == null){
				ctl.innerText = value;
			}
		}catch(e){}
	}
}
/**
	함수명 : prefixSameDisabled
	설  명 : Form Control의 이름의 앞자리가 동일한 컨트롤들의 disabled를 한번에 설정한다.
	         단 컨트롤은 최대 99개까지 가능
	인  자 : prefix : 컨트롤의 앞의 이름, isStatus : true or false, isFormater : 시퀀스가 두자리 여부
	리  턴 : 컨트롤들의 값을 설정
	사용법 : 
		prefixSameValue();
 */
function prefixSameDisabled(prefix, isStatus, isFormater){
	for(var i = 0;i < 100; i++){
		if(isFormater){
			if(index < 10){
				index = "0" + index;
			}
		}
		var ctl = document.all[prefix + "" + index];
		if(ctl == null){
			continue;
		}
		try{
			ctl.disabled = isStatus;
		}catch(e){}
	}
}

/**
	함수명 : prefixSameBackground
	설  명 : Form Control이 아닌 TD, DIV등의 Background을 업데이트 하기 위해 이름의 앞자리가 동일한 컨트롤들의 Background값을 한번에 설정한다.
	         단 컨트롤은 최대 99개까지 가능
	인  자 : prefix : 컨트롤의 앞의 이름, rgb : 색상, isFormater : 시퀀스가 두자리 여부
	리  턴 : 컨트롤들의 값을 설정
	사용법 : 
		prefixSameValue();
 */
function prefixSameBackground(prefix, rgb, isFormater){
	for(var i = 0;i < 100; i++){
		if(isFormater){
			if(index < 10){
				index = "0" + index;
			}
		}
		var ctl = document.all[prefix + "" + index];
		if(ctl == null){
			continue;
		}
		try{
			ctl.style.backgroundColor=rgb;
		}catch(e){}
	}
}


/**
	함수명 : selectSwitchUp
	설  명 : select컨트롤의 선택된 option을 한칸위로 이동시킨다.
	인  자 : select control
	리  턴 : 
	사용법 : 
		selectSwitchUp(control);
 */
function selectSwitchUp(ctl){
	var index = ctl.selectedIndex;
	if(index == 0){			
		return;
	}
	var indexValue = ctl.options[index].value;
	var indexText = ctl.options[index].text;
	var targetValue = ctl.options[index - 1].value;
	var targetText = ctl.options[index - 1].text;	
	ctl.options[index].value = targetValue;
	ctl.options[index].text = targetText;			
	ctl.options[index - 1].value = indexValue;
	ctl.options[index - 1].text = indexText;
	ctl.selectedIndex = index - 1;
}

/**
	함수명 : selectSwitchUp
	설  명 : select컨트롤의 선택된 option을 한칸아래로 이동시킨다.
	인  자 : select control
	리  턴 : 
	사용법 : 
		selectSwitchDown(control);
 */
function selectSwitchDown(ctl){
	var index = ctl.selectedIndex;
	if(index == (ctl.length - 1)){			
		return;
	}
	var indexValue = ctl.options[index].value;
	var indexText = ctl.options[index].text;
	var targetValue = ctl.options[index + 1].value;
	var targetText = ctl.options[index + 1].text;	
	ctl.options[index].value = targetValue;
	ctl.options[index].text = targetText;			
	ctl.options[index + 1].value = indexValue;
	ctl.options[index + 1].text = indexText;
	ctl.selectedIndex = index + 1;
}

/**
	함수명 : selectReset
	설  명 : select컨트롤에 모든옵션을 삭제한다.
	인  자 : select control, defaultOptionValue(선택 등등 기본값이 필요할경우 넣어준다)
	리  턴 : 
	사용법 : 
		selectReset(ctl, defaultOptionValue);
 */
function selectReset(ctl, defaultOptionValue){
	while(true){
		if(ctl.options.length == 0){
			break;
		}
		ctl.options[0] = null;
	}

	if(defaultOptionValue != null){
		selectAppendOne(ctl, "", defaultOptionValue);
	}
}

/**
	함수명 : selectResetRange
	설  명 : select컨트롤에 모든옵션을 삭제한다.
				복수개의 select컨트롤의 옵션을 삭제 하고 싶을 경우 사용한다.

	인  자 : form control, select의 prefix, 컨트롤시작번호, 컨트롤마지막번호, range 시작값, range 종료값, 옵션의 text추가값
	리  턴 : 
	사용법 : 
		가령 다음과 같이 ProcForm안에 bk1, 2, 3의 총 3가지의 select control을 한번에 초기화 할수 있다.
		<form name="ProcForm">
		<select name="bk1"></select>
		<select name="bk2"></select>
		<select name="bk3"></select>
		</form>		
		selectResetRange(document.ProcForm, "bk", 1, 3);

		또한 range 시작값, range 종료값을 사용하여 각각 select컨트롤에 기본 값들을 설정 할 수 있다.		
		selectResetRange(document.ProcForm, "bk", 1, 3, 1, 10, "세만기");

		* range기본값을 입력하지 않으면 복수개의 select만 초기화 된다.
		

 */
function selectResetRange(formCtl, selectPrefix, seq_start, seq_end, minValue, maxValue, optionTextPostfix){
	
	var ctl = null;
	for(; seq_start <= seq_end; seq_start++){
		ctl = formCtl[selectPrefix + "" + seq_start];
		if(ctl != null){
			selectReset(ctl);
			if(minValue != null && maxValue != null){
				for(var startValue = minValue; startValue <= maxValue; startValue++){
					selectAppendOne(ctl, startValue + "", startValue + optionTextPostfix);
				}
				setSelectVal(ctl, maxValue);
			}
		}
	}
}

/**
	함수명 : selectAppendOne
	설  명 : select컨트롤에 option을 추가한다.
	인  자 : select control, key, value, fontColor
	리  턴 : 
	사용법 : 
		selectAppendOne(control, key, value, fontColor);
 */
function selectAppendOne(ctl, key, value, fontColor){
	value = value + "";
	value = replaceAll(value, "&nbsp;", " ");
	var option = new Option(value, key);

	if(fontColor != null && fontColor != ""){
		option.style.color = fontColor;
	}
	ctl.options[ctl.options.length] = option;
}

/**
	함수명 : setSelectVal
	설  명 : select컨트롤내에 동일한 value가 있을 경우 해당 selectBox의 선택 상태를 변경한다.
	인  자 : select control, value
	리  턴 : 
	사용법 : 
		setSelectVal(f.nk, "");	//value가 ""인 항목이 선택된다.
 */
function setSelectVal(obj, val){
	for(var i=0;i<obj.length;i++){
		if(obj.options[i].value == val){
			obj.selectedIndex = i;
			return true;
		}
	}
	return;
}

/**
	함수명 : setCheckVal
	설  명 : checkbox 컨트롤내에 동일한 value가 있을 경우 해당 checkbox의 선택 상태를 변경한다.
	인  자 : checkbox control, value
	리  턴 : 
	사용법 : 
		setCheckVal(f.nk, "");	//value가 ""인 항목이 선택된다.
 */
function setCheckVal(obj, val){
	if(obj.length > 1){
		for(var i=0;i<obj.length;i++){
			if(obj[i].value == val){
				obj[i].checked = true;
			}
		}
	} else {
		if(obj.value == val){
			obj.checked = true;
		}
	}
	return false;
}

/**
	함수명 : getOptionValue
	설  명 : select컨트롤의 선택된 Option의 value를 가져온다.
	인  자 : select control
	리  턴 : 선택된 Option의 value
	사용법 : 
		getOptionValue(form.nk);
 */
function getOptionValue(ctl) {
    if (ctl.selectedIndex != null) {
        var opt = ctl.options[ctl.selectedIndex].value;
        return opt;
    }
}

/**
	함수명 : getRadioValue
	설  명 : radio컨트롤의 선택된 value를 가져온다.
	인  자 : radio control
	리  턴 : 선택된 Option의 value
	사용법 : 
		getRadioValue(form.nk);
 */
function getRadioValue(ctl) {
	if(ctl == null){
		return null;
	}
	if(ctl.length > 1){
		for(var i = 0; i < ctl.length; i++){
			if(ctl[i].checked){
				return ctl[i].value;
			}
		}
	} else {
		if(ctl.checked){
			return ctl.value;
		}
	}
	return null;
}

/**
	함수명 : getOptionValue
	설  명 : select컨트롤의 선택된 Option의 text를 가져온다.
	인  자 : select control
	리  턴 : 선택된 Option의 text
	사용법 : 
		getOptionText(form.nk);
 */
function getOptionText(ctl) {
    if (ctl.selectedIndex != null) {
        var opt = ctl.options[ctl.selectedIndex].text;
        return opt;
    }
}

/**
	함수명 : getCheck
	설  명 : checkbox의 특정 value값이 check되어 있는지 확인 한다.
	인  자 : ctl:선택해야 하는 control
	리  턴 : 
	사용법 : 
		if(isCheck(chk_control)){
		}
 */
function isCheck(ctl, pValue){
	if(ctl == null){
		return false;
	}
	if(ctl.length > 1){
		for(var i = 0; i < ctl.length; i++){
			if(ctl[i].value == pValue){
				return ctl[i].checked;
			}
		}
	} else {
		return ctl.checked;	
	}
}

/**
	함수명 : getCheck
	설  명 : checkbox의 선택 상태를 리턴한다.
	인  자 : ctl:선택해야 하는 control
	리  턴 : 
	사용법 : 
		if(isCheck(chk_control)){
		}
 */
function getElemCheck(seq, status){

}

/**
	함수명 : checkedAll
	설  명 : checkbox의 전체 선택을 수행한다.
	인  자 : ctl:선택해야 하는 control, selectFlagCtl:선택혹은비선택을 결정하기위한 control
	리  턴 : 
	사용법 : 
		checkedAll(chk_control, this);
 */
function checkedAll(ctl, selectFlagCtl){
	if(ctl == null){
		alert("선택가능한 대상이 없습니다.");
		return;
	}
	if(ctl.length > 1){
		for(i = 0; i < ctl.length; i++){
			ctl[i].checked = selectFlagCtl.checked;
		}

	} else {
		ctl.checked = selectFlagCtl.checked;
	}
}


/**
	함수명 : checkedAll02
	설  명 : checkbox의 전체 선택을 수행한다.
	인  자 : ctl:선택해야 하는 control, isStatus:true or false
	리  턴 : 
	사용법 : 
		checkedAll02(chk_control, true);
 */
function checkedAll02(ctl, isStatus){
	if(ctl == null){
		alert("선택가능한 대상이 없습니다.");
		return;
	}
	if(ctl.length > 1){
		for(i = 0; i < ctl.length; i++){
			ctl[i].checked = isStatus;
		}

	} else {
		ctl.checked = isStatus;
	}
}

/**
	함수명 : moveFocus
	설  명 : 객체의 자리수가 정해진 길이만큼 되면, 다음 객체로 포커스가 이동된다.
	인  자 : ctl:control, len:체크되는 길이, nextObj:포커스가 이동되어야 하는객체
	리  턴 : 
	사용법 : 
		<input type="text" name="resd_no1" onKeyup="moveFocus(this, 6, document.Form.resd_no2)">
 */
function moveFocus(obj, len, nextObj) {  
    if (obj.value.length == len) {
        nextObj.focus() ;
        return;
    }
}

/**
	함수명 : enterEvent
	설  명 : Enter key가 눌려지면 요청한 event가 실행된다.
	인  자 : eventName:실행할 event
	리  턴 : 
	사용법 : 
		<input type="text" name="id" onClick="enterEvent('goLogin()')">
 */
function enterEvent( eventName ) {  
    if(window.event.keyCode == 13) { 
        method = eval(eventName);  
        return;
    }
}

/**
	함수명 : appendEnterEvent
	설  명 : 지정한 Object에 Enter key 이벤트를 지정한다.
	인  자 : objNm:Enter Key 이벤트를 지정할 Object, eventName:실행할 event
	리  턴 : 
	사용법 : 
		<script>
			appendEnterEvent("id", "goLogin()");
		</script>
 */
function appendEnterEvent(objNm, eventName){
	try{
		var obj = document.all[objNm];
		obj.onkeyup=function() {
			enterEvent(eventName);
		}
	}catch(e){
		alert(e);
	}
}

/**
	함수명 : getArrayControlOne
	설  명 : Object 배열중 value의 값에 해당하는 Control을 return한다.
	인  자 : objs : Object Array, Value
	리  턴 : 
	사용법 : 
		<script>
			var elem_check = getArrayControlOne(form["elem_check"], "12");
		</script>
 */
function getArrayControlOne(objs, value){
	try{
		if(objs.length > 1){
			for(var i = 0; i < objs.length; i++){
				if(objs[i].value == value){
					return objs[i];
				}
			}
		} else {
			return objs;
		}
	}catch(e){
		alert(e);
	}
}

/**
	함수명 : createFormData
	설  명 : 폼데이터 스트링을 생성해 준다.
			 checkbox와 radio form태그는 값이 없을 경우 전송하지 않는다.
	인  자 : form control
	리  턴 : 
	사용법 : 
		<script>
			var formString = createFormData(document.ProcForm);
		</script>
 */
function createFormData(form){
	var ctls = form.elements;
	var formData = "";
	for(var i = 0; i < ctls.length; i++){
		var name = ctls[i].name;
		var value = ctls[i].value;

		if(name == null){
			name = ctls[i].id;
			if(name == null){
				continue;
			}
		}
		
		//radio, checkbox는 선택된 값만 넘겨 주도록 한다.
		if(ctls[i].type == "checkbox" || ctls[i].type == "radio"){
			if(!ctls[i].checked){
				continue;
			}

			if(ctls[i].value == ""){
				continue;
			}
		}

		//selectbox가 멀티플일경우
		if(ctls[i].multiple){
			if(ctls[i].length > 1){
				for(var j = 0; j < ctls[i].length; j++){
					if(ctls[i][j].selected){
						formData = formData + "&" + name + "=" + encodeURIComponent(ctls[i][j].value);
					}
				}
				continue;
			}
		}
		formData = formData + "&" + name + "=" + encodeURIComponent(value);
	}

	return formData;
}


/**
	함수명 : appendHidden
	설  명 : 지정된폼에 hidden tag가 존재하지 않으면 생성하여 append하고 존재할경우 value를 업데이트 한다.
	인  자 : form control, 생성할 control의 이름, 값
	리  턴 : 
	사용법 : 
		<script>
			appendHidden(document.ProcForm, "input1", "값");
		</script>
 */
function appendHidden(form, name, value){
	if(form[name] != null){
		form[name].value = value;
	} else {
		var hiddenTag = document.createElement("<input type='hidden' value='" + value + "' name='" + name + "' id='" + name + "'>");
		form.appendChild(hiddenTag);
	}
}

/**
	함수명 : disableRadio
	설  명 : 지정된 라디오 버튼들을 Disable
	인  자 : form control, 생성할 control의 이름, 값
	리  턴 : 
	사용법 : 
			disableRadio(ctl);
 */
function disableRadio(ctl) {
	for(var i = 0; i < ctl.length; i++){
		ctl[i].disabled = true;
	}
}

/**
	함수명 : enableRadio
	설  명 : 지정된 라디오 버튼들을 Disable
	인  자 : form control, 생성할 control의 이름, 값
	리  턴 : 
	사용법 : 
			enableRadio(ctl);
 */
function enableRadio(ctl){
	for(var i = 0; i < ctl.length; i++){
		ctl[i].disabled = false;
	}
}

