/********************************************************************************************************************************
    ### 각종 VALIDATION CHECK 관련 스크립트 START
********************************************************************************************************************************/

    // NULL CHECK 시 사용
    function check_null(obj, obj_nm) {
    	if (obj.value == "") {
    		alert(obj_nm + '이(가) 입력되지 않았습니다.');
    		obj.focus();
      		return false;
      	}
      	return true;
    }

    // LENGTH CHECK 시 사용
    function check_length(obj, obj_nm, maxsize) {
    	if (getByteLength(obj.value) > maxsize) {
    		alert(obj_nm + '에는 영문자/숫자 ' + maxsize + '자(한글의 경우 ' + Math.floor(maxsize/2) + '자)까지만 입력가능합니다.');
    		obj.select();
    		return false;
    	}
    	return true;
    }

    // 주민등록 CHECK 시 사용 (주민등록을 입력박스 하나에 입력받는 경우)
    function check_jumin(obj) {
        if (obj.value != '')
            return check_pid(obj);
        else
            return true;
    }

    // 주민등록 CHECK 시 사용 (주민등록을 입력박스 두개에 입력받는 경우)
    function check_jumin2(obj1, obj2) {
        if (obj1.value != '' || obj2.value != '')
            return check_pid2(obj1, obj2);
        else
            return true;
    }

	// 주민등록번호가 제대로 입력되었는지를 체크한다.
	function check_jumin_str(str) {
		
		if (str == "")
			return true;

		str = removeChar(str, '-');
		
		if (str.length != 13)
			return false;
		
		cBit = 0;
		sCode="234567892345";
		
		for(i=0;i<12;i++) {
			cBit = cBit+parseInt(str.substring(i,i+1))*parseInt(sCode.substring(i,i+1));
		}
		
		cBit=11-(cBit%11);
		cBit=cBit%10;

		if(parseInt(str.substring(12,13))==cBit) {
			return true;
		}
		else {
			return false;
		}
	}

    // 두 날짜간의 유효성 CHECK 시 사용 (시작날짜가 종료날짜보다 작을 경우 에러처리함)
    function check_dates(obj1, obj2) {
    	s_date = removeFmt(obj1.value);
    	e_date = removeFmt(obj2.value);
    	if (s_date != '' && e_date != '') {
    		if (parseFloat(s_date) > parseFloat(e_date)) {
    		    alert(obj2.nameKor + '이(가) ' + obj1.nameKor + '보다 큽니다.');
    		    obj1.select();
    			return false;
    		}
    	}
    	return true;
    }
    
/********************************************************************************************************************************
    ### 각종 VALIDATION CHECK 관련 스크립트 END
********************************************************************************************************************************/





