﻿// JScript 파일

function selectCheckAll(checkcnt, selObj)
{	
	var Form = document.forms[0];
	var j = 0;
    
	for( var i=0; i<Form.elements.length; i++)
	{
		var element = Form.elements[i];

		if ( element.name.indexOf('ss_') == 0 )
		{
			var status = element.value;
		}
        
		if ( element.name.indexOf('sa_') == 0 )
		{
			j++;
			if (!element.disabled)
			{
				if ( bAllCheckFlag == 1 )
				{
					if ( j <= checkcnt ) status = 1;
					else status = 0;

					Form.checkall.checked = 0;
					element.checked	= 0;
					
				}
				else
				{
					Form.checkall.checked = 1;
					element.checked	= 1;
					
				}
			}
		}
	}
	if ( bAllCheckFlag == 1 )
	{
		selObj.value = "모두선택";
		bAllCheckFlag = 0;
	}
	else
	{
		selObj.value = "선택취소";
		bAllCheckFlag = 1;
	}
}

/* 체크된 데이터 수 확인 */
function getChecked(obj)
{
	var checked		= "";
	var allArr		= "";

	var count = 0;
	
	if(obj)
	{
	    count = obj.length;

	    if( count > 1 )
	    {
		    for( var i = 0; i < count; i++ )
		    {
			    if( obj[i].checked )
			    {
				    checked += obj[i].value;
				    checked += "#,#";
			    }
		    } 

		    if(checked.substring(checked.length-3, checked.length) == "#,#")
		    {
			    checked = checked.substring(0, checked.length - 3);
		    }

		    if(checked == "") allArr = "";
		    else allArr = checked.split("#,#");
	    }
	    else
	    {
		    if( obj.checked )
		    {
			    allArr = obj.value;
		    }
	    }
	}

	return allArr;
}

/* 체크된 데이터 수 확인 */
function getCheckedChk(obj)
{
	var Form = document.forms[0];

	var checked		= "";
	var allArr		= "";

	var count = 0;
	
	if(obj)
	{
	    count = obj.length;

	    if( count > 1 )
	    {
		    for( var i = 0; i < count; i++ )
		    {
			    if( eval("Form.sa_"+i) )
			    {
				    checked += obj[i].value;
				    checked += "#,#"+eval("Form.sa_"+i+".checked")+"|";
			    }
		    }
		    if(checked.substring(checked.length-3, checked.length) == "#,#")
		    {
			    checked = checked.substring(0, checked.length - 3);
		    }

		    if(checked == "") allArr = "";
		    else allArr = checked.split("#,#");
	    }
	    else
	    {
	    
			    allArr = obj.value+","+eval("Form.sa_0.checked")+"|";
	    }
	}
    
	return allArr;
}

/* 체크된 데이터 수 확인 */
function getCheckedObj(obj)
{
	var checked		= "";
	var allArr		= "";
	var cnt = 0;

	var count = obj.length;

	if( count > 1 )
	{
		for( var i = 0; i < count; i++ )
		{
			if( eval(obj[i].checked) )
			{
				checked += obj[i].value;
				checked += "#,#";
			}
		}
    
		if(checked.substring(checked.length-3, checked.length) == "#,#")
		{
			checked = checked.substring(0, checked.length - 3);
		}
		if(checked == "") cnt = 0;
		else cnt = (checked.split("#,#")).length;
	}
	else
	{
		if( obj.checked )
		{
			allArr = obj.value;
			cnt = 1;
		}
	}

	return cnt;
}

/*= COMMON CONTROL ===========================================================

    1. 일반적으로 obj tag와 관계없이 사용되는 기능.
    2. Function List
        - OpenWindow(theURL, winName, features)
        : 새창 열기
        - Alert(message)
        : 메세지를 알리는 메세지박스 표시
        - AlertConfirm(message)
        : 사용자의 의사결정을 포함하는 메세지박스 표시
        - AlertFocus(element, message)
        : 메세지를 알리는 메세지박스 표시 후 Element에 지정된 obj tag 로 focus
        - ShowErrMessage(message)
        : 서버 프로그램에서 생긴 ERROR 를 보여주는 MESSAGEBOX ALERT
        - fnDbClick()
        : 더블클릭 방지
============================================================================*/
/**
  * 새창열기
  *  window.open 에서 사용되는 방식으로 features 설정
  * @param theURL    새창의 Url
  * @param winName   새창의 name
  * @param features  새창의 세부 설정
  * @return
 */
 
// 윈도우 사이즈 바꾸기
function WindowResize(nWidth, nHeight)
{
	window.resizeTo(nWidth, nHeight);
}

/**
  * 메세지를 알리는 메세지박스 표시
  * @param message   메세지박스에 보여질 메세지
  * @return
 */
function Alert(message)
{
    var iLen = message.length;
	if (iLen >= 1)
	{
		alert(message);
	}
}

/**
  * 사용자의 의사결정을 포함하는 메세지박스 표시
  * @param message   메세지박스에 보여질 메세지
  * @return 1 : 확인,  0 : 취소
 */
function AlertConfirm(message) {
	if(confirm(message)==1) {
		return 1;
	} else {
		return 0;
	}
}

/**
  * 메세지를 알리는 메세지박스 표시 후 Element에 지정된 obj tag 로 focus
  * @param obj   focus 를 가질 Object
  * @param message   메세지박스에 보여질 메세지
  * @return
 */
function AlertFocus(obj, message )
{
   if ( message != '') Alert( message );
   obj.focus();
   if (obj.type == 'text' && obj.value.length >=1 ) obj.select();
   return ;
}

/**
  * 서버 프로그램에서 생긴 ERROR 를 보여주는 MESSAGEBOX ALERT
  * @param message   메세지박스에 보여질 메세지
  * @return
 */
function ShowErrMessage(message)
{
    var iLen = message.length;
    var showMessage;
	if (iLen >= 1)
	{
		shwoMessage=ReplaceStr(message,"<||>","\n");
		Alert(shwoMessage);
	}
}

function fnDbClick()
{
	if(event.button >= 1) alert("잠시 기다려 주십시오. 지금 처리중입니다.");
}

function click()
{
    if((event.button==2) || (event.button==3)) 
    {
        alert("마우스 오른쪽 버튼은 사용하실 수 없습니다.");
        return false;
    }
}

function processKey()
{
	if( (event.ctrlKey == true && (event.keyCode == 78 || event.keyCode == 82)) ||
		(event.keyCode >= 112 && event.keyCode <= 123) )
	{
		event.keyCode = 0;
		event.cancelBubble = true;
		event.returnValue = false;
	}
	
    if (document.layers) 
    {
        document.captureEvents(Event.MOUSEDOWN);document.onmousedown=clickNS;
    }
    else
    {   
        document.onmouseup=clickNS;document.oncontextmenu=clickIE;
    }
	document.oncontextmenu=new Function("return false");
}

function clickIE() 
{
    if (document.all) {(message);return false;}
}

function clickNS(e) 
{
    if (document.layers||(document.getElementById&&!document.all)) 
    {
        if (e.which==2||e.which==3) 
        {(message);return false;}
    }
}


/*= FORM CONTROL =============================================================

    1. 폼 관련 기본 기능을 처리.
    2. Function List
        - ChkLen(Object, Int)
        : 입력 받은 폼태그(Object)의 문자열의 길이가 특정 길이(Int)와 같은지 여부 체크
          true - 길이가 같음
          false - 길이가 다름
        - ChkLenMoveFocus(Object, Int, Object)
        : 입력 받은 폼태그(Object)의 문자열의 길이가 특정 길이(Int) 이면
          다른 객체(Object)로 포커스를 이동
        - SetFocus(Object)
        : 입력 받은 객체로 포커스 이동
        - ChkLenByByte(Object, int)
        : 입력 필드의 문자 크기를 한정시킬때.. (한글까지 고려하여 계산됨)
          ex) onBlur="return fnLessEqualLen(this, len);"
        - GetLenByByte(String)
        : 입력 필드의 문자 크기를 얻는다.. (한글까지 고려하여 계산됨)
        - calcByte( String ) 
        : messageStr의 byte 수를 계산. (maxByte + 1), (maxByte + 2 )까지만 계산
        - cutText( String, String) 
        : 최대 byte수를 초과하는 문자열을 잘라내고 나머지를 리턴
        - remove0d( String) 
        : 마지막에 "%0d" 제거
============================================================================*/

/**
  * 입력 받은 폼태그(Object)의 문자열의 길이가 특정 길이(Int)와 같은지 여부 체크
  * @param obj   대상 폼태그(Object)
  * @param len   비교할 길이
  * @return  true : 길이가 같음, false : 길이가 다름
 */
function ChkLen(obj, len) {
    if (obj.value.length == len) return true;
    return false;
}

