/*****************************************************************************
 * 파일명 : ta-utils.js
 * 작성일 : 2009. 02. 06
 * 작성자 : 한향덕
 * 설   명 : 공통적으로 쓰이는 스크립트 함수
 *****************************************************************************/


jsl.Utils = function() {
	
	var formId = "";    // 폼 아이디를 저장하는곳
 	var targetId = "";  // 타겟 아이디를 저장하는곳
 	
	// RowIndex의 자동 재설정을 보여주기 위해 생성시마다 1씩 증가하는 변수.
	var liRowIdx = 0;
	/**
     * toMoney 함수에서 내부적으로 사용
     * 입력 변수에 3 자리마다 콤마(,)를 붙여 반환한다.
     * @param field 콤마를 붙일 값
     */
    var formatCommas = function(numString) {
        var re = /,|\s+/g;
        numString = numString.replace(re, "");
        re = /(-?\d+)(\d{3})/;
        while (re.test(numString)) {
            numString = numString.replace(re, "$1,$2");
        }
        return numString;
    };

    /**
     * toKoreanFromMoney 에서 내부적으로 사용
     * 콤마(,)를 제거하여 반환한다.
     * @param {Object} numString 콤마를 제거할 값
     */
    var stripCommas = function(numString) {
        var re = /,/g;
        return numString.replace(re, "");
    };
    
 return {
	 
	 /**
	  **************************************************************************************
      *********************************** html 대한 function 모음 ***************************
      **************************************************************************************
      */
	 html : {
	 	/**
	     * 사이트의 전체 경로를 반환.
	     * @return url
	     */	 
	 	getLocalUrl : function (mypage) { 
			var myloc = location.href; 
			return myloc.substring(0, myloc.lastIndexOf('/')) + '/' + mypage;
		}, 	 
	 	/**
	     * <div> 태그의 내용 중 특정 텍스트(before)를 특정 텍스트(after)로 변경한다.
	     * @param innerHTML 값
	     * @param before 변경 전 텍스트 
	     * @param after 변경 후 텍스트
	     * @return 변경된 값
	     */
	  	replaceTextInDivValue : function(valueText, before, after) {
	        var re = new RegExp(before, "g");
	        valueText = valueText.replace(re, after);
	        return valueText;
	  	},	 
	    /**
	     * <div> 태그의 내용 중 특정 텍스트(before)를 특정 텍스트(after)로 변경한다.
	     * @param id <div> 태그의 id 속성 값
	     * @param before 변경 전 텍스트 
	     * @param after 변경 후 텍스트
	     */
     	replaceTextInDiv : function(id, before, after) {
	       var element = document.getElementById(id).firstChild;
           var re = new RegExp(before, "g");
           element.nodeValue = element.nodeValue.replace(re, after);
           return false;
     	},
     	
     	/**
	     * 특정 노드가 가지고 있는 모든 속성을 TEXTAREA에 출력한다. 개발 편의를 위해서
	     * 제공되는 함수이다.
	     * @param obj 속성 값을 알고자 하는 노드
	     */
	    getListProperties : function(obj) {
	       var objName;
	
	       if (obj.nodeName) {
	           objName = obj.nodeName;
	       } else {
	           objName = "navigator";
	       }
	
	       var result = "";
	       for (var i in obj) {
	           result += objName + "." + i + "=" + obj[i] + "\n";
	       }
	
	       var area = document.createElement("textarea");
	       area.rows = 20;
	       area.cols = 50;
	       var body = document.getElementsByTagName("BODY");
	       if (body) {
	           body[0].appendChild(area);
	       } else {
	           alert("body 태그가 있어야 합니다.");
	           return false;
	       }
	       area.value = result;
	       return false;
	    },

	    /**
	     * DIV 를 숨긴다.
	     * @param {String} divId
	     */
	    hiddenDiv : function(divId) {
	       var objName;
           var divObj = $(divId);
           divObj.style.visibility = 'hidden';
           divObj.style.display = 'none';
           jsl.Utils.selectbox.selectBoxAllVisible(divId);
	    },

	    /**
	     * DIV 를 보여준다.
	     * @param {String} divId
	     */
	    showDiv: function(/*String*/divId){
	       var divObj = $(divId);
	       divObj.style.visibility = 'visible';
	       divObj.style.display = 'block';
	       jsl.Utils.selectbox.selectBoxHidden(divId);
	    },
	    /**
	     * 우편번호 검색 창을 띄운다.
	     * @param formOb 폼 오브젝트
	     * @param postNoParam1 input Id 우편 번호 
	     * @param postNoParam2 input Id 우편 번호 
	     * @param postAddrParam input Id우편 주소
	     */
	    openPostPop: function(formOb, postNoParam1, postNoParam2, postAddrParam){
	    	var url = jsl.APPLICATION_CONTEXT_ROOT + "/com/postPop.action";
			JslWindow.postOpenWin(url, formOb, postNoParam1, postNoParam2, postAddrParam, "mainpop", 500, 440, "auto");
	    },
	    /**
	     * 우편번호를 검색한다.
	     */
	    doSearchPostAddr: function( ){
	    	// 동을 입력 안했을경우
	    	if(JslCMUtil.isNull($('postForm').dong.value)){
	    		jsl.Dialog.alert("검색어를 입력해주세요");
	    		return false;
	    	}
	    	var params = Form.serialize('postForm');
	    	var options = {
				parameters: params
			};
			var url = jsl.APPLICATION_CONTEXT_ROOT + "/com/getPost.action";
			jsl.Ajax.updater('postDiv', url, options);

	    },
	    /**
	     * 팝업에서 검색한 우편 주소를 부모창에 값을 넣어 준다.
	     * @param postNo 우편 번호 (122-123)
	     * @param addr   우편 주소
	     */
	    setPostAddrParent: function(postNo, addr){
	    	opener.JslHtml.setValue(postNo,addr, $('postParam1').value, $('postParam2').value, $('postAddrParam').value);
	    	window.close();
	    },
	    /**
	     * 우편 정보 값을 받은뒤 화면에 입력해준다.
	     * @param postNo 우편 번호
	     * @param addr 우편 주소
	     * @param post1Id 우편 번호 input Id 
	     * @param post2Id 우편 번호 input Id 
	     * @param postAddrId 우편 주소 input Id
	     */
	    setValue: function(postNo, addr, post1Id , post2Id, postAddrId ){
	    	$(post1Id).value = postNo.substring(0,3);
	    	$(post2Id).value = postNo.substring(4,7);
	    	$(postAddrId).value = addr; 
	    },
	
		// 함수명: 이메일 처리
		// 설   명: 이메일 도메인을 직접 선택할 경우 div영역을 hidden처리한다. 
		// 인   자: 없음
		// 리   턴: 없음
		go_changeEmail: function() {
			var selectOb = $('site');
			$('eml2').value = $F('site');
			JslSelect.setEmailToggle(selectOb,'eml2');
		},
	    
	    /**
	     * 팝업에서 검색한 고객정보를 부모창의 함수에 값정보를 넘겨준다.
	     * @param  0 custNo 고객일련번호
	     * @param  1 ssn	 주민등록번호
	     * @param  2 custNm 고객성명
	     * @param  3 logId 로그인ID
	     * @param  4 custRegYn 회원가입여부
	     * @param  5 postNo 우편번호
	     * @param  6 addrDscr1 우편주소1
	     * @param  7 addrDscr2 우편주소2
	     * @param  8 mobiTelNo 휴대폰번호
	     * @param  9 homeTelNo 집전화번호
	     * @param 10 offiTelNo 사무실전화번호
	     * @param 11 jobNm 직업
	     * @param 12 eml 이메일
	     * @param 13 regGbn 등록구분
	     * @param 14 regUserId 등록자ID
	     * @param 15 regDttm 등록일시
	     * @param 16 modUserId 수정자ID
	     * @param 17 modDttm 수정일시
	     */
	    setCustInfoParent: function(custNo, ssn, custNm,
	    					   		logId, custRegYn, postNo,
	    					   		addrDscr1, addrDscr2, mobiTelNo,
	    					   		homeTelNo, offiTelNo, jobNm,
	    					   		eml, regGbn, regUserId,
	    					   		regDttm, modUserId, modDttm){
	    	var custArray = new Array(custNo, ssn, custNm,
			   		logId, custRegYn, postNo,
			   		addrDscr1, addrDscr2, mobiTelNo,
			   		homeTelNo, offiTelNo, jobNm,
			   		eml, regGbn, regUserId,
			   		regDttm, modUserId, modDttm);
	    	opener.custSetVal(custArray);
	    	window.close();
	    }
 	},		// [html] end
     /**
      **************************************************************************************
	  *********************************** html 대한 function 모음 끝 *************************
	  **************************************************************************************
	  */

	 /**
	  **************************************************************************************
	  *********************************** form :  대한 function 모음 *************************
	  **************************************************************************************
	  */
	form : {
 		AUTO_MAX_SHIFT : 'N',	// 입력값이 MAXLENGTH 일때 다음 ELEMENT 로 포커스 이동 하는 EVENT 삽입 여부.
 		INPUT_FILTER : 'N',		// 입력값을 FILTERING 할 EVENT 삽입 여부.
 		
	    /**
	     * 해당 form 의 text element 에 이벤트 일괄 추가.
	     * 사용할 page 의 load 이벤트시 적용한다.
	     *  initialize: function(){
		 *		JslForm.AUTO_MAX_SHIFT = 'Y';
		 *		JslForm.INPUT_FILTER = 'Y';
		 *		JslForm.appendAttributes(FORM_ID);
		 *	}
		 *
		 *  Event.observe(window, 'load', initialize);
		 *  
	     * @param {Object} formObj 폼 오브젝트
	     * @since 2009.10.16 jk
	     */
	    appendAttributes: function(formId){
	    	var formObj = $(formId);
	    	if(formObj.elements.length == null || formObj.elements.length == undefined){
	    	 	return false;
	    	}
	    	
    		for (var idx = 0; idx < formObj.elements.length; idx++){
    			var obj = formObj.elements[idx];
	            if (obj.type == "text" ||  obj.type == "file" ||  obj.type == "password" || obj.type == "textarea") {

	            	// focus auto shift
	            	if(this.AUTO_MAX_SHIFT == 'Y'){
	            		Event.observe(obj, 'keyup', function() {
	            			JslInput.onAutoMaxShift(formId,this);
	            		});
	            	}
	            	
            		// 입력값 필터링.
	            	if(this.INPUT_FILTER == 'Y'){
	            		var objAtt = obj.getAttribute('inFilter');
	            		if(objAtt == null || objAtt == undefined) continue;
	            		
	            		var filter = '';
	            		var maxlen = 0;
	            		
	            		// 필터링 이름 뒤에 숫자를 붙이면 maxlength 로 인식한다.(ex: num10)
	            		for(i=0; i <= objAtt.length; i++){
	            			if(!isNaN(objAtt.charAt(i))){
	            				filter = objAtt.substring(0,i);		// filter
	            				maxlen = objAtt.substring(i);		// maxlength
	            				break;
	            			}
	            		}
	            		
	            		//alert(filter+'/'+maxlen);
	            		
	            		obj.style.imeMode = "disabled";
            			if(filter == 'num'){
            				Event.observe(obj, 'keypress', function() {
		            			JslInput.onFilterInputData('[0-9]', event);
            				});
            			}else if(filter == 'phone'){
                				Event.observe(obj, 'keypress', function() {
    		            		JslInput.onFilterInputData('[0-9.\-]', event);
                			});
            			}else if(filter == 'eng'){
            				Event.observe(obj, 'keypress', function() {
		            			JslInput.onFilterInputData('[a-zA-Z]', event);
            				});		            				
            			}else if(filter == 'kor'){
            				obj.style.imeMode = "active";
            				Event.observe(obj, 'keypress', function() {
            					JslInput.onFilterInputData('[ㄱ-ㅎ|ㅏ-ㅣ|가-힝]', event);
            				});
	            		}else if(filter == 'eng_num'){
            				Event.observe(obj, 'keypress', function() {
		            			JslInput.onFilterInputData('[0-9a-zA-Z]', event);
            				});
		            	}else if(filter == 'date'){
		            		Event.observe(obj, 'keypress', function() {
		            			JslInput.onFilterInputData('[0-9.\-]', event);
		            		});
		            	}else if(filter == 'email'){
		            		Event.observe(obj, 'keypress', function() {
		            			JslInput.onFilterInputData('[0-9a-zA-Z]', event);
		            		});
		            	}else if(filter == 'domain'){
		            		Event.observe(obj, 'keypress', function() {
		            			JslInput.onFilterInputData('[a-zA-Z.]', event);
		            		});
		            	}else if(filter == 'nokor'){
		            		obj.style.imeMode = "disabled";
		            	}else if(filter == 'eng_kor'){
		            		obj.style.imeMode = "active";
		            		Event.observe(obj, 'keypress', function() {
            					JslInput.onFilterInputData('[a-zA-Zㄱ-ㅎ|ㅏ-ㅣ|가-힝]', event);
            				});
		            	}
            			
            			// maxLength 를 설정하고 다음 tab 으로 이동.
		            	if(maxlen > 0){
		            		obj.maxLength = maxlen;
		            		
		            		Event.observe(obj, 'keyup', function() {
		            			JslInput.onAutoMaxShift(formId,this);
		            		});
		            	}

	            	}
	            	

	            }

    		}
	    }, 		
 		/**
 		 * Form을 생성하여 리턴합니다.
 		 * @param {Array} data 히든필드에 저장할 데이터 [{key: value}]
 		 * @return {Object} 히든필드 정보가 들어있는 form Object
 		 */
 		createForm: function(data){
	    	var uniqId = '_newForm'+JslDate.getCurrentTime();
 			var formHtml = "<form method='post' id='"+uniqId+"' name='"+uniqId+"'></form>";
			Insertion.Before($('Content'), formHtml);
			form = $(uniqId);
			form.method = 'post';
			
 			if(data != null && data.length > 0){
	 			for (var i = 0; i < data.length; i++){
	 				var input = document.createElement('input');
	 				
	 				// 중복 element 삭제.
	 				JslForm.removeHiddenField(form, data[i].id);
	 				
	 				input.type = 'hidden';
	 				input.id = data[i].id;
	 				input.name = data[i].id;
	 				input.value = data[i].value;
	 				
	 				form.appendChild(input); 
	 			}
 			}
 			return form;
 		}, 		
		/**
		 * 히든폼을 생성하여 지정한 Form에 추가합니다.
		 * @param {Object} formObj 폼 오브젝트
		 * @param {Object} fieldId 필드 아이디
		 * @param {Object} value 값
		 * @param {boolean} isArray 배열 허용여부
		 */
		createHiddenField: function(formObj, fieldId, value, isArray){
			var fieldObj = document.createElement('input');
	
			if(isArray != true){
				JslForm.removeHiddenField(formObj, fieldId);
			}
	
			fieldObj.type = 'hidden';
			fieldObj.id = fieldId;
			fieldObj.name = fieldId;
			fieldObj.value = value;

			formObj.appendChild(fieldObj);
		},
		/**
		 * 이메일 을 조합하여 hidden form 에 append 한다.
		 * @author jk 
		 */
		createHiddenEmail: function(formObj, fieldId, email1, email2){
			this.createHiddenField(formObj, fieldId,$(email1).value+'@'+$(email2).value)
		},
		/**
		 * 여러 field 값을 조합하여 hidden form 에 append 한다.
		 * @author jk 
		 */
		createHiddenConcat: function(formObj, fieldId, fieldId1, fieldId2, fieldId3, fieldId4){
			var value = $(fieldId1).value;
			if($(fieldId2)) value = value+''+$(fieldId2).value;
			if($(fieldId3)) value = value+''+$(fieldId3).value;
			if($(fieldId4)) value = value+''+$(fieldId4).value;
			this.createHiddenField(formObj, fieldId,value);
		},
		/**
		 * 넘길 paramager 의 Input 히든폼을 생성한다
		 * 전체 폼을 넘기지 않고 필요한 paramater 만 넘길때 사용한다.
		 * 
		 * @param arguments 는 hidden form 에 생성할 field id 들을 입력한다 ex: JslForm.createInputForm(['userCd'],['userEml','aaa@naver.com'],...);
		 * [id] 만 입력하거나 [id,value] 배열 형식으로 id 와 value 를 입력한다.
		 * @author jk 
		 */
		createInputForm: function(){
			var args = this.createInputForm.arguments;

			var data = new Array(args.length);
			
 			for (var i = 0; i < args.length; i++){
 				if(args[i].length > 1){
 					// [id,value] 배열 형식으로 id 와 value 를 입력했을때.
 					data[i] = {id : args[i][0], value : args[i][1]};
 				}else{
 					// [id] 만 입력했을때 해당 id 로 forms 과 cookie 에서 value 값을 조회한다.
	 				var obj = $(args[i][0]);
	 				if(obj){
	 					// hidden field 로 생성할 element 를 배열로 생성.
	 					if(obj.type == 'radio')
	 						data[i] = {id : args[i][0], value : JslRadio.getCheckedValue(obj)};
	 					else
	 						data[i] = {id : args[i][0], value : obj.value};
	 				}else if(jsl.getCookie(args[i]) != ''){
	 					// cookie 에서 조회한다(로그인 유저정보)
	 	 				data[i] = {id : args[i][0], value : jsl.getCookie(args[i][0])};
	 				}
 				}
 			}

 			return this.createForm(data);
		},
	
	    /**
	    * 지정한 폼 내에 히든필드를 제거합니다.
	    * @param {Object} formObj 폼 오브젝트
	    * @param {String} fieldId 삭제할 히든필드의 ID
	    * @author jk 
	    */
	    removeHiddenField: function(formObj, fieldId){
			if(formObj.childNodes.length != null && formObj.childNodes.length != undefined){
		        for (var idx = 0; idx < formObj.childNodes.length; idx++){
		            if (formObj.childNodes[idx].id == fieldId) {
		                formObj.removeChild(formObj.childNodes[idx]);
		            }
		        }
			}
	    },

		/**
		 * 해당 element 의 다음 요소 반환.
		 * @param {Object} formObj 폼 오브젝트
		 * @param {Object} eleObj 현재 element
		 * 다음 요소가 없으면 null 반환.
		 * @author jk 
		 */
		nextElement: function(formObj, eleObj){
	    	if(formObj.elements.length != null && formObj.elements.length != undefined){
	    		for (var i = 0; i < formObj.elements.length; i++){
	    			if (formObj.elements[i] == eleObj) {
	    				if(formObj.elements[i+1] != null && formObj.elements[i+1] != undefined){
	    		            if (formObj.elements[i+1].type != "text" && 
	    		            		formObj.elements[i+1].type != "file" && 
	    		            		formObj.elements[i+1].type != "radio" &&  
	    		            		formObj.elements[i+1].type != "checkbox" && 
	    		            		formObj.elements[i+1].type != "password" && 
	    		            		formObj.elements[i+1].type != "select-one" && 
	    		            		formObj.elements[i+1].type != "button" && 
	    		            		formObj.elements[i+1].type != "textarea") {
	    		            	
	    		            	// 다음으로 이동할 개체가 입력 type에 해당되지 않으면 다시 검색.
	    		            	JslForm.nextElement(formObj, formObj.elements[i+1]);
	    		            	break;
	    		            }else{
	    		            	return formObj.elements[i+1];
	    		            }
	    				}
	    				return null;
	    			}
	    		}
	    	}
	    	return null;
	    },
		/**
		 * 한글 인코딩.
		 * @param {String} szInput 
		 * @author jk 
		 */	    
	    toUTF8 : function(szInput){
	    	var wch, x, uch="", szRet="";
	    	for(x=0; x < szInput.length; x++){
	    		wch = szInput.charCodeAt(x);
	    		if(!(wch & 0xFF90)){
	    			szRet += "%" + wch.toString(16);
	    		}else if(!(wch & 0xF800)){
	    			uch = "%" + (wch >> 6 | 0xC0).toString(16) + "%" + (wch & 0x3F | 0x80).toString(16);
	    			szRet += uch;
	    		} else {
	    			uch = "%" +(wch >> 12 | 0xE0).toString(16) +
	    			"%" + (((wch >> 6) & 0x3F) | 0x80).toString(16) +
	    			"%" + (wch & 0x3F | 0x80).toString(16);
	    			szRet += uch;
	    		}
	    	}
	    	return(szRet);
	    }


	    
	},

    /**
     **************************************************************************************
	  *********************************** form 대한 function 모음 끝 *************************
	  **************************************************************************************
	  */
	
	
	
 	 /**
 	  **************************************************************************************
	  *********************************** input 대한 function 모음 **************************
	  **************************************************************************************
	  */
 	 input : {
 		/**
	     * 텍스트 필드에 focus() 가 있을때 onkeydow event 가 발생하면 enter key 이면 버튼 클릭효과줌.
	     * @param String enter key 일때 onclick 이벤트가 발생할 objId
	     * @param e event
	     * @author jk 
	     */		
		onEnterKey : function(e,objId){
	        var evt = e || window.event;
	        var kCode = evt.which || evt.keyCode;
	        
	        if(kCode == '13'){
	        	$(objId).onclick();
	        }
	        return false;
		},
 		/**
	     * 텍스트 필드에 입력한 값에 3자리마다 콤마(,)를 붙인다.
	     * 텍스트 필드에 아래를 기입한다. onkeyup="html.toMoney(this)" 
	     * @param field 텍스트 필드
	     */
	    onToMoney : function(field) {
	       var value = field.value;
	       var indexOfPoint = value.indexOf(".");
	       
	       if (indexOfPoint == -1) {
	          field.value = formatCommas(value);
	       } else {
	          field.value = formatCommas(value.substring(0, indexOfPoint)) +
	                        value.substring(indexOfPoint, value.length);
	       }
	    },
 	
        /**
         * 콤마 붙은 금액을 숫자로 반환(콤마(,)를 제거하여 반환)
         * @param {Object} numString 콤마를 제거할 값
         */
        toNumber : function( numStr ){
           return stripCommas(numStr);
        },

        /**
         * 금액 표기 형식(콤마를 붙인다.) 
         * 입력 변수에 3 자리마다 콤마(,)를 붙여 반환한다.
         * @param field 콤마를 붙일 값
         * @param numStr
         */
        toMoney : function(numStr){
        	// String 값으로 넘기지 않을경우를 생각해서 변환해줌
           return formatCommas((numStr+""));
        },
		
        /**
         * 입력값이 일정한 length 가 되면 focus를 이동 시킵니다.
         * ex : <input type="text" ..... onkeyup="input.onAutoShift(this, 'nextElId', 3);">
         * @param {Object} obj this
         * @param {String} toFld   포커스 이동 시킬 element id
         * @param {int} satisfyFldLen 포커스 이동 조건을 만족시킬 입력 길이
         */
        onAutoShift : function(obj, toFld, satisfyFldLen){
           if(obj.value.length == satisfyFldLen){
        	   document.getElementById(toFld).focus();
        	   document.getElementById(toFld).select();
           }
        },
        /**
         * 입력값이 maxlength 가 되면 focus를 이동 시킵니다.
         * ex : <input type="text" ..... onkeyup="input.onAutoShift('formid',this, 'nextElId', 3);">
         * @param {String} formId this
         * @param {Object} obj this
         */
        onAutoMaxShift : function(formId, obj){
        	var formObj = $(formId);
        	var maxLen = obj.getAttribute('maxlength');
        	var infilter = obj.getAttribute('inFilter');
        	var valueLen = obj.value.length;

        	// maxlength  보다 inputFilter 속성이 우선한다.
    		if(infilter && infilter != undefined){
	    		for(i=0; i <= infilter.length; i++){
	    			if(!isNaN(infilter.charAt(i))){
	    				maxLen = infilter.substring(i);		// 필터링 이름 뒤에 숫자를 붙이면 maxlength 로 인식한다.(ex: number10)
	    				break;
	    			}
	    		}
    		}

        	if(maxLen != null && maxLen != undefined){
        		if(valueLen >= maxLen){
    				var toFld = JslForm.nextElement(formObj, obj);
    				if(toFld && toFld.type != 'hidden'){
    					try{
		    				toFld.focus();
		    				toFld.select();
    					}catch(err){
    						return false;
    					}
    				}
        		}
        	}
        },
		/**
		 * 입력값을 마스킹한다. 
		 * ex) input.maskInputBox(str.value, 3, '*');
		 * @param {String} inputValue 원래 문자열
		 * @param {Number} orginCharlength 원래대로 보여줄 문자수
		 * @param {String} maskingChar masking할 character
		 * @return {String} 마스킹한 문자열
		 */
		maskInputBox : function(inputValue, orginCharlength, maskingChar){
		   var tempValue = inputValue;
		   var strtmp = "";
		   if (tempValue) {
		      if (tempValue.length > orginCharlength) {
			     strtmp = tempValue.substr(0, orginCharlength);
			     for (var i = orginCharlength; i < tempValue.length; i++) {
				    strtmp += maskingChar;
			     }
		      }
		   }
		   return 	strtmp;
        },
		
		/**
		 * 휴대번호를 split 하여 target Object에 할당한다. 
		 * input.splitMobilePhoneNo('01012341234',targetObj1,targetObj2,targetObj3)
		 * @param {String} sourceValue split 할 소스
		 * @param {Object} targetObj1 국번 Object
		 * @param {Object} targetObj2 중간번호 Object
		 * @param {Object} targetObj3 마지막번호 Object
		 */
		splitMobilePhoneNo : function(sourceValue,targetObj1,targetObj2,targetObj3) {
		   var fullChar = sourceValue;
		   if (null!=fullChar & fullChar !='') {
		      var firstStr = '';
		      var secodeStr = '';
		      var thirdStr = '';
		      var pos = fullChar.indexOf("-");
		      // 구분자가 있는 경우 
		      var count = 0;					
		      while ( pos != -1 ) {
		         count++;
		         pos = fullChar.indexOf("-", pos+1);
		      }
		      // 010-1234-1234 => 이러한 경우					
		      if (count == 2) {
			     var secondInx = fullChar.indexOf('-');
			     firstStr = fullChar.substring(0,secondInx);
			     secodeStr = fullChar.substring(secondInx+1,fullChar.lastIndexOf('-'));
			     thirdStr = fullChar.substring(fullChar.lastIndexOf('-')+1,fullChar.length);
			     targetObj1.value = firstStr;
			     targetObj2.value = secodeStr;
			     targetObj3.value = thirdStr;
		      }
		      // 010-12341234 => 이러한 경우         TODO 0101234-1234  
		      else if (count == 1){
		    	 var secondInx = fullChar.indexOf('-');
		    	 firstStr = fullChar.substring(0,secondInx);
		    	 if (null != firstStr && firstStr.length == 3) {
		    	    var tmpStr = fullChar.substring(secondInx + 1, fullChar.length);
					if (tmpStr.length == 8) {
					   secodeStr = tmpStr.substring(0,4);
					   thirdStr = tmpStr.substring(4,8);
					} else if(tmpStr.length == 7) {
					   secodeStr = tmpStr.substring(0,3);
					   thirdStr = tmpStr.substring(3,7);
					}
		    	 }
		    	 targetObj1.value = firstStr;
		    	 targetObj2.value = secodeStr;
		    	 targetObj3.value = thirdStr;						
		      }
		      // 01012341234 ==> 이러한 경우 
		      else {
		    	  // 지역번호 02 일때..
		    	  if(fullChar.substring(0,2) == '02') fullChar = '0'+fullChar;
		    	  
		    	 firstStr = fullChar.substring(0,3);
				 var tmpStr = fullChar.substring(3, fullChar.length);
			 	 if (tmpStr.length == 8) {
			 	    secodeStr = tmpStr.substring(0,4);
			 	    thirdStr = tmpStr.substring(4,8);
			 	 } else if(tmpStr.length == 7) {
				    secodeStr = tmpStr.substring(0,3);
					thirdStr = tmpStr.substring(3,7);
				}
				targetObj1.value = firstStr.substring(0, 3) == '002' ? firstStr.substring(1,3) : firstStr;
				targetObj2.value = secodeStr;
				targetObj3.value = thirdStr;							
		      }
		   }
		},
		/**
		 * 휴대번호를 split 하여 target Object에 할당한다. 
		 * input.splitMobilePhoneNo('01012341234')
		 * @param {String} sourceValue split 할 소스
		 * @return (String) "-" 가 붙어있는 표시용 핸드폰 번호
		 */
		mergeMobilePhoneNo : function(sourceValue) {
			var returnVal;
		   var fullChar = sourceValue;
		   if (null!=fullChar & fullChar !='') {
		      var firstStr = '';
		      var secodeStr = '';
		      var thirdStr = '';
		      var pos = fullChar.indexOf("-");
		      // 구분자가 있는 경우 
		      var count = 0;					
		      while ( pos != -1 ) {
		         count++;
		         pos = fullChar.indexOf("-", pos+1);
		      }
		      // 010-1234-1234 => 이러한 경우					
		      if (count == 2) {
			     var secondInx = fullChar.indexOf('-');
			     firstStr = fullChar.substring(0,secondInx);
			     secodeStr = fullChar.substring(secondInx+1,fullChar.lastIndexOf('-'));
			     thirdStr = fullChar.substring(fullChar.lastIndexOf('-')+1,fullChar.length);
			     returnVal = firstStr + "-" + secodeStr + "-" + thirdStr;
		      }
		      // 010-12341234 => 이러한 경우         TODO 0101234-1234  
		      else if (count == 1){
		    	 var secondInx = fullChar.indexOf('-');
		    	 firstStr = fullChar.substring(0,secondInx);
		    	 if (null != firstStr && firstStr.length == 3) {
		    	    var tmpStr = fullChar.substring(secondInx + 1, fullChar.length);
					if (tmpStr.length == 8) {
					   secodeStr = tmpStr.substring(0,4);
					   thirdStr = tmpStr.substring(4,8);
					} else if(tmpStr.length == 7) {
					   secodeStr = tmpStr.substring(0,3);
					   thirdStr = tmpStr.substring(3,7);
					}
		    	 }
		    	 returnVal = firstStr + "-" + secodeStr + "-" + thirdStr;					
		      }
		      // 01012341234 ==> 이러한 경우 
		      else {
		    	 firstStr = fullChar.substring(0,3);
				 var tmpStr = fullChar.substring(3, fullChar.length);
			 	 if (tmpStr.length == 8) {
			 	    secodeStr = tmpStr.substring(0,4);
			 	    thirdStr = tmpStr.substring(4,8);
			 	 } else if(tmpStr.length == 7) {
				    secodeStr = tmpStr.substring(0,3);
					thirdStr = tmpStr.substring(3,7);
				}
			 	returnVal = firstStr + "-" + secodeStr + "-" + thirdStr;						
		      }
		   }
		   return returnVal;
		},
		/**
 		 * 입력받을 수 있는 값을 필터링한다.
         * ex : <input type="text" ..... onkeypress="filterInputData('[0-9]', event)"> ; 숫자만 키입력이 가능한 text filed
         * ex : <input type="text" ..... onkeypress="filterInputData('[0-9a-zA-Z]', event)"> ; 영문,숫자만 키입력이 가능한 text filed
         * @param filter : 필터링할 정규표현식 ex) '[0-9]':0~9의 값만 허용, '[a-zA-Z]':알파벳만 허용
         * @return
         */
        onFilterInputData : function(filter, e) {
		    if (filter) {
	            var evt = e || window.event;
	            var kCode = evt.which || evt.keyCode;

	            /* backspace ,tab(9),enter(13),shift(16),end(35),home(36),방향키(좌(37),상(38),우(49),하(40)),delete(46) 등등..*/
	            var controlKeys = new Array(Event.KEY_BACKSPACE,Event.KEY_TAB,Event.KEY_RETURN,Event.KEY_ESC,Event.KEY_ESC,
	                    Event.KEY_LEFT,Event.KEY_UP,Event.KEY_RIGHT,Event.KEY_DOWN,Event.KEY_DELETE,Event.KEY_HOME,
	                    Event.KEY_END,Event.KEY_PAGEUP,Event.KEY_PAGEDOWN);

	            /* 조작키이면 종료 */
	            for (var i=0; i<controlKeys.length; i++) {
	                if (controlKeys[i] == kCode) return;
	            }
	            
	            var sKey = String.fromCharCode(kCode);

		        var re = new RegExp(filter);
		        if (!re.test(sKey)) {
	                Event.stop(evt);
		        }
				var re = new RegExp('[ㄱ-ㅎ|ㅏ-ㅣ|가-힝]');
		        if (re.test(sKey)) {
	                Event.stop(evt);r
		        }			
		    }
        },
        /**
         * 입력값의 bite 길이를 검사한다.
         * ex : <input type="text" ..... onkeyup="input.chkInputBite(this, 16);">
         * @param {Object} fromObj this
         * @param {int} maxBite 최대 bite 길이.
         */
        chkInputBite : function(inputObj, maxBite) {
            var i;
            var ch;
            var byteSize = 0;   // 바이트크기 
            var fullStr = inputObj.value.toString();
            var fullStrLength = fullStr.length;
            for (i=0;i<fullStrLength;i++) {
                ch = escape(fullStr.charAt(i)); //ISO-Latin-1 문자셋으로 변경
                
                byteSize += hana.JHanaUtils.input.strCharByte(ch);
                
                if(byteSize > maxBite){ // 최대 bite 길이 초과시 break!
                    jsl.JUtils.message.alert("입력문자 길이초과","입력값이 허용된 문자열의 최대값을 초과했습니다. 초과된 내용은 자동으로 삭제 됩니다.");
                    
                    inputObj.blur();    // 한글 입력시 기존 입력된 문자열이 사라지는 문제로 blur 처리한다.
                    inputObj.value = fullStr.substring(0, i);
                    inputObj.focus();   // blur 처리를 다시 focus 처리하여 재입력시 입력 오류 방지.
                    break;
                }
            }
        },
        /**
         * 이메일 형식 체크
         */
        validEmail : function(emailId) {
        	var emailVal = $(emailId).value;
            check_email = emailVal.search(/^\s*[\w\~\-\.]+\@[\w\~\-]+(\.[\w\~\-]+)+\s*$/g);
            
            if(check_email != 0){
                return false;
            }
            return true;
        },
        strCharByte : function(chStr) {
            if (chStr.substring(0, 2) == '%u') {
                if (chStr.substring(2,4) == '00')
                    return 1;
                    else
                    return 2;        //한글
                } else if (chStr.substring(0,1) == '%') {
                if (parseInt(chStr.substring(1,3), 16) > 127)
                    return 2;        //한글
                else
                    return 1;
                } else {
                    return 1;
            }
        }
 	 },		// [input] end
 	 /**
 	  **************************************************************************************
	  *********************************** input 대한 function 모음 끝 ************************
	  **************************************************************************************
	  */

 	 /**
 	  **************************************************************************************
	  *********************************** checkbox 대한 function 모음 ***********************
	  **************************************************************************************
	  */
 	 checkbox : {
        /**
         * 지정한 그룹의 체크박스중 한개 이상이 Checked 되어 있는지 확인합니다.
         * @param {String} chkListName 체크박스 Name(ID아님)
         * @return {Boolean} 체크박스 선택유무
         */
        isGroupChecked: function(/*string*/chkListName){
           var chkList = document.getElementsByName(chkListName);
           var isChecked =  false;
           
           var checkboxLength = chkList.length;
           
           if (checkboxLength == undefined) {
              if (checkBoxObj.checked) {
            	  isChecked = true;
              }
           }else{           
	           for (var idx = 0; idx < chkList.length; idx++){
	              if (chkList[idx].checked){
	                 isChecked = true;
	              }
	           }
           }
           return isChecked;
          },
			
		/**
         * 지정한 그룹의 체크박스중 한개만 Checked 되어 있는지 확인합니다.
         * @param {String} chkListName 체크박스 Name(ID아님)
         * @return {String} 선택된 내용의 value 값
         * @author Geumjo Park
         */
		setSingleChecked: function(chkListName){
		   var chkList = document.getElementsByName(chkListName);
		   var checkCnt = 0;
		   var checkValue = "";
		      for (var idx = 0; idx < chkList.length; idx++){
		   	     if (chkList[idx].checked){
				    checkCnt++;
				    checkValue = chkList[idx].value;
		   	     }
		      }
		      if (checkCnt == 0) {
		         // 메세지 창 호출
		    	 alert("체크박스 한건을 선택해주세요.");
//					kbl.extJS.messageBox.infoMsgBox({
//						isConfirm: false,
//						title: '체크박스 선택',
//						message: '체크박스 한건을 선택해주세요.',
//						callback: function(e){
//							if (e == true) { // 확인버튼 클릭시
//							}
//							else { // 창 닫기 또는 취소 버튼 클릭시
//							}
//						}
//					});
					return null;
		      }
		      if(checkCnt > 1){ // 2건이상
					// 메세지 창 호출
		   	     alert("체크박스 선택은 한건만 가능합니다.");
//					kbl.extJS.messageBox.infoMsgBox({
//						isConfirm: false,
//						title: '체크박스 선택',
//						message: '체크박스 선택은 한건만 가능합니다.',
//						callback: function(e){
//							if (e == true){	// 확인버튼 클릭시
//			
//							} else {	// 창 닫기 또는 취소 버튼 클릭시
//			
//							}
//						}
//					});
		   	     return null;
		      }
		      return checkValue;
        },

        /**
         * 체크박스 일괄 체크 토글기능
         * @param {String} toggle 기능을 수행 하는 checkbox id (NAME 아님)
         * @param {String} chkListName 체크박스 Name (ID아님)
         */
        setChkboxAllChecked: function(toggleCheckId, chkListName){
		   var isCheck = document.getElementById(toggleCheckId).checked;
           var chkAccountList = document.getElementsByName(chkListName);
           for (var idx = 0; idx < chkAccountList.length; idx++) {
              chkAccountList[idx].checked = isCheck;
           }
        },
       
		/**
         * 선택된 checkbox의 값을 배열로 리턴한다. 
         * 만약 value 가 없거만 선택 되지 않았으면 빈 Array 를 return 합니다.
         * @param checkBoxObj {Object} checkbox
         * @param formObj {Object} form
         * @param isAddHidden {boolean} input hidden 으로 생성 여부(true/false)
         * @param fieldId {String} input hidden id
         */
        getCheckedValue : function (checkBoxObj, formObj, isAddHidden, fieldId) {
           var returnArray = new Array();	
           if(!checkBoxObj){
              return new Array();
           }
           
           if(isAddHidden){
        	   JslForm.removeHiddenField(formObj, fieldId);
           }
           
           var checkboxLength = checkBoxObj.length;
           
           if (checkboxLength == undefined) {
              if (checkBoxObj.checked) {
                 returnArray.push(checkBoxObj.value);
                 if(isAddHidden){
                	 JslForm.createHiddenField(formObj,fieldId,checkBoxObj.value,false);
                 }
              }
           }
           else {
              for (var i = 0; i < checkboxLength; i++) {
			     if (checkBoxObj[i].checked) {
				    returnArray.push(checkBoxObj[i].value);
	                 if(isAddHidden){
	                	 JslForm.createHiddenField(formObj,fieldId,checkBoxObj[i].value,true);
	                 }
			     }
              }
           }	
           return returnArray;
        },
        /**
         * 선택된 checkbox의 값을 input hidden 으로 생성하고 배열로 리턴한다. 
         * 만약 value 가 없거만 선택 되지 않았으면 빈 Array 를 return 합니다.
         * @param checkBoxObj {Object} checkbox
         */
        getCheckedValueAddHidden : function (formObj, checkBoxObj, fieldId) {
        	return this.getCheckedValue(checkBoxObj,formObj,true,fieldId);
        }
 	 },		// [checkbox] end
 	 /**
 	  **************************************************************************************
	  *********************************** checkbox 대한 function 모음 끝 *********************
	  **************************************************************************************
	  */
 	 /**
 	  **************************************************************************************
	  *********************************** selectbox 대한 function 모음 **********************
	  **************************************************************************************
	  */
 	 selectbox : {
        /**
         * 이메일주소 도메인 직접입력 선택시 입력필드 활성화
         * @param {Object} selectObj selectBox Object
         * @param {String} fieldId InputField ID
         */
        setEmailToggle: function(selectObj, fieldId){
 		   // 직접입력 Value값
           var toggleMsg = "";
           var fieldObj = document.getElementById(fieldId);
           if (selectObj.value == toggleMsg){
        	  fieldObj.value = '';
              fieldObj.style.display = '';
              fieldObj.focus();
           } else {
       	      fieldObj.style.display = 'none';
       	      fieldObj.value = selectObj.value;
           }
 	    },

        /**
         * TODO IE 6 에서 테스트 해야함.
         * 레이어 밑에 컨트롤을 숨긴다.
         * @param {Object} layer_id
         */
        selectBoxHidden : function(layer_id)  {
           var ly = $(layer_id);

           // 레이어 좌표
           var ly_left  = ly.offsetLeft;
           var ly_top    = ly.offsetTop;
           var ly_right  = ly.offsetLeft + ly.offsetWidth;
           var ly_bottom = ly.offsetTop + ly.offsetHeight;

           // 셀렉트박스의 좌표
           var el;

           for (var i=0; i<document.forms.length; i++) {
              for (var k=0; k<document.forms[i].length; k++) {
                 el = document.forms[i].elements[k];
                 if (el.type == "select-one") {
                    var el_left = el_top = 0;
                    var obj = el;
                    if (obj.offsetParent) {
                       while (obj.offsetParent) {
                          el_left += obj.offsetLeft;
                          el_top  += obj.offsetTop;
                          obj = obj.offsetParent;
                       }
                    }
                    el_left  += el.clientLeft;
                    el_top    += el.clientTop;
                    el_right  = el_left + el.clientWidth;
                    el_bottom = el_top + el.clientHeight;

                    // 좌표를 따져 레이어가 셀렉트 박스를 침범했으면 셀렉트 박스를 hidden 시킴
                    if ( (el_left >= ly_left && el_top >= ly_top && el_left <= ly_right && el_top <= ly_bottom) ||
              		(el_right >= ly_left && el_right <= ly_right && el_top >= ly_top && el_top <= ly_bottom) ||
                    (el_left >= ly_left && el_bottom >= ly_top && el_right <= ly_right && el_bottom <= ly_bottom) ||
                    (el_left >= ly_left && el_left <= ly_right && el_bottom >= ly_top && el_bottom <= ly_bottom) )
                   	   el.style.visibility = 'hidden';
                 }
              }
           }
 	    },

        /**
         * Layer로 인해 감추었던 셀렉트 박스를 모두 보이게 함
         */
        selectBoxAllVisible : function () {
           for (var i=0; i<document.forms.length; i++) {
              for (var k=0; k<document.forms[i].length; k++) {
                 el = document.forms[i].elements[k];
                 if (el.type == "select-one" && el.style.visibility == 'hidden' && el.style.display=='none')
                    el.style.visibility = 'visible';
                 	el.style.display="block";
              }
           }
 	    },
 	   /**
         * 년도생성 셀렉트 박스 자동생성 ( 현재 년도 +10 -10 21개의 목록을 보여줌)
         * @param tgId 셀렉트 박스를 생성할 아이디
         */
        createYearSelect : function (tgId) {
 	    	
           // 오늘 년도
 	    	var todayNow = new Date();
            var year = todayNow.getFullYear();
 	    	
            var first = parseInt(year) -10;
 	    	//var last = parseInt(year) +10;
 	    	var midCombo = $(tgId);
			midCombo.length = 22;
			//midCombo.options[0] = new Option("선택", "");
			for(var i=0;i<midCombo.length;i++) {
				midCombo.options[i] = new Option(first, first);
				first++;
			}
			midCombo.options[10].selected = true;
 	    },
 	    

        /**
        * 동적 selectbox 구현
        * selectbox 의 선택된 값에 따라 서브 selectbox의 내용이 변한다.
        * @param {String} fmId	// 폼 아이디
        * @param {String} tgId	// 타겟 selectBox
        * @param {String} url	// 액션 주소
        */
        changeCombo : function (tgId,url,params,selected) {
 	    	// 폼, 타겟 아이디 초기화
 	    	var params = params;
 			var options = {
 					parameters: params,
 					success: function(res){
 						// 컬백 함수 
 						var MSGRESULT = eval('(' + res.responseText + ')');
 						var codelist = MSGRESULT.result;
 						var midCombo = $(tgId);
 						midCombo.length = codelist.length + 1;
 						midCombo.options[0] = new Option("선택", "");
 						for(var i=0;i<codelist.length;i++) {
 							midCombo.options[i+1] = new Option(codelist[i].cdNm, codelist[i].cdId);
 							if(midCombo.options[i+1].value == selected) {
 								midCombo.options[i+1].selected = true;
 							}
 						}
 					}
 					
 				};
 			jsl.Ajax2.request(url, options);
 	    },
 	    
 	    /**
 	     * 동적 selectbox 구현
 	     * selectbox 의 선택된 값에 따라 서브 selectbox의 내용이 변한다.
 	     * @param {String} fmId	// 폼 아이디
 	     * @param {String} tgId	// 타겟 selectBox
 	     * @param {String} url	// 액션 주소
 	     */
 	    changeProgCombo : function (tgId,url,params,selected) {
 	    	// 폼, 타겟 아이디 초기화
 	    	var params = params;
 	    	var options = {
 	    			parameters: params,
 	    			success: function(res){
 	    		// 컬백 함수 
 	    		var MSGRESULT = eval('(' + res.responseText + ')');
 	    		var codelist = MSGRESULT.result;
 	    		var midCombo = $(tgId);
 	    		midCombo.length = codelist.length + 1;
 	    		midCombo.options[0] = new Option("=선택=", "");
 	    		for(var i=0;i<codelist.length;i++) {
 	    			midCombo.options[i+1] = new Option(codelist[i].progNm, codelist[i].progId);
 	    			if(midCombo.options[i+1].value == selected) {
 	    				midCombo.options[i+1].selected = true;
 	    			}
 	    		}
 	    	}
 	    	
 	    	};
 	    	jsl.Ajax2.request(url, options);
 	    },
 	    
 	    /**
 	     * 동적 selectbox 구현
 	     * selectbox 의 선택된 값에 따라 서브 selectbox의 내용이 변한다.
 	     * @param {String} fmId	// 폼 아이디
 	     * @param {String} tgId	// 타겟 selectBox
 	     * @param {String} url	// 액션 주소
 	     */
 	    changeSuppCntCombo : function (tgId,url,params,selected) {
 	    	// 폼, 타겟 아이디 초기화
 	    	var params = params;
 	    	var options = {
 	    			parameters: params,
 	    			success: function(res){
 	    		// 컬백 함수 
 	    		var MSGRESULT = eval('(' + res.responseText + ')');
 	    		var codelist = MSGRESULT.result;
 	    		var midCombo = $(tgId);
 	    		midCombo.length = codelist.length + 1;
 	    		midCombo.options[0] = new Option("=선택=", "0");
 	    		for(var i=0;i<codelist.length;i++) {
 	    			midCombo.options[i+1] = new Option(codelist[i].suppCnt, codelist[i].suppCnt);
 	    			if(midCombo.options[i+1].value == selected) {
 	    				midCombo.options[i+1].selected = true;
 	    			}
 	    		}
 	    	}
 	    	
 	    	};
 	    	jsl.Ajax2.request(url, options);
 	    },
 	    /**
 	     * 동적 selectbox 구현
 	     * selectbox 의 선택된 값에 따라 서브 selectbox의 내용이 변한다.
 	     * @param {String} fmId	// 폼 아이디
 	     * @param {String} tgId	// 타겟 selectBox
 	     * @param {String} url	// 액션 주소
 	     */
 	    changeMultiCombo : function (tgId,url,params,gbn,selected) {
 	    	// 폼, 타겟 아이디 초기화
 	    	var codelist;
 	    	var midCombo;
 	    	var params = params;
 	    	var options = {
 	    			parameters: params,
 	    			success: function(res){
		 	    		// 컬백 함수 
		 	    		var MSGRESULT = eval('(' + res.responseText + ')');
		 	    		codelist = MSGRESULT.result;
		 	    		midCombo = $(tgId);
		 	    		midCombo.length = codelist.length + 1;
		 	    		if(gbn == "0") {
		 	    			midCombo.options[0] = new Option("=기관=", "");
		 	    		}
		 	    		else if(gbn == "1") {
		 	    			midCombo.options[0] = new Option("=년도=", "");
		 	    		}
		 	    		else if(gbn == "2") {
		 	    			midCombo.options[0] = new Option("=회차=", "0");
		 	    		}
		 	    		else {
		 	    			midCombo.options[0] = new Option("=상품=", "");
		 	    		}
		 	    		for(var i=0; i<codelist.length;i++) {
		 	    			var nm, value;
		 	    			if(gbn == "0") {
		 	    				nm = codelist[i].orgNm;
		 	    				value = codelist[i].orgCd;
		 	    			}
		 	    			else if(gbn == "1") {
		 	    				nm = codelist[i].suppYear;
		 	    				value = codelist[i].suppYear;
		 	    			}
		 	    			else if(gbn == "2") {
		 	    				nm = codelist[i].suppCnt;
		 	    				value = codelist[i].suppCnt;
		 	    			}
		 	    			else if(gbn == "3") {
		 	    				nm = codelist[i].prdtNm;
		 	    				value = codelist[i].prdtCd;
		 	    			}
		 	    			
	 	    				midCombo.options[i+1] = new Option(nm, value);
	 	    				if(selected == value) {
	 	    					midCombo.options[i+1].selected = true;
	 	    				}
		 	    		}
		 	    	}
 	    	
 	    	};
 	    	jsl.Ajax2.request(url, options);
 	    },
 	    
	    /**
 	     * 동적 selectbox 구현
 	     * selectbox 의 선택된 값에 따라 서브 selectbox의 내용이 변한다.
 	     * @param {String} fmId	// 폼 아이디
 	     * @param {String} tgId	// 타겟 selectBox
 	     * @param {String} url	// 액션 주소
 	     */
 	   changePrdtCdCombo : function (tgId,url,params,selected) {
 	    	// 폼, 타겟 아이디 초기화
 	    	var params = params;
 	    	var options = {
    			parameters: params,
    			success: function(res){
	 	    		// 컬백 함수 
	 	    		var MSGRESULT = eval('(' + res.responseText + ')');
	 	    		var codelist = MSGRESULT.result;
	 	    		var midCombo = $(tgId);
	 	    		midCombo.length = codelist.length + 1;
	 	    		midCombo.options[0] = new Option("=선택=", "");
	 	    		for(var i=0;i<codelist.length;i++) {
	 	    			midCombo.options[i+1] = new Option(codelist[i].prdtNm, codelist[i].prdtCd);
	 	    			if(midCombo.options[i+1].value == selected) {
	 	    				midCombo.options[i+1].selected = true;
	 	    			}
	 	    		}
 	    		}
 	    	};
 	    	jsl.Ajax2.request(url, options);
 	    },
 	    
        /**
         * 동적 selectbox 구현
         * selectbox 의 선택된 값에 따라 서브 selectbox의 내용이 변한다.
         * @param {String} fmId	// 폼 아이디
         * @param {String} tgId	// 타겟 selectBox
         * @param {String} url	// 액션 주소
         */
        chgCombo : function (fmId,tgId,url,select) {
 	    	// 폼, 타겟 아이디 초기화
 	    	formId = "";
 	    	targetId = "";
 	    	selected = select;
 	    	formId = fmId;
 	    	targetId = tgId;
 	    	var params = Form.serialize(formId);
 			var options = {
 					parameters: params,
// 					onComplete: function() {
// 						//alert("성공");
// 					},
 					success: JslSelect.setChgCombo
 				};
 			jsl.Ajax2.request(url, options);
 	    },
 	   /**
         * selectbox를 동적으로 셋팅한다.
         * 소스상의 cdNm과 cdId 는 액션에서 공통변수로 변환하여 사용해야 공통으로 사용가능.
         * cdNm selectbox의 화면에 보여지는 명
         * cdId selectbox의 option value
         * @param res	// 결과정보
         */
 	    setChgCombo: function(res){
			// 컬백 함수 
			var MSGRESULT = eval('(' + res.responseText + ')');
			var codelist = MSGRESULT.result;
			var midCombo = $(targetId);
			midCombo.length = codelist.length + 1;
			midCombo.options[0] = new Option("선택", "");
//			midCombo.options[0].value = new Option("");
			for(var i=0;i<codelist.length;i++) {
				midCombo.options[i+1] = new Option(codelist[i].cdNm, codelist[i].cdId);
				if(midCombo.options[i+1].value == selected) {
					midCombo.options[i+1].selected = true;
				}
			}
		},
 	    
	 	 /**
         * 년도 selectBox를 생성한다.
         * 조회시 년도가 필요할 경우 이 함수를 사용한다. 
         * @param {String} fmId	// 폼 아이디
         * @param {String} tgId	// 타겟 selectBox
         * @param {String} select	// check될 option
         */
 	    setYearSelect: function(fmId,tgId,select){
			var selectBox = $(tgId);
 	    	
 	    	selectBox.length = 5;
 	    	selectBox.options[0] = new Option("=선택=", "");
 	    	today = new Date();
 	    	if(select == "") {
 	    		select = today.getFullYear();
 	    	}
			for(var i = -4; i < 1; i++) {
				selectBox.options[i+5] = new Option((today.getFullYear() - i), (today.getFullYear() - i));
				if(selectBox.options[i+5].value == select) {
					selectBox.options[i+5].selected = true;
				}
			}
		},
		/**
        * 월 selectBox를 생성한다.
        * 조회시 월이 필요할 경우 이 함수를 사용한다. 
        * @param {String} fmId	// 폼 아이디
        * @param {String} tgId	// 타겟 selectBox
        * @param {String} select	// check될 option
        */
	    setMonSelect: function(fmId,tgId,select){
	    	formId = "";
	    	targetId = "";
	    	selected = "";
	    	
	    	formId = fmId;
	    	targetId = tgId;
	    	selected = select;
	    	
	    	var selectBox = $(targetId);
	    	selectBox.length = 13;
	    	selectBox.options[0] = new Option("=선택=", "");
	    	today = new Date();
 	    	if(selected == "") {
 	    		selected = today.getMonth() + 1;
 	    	}
			for(var i = 0; i < 12; i++) {
				var mon = (i + 1) + "";
				mon.length < 2 ? mon = "0" + mon : mon;
				selectBox.options[i+1] = new Option(mon, mon);
				if(selectBox.options[i+1].value == selected) {
					selectBox.options[i+1].selected = true;
				}
			}
		},
		/**
		 * 일 selectBox를 생성한다.
		 * 조회시 일이 필요할 경우 이 함수를 사용한다. 
		 * @param {String} fmId	// 폼 아이디
		 * @param {String} year	// 년태그 아이디
		 * @param {String} month// 월태그 아이디
		 * @param {String} day	// 일태그 아이디
		 */
		setDaySelect: function(fmId, yearId, monthId, dayId){
			var year = $(yearId).value;
			var month = $(monthId).value;
			
			selectBox = $(dayId);
			
			selectBox.length = 0;
			selectBox.options[0] = new Option("=선택=", "");
			
			if(year == '' || month == ''){
				return false;
			}
			days = JslDate.getLastDay(year,month);
			
			selected = new Date().getDate();
			
			for (i = 0, j = 0; i < days; i++) {
				j = (i < 9) ? '0' + (i + 1) : i + 1;
				selectBox.options[i+1] = new Option(j, j);
				if(selectBox.options[i+1].value == selected) {
					selectBox.options[i+1].selected = true;
				}				
			}
			
		},
		/**
		 * 시간 selectBox를 생성한다.
		 * 조회시 시간이 필요할 경우 이 함수를 사용한다. 
		 * @param {String} fmId	// 폼 아이디
		 * @param {String} hour	// 시간
		 */
		setHourSelect: function(fmId, hour){
			selectBox = $(hour);
			
			selectBox.length = 0;
			selectBox.options[0] = new Option("=선택=", "");
			
			selected = new Date().getHours();
			
			for (i = 0; i < 24; i++) {
				j = (i < 9) ? '0' + (i + 1) : i + 1;
				selectBox.options[i+1] = new Option(j, j);
				if(selectBox.options[i+1].value == selected) {
					selectBox.options[i+1].selected = true;
				}				
			}
			
		}
 	 },		// [select] end
 	 /**
 	  **************************************************************************************
	  *********************************** selectbox 대한 function 모음 끝 ********************
	  **************************************************************************************
	  */
 	 
 	 /**
 	  **************************************************************************************
	  *********************************** radio 대한 function 모음 **************************
	  **************************************************************************************
	  */
 	 radio : {
        /**
         * 선택된 radio 버튼의 value 를 return 합니다.
         * 만약 value 가 없거만 선택 되지 않았으면 ""를 return 합니다.
         * @param radioObj {Object} radio 버튼 Obj
         */
        getCheckedValue : function (radioObj) {
 		   if(!radioObj){
              return "";
           }
           var radioLength = radioObj.length;
           if(radioLength == undefined){
              if(radioObj.checked){
                 return radioObj.value;
              }
              else{
            	 return "";
              }
           }
           for(var i = 0; i < radioLength; i++) {
              if(radioObj[i].checked) {
                 return radioObj[i].value;
              }
           }
           return "";
 	    },

        /**
         * newValue 값으로 radio 버튼을 선택 합니다.
         * 만약 radio 버튼 obj 가 없으면 아무것도 하지 않습니다.
         * 만약 해당 값이 없으면 radio 버튼의 check 를 unchecked 합니다.
         * @param radioObj
         * @param newValue
         */
        setCheckedValue : function(radioObj, newValue) {
           if(!radioObj)
              return;
           var radioLength = radioObj.length;
           if(radioLength == undefined) {
              radioObj.checked = (radioObj.value == newValue.toString());
              return;
           }
           for(var i = 0; i < radioLength; i++) {
              radioObj[i].checked = false;
              if(radioObj[i].value == newValue.toString()) {
                 radioObj[i].checked = true;
              }
           }
 	    }
 	 },		// [radio] end
 	 /**
 	  **************************************************************************************
	  *********************************** radio 대한 function 모음 끝 ************************
	  **************************************************************************************
	  */
 	 
 	 /**
 	  **************************************************************************************
	  *********************************** date 대한 function 모음 ***************************
	  **************************************************************************************
	  */
 	 date : {
         /**
          * 현재 年을 YYYY형식으로 리턴
          */
         getYear : function(){
            var todayNow = new Date();
            return todayNow.getFullYear();
         },

         /**
          * 현재 月을 MM형식으로 리턴
          */
         getMonth : function() {
            var todayNow = new Date();

            var month = todayNow.getMonth() + 1; // 1월=0,12월=11이므로 1 더함
            if (("" + month).length == 1) { month = "0" + month; }

            return month;
         },

         /**
          * 현재 日을 DD형식으로 반환
          */
         getDay : function() {
            var todayNow = new Date();

            var day = todayNow.getDate();
            if (("" + day).length == 1) { day = "0" + day; }

            return day;
         },
         /**
          * YYYYMMDD 로 오늘 날짜 반환
          * @return today(20090212)
          */
         getToday : function(){
             return this.getYear() +""+ this.getMonth()+"" + this.getDay();
         }, 		 
         /**
          * 주민번호 유효성 검사
          */         
         checkSSN : function(jumin){
			 var sum = 0; // 곱해서 더한 총합 
			 var key = "234567892345"; // 주민번호 생성 key 값
			 
			 if(jumin.length <= 12) return true; 
			 
			 for(i=0;i<12;i++){
				sum += jumin.charAt(i) * key.charAt(i);
			 } 
			 
			 sum = 11-(sum % 11);
			 endNo = sum%10; 
			
			 if (jumin.charAt(12) != endNo){
				 alert("유효하지 않는 주민번호입니다.\n다시 확인하시고 입력해 주세요");
				 return false;
			 }
    		 
    		return true; 
         },
         /**
          * 나이제한 체크
          */
 		 checkAge : function(limitAge, jumin){
	 		var today = parseInt(this.getToday(),10); 
	 		var year = this.getYear();
	 		var birth = 0;
	 		
	 		if(jumin.length <= 12) return true; 
	 		
	 		if(parseInt(jumin.substring(6,7)) > 2){
	 			birth = '20'+jumin.substring(0,6);	// 2000 년 이후 출생자.
	 		}else{
	 			birth = '19'+jumin.substring(0,6);
	 		}
	 		var limitDate = (year - limitAge) +""+ this.getMonth() +""+ this.getDay();	// 나이제한 일자.
	 		
	 		//alert(birth +'/'+limitDate);
	 		
	 		if((parseInt(birth) - parseInt(limitDate) > 0)){
		 		return false;
	 		}
	 		return true;
	 	 },
         /**
          * 두 날짜 사이의 일수를 계산하여 반환한다.
          * @param date1 문자열 데이터로 '20041012' 형식
          * @param date2 문자열 데이터로 '20041012' 형식
          */
         getDaysBetween : function(date1, date2) {
             date1 = new Date(date1.substring(0, 4), date1.substring(4, 6)-1, date1.substring(6,8));
             date2 = new Date(date2.substring(0, 4), date2.substring(4, 6)-1, date2.substring(6,8));
             var DSTAdjust = 0;
             var oneMinute = 1000 * 60;
             var oneDay = oneMinute * 60 * 24;
             date1.setHours(0);
             date1.setMinutes(0);
             date1.setSeconds(0);
             date2.setHours(0);
             date2.setMinutes(0);
             date2.setSeconds(0);
             DSTAdjust = (date2.getTimezoneOffset( ) -
                              date1.getTimezoneOffset( )) * oneMinute;
             var diff = date2.getTime( ) - date1.getTime() - DSTAdjust;
             return Math.ceil(diff/oneDay);
         },

         /**
          * 현재시각을 time형식으로 반환
          * EX)200902122015 년월일시분
          */
         getCurrentTime : function(){
        	 return this.toTimeString(new Date());
         },

         /**
         * 자바스크립트 Date 객체를 Time 스트링으로 변환
         * parameter date: JavaScript Date Object
         */
         toTimeString : function(date) { //formatTime(date)
            var year  = date.getFullYear();
            var month = date.getMonth() + 1; // 1월=0,12월=11이므로 1 더함
            var day   = date.getDate();
            var hour  = date.getHours();
            var min   = date.getMinutes();

            if (("" + month).length == 1) { month = "0" + month; }
            if (("" + day).length   == 1) { day   = "0" + day;   }
            if (("" + hour).length  == 1) { hour  = "0" + hour;  }
            if (("" + min).length   == 1) { min   = "0" + min;   }

            return ("" + year + month + day + hour + min);
         },
         
         /**
         * 자바스크립트 Date 객체를 스트링으로 Formatting
         * (ex. dateFormat_yyyyMMdd(date, '.')
         *      : yyyy.MM.dd )
         * @param String date   Ex)20090221
         */
         dateFormater_yyyyMMdd : function(date, formatChar) { 
        	var dateOb = new Date();
            if(!formatChar){
            		formatChar = "";
            }
            var yearInt = parseInt(date.substring(0,4), 10);
            var monthInt = parseInt(date.substring(4,6), 10);
            var dateInt = parseInt(date.substring(6,8), 10);
            
            dateOb.setFullYear(yearInt, monthInt-1, dateInt);
       	 	
            var year  = dateOb.getFullYear();
            var month = dateOb.getMonth() + 1; // 1월=0,12월=11이므로 1 더함
            var day   = dateOb.getDate();
            
            if (("" + month).length == 1) { month = "0" + month; }
            if (("" + day).length   == 1) { day   = "0" + day;   }

            return ("" + year + formatChar + month + formatChar + day);
         },
         
 
         
         /**
          * YYYY + char + MM + char + DD 로 오늘 날짜 반환
          * @param String char   Ex)"."
          * @return today Ex) 2009.02.12
          */
         getFormatToday : function(char){
        	 return this.getYear() + char + this.getMonth() + char + this.getDay();
         },
         
         /**
          * YYYY년 MM월 DD일 로 오늘 날짜 반환
          * @return today Ex) 2009년 02월 12일
          */
         getFixFormatToday : function(){
        	 return this.getYear() + "년 " + this.getMonth() + "월 " + this.getDay() + "일";
         },
         /**
          * 현재일자에 일자를 더한 날짜를 구한다.
          * Ex) getAddDays("2)"   현재일 20090212  이면 return 값은 20090214 
          * @param (String) days
          * @return (String) yyyyMMdd 
          */
          
         getAddDays : function( days ){
             var before = this.getToday();
             var date = new Date(before.substring(0,4),Number(before.substring(4,6))-1,Number(before.substring(6,8))+Number(days));
             var year=String(date.getFullYear());
             var month=String(date.getMonth()+1);
             var day=String(date.getDate());

             if(month.length==1) month = "0"+ month;
             if(day.length==1) day= "0" + day;

             return ''+year+''+month+''+day;
         },
     
         
         /**
          * 해당 월의 마지막일자를 구한다.
          *   
          * @param year 조회년, month 조회월
          * @return 해당월의 마지막 일자 
          */
         getLastDay: function(year, mon) {
        	 var month = mon - 1;
        	 var d = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
        	 if (((0 == (year%4)) && ( (0 != (year%100)) || (0 == (year%400)))) && month == 1) { 
        		 return 29; 
        	 } else { 
        		 return d[month]; 
        	 } 
         },
         /**
         * 현재달의 첫 일자를 구한다.
         * 
         * @param String 년월일 구분자 Ex) "." 
         * @return 현재달의 첫 일자 Ex) 2009.04.01
         */
        getMonthFirstDay: function(gbn) {
       	   var d,d2 = "";           
       	   d = new Date();             
       	   d2 = new Date(d.getYear(),d.getMonth());
       	   var year = d2.getYear();
       	   var month = d2.getMonth() + 1;
       	   if (("" + month).length == 1) { month = "0" + month; }
       	   var date = d2.getDate();
       	   if (("" + date).length == 1) { date = "0" + date; }
       	   var firstDay = year + gbn + month + gbn + date;
       	   return firstDay;
        },
        
        /**
         * 현재달의 마지막 일자를 구한다.
         *   
         * @param String 년월일 구분자 Ex) "." 
         * @return 현재달의 마지막 일자 Ex) 2009.04.01
         */
        getMonthLastDay: function(gbn) {
       	   var d,d2, s = "";           
       	   d = new Date();             
       	   d2 = new Date(d.getYear(),d.getMonth()+1,"");                      
       	   var year = d2.getYear();
       	   var month = d2.getMonth() + 1;
       	   if (("" + month).length == 1) { month = "0" + month; }
       	   var date = d2.getDate();
       	   if (("" + date).length == 1) { date = "0" + date; }
       	   var lastDay = year + gbn + month + gbn + date;
       	   return lastDay; 
        }
       
     },
 	 /**
 	  **************************************************************************************
	  *********************************** date 대한 function 모음 끝 *************************
	  **************************************************************************************
	  */
     
     /**
 	  **************************************************************************************
	  *********************************** util 대한 function 모음 끝 *************************
	  **************************************************************************************
	  */
     util : {
    	 /**
          * 포인트 제거 
          * @param {String} pointString
          */
         stripPoint : function(pointString){
    	 	var arrayString = pointString.split('.');
    	 	var changeString = "";
    	 	for(var i = 0; i< arrayString.length; i++){
    	 		changeString = changeString + arrayString[i];
    	 	}
    	 	return changeString;
         },
    	 /**
          * 날자 체크
          * @param {String} stdt
          * @param {String} endt
          */
         checkDt : function(stdt, endt){
    	 	var beforeString = stdt.split('.');
    	 	var afterString = endt.split('.');
    	 	
    	 	stdt = beforeString[0] + beforeString[1] + beforeString[2];
    	 	endt = afterString[0] + afterString[1] + afterString[2];
    	 	
    	 	stdt = parseInt(stdt);
    	 	endt = parseInt(endt);
    	 	
    	 	if(stdt > endt){
    	 		jsl.Dialog.alert("조회 시작일자가 종료일자 보다 이후 입니다.");
    			return false;
    	 	}
    	 	return true;
    	 	
         },
    	
    	 /**
          * 날자 체크
          * @param {String} stdt
          * @param {String} endt
          * @param {String} message
          */
         checkDtM : function(stdt, endt, message){
    	 	var beforeString = stdt.split('.');
    	 	var afterString = endt.split('.');
    	 	
    	 	stdt = beforeString[0] + beforeString[1] + beforeString[2];
    	 	endt = afterString[0] + afterString[1] + afterString[2];
    	 	
    	 	stdt = parseInt(stdt);
    	 	endt = parseInt(endt);
    	 	
    	 	if(stdt > endt){
    	 		jsl.Dialog.alert( message + " 시작일자가 종료일자 보다 이후 입니다.");
    			return false;
    	 	}
    	 	return true;
    	 	
         },
    	 /**
          * 날자 체크()
          * @param {String} stdtId
          * @param {String} endtId
          * @param {String} message
          */
         dateCheckM : function(stdtId, endtId, message){
        	
        	var beforeString = $F(stdtId); 
        	var afterString = $F(endtId); 
        
        	if(beforeString==""&&afterString!=""){
        		jsl.Dialog.alert( message + " 시작일자를 입력해 주세요");
        		return false;
        	}else if(afterString==""&&beforeString!=""){
        		jsl.Dialog.alert( message + " 종료일자를 입력해 주세요");
        		return false;
        	}
        	
    	 	beforeString = beforeString.split('.');
    	 	afterString = afterString.split('.');
    	 	
    	 	stdt = beforeString[0] + beforeString[1] + beforeString[2];
    	 	endt = afterString[0] + afterString[1] + afterString[2];
    	 	
    	 	stdt = parseInt(stdt);
    	 	endt = parseInt(endt);
    	 	
    	 	if(stdt > endt){
    	 		jsl.Dialog.alert( message + " 시작일자가 종료일자 보다 이후 입니다.");
    			return false;
    	 	}
    	 	return true;
    	 	
         },         
    	 /**
          * 숫자인지 체크
          * @param {Object} obj
          */
         onNumCheck : function(obj){
    	 //alert(event.keyCode);
//	    	 if((event.keyCode) == 9 ||(event.keyCode) == 8 || (event.keyCode == 46 )|| (event.keyCode == 35 )|| (event.keyCode == 36 )|| (event.keyCode == 37 )|| (event.keyCode == 39 )|| (event.keyCode > 95 &&( event.keyCode < 106) )){
//				 event.returnValue= true;
//			 }else 
        	 if ((event.keyCode < 48) || (event.keyCode > 57)) {
	    		 event.returnValue = false;
	    	 }
         },
  	    /**
  	     * 특수 문자 입력 막기( _-. 세가지 외에 전부 막기)
  	     * @param (String) inputId 
  	     */
  	 	check_str : function(inputId){
         	var val = $(inputId);
         	if(!this.containsChars(inputId,"abcdefghijklmnopqrstuvwxyz_-.1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"))
  	 		{
         		jsl.Dialog.alert("영문만 입력 가능하며, 특수 문자는( _ , - , . )이 세가지를 제외한 문자는 입력 하실수 없습니다.");
  	 			return false;
  	 		}
  	 		return true;
  	 	},
  	    /**
  	     * 특수 문자 입력 막기( _-. 세가지 외에 전부 막기)
  	     * @param (String) mesg 메세지
  	     * @param (String) inputId 
  	     */
  	 	check_strM : function(mesg,inputId){
         	var val = $(inputId);
         	if(!this.containsChars(inputId,"abcdefghijklmnopqrstuvwxyz_-.1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"))
  	 		{
         		jsl.Dialog.alert(mesg + " 영문만 입력 가능하며, 특수 문자는( _ , - , . )이 세가지를 제외한 문자는 입력 하실수 없습니다.");
  	 			return false;
  	 		}
  	 		return true;
  	 	},
         // 문자 검사
         containsChars : function(inputId, charss){
  	 		var inputOb = $(inputId);
          	for(var inx=0; inx < inputOb.value.length; inx++)
          	{
          		if(charss.indexOf(inputOb.value.charAt(inx))==-1){
          			return false;
          		}
          	}
          	return true;
          },
    	 
    	 /**
          * 계좌 번호 형식의 포맷으로 변환한 문자열을 반환합니다.
          * @param {String} acctNo 계좌번호
          */
         toAcctNo : function(acctNo){
             if(acctNo == null ) return "";
             if(acctNo.length == 14){
                 return acctNo.substring(0, 3) + "-" + acctNo.substring(3, 9) + "-" + acctNo.substring(9, 14);
             }
             else if(acctNo.length == 12){
                 return acctNo.substring(0, 5) + "-" + acctNo.substring(5, 12);
             }
             else{
            	 return acctNo;
             }
         },
         
        /**
         * 모든은행 계좌 번호 형식의 포맷으로 변환한 문자열을 반환합니다.
         * @param {String} acctNo
         * @param {String} bnkCd
         */
        toAcctNoExt : function(acctNo,bnkCd){
		    if(acctNo == null ) return "";
		    if(bnkCd == null ) return "";
		    if (bnkCd){
		        // TODO 계좌번호에 따라 적용해야 한다.
		    	// 아래의 081은 하나은행 일경우
		    	if (bnkCd == '081') {	// 하나은행
		    	    if(acctNo.length == 14){
		    	        return acctNo.substring(0, 3) + "-" + acctNo.substring(3, 9) + "-" + acctNo.substring(9, 14);
		    	    }
		    	    else if(acctNo.length == 12){
		    	    	return acctNo.substring(0, 5) + "-" + acctNo.substring(5, 12);
		    	    }	
		    	    else {
		    	    	return acctNo;
		    	    }
		    	} else {
		    		return acctNo;
		    	}
		    }				
        },
        /**
         * 사업자번호 형식의 포맷으로 변환한 문자열을 반환합니다.
         * @param {String} toBizNo 사업자번호
         */
        toBizNo : function(bizNo){
            if(bizNo == null ) return "";
            if(bizNo.length == 10){
                return bizNo.substring(0, 3) + "-" + bizNo.substring(3, 5) + "-" + bizNo.substring(5, 10);
            }
            else if(bizNo.length == 13){
                return bizNo.substring(3, 6) + "-" + bizNo.substring(6, 8) + "-" + bizNo.substring(8, 13);
            }
			else{
			    return bizNo;
		    }
        },
			
        /**
         * 카드번호 형식의 포맷으로 변환한 문자열을 반환합니다.
         * @param {String} toCardNo 사업자번호
         */
        toCardNo : function(cardNo){
            if(cardNo == null ) return "";
            if(cardNo.length == 16){
                return cardNo.substring(0, 4) + "-" + cardNo.substring(4, 8) + "-" + cardNo.substring(8, 12) + "-" + cardNo.substring(12, 16);
            }
            else{
                return cardNo;
            }
        },
        
        /**
         * 대쉬 '-' 를 제거한다.
         */
        stripDash : function(numString) {
            var re = /-/g;
            return numString.replace(re, "");
        },
        
        /**
         * 공백을 제거 한다.(데이터의 앞자리에 들어간 공백만 제거)
         * @param strMsg
         */
        trim : function( stringToTrim ){
           return stringToTrim.replace(/(^\s*)|(\s*$)|($\s*)/g, "");
        },

        /**
         * 문장에 들어간 문자 변환
         * ex ) targetString="요즘에 한 요즘에" str1="요즘에" str2="옛날에" return="옛날에 한 옛날에"
         * @param targetString
         * @param str1
         * @param str2
         */
        replaceAll : function( targetString, oldStr, newStr ){
           var temp_str = "";

           if (this.trim( targetString ) != "" && oldStr != newStr)
           {
              temp_str = this.trim( targetString );

              while (temp_str.indexOf(oldStr) > -1)
              {
                 temp_str = temp_str.replace(oldStr, newStr);
              }
           }
           return temp_str;
        },
        /**
         * 파일 다운로드
         * @param formId
         * @param fileName
         */
        fileDownload : function( formId,fileName ){
            $("fileName").value = fileName;
    		var params = Form.serialize(formId);
    	    var options = {
    		    parameters: params
    	    };
    	    $(formId).action = jsl.APPLICATION_CONTEXT_ROOT+'/com/fileDownload.action';
    	    $(formId).submit();
        }
     },		// [util] end
     /**
 	  **************************************************************************************
	  *********************************** json 대한 function 모음 ***************************
	  **************************************************************************************
	  */
     json : {
         /**
          * json데이터를 String으로 변환한다.
          * @param {Object} jsonObject jsonType의 Object
          */
         jsonToString : function(jsonObject) {
             var jsonText;
             jsonText = JSON.stringify(jsonObject);
             jsonText= jsonText.replace(/\\"/g,"\"").replace(/\\\\/g,"\\").replace(/:"\[/g,":[").replace(/\}\]"\}/g,"}]}");
             return jsonText;
         }
     },	//[json] end 
 	/**
	 **************************************************************************************
	 *********************************** json 대한 function 모음 ***************************
	 **************************************************************************************
	 */
     
     /**
 	  **************************************************************************************
	  *********************************** calendar 대한 function 모음 ***************************
	  **************************************************************************************
	  */
     calendarFunc : {
         /**
          * 달력을 보여 준다.
          * @param {Object} 일자를 표시할 오브젝트
          */
         show : function(object) {
    	     Calendar(object);
         }
     },	//[calendar] end 
 	/**
	 **************************************************************************************
	 *********************************** calendar 대한 function 모음 ***************************
	 **************************************************************************************
	 */
     
     /**
 	  **************************************************************************************
	  *********************************** window 대한 function 모음 ***************************
	  **************************************************************************************
	  */
     window : {
         /**
          * 팝업창
          * @param {url} 주소
          * @param {formObj} 폼
          * @param {winname} 팝업창 이름
          * @param {w} 팝업창 넓이
          * @param {h} 팝업창 높이
          * @param {scroll} 표시 여부
          */
         openwin : function(url, formObj, winname, w, h, scroll) {
    	     window.open("", winname, "top=100, left=200, width="+w+", height="+h+",scrollbars="+scroll);
    		 formObj.action = url;  
    		 formObj.target = winname;  
    		 formObj.method = "post";
    		 formObj.submit();
    		 formObj.target = "_self";
    		 formObj.action = "";
         },
	     /**
	      * 팝업창
	      * @param {url} 주소
	      * @param {formObj} 폼
	      * @param {winname} 팝업창 이름
	      * @param {w} 팝업창 넓이
	      * @param {h} 팝업창 높이
	      * @param {scroll} 표시 여부
	      */
	     openwinPlace : function(url, formObj, winname, w, h, t, l, scroll) {
		     window.open("", winname, "top="+t+", left="+l+", width="+w+", height="+h+",scrollbars="+scroll);
			 formObj.action = url;  
			 formObj.target = winname;  
			 formObj.method = "post";
			 formObj.submit();
			 formObj.target = "_self";
			 formObj.action = "";
	     },
         /**
         * 모달팝업창
         * @param {url} 주소
         * @param {formObj} 폼
         * @param {winname} 팝업창 이름
         * @param {w} 팝업창 넓이
         * @param {h} 팝업창 높이
         * @param {scroll} 표시 여부
         */
        openmodal : function(url, w, h, scroll) {
        	 var agent = navigator.userAgent
        	 var ww = 0;
        	 var wh = 0;

        	 if ((agent.indexOf('MSIE 6') > 0) && (agent.indexOf('MSIE 7') == -1) && (agent.indexOf('MSIE 8') == -1) ) {
        		 ww = w + 10;
        		 wh = h + 50;     		 
        	 }else{
	    		 ww = w;
	    		 wh = h;
        	 }
        	 var returnValue = showModalDialog(url, window, "dialogWidth:"+ww+"px;dialogHeight:"+wh+"px;scroll:"+scroll+";Status:Off;Help:No;Center:Yes");
        	 return returnValue;
        },         
         /**
          * 팝업창
          * @param {url} 주소
          * @param {formObj} 폼
          * @param {winname} 팝업창 이름
          * @param {w} 팝업창 넓이
          * @param {h} 팝업창 높이
          * @param {scroll} 표시 여부
          */
         postOpenWin : function(url, formObj, postNoParam1, postNoParam2, postAddrParam, winname, w, h, scroll) {
    	     window.open("", winname, "top=100, left=200, width="+w+", height="+h+",scrollbars="+scroll);
    	     
    	     url = url + "?postNoParam1="+postNoParam1+"&postNoParam2="+postNoParam2+"&postAddrParam="+postAddrParam;
    		 formObj.action = url;  
    		 formObj.target = winname;  
    		 formObj.method = "post";
    		 formObj.submit();
    		 formObj.target = "_self";
    		 formObj.action = "";
         }
     },	//[window] end 
 	/**
	 **************************************************************************************
	 *********************************** window 대한 function 모음 ***************************
	 **************************************************************************************
	 */
     /**
 	  **************************************************************************************
	  *********************************** report 대한 function 모음 ***************************
	  **************************************************************************************
	  */
     report : {
         /**
          * 화면에 출력되는 리포트의 첫 페이지로 이동한다.
          * @param {url} 리포트 Id
          */
    	 firstPage : function(reportId) {
    	 	$(reportId).FirstPage();
         },
         /**
          * 화면에 출력되는 리포트의 이전 페이지로 이동한다.
          * @param {url} 리포트 Id
          */
         prevPage : function(reportId) {
        	 $(reportId).PrevPage();
         },
         /**
          * 화면에 출력되는 리포트의 다음 페이지로 이동한다.
          * @param {url} 리포트 Id
          */
         nextPage : function(reportId) {
        	 $(reportId).NextPage();
         },
         /**
          * 화면에 출력되는 리포트의 마지막 페이지로 이동한다.
          * @param {url} 리포트 Id
          */
         lastPage : function(reportId) {
        	 $(reportId).LastPage();
         },
         /**
          * 화면에 출력되는 리포트를 인쇄한다.
          * @param {url} 리포트 Id
          */
         print : function(reportId) {
        	 $(reportId).PrintDialog();
         }
     }	//[window] end 
  	/**
 	 **************************************************************************************
 	 *********************************** report 대한 function 모음 ***************************
 	 **************************************************************************************
 	 */
 }			// [return] end
}();		// [jsl.Utils] end