/********************************************************************************************************************************
    ### 각종 UTILITY 관련 스크립트 START
********************************************************************************************************************************/

    // 한글은 2byte로 인식하여 byte 길이를 리턴
    function getByteLength(s) {
       var len = 0;
       if ( s == null ) return 0;
       for (var i=0;i<s.length;i++) {
          var c = escape(s.charAt(i));
          if (c.length == 1) len ++;
          else if (c.indexOf("%u") != -1) len += 2;
          else if (c.indexOf("%") != -1) len += c.length/3;
       }
       return len;
    }

    // 특정문자를 삭제한 값을 리턴
    function removeChar(srcString, strchar) {
    	var convString ='';
    	for (z=0;z<srcString.length;z++) {
    		if (srcString.charAt(z) != strchar)
    			convString = convString + srcString.charAt(z);
    	}
    	return convString;
    }

    // FORMAT 문자 전체삭제
    function removeFmt(str) {
    	result = removeChar(str, '.');
    	result = removeChar(result, '-');
    	result = removeChar(result, ',');
    	result = removeChar(result, '/');

    	return result;
    }

    // 두 날짜간에 날수 리턴
    function getDaysBetweenBothDate(s_date, e_date) {
    	s_date = removeFmt(s_date);
    	e_date = removeFmt(e_date);
    	if (s_date != "" && e_date != "") {
    		if (parseFloat(s_date) <= parseFloat(e_date)) {
    			daysS_date = calculate_total_days(s_date);
    			daysE_date = calculate_total_days(e_date);
    			days = daysE_date - daysS_date;
    			return days;
    		}
    	}
    	return "-1";
    }

    // 1900년을 기준으로 해당날짜의 날수 리턴
    function calculate_total_days(date) {
    	year = date.substring(0 ,4);
    	mm = date.substring(4, 6);
    	dd = date.substring(6, 8);
    	target_year = parseFloat(year) - 1900;
    	target_mm = mm;
    	if (mm.substring(0, 1) == '0')
    		 target_mm = mm.substring(1,2);
    	target_dd = dd;
    	if (dd.substring(0, 1) == '0')
    		 target_dd = dd.substring(1,2);
    	mm_days = 0;
    	switch (target_mm) {
    		case "2" : 	mm_days = 31; 	break;
    		case "3" : 	mm_days = 59;	break;
    		case "4" : 	mm_days = 90; 	break;
    		case "5" : 	mm_days = 120;	break;
    		case "6" : 	mm_days = 151; 	break;
    		case "7" : 	mm_days = 181;	break;
    		case "8" : 	mm_days = 212; 	break;
    		case "9" : 	mm_days = 243;	break;
    		case "10" : mm_days = 273; 	break;
    		case "11" : mm_days = 304;	break;
    		case "12" : mm_days = 334; 	break;
    	}
    	// 윤년이면 1일을 더한다.
    	if ((((year%4==0)&&(year%100!=0)) || (year%400==0)) && (mm_days >= 59)) {
     		mm_days = mm_days + 1;
      	}
    	return (total_days = (parseFloat(target_year) * 365) + mm_days + parseFloat(target_dd));
    }

    // 숫자만 입력허용
    function onlyNumberKey(argObject) {
    	var ls_amt1  = "";
    	var ls_amt2  = "";
    	var sign="";
    	ls_amt1 = argObject.value;
    	if (ls_amt1.substring(0,1) =="-")
    		sign = "-";
    	for(var i=0; i<ls_amt1.length+1; i++) {
    	    if (ls_amt1.substring(i,i+1) >= "0" &&
    	        ls_amt1.substring(i,i+1) <= "9" ||
    	        ls_amt1.substring(i,i+1) == "." ||
    	        ls_amt1.substring(i,i+1) == "-") {

    	        ls_amt2 = ls_amt2 + ls_amt1.substring(i,i+1);
    		}
    	}
        argObject.value = ls_amt2;
        return(true);
    }

    // 숫자만 입력허용(2011.11.30 추가)
    function onlyNumberDown(obj){
		var key = event.keyCode;
		if(key != 8){
			if ((key!=9 && key!=8 && key!=46) &&
				(key<48 || key>57) &&
		        (key<96 || key>105)) {
				event.returnValue = false;
				//alert("숫자만 입력할 수 있습니다.");
				obj.value = "";
			}
		}
	}

	// 숫자값 obj를 받아 앞자리에 size크기가 될때까지 chr로 체워준다.
	function setNumberFmt(obj,size,chr){
		var tmp = obj.value;
		if(isNaN(tmp)) return false;
		if((tmp.length == 0)||(tmp.length > size)) return false;
		for(var i=0; i < size - obj.value.length; i++)
			tmp = chr + tmp;
		obj.value = tmp;
		return true;	
	}

    // 날짜형식으로 포맷한다.
    function dateFmt(dateObj) {
    	date = dateObj.value;
    	if (date.length == 8) {
    		result = date.substring(0,4) + "." + date.substring(4,6) + "." + date.substring(6,8);
    		dateObj.value = result;
    	}
    	else if(date.length == 6) {
    		result = date.substring(0,4) + "." + date.substring(4,6);
    		dateObj.value = result;
    	}
    	return false;
    }
    
    // 날짜형식으로 포맷한다.
    function dateFmt2(dateStr) {
    	date = dateStr;
    	if (date.length == 8) {
    		result = date.substring(0,4) + "." + date.substring(4,6) + "." + date.substring(6,8);
    		return result;
    	}
    	else if(date.length == 6) {
    		result = date.substring(0,4) + "." + date.substring(4,6);
    		return result;
    	}
    	return "";
    }

    // 주민등록형식으로 포맷한다.
    function juminFmt(obj) {
    	jumin = obj.value;
    	if (jumin.length == 13) {
    		result = jumin.substring(0,6) + "-" + jumin.substring(6,13);
    		obj.value = result;
    	}
    }
    
    // 주민등록형식으로 포맷한다.
    function juminFmt2(str) {
    	jumin = str;
    	if (jumin.length == 13) {
    		result = jumin.substring(0,6) + "-" + jumin.substring(6,13);
    		return result;
    	}
    	return "";
    }
    
    // 원하는 날짜를 세팅한다.
    function addDate(date, add_days) {
    	date = removeFmt(date);
    	yy = date.substring(0,4);
    	mm  = String(parseFloat(date.substring(4,6))-1);
    	dd = date.substring(6,8);
    	if(parseInt(mm) < 10) mm = "0" + mm;
    	
    	date = new Date(yy,mm,dd);
    	date.setDate(date.getDate()+parseFloat(add_days));
    	yy = date.getYear();
    	new_mm = date.getMonth()+1;
    	new_dd = date.getDate();
    	if(new_mm < 10) { mm = "0" + String(new_mm); } else { mm = String(new_mm);}
    	if(new_dd < 10) { dd = "0" + String(new_dd); } else { dd = String(new_dd);}
    	result_date = yy + mm + dd;
    	return result_date;
    }
        
    // 특정일자에 개월수를 더한 날짜를 리턴한다.
    function addMonth(date, add_month) {
    	
    	date = removeFmt(date);
    
    	// 개월수를 더한 년월을 구한다.
    	//alert(date);
    	yyyymm  = getYyyymm(date.substring(0,6), add_month);
    	dd		= date.substring(6,8);
    
    	// 구한 년월의 해당월의 마지막 날짜를 구한다.
    	lastday = getLastday(yyyymm.substring(0,4), yyyymm.substring(4,6));
    
    	if (parseInt(dd) > parseInt(lastday))
    		dd = lastday;
    	
    	return (yyyymm + dd);
    }
    
    // 특정년월에 개월수를 더한 년월을 구한다.
	function getYyyymm(yyyymm, add_month) {
		
		yyyy 	= yyyymm.substring(0, 4);
		mm 		= yyyymm.substring(4, 6);

		total_month = (parseFloat(yyyy)-1)*12 + parseFloat(mm);
		total_month = total_month + parseInt(add_month);

		yyyy2 = parseInt(total_month / 12) + 1;
		mm2 = parseInt(total_month % 12);
	
		if (mm2 == 0) {
			yyyy2 	= yyyy2 - 1;
			mm2		= 12;
		}
		s_yyyy2 = ""+yyyy2 + '';
		s_mm2 = ""+mm2 + '';
	
		if (s_mm2.length == 1)
			s_mm2 = "0" + s_mm2;
		return (s_yyyy2 +""+ s_mm2);
	}
    
    // 특정년월의 마지막 날짜를 구한다.
    function getLastday(yyyy, mm) {
    
    	if (mm.length == 2) {
    		if (mm.substring(0,1) == '0')
    			mm = mm.substring(1,2);
    	}
    
    	switch (parseInt(mm)) {
      		case 2:
       			intDay = (!(yyyy % 4) && (yyyy % 100) || !(yyyy % 400)) ? 29 : 28;
       			break;
      		case 4: case 6: case 9: case 11:
       			intDay = 30;
       			break;
      		default :
       			intDay = 31;
     	}
     	
     	return intDay;
    }    