/**
  * 입력 받은 폼태그(Object)의 문자열의 길이가 특정 길이(Int) 이면
  * 다른 객체(Object)로 포커스를 이동
  * @param obj   대상 폼태그(Object)
  * @param len   비교할 길이
  * @param dest  포커스를 이동할 폼태그(Object)
  * @return
 */
function ChkLenMoveFocus(obj, len, dest) {
    if (obj.value.length == len)
    setFocus(dest);
}

/**
  * 입력 받은 객체로 포커스 이동
  * @param obj   포커스를 이동할 폼태그(Object)
  * @return
 */
function SetFocus(obj) {
    obj.focus();
}

/**
  * 입력 필드의 문자 크기를 한정시킬때.. (한글까지 고려하여 계산됨)
  * @param obj   대상 폼태그(Object)
  * @param len   비교할 길이
  * @return
 */
function ChkLenByByte(obj, len)
{
    var src    = obj.value;
    var srcLen = GetLenByByte(src);
    if (srcLen <= len) return true;
    var delLen = srcLen - len;
    obj.focus();
    Alert("이 항목은 영문 " + len + "자 (한글은 " + Math.floor(len/3) + "자) 까지만 입력해야 합니다 \n"
        +  "입력 내용에서 영문 " + delLen + "자 (한글은 " + Math.ceil(delLen/3) + "자)를 제거하시기 바랍니다");
    return false;
}

/**
  * 입력 필드의 문자 크기를 얻는다.. (한글까지 고려하여 계산됨)
  * @param String   문자열
  * @return int 문자열의 길이
 */
function GetLenByByte(value)
{
    var byteLength = 0;
    for (var inx = 0; inx < value.length; inx++) {
        var oneChar = escape(value.charAt(inx));
        if ( oneChar.length == 1 ) {
            byteLength ++;
        } else if (oneChar.indexOf("%u") != -1) {
            byteLength += 3;
        } else if (oneChar.indexOf("%") != -1) {
            byteLength += oneChar.length/3;
        }
    }
    return byteLength;
}

/**
  * messageStr의 byte 수를 계산. (maxByte + 1), (maxByte + 2 )까지만 계산
  * maxByte 보다 큰 경우 에는 cutStringIndex에 String Length값을 저장.
  * @param messageStr   문자열
  * @return tcount 문자열의 길이
 */
function calcByte( messageStr ) 
{
	var tcount = 0;

	for ( k = 0; k < messageStr.length; k++ ) {

		var onechar = messageStr.charAt( k );

      	if ( escape( onechar ).length > 4 ) {
        	tcount += 2;
       	} else if ( onechar!='\r') {
           	tcount++;
        }

  	}
	return tcount;
}


/**
  * 최대 byte수를 초과하는 문자열을 잘라내고 나머지를 리턴.
  * @param msgStrg 원본 String
  * @param maxByte 최대 byte 값.
  * @return String  잘라낸 문자열
 */
function cutText( msgStr, maxByte) 
{

	var cutStringIndex;
	var tcount = 0;

	var k = 0;
	for ( k ; k < msgStr.length; k++ ) 
	{

		var onechar = msgStr.charAt( k );
      	if ( escape( onechar ).length > 4 ) 
      	{
        	tcount += 2;
       	} else if ( onechar!='\r') 
       	{
           	tcount++;
        }

        if( tcount > maxByte ) 
        {

            break;
       	}

  	}

	return remove0d( msgStr.substring(0, k) );

}

/**
  * 마지막에 "%0d" 제거
  * @param String   문자열
  * @return String  잘라낸 문자열
 */
function remove0d( str ) 
{

	str = escape( str );

	if ( str.lastIndexOf("%0D") >= str.length - 3 ) 
	{
		str = str.substring( 0, str.lastIndexOf("%0D") );
	}
	return unescape( str );
}


/**
  * 대상 Object를 disable 시킨다.
  * @param  obj   대상 폼태그(Object)
  * @return
 */
function DisableObject(obj)
{
	switch( obj.type ) {
		case "checkbox" :
			 obj.disabled = true;
			 break;
		case "text" :
			 obj.readOnly=true;
	         obj.style.backgroundColor = "#E9F8F2";
	         obj.style.color = "#555555";
			 break;
		default:
	}
}

/**
  * 대상 Object를 enable 시킨다.
  * @param obj   대상 폼태그(Object)
  * @return
 */
function EnableObject(obj)
{
	switch( obj.type ) {
		case "checkbox" :
			 obj.disabled = false;
			 break;
		case "text" :
			 obj.readOnly=false;
	         obj.style.backgroundColor = "#ffffff";
	         obj.style.color = "#000000";
			 break;
		default:
	}
}

/**
 * 입력되어진 변수의 수만큼 DisableObject function 수행.
 * 입력되어진 Object 들을 모두 disable 시킨다.
 * 호출예 : DisableManyObjects(haengwon_no, name, center_section_code);
 * @param obj   대상 폼태그(Object)
 * @param obj   대상 폼태그(Object)
 *  :
 */
function DisableManyObjects() {
	var obj_receiver;
 	obj_receiver = DisableManyObjects.arguments;
	for(i=0; i< obj_receiver.length; i++) {
		if (obj_receiver[i] != "") {
			DisableObject(obj_receiver[i]);
		}
	}
}

/**
 * 입력되어진 변수의 수만큼 EnableObject function 수행.
 * 입력되어진 Object 들을 모두 enable 시킨다.
 * 호출예 : EnableManyObjects(haengwon_no, name, center_section_code);
 * @param obj   대상 폼태그(Object)
 * @param obj   대상 폼태그(Object)
 *  :
 */
function EnableManyObjects() {
	var obj_receiver;
 	obj_receiver = EnableManyObjects.arguments;
 	for(i=0; i< obj_receiver.length; i++) {
		if (obj_receiver[i] != "") {
			EnableObject(obj_receiver[i]);
		}
	}
}

/*= CHECKBOX CONTROL ===========================================================

    1. CHECKBOX 관련 기본 기능을 처리.
    2. Function List
        - TogleCheckAll(Object, Object)
        : checkbox들을 반복하여 선택하거나 해지한다.
        - SetAllCheckboxCancel(Object)
        : checkbox를 모두 해지한다.
        - SetAllCheckboxCheck(Object)
        : checkbox를 모두 선택 표시한다.
        - IsChecked(Object)
        : 리스트에서 하나이상의 체크박스가 선택되었는지 확인한다.
        - IsCheckedOnlyOne(Object)
        : 리스트에서 하나의 체크박스만 선택되었는지 확인한다.

============================================================================*/

/**
  * 처음 obj가 선택되어진 경우 전체 checkObj를 선택하고
  * 해지되어진 경우 모두 해지한다.
  * @param obj   전체를 control하는 CHECKBOX 의 OBJECT
  * @param checkObj 해당 CHECKBOX
  * @return
 */
function TogleCheckAll(obj, checkObj) {
    if (!obj.checked) {
        SetAllCheckboxCancel(checkObj);
    } else {
        SetAllCheckboxCheck(checkObj);
    }
}

/**
  * CHECKBOX를 모두 해지한다.
  * @param obj   해당 CHECKBOX 의 OBJECT
  * @return
 */
function SetAllCheckboxCancel(obj){
	if (obj != null) {
		var count = obj.length;
		if(count > 1){
			for(var i=0;i<count;i++){
				obj[i].checked = false;
			}
		 }else {
			obj.checked = false;
		 }
	}
     return;
}

/**
  * CHECKBOX를 모두 선택 표시한다.
  * @param obj   해당 CHECKBOX 의 OBJECT
  * @return
 */
function SetAllCheckboxCheck(obj){
	if (obj != null) {
		var count = obj.length;
		if(count > 1){
			for(var i=0;i<count;i++){
				obj[i].checked = true;
			}
		 }else{
			obj.checked = true;
		 }
	}
     return;
}

/**
  * 리스트에서 하나이상의 체크박스가 선택되었는지 확인한다.
  * @param obj   해당 CHECKBOX 의 OBJECT
  * @return
 */
function IsChecked(obj){
    var count = obj.length;
    var iChecked = 0;
    if(count > 1){
        for(var i=0;i<count;i++){
            if (obj[i].checked) iChecked++;
        }
    } else {
        if (obj.checked) iChecked++;
    }
    if (iChecked == 0) {
        //Alert("선택된 값이 없습니다");
        return false;
    }
    return true;
}

/**
  * 리스트에서 하나의 체크박스만 선택되었는지 확인
  * @param obj   해당 CHECKBOX 의 OBJECT
  * @return
 */
