//-------------------------------------------------------------------------------------------------------//
//-------------------------------------- 폼 필드 체크 함수 모음 -----------------------------------------//
// 사용법 : 필수옵션 - required 추가
//          길이체크 - lengthchk="길이"
//          타입체크 - option="타입" (regNum,regPhone,regMail,regDomain,regAlpha,regHost,regHangul,regHangulEng,regHangulOnly,regId,regDate)
//          에러메세지 - hname="에러메세지"
function chkForm(f)
{
	var i,currEl;

    for(i = 0; i < f.elements.length; i++){
              currEl = f.elements[i];
              //필수 항목을 체크한다.
              if (currEl.getAttribute("required") != null)
              {
                     if(currEl.type.toUpperCase() == "TEXT" || currEl.tagName.toUpperCase() == "SELECT" || 
						currEl.tagName.toUpperCase() == "TEXTAREA" || currEl.type.toUpperCase() == "PASSWORD" || 
						currEl.type.toUpperCase() == "FILE" )
                     {
                            if(!chkText(currEl,currEl.hname)) return false;

                     } else if(currEl.type.toUpperCase() == "CHECKBOX"){
                            if(!chkCheckbox(f, currEl,currEl.hname)) return false;

                     } else if(currEl.type.toUpperCase() == "RADIO"){
                            if(!chkRadio(f, currEl,currEl.hname)) return false;

                     }
              }
              // 입력 페턴을 체크한다.
              if(currEl.getAttribute("option")){
                     if(!chkPatten(currEl,currEl.option,currEl.hname)) return false;
              }
              // 길이제한을 체크한다.
              if(currEl.getAttribute("lengthchk") != null && currEl.value.length > 0){
                     if(!chkLength(currEl,currEl.lengthchk,currEl.hname)) return false;
              }

			  //비밀번호 일치확인
			  if (currEl.getAttribute("pwchk") != null){
				  var j;
				  for(j=0; j < f.elements.length; j++){
					  if(f.elements[j].getAttribute("pwchk_after") != null){
						  if(!check_pw(currEl, f.elements[j], currEl.hname, f.elements[j].hname)) return false;
						  break;
					  }
				  }
			  }

			  //주민번호 일치확인
			  /*
			  if (currEl.getAttribute("scchk") != null){
				  var j;
				  for(j=0; j < f.elements.length; j++){
					  if(f.elements[j].getAttribute("scchk_after") != null){
						  if(!check_socialid(currEl.value, f.elements[j].value)) 
						  { 
							currEl.value = ''; 
							f.elements[j].value =''; 
							alert('잘못된 주민번호 입니다.'); 
							currEl.focus(); 
							return false;
						  }
						  break;
					  }
				  }
			  }	*/
    }
    return true;
}

//비밀번호 일치 확인
function check_pw(pw1, pw2, name1, name2){
	if (!pw1.value || pw1.value == " " || pw1.value == "  " )
	{
		alert("["+name1+"]를 입력하여 주세요");
		pw1.focus();
        return false;
	}
	if (!pw2.value || pw2.value == " " || pw2.value == "  " )
	{
		alert("["+name2+"]를 입력하여 주세요");
		pw2.focus();
        return false;
	}

	if (pw1.value != pw2.value)
	{
		alert("["+name2+"]가 일치하지 않습니다.\n 다시 입력해 주세요.");
		pw2.focus();
        return false;
	}
	return true;
}

// 주민등록번호채크
function check_socialid(name1, name2) 
{
	var weight = 0;
	var check;

	weight += (name1.charAt(0) - '0') * 2;
	weight += (name1.charAt(1) - '0') * 3;
	weight += (name1.charAt(2) - '0') * 4;
	weight += (name1.charAt(3) - '0') * 5;
	weight += (name1.charAt(4) - '0') * 6;
	weight += (name1.charAt(5) - '0') * 7;
	weight += (name2.charAt(0) - '0') * 8;
	weight += (name2.charAt(1) - '0') * 9;
	weight += (name2.charAt(2) - '0') * 2;
	weight += (name2.charAt(3) - '0') * 3;
	weight += (name2.charAt(4) - '0') * 4;
	weight += (name2.charAt(5) - '0') * 5;
	
	check = (11 - weight % 11) % 10;

	return ((name2.charAt(6) - '0') == check ? 1 : 0);
}


// 형식 체크
function chkPatten(field,patten,name)
{
       var regNum =/^[0-9]+$/;
	   var regNo =/^[nN1-9][0-9]*$/;
       var regPhone =/^[0-9]{2,3}-[0-9]{3,4}-[0-9]{4}$/;
       var regPostno =/^[0-9]{3}-[0-9]{3}$/;
       var regMail =/^[._a-zA-Z0-9-]+@[._a-zA-Z0-9-]+\.[a-zA-Z]+$/;
       var regDomain =/^[.a-zA-Z0-9-]+\.[a-zA-Z]+$/;
       var regAlpha =/^[a-zA-Z]+$/;
       var regHost =/^[a-zA-Z-]+$/;
       var regHangul =/[가-힣]/;
       var regHangulEng =/[가-힣a-zA-Z]/;
       var regHangulOnly =/^[가-힣]*$/;
       var regId = /^[a-zA-Z]{1}[a-zA-Z0-9_-]{2,12}$/;
       var regPass = /^[a-zA-Z0-9_-]{5,12}$/;
	   var regMailId = /^[.a-zA-Z0-9_-]*$/;
       var regDate =/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;
	   var regYear = /^[1][9][0-9]{2}$/;
	   //var regMonth = /^[1]{0,1}[0-9]$/;
	   //var regDay = /^[0-3]{0,1}[0-9]$/;
	   var regMonth = /^(0[1-9]|1[012])$/;
	   var regDay = /^(0[1-9]|[12][0-9]|3[0-1])$/;

       var patten_name = patten;
       patten = eval(patten);
       if(!patten.test(field.value)){
              alert("[" + name + "] 항목의 형식이 올바르지 않습니다."+getPattenEx(patten_name));
              field.focus();
              return false;
       }
       
       if(patten_name)
       return true;
}