/********************************************************************************************************************************
    ### 각종 UTILITY 관련 스크립트 END
********************************************************************************************************************************/






/********************************************************************************************************************************
    ### 태그라이브러리 관련 스크립트 START
********************************************************************************************************************************/

    // 숫자(금액) FORMAT 처리
    function makeAmt(ObjectField) {
    	// 백스페이스키 무시
       	if (event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 13 || (event.keyCode >= 37 && event.keyCode <= 40))
          return false;
    	onlyNumberKey(ObjectField);
    	makeComma(ObjectField);
    	return false;
    }

    function makeComma(argObject) {
    	var ls_amt1 = argObject.value;
    	var ls_amt2 = ls_amt1;
    	if (ls_amt1.substring(0,1)=="-")
    		ls_amt2 = ls_amt1.substring(1);
    	var point = ls_amt2.indexOf('.');
    	if (point == -1) point = ls_amt2.length;
    	var ret = "";
    	var cnt = 1;
    	for (var i = ls_amt2.length - 1; i >= 0; i--) {
    		if (point <= i) {
    			ret = ls_amt2.charAt(i) + ret;
    		} else {
    			if (cnt == 4) {
    				ret = ',' + ret;
    				cnt = 1;
    			}
    			cnt++;
    			ret = ls_amt2.charAt(i) + ret;
    		}
        }
        if (ls_amt1.substring(0,1)=="-")
            ret = "-" + ret;
        argObject.value = ret;
    }


    // 날짜(년월일) FORMAT 처리
    function makeDate(obj) {

    	// 백스페이스키 무시
       	if (event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 13 || (event.keyCode >= 37 && event.keyCode <= 40))
          return false;
    	var str = removeChar(obj.value,'.');
    	str = removeChar(str,'-');
    	if (str.length == 4) {
    		obj.value = str + ".";
    	}
    	else if (str.length == 6) {
    		obj.value = str.substring(0, 4) + "." + str.substring(4,6) + ".";
    	}
    	else if (str.length >= 8) {
    		obj.value = str.substring(0, 4) + "." + str.substring(4,6) + "." + str.substring(6, 8);
    	}
    }

    // 날짜(년월) FORMAT 처리
    function makeYymmDate(obj) {
    	// 백스페이스키 무시
        if (event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 13 || (event.keyCode >= 37 && event.keyCode <= 40))
          return false;
    	var str = removeChar(obj.value,'.');
    	if (str.length == 4) {
    		obj.value = str.substring(0, 4) + ".";
    	}
    	else if (str.length >= 6) {
    		obj.value = str.substring(0, 4) + "." + str.substring(4,6);
    	}
    }

    // 주민번호 FORMAT 처리
    function makeJumin_no(obj){
    	// 백스페이스키 무시
       	if (event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 13 || (event.keyCode >= 37 && event.keyCode <= 40))
          return false;
        var str = removeChar(obj.value,'-');
    	if (str.length == 6) {
    		obj.value = obj.value + "-";
    	}
    }

    // Custom Tag를 통한 각 컬럼의 값을 Check한다.
    function checkfield(ObjectField, FormValid){
    	if (ObjectField.mand == 'Y') {
    		if (!check_area_code(ObjectField,ObjectField.nameKor))
    			return false;
    	}
    	if ((ObjectField.checkData == 'date') && (ObjectField.value != '')) {
       		if (!check_date(ObjectField))
    			return false;
    	}
    	if ((ObjectField.checkData == 'yymm') && (ObjectField.value != '')) {
       		if (!check_date(ObjectField))
    			return false;
    	}
    	if ((ObjectField.checkData == 'currency') && (ObjectField.value != '')) {
       		if (!check_currency(ObjectField))
    			return false;
    	}
    	if ((ObjectField.checkData == 'pid') && (ObjectField.value != '')) {
    	   	if (!check_pid(ObjectField))
    			return false;
    	}
    	if (FormValid == true)
    		return true;
    	else
    		return false;
    }

    function check_area_code(argObject,argMsg) {
    	if (argObject.type == "radio" || argObject.type == "checkbox") {
    		var rc = argObject.form;
    		var rcObject = eval(argObject.form.name+"."+argObject.name);
    		if (argObject.name == rcObject.name) {
    			if (argObject.checked) return true;
    			else {
    				alert(argMsg + "이(가) 입력되지 않았습니다.")
    				argObject.focus(); argObject.select(); return(false);
    			}
    		}
    		for (var index=0; index<rcObject.length; index++) {
    			if (rcObject[index].checked) return true;
    		}
    		alert(argMsg + "이(가) 입력되지 않았습니다.")
            argObject.select();
            return(false);
    	}
		if (argObject.type == "select-one"){
			if (argObject.value == "") {
    			alert(argMsg + "이(가) 입력되지 않았습니다.")
				argObject.focus();
	      		return(false);
			}		
		}
    	if (argObject.value == "") {
    		alert(argMsg + "이(가) 입력되지 않았습니다.")
      		argObject.select();
      		return(false);
    	}
    	return(true);
    }

    function check_date(argObject) {
    	str = argObject.value;
    	str = removeFmt(str);
    	if (str == null || str =="" ) {
    		return true;
    	}
    	if (str.length != 6 && str.length != 8) {
    		alert(argObject.nameKor + "은 올바른 날짜가 아닙니다.");
    		argObject.select();
    		return false;
    	}
    	strYear  = str.substr(0,4);
    	strMonth = str.substr(4,2);
    	if (str.length == 6)
    		strDay   = 0;
    	else
    		strDay   = str.substr(6,2);
    	if (parseInt(strMonth) > 12) {
    		alert(argObject.nameKor + "은 올바른 날짜가 아닙니다.");
    		argObject.select();
    		return false;
    	}
    	if (str.length == 6) return true;
    	argYear = parseInt(strYear);
     	switch (parseInt(strMonth)) {
      		case 2:
       			intDay = (!(argYear % 4) && (argYear % 100) || !(argYear % 400)) ? 29 : 28;
       			break;
      		case 4: case 6: case 9: case 11:
       			intDay = 30;
       			break;
      		default :
       			intDay = 31;
     	}
    	strDay = removeChar(strDay, '0');
      	if(strDay > intDay) {
      		alert(argObject.nameKor + "은 올바른 날짜헝식이 아닙니다.");
      		argObject.select();
      		return false;
      	}
      	else
        	return true;
    }

    function check_currency(argObject) {    
    	str = argObject.value;		
    	str = removeChar(str, ',');    
    	if (str.length > 1) {
    		if (str.substring(0,1) == '0') {
    			alert(argObject.nameKor + "은 올바른 금액형식이 아닙니다.");
    			argObject.select();
    			return false;
    		}
    	}
    	if(isNaN(str)) {
    		alert(argObject.nameKor + "은 올바른 금액형식이 아닙니다.");
    		argObject.select();
    		return false;
    	}
    	return true;
    }

    function check_pid(argObject) {

        var str = removeFmt(argObject.value);                
        a1 = parseInt(str.charAt(0))*2;
        a2 = parseInt(str.charAt(1))*3;
        a3 = parseInt(str.charAt(2))*4;
        a4 = parseInt(str.charAt(3))*5;
        a5 = parseInt(str.charAt(4))*6;
        a6 = parseInt(str.charAt(5))*7;
        a7 = parseInt(str.charAt(6))*8;
        a8 = parseInt(str.charAt(7))*9;
        a9 = parseInt(str.charAt(8))*2;
        a10 = parseInt(str.charAt(9))*3;
        a11 = parseInt(str.charAt(10))*4;
        a12 = parseInt(str.charAt(11))*5;
        
        tot = a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12;        
        na = tot%11;
        ch = 11-na;
        if(ch == 10) ch = 0;
        if(ch == 11) ch = 1;
        
        if(ch != parseInt(str.charAt(12))) {
            juminNoCh_Error(argObject);
            return false;
        }

        return true;
    }

    function check_pid2(argObject1, argObject2) {

        var str = argObject1.value + argObject2.value;                
        a1 = parseInt(str.charAt(0))*2;
        a2 = parseInt(str.charAt(1))*3;
        a3 = parseInt(str.charAt(2))*4;
        a4 = parseInt(str.charAt(3))*5;
        a5 = parseInt(str.charAt(4))*6;
        a6 = parseInt(str.charAt(5))*7;
        a7 = parseInt(str.charAt(6))*8;
        a8 = parseInt(str.charAt(7))*9;
        a9 = parseInt(str.charAt(8))*2;
        a10 = parseInt(str.charAt(9))*3;
        a11 = parseInt(str.charAt(10))*4;
        a12 = parseInt(str.charAt(11))*5;
        
        tot = a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12;        
        na = tot%11;
        ch = 11-na;
        if(ch == 10) ch = 0;
        if(ch == 11) ch = 1;
        
        if(ch != parseInt(str.charAt(12))) {
            juminNoCh_Error(argObject1);
            return false;
        }

        return true;
    }

    function juminNoCh_Error(argObject) {
    	alert('올바른 주민등록번호형식이 아닙니다.');
    	argObject.select();
    }

