
/*
 *------------------------------------------------------------------------------
 * NAME : main.js
 * DESC : main 자바스크립트 공통함수
 * VER  : v1.0
 * PROJ : 청운CIS 
 * Copyright 2009 청운CIS All rights reserved
 *------------------------------------------------------------------------------
 *                  변         경         사         항
 *------------------------------------------------------------------------------
 *    DATE      AUTHOR    DESCRIPTION
 * ----------  --------   ------------------------------------------------------
 * 2009/12/23   김 상 우         최초 프로그램 작성
 *-----------------------------------------------------------------------------*/

// Ajax통신을 위한 XmlHttpRequest객체 전역변수
var xmlHttp;
var xmlHttpSub;
var xmlHttpThr;
// getLastday 사용
var dayOfMonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
// setOrgValue 사용
var orgValue = "";
// 로딩이미지 처리를 위한 전역변수
var lPopup = window.createPopup();
var lPopBody = lPopup.document.body;

//해상도 구함
//var gintHeight = screen.availHeight;

/*==============================================================================
*  Common
==============================================================================*/
function cfCreateXMLHttpRequest() {
	if(window.ActiveXObject){
		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	} else if (window.XMLHttpRequest){
		// If IE7(VISTA), Mozilla, Safari, etc: Use native object
		xmlHttp = new XMLHttpRequest();
	} 
	
	return xmlHttp;
}

function cfCreateXMLHttpRequestSub() {
	if(window.ActiveXObject){
		xmlHttpSub = new ActiveXObject("Microsoft.XMLHTTP");
	} else if (window.XMLHttpRequest){
		// If IE7(VISTA), Mozilla, Safari, etc: Use native object
		xmlHttpSub = new XMLHttpRequest();
	} 
	
	return xmlHttpSub;
}

function cfCreateXMLHttpRequestThr() {
	if(window.ActiveXObject){
		xmlHttpThr = new ActiveXObject("Microsoft.XMLHTTP");
	} else if (window.XMLHttpRequest){
		// If IE7(VISTA), Mozilla, Safari, etc: Use native object
		xmlHttpThr = new XMLHttpRequest();
	} 
	
	return xmlHttpThr;
}

/*==============================================================================
*  Util, Validation JavaScript
==============================================================================*/
/**
* @Function 명		: cfCheckDigit
* @Function 설명	: 입력값이 숫자인지 않인지만 Check
* @Param 			: 1. str : (Object)Form명을 포함한 input
* @return값			: boolean
* @사용 Event 		:
* @see 				:
*/
function cfCheckDigit(str)  {
	var str = str.toString();
	var ch = '\0';
	var flag = true;
	for (var i = 0, ch = str.charAt(i); (i < str.length) && (flag); ch = str.charAt(++i)) {
		if ((ch >= '0') && (ch <= '9')) flag = true;
		else flag = false;
	}
	return flag;
}

/**
* @Function 명		: checkDigit2
* @Function 설명	: 입력값이 숫자인지 않인지만 Check Case2
* @Param 			: 1. str : (Object)Form명을 포함한 input
* @return값			: none
* @사용 Event 		:
* @see 				:
*/
function cfCheckDigit2(str)  {
    var txtNumber = '' + str;
    if (isNaN(txtNumber)) { // (txtNumber  == "") 제외
         alert("숫자만 입력 하세요.");
    }
}

//키보드로 입력한 값이 정수형인지 검사
function isIntegerKey()
{
  reg = /[0-9]/g;
  return reg.test( String.fromCharCode(event.keyCode));
}

//키보드로 입력한 값이 실수형(숫자나 . )인지 검사
function isFloatKey(){
  reg = /[0-9\.]/g;

  return reg.test( String.fromCharCode(event.keyCode))
}

//입력값이 영문알파벹인지 검사
function isAlphaKey(){
  reg = /[a-zA-Z]/;
  return reg.test( String.fromCharCode(event.keyCode) );
}

/**
* @Function 명		: getCalendar
* @Function 설명	: 달력 호출
* @Param 			: 1. lsFrm : (String)Form명.Text Name명
* @return값			: boolean
* @사용 Event 		: onClick
* @see 				:
*/
function getCalendar(lsFrm)
{
	alert("hey hey");
	var str, IsDate;
	var newWindow;

	if (lsFrm.indexOf("(") > 0)
		IsDate = eval(lsFrm);
	else
		IsDate = eval(lsFrm+".value");

	if (IsDate.length < 10) IsDate = "";
	str = '/jsp/common/calendar.jsp?sleDate=' + IsDate + '&sleObj='+lsFrm;
	newWindow = window.open('','newWindow','width=162, height=180, toolbar=no, status=no, scrollbars=no, left='+eval(window.screenLeft+(document.forms[0].offsetWidth/2)-(162/2))+', top='+eval(window.screenTop+(document.forms[0].offsetHeight/2)-(180/2)));
	newWindow.location= str;
	newWindow.focus();
}

/**
* @Function 명		: iconPopup
* @Function 설명	: icon 클릭시 code의 Popup 호출
* @Param 			: 1. title : (String)화면 Title
* @Param 			: 2. tbName : (String)호출하는 Table명
* @Param 			: 3. code : (String)검색할 코드 값
* @Param 			: 4. isfrmName : (Object)검색한 코드명을 Display할 Input Text
* @Param 			: 5. isFrmCode : (Object)코드 Input Text
* @return값			:
* @사용 Event 		: onBlur
* @see 				:
*/
function iconPopup(title,tbName,code,isfrmName,isFrmCode) {
	var url = "../code/DMU_CD018.jsp?table_name="+tbName+"&param="+code+"&init_value="+isFrmCode.value;
	var result = window.showModalDialog(url,title,'status:no;;help:no;dialogWidth:405px; dialogHeight:550px;center:yes;scroll:no');

	if (result != null ) {
		isFrmCode.value = result[0];
		isfrmName.value = result[1];
	}
	else
	{
		isFrmCode.value ="";
		isfrmName.value = "";
	}
}

/**
 * @type   : function
 * @access : public
 * @desc   : 값이 null 이거나 white space 문자로만 이루어진 경우 true를 리턴한다.
 * <pre>
 *     cfIsNull("  ");
 * </pre>
 * 위와같이 사용했을 경우 true를 리턴한다.
 * @sig    : value
 * @param  : value required 입력값
 * @return : boolean. null(혹은 white space) 여부
 */
function cfIsNull(value) {
	if ( value == null  ) {
		return true;
	}

	return false;
}


/**
 * @type   : function
 * @access : public
 * @desc   : 스트링의 자릿수를 Byte 단위로 환산하여 알려준다. 영문, 숫자는 1Byte이고 한글은 2Byte이다.(자/모 중에 하나만 있는 글자도 2Byte이다.)
 * @sig    : value
 * @param  : value required 스트링
 * @return : 스트링의 길이
 */
function cfGetByteLength(value){
	var byteLength = 0;

	if (cfIsNull(value)) {
		return 0;
	}

	var c;

	for(var i = 0; i < value.length; i++) {
		c = escape(value.charAt(i));

		if (c.length == 1) {
			byteLength ++;
		} else if (c.indexOf("%u") != -1)  {
			byteLength += 3; // UTF-8환경에선 3Byte , euc-kr에선 2Byte
		} else if (c.indexOf("%") != -1)  {
			byteLength += c.length/3;
		}
	}

	return byteLength;
}



/**
 * @type   : function
 * @access : public
 * @desc   : 사용자의 입력값이 Byte로 환산된 최대길이를 넘을 경우 입력이 안되도록 하는 함수. <br>
 *           안타깝게도 Windows XP 환경에서는 한글에 대한 키이벤트가 발생하지 않아서 동작하지 않는다.<br>
 *           오브젝트 선언시 onkeydown 이벤트에 다음과 같이 기술해 주어야만 한다. 
 * <pre>
 *     onkeydown="cfValidateByteLength(this, max_byte_length)"
 *     (여기서 max_byte_length 자리에는 Byte로 환산시 최대길이를 숫자로 적어준다.)
 *
 *     예)
 *     &lt;input type="text" size="10" onkeydown="cfValidateByteLength(this, 10)"&gt;
 * </pre>
 *           현재는 html의 text input, textarea 에만 적용된다.
 * @sig    : oElement, length
 * @param  : oElement required 입력필드 객체
 * @param  : length   required max byte length
 */
function cfValidateByteLength(oElement, length) {
	var value = "";

	if (event.keyCode == 8 ||   // backspace
	    event.keyCode == 35 ||  // end key
	    event.keyCode == 36 ||  // home key
	    event.keyCode == 37 ||  // left key
	    event.keyCode == 38 ||  // up key
	    event.keyCode == 39 ||  // right key
	    event.keyCode == 40 ||  // down key
	    event.keyCode == 46     // delete key
	   ) {
	   	return true;
	}

	switch (cfGetElementType(oElement)) {
		case "TEXT" :
		case "TEXTAREA" :
			value = oElement.value;
			break;

		default :
			return;
	}

	if (cfGetByteLength(value) > length ) {
  		oElement.blur();
		oElement.focus();
     	oElement.value = oElement.value.substr(0, oElement.value.length - 1);
		event.returnValue = false;
		return;
	}

	if (oElement.onkeyup == null) {
		oElement.onkeyup =
			function() {
				if (cfGetByteLength(oElement.value) > length) {
			    	oElement.blur();
			        oElement.focus();
			        oElement.value = oElement.value.substr(0, oElement.value.length - 1);
				}
			}
	}

	if (cfGetByteLength(value) == length ) {
       //
       // ??= : 0x3131 <= c
       // ??= : c <= 0x318E
		var c = value.charCodeAt(value.length - 1);

		if ( (0xAC00 <= c && c <= 0xD7A3) || (0x3131 <= c && c <= 0x318E) ) {
			event.returnValue = true;
    	} else {
			event.returnValue = false;
		}
	} else {
		event.returnValue = true;
	}
}

/**
 * @type   : function
 * @access : public
 * @desc   : Element의 type을 알려준다. 리턴되는 element type string은 다음과 같다.
 * <pre>
 *     BUTTON   : html button input tag
 *     CHECKBOX : html checkbox input tag
 *     FILE     : html file input tag
 *     HIDDEN   : html hidden input tag
 *     IMAGE    : html image input tag
 *     PASSWORD : html password input tag
 *     RADIO    : html radio input tag
 *     RESET    : html reset input tag
 *     SUBMIT   : html submit input tag
 *     TEXT     : html text input tag
 *     SELECT   : html select tag
 *     TEXTAREA : html textarea tag
 *     GS       : ?? Scale
 *     null     : 기타
 * </pre>
 * @sig    : oElement
 * @param  : oElement required element
 * @return : element의 type을 표현하는 string
 */
function cfGetElementType(oElement) {
	if (oElement == null) {
		return null;
	}

	switch (oElement.tagName) {
		case "INPUT":
			switch (oElement.type) {
				case "button" :
					return "BUTTON";
				case "checkbox" :
					return "CHECKBOX";
				case "file" :
					return "FILE";
				case "hidden" :
					return "HIDDEN";
				case "image" :
					return "IMAGE";
				case "password" :
					return "PASSWORD";
				case "radio" :
					return "RADIO";
				case "reset" :
					return "RESET";
				case "submit" :
					return "SUBMIT";
				case "text" :
					return "TEXT";
				default :
					return null;
			}
		case "SELECT":
			return "SELECT"
		case "TEXTAREA":
			return "TEXTAREA"
		case "OBJECT":
			    switch (oElement.attributes.classid.nodeValue.toUpperCase()) {
				case "CLSID:4A35BB2C-B831-4199-A486-FEA332D085D9": // Bind Component
					return "GB"
                default:
                	return null;
			}
		default :
			return null;
	}
}




/*==============================================================================
*  Data JavaScript
==============================================================================*/

/**
* @Function 명		: insertComma
* @Function 설명	: 해당 text에 ','을 추가(금액), '.' 포함
* @Param 			: 1. str	: (String) Form명을 포함한 입력값
* @return값			: (String) Comma가 적용된 String(','및 '.'을 포함)
* @사용 Event 		: onBlur
* @see 				: cfNumberCheck() 와 같이 사용 유용
*/
function insertComma(str) {
	var txtNumber = '' + str;
	//checkDigit2(str);

	var rxSplit = new RegExp('([0-9])([0-9][0-9][0-9][,.])');
	var arrNumber = txtNumber.split('.');
	arrNumber[0] += '.';
	do {
		arrNumber[0] = arrNumber[0].replace(rxSplit, '$1,$2');
	} while (rxSplit.test(arrNumber[0]));

	if (arrNumber.length > 1) {
		return arrNumber.join('');
	} else {
		return arrNumber[0].split('.')[0];
  	}
}

