/*===============================================================================
' @Programe Path			: /library/script
' @Programe ID				: global_form.js
' @Programe Name			: 폼 관련 자바스크립트
' @Description				: 서울시 외국어 사이트
' @Relation DB Table	:
' @Writer(Edit) Name	: 김영원
' @Writer(Edit) Date	: 2008-10-27
' @Comment						:
'===============================================================================*/

// 필수 입력값 유무체크한후 경고창 뛰우기
//inputCheck("폼이름", "엘리먼트이름", "항목", "문자/숫자/한글/영문/영문,숫자/이메일/전화번호(S,N,K,E,EN,EM,T)", ["길이구분(S:small, B:big, F:fix, R:range)"], [최소길이], [최대길이], "필수여부(Y/N)")
//if(!inputCheck("form1", "id", "아이디", "EN", "R", "4", "16", "Y")) {return false;}
//if(!inputCheck("form1", "pwd", "패스워드", "EN", "R", "4", "16", "Y")) {return false;}
//if(!inputCheck("form1", "aa", "셀렉트", "S", "", "", "", "Y")) {return false;}
//if(!inputCheck("form1", "bb", "체크", "S", "", "", "", "Y")) {return false;}
//if(!inputCheck("form1", "cc", "라디오", "S", "", "", "", "Y")) {return false;}

function inputCheck(form_name,elm,msg,strORNum,len_gubun,s_len,b_len,essential) {
  if(!eval("document."+ form_name +"."+ elm)) {
    alert(elm + " 엘리먼트가 정의되지 않았습니다.");
    return false;
  }
  var form = eval("document."+ form_name +"."+ elm);
  if(form.type=="text" || form.type=="textarea" || form.type=="password" || form.type=="file") {
    //텍스트 박스, 텍스트 영역	
    var inputStr = form.value.Trim();
    if(essential=="Y") {
      if (inputStr=="") {
        alert(msg + " 항목은 반드시 입력하셔야 됩니다.");
        form.value="";
        try {
          form.focus();
        } catch(e) {
        }
        return false;
      }
    } else {
      if (inputStr=="") {
        return true;
      }
    }

    if(!funcCheck(strORNum,form_name,elm,msg)) {return false;}

    if (len_gubun != "") {
      if(!lenCheck(form_name, elm, msg ,len_gubun,s_len,b_len)) {return false;}
    }
  }else if(form.type==undefined || form.type=="radio") {
    //라디오 버튼
    if(!form.length) {
      if(form.type=="radio") {
        if(!form.checked) {
          alert(msg+" 선택하세요!");
          return false;
        }
        return true;
      } else {
        alert(form.type);
        return false;
      }

    }
    var elm_len = form.length;
    var ok = 0;
    if(elm_len<=0) {
      alert(elm + " 엘리먼트가 정의되지 않았습니다.");
      return false;
    }
    for(var i=0;i<elm_len;i++) {
      if (form[i].checked) {
        ok = i+1;
      }
    }

    if(ok < 1) {
      alert(msg+" 선택하세요!");
      return false;
    }
  }else if(form.type=="checkbox") {
    //체크박스
    if(essential=="Y") {
      if(!form.checked) {
        alert(msg + " 항목은 반드시 체크하셔야 됩니다.");
        return false;
      }
    }
  }else if(form.type.indexOf("select") != -1) {
    //셀렉트 박스
    var inputStr = form.options[form.selectedIndex].value;
    if(essential=="Y") {
      if (inputStr=="") {
        alert(msg + " 항목은 반드시 선택하셔야 됩니다.");
        form.value="";
        form.focus();
        return false;
      }
    } else {
      if (inputStr=="") {
        return true;
      }
    }

    if(!funcCheck(strORNum,form_name,elm,msg)) {return false;}

    if (len_gubun!="") {
      if(!lenCheck(form_name, elm, msg ,len_gubun,s_len,b_len)) {return false;}
    }
  } else {
  //그외
    alert(form.type);
    return false;
  }
  return true;
}