/********************************************************************************************************************************
    ### 태그라이브러리 관련 스크립트 END
********************************************************************************************************************************/





/********************************************************************************************************************************
    ### 시스템 관련 스크립트 START
********************************************************************************************************************************/

//공통 코드 조회 Popup에서 code_cd, code_nm만을 세팅하고자 할때사용한다.
function createCodeForm(formObj, sheetObj, col_cd, col_nm){
	formObj.innerHTML = '';
	var assignStr = "";
	var selRow = sheetObj.SelectRow;
	assignStr += "<input type=hidden name=\""+col_cd+"\" value=\""+sheetObj.CellValue(selRow,'cd')+"\">";
	assignStr += "<input type=hidden name=\""+col_nm+"\" value=\""+sheetObj.CellValue(selRow,'cd_nm')+"\">";
	formObj.innerHTML = assignStr;
}

//공통 코드 조회 Popup에서 code_cd, code_nm 외에 한가지 인수를 더 추가세팅하고자 할때사용한다. (createCodeForm 업그레이드 버전)
function createCodeForm2(formObj, sheetObj, col_cd, col_nm, col_em){
	formObj.innerHTML = '';
	var assignStr = "";
	var selRow = sheetObj.SelectRow;
	assignStr += "<input type=hidden name=\""+col_cd+"\" value=\""+sheetObj.CellValue(selRow,'cd')+"\">";
	assignStr += "<input type=hidden name=\""+col_nm+"\" value=\""+sheetObj.CellValue(selRow,'cd_nm')+"\">";
	assignStr += "<input type=hidden name=\""+col_em+"\" value=\""+sheetObj.CellValue(selRow,'cd_em')+"\">";
	formObj.innerHTML = assignStr;
}