/**
* @Function 명		: insertComma2
* @Function 설명	: Comma Function Case2
* @Param 			: 1. str	: (String)Form명을 포함한 입력값
* @return값			: (String) Comma가 적용된 String(소수점이 있는 숫자,음수도 포함)
* @사용 Event 		: onKeyup
* @see 				: cfNumberCheck() 와 같이 사용 유용
*/
function insertComma2(str){
    str = new String(str);
    str = str.replace(/,/gi,"");
    return insertComma(str);
}

/**
* @Function 명		: removeComma
* @Function 설명	: Comma가 적용된 Text을 제거하는 function
* @Param 			: 1. str	: (String)Form명을 포함한 input
* @return값			: (String) Comma가 제거된 String
* @사용 Event 		: onBlur
* @see 				:
*/
function removeComma(str) {
	re = /^\$|,/g;
	return str.replace(re, "");
}

/**
* @Function 명		: upperCase
* @Function 설명	: 지정된 문자열을 대문자로 변환하는 function
* @Param 			: 1. str	: (String) 문자열
* @return값			: (String) 대문자로 적용된 String
* @사용 Event 		: onBlur
* @see 				:
*/
function upperCase(obj) {
    if (obj.value.length = 0 ) return obj.value = "";
    else return obj.value = obj.value.toUpperCase();
 }

/**
* @Function 명		: lowerCase
* @Function 설명	: 지정된 문자열을 소문자로 변환하는 function
* @Param 			: 1. str	: (String) 문자열
* @return값			: (String) 소문자로 적용된 String
* @사용 Event 		: onBlur
* @see 				:
*/
function lowerCase(str) {
	if (obj.value.length = 0 ) return obj.value = "";
	else return obj.value = obj.value.toLowerCase();
}

/**
* @Function 명		: Trim
* @Function 설명	: 공백제거 함수
* @Param 			: 1. str	: (String) 입력값
* @return값			: (String) 공백이 제거된 문자열(RTrim, LTrim 역활만)
* @사용 Event 		:
* @see 				:
*/
function Trim(str) {
	var search = 0

	while ( str.charAt(search) == " ") search = search + 1

	str = str.substring(search, (str.length))
	search = str.length - 1

	while (str.charAt(search) ==" ") search = search - 1

	return str.substring(0, search + 1)
}

/**
* @Function 명		: Trim2
* @Function 설명	: 공백제거 함수
* @Param 			: 1. str	: (String) 입력값
* @return값			: (String) 공백이 제거된 문자열(중간의 공백도 모두 제거)
* @사용 Event 		:
* @see 				:
*/
function Trim2(str){
    var reg = /\s+/g;
    return str.replace(reg,'');
}

//오른쪽 공백을 없애는 함수
function rtrim(val){
    reg = /\s$/
    while(reg.test(val))
        val=val.replace(/\s$/,"");
    return val;
}

//왼쪽 공백을 없애는 함수
function ltrim(val){
    reg = /^\s/
    while(reg.test(val))
        val=val.replace(/^\s/,"");
    return val;
}
//앞뒤 공백을 모두 없애는 함수
function trim(val){
  return(ltrim(rtrim(val)));
}

/*==============================================================================
*  Number JavaScript
==============================================================================*/

//실수형 값을 입력했을 때 소수점 위자리수가 맞는지 검사(실수형확인이 된 상태)
//a: 소수점 위자리수 - a가 0이면 자리수 검사를 하지 않음. a가 -1이면 정수검사.
function isValidNumber(val,a){
    //reg = /(^[0\.]\d+)|\.$/;
    if(a>0)
        regStr = "(^[0-9]{1," + a + "}$)|^[0-9]{1," + a + "}(\.)[0-9]+$";
    else if(a == 0)
        regStr = "^[0-9]+(\.)?[0-9]*$";
    else
        regStr = "^[1-9][0-9]*$";

    reg = new RegExp(regStr,"i");
    return reg.test(val);

}

//정수값의 마스킹
function MaskInt(val,mask){
    if(val.length<= 0 ) return "";
    else{
        myReg = /(\d)((\d\d\d)+$)/;
        while( myReg.test(val) )
          val = val.replace(myReg,"$1" + mask + "$2");
        return val;
    }
}

//실수값의 마스킹
function MaskFloat(val,mask){
  if(val.length<= 0 ) return "";
  else{
    a = val.split(".");
    myReg = /(\d)((\d\d\d)+$)/;
    reg1 = /\./g;
    while( myReg.test(a[0]) )
      a[0] = a[0].replace(myReg,"$1" + mask + "$2");
    if(reg1.test(val))
      return  a[0]+ "."+ a[1];
    else return  a[0];
  }
}

//obj 에 입력한 실수값을 소수점윗부분만 마스크문자로 세자리씩 마스킹
// a: 소숫접 위 자리수
// a가 0이면 자리수검사를 하지 않음.
function setNumberMask(obj,mask,a, errmsg){
    if(obj.value.length == 0) return;

    if(errmsg == "")
        errmsg ="숫자를 잘못 입력하셨습니다.";

     if( isValidNumber(obj.value,a) )
            obj.value = MaskFloat(obj.value,mask);
    else{
        errFocus(obj,errmsg);
        return false;
    }
}

/*==============================================================================
*  Date JavaScript
==============================================================================*/

 /**
* @Function 명		: cfNumberCheck
* @Function 설명	: 해당 input type="text"의 입력값을 숫자외 입력불가 Function
* @Param 			: none
* @return값			: boolean
* @사용 Event 		: onKeypress
* @see 				: asc(46)=".", asc(47)="/"포함
*/
function cfNumberCheck() {
	if (event.keyCode < 45 || event.keyCode > 57) event.returnValue = false;
}


/**
* @Function 명		: checkVaildDate
* @Function 설명	: 입력일자의 값이 정확한 일자인지 Check
* @Param 			: 1. lsDate : (String)'YYYY-MM-DD' or "YYYYMMDD" 형태의 Object 값
* @return값			: Boolean
* @사용 Event 		: onBlur
* @see 				:
*/
function checkValidDate(lsDate) {
	var t_date = new String(lsDate);
	var t_year, t_month, t_day;

	if (lsDate.length == 10 ) {
		t_year  = parseInt(t_date.substring(0,4),10);
		t_month = parseInt(t_date.substring(5,7),10);
		t_day   = parseInt(t_date.substring(8,10),10);
	} else {
		if (lsDate.length == 0 ) {
			alert('날짜를 입력하지 않았습니다..');
		} else {
			alert('날짜형식이 잘못되었습니다.');
		}
		return false;
	}

	if(!checkDigit(t_year) || !checkDigit(t_month) || !checkDigit(t_day)) {
		alert('날짜는 숫자만 가능합니다.');
		return false;
	}

	if (t_year < 1900 || t_year >2100) {
		alert('년도를 잘못 입력하셨습니다.');
		return false;
	}

	if (t_month <1 || t_month > 12) {
		alert('달을 잘못 입력하셨습니다.');
		return false;
	}

	if (t_day <1 || t_day > getLastday(t_year, t_month)) {
		alert('일자를 잘못 입력하셨습니다.');
		return false;
	}
	return true;
}

/**
* @Function 명		: getLastday
* @Function 설명	: 입력한 년,월의 마지막 일자을 구하는 Function
* @Param 			: 1. (String) 'YYYY'형태의 년도
*					  2. (String) 'MM'형태의 월
* @return값			: (String)현재달의 마지막 일자
* @사용 Event 		: onBlur
* @see 				:
*/
function getLastday(calyear,calmonth) {
	if (((calyear % 4 == 0) && (calyear % 100 != 0))||(calyear % 400 == 0)) dayOfMonth[1] = 29;

	var nDays = dayOfMonth[calmonth-1];
	return nDays;
}

/**
 * @Function 명		: formatDate
 * @Function 설명  	: 날짜표시 구분자에 의해  자동 Formating function(일자)
 * @Param 			: 1. lsDate	: (String) 입력Date 값("YYYY-MM-DD")
 *					  2. sep	: (String) 일자의 구분자(-,/,.)
 * @return값			: (String) 자동 Formating이 된 일자
 * @사용 Event 		: onKeyup
 * @see 				: 1. 년,월,일 Validiation Check시 범위가 벗어나는 경우 해당 년,월,일만 삭제.
 *					  2. onKeypress="cfNumberCheck();"와 같이 사용
 */
function formatDate(lsDate, sep) {
	var t_temp;
	var t_date = lsDate.split(sep);

	// "-"=189, "."=190, "/"=191
	if ((event.keyCode == 189) || (event.keyCode == 190) || (event.keyCode == 191) ) {
		lsDate = lsDate.substring(0, lsDate.length -1);
	}

	// Year Check
	if ( lsDate.length == 4 ) {
		if (t_date[0] < 1900 || t_date[0] >2100)
			return "";
		else {
			// 날짜수정시 backspace인 경우는 자동 sep을 삭제
			if (event.keyCode == 8) return lsDate; else return lsDate+sep;
		}
	// Month Check
	} else if ( lsDate.length == 7 ) {
		t_temp = parseInt(t_date[1],10);
		if ( (t_temp < 1) || (t_temp > 12) )
			return lsDate.substring(0,5);
		else
			if (event.keyCode == 8) return lsDate; else return lsDate+sep;
	// Day Check
	} else if ( lsDate.length > 9 ) {
		t_temp = parseInt(t_date[2],10);
		//해당 월의 마지막 일수 Check
		if ( (t_temp < 1) || (t_temp > getLastday(t_date[0], parseInt(t_date[1],10) )))
			return lsDate.substring(0,8);
		else
			return lsDate;
	} else {
		return lsDate;
	}
}

/**
 * @Function 명		: formatDate2
 * @Function 설명  	: textbox를 입력 받아서 validation 과정 수행
 * @Param 			: 1. objText - form Object
 * @return			: 없음.
 * @사용 Event 		: onKeyup
 */
function formatDate2(objText) {
    var objTextValue = objText.value;

    var dashCharNum = 0;

    for (i=0; i<objTextValue.length; i++)
    {
        var tmpChar = objTextValue.substring(i, i+1);

        if (tmpChar == '-')
        {
            dashCharNum++;
        }
    }

    // 현재 String에 '-'문자가 2개 존재하면 수정모드로 간주하고 validation 과정을 하지 않음.
    if (dashCharNum > 1)
    {
        // 수정용 backspace일 경우는 return;
        if (event.keyCode==8 || event.keyCode==37 || event.keyCode==39)
        {
            return;
        }
    }

    var returnStr = formatDate(objTextValue, '-');
    objText.value = returnStr;
}

/**
* @Function 명		: getCurrentMonStDate
* @Function 설명	: 구분자에 의해 현재의 일자를 가져오는 Function
* @Param 			: 1. sep	: (String) 날짜형태의 Formatting하는 구분자
* @return값			: (String) Formatting이 정해진 현재일자
* @사용 Event 		:
* @see 				:
*/
function getCurrentMonStDate(sep) {
	var today  = new Date();
	var t_year = today.getFullYear();
	var t_mon  = today.getMonth()+1;
	var t_day  = "01";

	if(t_mon.toString().length == 1) t_mon = "0" + t_mon;
	if(t_day.toString().length == 1) t_day = "01";

    return ""+t_year+sep+t_mon+sep+t_day;
}

/**
* @Function 명		: getCurrentDate
* @Function 설명	: 구분자에 의해 현재의 일자를 가져오는 Function
* @Param 			: 1. sep	: (String) 날짜형태의 Formatting하는 구분자
* @return값			: (String) Formatting이 정해진 현재일자
* @사용 Event 		:
* @see 				:
*/
function getCurrentDate(sep) {
	var today = new Date();
	var t_year = today.getFullYear();
	var t_mon  = today.getMonth()+1;
	var t_day  = today.getDate();

	if(t_mon.toString().length == 1) t_mon = "0" + t_mon;
	if(t_day.toString().length == 1) t_day = "0" + t_day;

    return ""+t_year+sep+t_mon+sep+t_day;
}