//함수값체크
function funcCheck(value,form_name,elm,msg,essential) {
  switch (value) {
    case "S":
      //문자
      break;
    case "N":
      //숫자
      if(!isNumber(form_name,elm,msg)) {return false;}
      break;
    case "K":
      //한글
      if(!isKor(form_name,elm,msg)) {return false;}
      break;
    case "E":
      //영문
      if(!isEngName(form_name,elm,msg)) {return false;}
      break;
    case "EN":
      //영문,숫자
      if(!isNumEng(form_name,elm,msg)) {return false;}
      break;
    case "EM":
      //이메일
      if(!isEmail(form_name,elm,msg)) {return false;}
      break;
    case "T":
      //전화번호
      if(!isPhoneNumber(form_name,elm,msg)) {return false;}
      break;
    case "IMG":
      //이미지
      if(!inputImgCheck(form_name,elm,msg,essential)) {return false;}
      break;

    default:
  }
  return true;
}

//입력값이 숫자인지 체크
function isNumber(form_name,elm,msg) {

  //사용법 isNumber(폼이름, 엘리먼트이름, 유효하지 않을경우 메세지)
  var form = eval("document."+ form_name +"."+ elm);
  for(var i = 0; i < form.value.length; i++) {
    var chr = form.value.substr(i,1);
    if(chr < '0' || chr > '9') {
      alert(msg + " 항목은 숫자로 입력해 주십시오");
//      form.value="";
      form.focus();
      return false;
    }
  }
  return true;
}

//한글만 입력
function isKor(form_name,elm,msg) {
  //사용법 isKor(폼이름, 엘리먼트이름, 항목, 문자/숫자구분, 길이구분, 길이)
  var form = eval("document."+ form_name +"."+ elm);
  var inputStr = form.value
  for(var i = 0; i < inputStr; i++) {
     var chr = inputStr.substr(i,1);
     if ((chr > '0' && chr < '9') || (chr > 'a' && chr < 'z') || (chr > 'A' && chr < 'Z')) {
      alert(msg + " 항목은 한글로 입력해 주세요");
//      form.value="";
      form.focus();
      return false;
     }
  }
  return true;
}

//영문이름 체크 (2003-07-31 bluet77) - 영어, 숫자, 특수문자, 공백 허용
function isEngName(form_name, elm, msg)
{
  var form = eval("document."+ form_name +"."+ elm);
  var alpha = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  var numeric = '1234567890';
  var special = '`~!@#$%^&*()-_=+|\{}[];:"\'<>,.?\/ ';
  var engName = alpha+numeric+special ;
  var i ;
  var t = form.value ;

  for ( i=0; i<t.length; i++ ) {
    if( engName.indexOf(t.substring(i,i+1))<0) {
      break ;
    }
  }
  if ( i != t.length ) {
    alert(msg + '에 한글이 포함되어 있습니다!');
    form.focus();
    form.select();
    return false;
  }
  return true;
}
function isEngName_etc(form_name, elm, msg)
{
  var form = eval("document."+ form_name +"."+ elm);
  var alpha = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  var numeric = '1234567890';
  var special = '`~!@#$%^&*()-_=+|\{}[];:"\'<>,.?\/ ';
  var engName = alpha+numeric+special ;
  var i ;
  var t = form.value ;

  for ( i=0; i<t.length; i++ ) {
    if( engName.indexOf(t.substring(i,i+1))<0) {
      break ;
    }
  }
  if ( i != t.length ) {
    alert(msg + 'is alphabet');
    form.focus();
    form.select();
    return false;
  }
  return true;
}

//영문 숫자조합 입력
function isNumEng(form_name,elm,msg) {
  //사용법 isNumEng(폼이름, 엘리먼트이름, 항목)
  var form = eval("document."+ form_name +"."+ elm);
  var inputStr = form.value
  for(var i = 0; i < inputStr.length; i++) {
     var chr = form.value.substr(i,1);
     if ((chr < '0' || chr > '9') && (chr < 'a' || chr > 'z') && (chr < 'A' || chr > 'Z')) {
      alert(msg + " 항목은 영문 또는 영문/숫자 조합으로 입력해 주세요");
      form.value="";
      form.focus();
      return false;
     }
  }
  return true;
}

//이메일체크(도메인)
function isEmail(form_name,elm,msg) {
  //사용법 isEmail(폼이름, 엘리먼트이름, 항목)
  var form = eval("document."+ form_name +"."+ elm);  
  var inputStr = form.value;
  if (inputStr=='') {
    alert("이메일을 입력해주세요");
    form.focus();
    return false;
  }
  emailchk = 0
  for (var j=0; j < inputStr.length ; j++ ) {
    var ch= inputStr.substring(j,j+1);
    if (ch == "@" | ch== "." ) {
      emailchk = emailchk + 1;
    }
  }
  if (emailchk < 2 ) {
    alert(msg+" 주소가 유효하지 않습니다.");
    form.focus();
    return false;
  }
  return true;
}

