<!--
/***************************************************************************************
 frmName = 폼이름
 emLen   = 전체 Elements 길이
 
 hname   = 메세지를 보여줄 네임
 
 reguired = 필수 체크항목
 
 checkType : null = 널값체크 , email = 이메일 체크 , jumin1 = 주민번호1, jumin2 = 주민번호2 
			 notfocus = 포커스를 주지 않음, checked = 체크박스 체크
			 * 중복체크시 콤마(,)로 구분한다. 
			 
 charset : num  = 숫자만체크 , han   = 한글만체크, eng = 영문만체크, numeng = 숫자영문만체크 
             nothan = 한글입력불가능                         

 extension = 첨부 불가능파일( 확장자 )
             * 중복체크시 콤마(,)로 구분한다. 
             
 notextension      = 첨부 가능 파일 ( 확장자 )
             * 중복체크시 콤마(,)로 구분한다.
 
 editerlength = 에디터화면에서 글자제한하기
 * 예) editerlength="4000"; > 4000바이트 체크                    
             
에제
  1. 입력언어 제한하기             
  <input type=text name=han1 value="" hname="첫번째" required checkType="null" charset="nothan">
  hname = 에러메세지 Name
  reguired = 필수 체크항목
  checkType= 체크할 타입
  charset= 체크할 언어( nothan : 한글만 입력불가 )
  
****************************************************************************************/

String.prototype.trim=function(){ return this.replace(/(^\s*)|(\s*$)/gi, ""); }
		
function goSend(frmName){
 
  //전체의 Object 가지고 오기 
  var emLen = frmName.elements.length; // 폼전체의 길이
  //필수값체크 
  for(i=0;i<emLen;i++){
     var EmName = frmName.elements[i];
     if(EmName.hname){ EmHname = EmName.hname;   }else{ EmHname = "";}
     
     if(EmName.required==""){ //체크 필수 항목
       //체크유형       
       if(!EmName.checkType){
           EmType = "null"; //체크타입 미 정의시 널값체크
       }else{
           EmType = EmName.checkType;    
       }
       var EmType = EmType.split(",");
       
       //체크기본값 세팅
       varFocus = "EmName.focus()";
       varNull  = "no";
       varEmail = "no";
       varChecked = "no";

       //체크 시작 
       for(j=0;j<EmType.length;j++){
          // focus 체크
          if(EmType[j]=="notfocus")varFocus=""; 
          // Null 체크
          if(EmType[j]=="null")varNull = "yes";
          // Email Check
          if(EmType[j]=="email")varEmail = "yes";
          // Check Box Check
          if(EmType[j]=="checked")varChecked = "yes";
       }
       //체크값의 문제가 있으면 Return
       if(chkNull(EmName,varNull,varFocus,EmHname)=="no")return false;
       if(chkEmail(EmName,varEmail,varFocus,EmHname)=="no")return false;
       
       //체크박스 체크하기 
       if(chkChecked(EmName,varChecked,varFocus,EmHname)=="no")return false;

       //언어체크       
       if(EmName.charset){
         if(chkLang(EmName,EmName.charset,varFocus,EmHname)=="no")return false;
       }    

       //사용불가능 파일타입 
       if(EmName.extension){
       	 if(chkFileType(EmName,EmName.extension,varFocus,EmHname)=="no")return false;
       }
       
       //사용가능 파일타입 
       if(EmName.notextension){
       	 if(chkFileTypeNot(EmName,EmName.notextension,varFocus,EmHname)=="no")return false;
       }     
       
       //에디터 길이제한 
       //alert(EmHname);
       //if(EmName.editerlength){	 
       //	 if(chkEditerLength(EmName,EmName.editerlength,varFocus,EmHname)=="no")return false;
       //}  
     }
  }  
  return;
}

// check editer length
function chkEditerLength(varEmName,varLen,varFocus,EmHname){
    //alert(editor_getHTML(varEmName.name).length+","+varLen);
    var varHTML = editor_getHTML(varEmName.name);
    //alert(calculate_msglen(varHTML));
    var length1 = calculate_msglen(varHTML);
    //alert(length1);
    /*
    if (length1 > varLen ) {
        alert(" 현재글 : "+length1+" Byte \n\n 최대글 : " + varLen + " Byte 입니다.");
        return "no";
    }
    */
    return "no";
}

//check box checked 
function chkChecked(varEmName, varChecked,varFocus,EmHname){
    var EmName = varEmName;
    if(varChecked=="yes"){
      if(!EmName.checked){
          alert(EmHname+"에 체크가 필요합니다.  ");
          eval(varFocus);
          return "no";
      }
    }
    return "yes";	
}		
//Null값 체크 
function chkNull(varEmName,varNull, varFocus,varEmHname){
    var EmName = varEmName;    
    if(varNull=="yes"){
      if(EmName.value.trim().length<1){
          alert(EmHname+"이(가) 입력이 필요합니다. ");
          eval(varFocus);
          return "no";
      }
    }
    return "yes";
}