// 데이터 입력 형식의 예
function getPattenEx(patten){
    var rv = "";

    switch(patten){
	case "regDate":
	    rv = "YYYY-mm-dd";
	    break;
        case "regPhone":
            rv = "000-0000-0000";
            break;
        case "regMail":
            rv = "user_id@domain.com";
            break;
        case "regDomain":
            rv = "domain.com";
            break;
    }

    if(rv) rv = "\n\n다음 형식으로 입력하여 주시기 바랍니다. [ "+rv+" ]";

    return rv;
}

// 문자열 길이 검사
function getLength(str){
       return (str.length + (escape(str) + "/%u").match(/%u/g).length-1);
}

function chkLength(field,length,name)
{

	   var ls_str     = field.value; // 이벤트가 일어난 컨트롤의 value 값
	   var li_str_len = ls_str.length;  // 전체길이

	   // 변수초기화
	   var li_max      = length; // 제한할 글자수 크기
	   var i           = 0;  // for문에 사용
	   var li_byte     = 0;  // 한글일경우는 2 그밗에는 1을 더함
	   var li_len      = 0;  // substring하기 위해서 사용
	   var ls_one_char = ""; // 한글자씩 검사한다
	   var ls_str2     = ""; // 글자수를 초과하면 제한할수 글자전까지만 보여준다.

	   for(i=0; i< li_str_len; i++)
	   {
		  // 한글자추출
		  ls_one_char = ls_str.charAt(i);

		  // 한글이면 2를 더한다.
		  if (escape(ls_one_char).length > 4)
		  {
			 li_byte += 2;
		  }
		  // 그밗의 경우는 1을 더한다.
		  else
		  {
			 li_byte++;
		  }

		  // 전체 크기가 li_max를 넘지않으면
		  if(li_byte <= li_max)
		  {
			 li_len = i + 1;
		  }
	   }



       if(getLength(field.value) > length){
              alert(name + "\n\n영문,숫자 "+length+"자 , 한글 "+(length/2)+"자 이하 입력 제한 합니다.\n\n초과된 내용은 자동으로 삭제 됩니다.");
			  field.value = field.value.substr(0, li_len);
              field.focus();
              return false;
       }
       return true;
}

// 텍스트박스 체크
function chkText(field, name)
{		
	   field.value.replace(/\s+/g,'');
	   if (!field.value || field.value == " " || field.value == "  ") {
       //if(field.value.length < 1){
              alert("["+ name + "]을(를) 입력하여 주세요");
              field.focus();
              return false;
       }
       return true;
}

// 체크박스 체크
function chkCheckbox(form, field, name)
{
       fieldname = eval(form.name+'.'+field.name);
       if (!fieldname.checked){
              alert("["+ name + "]을(를) 선택하여 주세요");
              field.focus();
              return false;
       }
       return true;
}

// 옵션버튼 체크
function chkRadio(f, field, name)
{
       fieldname = eval(f.name+'.'+field.name);//eval(f.name+'.'+field.name);
       for (i=0;i<fieldname.length;i++) {
              if (fieldname[i].checked)
                     return true; 
       }
       alert("["+ name + "]을(를) 선택하여 주세요");
       field.focus(); 
       return false; 
} 

/* 화면 가운데에 팝업
popc('압업주소','팝업이름', 가로, 세로, '스크롤여부'); */
function popc(Address, name, w, h, scroll){
	var scr = (scroll=="") ? "yes" : "no";
	var popwindow = null;
	var LeftPosition = (screen.width) ? (screen.width-w)/2:0;
	var TopPosition = (screen.height) ? (screen.height-h)/2:0;   
	var settings = 'height=' + h + ',width=' + w + ',top=' + TopPosition + ',left=' + LeftPosition + ',scrollbars=' + scr + ',resizable=no'
	popwindow = window.open(Address, name, settings);
	popwindow.focus();
}

/* 좌표 받는 팝업
popc('압업주소','팝업이름', 가로, 세로, '스크롤여부'); */
function pop(Address, name, w, h, l, t, scroll){
	var scr = (scroll=="") ? "yes" : "no";
	var left = (l=="") ? 0 : l;
	var top = (t=="") ? 0 : t;
	var popwindow = null;
	var settings = 'height=' + h + ',width=' + w + ',top=' + top + ',left=' + left + ',scrollbars=' + scr + ',resizable=no'
	
	popwindow = window.open(Address, name, settings);
	popwindow.focus();
}