// 공통팝업창에서 사용자가 선택한 값을 Opener 페이지에 Apply 한다.
function setCodeValue(flag, target_object, retrieveForm){
	// Setting하는 Object가 Form인 경우
	if (flag.indexOf('form') != -1) {
		for( i=0; i < retrieveForm.elements.length; i++) {
			if (target_object.all.item(retrieveForm.elements[i].name)) {
				if (target_object.all.item(retrieveForm.elements[i].name)) {
					if (target_object.all.item(retrieveForm.elements[i].name).name) {
						target_object.all.item(retrieveForm.elements[i].name).value  = retrieveForm.elements[i].value;
					}
					else {
						if (target_object.all.item(retrieveForm.elements[i].name)[0].type.toLowerCase() == 'radio') {
							for (j=0; j<target_object.all.item(retrieveForm.elements[i].name).length; j++) {
								if (target_object.all.item(retrieveForm.elements[i].name)[j].value == retrieveForm.elements[i].value) {
									target_object.all.item(retrieveForm.elements[i].name)[j].checked = true;
								}
								else {
									target_object.all.item(retrieveForm.elements[i].name)[j].checked = false;
								}
							}
						}

					}
				}
			}
		}
	}
	// Setting하는 Object가 IBSheet인 경우
	else {
		var selRow = target_object.SelectRow;
		for (i=0; i < retrieveForm.elements.length; i++) {
			if (target_object.SaveNameCol(retrieveForm.elements[i].name) != -1)
			    target_object.CellValue2(selRow, retrieveForm.elements[i].name) = retrieveForm.elements[i].value;
		}
	}
}