function chkEmail(varEmName,varEmail, varFocus,varEmHname){
    var EmName = varEmName;    
    if(varEmail=="yes"){
      var pt = /[a-zA-Z\d\-\.]+@([a-zA-Z\d\-]+(\.[a-zA-Z\d\-]+)+)/;
      if(!pt.test(EmName.value)){
          alert(EmHname+"은 올바른 형식이 아닙니다. ");
          eval(varFocus);
          return "no";
      }
    }
    return "yes";
}
// 사용가능 파일확장자 체크 
function chkFileType(varEmName,varExtension,varFocus,varEmHname){
  var EmName = varEmName;
  var testValue = EmName.value;
  
  //만약 파일 첨부타입이면 확장자체크한다. 
  if(EmName.type.toUpperCase()=="FILE" && varExtension !=""){
     testVlen  = testValue.length;
     testVLlen = testValue.lastIndexOf(".");
     testValue = testValue.substring(testVLlen+1,testVlen);
     
     if(varExtension.indexOf(testValue)<0){
        alert(testValue+" 확장자는 입력할 수 없습니다.");
        eval(varFocus);
        return "no"	
     }     
  }
  return "yes";
}

// 사용불가능 파일확장자 체크 
function chkFileTypeNot(varEmName,varExtension,varFocus,varEmHname){
  var EmName = varEmName;
  var testValue = EmName.value;
  
  //만약 파일 첨부타입이면 확장자체크한다. 
  if(EmName.type.toUpperCase()=="FILE" && varExtension !=""){
     testVlen  = testValue.length;
     testVLlen = testValue.lastIndexOf(".");
     testValue = testValue.substring(testVLlen+1,testVlen);
     
     if(varExtension.indexOf(testValue)>=0){
        alert(varExtension+" 확장자만 입력할 수 있습니다.");
        eval(varFocus);
        return "no"	
     }     
  }
  return "yes";  
}

//정규식을 이용해서 체크하면 간단하게 처리할 수 있습니다.
function chkLang(varEmName,varLang,varFocus,varEmHname) {
  var EmName = varEmName;
  var chkV = "yes";
  var testValue = EmName.value;
  
  switch(varLang) { 
 	case "num" : chkValue=/[^(0-9)]/;chkAlert="숫자만 입력가능합니다."; break;
 	case "han" : chkValue=/[^(ㄱ-ㅎㅏ-ㅣ가-힣)]/;chkAlert="한글만 입력가능합니다."; break;
 	case "eng" : chkValue=/[^(a-zA-Z)]/;chkAlert="영문만 입력가능합니다."; break;
 	case "numeng" : chkValue=/[^(a-zA-Z0-9)]/;chkAlert="숫자와영문만 입력가능합니다."; break;
 	case "nothan" : chkValue=/[(ㄱ-ㅎㅏ-ㅣ가-힣)]/;chkAlert="한글은 입력할 수 없습니다."; break;
    default : chkV="no";chkAlert="언어체크값이 없습니다";
  }
  
  //만약 파일 첨부타입이면 파일명만 체크한다. 
  if(EmName.type.toUpperCase()=="FILE"){
     testVlen  = testValue.length;
     testVLlen = testValue.lastIndexOf("\\");
     testValue = testValue.substring(testVLlen+1,testVlen);
  }
  
  if(chkV=="no"){
     alert(varEmHname+"에(는) "+chkAlert);
     return "no";
  }
  
  if (chkValue.test(testValue)) {
    alert(varEmHname+"에(는) "+chkAlert);
    EmName.value = "";
    eval(varFocus);
    return "no";
  }
  return "yes";
}

/**********************************************************************************************************
 한글, 영문, 숫자 바이트로 글자제한하기
 frmName = 폼이름
 length_limit = 글자제한수
 text_obj = 검사할 오브젝트
 info_obj = 글자제한숫자를 입력할 레이어
 
 예제:
 <form name=frm>
	<textarea name=txaName cols=100 rows=10 onkeyup="chkLength(this.form,100,'txaName','spanText');"></textarea>
    <br>
	글자수<span id=spanText>0</span><font color=red>/100</font>
 </form>
***********************************************************************************************************/

function chkLength(frmName,length_limit,text_obj,info_obj) {
    var comment='';    
    comment = document.getElementById(text_obj);
    var form = frmName;    
    var length = calculate_msglen(comment.value);    
    if(document.getElementById(info_obj)){
    	document.getElementById(info_obj).innerHTML = length;
    }
    
    if (length > length_limit) {
        alert("최대 " + length_limit + "byte이므로 초과된 글자수는 자동으로 삭제됩니다.");
        comment.value = comment.value.replace(/\r\n$/, "");
        comment.value = assert_msglen(comment.value, length_limit, info_obj);
    }
}

function calculate_msglen(message)
{
	var nbytes = 0;

	for (i=0; i<message.length; i++) {
		var ch = message.charAt(i);
		if(escape(ch).length > 4) {
			nbytes += 2;
		} else if (ch == '\n') {
			if (message.charAt(i-1) != '\r') {
				nbytes += 1;
			}
		//} else if (ch == '<' || ch == '>') {
		//	nbytes += 4;
		} else {
			nbytes += 1;
		}
	}

	return nbytes;
}

function assert_msglen(message, maximum, textlimit)
{
	var inc = 0;
	var nbytes = 0;
	var msg = "";
	var msglen = message.length;

	for (i=0; i<msglen; i++) {
		var ch = message.charAt(i);
		if (escape(ch).length > 4) {
			inc = 2;
		} else if (ch == '\n') {
			if (message.charAt(i-1) != '\r') {
				inc = 1;
			}
		} else if (ch == '<' || ch == '>') {
			inc = 4;
		} else {
			inc = 1;
		}
		if ((nbytes + inc) > maximum) {
			break;
		}
		nbytes += inc;
		msg += ch;
	}
	if(document.getElementById(textlimit)){
		document.getElementById(textlimit).innerHTML = nbytes;
	}
	return msg;
}
//-->