//이메일체크(도메인), hoon, 2004.12.13
function emailCheck(form_name,elm1,elm2,msg,essential) {
  //사용법 inputCheck(폼이름, 엘리먼트1, 엘리멘트2, 항목)
  var form1 = eval("document."+ form_name +"."+ elm1);
  var form2 = eval("document."+ form_name +"."+ elm2);
  var inputStr1 = trimString(form1.value);
  var inputStr2 = trimString(form2.value);
  var valEmail = inputStr1 +"@"+ inputStr2;

  if (essential=='N')
  {
    if (valEmail=='@') {
      return true;
    } else {
      alert(msg+" 주소가 유효하지 않습니다.");
      form1.value="";
      form1.focus();
      return false;
    }
  } else {
    if(inputStr1=='' && inputStr2=='' )
    {
      alert(msg+" 주소가 유효하지 않습니다.");
      form1.focus();
      return false;
    }
    emailchk = 0

    for (var j=0; j < valEmail.length ; j++ ) {
      var ch= valEmail.substring(j,j+1);
      if (ch == "@" | ch== "." ) {
        emailchk = emailchk + 1;
      }
    }
    if (emailchk < 2 ) {
      alert(msg+" 주소가 유효하지 않습니다.");
      form1.value="";
      form1.focus();
      return false;
    }
    return true;
  }
}

//이메일체크(도메인), hoon, 2004.12.13
function emailCheckTypeA(form_name,elm,msg,essential) {
  //사용법 inputCheck(폼이름, 엘리먼트, 항목)
  var form = eval("document."+ form_name +"."+ elm);
  var inputStr = trimString(form.value);

  if (essential=='N')
  {
    if (inputStr=='') {
      return true;
    } else {
      alert(msg+" 주소가 유효하지 않습니다.");
      form.focus();
      return false;
    }
  } else {
    if(inputStr=='')
    {
      alert(msg+" 주소가 유효하지 않습니다.");
      form.focus();
      return false;
    }
    if( inputStr.search("@") == -1 || inputStr.indexOf(".")<3 ) {
      alert(msg+" 주소가 유효하지 않습니다.");
      form.focus();
      return false;
    }
    return true;
  }
}

// 메일의 유효성체크 isEmail("test@test.com")
// 2004.02.19 , hoon
function isEmail_1(str) {
  emailchk = 0
  var  comp= '`~!#$%^&*()-_=+|\{}[];:"\'<>,?\/ ';
  for (var j=0; j < str.length ; j++ ) {
    // 공백 특수문자 검색
    if( comp.indexOf(str.substring(j,j+1))>=0) {
      return false;
      break ;
    }
    var ch= str.substring(j,j+1);
    if (ch == "@" | ch== "." ) {
      emailchk = emailchk + 1;
    }
  }
  if (emailchk < 2 ) {
    return false;
  }
  return true;
}

//전화번호 유효성 체크, 2005.04.25, hoon
function isPhoneNumber(form_name,elm,msg,essential) {
  //사용법 isNumber(폼이름, 엘리먼트이름, 유효하지 않을경우 메세지)
  var form = eval("document."+ form_name +"."+ elm);
  if(!form) {
    alert(elm+" 객체가 아닙니다.");
    return false;
  }
  var inputStr = form.value;
  if (essential=='N')  {
    if (inputStr=='') {return true;}
  } else {
    if (inputStr=='') {
      alert("Please enter "+ msg);
      form.value="";
      form.focus();
      return false;
    } else {
      var fmt =  /^(\d+)-/;
      if(!fmt.test(document.form.PhoneNumber.value)) {
        alert("전화번호는 숫자와 '-' 만 입력가능합니다.");
        form.focus();
        return false;
      }
    }
    return true;
  }
}