/********************************************************************************************************************************
    ### 시스템 관련 스크립트 END
********************************************************************************************************************************/





/********************************************************************************************************************************
    ### 달력 관련 스크립트 START
********************************************************************************************************************************/

// 달력을 Open하여 일자를 Setting한다.
var CalView = "";
var CalWeek = "";
var CalWork = "";		// 평일 1.0 토,일,공휴일: 0.0
var ObjDest;
var sheetObject;
var sheetRow;
var sheetCol;

// 마스터에서 사용하는 달력 팝업창(휴일은 적색 나타남)
function OpenOdmCal(ObjectSrc) {
	ObjDest = ObjectSrc;
	scr_width  = ( screen.availWidth - 760 ) / 2 ;
	scr_height = ( screen.availHeight - 360 ) / 2 ;
	CalView = window.open("/common/web/calendar.jsp", "",
	           "toolbar=no,status=no,directories=no,scrollbars=no,location=no,resizable=yes,border=0,menubar=no,copyhistory=0,width=650,height=300,left="+scr_width+",top="+scr_height + "");
	CalView.focus();
}

// IBSheet에서 사용하는 달력 팝업창(휴일은 적색 나타남)
function OpenSheetOdmCal(objectSrc, row, col) {
	sheetObject = objectSrc;
	sheetRow = row;
	sheetCol = col;
	scr_width  = ( screen.availWidth - 760 ) / 2 ;
	scr_height = ( screen.availHeight - 360 ) / 2 ;
	CalView = window.open("/common/web/calendar.jsp", "",
	           "toolbar=no,status=no,directories=no,scrollbars=no,location=no,resizable=yes,border=0,menubar=no,copyhistory=0,width=790,height=300,left="+scr_width+",top="+scr_height + "");
	CalView.focus();
}

function appOdmDate() {
	if (ObjDest != null) {
		ObjDest.value = CalView;
        ObjDest.focus();
		ObjDest = null;
	}
	else {
		sheetObject.CellValue(sheetRow, sheetCol) = CalView;
        sheetObject.SelectCell(sheetRow, sheetCol);
	}  
}

/********************************************************************************************************************************
    ### 달력 관련 스크립트 END
********************************************************************************************************************************/

/********************************************************************************************************************************
    ### URLEncoding/URLDecoding 관련 script start - 2005.12.19
********************************************************************************************************************************/
/*  Function Equivalent to java.net.URLEncoder.encode(String, "UTF-8")

    Copyright (C) 2002, Cresc Corp.

    Version: 1.0

*/

function URLEncoding(str){

    var s0, i, s, u;

    s0 = "";                // encoded str

    for (i = 0; i < str.length; i++){   // scan the source

        s = str.charAt(i);

        u = str.charCodeAt(i);          // get unicode of the char

        if (s == " "){s0 += "+";}       // SP should be converted to "+"

        else {

            if ( u == 0x2a || u == 0x2d || u == 0x2e || u == 0x5f || ((u >= 0x30) && (u <= 0x39)) || ((u >= 0x41) && (u <= 0x5a)) || ((u >= 0x61) && (u <= 0x7a))){       // check for escape

                s0 = s0 + s;            // don't escape

            }

            else {                  // escape

                if ((u >= 0x0) && (u <= 0x7f)){     // single byte format

                    s = "0"+u.toString(16);

                    s0 += "%"+ s.substr(s.length-2);

                }

                else if (u > 0x1fffff){     // quaternary byte format (extended)

                    s0 += "%" + (oxf0 + ((u & 0x1c0000) >> 18)).toString(16);

                    s0 += "%" + (0x80 + ((u & 0x3f000) >> 12)).toString(16);

                    s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);

                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);

                }

                else if (u > 0x7ff){        // triple byte format

                    s0 += "%" + (0xe0 + ((u & 0xf000) >> 12)).toString(16);

                    s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);

                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);

                }

                else {                      // double byte format

                    s0 += "%" + (0xc0 + ((u & 0x7c0) >> 6)).toString(16);

                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);

                }

            }

        }

    }

    return s0;

}



/*  Function Equivalent to java.net.URLDecoder.decode(String, "UTF-8")

    Copyright (C) 2002, Cresc Corp.

    Version: 1.0

*/