function IsCheckedOnlyOne(obj){
    var count = obj.length;
    if(count > 1){
        var iChecked = 0;
        for(var i=0;i<count;i++){
            if (obj[i].checked) iChecked++;
        }
        if (iChecked > 1) {
            Alert("하나만 선택하십시오");
            return false;
        }
     }
     return true;
}

/**
  * 처음 obj가 선택되어진 경우 전체 checkObj를 선택하고
  * 해지되어진 경우 모두 해지한다.
  * @param obj   전체를 control하는 CHECKBOX 의 OBJECT
  * @param checkObjNm 해당 CHECKBOX Name
  * @return
 */
function TogleCheckAllByElement(obj, checkObjNm) {
    if (!obj.checked) {
        SetAllCheckboxCancelByElement(checkObjNm);
    } else {
        SetAllCheckboxCheckByElement(checkObjNm);
    }
}

/**
  * CHECKBOX를 모두 해지한다.
  * @param obj   해당 CHECKBOX 의 OBJECT
  * @return
 */
function SetAllCheckboxCancelByElement(objNm){

	var Form = document.forms[0];
	var j = 0;
    
	for( var i=0; i<Form.elements.length; i++)
	{
		var element = Form.elements[i];

		if ( element.name.indexOf(objNm) >= 0 )
		{
			element.checked = false;
		}
	}
    return;
}

/**
  * CHECKBOX를 모두 선택 표시한다.
  * @param obj   해당 CHECKBOX 의 OBJECT
  * @return
 */
function SetAllCheckboxCheckByElement(objNm){
	var Form = document.forms[0];
	var j = 0;
    
	for( var i=0; i<Form.elements.length; i++)
	{
		var element = Form.elements[i];

		if ( element.name.indexOf(objNm) >= 0 )
		{
			element.checked = true;
		}
	}
    return;
}

/**
  * 리스트에서 하나이상의 체크박스가 선택되었는지 확인한다.
  * @param obj   해당 CHECKBOX 의 OBJECT
  * @return
 */
function IsCheckedByElement(objNm)
{
    var Form = document.forms[0];
    var iChecked = 0;

	for( var i=0; i<Form.elements.length; i++)
	{
		var element = Form.elements[i];

		if ( element.name.indexOf(objNm) >= 0 && element.checked)
		{
			iChecked++;
		}
	}

    if (iChecked == 0) 
    {
        return false;
    }
    return true;
}

/*= TEXT INPUT VALUE CONTROL ===========================================================

    1. 문자열 관련 기본 기능을 처리.
    2. Function List
        - IsNull(Object)
        : 입력값이 NULL인지 체크
        - IsEmpty(Object)
        : 입력값이 공백인지 확인하여 리턴
        - RemoveSpaces(Value)
        : 입력값에 포함된 모든 스페이스 문자를 제거 후 리턴
        - ReplaceStr(str, find, replace)
        : 문자열에 포함된 모든 변환대상 패턴을 변경하여 리턴
        - ContainsChars(Object)
        : 입력값에 특정 문자(chars)가 있는지 체크. 특정 문자를 허용하지 않으려 할 때 사용
        - ContainsCharsOnly(Object)
        : 입력값이 특정 문자(chars)만으로 되어있는지 체크
        - IsAlphabet(Object)
        : 입력값이 알파벳인지 체크
        - IsUpperCase(Object)
        : 입력값이 알파벳 대문자인지 체크
        - IsLowerCase(Object)
        : 입력값이 알파벳 소문자인지 체크
        - IsNumber(Object)
        : 입력된 문자열이 숫자 만을 포함하고 있는지 여부 리턴
        - IsAlphaNum(Object)
        : 입력값이 알파벳,숫자로 되어있는지 체크
        - IsNumDash(Object)
        : 입력값이 숫자,대시(-)로 되어있는지 체크
        - IsNumComma(Object)
        : 입력값이 숫자,콤마(,)로 되어있는지 체크
        - IsNumPeriod(Object)
        : 입력값이 숫자,날짜 구분자(.)로 되어있는지 체크

============================================================================*/

String.prototype.trim = function()
{
	//return this.replace(/^s*(b.*b|)s*$/, "$1"); // 문장의 앞과 뒤의 공백 제거
	a = this
	//alert(a)
	var search = 0
	while ( a.charAt(search) == " ")
	{
		search = search + 1
	}

	a = a.substring(search, (a.length))
	search = a.length - 1
	while (a.charAt(search) ==" ")
	{
		search = search - 1
	}
	return a.substring(0, search + 1)
} 

/**
 * 입력값이 NULL인지 체크
 * @param obj   Object
 * @return true : Null 또는 공백
 */
function IsNull(obj) {
    if (obj.value == null || obj.value.trim() == "") {
        return true;
    }
    return false;
}

/**
 * 입력값에 스페이스 이외의 의미있는 값이 있는지 체크
 * @param obj   Object
 * @return true : 공백
 */
function IsEmpty(obj) {
    if (obj.value == null || obj.value.replace(/ /gi,"") == "") {
        return true;
    }
    return false;
}

/**
 * 입력값에 포함된 모든 스페이스 문자를 제거 후 리턴
 * @param str   Value
 * @return ret  스페이스가 제거된 문자열
 */
function RemoveSpaces(str) {
    var ret = "";
    
    if (str.length == 0) return ret;

    for (var i=0; i<str.length; i++) {
        if (str.charAt(i) != " ") ret += str.charAt(i);
    }
    return ret;
}
/*
function RemoveSpaces(obj, msg)
{
    var str = obj.value;
    var ret = "";
    
    if (str.length != 0)
	{
    	for (var i=0; i<str.length; i++) 
    	{
    	    if (str.charAt(i) != " ")
    	    {	
    	    	ret += str.charAt(i);
    	    }
    	    else
    	    {
    	    	alert("띄어쓰기 없이 입력해 주세요.");
    	    }
    	}
    	
    	obj.value = ret;
    }
}*/

/**
 * 문자열에 포함된 모든 변환대상 패턴을 변경하여 리턴
 * @param str   문자열
 * @return ret  변경된 문자열
 */
function ReplaceStr(str, find, replace)
{
    var pos = 0;
    pos = str.indexOf(find);

    while(pos != -1)
    {
        pre_str = str.substring(0, pos);
        post_str = str.substring(pos + find.length, str.length);
        str = pre_str + replace + post_str;
        pos = str.indexOf(find);
    }
    return str;
}

/**
 * 입력값에 특정 문자(chars)가 포함되지 않았는지 체크
 * 특정 문자를 허용하지 않으려 할 때 사용
 * ex) if (containsChars(form.name,"!,*&^%$#@~;")) {
 *         Alert("이름 필드에는 특수 문자를 사용할 수 없습니다.");
 *     }
 * @param obj   Object
 * @return true 특정 문자가 없을 경우
 */
function ContainsChars(obj,chars) {
    for (var inx = 0; inx < obj.value.length; inx++) {
       if (chars.indexOf(obj.value.charAt(inx)) != -1)
           return true;
    }
    return false;
}

/**
 * 입력값이 특정 문자(chars)만으로 되어있는지 체크
 * 특정 문자만 허용하려 할 때 사용
 * ex) if (!containsCharsOnly(form.blood,"ABO")) {
 *         Alert("혈액형 필드에는 A,B,O 문자만 사용할 수 있습니다.");
 *     }
 * @param obj   Object
 * @return true 특정 문자가 있을 경우
 */
function ContainsCharsOnly(obj,chars) 
{
	var newvalue = obj.value.trim();
	
    for (var inx = 0; inx < newvalue.length; inx++) 
    {
       if (chars.indexOf(newvalue.charAt(inx)) == -1)
           return false;
    }
    return true;
}



/**
 * 입력값이 한글인지 체크
 * @param obj   Object
 * @return true 한글인 경우
 */
function IsKorean(obj)
{
    if ((obj.value.length*2) == GetLenByByte(obj.value)) return true;
    return false;
}

/**
 * 입력값이 알파벳인지 체크
 * @param obj   Object
 * @return true 알파벳일 경우
 */
function IsAlphabet(obj) {
    var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    return ContainsCharsOnly(obj,chars);
}

/**
 * 입력값이 알파벳 대문자인지 체크
 * @param obj   Object
 * @return true 알파벳 대문자인 경우
 */
function IsUpperCase(obj) {
    var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    return ContainsCharsOnly(obj,chars);
}

/**
 * 입력값이 알파벳 소문자인지 체크
 * @param obj   Object
 * @return true 알파벳 소문자인 경우
 */
function IsLowerCase(obj) {
    var chars = "abcdefghijklmnopqrstuvwxyz";
    return ContainsCharsOnly(obj,chars);
}

/**
  * 입력된 문자열이 숫자 만을 포함하고 있는지 여부 리턴
  * @param obj   Object
  * @return true - 숫자만을 포함하고 있는 경우
 */