/**
* @Function 명		: getCurrentDateTime
* @Function 설명	: 구분자에 의해 현재의 일자 + 시분초 를 가져오는 Function
* @Param 			: 1. sep	: (String) 날짜형태의 Formatting하는 구분자
* @return값			: (String) Formatting이 정해진 현재일자
* @사용 Event 		:
* @see 				:
*/
function getCurrentDateTime() {
	var today 		= new Date();
	var t_year 		= today.getFullYear();
	var t_mon  		= today.getMonth()+1;
	var t_day  		= today.getDate();
	var t_hours		= today.getHours(); 
	var t_minute	= today.getMinutes();
	var t_seconds	= today.getSeconds();

	if(t_mon.toString().length == 1) t_mon = "0" + t_mon;
	if(t_day.toString().length == 1) t_day = "0" + t_day;
	if(t_hours.toString().length == 1) t_hours = "0" + t_hours;
	if(t_minute.toString().length == 1) t_minute = "0" + t_minute;
	if(t_seconds.toString().length == 1) t_seconds = "0" + t_seconds;

    return ""+t_year+t_mon+t_day+t_hours+t_minute+t_seconds;
}


/**
* @Function 명		: getCurrentDateTimeStep
* @Function 설명	: 구분자에 의해 현재의 일자 + 시분초 를 가져오는 Function
* @Param 			: 1. sep	: (String) 날짜형태의 Formatting하는 구분자
* @return값			: (String) Formatting이 정해진 현재일자
* @사용 Event 		:
* @see 				:
*/
function getCurrentDateTimeStep(gubun,sep) {
	var today 		= new Date();
	var t_year 		= today.getFullYear();
	var t_mon  		= today.getMonth()+1;
	var t_day  		= today.getDate();
	var t_hours		= today.getHours(); 
	var t_minute	= today.getMinutes();
	var t_seconds	= today.getSeconds();
	
	var retTmp		= "";

	if(t_mon.toString().length == 1) t_mon = "0" + t_mon;
	if(t_day.toString().length == 1) t_day = "0" + t_day;
	if(t_hours.toString().length == 1) t_hours = "0" + t_hours;
	if(t_minute.toString().length == 1) t_minute = "0" + t_minute;
	if(t_seconds.toString().length == 1) t_seconds = "0" + t_seconds;
	
	if(gubun == 1) {
		retTmp = ""+t_year;
	} else if(gubun == 2) {
		retTmp = ""+t_mon;
	} else if(gubun == 3) {
		retTmp = ""+t_day;
	} else if(gubun == 4) {
		retTmp = ""+t_hours;
	} else if(gubun == 5) {
		retTmp = ""+t_minute;
	} else if(gubun == 6) {
		retTmp = ""+t_seconds;
	} else if(gubun == 7) {
		retTmp = ""+t_year+sep+t_mon;
	} else if(gubun == 8) {
		retTmp = ""+t_year+sep+t_mon+sep+t_day;
	} else if(gubun == 9) {
		retTmp = ""+t_hours+sep+t_minute;
	} else {
		retTmp = ""+t_year+t_mon+t_day+t_hours+t_minute+t_seconds;
	}

    return retTmp;
}


//입력한 값이 유효한 날짜인지 검사(year:4자리, month:두자리, date:두자리)
//년도는 2000년보다 크고 2099년보다 작아야 한다.
//month나 date 가 "" 이면 년도만 검사한다.
//date 만 "" 이면 년월을 검사한다.
function isValidDate(year,month,date){
    reg =/(^0)/;
    if(reg.test(year)) return false;
    if( (parseInt(year)<2000) ||(parseInt(year)>2099) ) return false;
    if( (month!="") && (date!="") ){
      d = new Date(parseInt(year),parseInt(month.replace(/^0(\d)$/g,"$1"))-1,parseInt(date.replace(/^0(\d)$/g,"$1")) );

      newDate = d.getYear().toString()
              + (d.getMonth()+1).toString().replace(/(^\d$)/g,"0"+"$1")
              + d.getDate().toString().replace(/(^\d$)/g,"0"+"$1");

      return (year+month+date) == newDate;
    }else if(date!="")
        return ( (parseInt(month.replace(/^0(\d)$/g,"$1"))>0) && (parseInt(month.replace(/^0(\d)$/g,"$1"))<13) )
    else
        return true;
}





//입력한 년도가 올바른지 확인하고 올바르지 않으면 공백으로 대체
function isValidYear(yearObj){
    if(!isValidDate(yearObj.value,"","")){
        errFocus(yearObj,"년도를 잘못 입력하셨습니다.");
        yearObj.value="";
    }

}


//날짜 마스킹 return "0000-00-00" : 숫자를 세자리,다섯자리,일곱자리로 넣었을 때
function MaskDate(val,mask){
    now = new Date();
    y = now.getYear().toString();
    reg = new RegExp(mask,"g");
    m = (now.getMonth()+1).toString().replace(/(^\d$)/g,"0"+"$1");
    //0만 입력했을 때
    reg1 = new RegExp("^0+$","g");
    if(reg1.test(val))
    return "0";

    switch(val.length){

    case 1:
        return y + mask + m + mask + "0" + val;


    case 2:
        return y + mask + m + mask +  val;


    case 3:
        return "0000-00-00";

    case 4:
        newMonth = val.substr(0,2);
        newDat = val.substr(2,2);
        return y + mask + newMonth + mask  + newDat;

    case 5:
      return "0000-00-00";

    case 6:
        newYear = "20" + val.substr(0,2);
        newMonth = val.substr(2,2);
        newDat =  val.substr(4,2);
        return newYear + mask + newMonth + mask  + newDat;

    case 7:
        return "0000-00-00";

    case 8:
        newYear =  val.substr(0,4);
        newMonth = val.substr(4,2);
        newDat =  val.substr(6,2);
        return newYear + mask + newMonth + mask  + newDat;
    }

}

//obj에 입력한 값에 날짜 마스킹을 한다. 마스크가 '-' 이면 'YYYY-MM-DD'
function setDateMask(obj,mask,errmsg){
    if(obj.value.length==0) return;

    if(errmsg == "")
        errmsg ="날짜를 잘못 입력하셨습니다.";
    val = MaskDate(obj.value,mask);
    temp = unMask(val,mask);
    if(isValidDate(temp.substr(0,4),temp.substr(4,2),temp.substr(6,2)) )
        obj.value = val;
    else {
        errFocus(obj,errmsg);
        return false;
    }
}