var JslHtml = jsl.Utils.html; 
var JslInput = jsl.Utils.input;
var JslForm = jsl.Utils.form;
var JslCheckbox = jsl.Utils.checkbox;
var JslSelect = jsl.Utils.selectbox;
var JslRadio = jsl.Utils.radio;
var JslDate = jsl.Utils.date;
var JslUtil = jsl.Utils.util;
var JslJson = jsl.Utils.json;
var JslCalendar = jsl.Utils.calendarFunc;
var JslWindow = jsl.Utils.window;
var JslReport = jsl.Utils.report;

var TableRow = {
	    selected:-1,
	    selectedColor:'#E6E7FF',
	    hoverColor:'#F7F8FF',
	    defaultColor:'#FFFFFF',
	    onmouseover : function(trow,id)
	    {
	        if (TableRow.selected!= id)
	            trow.style.backgroundColor=TableRow.hoverColor;
	    },
	    onmouseout : function(trow,id)
	    {
	        if (TableRow.selected!= id)
	        	trow.style.backgroundColor=TableRow.defaultColor;
	    },

//	    onclick : function(trow,id, func)
	    onclick : function(id, func)
	    {
			var trow = $('id_tablerow_'+id);
//		    alert(tcol.id);
		    /*
	        if (TableRow.selected == id)
	        {
	            TableRow.selected = -1;
	            trow.bgColor=TableRow.hoverColor;
	        }
	        else
	        {
	            var r = document.getElementById('id_tablerow_'+TableRow.selected);
	            if (TableRow.selected !=-1 && r)
	               r.bgColor=TableRow.defaultColor;
	            TableRow.selected = id;
	            trow.bgColor=TableRow.hoverColor;
	        }
	        */
			    
	        if (TableRow.selected != id) {
	            var r = $('id_tablerow_'+TableRow.selected);
	            if (TableRow.selected !=-1 && r)
	               r.style.backgroundColor=TableRow.defaultColor;
	            TableRow.selected = id;
	            trow.style.backgroundColor=TableRow.selectedColor;
	        }
	        if (func) func();
	    }
	}


var LeftTableRow = {
	    selected:-1,
	    selectedColor:'#CCCCCC',
	    hoverColor:'#FFFFEE',
	    defaultColor:'#FFFFFF',
	    
	    onclick : function(id, func)
	    {
			var	trow = $('id_left_tablerow_'+id);
			
			$('leftform').currSmenu.value = id;
	        if (LeftTableRow.selected != id) {
	            var r = $('id_left_tablerow_'+LeftTableRow.selected);
	            if (LeftTableRow.selected !=-1 && r)
	               r.style.backgroundColor=LeftTableRow.defaultColor;
	            LeftTableRow.selected = id;
	            trow.style.backgroundColor=LeftTableRow.selectedColor;
	        }
	        if (func) func();
	    }
	}