function IsNumber(obj) {
    var chars = "0123456789";
    return ContainsCharsOnly(obj,chars);
}

//modified by mkkim 2004.10.29
function IsNumber_mkkim(num) {
    var chars = "0123456789";
    var new_number = num;

    for (var inx = 0; inx < num.length; inx++) {
       if (chars.indexOf(num.charAt(inx)) == -1)
           return false;
    }
    return true;
}
/**
 * 입력값이 알파벳,숫자로 되어있는지 체크
 * @param obj   Object
 * @return true 알파벳,숫자로 되어있는 경우
 */
function IsAlphaNum(obj) {
    var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    return ContainsCharsOnly(obj,chars);
}

/**
 * 입력값이 숫자,대시(-)로 되어있는지 체크
 * @param obj   Object
 * @return true 숫자,대시(-)로 되어있는 경우
 */
function IsNumDash(obj) {
    var chars = "-0123456789";
    return ContainsCharsOnly(obj,chars);
}

/**
 * 입력값이 숫자,콤마(,)로 되어있는지 체크
 * @param obj   Object
 * @return true 숫자,콤마(,)로 되어있는 경우
 */
function IsNumComma(obj) {
    var chars = ",0123456789";
    return ContainsCharsOnly(obj,chars);
}

/**
 * 입력값이 숫자,날짜 구분자(.)로 되어있는지 체크
 * @param obj   Object
 * @return true 숫자,날짜 구분자(.)로 되어있는 경우
 */
function IsNumPeriod(obj) {
    var chars = ".0123456789";
    return ContainsCharsOnly(obj,chars);
}

/**
 * 입력값이 숫자,소숫점(.),숫자구분자(,)로 되어있는지 체크
 * @param obj   Object
 * @return true 숫자,날짜 구분자(.)로 되어있는 경우
 */
function IsMoney(obj) {
    var chars = ".,0123456789";
    return ContainsCharsOnly(obj,chars);
}

/**
 * 입력값이 이메일을 구성할 수 있는 문자들로 구성되어 있는지 체크
 * 단순한 이메일 입력포맷을 확인한다.
 * @param obj   Object
 * @return true 이메일 구성이 가능한 문자들로 구성되어 있을 경우
 */
function IsEmailAddr(obj) {
    var format = /^((\w|[\-\.])+)@((\w|[\-\.])+)\.([A-Za-z]+)$/;
    return IsValidFormat(obj, format);
}

/**
  * 입력된 문자열이 숫자 만을 포함하고 있는지 여부 리턴
  * 오류가 있을 경우 메세지를 표시하고 focus 이동
  * @param obj   Object
  * @return true - 숫자만을 포함하고 있는 경우
 */
function IsNumberMessage(obj) {
    if (!IsNumber(obj)) {
        //AlertFocus(obj, '숫자만 입력하십시오');
        return false;
    }
    return true;
}

/**
  * 입력된 문자열이 숫자 만을 포함하고 있는지를 체크하고 ,
  * 문자열의 길이가 특정 길이(Int)와 같은지 여부 체크
  * 오류가 있을 경우 메세지를 표시하고 focus 이동
  * @param obj   Object
  * @return true - 숫자만을 포함하고 있는 경우
  * @create by mkkim 060905
 */
function IsNumberChkLenMessage(obj, len) {
    if (!IsNumber(obj)) {
        //AlertFocus(obj, '숫자만 입력하십시오');
        return false;
    }

    if (!ChkLen(obj, len)) {
        //AlertFocus(obj, len+'자리 만큼만 입력해야 합니다.\n예를 참고하시오');
        return false;
  	}

    return true;
}

/*= NUMBER CONTROL ===========================================================

    1. 숫자 관련 기본 기능을 처리.
    2. Function List
        - AddComma(Object)
        : 입력값을 콤마가 포함된 문자열로 변환하여 리턴
          12345 를 입력하면 12,345 로 변환하여 리턴
        - RemoveComma(String)
        : 입력값에서 콤마를 없앤다.
        - RemoveDash(String)
        : 입력값에서 구분자(-)를 없앤다.
        - RemovePeriod(String)
        : 입력값에서 날짜 구분자(.) 를 없앤다.
        - ParseInt(str)
        : 문자열을 정수로 변환하여 리턴

============================================================================*/

/**
  * 입력값을 콤마가 포함된 문자열로 변환하여 리턴
  * @param obj   숫자
  * @return ret  콤마를 추가한 숫자
 */
function AddComma(obj) {
    var ret;
    if (!IsMoney(obj)) {
        obj.value = obj.value.substring(0, obj.value.length-1);
        
	    if (!IsMoney(obj)) {
	        AlertFocus(obj, "숫자만 입력하십시오.");        
        	return;
        }
    }
    var numstr = obj.value;
    numstr = RemoveComma(numstr);
    var rxSplit = new RegExp('([0-9])([0-9][0-9][0-9][,.])');
    var arrNumber = numstr.split('.');
    arrNumber[0] += '.';
    do {
        arrNumber[0] = arrNumber[0].replace(rxSplit, '$1,$2');
    }
    while (rxSplit.test(arrNumber[0]));
    if (arrNumber.length > 1) {
        ret = arrNumber.join('');
    } else {
        ret = arrNumber[0].split('.')[0];
    }
    obj.value = ret;
}

/**
 * 입력값에서 콤마를 없앤다.
 * @param str   문자열
 * @return 변경된 문자열
 */
function RemoveComma(str) {
    return str.replace(/,/gi,"");
}

/**
 * 입력값에서 구분자(-)를 없앤다.
 * @param str   문자열
 * @return 변경된 문자열
 */
function RemoveDash(str) {
    return str.replace(/-/gi,"");
}

/**
 * 입력값에서 날짜 구분자(.)를 없앤다.
 * @param str   문자열
 * @return 변경된 문자열
 */
function RemovePeriod(str) {
    return ReplaceStr(str, '.', '');
}

/**
  * 문자열을 정수로 변환하여 리턴
  * @param str   문자열
  * @return 정수
 */
function ParseInt(str) {
    return parseInt(str, 10);
}

/*= DATETIME CONTROL ===========================================================

    1. 일자와 시간 관련 기본 기능을 처리.
    2. Function List
        - IsDate(Object)
        : 입력값을 일자 Format 인지 확인
        - IsMonth(month)
        : 입력된 문자열이 일자의 월로 변환가능한지 확인
        - IsDay(year, month, day)
        : 입력된 문자열이 일자의 일로 변환가능한지 확인
        - GetEndDay(year, month)
        : 해당 년, 월의 마지막 일자를 가져온다
        - AddDateSeperator(Object)
        : 입력값에 일자 형식에 맞추어 DATE_SEPERATOR 를 추가한다.
        - IsTime(Object)
        : 입력값을 시간 Format 인지 확인
        - IsTimeStr(Str)
        : 입력값을 시간 Format 인지 확인

============================================================================*/

/**
  * 입력된 문자열이 일자 Format 확인
  * @param str   문자열
  * @return true 일자 , false
 */
function IsDate ( obj )
{
	str = RemoveSpaces(obj.value);
	str = RemovePeriod(obj.value);
	if (!IsNumPeriod(obj)) {
	        obj.value = '';
        //AlertFocus(obj, "날짜는 YYYYMMDD의 형식으로 입력하십시오");
        return false;
	}
	if (str.length != 8) {
	        obj.value = '';
        //AlertFocus(obj, "날짜는 YYYYMMDD의 형식으로 입력하십시오");
	    return false;
	}

	var year  = str.substring(0,4);
	var month = str.substring(4,6);
	var day   = str.substring(6,8);

	if ( ParseInt( year ) >= 1900  && IsMonth( month ) && IsDay( year,month ,day) )
		return true;
	else {
	        obj.value = '';
        //AlertFocus(obj, "날짜는 YYYYMMDD의 형식으로 입력하십시오");
		return false;
	}
}

/**
  * 입력된 문자열이 6자리 일자 Format 확인
  * @param str   문자열
  * @return true 일자 , false
 */
function IsDateSixLength ( obj )
{
	str = RemoveSpaces(obj.value);
	str = RemovePeriod(obj.value);
	if (!IsNumPeriod(obj)) {
        //AlertFocus(obj, "날짜는 YYMMDD의 형식으로 입력하십시오");
        return false;
	}
	if (str.length != 6) {
        //AlertFocus(obj, "날짜는 YYMMDD의 형식으로 입력하십시오");
	    return false;
	}

	var year  = str.substring(0,2);
	var month = str.substring(2,4);
	var day   = str.substring(4);

	if ( IsMonth(month) && IsDay2(day) )
		return true;
	else {
        //AlertFocus(obj, "날짜는 YYMMDD의 형식으로 입력하십시오");
		return false;
	}
}