function URLDecoding(str){

    var s0, i, j, s, ss, u, n, f;

    s0 = "";                // decoded str

    for (i = 0; i < str.length; i++){   // scan the source str

        s = str.charAt(i);

        if (s == "+"){s0 += " ";}       // "+" should be changed to SP

        else {

            if (s != "%"){s0 += s;}     // add an unescaped char

            else{               // escape sequence decoding

                u = 0;          // unicode of the character

                f = 1;          // escape flag, zero means end of this sequence

                while (true) {

                    ss = "";        // local str to parse as int

                        for (j = 0; j < 2; j++ ) {  // get two maximum hex characters for parse

                            sss = str.charAt(++i);

                            if (((sss >= "0") && (sss <= "9")) || ((sss >= "a") && (sss <= "f"))  || ((sss >= "A") && (sss <= "F"))) {

                                ss += sss;      // if hex, add the hex character

                            } else {--i; break;}    // not a hex char., exit the loop

                        }

                    n = parseInt(ss, 16);           // parse the hex str as byte

                    if (n <= 0x7f){u = n; f = 1;}   // single byte format

                    if ((n >= 0xc0) && (n <= 0xdf)){u = n & 0x1f; f = 2;}   // double byte format

                    if ((n >= 0xe0) && (n <= 0xef)){u = n & 0x0f; f = 3;}   // triple byte format

                    if ((n >= 0xf0) && (n <= 0xf7)){u = n & 0x07; f = 4;}   // quaternary byte format (extended)

                    if ((n >= 0x80) && (n <= 0xbf)){u = (u << 6) + (n & 0x3f); --f;}         // not a first, shift and add 6 lower bits

                    if (f <= 1){break;}         // end of the utf byte sequence

                    if (str.charAt(i + 1) == "%"){ i++ ;}                   // test for the next shift byte

                    else {break;}                   // abnormal, format error

                }

            s0 += String.fromCharCode(u);           // add the escaped character

            }

        }

    }

    return s0;

}


function EncodedFormQueryString(form) {
  if (typeof form != "object" || form.tagName != "FORM") {
    alert("FormQueryStringEnc함수의 form 인자는 FORM 태그가 아닙니다.");
    return "";
  }

	var name = new Array(form.elements.length);
	var value = new Array(form.elements.length);
	var j = 0;
	var plain_text="";

	//사용가능한 컨트롤을 배열로 생성한다.
	len = form.elements.length;
	for (i = 0; i < len; i++) {
	  switch (form.elements[i].type) {
	    case "button":
	    case "reset":
	    case "submit":
	      break;
	    case "radio":
	    case "checkbox":
  				if (form.elements[i].checked == true) {
  					name[j] = form.elements[i].name;
  					value[j] = form.elements[i].value;
  					j++;
  				}
  				break;
  		case "select-one":
  				name[j] = form.elements[i].name;
					var ind = form.elements[i].selectedIndex;
					if(ind >= 0) {
						if (form.elements[i].options[ind].value != '')
							value[j] = form.elements[i].options[ind].value;
						else
							value[j] = form.elements[i].options[ind].text;
					} else {
						value[j] = "";
					}
					j++;
					break;
			case "select-multiple":
  				name[j] = form.elements[i].name;
					var llen = form.elements[i].length;
					var increased = 0;
					for( k = 0; k < llen; k++) {
						if (form.elements[i].options[k].selected) {
							name[j] = form.elements[i].name;
							if (form.elements[i].options[k].value != '')
								value[j] = form.elements[i].options[k].value;
							else
								value[j] = form.elements[i].options[k].text;
							j++;
							increased++;
						}
					}
					if(increased > 0) {
						j--;
					} else {
						value[j] = "";
					}
					j++;
					break;
				default :
  				name[j] = form.elements[i].name;
					value[j] = form.elements[i].value;
  				j++;
		}
	}

  //QueryString을 조합한다.
	for (i = 0; i < j; i++) {
		if (name[i] != '') plain_text += name[i]+ "=" + URLEncoding(value[i]) + "&";
	}

  //마지막에 &를 없애기 위함
  if (plain_text != "")
    plain_text = plain_text.substr(0, plain_text.length -1);
	return plain_text;
}
/********************************************************************************************************************************
    ### URLEncoding/URLDecoding 관련 script end
********************************************************************************************************************************/

    // 숫자(','제외) FORMAT처리
    function makeNumber(obj) {
        if (event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 13 || (event.keyCode >= 37 && event.keyCode <= 40))
            return false;
        onlyNumberKey(obj);
    }

/********************************************************************************************************************************
    ### 마우스 우측 클릭 방지
********************************************************************************************************************************/
function clickIE() {
    if (document.all) {
        return false;
    }
}
function clickNS(e) {
    if (document.layers||(document.getElementById&&!document.all)) {
        if (e.which==2||e.which==3) {
            return false;
        }
    }
}