/**
* 업로드 이미지 체크폼
*
*/
function inputImgCheck(form_name,elm,msg,essential) {
  var form = eval("document."+ form_name +"."+ elm);
  if(!form) {
    alert(elm+"은 객체가 아닙니다.");
    return false;
  }

  var inputStr = form.value;
  if (essential=='N')
  {
    if (inputStr=='') {
      return true;
    } else {
      if(isImageFile(inputStr)) {
        return true;
      }
      else{
        alert(msg +" 항목은 이미지파일만 업로드가 가능합니다. ");
        form.value="";
        form.focus();
        return false;
      }
    }
    return true;
  } else {
    if (inputStr=='') {
      alert(msg + " 항목을 입력하여 주십시오");
      form.value="";
      form.focus();
      return false;
    } else {
      if(isImageFile(inputStr)) {
        return true;
      }
      else{
        alert(msg +" 항목은 이미지파일만 업로드가 가능합니다. ");
        form.value="";
        form.focus();
        return false;
      }
    }
  }
}

//길이체크
//사용법 lenCheck("폼이름", "엘리먼트이름", "항목", "길이구분(S:small, B:big, F:fix, R:range)", [최소길이], [최대길이])
function lenCheck(form_name, elm, msg ,len_gubun,s_len,b_len) {

  var form = eval("document."+ form_name +"."+ elm);
  var inputStr = form.value
  if (len_gubun=="S") {  //보다 작은 값
    if (inputStr.length > parseInt(s_len)) {
      alert(msg + " 항목은 " + s_len + "자 이하입니다");
      form.focus();
      return false;
    }
  }else if (len_gubun=="B") {  //보다 큰 값
    if (inputStr.length < parseInt(s_len)) {
      alert(msg + " 항목은 " + s_len + "자 이상입니다");
      form.focus();
      return false;
    }
  }else if (len_gubun=="F") {  //고정된 값
    if (inputStr.length != parseInt(s_len)) {
      alert(msg + " 항목은 " + s_len + "자 입니다");
      form.focus();
      return false;
    }
  }else if (len_gubun=="R") {  //범위 값
    if (inputStr.length < parseInt(s_len) || inputStr.length > parseInt(b_len)) {
      alert(msg + " 항목은 " + s_len + "자 이상 "+ b_len +"자 이하 입니다");
      form.focus();
      return false;
    }
  }
  return true;
}

//텍스트 박스 auto tab 기능
function textAutoTab(currElm,nextElm,n) {
//  OnKeyUp=textAutoTab("현재elm명", "옮겨갈 elm명", "글자수")
  thisValue = document.all(currElm).value;
  nextControl = document.all(nextElm);
  if(thisValue.length==parseInt(n)) {
    nextControl.select();
  }
}

//선택박스,라디오
function selectAutoTab(nextElm) {
//  OnChange=selectAutoTab("옮겨갈 elm명")
  nextControl = document.all(nextElm);
  nextControl.focus();
}

//엔터 --> 서브밋
function enter(formName) {
//  OnKeyDown=enter("폼이름")
  form = eval("document."+formName)
  if(event.keyCode==13) {
    if(!formCheck()) {return;};
    form.submit();
  }
}

// 전체 선택 checkAll(this, form.CheckBox)
function checkAll(obj1,obj2) {
  if(obj2) {
    if(obj2.length) {
      if(obj1.checked==true) {
        for( i=0;i<obj2.length ;i++) {
          if (!obj2[i].disabled) {
            obj2[i].checked = true;
          }
        }
      } else {
        for( i=0;i<obj2.length ;i++) {
          obj2[i].checked = false;
        }
      }
    } else {
      if(obj1.checked==true) {
        obj2.checked = true;
      } else {
        obj2.checked = false;
      }
    }
  }
}

/**
* 입력값의 바이트 길이를 리턴
* ex) if (getByteLength(form.title) > 100) {
*        alert("제목은 한글 50자(영문 100자) 이상 입력할 수 없습니다.");
*    }
*/
function getByteLength(input) {
    var byteLength = 0;
    for (var inx = 0; inx < input.value.length; inx++) {
        var oneChar = escape(input.value.charAt(inx));
        if ( oneChar.length == 1 ) {
            byteLength ++;
        } else if (oneChar.indexOf("%u") != -1) {
            byteLength += 2;
        } else if (oneChar.indexOf("%") != -1) {
            byteLength += oneChar.length/3;
        }
    }
    return byteLength;
}

/**
* 셀렉트 박스의 초기화
*
*/
function clearSelect(obj) {
  obj.options.length=0;
  obj.options[0] = new Option('Select','',true,true);
}