/**
* @Function 명		: dateCheck
* @Function 설명	: 첫번째 Param(dateFlag)에 따라서 두번째 객체(date)의 유효성을 체크하는 메소드이다.
* @Param 			: 1. dateFlag	: 값은 'D' 또는 'M'으로 값이 'D'이면 일까지 체크하며, 'M'이면 달까지만 체크한다.
* @Param 			: 2. date	: 날짜값.
* @Param 			: 3. separator	: 년월일 간의 구분자(예 : '-')
* @return값			: 이상이 없으면 true, 이상이 있으면 false
* @사용 Event 		:
* @see 				:
*/
function dateCheck(dateFlag, date, separator)
{
	var daysInMonth = new Array("31", "28", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31");
//	date = dateName.value;
	index = 0;
	cnt = 0;
	first = 0;
	var value = new Array(3);
	if(date == "") return false;

	if(date.indexOf(separator) > 0) {
		while(true) {
			index = date.indexOf(separator, index);
			if(index < 0) break;

			value[cnt] = date.substring(first, index);
			first = ++index;
			cnt++;
		}

		value[cnt] = date.substring(first, date.length);
		OKDate1 = "";
		for(i = 0; i < value.length; i++) {
			if(value[i] == undefined) {
				if(i < 2) {
					alert("날짜 입력 형식이 잘못되었습니다.\n  (입력 예 : 2002"+separator+"09"+separator+"02 또는 20020902)");
//					dateName.select();
					return false;
				} else if(dateFlag == "D" && i < 3) {
					alert("일이 입력되지 않았습니다.\n  (입력 예 : 2002"+separator+"09"+separator+"02 또는 20020902)");
//					dateName.select();
					return false;
				} else continue;
			} else if(value[i] == "" && i < 2) {
				alert("날짜 입력 형식이 잘못되었습니다.\n  (입력 예 : 2002"+separator+"09"+separator+"02 또는 20020902)");
//				dateName.select();
				return false;
			} else if(value[i] == "" && dateFlag == "D" && i < 3) {
				alert("일이 입력되지 않았습니다.\n  (입력 예 : 2002"+separator+"09"+separator+"02 또는 20020902)");
//				dateName.select();
				return false;
			}
		}

		if(isNaN(value[0]) || isNaN(value[1]) || (dateFlag == "D" && isNaN(value[2]))) {
			alert("날짜 입력 형식이 잘못되었습니다.\n  (입력 예 : 2002"+separator+"09"+separator+"02 또는 20020902)");
//			dateName.select();
			return false;
		} else {
			if(eval(value[1]) > 12 || eval(value[1]) < 0) {
				alert("달 입력이 잘못되었습니다.");
//				dateName.select();
				return false;
			} else if(dateFlag == "D" && (eval(value[2]) > daysInMonth[eval(value[1]) - 1] || eval(value[2]) <= 0)) {
				alert("일 입력이 잘못되었습니다.");
//				dateName.select();
				return false;
			}
		}

		if(value[1] < 10) value[1] = "0" + eval(value[1]);
		if(dateFlag == "D" && value[2] < 10) value[2] = "0" + eval(value[2]);

		OKDate1 = "";
		OKDate1 = value[0] + separator + value[1];
		if(dateFlag == "D") OKDate1 = OKDate1 + separator + value[2];
//		dateName.value = OKDate1;

		return true;
	} else {
		if((dateFlag == "D" && date.length != 8) || (dateFlag == "M" && date.length != 6)) {
			alert("날짜 자릿수가 잘못되었습니다.");
//			dateName.select();
			return false;
		} else {
			year = date.substring(0, 4);
			month = date.substring(4, 6);
			if(dateFlag == "D") day = date.substring(6, 8);
			if(isNaN(year) || isNaN(month)) {
				alert("날짜는 숫자만 입력이 가능합니다.");
//				dateName.select();
				return false;
			} else if(dateFlag == "D" && isNaN(day)) {
				alert("날짜는 숫자만 입력이 가능합니다.");
//				dateName.select();
				return false;
			} else {
				if(month > 12 || month < 0) {
					alert("달 입력이 잘못되었습니다.");
//					dateName.select();
					return false;
				} else if(dateFlag == "D" && (eval(day) > daysInMonth[eval(month) - 1] || eval(day) <= 0)) {
					alert("일 입력이 잘못되었습니다.");
//					dateName.select();
					return false;
				}
			}

			if(month < 10) month = "0" + eval(month);
			if(dateFlag == "D" && day < 10) day = "0" + eval(day);

			OKDate2 = "";
			OKDate2 = year + separator + month;
			if(dateFlag == "D") OKDate2 = OKDate2 + separator + day;

//			dateName.value = OKDate2;

			return true;
		}
	}
}
/**
* @Function 명		: dateCheckLocal
* @Function 설명	: 일차 체크하여 일자의 정합성 체크 및 YYYY-MM-DD형식으로 리턴 합니다.
* @Param 			:
* @Param 			:
* @Param 			:
* @return값			:
* @사용 Event 		:
* @see 				:
*/
function dateCheckLocal(isfrm)
{
	var tmpDate = isfrm.value;
	if(tmpDate == "")
	{
		return true;
	}
	if(tmpDate.length < 8)
	{
		alert("일자를 정확히 입력 하세요 ...!!! \n YYYY-MM-DD or YYYYMMDD");
		isfrm.value ="";
		isfrm.focus();
		return false;
	}
	chkBar = tmpDate.split("-");
	var tmpChkBarDate ="";
	for(i=0;i<chkBar.length;i++)
	{
		tmpChkBarDate += chkBar[i];
	}

	tmpDate = tmpChkBarDate;

	if(dateCheck("D",tmpDate , "-"))
	{
		if(tmpDate.length == 8 )
		{
			isfrm.value =  tmpDate.substring(0,4) + "-" + tmpDate.substring(4,6) + "-" + tmpDate.substring(6,8);
		}
		bn = true;
	}
	else
	{
		alert("일자를 정확히 입력 하세요 ...!!! \n YYYY-MM-DD or YYYYMMDD");
		isfrm.value ="";
		isfrm.focus();
		bn =false;
	}
	//return bn;

}
/*==============================================================================
*  Error JavaScript
==============================================================================*/
//원값을 보존해 둔다.
function setOrgValue(obj){
  orgValue = obj.value;
}

//에러메시지 출력 및 에러 오브젝트 포커싱
function errFocus(obj,msg){
  alert(msg);
  obj.value = "";
  obj.focus();
}

/**
* @Function 명		: cfPrintMessage
* @Function 설명		: 서버로부터 리턴된 메시지를 status창이나 alert로 출력합니다.
* @Param 			: JSONObject
* @Param 			:
* @Param 			:
* @return값			:
* @사용 Event 		:
* @see 				:
*/
function cfPrintMessage(resultObj)
{	
	if (resultObj.msg == undefined) 
	{ //조회성
		if (resultObj.totCnt > 0) 
		{
			window.status = "조회 완료";
		} 
		else 
		{
			window.status = "조회된 내용이 없습니다.";
		}
	} 
	else 
	{ // 비조회성 (Transaction관련)
		if (resultObj.msg == "sessionOut") 
		{
			cfSessionOut();
			//20110825 0924 by hbs 에러메세지 안띄우도록
			//return;
			return 1;
		}
		

		if (resultObj.msgDesc == "1") 
		{
	    	alert("정상적으로 처리되었습니다.");
	    } 
		else 
		{
	    	alert(resultObj.msg+"\n"+resultObj.msgDesc);
	    }
	}
	
	//20110825 0924 by hbs 에러메세지 안띄우도록
	return 0;
}

//20100728 1349 by hbs 세션이 끊긴거 체크하게
function cfPrintMessage_For_SessionOutCheck(resultObj)
{	
	if (resultObj.msg == "sessionOut") 
	{
		//cfSessionOut_For_Another();
		return 1;
	}	
}
/**
* @Function 명		: cfPrintRecord
* @Function 설명		: 서버로부터 레코드수를 return합니다.
* @Param 			: JSONObject
* @Param 			:
* @Param 			:
* @return값			:
* @사용 Event 		:
* @see 				:
*/
function cfPrintRecord(resultObj){
	var totCntDiv = document.getElementById("totCntDiv");
	totCntDiv.innerHTML = "";
	var vText = "총 "+resultObj.totCnt+"건의 레코드";
	totCntDiv.innerHTML =vText;
}

/**
* @Function 명		: cfPageControl
* @Function 설명		: UI단 페이징 관련 처리를  한다.
* @Param 			: pageControl
* @Param 			: totPageContol
* @Param 			: totPage
* @Param 			: curPage
* @사용 Event 		:
* @see 				:
*/
function cfPageControl( pageControl, totPageControl , pageCount, page )
{
   var cnt, i;

   cnt = pageControl.length;

   for ( i = cnt - 1; i >= 0; i-- )
   {
      pageControl.remove( i );
   }

   for ( i = 0; i <= pageCount-1; i++ )
   {
      blankPage = new Option( '', '' );
      pageControl[ i ] = blankPage;
      pageControl[ i ].value = i+1;
      pageControl[ i ].text  = i+1;
   }

   pageControl.options[page-1].selected = true;

   totPageControl.value = pageCount;
}

/**
* @Function 명		: cfShowLoadingImg
* @Function 설명		: UI - 작업처리시 로딩이미지를 처리한다.
* @Param 			: cfShowLoadingImg
* @사용 Event 		:
* @see 				:
*/

function cfShowLoadingImg(){

    try{

       width = document.body.clientWidth;
       height = document.body.clientHeight - 154;
       lPopBody.innerHTML = "<img src='/ipis/seat/image/loading.gif'>";
       lPopup.show((width/2 - 290/2), (height/2 - 95/2), 290, 95, document.body);
        
    }
    catch(e){
        //alert(e.message);
    }
}

/**
* @Function 명		: cfShowSavingImg
* @Function 설명		: UI - 작업처리시 저장이미지를 처리한다.
* @Param 			: cfShowSavingImg
* @사용 Event 		:
* @see 				:
*/

function cfShowSavingImg(){

    try{

       width = document.body.clientWidth;
       height = document.body.clientHeight - 154;
       lPopBody.innerHTML = "<img src='/ipis/seat/image/saving.gif'>";
       lPopup.show((width/2 - 290/2), (height/2 - 95/2), 290, 95, document.body);
        
    }
    catch(e){
        //alert(e.message);
    }
}

/**
* @Function 명		: cfCloseLoadingImg
* @Function 설명		: UI - 작업처리시 로딩이미지를 처리한다.
* @Param 			: cfShowLoadingImg
* @사용 Event 		:
* @see 				:
*/
function cfCloseLoadingImg() {
	lPopup.hide();
}

/**
* @Function 명		: cfConvCheckValue
* @Function 설명		: checkbox의 값을 DB의 값으로 변환해준다.
* @Param 			: Obj
* @사용 Event 		:
* @see 				:
*/
function cfConvCheckValue(Obj) {
	if (Obj.checked) {
		Obj.value = -1;	//체크되어있을 경우 
	} else {
		Obj.value = 0;
	}	
}

/**
* @Function 명		: cfConvCheckValue
* @Function 설명		: DB의 값을 근거로 checkbox의 상태를 정해준다.
* @Param 			: Obj
* @사용 Event 		:
* @see 				:
*/
function cfConvValueCheck(value,Obj) {
	if (value == "-1") {
		Obj.checked = true;	
	} 
}


/**
* @Function 명		: cfWidePopup
* @Function 설명		: 팝업을 호출하는 공통함수
* @Param 			: Obj
* @사용 Event 		:
* @see 				:
*/
function cfWidePopup(oAction, oName, oParam, oWidth, oHeight, oPos) { 

    if(oPos == "center"){

        var oReturn = window.showModalDialog( oAction + "?title=" + encodeURIComponent(oName) + "&param=" + encodeURIComponent(oParam) ,
                window,"dialogWidth:"+oWidth+"px;dialogHeight:"+oHeight+"px;scroll:auto;status:no;help:no;center:yes");
    }else{

        var oClientY = (event)? event.clientY : "0" ;
        var oClientX = (event)? event.clientX : "0" ;

        if(oClientY == 0 && oClientX == 0) { 
            var oReturn = window.showModalDialog( oAction + "?title=" + encodeURIComponent(oName) + "&param=" + encodeURIComponent(oParam) ,
                    window,"dialogWidth:"+oWidth+"px;dialogHeight:"+oHeight+"px;scroll:no;status:no;resizeable:no;help:no;center:yes");

        }else{
             var oReturn = window.showModalDialog( oAction + "?title=" + encodeURIComponent(oName) + "&param=" + encodeURIComponent(oParam) ,
                    window,"dialogWidth:"+oWidth+"px;dialogHeight:"+oHeight+"px;dialogTop:" + eval(window.screenTop + oClientY ) + "px;dialogLeft:" + 
                    eval( window.screenLeft + oClientX ) + "px;scroll:no;status:no;resizeable:no;help:no");
        }
    }
}

/**
* @Function 명		: cfUserPopup
* @Function 설명		: 사용자 검색 팝업을 호출하는 공통함수
* @Param 			: Obj
* @사용 Event 		:
* @see 				:
*/
function cfUserPopup(argParam) { 
	cfWidePopup("/ipis/seat/sm/sm00003p00.jsp","사용자 검색", argParam, 570, 600,"center");
}


/**
* @Function 명		: cfCenterWin
* @Function 설명		: 일반 팝업을 호출하는 공통함수
* @Param 			: Obj
* @사용 Event 		:
* @see 				:
*/
function cfCenterWin(url,winName, properties) {

	if(properties.indexOf("1000") != -1){
		var win = window.open(url, winName, properties);
		return win;
	}

	properties = properties.toLowerCase();
	len = properties.length;
	sumchar= "";
	for (i=1; i <= len; i++){ 
		onechar = properties.substr(i-1, 1);
		if (onechar != " ") sumchar += onechar;
	}
	
	properties = sumchar; 
	sp = new Array();
	sp = properties.split(',', 10);
	splen = sp.length;
	for (i=0; i < splen; i++){ 
		if (sp[i].indexOf("width=") == 0){
			width = Number(sp[i].substring(6)); 
		} else if (sp[i].indexOf("height=") == 0){
			height = Number(sp[i].substring(7)); 
		}
	}
	sleft = (screen.width - width) / 2;
	stop = (screen.height - height) / 2 - 40;
	properties = properties + ",left=" + sleft + ",top=" + stop;
	
	var win = window.open(url, winName, properties);
	return win;
}

/**
* @Function 명		: cfSessionOut
* @Function 설명		: 세션 아웃
* @Param 			: Obj
* @사용 Event 		:
* @see 				:
*/
function cfSessionOut() 
{
	var form = document.frmProcess;
	alert("세션정보가 없습니다.\n\n잘못된 경로를 통해서 프로그램에 접근하였거나\n최종사용시간이 오래되어 세션이 삭제되었습니다.\n다시 로그인하여 주십시오.");
    //form.command.value = "LOGOUT";
    form.method        = "post";
    form.target        = "_self";
    //form.action        = "/logout.jsp";
    form.action        = "/admin/logout.jsp";
    form.submit();

}

function cfSessionOut_For_Another() 
{
	var form = document.frmProcess;
	alert("연결이 종료되었습니다.\n다시 로그인하여 주십시오.");
    //form.command.value = "LOGOUT";
    //form.method        = "post";
    //form.target        = "_self";
    //form.action        = "/logout.jsp";
    //form.submit();

}


/**
* @Function 명		: cfReplaceToDB
* @Function 설명		: 데이터베이스에 저장시 값 변경
* @Param 			: Obj
* @사용 Event 		:
* @see 				:
*/
function cfReplaceToDB(strContext) 
{
	strContext = strContext.replace(/&/gi, "__AD__");
	strContext = strContext.replace(/\//gi, "__SL__");
	strContext = strContext.replace(/#/gi, "__SH__");
	strContext = strContext.replace(/\"/gi, "__DM__");
	strContext = strContext.replace(/,/gi, "__CM__");
	strContext = strContext.replace(/=/gi, "__EQ__");
	strContext = strContext.replace(/\\/gi, "__WO__");
	strContext = strContext.replace(/;/gi, "__SE__");
	strContext = strContext.replace(/:/gi, "__CO__");
	strContext = strContext.replace(/\r\n/gi, "<br>");
	strContext = strContext.replace(/\[/gi, "__GA__");
	strContext = strContext.replace(/\]/gi, "__GB__");
	strContext = strContext.replace(/{/gi, "__SA__");
	strContext = strContext.replace(/}/gi, "__SB__");
	
	return strContext;
}

/**
* @Function 명		: cfDBToReplace
* @Function 설명		: 화면에 출력할 때 값 변경
* @Param 			: Obj
* @사용 Event 		:
* @see 				:
*/
function cfDBToReplace(strContext) 
{
	strContext = strContext.replace(/__AD__/gi, "&");
	strContext = strContext.replace(/__SL__/gi, "/");
	strContext = strContext.replace(/__SH__/gi, "#");
	strContext = strContext.replace(/__DM__/gi, "\"");
	strContext = strContext.replace(/__CM__/gi, ",");
	strContext = strContext.replace(/__EQ__/gi, "=");
	strContext = strContext.replace(/__WO__/gi, "\\");
	strContext = strContext.replace(/__SE__/gi, ";");
	strContext = strContext.replace(/__CO__/gi, ":");
	strContext = strContext.replace(/<br>/gi, "\r\n");
	strContext = strContext.replace(/__GA__/gi, "[");
	strContext = strContext.replace(/__GB__/gi, "]");
	strContext = strContext.replace(/__SA__/gi, "{");
	strContext = strContext.replace(/__SB__/gi, "}");
	
	return strContext;
}

/**
* @Function 명		: cfCheckAll
* @Function 설명		: 체크박스값을 변경
* @Param 			: Obj
* @사용 Event 		:
* @see 				:
*/
function cfCheckAll(Obj, ObjChk)
{
	if(typeof(Obj) != 'undefined')
	{
		if(typeof(Obj.length) != 'undefined')
		{
			var cntChecked = Obj.length;
			
			
			//if(ObjChk.checked == 0)
			if(ObjChk.checked == 1)
			{
				//Obj.value = "";
				for(var i=0; i<cntChecked; i++)
				{
					Obj[i].checked = 1;
				}
			}
			else
			{
				//Obj.value = "50";
				for(var i=0; i<cntChecked; i++)
				{
					Obj[i].checked = 0;
				}
			}
		}
		else
		{
			//if(ObjChk.checked == 0)
			if(ObjChk.checked == 1)
			{
				//Obj.value = "";
				Obj.checked = 1;
			}
			else
			{
				//Obj.value = "50";
				Obj.checked = 0;
			}
		}
	}
}

/**
* @Function 명		: cfPagingMake
* @Function 설명		: 관리자 모드 페이징 처리
* @Param 			: Obj, intCurPage, intTotPage
* @사용 Event 		:
* @see 				:
*/
function cfPagingMake(Obj, intCurPage, intTotPage, intCnt)
{
	var objList = document.getElementById(Obj);
	// 페이징 리스트 갯수
	var iTotCnt = Math.ceil(eval(intTotPage)/intCnt);
	var intPageCnt = Math.ceil(eval(intCurPage)/intCnt);
	
	var iStart  = ((eval(intPageCnt) - 1) * eval(intCnt)) + 1;
	var iEnd    = eval(intPageCnt) * eval(intCnt);

	var intPrev = eval(iStart) - 1;
	var intNext = eval(iEnd) + 1;
	
	var strHtml = "";
		
	if(intPageCnt == 1) {
		if(intPageCnt == iTotCnt){

			strHtml += "&nbsp;|&nbsp;";
			
			for(var i = iStart; i <= intTotPage; i++){		
				if(i == intCurPage)
				{
					//strHtml += "<a href='#' onclick='return fnRetrieve(" + i + ");'><strong><font color='#FF6600'> " + i + " </font></strong></a>";
					strHtml += "<a href='#' onclick='return fnRetrieve_Page(" + i + ");'><strong><font color='#FF6600'> " + i + " </font></strong></a>";
				}
				else
				{
					//strHtml += "<a href='#' onclick='return fnRetrieve(" + i + ");'> " + i + " </a>";
					strHtml += "<a href='#' onclick='return fnRetrieve_Page(" + i + ");'> " + i + " </a>";
				}	
				
				strHtml += "&nbsp;|&nbsp;";
			} 
		}else{

			strHtml += "&nbsp;|&nbsp;";
			
			for(var i = iStart; i <= iEnd; i++){		
				if(i == intCurPage)
				{
					strHtml += "<a href='#' onclick='return fnRetrieve_Page(" + i + ");'><strong><font color='#FF6600'> " + i + " </font></strong></a>";
				}
				else
				{
					strHtml += "<a href='#' onclick='return fnRetrieve_Page(" + i + ");'> " + i + " </a>";
				}	
				
				strHtml += "&nbsp;|&nbsp;";
			} 
			// 다음하고 마지막만 있음
			strHtml += "&nbsp;&nbsp;&nbsp;<a href='javascript:fnRetrieve_Page(" + intNext + ")'><img src=\"/images/page_right.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";
			strHtml += "&nbsp;&nbsp;&nbsp;<a href='javascript:fnRetrieve_Page(" + intTotPage + ")'><img src=\"/images/page_end.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";
		}	
	} else{
		if(intPageCnt < iTotCnt){
			// 처음, 이전
			strHtml += "&nbsp;&nbsp;&nbsp;<a href='#' onclick='return fnRetrieve_Page(1);'><img src=\"/images/page_first.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";
			strHtml += "&nbsp;&nbsp;&nbsp;<a href='#' onclick='return fnRetrieve_Page(" + intPrev + ");'><img src=\"/images/page_left.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";

			strHtml += "&nbsp;|&nbsp;";
			
			for(var i = iStart; i <= iEnd; i++){		
				if(i == intCurPage)
				{
					strHtml += "<a href='#' onclick='return fnRetrieve_Page(" + i + ");'><strong><font color='#FF6600'> " + i + " </font></strong></a>";
				}
				else
				{
					strHtml += "<a href='#' onclick='return fnRetrieve_Page(" + i + ");'> " + i + " </a>";
				}	
				
				strHtml += "&nbsp;|&nbsp;";
			} 
			// 다음하고 마지막만 있음
			strHtml += "&nbsp;&nbsp;&nbsp;<a href='#' onclick='return fnRetrieve_Page(" + intNext + ");'><img src=\"/images/page_right.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";
			strHtml += "&nbsp;&nbsp;&nbsp;<a href='#' onclick='return fnRetrieve_Page(" + intTotPage + ");'><img src=\"/images/page_end.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";
			
		}else{
			if(intTotPage != undefined){
				// 처음, 이전
				strHtml += "&nbsp;&nbsp;&nbsp;<a href='#' onclick='return fnRetrieve_Page(1);'><img src=\"/images/page_first.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";
				strHtml += "&nbsp;&nbsp;&nbsp;<a href='#' onclick='return fnRetrieve_Page(" + intPrev + ");'><img src=\"/images/page_left.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";
				
				strHtml += "&nbsp;|&nbsp;";
			}
			
			for(var i = iStart; i <= intTotPage; i++){		
				if(i == intCurPage)
				{
					strHtml += "<a href='#' onclick='return fnRetrieve_Page(" + i + ");'><strong><font color='#FF6600'> " + i + " </font></strong></a>";
				}
				else
				{
					strHtml += "<a href='#' onclick='return fnRetrieve_Page(" + i + ");'> " + i + " </a>";
				}	
				
				strHtml += "&nbsp;|&nbsp;";
			} 
		}	
	}
	
	objList.innerHTML = strHtml;	
}


/**
* @Function 명		: cfPagingMakeHome
* @Function 설명		: 홈페이지 페이징 처리
* @Param 			: Obj, intCurPage, intTotPage
* @사용 Event 		:
* @see 				:
*/
function cfPagingMakeHome(Obj, intCurPage, intTotPage, intCnt)
{
	var objList = document.getElementById(Obj);
	
	// 페이징 리스트 갯수
	var iTotCnt = Math.ceil(eval(intTotPage)/intCnt);
	var intPageCnt = Math.ceil(eval(intCurPage)/intCnt);
	
	var iStart  = ((eval(intPageCnt) - 1) * eval(intCnt)) + 1;
	var iEnd    = eval(intPageCnt) * eval(intCnt);

	var intPrev = eval(iStart) - 1;
	var intNext = eval(iEnd) + 1;
	
	var strHtml = "";
		
	if(intPageCnt == 1) {
		if(intPageCnt == iTotCnt){

			strHtml += "&nbsp;|&nbsp;";
			
			for(var i = iStart; i <= intTotPage; i++){		
				if(i == intCurPage)
				{
					strHtml += "<a href='#' onclick='return fnRetrieve(" + i + ", 102);'><strong><font color='#FF6600'> " + i + " </font></strong></a>";
				}
				else
				{
					strHtml += "<a href='#' onclick='return fnRetrieve(" + i + ", 102);'> " + i + " </a>";
				}	
				
				strHtml += "&nbsp;|&nbsp;";
			} 
		}else{

			strHtml += "&nbsp;|&nbsp;";
			
			for(var i = iStart; i <= iEnd; i++){		
				if(i == intCurPage)
				{
					strHtml += "<a href='#' onclick='return fnRetrieve(" + i + ", 102);'><strong><font color='#FF6600'> " + i + " </font></strong></a>";
				}
				else
				{
					strHtml += "<a href='#' onclick='return fnRetrieve(" + i + ", 102);'> " + i + " </a>";
				}	
				
				strHtml += "&nbsp;|&nbsp;";
			} 
			// 다음하고 마지막만 있음
			strHtml += "&nbsp;&nbsp;&nbsp;<a href='#' onclick='return fnRetrieve(" + intNext + ", 102);'><img src=\"/img/board/next.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";
			strHtml += "&nbsp;&nbsp;&nbsp;<a href='#' onclick='return fnRetrieve(" + intTotPage + ", 102);'><img src=\"/img/board/nextend.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";
		}	
	} else{
		if(intPageCnt < iTotCnt){
			// 처음, 이전
			strHtml += "&nbsp;&nbsp;&nbsp;<a href='#' onclick='return fnRetrieve(1, 102);'><img src=\"/img/board/prevend.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";
			strHtml += "&nbsp;&nbsp;&nbsp;<a href='#' onclick='return fnRetrieve(" + intPrev + ", 102);'><img src=\"/img/board/prev.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";

			strHtml += "&nbsp;|&nbsp;";
			
			for(var i = iStart; i <= iEnd; i++){		
				if(i == intCurPage)
				{
					strHtml += "<a href='#' onclick='return fnRetrieve(" + i + ", 102);'><strong><font color='#FF6600'> " + i + " </font></strong></a>";
				}
				else
				{
					strHtml += "<a href='#' onclick='return fnRetrieve(" + i + ", 102);'> " + i + " </a>";
				}	
				
				strHtml += "&nbsp;|&nbsp;";
			} 
			// 다음하고 마지막만 있음
			strHtml += "&nbsp;&nbsp;&nbsp;<a href='javascript:fnRetrieve(" + intNext + ", 102)'><img src=\"/img/board/next.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";
			strHtml += "&nbsp;&nbsp;&nbsp;<a href='javascript:fnRetrieve(" + intTotPage + ", 102)'><img src=\"/img/board/nextend.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";
			
		}else{
			if(intTotPage != undefined){
				// 처음, 이전
				strHtml += "&nbsp;&nbsp;&nbsp;<a href='#' onclick='return fnRetrieve(1, 102);'><img src=\"/img/board/prev.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";
				strHtml += "&nbsp;&nbsp;&nbsp;<a href='#' onclick='return fnRetrieve(" + intPrev + ", 102);'><img src=\"/img/board/prevend.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";
				
				strHtml += "&nbsp;|&nbsp;";
			}
			
			for(var i = iStart; i <= intTotPage; i++){		
				if(i == intCurPage)
				{
					strHtml += "<a href='#' onclick='return fnRetrieve(" + i + ", 102);'><strong><font color='#FF6600'> " + i + " </font></strong></a>";
				}
				else
				{
					strHtml += "<a href='#' onclick='return fnRetrieve(" + i + ", 102);'> " + i + " </a>";
				}	
				
				strHtml += "&nbsp;|&nbsp;";
			} 
		}	
	}
	
	objList.innerHTML = strHtml;	
}


/**
* @Function 명		: cfPagingMakeGubun
* @Function 설명		: 페이징 처리
* @Param 			: Obj, intCurPage, intTotPage
* @사용 Event 		:
* @see 				:
*/
function cfPagingMakeGubun(Obj, intCurPage, intTotPage, intCnt, strGubun)
{
	var objList = document.getElementById(Obj);
	
	// 페이징 리스트 갯수
	var iTotCnt = Math.ceil(eval(intTotPage)/intCnt);
	var intPageCnt = Math.ceil(eval(intCurPage)/intCnt);
	
	var iStart  = ((eval(intPageCnt) - 1) * eval(intCnt)) + 1;
	var iEnd    = eval(intPageCnt) * eval(intCnt);

	var intPrev = eval(iStart) - 1;
	var intNext = eval(iEnd) + 1;
	
	var strHtml = "";
		
	if(intPageCnt == 1) {
		if(intPageCnt == iTotCnt){

			strHtml += "&nbsp;|&nbsp;";
			
			for(var i = iStart; i <= intTotPage; i++){		
				if(i == intCurPage)
				{
					strHtml += "<a href=\"#\" onclick=\"return fnRetrieve(" + i + ", '" + strGubun + "');\"><strong><font color=\"#FF6600\"> " + i + " </font></strong></a>";
				}
				else
				{
					strHtml += "<a href=\"#\" onclick=\"return fnRetrieve(" + i + ", '" + strGubun + "');\"> " + i + " </a>";
				}	
				
				strHtml += "&nbsp;|&nbsp;";
			} 
		}else{

			strHtml += "&nbsp;|&nbsp;";
			
			for(var i = iStart; i <= iEnd; i++){		
				if(i == intCurPage)
				{
					strHtml += "<a href=\"#\" onclick=\"return fnRetrieve(" + i + ", '" + strGubun + "');\"><strong><font color=\"#FF6600\"> " + i + " </font></strong></a>";
				}
				else
				{
					strHtml += "<a href=\"#\" onclick=\"return fnRetrieve(" + i + ", '" + strGubun + "');\"> " + i + " </a>";
				}	
				
				strHtml += "&nbsp;|&nbsp;";
			} 
			// 다음하고 마지막만 있음
			strHtml += "&nbsp;&nbsp;&nbsp;<a href=\"#\" onclick=\"return fnRetrieve(" + intNext + ", '" + strGubun + "');\"><img src=\"/images/page_right.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";
			strHtml += "&nbsp;&nbsp;&nbsp;<a href=\"#\" onclick=\"return fnRetrieve(" + intTotPage + ", '" + strGubun + "');\"><img src=\"/images/page_end.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";
		}	
	} else{
		if(intPageCnt < iTotCnt){
			// 처음, 이전
			strHtml += "&nbsp;&nbsp;&nbsp;<a href=\"#\" onclick=\"return fnRetrieve(1, '" + strGubun + "');\"><img src=\"/images/page_first.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";
			strHtml += "&nbsp;&nbsp;&nbsp;<a href=\"#\" onclick=\"return fnRetrieve(" + intPrev + ", '" + strGubun + "');\"><img src=\"/images/page_left.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";

			strHtml += "&nbsp;|&nbsp;";
			
			for(var i = iStart; i <= iEnd; i++){		
				if(i == intCurPage)
				{
					strHtml += "<a href=\"#\" onclick=\"return fnRetrieve(" + i + ", '" + strGubun + "');\"><strong><font color=\"#FF6600\"> " + i + " </font></strong></a>";
				}
				else
				{
					strHtml += "<a href=\"#\" onclick=\"return fnRetrieve(" + i + ", '" + strGubun + "');\"> " + i + " </a>";
				}	
				
				strHtml += "&nbsp;|&nbsp;";
			} 
			// 다음하고 마지막만 있음
			strHtml += "&nbsp;&nbsp;&nbsp;<a href=\"#\" onclick=\"return fnRetrieve(" + intNext + ", '" + strGubun + "');\"><img src=\"/images/page_right.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";
			strHtml += "&nbsp;&nbsp;&nbsp;<a href=\"#\" onclick=\"return fnRetrieve(" + intTotPage + ", '" + strGubun + "');\"><img src=\"/images/page_end.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";
			
		}else{
			if(intTotPage != undefined){
				// 처음, 이전
				strHtml += "&nbsp;&nbsp;&nbsp;<a href=\"#\" onclick=\"return fnRetrieve(1, '" + strGubun + "');\"><img src=\"/images/page_first.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";
				strHtml += "&nbsp;&nbsp;&nbsp;<a href=\"#\" onclick=\"return fnRetrieve(" + intPrev + ", '" + strGubun + "');\"><img src=\"/images/page_left.gif\" style=\"cursor:hand\" align=\"absmiddle\" border=\"0\" /></a>";
				
				strHtml += "&nbsp;|&nbsp;";
			}
			
			for(var i = iStart; i <= intTotPage; i++){		
				if(i == intCurPage)
				{
					strHtml += "<a href=\"#\" onclick=\"return fnRetrieve(" + i + ", '" + strGubun + "');\"><strong><font color=\"#FF6600\"> " + i + " </font></strong></a>";
				}
				else
				{
					strHtml += "<a href=\"#\" onclick=\"return fnRetrieve(" + i + ", '" + strGubun + "');\"> " + i + " </a>";
				}	
				
				strHtml += "&nbsp;|&nbsp;";
			} 
		}	
	}
	
	objList.innerHTML = strHtml;	
}

/**
* @Function 명		: cfMakeAttachFileSenddingData
* @Function 설명		: 첨부파일을 JSON Object 문자열로 만듬
* @Param 			: Obj, intCurPage, intTotPage
* @사용 Event 		:
* @see 				:
*/
function cfMakeAttachFileSenddingData(arrFileData, intGubun) 
{
    var iRow;
	var strMade;
	var token;
	var rowStartToken, rowEndToken, jsonStartToken, jsonEndToken;
	token = ",";
	rowStartToken = "{";
	rowEndToken = "}";
	jsonStartToken = "[";
	jsonEndToken = "]";
	
	strMade =  jsonStartToken;//[

	//alert("파일갯수 arrFileData.length = " + arrFileData.length);
	for(var i = 0 ; i < arrFileData.length ; i++)
	{
		var arrTemp = arrFileData[i].split('||');
		
		if(i != 0)
		{
			strMade += ",";// {로를 구분하기위해!
		}
		//형식  
		//{ 내용 },{ 내용 },{ 내용 },{ 내용 }~~~ 
		strMade += rowStartToken;//{
	
		strMade += "orgFilename:" + JSON.stringify(arrTemp[0]);
		strMade += token;//,
		strMade += "sysFilename:" + JSON.stringify(arrTemp[1]);
		strMade += token;//,
		strMade += "sysPath:" + JSON.stringify(arrTemp[2]);
		strMade += token;//,
		strMade += "sysSize:" + JSON.stringify(arrTemp[3]);
		
		strMade += rowEndToken;//}
	}
	
    strMade += jsonEndToken;//]
	
	//실제적으로 [{ 내용 },{ 내용 },{ 내용 },{ 내용 }~~~]요렇게 들어감
	return strMade;
}

/**
* @Function 명		: media_save
* @Function 설명		: 데브피아 WebEdit 동영상 및 음악 파일 서버에 파일 Upload
* @Param 			: 
* @사용 Event 		:
* @see 				:
*/
function media_save(DataImagesUrl, obj)
{
    var DextDom = obj.GetHTMLDOM();
    var cmedia = DextDom.parentWindow.document.getElementsByTagName("embed");
    
    for (var i=0; i<cmedia.length; i++){                    //개수만큼 반복
        sFile = cmedia[i].getAttribute("src");
        scheck = sFile.lastIndexOf("http://");              //동영상경로가 서버경로인지 확인한다

        if ( scheck == -1)  {                      //서버경로가 아닌 경우만 실행한다
            var localFile = sFile.substr(sFile.lastIndexOf("//") + 1);          // file:// 또는 file:/// 의 경우가 있다
            var localFile = localFile.substr(localFile.lastIndexOf("/") + 1);   //file:/// 의 경우 제거
            var sExt = sFile.substr(sFile.lastIndexOf("\\") + 1);
            sExt = sExt.substr(sExt.lastIndexOf("."));
        
            var cdate = new Date();
            var cyear = cdate.getYear();
            var cmonth = cdate.getMonth()+1;
            var cday = cdate.getDate();
            serverFile = cyear + "" + cmonth + "" + cday + "_" + Math.floor(Math.random()*100000000) + sExt;  //파일명이 중복되지 않게 변경한다

            obj.FileUploader( DataImagesUrl + serverFile, localFile, "", "");   // 서버로 동영상 전송

            cmedia[i].setAttribute("src", DataImagesUrl + serverFile);              // 로컬경로를 서버경로 변경한다
        } // end if 
    } // end for
}//end function

/**
* @Function 명		: media_lms_save
* @Function 설명		: 데브피아 WebEdit 동영상 및 음악 파일 서버에 파일 Upload
* @Param 			: 
* @사용 Event 		:
* @see 				:
*/
function media_lms_save(DataImagesUrl, obj, fileName)
{
    var DextDom = obj.GetHTMLDOM();
    var cmedia = DextDom.parentWindow.document.getElementsByTagName("embed");
    
    for (var i=0; i<cmedia.length; i++){                    //개수만큼 반복
        sFile = cmedia[i].getAttribute("src");
        scheck = sFile.lastIndexOf("http://");              //동영상경로가 서버경로인지 확인한다

        if ( scheck == -1)  {                      //서버경로가 아닌 경우만 실행한다
            var localFile = sFile.substr(sFile.lastIndexOf("//") + 1);          // file:// 또는 file:/// 의 경우가 있다
            var localFile = localFile.substr(localFile.lastIndexOf("/") + 1);   //file:/// 의 경우 제거
            var sExt = sFile.substr(sFile.lastIndexOf("\\") + 1);
            sExt = sExt.substr(sExt.lastIndexOf("."));
        
            var cdate = new Date();
            var cyear = cdate.getYear();
            var cmonth = cdate.getMonth()+1;
            var cday = cdate.getDate();
            serverFile = fileName + "_" + cyear + "" + cmonth + "" + cday + "_" + Math.floor(Math.random()*100000000) + sExt;  //파일명이 중복되지 않게 변경한다

            obj.FileUploader( DataImagesUrl + serverFile, localFile, "", "");   // 서버로 동영상 전송

            cmedia[i].setAttribute("src", DataImagesUrl + serverFile);              // 로컬경로를 서버경로 변경한다
        } // end if 
    } // end for
}//end function


/**
* @Function 명		: getLmstb211No
* @Function 설명	    : 개설강좌 코드 생성
* @Param 			: 
* @return값			: 
* @사용 Event 		:
* @see 				:
*/
function getLmstb211No(sGubun, sYear, sTerm, sDiv) {
	
	var strTmp = "";
	
	if(sGubun == "PKNUAC"){
		strTmp = "199607001";
	} else {
		if(sTerm.toString().length == 1) sTerm = "0" + sTerm;
		
		strTmp = sYear + sTerm + sDiv;
	}
	
    return strTmp;
}

/**
* @Function 명		: cfSpecialChaChk()
* @Function 설명		: 파일저장시 특수문자 체크
* @Param 			: Obj
* @사용 Event 		:
* @see 				:
*/
function cfSpecialChaChk(objFile) 
{
	var iCount = 0;
	var bCheck = true;
	
	for(var i=1; i <= objFile.Count; i++){
		
		var strNm = objFile(i).Name;
		var strSplit = strNm.split("\\");
		var intSplit = strSplit.length;		
		
		strNm = strSplit[intSplit-1];
		
		if( (strNm.indexOf("#") != -1)  
		 || (strNm.indexOf(";") != -1)
		 || (strNm.indexOf("`") != -1)
		 || (strNm.indexOf("'") != -1)
		 || (strNm.indexOf("^") != -1)
		 || (strNm.indexOf("&") != -1)
		 || (strNm.indexOf("%") != -1)
		 || (strNm.indexOf("{") != -1)
		 || (strNm.indexOf("}") != -1) )
		{
			iCount = iCount + 1;
		} 
	}
	
	if(iCount > 0){
		alert("특수문자(공백, #, ;, `, ^, &, ......)가 들어간 파일을 등록할 수 없습니다!!!");
		bCheck = false;
	}
	
	return bCheck;
}

// UTF-8 처리
// encodeURL
function encodeURL(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 stringSplit(str)
{
	var filePath = "";
	var fileName = "";
	var strLen = 0;
	var strRtn = "";
	
	strLen = str.lastIndexOf('/') + 1;
	
	filePath = str.substring(0, strLen);
	//fileName = encodeURL(str.substring(strLen));
	fileName = encodeURIComponent(str.substring(strLen));
	strRtn = filePath + fileName;
	
    return strRtn;
}

// 두날짜를 읽어서 크기를 비교
// 뒤의 날짜가 크면 -1, 작거나 같으면 1을 리턴한다.
function cfCheckDateTime(startDT, endDT) 
{
    var retValue = 0;
    var countTime = 0;
    
    startDT = startDT.replace(/ /gi, "");
    startDT = startDT.replace(/\-/gi, "");
    startDT = startDT.replace(/\./gi, "");
    startDT = startDT.replace(/\//gi, "");
    startDT = startDT.replace(/\:/gi, "");
    
    endDT = endDT.replace(/ /gi, "");
    endDT = endDT.replace(/\-/gi, "");
    endDT = endDT.replace(/\./gi, "");
    endDT = endDT.replace(/\//gi, "");
    endDT = endDT.replace(/\:/gi, "");
    
	countTime = eval(endDT) - eval(startDT);   
	
	if (countTime > 0) 
	{	
		retValue = false;
	} 
	else 
	{	
		retValue = true;
	}
	
	return retValue;
}

//두날짜를 읽어서 일수 및 월수 차이를 계산
function cfCheckDateTimeCnt(startDT, endDT, gubun) 
{
    var retValue = 0;
    var countTime = 0;
    
    startDT = startDT.replace(/ /gi, "");
    startDT = startDT.replace(/\-/gi, "");
    startDT = startDT.replace(/\./gi, "");
    startDT = startDT.replace(/\//gi, "");
    startDT = startDT.replace(/\:/gi, "");
    
    endDT = endDT.replace(/ /gi, "");
    endDT = endDT.replace(/\-/gi, "");
    endDT = endDT.replace(/\./gi, "");
    endDT = endDT.replace(/\//gi, "");
    endDT = endDT.replace(/\:/gi, "");
	if(gubun == "D") {
	    retValue = (endDT.getTime() - startDT.getTime())/(1000*60*60*24);
	} else {
	    if(endDT.substring(0,6) == startDT.substring(0,6)) {
	        retValue = (endDT.substring(4,6) *1) - (startDT.substring(4,6) *1);
	    } else {
	        retValue = Math.floor((endDT.getTime() - startDT.getTime())/(1000*60*60*24*365.25/12));
	    }
	}
	
	alert(retValue);
	
	return retValue;
}


//그리드 데이터 오브젝트를 리턴
//일반 데이터 사용시 + 프로그래스바 사용안함
function cfGridObject(obj) 
{
	var iRow;
	var strMade;
	var token;
	var chkCnt = 1;
	var rowStartToken, rowEndToken, jsonStartToken, jsonEndToken;
	token = ",";
	rowStartToken = "{";
	rowEndToken = "}";
	jsonStartToken = "[";
	jsonEndToken = "]";
	
	strMade =  "dataGrid = ";
	
	strMade +=  rowStartToken;	//{

	strMade += "rows:";	
	
	strMade +=  jsonStartToken;	//[
	
	if(obj.rows.length > 0)
	{
		for(var i=0; i < obj.rows.length; i++){
	
			if( i != 0){
				strMade += token;
			}
			
			strMade += rowStartToken;	//{
	
			strMade += "id:'" + i + "'";
			strMade += token;//,
			
			strMade += "data:";//,
			strMade +=  jsonStartToken;	//[
			
			var colIndex = 0;
			
			for(var j=0; j<obj.cnum ; j++)
			{
				if( j != 0){
					strMade += token;
				}
				
				colIndex = j + 1;
				var strJSON = eval("obj.rows[i].id" + colIndex);
				
				strMade += JSON.stringify(strJSON);
			}
			
			strMade += jsonEndToken;	//]
			strMade += rowEndToken;		//}	
					
		}
	}
	
	strMade += jsonEndToken;	//]
	strMade += rowEndToken;	//}
	//alert('str '+strMade);
	return eval(strMade);
}


// 그리드 데이터 오브젝트를 리턴
// 일반 데이터 사용시 + 프로그래스 바 사용시
function cfGridJSONObject(obj, objPg) 
{
	var iRow;
	var strMade;
	var token;
	var chkCnt = 1;
	var rowStartToken, rowEndToken, jsonStartToken, jsonEndToken;
	token = ",";
	rowStartToken = "{";
	rowEndToken = "}";
	jsonStartToken = "[";
	jsonEndToken = "]";
	
	strMade =  "dataGrid = ";
	
	strMade +=  rowStartToken;	//{

	strMade += "rows:";	
	
	strMade +=  jsonStartToken;	//[
	
	//20110715 1847 by hbs Fix No Rows Created
	//alert(obj.rows);
	if(obj.rows != null)
	{
		for(var i=0; i<obj.rows.length; i++)
		{
			if( i != 0)
			{
				strMade += token;//,
			}
			
			strMade += rowStartToken;	//{

			strMade += "id:'" + i + "'";
			strMade += token;//,
			
			strMade += "data:";
			strMade +=  jsonStartToken;	//[
			
			var colIndex = 0;
			
			for(var j=0; j<obj.cnum ; j++)
			{
				if( j != 0)
				{
					strMade += token;//,
				}
								
				colIndex = j + 1;
				var strJSON = eval("obj.rows[i].id" + colIndex);				
				strMade += JSON.stringify(strJSON);
			}
			
			strMade += jsonEndToken;	//]
			strMade += rowEndToken;		//}	
			
			// 프로그래스바 생성
			cfProgressBar(objPg, i, obj.rows.length);
			
		}
		
	}

  	strMade += jsonEndToken;	//]
  	strMade += rowEndToken;	//}
  	  	
	return eval(strMade);
}


function cfGridJSONObject_ByParam(obj, strGubun) 
{
	var iRow;
	var strMade;
	var token;
	var chkCnt = 1;
	var rowStartToken, rowEndToken, jsonStartToken, jsonEndToken;
	token = ",";
	rowStartToken = "{";
	rowEndToken = "}";
	jsonStartToken = "[";
	jsonEndToken = "]";
	
	strMade =  "dataGrid = ";
	
	strMade +=  rowStartToken;	//{

	strMade += "rows:";	
	
	strMade +=  jsonStartToken;	//[
	
	if(strGubun == "1")//sys052tb00m00 좌측 조회
	{
		if(obj.rows != null)
		{
			for(var i=0; i<obj.rows.length; i++)
			{
				if( i != 0)
				{
					strMade += token;//,
				}
				
				strMade += rowStartToken;	//{

				strMade += "id:'" + i + "'";
				strMade += token;//,
				
				strMade += "data:";
				strMade +=  jsonStartToken;	//[
				
				var colIndex = 0;
				
				for(var j=0; j<obj.cnum ; j++)
				{
					if( j != 0)
					{
						strMade += token;//,
					}
									
					colIndex = j + 1;

					//20110916 1008 by hbs 테스트했음
					/*
					if(i == obj.rows.length -1)
					{
						alert("[" + colIndex + "]" + eval("obj.rows[i].id" + colIndex));
					}
					*/				
					
					var strJSON = "";
					
					if(colIndex == 4)//내용에 여러줄이 있을경우 로우가 늘어나므로 어짜피 쓰지 않으니깐 삭제
					{
						obj.rows[i].id4 = "";
					}					
					else if(colIndex == 7)//날짜변환! + [날짜 ~날짜] 형식으로 변환
					{
						var strJSON_Temp = "";

						strJSON = eval("obj.rows[i].id" + colIndex);//시작일자

						strJSON_Temp = eval("obj.rows[i].id" + (colIndex + 2));//종료일자
						
						strJSON = strJSON.substring(0,4) + "." + strJSON.substring(4,6) + "." + strJSON.substring(6,8);
						strJSON += " ~ "; 
						strJSON += strJSON_Temp.substring(0,4) + "." + strJSON_Temp.substring(4,6) + "." + strJSON_Temp.substring(6,8);

					}
					else if(colIndex == 11)//확정일 형식으로 변환
					{
						strJSON = eval("obj.rows[i].id" + colIndex);//시작일자
						if(strJSON != "")
						{
							strJSON = strJSON.substring(0,4) + "." + strJSON.substring(4,6) + "." + strJSON.substring(6,8);
						}
					}
					else if(colIndex == 12)//발표일 형식으로 변환
					{
						strJSON = eval("obj.rows[i].id" + colIndex);//시작일자
						if(strJSON != "")
						{
							strJSON = strJSON.substring(0,4) + "." + strJSON.substring(4,6) + "." + strJSON.substring(6,8);
						}
					}
					else
					{
						strJSON = eval("obj.rows[i].id" + colIndex);
					}
					
					strMade += JSON.stringify(strJSON);
					
					//alert("[colIndex:" + colIndex + "]" + "[JSON.stringify(strJSON):" + strJSON + "]");
				}
				
				strMade += jsonEndToken;	//]
				strMade += rowEndToken;		//}	
				//alert(strMade);
				// 프로그래스바 생성
				//cfProgressBar(objPg, i, obj.rows.length);
				
			}
			
		}
	}
	else if(strGubun == "2")//sys052tb00m00 좌측 조회
	{
		if(obj.rows != null)
		{
			//alert(obj.rows[0].value);
			for(var i=0; i<obj.rows.length; i++)
			{
				if( i != 0)
				{
					strMade += token;//,
				}
				
				strMade += rowStartToken;	//{

				strMade += "id:'" + i + "'";
				strMade += token;//,
				
				strMade += "data:";
				strMade +=  jsonStartToken;	//[
				
				var colIndex = 0;
				
				for(var j=0; j<obj.cnum ; j++)
				{
					if( j != 0)
					{
						strMade += token;//,
					}
									
					colIndex = j + 1;
					
					var strJSON = "";
					if(colIndex == 5)//유형 명칭을 변경
					{
						var strJSON_Temp = "";
						strJSON_Temp = eval("obj.rows[i].id" + colIndex);//SYS051TB01_PBM_TYP
						strJSON_Temp = cfTypeToName(strJSON_Temp);//유형을 숫자->문자로변경
						
						strJSON = strJSON_Temp;
					}
					else
					{
						strJSON = eval("obj.rows[i].id" + colIndex);
					}
					
					strMade += JSON.stringify(strJSON);
					
					//alert("[colIndex:" + colIndex + "]" + "[JSON.stringify(strJSON):" + strJSON + "]");
				}
				
				strMade += jsonEndToken;	//]
				strMade += rowEndToken;		//}	
				
				// 프로그래스바 생성
				//cfProgressBar(objPg, i, obj.rows.length);
				
			}
			
		}
	}
	else if(strGubun == "3")//crs101tb01m00 좌측 조회 - Select된것과 표시되어야 하는 항목의 순서가 틀리므로
	{
		if(obj.rows != null)
		{
			//alert(obj.rows[0].value);
			for(var i=0; i<obj.rows.length; i++)
			{
				if( i != 0)
				{
					strMade += token;//,
				}
				
				strMade += rowStartToken;	//{

				strMade += "id:'" + i + "'";
				strMade += token;//,
				
				strMade += "data:";
				strMade +=  jsonStartToken;	//[
				
				var colIndex = 0;
				
				for(var j=0; j<obj.cnum ; j++)
				{
					if( j != 0)
					{
						strMade += token;//,
					}
									
					colIndex = j + 1;
					
					var strJSON = "";
					if(colIndex == 5)//ERP 코드
					{
						strJSON = eval("obj.rows[i].id" + "13");//CRS101TB01_ERP_NO
					}					
					else if(colIndex == 6)//상품명
					{
						strJSON = eval("obj.rows[i].id" + "5");//CRS101TB01_NM
					}					
					else if(colIndex == 7)//정상가격
					{
						strJSON = eval("obj.rows[i].id" + "14") + "원";//CRS101TB01_STD_MON
					}
					else if(colIndex == 8)//등록일
					{
						strJSON = eval("obj.rows[i].id" + "27");//CRE_DATE
					}
					else
					{
						strJSON = eval("obj.rows[i].id" + colIndex);
					}
					
					strMade += JSON.stringify(strJSON);
					
					//alert("[colIndex:" + colIndex + "]" + "[JSON.stringify(strJSON):" + strJSON + "]");
				}
				
				//alert(strMade);
				
				strMade += jsonEndToken;	//]
				strMade += rowEndToken;		//}	
				
				// 프로그래스바 생성
				//cfProgressBar(objPg, i, obj.rows.length);
				
			}
			
		}
	}
	

  	strMade += jsonEndToken;	//]
  	strMade += rowEndToken;	//}
  	  	
	return eval(strMade);
}

function cfTypeToName(TypeNum)
{
	//if(TypeNum == 1)
	if(TypeNum == "SYS001")
	{
		//return "다중선택형";
		return "객관식(One)";
	}
	//else if(TypeNum == 2)
	else if(TypeNum == "SYS002")
	{
		//return "서술유사형";
		return "주관식";
	}
	//else if(TypeNum == 3)
	else if(TypeNum == "SYS003")
	{
		//return "단답선택형";
		return "객관식(Multi)";
	}
	//else if(TypeNum == 4)
	else if(TypeNum == "SYS004")
	{
		return "서술형";
	}
	
	alert("잘못된 항목타입 값입니다.");
	return "-1";
}

// 그리드 데이터 오브젝트를 리턴
// 메뉴 데이터 사용시
function cfGridMenuJSONObject(obj) 
{
	var iRow;
	var strMade;
	var token;
	var chkCnt = 1;
	var rowStartToken, rowEndToken, jsonStartToken, jsonEndToken;
	token = ",";
	rowStartToken = "{";
	rowEndToken = "}";
	jsonStartToken = "[";
	jsonEndToken = "]";
	
	strMade =  "dataGrid = ";
	
	strMade +=  rowStartToken;	//{

	strMade += "rows:";	
	
	strMade +=  jsonStartToken;	//[

	for(var i=0; i<obj.rows.length; i++){

		if( i != 0){
			strMade += token;
		}
		
		strMade += rowStartToken;	//{

		strMade += "id:'" + i + "'";
		strMade += token;//,
		
		strMade += "data:";//,
		strMade +=  jsonStartToken;	//[
		
		var colIndex = 0;
		
		for(var j=0; j<obj.cnum ; j++)
		{
			if( j != 0){
				strMade += token;
			}
			
			// 레벨값을 구함
			colIndex = j + 1;
			var strJSON = eval("obj.rows[i].id" + colIndex);
			
			var cntLvl = eval("obj.rows[i].id12");
						
			if( j == 4)
			{
				var strTmp = "";
				for(var k=1 ; k<cntLvl ; k++)
				{
					strTmp += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
				}
				
				strTmp = strTmp + strJSON;
				
				strMade += JSON.stringify(strTmp);
			}
			else if( j == 6)
			{	
				var strTmp = "";
								
				//strTmp += "<img src=\"/images/btn_add.gif\" style=\"cursor:hand\" onclick=\"fnWindowPopup('sys022pg00i00.jsp','I','gridMain','" + i + "');\" />";
				strTmp += "<img src=\"/images/btn_add.gif\" style=\"cursor:hand\" onclick=\"return fnWindowPopup('sys022pg00i00.jsp','I','gridMain_Insert_Popup','" + i + "');\" />";
				
				if(cntLvl > 1)
				{
					//strTmp += "&nbsp;<img src=\"/images/btn_del.gif\" style=\"cursor:hand\" onclick=\"fnData('gridMain', 'D');\" />";
					strTmp += "&nbsp;<img src=\"/images/btn_del.gif\" style=\"cursor:hand\" onclick=\"return fnData('gridMain_Del', 'D');\" />";
				}
				
				strMade += JSON.stringify(strTmp);
			}
			else
			{
				strMade += JSON.stringify(strJSON);
			}
		}
		
		strMade += jsonEndToken;	//]
		strMade += rowEndToken;		//}	
	}
	
	strMade += jsonEndToken;	//]
	strMade += rowEndToken;	//}
	
	return eval(strMade);
}

// 게시판 데이터 오브젝트를 리턴
// 메뉴 데이터 사용시
function cfGridBoardJSONObject(obj) 
{
	var iRow;
	var strMade;
	var token;
	var chkCnt = 1;
	var rowStartToken, rowEndToken, jsonStartToken, jsonEndToken;
	token = ",";
	rowStartToken = "{";
	rowEndToken = "}";
	jsonStartToken = "[";
	jsonEndToken = "]";
	
	strMade =  "dataGrid = ";
	
	strMade +=  rowStartToken;	//{

	strMade += "rows:";	
	
	strMade +=  jsonStartToken;	//[

	for(var i=0; i<obj.rows.length; i++){

		if( i != 0){
			strMade += token;
		}
		
		strMade += rowStartToken;	//{

		strMade += "id:'" + i + "'";
		strMade += token;//,
		
		strMade += "data:";//,
		strMade +=  jsonStartToken;	//[
		
		var colIndex = 0;
		
		for(var j=0; j<obj.cnum ; j++)
		{
			if( j != 0){
				strMade += token;
			}
			
			// 레벨값을 구함
			colIndex = j + 1;
			var strJSON = eval("obj.rows[i].id" + colIndex);
			var cntLvl = eval("obj.rows[i].id20");
			var cntDcnt = eval("obj.rows[i].id22");
			
			if( j == 3)
			{
				var strTmp = "";
				
				for(var q=0; q<cntLvl ; q++){
					
					strTmp += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";

		        	if(q == (cntLvl - 1)){
		        		strTmp += "<img src='/img/board/re.gif' width='7' height='14' align='absmiddle' />";
		        	}
		        }
				
				strTmp += strJSON;
				
				// 7일보다 작은면 신규 데이터 처리
				if(cntDcnt <= 7)
				{
					strTmp += "&nbsp;&nbsp;<img src='/img/main/new.gif' width='11' height='9' align='absmiddle' />";
				}
				
				strMade += JSON.stringify(strTmp);
			}
			else
			{
				strMade += JSON.stringify(strJSON);
			}
		}
		
		strMade += jsonEndToken;	//]
		strMade += rowEndToken;		//}	
		
	}
	
	strMade += jsonEndToken;	//]
	strMade += rowEndToken;	//}
	
	return eval(strMade);
}

// 프로그레스바 사용하기
function cfProgressBar(objPg, ing, end)
{  
	var iTemp = Math.round((ing+1)/end*100);
	objPg.setPercentage(iTemp);
}  

// 엑셀사용하기 위하여 COLUME 알파뱃 값을 리턴(EXCEL)
function cfExcelCoulmNm(idx)
{
	var strTmp = "A";
	
	switch(idx){
		case 1 : 
			strTmp = "A";
			break;
		case 2 : 
			strTmp = "B";
			break;
		case 3 : 
			strTmp = "C";
			break;
		case 4 : 
			strTmp = "D";
			break;
		case 5 : 
			strTmp = "E";
			break;
		case 6 : 
			strTmp = "F";
			break;
		case 7 : 
			strTmp = "G";
			break;
		case 8 : 
			strTmp = "H";
			break;
		case 9 : 
			strTmp = "I";
			break;
		case 10 : 
			strTmp = "J";
			break;
		case 11 : 
			strTmp = "K";
			break;
		case 12 : 
			strTmp = "L";
			break;
		case 13 : 
			strTmp = "M";
			break;
		case 14 : 
			strTmp = "N";
			break;
		case 15 : 
			strTmp = "O";
			break;
		case 16 : 
			strTmp = "P";
			break;
		case 17 : 
			strTmp = "Q";
			break;
		case 18 : 
			strTmp = "R";
			break;
		case 19 : 
			strTmp = "S";
			break;
		case 20 : 
			strTmp = "T";
			break;
		case 21 : 
			strTmp = "U";
			break;
		case 22 : 
			strTmp = "V";
			break;
		case 23 : 
			strTmp = "W";
			break;
		case 24 : 
			strTmp = "X";
			break;
		case 25 : 
			strTmp = "Y";
			break;
		case 26 : 
			strTmp = "Z";
			break;
		case 27 : 
			strTmp = "AA";
			break;
		case 28 : 
			strTmp = "AB";
			break;
		case 29 : 
			strTmp = "AC";
			break;
		case 30 : 
			strTmp = "AD";
			break;
		case 31 : 
			strTmp = "AE";
			break;
		case 32 : 
			strTmp = "AF";
			break;
		case 33 : 
			strTmp = "AG";
			break;
		case 34 : 
			strTmp = "AH";
			break;
		case 35 : 
			strTmp = "AI";
			break;
		case 36 : 
			strTmp = "AJ";
			break;
		case 37 : 
			strTmp = "AK";
			break;
		case 38 : 
			strTmp = "AL";
			break;
		case 39 : 
			strTmp = "AM";
			break;
		case 40 : 
			strTmp = "AN";
			break;
		case 41 : 
			strTmp = "AO";
			break;
		case 42 : 
			strTmp = "AP";
			break;
		case 43 : 
			strTmp = "AQ";
			break;
		case 44 : 
			strTmp = "AR";
			break;
		case 45 : 
			strTmp = "AS";
			break;
		case 46 : 
			strTmp = "AT";
			break;
		case 47 : 
			strTmp = "AU";
			break;
		case 48 : 
			strTmp = "AV";
			break;
		case 49 : 
			strTmp = "AW";
			break;
		case 50 : 
			strTmp = "AX";
			break;
		case 51 : 
			strTmp = "AY";
			break;
		case 52 : 
			strTmp = "AZ";
			break;
	}
	
	return strTmp
}

//20110825 1311 by hbs FCK의 내용만 return
function cfGetFCK_Body(strInstanceName)
{
	var obj_Temp = FCKeditorAPI.GetInstance(strInstanceName);
	var div_Temp = document.createElement("DIV");
	div_Temp.innerHTML = obj_Temp.GetXHTML();
	
	return div_Temp.innerText;
}

//20110825 1311 by hbs FCK의 내용만 return
function cfGetFCK_BodyToString(strHTML)
{
	var div_Temp = document.createElement("DIV");
	div_Temp.innerHTML = strHTML;
	
	return div_Temp.innerText;
}


//그리드 데이터 오브젝트를 리턴
//브랜드사이트 메뉴 데이터 사용시
function cfGridMenuBrandJSONObject(obj) 
{
	var iRow;
	var strMade;
	var token;
	var chkCnt = 1;
	var rowStartToken, rowEndToken, jsonStartToken, jsonEndToken;
	token = ",";
	rowStartToken = "{";
	rowEndToken = "}";
	jsonStartToken = "[";
	jsonEndToken = "]";
	
	strMade =  "dataGrid = ";
	
	strMade +=  rowStartToken;	//{

	strMade += "rows:";	
	
	strMade +=  jsonStartToken;	//[

	for(var i=0; i<obj.rows.length; i++){

		if( i != 0){
			strMade += token;
		}
		
		strMade += rowStartToken;	//{

		strMade += "id:'" + i + "'";
		strMade += token;//,
		
		strMade += "data:";//,
		strMade +=  jsonStartToken;	//[
		
		var colIndex = 0;
		
		for(var j=0; j<obj.cnum ; j++)
		{
			if( j != 0){
				strMade += token;
			}
			
			// 레벨값을 구함
			colIndex = j + 1;
			var strJSON = eval("obj.rows[i].id" + colIndex);
			
			var cntLvl = eval("obj.rows[i].id7");
						
			if( j == 1)
			{
				var strTmp = "";
				for(var k=1 ; k<cntLvl ; k++)
				{
					strTmp += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
				}
				
				strTmp = strTmp + strJSON;
				
				strMade += JSON.stringify(strTmp);
			}
			else if( j == 4)
			{	
				var strTmp = "";
								
				//strTmp += "<img src=\"/images/btn_add.gif\" style=\"cursor:hand\" onclick=\"fnWindowPopup('sys022pg00i00.jsp','I','gridMain','" + i + "');\" />";
				strTmp += "<img src=\"/images/btn_add.gif\" style=\"cursor:hand\" onclick=\"return fnWindowPopup('cms201pg00i00.jsp','I','gridMain_Insert_Popup','" + i + "');\" />";
				
				if(cntLvl > 1)
				{
					//strTmp += "&nbsp;<img src=\"/images/btn_del.gif\" style=\"cursor:hand\" onclick=\"fnData('gridMain', 'D');\" />";
					strTmp += "&nbsp;<img src=\"/images/btn_del.gif\" style=\"cursor:hand\" onclick=\"return fnData('gridMain_Del', 'D');\" />";
				}
				
				strMade += JSON.stringify(strTmp);
			}
			else
			{
				strMade += JSON.stringify(strJSON);
			}
		}
		
		strMade += jsonEndToken;	//]
		strMade += rowEndToken;		//}	
	}
	
	strMade += jsonEndToken;	//]
	strMade += rowEndToken;	//}
	
	return eval(strMade);
}

//20110616 1153 by hbs id로 찾아서 숨기기 전역
function fngShowObject(strObjectName, strOnOff)
{
	var ObjTemp = document.getElementById(strObjectName);

	if(strOnOff == true)
	{
		ObjTemp.style.display = "";
	}
	else
	{
		ObjTemp.style.display = "none";
	}
}

function fnRetrieve_Page(iPageNum)
{
	document.frmProcess.jobGubun.value = "gridMain";
	
	fnRetrieve(iPageNum);
}


//패스워드 변경시 체크
function gfn_LoginValidate(id, newPwd)
{
	var strUserId = ""; 
	var strUserPwdNew = "";
	
	
	strUserId = id.value;
	strUserPwdNew = newPwd.value;
	if(strUserPwdNew.length== 0) {
		return true;
	}
	
/*	// 패스워드와 패스워드 NEW값이 다를 경우
	if(strUserPwd != strUserPwdNew)
    {
        alert("패스워드를 다시 입력하여 주십시오.");
        newPwd.value = "";
        newPwd.focus();
        return false;
    }
*/	
    // 아이디와 패스워드는 같이 사용할 수 없다.
    if(strUserId == strUserPwdNew)
    {
        alert("아이디와 같은 비밀번호를 설정할 수 없습니다.\n\n확인하시고 다시 입력 바랍니다.");
        newPwd.focus();
        return false;
    }
    
    // 8자리 이상 체크
    if(strUserPwdNew.length < 8)
    {
        alert("비밀번호는 8자리 이상이어야 합니다.\n\n확인하시고 다시 입력 바랍니다.");
        newPwd.value = "";
        newPwd.focus();
        return false;
    }
    
    // 문자, 숫자, 특수문자 혼합 체크
    var filter1=/[A-Za-z]/;
    var filter2=/[0-9_]/;
    var filter3=/[\~\!\@\#\$\%\^\&\*\(\)\_\+\=\-\`]/;
    
    if (filter1.test(strUserPwdNew) && filter2.test(strUserPwdNew) && filter3.test(strUserPwdNew))
    {
        // 정상 입력되었을 경우
    }
    else
    {
        alert("패스워드는 영문과 숫자, 특수문자가 모두 포함되어야 합니다.\n\n확인하시고 다시 입력 바랍니다.");
        newPwd.value = "";
        newPwd.focus();
        return false;
    }
    
    return true;
    
}


function gfn_SetCookie(cKey, cValue)  // name,pwd
{
    var date = new Date(); // 오늘 날짜
    // 만료시점 : 오늘날짜+10 설정
    var validity = 10;
    date.setDate(date.getDate() + validity);
    // 쿠키 저장
    document.cookie = cKey + '=' + escape(cValue) + ';expires=' + date.toGMTString();
}

function gfn_DelCookie(cKey) {
    // 동일한 키(name)값으로
    // 1. 만료날짜 과거로 쿠키저장
    // 2. 만료날짜 설정 않는다.
    //    브라우저가 닫힐 때 제명이 된다   

    var date = new Date(); // 오늘 날짜
    var validity = -1;
    date.setDate(date.getDate() + validity);
    document.cookie =
          cKey + "=;expires=" + date.toGMTString();
}

function gfn_GetCookie(cKey) {
    var allcookies = document.cookie;
    var cookies = allcookies.split("; ");
    for (var i = 0; i < cookies.length; i++) {
        var keyValues = cookies[i].split("=");
        if (keyValues[0] == cKey) {
            return unescape(keyValues[1]);
        }
    }
    return "";
}



function gfn_Log(obj, text) {
	obj.innerText = text;
}