/**
  * 입력된 문자열이 일자의 월로 변환가능한지 확인
  * @param month   문자열
  * @return true : 가능할 경우
 */
function IsMonth(month) {
    if (month.length > 2) return false;
    month = ParseInt(month);
    if ((month <= 0) || (month > 12)) return false;
    return true;
}

/**
  * 입력된 문자열이 일자의 일로 변환가능한지 확인
  * @param year   년
  * @param month  월
  * @param day    일
  * @return true : 가능할 경우
 */
function IsDay(year, month, day) {
    if (day.length > 2) return false;
    year  = ParseInt(year, 10);
    month = ParseInt(month, 10);
    day   = ParseInt(day, 10);
    if ((day <= 0) || (day > GetEndDay(year, month))) return false;
    return true;
}

/**
  * 입력된 문자열이 일자의 일로 변환가능한지 확인 (월에 관계없음)
  * @param day 문자열
  * @return true : 가능할 경우
 */
function IsDay2(day) {
    if (day.length > 2) return false;
    day = ParseInt(day, 10);
    if ((day <= 0) || (day > 31)) return false;
    return true;
}

/**
  * 해당 년, 월의 마지막 일자를 가져온다
  * @param year   년
  * @param month  월
  * @return 마지막 일자
 */
function GetEndDay(year,month){//
    if ((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
	    return 31;
    else {
	    if(month==2) {
		    if ((year%4==0) && ((year/4)%200!=0))	return 29;
		    else	return 28;
	    } else {
		    return 30;
        }
    }
}

/**
  * 해당 년, 월의 마지막 일자에 맞게 SelectBox 생성
  * @param objYear   년
  * @param objMonth  월
  * @return 마지막 일자
 */
function getSelectEndDay(objYear, objMonth, objDay, sValue, header) {
    var endDay = GetEndDay(eval(objYear.value), eval(objMonth.value));
    var sDay;
    var day;
    var selIndex = 0;

    for (var i=objDay.options.length; i>0; i--) {
        objDay.remove(i - 1);
    }

    if(header != null && header != "") {
	    objDay.options[0] = new Option(header, "");
	    for(var i=1; i<=endDay; i++) {
	        if(i<10) day = "0" + i;
	        else day = i;

	        day = new Option(day, day);
	        objDay.options[i] = day;

	        if(sValue != "" && i == eval(sValue)) selIndex = i;
	    }
    } else {
	    for(var i=1; i<=endDay; i++) {
	        if(i<10) day = "0" + i;
	        else day = i;

	        day = new Option(day, day);
	        objDay.options[i-1] = day;

	        if(sValue != "" && i == eval(sValue)) selIndex = i-1;
	    }
    }
    objDay.selectedIndex = selIndex;
}


/**
 * 입력값이 유효한 일자인지 확인하고
 * 일자 형식에 맞추어 DATE_SEPERATOR 를 추가한다.
 * @param obj   Object
 * @return 구분자가 추가된 일자 형식의 문자열
 */
function  AddDateSeperator(obj)
{
    if (IsEmpty(obj)) return false;
  if (!IsDate(obj)) {
      return false;
  }
  var numstr = RemovePeriod(obj.value);
  if (numstr.length != 8) {
      obj.value = '';
      //AlertFocus(obj, "날짜는 YYYYMMDD의 형식으로 입력해주십시오");
      return false;
  }
  var rxSplit = new RegExp('([0-9][0-9][0-9][0-9])([0-9][0-9])([0-9][0-9])');
  numstr = numstr.replace(rxSplit, '$1'+DATE_SEPERATOR+'$2'+DATE_SEPERATOR+'$3');
  obj.value = numstr;
  return true;
}

/**
 * 처음 Object와 두번째 Object 사이의 일자를 반환한다.
 * 이경우에 두번째 Object가 처음 Object 보다 나중 일자이다.
 * @param fromObj   Object
 * @param toObj     Object
 * @return int 두 Object 사이의 일자
 */
function GetDaysBetween(fromObj, toObj) {
    var numstr1 = RemovePeriod(fromObj.value);
    var user_day1 = new Date(numstr1.substr(0,4), ParseInt(numstr1.substr(4,2))-1, ParseInt(numstr1.substr(6)));
    var numstr2 = RemovePeriod(toObj.value);
    var user_day2 = new Date(numstr2.substr(0,4), ParseInt(numstr2.substr(4,2))-1, ParseInt(numstr2.substr(6)));
    user_day1 = user_day1.getTime();
    user_day2 = user_day2.getTime();
    var day_gab = Math.floor( (user_day2 - user_day1) / (60*60*24*1000) );
    return day_gab;
}

/**
 * 오늘까지 남은 일수를 반환한다. 오늘 이후의 일자에 대해서는 음수값을 반환한다.
 * @param obj   Object
 * @return int 남은 일수
 */
function GetDaysToToday(obj) {
    var numstr = RemovePeriod(obj.value);
    var user_day = new Date(numstr.substr(0,4), ParseInt(numstr.substr(4,2))-1, ParseInt(numstr.substr(6)));
    user_day = user_day.getTime();
    var today = new Date();
    today = today.getTime();
    var day_gab = Math.floor( (today - user_day) / (60*60*24*1000) );
    return day_gab;
}

/**
 * 입력된 일자가 오늘 이후의 일자인지 확인한다.
 * @param obj   Object
 * @return true : 오늘 이후의 일자일 경우, false
 */
function IsAfterToday(obj)
{
    if (IsEmpty(obj)) return false;
    if (!IsDate(obj)) {
        return false;
    }
    var day_gab = GetDaysToToday(obj);
    if( day_gab > 0) {
        //AlertFocus(obj, "오늘이후의 날짜를 입력하셔야 합니다");
        obj.value = "";
        return false;
    }
    return true;
}

/**
 * 처음 Object의 일자가 두번째 Object의 일자보다 빠른지 확인
 * @param obj   Object
 * @return true : 오늘 이후의 일자일 경우, false
 */
function IsSequentialDate(fromObj, toObj, isToday)
{
    if (IsEmpty(fromObj)) return false;
    if (IsEmpty(toObj)) return false;
    if (!IsDate(fromObj)) {
        return false;
    }
    if (!IsDate(toObj)) {
        return false;
    }
    var day_gab = GetDaysBetween(fromObj, toObj);
    if( day_gab < 0) {
        //AlertFocus(fromObj, "날짜를 바르게 입력하셔야 합니다");
        return false;
    }
//    if ((!isToday)&&(day_gab == 0)) {
//        //AlertFocus(fromObj, "날짜를 바르게 입력하셔야 합니다");
//        return false;
//    }
    return true;
}
/**
  * 입력된 문자열 시간 Format 확인
  * @param str   문자열
  * @return true 일자 , false
 */
function IsTime ( obj )
{
	str = RemoveSpaces(obj.value);
	str = RemovePeriod(str);
	if (!IsNumPeriod(obj)) {
	    obj.value = '';
        //AlertFocus(obj, "시간은 HH24MI의 형식으로 입력하십시오");
        return false;
	}
	if (str.length != 4) {
	    obj.value = '';
        //AlertFocus(obj, "시간은 HH24MI의 형식으로 입력하십시오");
	    return false;
	}

	var hour  = str.substring(0,2);
	var minute = str.substring(2,4);

	if ( ParseInt( hour ) <= 23 && ParseInt( minute ) <= 59 )
		return true;
	else {
	    obj.value = '';
        //AlertFocus(obj, "시간은 23시 59분 이내로 입력해야 합니다.");
		return false;
	}
}

/**
  * 입력된 문자열 시간 Format 확인
  * @param str   문자열
  * @return true 일자 , false
 */
function IsTimeStr ( value )
{
	str = RemoveSpaces(value);
	str = RemovePeriod(str);

	if (str.length != 4) {
        Alert("시간은 HH24MI의 형식으로 입력하십시오");
	    return false;
	}

	var hour  = str.substring(0,2);
	var minute = str.substring(2,4);

	if ( ParseInt( hour ) <= 23 && ParseInt( minute ) <= 59 )
		return true;
	else {
        Alert("시간은 23시 59분 이내로 입력해야 합니다.");
		return false;
	}
}

/*= TEXT INPUT VALUE VALIDATION CHECK ==========================================

    1. TEXT 입력 값의 유효성을  확인한다.
    2. Function List
        - IsValidJumin
        : 문자열이 올바른 주민등록번호인지 확인하여 리턴
        - IsValidSaupja
        : 문자열이 올바른 사업자등록번호인지 확인하여 리턴
        - IsValidBeopin
        : 문자열이 올바른 법인번호인지 확인하여 리턴
        - IsValidAccountPassword
        : 신규계좌 생성시 입력된 비밀번호의 유효성을 확인한다.

============================================================================*/

/**
  * 문자열이 올바른 주민등록번호인지 확인하여 리턴
 * @param obj   Object
  * @return true : 바른 주민등록번호일 경우
 */
function IsValidJumin(oResNo)
{
	if(IsEmpty(oResNo)){
		return false;
	}
	var sResNo = oResNo.value;
	if(sResNo.length != 13) {
		return false;
    }

	var a = new Array(6)
	var b = new Array(7)
	var tot=0
	var c=0

	var sJumin0 = sResNo.substring(0,6);
	if (!IsMonth(sJumin0.substring(2,4))) {
		return false;
	}
	else if (!IsDay2(sJumin0.substring(4,6))) {
		return false;
	}

	var sJumin1 = sResNo.substring(6,13);

	for(var i=1;i<7;i++)
	{
		a[i]=sJumin0.substring(i-1,i);
		b[i]=sJumin1.substring(i-1,i);

		if(i<3)
			c=Number(b[i])*(i+7);
		else
			c=Number(b[i])*((i+9)%10);

		tot = tot + Number(a[i])*(i+1) + c;
	}

	b[7]=sJumin1.substring(6,7);

	if(Number(b[7]) != ((11-(tot%11))%10)) {
		return false;
	}
	else {
		return true;
	}

}

/**
  * 문자열이 올바른 사업자등록번호인지 확인하여 리턴
 * @param obj   Object
 * @return true : 바른 사업자등록번호일 경우
 */
function IsValidSaupja(oCorpNo)
{
    if (IsEmpty(oCorpNo)) return false;
    var sCorpNo = RemoveDash(oCorpNo.value);
	if(sCorpNo.length != 10) {
	    return false;
    }

	var chkRule = "137137135";
	var step1, step2, step3, step4, step5, step6, step7;

	step1 = 0;

	for (var i=0; i<7; i++)
	{
		step1 = step1 + (sCorpNo.substring(i, i+1) * chkRule.substring(i, i+1));
	}

	step2 = step1 % 10;
	step3 = (sCorpNo.substring(7, 8) * chkRule.substring(7, 8)) % 10;
	step4 = sCorpNo.substring(8, 9) * chkRule.substring(8, 9);
	step5 = Math.round(step4 / 10 - 0.5);
	step6 = step4 - (step5 * 10);
	step7 = (10 - ((step2 + step3 + step5 + step6) % 10)) % 10;

	if (sCorpNo.substring(9, 10) != step7)
		return false;
	else
		return true;
}

/**
  * 문자열이 올바른 법인번호인지 확인하여 리턴
 * @param obj   Object
  * @return true : 바른 법인번호일 경우
 */
function IsValidBeopin(oBeopinNo){
    if (IsEmpty(oBeopinNo)) return false;
    var pid = RemoveDash(oBeopinNo.value);
	if(pid.length != 10) {
	    return AlertFocus( oBeopinNo, "올바른 법인등록번호가 아닙니다.");
    }
	var pid = removeChar(oBeopinNo.value, "-");
	var number = "0123456789";
	var szChkDgt = "121212121212";
	var pidono = "";
	if (oBeopinNo.value.length < 1) {
		return;
	}
	for (var nCol=0; nCol < pid.length ; nCol++) {
		if (number.indexOf(pid.charAt(nCol)) >= 0) {
				pidono += pid.charAt(nCol);
		}
	}
	var lastpid = pidono.substring(12,13);
	var i = 0;
	var j = 0;
	var nV1 = 0;
	var nV2 = 0;
	var nV3 = 0;
	for( i=0 ; i<12 ; i++) {
		nV1 = pidono.substring(i, i+1) * szChkDgt.charAt(i);
		if(nV1 > 9) {
			nV2 += nV1 % 10;
		} else {
			nV2 += nV1;
		}
	}
	nV3 = nV2 % 10;
	if( nV3 > 0 ) {
		nV3 = 10 - nV3;
	} else {
		nV3 = 0;
	}
	if (lastpid == nV3) {
		oBeopinNo.value= pid.substring(0, 7) + "-" + pid.substring(7, 13);
	} else {
		AlertFocus( oBeopinNo, "올바른 법인등록번호가 아닙니다.");
		return;
	}
}

/**
 * 신규계좌 생성시 입력된 비밀번호의 유효성을 확인한다.
 * @param obj   Object
 * @return true : 사용가능한 비밀번호일 경우
 */
function IsValidAccountPassword(obj)
{
    if (IsEmpty(obj)) return;
    if (!IsNumer(obj)) {
        //AlertFocus(obj, "숫자만 입력하십시오.");
        return;
    }
    if (numstr.length != 4) {
        //AlertFocus(obj, "비밀번호는 4자리입니다.");
        return;
    }
}

/**
 * 입력값이 사용자가 정의한 포맷 형식인지 체크
 * 자세한 format 형식은 자바스크립트의 'regular expression'을 참조
 * @param obj      Object
 * @param format   String
 * @return true  올바른 포맷 형식일 경우
 */
function IsValidFormat(obj, format) {
    if (obj.value.search(format) != -1) {
        return true;
    }
    return false;
}

/**
 * 이메일 주소의 유효성을 확인한다.
 * @param obj   Object
 * @return true : 사용가능한 이메일 주소일 경우
 */
function IsValidEmail(obj)
{
    if (IsEmpty(obj)) return;
    if (!IsEmailAddr(obj)) {
        //AlertFocus(obj, "잘못된 형식의 이메일 주소입니다");
        return;
    }
}

/**
 * 이메일 주소의 유효성을 확인한다.
 * @param obj   Object
 * @return true : 사용가능한 이메일 주소일 경우
 */
function IsOnlyKorean(obj)
{
    if (IsEmpty(obj)) return;
    if (!IsKorean(obj)) {
        //AlertFocus(obj, "한글만 입력하실 수 있습니다");
        return;
    }
}

/*= TEXT INPUT VALUE FORMAT ================================================

    1. TEXT 입력 값의 기준 포맷을 따라 변경한다
    2. Function List
        - AddSeperatorToAccountNo(Object)
        : 11자리의 계좌번호를 입력받아 자동으로 '-'를 더하여 리턴(ex)
        - AddSeperatorToJuminNo(Object)
        : 13자리의 주민등록번호를 입력받아 자동으로 '-'를 더하여 리턴(ex)123456-7890123
        - AddSeperatorToSaupjaNo(Object)
        : 10자리의 사업자번호를 입력받아 자동으로 '-'를 더하여 리턴(ex)123-45-67890
        - AddSeperatorToCardNo(Object)
        : 입력되는 카드번호의 4자리마다 '-'를 더하여 리턴 (ex)1234-5678-9012-3456

============================================================================*/

/**
 * 11자리의 계좌번호를 입력받아 자동으로 '-'를 더하여 리턴
 * @param obj   Object
 * @return acct 계좌번호
 */
function AddSeperatorToAccountNo(obj)
{
    if (IsEmpty(obj)) return;
    if (!IsNumDash(obj)) {
        //AlertFocus(obj, "숫자만 입력하십시오.");
        return;
    }
    var numstr = RemoveDash(obj.value);
    if (numstr.length != 11) {
        //AlertFocus(obj, "계좌번호는 11자리입니다");
        return;
    }
    var rxSplit = new RegExp('([0-9][0-9][0-9])([0-9][0-9])([0-9][0-9][0-9][0-9][0-9][0-9])');
    numstr = numstr.replace(rxSplit, '$1-$2-$3');
    obj.value = numstr;
}

/**
  * 13자리의 주민등록번호를 입력받아 자동으로 '-'를 더하여 리턴
 * @param obj   Object
  * @return acct 주민등록번호
 */
function AddSeperatorToJuminNo(obj)
{
    if (IsEmpty(obj)) return;
    if (!IsNumDash(obj)) {
        //AlertFocus(obj, "숫자만 입력하십시오.");
        return false;
    }
    if (!IsValidJumin(obj)) {
        return false;
    }
    var numstr = RemoveDash(obj.value);
    var rxSplit = new RegExp('([0-9][0-9][0-9][0-9][0-9][0-9])([0-9][0-9][0-9][0-9][0-9][0-9][0-9])');
    numstr = numstr.replace(rxSplit, '$1-$2');
    obj.value = numstr;
}

/**
 * 10자리의 사업자번호를 입력받아 자동으로 '-'를 더하여 리턴
 * @param obj   Object
 * @return acct 사업자번호
 */
function AddSeperatorToSaupjaNo(obj)
{
    if (IsEmpty(obj)) return;
    if (!IsNumDash(obj)) {
        //AlertFocus(obj, "숫자만 입력하십시오.");
        return false;
    }
    if (!IsValidSaupja(obj)) {
        return false;
    }
    var numstr = RemoveDash(obj.value);
    var rxSplit = new RegExp('([0-9][0-9][0-9])([0-9][0-9])([0-9][0-9][0-9][0-9][0-9])');
    numstr = numstr.replace(rxSplit, '$1-$2-$3');
    obj.value = numstr;
}

/**
 * 10자리 혹은 13자리의 사업자번호,주민번호를 입력받아 자동으로 '-'를 더하여 리턴
 * @param obj   Object
 * @return acct 사업자번호, 주민번호
 */
function AddSeperatorToSilmyungNo(obj)
{
    if (IsEmpty(obj)) return;
    var numstr = RemoveDash(obj.value);
    if (numstr.length == 10) {
        AddSeperatorToSaupjaNo(obj);
    } else if (numstr.length == 13){
        AddSeperatorToJuminNo(obj);
    } else {
    	AlertFocus(obj, "잘못된 형식의 실명번호입니다");
    }
}

/**
 * 10자리 혹은 13자리의 사업자번호,주민번호를 입력받아 자동으로 '-'를 더하여 리턴
 * @param obj1   Object
 * @param obj2   Object
 * @return acct 사업자번호, 주민번호
 */
function checkSilmyungNo(obj1, obj2)
{
	var obj = obj1.value+obj2.value;
    if (IsEmpty(obj)) return;
    if (obj.length == 10) {
        AddSeperatorToSaupjaNo(obj);
    } else if (obj.length == 13){
        AddSeperatorToJuminNo(obj);
    } else {
    	AlertFocus(obj, "잘못된 형식의 실명번호입니다");
    }
}

/**
 * 카드번호 입력시 4자리마다 NO_SEPERATOR(-) 추가한다
 * @param obj   Object
 * @return
 */
function AddSeperatorToCardNo(obj)
{
    if (IsEmpty(obj)) return;
    if (!IsNumDash(obj)) {
        obj.value = obj.value.substr(0, obj.value.length-1);
        //AlertFocus(obj, "숫자만 입력하십시오.");
        return false;
    }
    var numstr = RemoveDash(obj.value);
    if (numstr.length != 16) {
        //AlertFocus(obj, "카드번호는 16자리입니다");
        return;
    }
    var numstr = obj.value;
    var num = numstr;
    var rxSplit = new RegExp('([0-9][0-9][0-9][0-9])([0-9])');
    do {
        numstr = numstr.replace(rxSplit, '$1-$2');
    }
    while (rxSplit.test(numstr));

    obj.value = numstr;
}

/**
 * 숫자만 입력되었는지 체크한다.
 * @param obj Object
 * @return
 */
function checkNum(obj) {
	if (IsEmpty(obj)) return;
	if(IsNumber(obj) == false) {
	    obj.value = "";
		AlertFocus(obj, "숫자만 입력하십시오.");
        return false;
	}
}

/**
* 텍스트 박스의 문자열 길이를 체크한다.
*
* @param    obj, maxlen
* @return    void
*/
function CheckLen(obj, maxlen, msgNo, msgText)
{
    var str_src    = obj.value;
    var str_len = GetLenByByte(str_src);
    var message;

    if(str_len > maxlen)
    {
        //message = GetMsg(msgNo, msgText, Math.floor(maxlen/2), maxlen);
        message = GetMsg(msgNo, msgText, maxlen, maxlen);

        alert(message);
        //alert(maxlen + "바이트까지만 입력 가능합니다.");
        obj.value = stringCut(str_src, maxlen);
        return false;
    }
    else return true;
}


/**
* 문자열 자르기
*
* @param    string    str        사용자가 입력한 문자열
* @param    int        MAX_LEN    입력문자의 최대값
* @return    string    str
*/
function stringCut(str, MAX_LEN)
{
    var str;
    var len = 0;
    var temp;
    var count = 0;

    len = str.length;

    for (k=0 ; k<len ; k++)
    {
        temp = str.charAt(k);

        if (escape(temp).length > 4) {
            count += 3;
        }
        else
            if(escape(temp) != "%0D")
                count++;

        if(count > MAX_LEN)
        {
            break;
        }
    }

    return str.substring(0, k);

}

/**
 * radio 버튼 중 선택한 값을 Return한다.
 * @param field : radio button 객체
 * @return 선택한 값
 */
function getCheckedValue(radio) {
    var len = radio.length;
    var chkValue = "";

    for(i=0; i<len; i++) {
        if(radio[i].checked == true) {
            chkValue = radio[i].value;
            break;
        }
    }
    return chkValue;
}

// 이미지 포맷 체크
function checkImgFormat(msg, imgPath)
{
	if (imgPath.toLowerCase().indexOf(".jpeg") != -1 || imgPath.toLowerCase().indexOf(".jpg") != -1 || imgPath.toLowerCase().indexOf(".gif") != -1)
	{
		return true;
	}
	else
	{

		if (imgPath.trim() != "" )
		{
			alert(msg + "은(는) JPG, GIF파일만  허용됩니다.");
			return false;
		}
	}
}

// 파일 포맷 체크
function checkFileFormat(msg, filePath, ext)
{ 
	var arr = ext.split(","); 
	var cnt = 0;
	
	for(i=0; i<arr.length; i++)
	{ 
		if(filePath.toLowerCase().indexOf((arr[i].toLowerCase()).trim()) != -1)
		{ 
			cnt++;
		}
	}  
	if(cnt > 0)
	{ 
		return true;
	}
	else
	{ 
		alert(msg + "은(는) " + ext + "파일만  허용됩니다.");
		return false;		
	}
}

function fnCheckDateLimit(form, nowdate, sname, ename, maxmonth) 
{	
    if(maxmonth == "") maxmonth = "0";
    
	var Form = form;
	var str1 = "";
	var str2 = "";
	var maxday = maxmonth * 30;

	if(sname == "") sname = "txtSchFromDt";
	if(ename == "") ename = "txtSchToDt";
	
	if( fnCheckDate(Form, nowdate, sname, ename))
	{
		if(maxmonth != "0" && parseInt(GetDaysBetween(eval("Form."+sname), eval("Form."+ename))) >  maxday)
		{	
			Alert(GetMsg('207', maxmonth, null, null));
			SetFocus(eval("Form."+ename));
			return false;
		}
		return true;	
	}
	return false;
}

function fnCheckDate(form, nowdate, sname, ename) 
{
	var Form = form;
	
	if(sname == "") sname = "txtSchFromDt";
	if(ename == "") ename = "txtSchToDt";

	if(IsNumber(eval("Form."+sname)) == false || eval("Form."+sname).value.length != 8)
	{
		Alert(GetMsg('200', "검색시작일", null, null));
		SetFocus(eval("Form."+sname));
		return false;
	}
	
	if(IsNumber(eval("Form."+ename)) == false || eval("Form."+ename).value.length != 8) 
	{
		Alert(GetMsg('200', "검색시작일", null, null));
		SetFocus(eval("Form."+ename));
		return false;
	}
	
	if(parseInt(eval("Form."+sname).value) >  parseInt(eval("Form."+ename).value))
	{
		Alert(GetMsg('204', null, null, null));
		SetFocus(eval("Form."+ename));
		return false;
	}
	
	return true;
}


function fnCheckMonthLimit(form, sname, ename, etitle, maxmonth) 
{	
    if(maxmonth == "") maxmonth = "0";
    
	var Form = form;

	if(sname == "") sname = "txtSchStartDate";
	if(ename == "") ename = "txtSchEndDate";
	if(etitle == null || etitle == "") etitle = "종료";
	
	if( fnCheckMonth(Form, sname, ename, etitle))
	{
//		if(maxmonth != "0" && parseInt(GetDaysBetween(eval("Form."+sname), eval("Form."+ename))) >  maxday)
//		{	
//			Alert(GetMsg('207', maxmonth, null, null));
//			SetFocus(eval("Form."+ename));
//			return false;
//		}
		return true;	
	}
	
	return false;
}

function fnCheckMonth(form, sname, ename, etitle) 
{
	var Form = form;
	
	if(sname == "") sname = "txtSchStartDate";
	if(ename == "") ename = "txtSchEndDate";
	if(etitle == null || etitle == "") etitle = "종료";
	
	etitle = etitle + "년월";

	if(IsNumber(eval("Form."+sname)) == false || eval("Form."+sname).value.length != 6)
	{
		Alert(GetMsg('201', "시작년월", null, null));
		SetFocus(eval("Form."+sname));
		return false;
	}
	
	if(IsNumber(eval("Form."+ename)) == false || eval("Form."+ename).value.length != 6) 
	{
		Alert(GetMsg('201', etitle, null, null));
		SetFocus(eval("Form."+ename));
		return false;
	}
	
	if(parseInt(eval("Form."+sname).value) >  parseInt(eval("Form."+ename).value))
	{
		Alert(GetMsg('210', etitle, null, null));
		SetFocus(eval("Form."+ename));
		return false;
	}
	
	return true;
}

function fnTagValidateCheck(obj)
{ 
	if(ContainsChars(obj, "%&+|\"'=\\<>?/"))
		obj.value = obj.value.substring(0, obj.value.length-1);
}

function upOption(objId)
{
  var currernt;
  var reverse; 
  var obj = document.getElementById(objId);
  if (obj.selectedIndex != -1)
  {
	  if( obj.options[obj.options.selectedIndex].index > 0)
	  {
		current = obj.options[obj.options.selectedIndex].text;
		reverse = obj.options[obj.options[obj.options.selectedIndex].index-1].text;
		obj.options[obj.options.selectedIndex].text = reverse;
		obj.options[obj.options[obj.options.selectedIndex].index-1].text = current;

		current = obj.options[obj.options.selectedIndex].value;
		reverse = obj.options[obj.options[obj.options.selectedIndex].index-1].value;
		obj.options[obj.options.selectedIndex].value = reverse;
		obj.options[obj.options[obj.options.selectedIndex].index-1].value = current;

		self.focus();
		obj.options.selectedIndex--;
	  }
  }
}

function downOption(objId)
{
  var currernt;
  var next;
  var obj = document.getElementById(objId);
  if (obj.selectedIndex != -1)
  {
	  if( obj.options[obj.options.selectedIndex].index != obj.length-1)
	  {
		current = obj.options[obj.options.selectedIndex].text;
		next = obj.options[obj.options[obj.options.selectedIndex].index+1].text;
		obj.options[obj.options.selectedIndex].text =  next;
		obj.options[obj.options[obj.options.selectedIndex].index+1].text = current;

		current = obj.options[obj.options.selectedIndex].value;
		next = obj.options[obj.options[obj.options.selectedIndex].index+1].value;
		obj.options[obj.options.selectedIndex].value =  next;
		obj.options[obj.options[obj.options.selectedIndex].index+1].value = current;

		self.focus();
		obj.options.selectedIndex++;
	  }
  }
}

/** 이미지 리사이징
 * onLoad='adjustImage(this);'
**/
function adjustImage(target_img, maxWidth, maxHeight)
{
	var newX, newY;
	var newHeight, newWidth;
	var newImg;

    if(!maxWidth)
    {
	    maxWidth = 500;
	}
	if(!maxHeight)
	{
	    maxHeight = 500;
	}

	newImg = new Image();
	newImg.src = target_img.src;
	imgw = newImg.width;
	imgh = newImg.height;

	//if (imgw*1.2 >= imgh) {
	//	return false;
	//}

	//	alert('w='+imgw);
	//	alert('h='+imgh);

	if (imgw > maxWidth || imgh > maxHeight) 
	{
		if(imgw > imgh) 
		{
			if(imgw > maxWidth)
				newWidth = maxWidth;
			else
				newWidth = imgw;
			newHeight = Math.round((imgh*newWidth)/imgw);
		}
		else
		{
			if(imgh > maxHeight)
				newHeight = maxHeight;
			else
				newHeight = imgh;
			newWidth = Math.round((imgw*newHeight)/imgh);
		}
	}
	else
	{
		newWidth = imgw;
		newHeight = imgh;
	}

	newX = maxWidth/2 - newWidth/2;
	newY = maxHeight/2 - newHeight/2;

	target_img.onload = null;
	target_img.src = newImg.src;
	target_img.width = newWidth;
	target_img.height = newHeight;
}

/** 이미지 리사이징
 * onLoad='adjustImage(this);'
**/
function adjustImageW(target_img, maxWidth)
{
	var newX;
	var newWidth;
	var newImg;

    if(!maxWidth) 
    {
	    maxWidth = 500;
	}

	newImg = new Image();
	newImg.src = target_img.src;
	imgw = newImg.width;

	if (imgw > maxWidth) 
	{
		newWidth = maxWidth;
	}
	else
	{
		newWidth = imgw;
	}

	newX = maxWidth/2 - newWidth/2;

	target_img.onload = null;
	target_img.src = newImg.src;
	target_img.width = newWidth;
}

/** 이미지 팝업 띄우기 
**/
function displayImage(picName, windowName){
    var imgSrc = new Image();
    var scroll = "no";
    var resize = "no";
    var sizeText = "";
    var ratio;
			
    imgSrc.src = picName;
    imgWidth   = imgSrc.width;
    imgHeight  = imgSrc.height;

    if(imgWidth > imgHeight) {
        if(imgWidth > screen.availWidth) {
            ratio = screen.availWidth / imgWidth;

            imgHeight = imgHeight * ratio;
            imgWidth  = screen.availWidth;
            resize    = "yes";
            sizeText  = "width=" + screen.availWidth + ", height=" + imgHeight;
        }
    } else {
        if(imgHeight > screen.availHeight) {
            ratio = screen.availHeight / imgHeight;

            imgWidth = imgWidth * ratio;
            imgHeight = screen.availHeight;
            resize = "yes";
            sizeText = "width=" + imgWidth + ", height=" + screen.availHeight;

        }
    }

    picName = ReplaceStr(picName, " ", "%20");
		
    var winHandle = window.open("" ,windowName,"top=50, left=50, toolbar=no,scrollbars=" + scroll + ", resizable=yes,width=" + imgWidth + ",height=" + imgHeight)
    if(winHandle != null){
        var htmlString = "<html><head><title>Picture</title></head>"
        htmlString += "<body leftmargin=0 topmargin=0 marginwidth=0 marginheight=0 >"
        htmlString += "<table width='100%' height='100%' cellpadding='0' cellspacing='0' border='0' align='center' valign='middle'><tr><td align='center'>"
        htmlString += "<a href=javascript:window.close()><img src=" + picName + " border=0 alt='닫기' " + sizeText + "></a>"
        htmlString +=  "</td></tr></table>";
        htmlString += "</body></html>"
        winHandle.document.open();
        winHandle.document.write(htmlString)
        winHandle.document.close()
    }

    if(winHandle != null) winHandle.focus()

    return winHandle
}

/** 이미지 팝업 띄우기
 * 아르떼 요청으로 팝업 이미지 원본으로 보이게 수정, 스크롤수정
 * 2009.11.05 김치훈 수정
**/
function displayImage2(picName, windowName){
    var imgSrc = new Image();
    var scroll = "yes";
    var resize = "no";
    var sizeText = "";
    var ratio;
			
    imgSrc.src = picName;
    imgWidth   = imgSrc.width;
    imgHeight  = imgSrc.height;

    if(imgWidth > imgHeight) {
        if(imgWidth > screen.availWidth) {
            ratio = screen.availWidth / imgWidth;

            imgHeight = imgHeight * ratio;
            imgWidth  = screen.availWidth;
            resize    = "yes";
            sizeText  = "width=" + screen.availWidth + ", height=" + imgHeight;
        }
    } else {
        if(imgHeight > screen.availHeight) {
            ratio = screen.availHeight / imgHeight;

            //imgWidth = imgWidth * ratio;
            //imgHeight = screen.availHeight;
            //resize = "yes";
            //sizeText = "width=" + imgWidth + ", height=" + screen.availHeight;

            resize = "yes";
            sizeText = "width=" + imgWidth + ", height=" + imgHeight;

        }
    }

    picName = ReplaceStr(picName, " ", "%20");
		
    var winHandle = window.open("" ,windowName,"top=50, left=50, toolbar=no,scrollbars=" + scroll + ", resizable=yes,width=" + imgWidth + ",height=" + imgHeight)
    if(winHandle != null){
        var htmlString = "<html><head><title>Picture</title></head>"
        htmlString += "<body leftmargin=0 topmargin=0 marginwidth=0 marginheight=0 >"
        htmlString += "<table width='100%' height='100%' cellpadding='0' cellspacing='0' border='0' align='center' valign='middle'><tr><td align='center'>"
        htmlString += "<a href=javascript:window.close()><img src=" + picName + " border=0 alt='닫기' " + sizeText + "></a>"
        htmlString +=  "</td></tr></table>";
        htmlString += "</body></html>"
        winHandle.document.open();
        winHandle.document.write(htmlString)
        winHandle.document.close()
    }

    if(winHandle != null) winHandle.focus()

    return winHandle
}

// Tag 제거
function fnStripTag(str)
{  
	str = str.replace(/<[^<|>]*>|&nbsp;|\r\n/gi, "").trim();
	return str;
}

function chkLen3Byte(str)
{ 
	var len = 0;
	
	for(i=0; i<str.length; i++) 
	{ 
		if(str.charCodeAt(i) > 128)
			len = len + 3;
		else
			len = len + 1;
	}
	return len;
}