if (document.layers) {
    document.captureEvents(Event.MOUSEDOWN);
    document.onmousedown=clickNS;
}else{
    document.onmouseup=clickNS;
    document.oncontextmenu=clickIE;
}
document.oncontextmenu=new Function("return false")


/***************************************************
RD 출력물 로딩시 툴바 숨김
*****************************************************/
function HideToolBar(obj) {

	var Rdviewer             = document.Rdviewer;		
	if(obj =="true"){
		Rdviewer.HideToolBar();
		Rdviewer.HideStatusbar();
		
	}else {
		
		Rdviewer.ShowToolBar();
		Rdviewer.ShowStatusbar();
	}
	
}




/********************************************************************************************************************************
    ### 첨부파일 크기 체크
********************************************************************************************************************************/
  // 첨부파일 상한 설정
  function checkFileSize(filepath, maxSize){
    var message;

    if (getFileSize (filepath) > maxSize * 1024)
    {
      message =           "파일 [" + filepath + "(" + getFileSize(filepath)/1024 +  " KByte)]은"
      message = message + "\n첨부가능한 최대크기 " + maxSize + "KByte 를 초과합니다.\n";
      message = message + "\n파일 크기를 조정하신후 다시시도하세요";
      alert(message);
      return false;
    }else{
      return true
    }
  }

	// 파일크기 체크
	function getFileSize (filepath) {
		var img = new Image();
		img.dynsrc = filepath;
		var size = eval(img.fileSize);
		return size;
	}
  
/********************************************************************************************************************************
    ### Date타입컬럼에 시간을 넣을때 형식을 맞춘다.
********************************************************************************************************************************/  

	//시간 포멧을 셋팅한다.
	//strTime은 yyyymmddhh24mi의 형태가 되어야한다.
	function timeFmt(strTime){
		var yyyymmddhhmiss = removeFmt(strTime);
		if(yyyymmddhhmiss.length != 12){
			alert("시간형식이 정확하지 않습니다.");
			return;
		}
		var yyyy = yyyymmddhhmiss.substring(0, 4);
		var mm   = yyyymmddhhmiss.substring(4, 6);
		var dd   = yyyymmddhhmiss.substring(6, 8);
		var hh   = yyyymmddhhmiss.substring(8, 10);
		var mi   = yyyymmddhhmiss.substring(10, 12);
		return yyyy + "-" + mm + "-" + dd + " " + hh + ":" + mi + ":00.0";
	}

/********************************************************************************************************************************
    ### 채용 추가 (2007.09.07 hcc이후)
********************************************************************************************************************************/

	 /***************************************************
    //입력시 자동으로 순서 입력되기
    // insert_row : 입력되는 row , order_col : 자동으로 입력될 컬럼
    ***************************************************/
    function auto_insertedRow(insert_row, order_col ){        
        var max_row;
        max_row = mySheet.CellValue( mySheet.HeaderRows , order_col)*1;
        
        //입력하는 행이 첫행이 아닐 경우 order_col의 최고값을 구한다.
        if(insert_row != mySheet.HeaderRows) {
            for( i = mySheet.HeaderRows+1 ; i <= mySheet.RowCount ; i++){                
                var value = mySheet.CellValue(i, order_col);             
                if( max_row < eval(value) ){                    
                    max_row = value;               
                }               
            }
        }else if (mySheet.RowCount ==1  ){  //입력하는 행이 첫행일 경우
            max_row = "0";
        }
        
        max_row = eval(max_row)+1;       
        return max_row;
    }


	/************************************************************
	// 동적인 콤보 생성
	************************************************************/
	function makeCellCombo(cd_kind, etc_cd, row, col, firstCd,company_cd){
		var ServiceID	= "rem_com_code";
		var Col			= mySheet.SaveNameCol(col);

		var param = "";
		param = "serviceID="+ServiceID+"&Col="+Col+"&Row="+row+"&company_cd="+company_cd+"&cd_kind="+cd_kind+"&etc_cd1="+etc_cd;		
		mySheet.DoRowSearch("/rem/web/rem_make_cellcombo.jsp", param);
	}

	/************************************************************
	// 조회 후 클릭시 콤보 재생성
	************************************************************/
	function init_makeCellCombo(cd_kind, etc_cd, row, col, firstCd, init_value,company_cd){
		var ServiceID	= "rem_com_code";
		var Col			= mySheet.SaveNameCol(col);

		var param = "";
		param = "serviceID="+ServiceID+"&Col="+Col+"&Row="+row+"&company_cd="+company_cd+"&cd_kind="+cd_kind+"&etc_cd1="+etc_cd+"&init_value="+init_value;		
		mySheet.DoRowSearch("/rem/web/rem_make_cellcombo.jsp", param);
	}
	
	
/********************************************************************************************************************************
    ###  채용 추가 END
********************************************************************************************************************************/
