var option_table = new Array(
  new Array("N_SUPPORT_HIDDEN_TYPE", false ),	// hidden type checked
  new Array("N_NEXT_FOCUS_ON_ENTER", true),
  new Array("N_FOCUS_THIS_USE_TIME_OUT", true), //in MilliSeconds
  new Array("N_VALIDATE_ON_MASK", true ),
  new Array("N_DELIMITER_CHAR", /(\,|\.|\/|\$|\^|\*|\(|\)|\+|\?|\\|\{|\}|\||\[|\]|-|:)/g), // ,./$^*()+?\{}|[]-:
  new Array("N_DECIMA_CHAR", /(\,|\/|\$|\^|\*|\(|\)|\+|\?|\\|\{|\}|\||\[|\]|-|:)/g), // ,/$^*()+?\{}|[]-:
  new Array("N_PERCENT_CHAR", /(\,|\/|\$|\%|\^|\*|\(|\)|\+|\?|\\|\{|\}|\||\[|\]|-|:)/g), // ,/$%^*()+?\{}|[]-:
  new Array("N_INTEGER_REGEXP", /^(\+|\-|\d*)\d+$/ ),
  new Array("N_INTEGER_FILTER", "[0-9\\-\\+]" ),
  new Array("N_NUM_FILTER", "[0-9]" ),
  new Array("N_NUM_DECIMA", "[0-9.-]" ),
  new Array("N_PERCENT_MASK", "999.99%"),
  new Array("N_SSN_MASK", "999999-9999999"),
  new Array("N_BSN_MASK", "999-99-99999"),
  new Array("N_DATE_MASK", "9999-99-99"),
  new Array("N_MONTH_MASK", "9999.99"),
  new Array("N_FILENO_MASK", "9999-99-9999"),
  new Array("N_REFNO_MASK", "999-9999"),
  new Array("N_POST_MASK", "999-999")

);

var support_matrix = new Array(
  new Array("firstfocus", 1, "pro_first_focus", "text,password,textarea,radio,checkbox,select-one,select-multiple,file,submit,button,reset"),  //focus in first display
  new Array("mask", 2, "pro_mask", "text"),
  new Array("money", 1, "pro_money", "text"),			// 통화
  new Array("enter_focus", 1, "pro_enter_focus", "text,password,radio,checkbox,select-one,select-multiple,file,button,reset"),	//포커스 이동
  new Array("integer", 1, "pro_integer", "text,password"),
  new Array("decimal",1, "pro_decimal", "text"),				// 소숫점(네자리에서 두자리)
  new Array("qtydecimal",1, "pro_qtydecimal", "text"),		// 소숫점(두자리)
  new Array("percent", 1, "pro_percent", "text"),							// 퍼센트
  new Array("ssn", 1, "pro_ssn", "text,password"),			// 주민번호
  new Array("bsn", 1, "pro_bsn", "text,password"),			// 사업자번호
  new Array("date", 1, "pro_date", "text"),							// 날짜처리
  new Array("month", 1, "pro_month", "text"),							// 날짜(월)처리
  new Array("fileno",1, "pro_fileno", "text"),				// FILE NO
  new Array("refno",1, "pro_refno", "text"),				// REF NO
  new Array("post",1, "pro_post", "text")				// POST CD
);

Array.prototype.getHashValue = get_hash_value;
Array.prototype.getHashIndex = get_hash_index;
Array.prototype.hasValue = has_value;

function get_hash_value(key, index) {
  if ( !(this[0] instanceof Array) ) return false;
  for (var idx=0 ; idx < this.length ; idx++) {
    if (this[idx][0] == key)
      return this[idx][index];
  }
  return false;
}

function get_hash_index(key) {
  if ( !(this[0] instanceof Array) ) return false;
  for (var idx=0 ; idx < this.length ; idx++) {
    if (this[idx][0] == key) return idx;
  }
 return false;
}

function has_value(key) {
  for (var idx=0 ; idx < this.length ; idx++) {
    if ( this[idx] == key ) return true;
  }
  return false;
}

function get_option(optStr) {
  return option_table.getHashValue(optStr, 1);
}

function is_attribute(attr) {		//속성값이 있는지 체크
  return ( this.getAttribute(attr) != null ) ? true : false;
}

function is_attribute_value(attr) {
  return ( this.getAttribute(attr) ) ? true : false;
}

/********************* 데이타 변환 **********************************/
function mask_validate(alertflag, evnt) {
  var flag = true; //true when validation successful.
  if (!this.parent.value) return flag;
  if (!this.parent.xMask) return flag;
  if (this.parent.unMasking && this.parent.masking) {
    this.parent.unMasking(); this.parent.masking();
  }
  //Validation Logic for Mask..
  var sPattern=this.parent.xMask.replace(window.GetOption("N_DELIMITER_CHAR"),"\\$1");
  sPattern=sPattern.replace(/9/g ,"\\d");
  var re=new RegExp("^"+sPattern+"$");
  if(!re.test(this.parent.value)) {
    flag = false;
    //this.parent.alert(alertflag, this.getMessage(0, this.parent.xMask));
  }
  delete re;
  return flag;
}

function date_validate(alertflag, evnt) {
  var flag = true; //true when validation successful.
  if (!this.parent.value) return flag; //입력값 없는 경우는 Pass
  //Validation Logic for Date..
  var iYear = null;
  var iMonth = null;
  var iDay = null;
  var iDaysInMonth = null;
  var sDate=this.parent.value.replace(window.GetOption("N_DELIMITER_CHAR"),"");
  var sFormat="YYYYMMDD"; //아직까지 YYYYMMDD의 형태만 지원한다. --;
  var aDaysInMonth=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
  if ( sDate.length != 8 ) flag = false ;
  if (flag) {
    iYear = eval(sDate.substr(0,4));
    iMonth = eval(sDate.substr(4,2));
    iDay = eval(sDate.substr(6,2));
    if ( !iYear.toString().isNum() || !iMonth.toString().isNum() || !iDay.toString().isNum() )
      flag = false ;
  }
  if (flag) {
    iDaysInMonth = (iMonth != 2) ? aDaysInMonth[iMonth-1] : (( iYear%4 == 0 && iYear%100 != 0 || iYear % 400==0 ) ? 29 : 28 );
    if( iDay==null || iMonth==null || iYear==null || iMonth > 12 || iMonth < 1 || iDay < 1 || iDay > iDaysInMonth )
      flag = false ;
  }
  if(!flag) {
    this.parent.alert(alertflag, this.getMessage(0));
  }
  delete aDaysInMonth;
  return flag;
}

function integer_validate(alertflag, evnt) {
  var flag = true; //true when validation successful.
  if (!this.parent.value) return flag; //입력값 없는 경우는 Pass
  var tsTarget = this.parent.value;
  var regExp = window.GetOption("N_INTEGER_REGEXP"); // /^(\+|\-|\d*)\d+$/
  if (!regExp.test(tsTarget)) {
    //this.parent.alert(alertflag, this.getMessage(0));
    flag = false;
  }
  this.parent.value = parseInt(tsTarget);
  if ( this.parent.value == "NaN" ) this.parent.value = "";
  return flag;
}

function bsn_validate(alertflag, evnt) {
  var flag = true; //true when validation successful.
  if (!this.parent.value) return flag; //입력값 없는 경우는 Pass
  var sum = 0;
  var csNumber = this.parent.value.replace(window.GetOption("N_DELIMITER_CHAR"),"");
  var checkArray = new Array(1,3,7,1,3,7,1,3,5);
  for(idx=0 ; idx < 9 ; idx++)
  sum += csNumber.charAt(idx) * checkArray[idx];
  sum = sum + ((csNumber.charAt(8) * 5 ) / 10);
  var nam = Math.floor(sum) % 10;
  var checkDigit = ( nam == 0 ) ? 0 : 10 - nam;
  if ( !csNumber.toString().isNum() || csNumber.charAt(9) != checkDigit) {
    flag = false;
    this.parent.alert(alertflag, this.getMessage(0));
  }
  delete checkArray;
  return flag;
}

function ssn_validate(alertflag, evnt) {
  var flag = true; //true when validation successful.
  if (!this.parent.value) return flag; //입력값 없는 경우는 Pass
  var sum = 0;
  var psNumber = this.parent.value.replace(window.GetOption("N_DELIMITER_CHAR"),"");
  for (idx = 0, jdx=2; jdx < 10; idx++, jdx++) {
    sum = sum + ( psNumber.charAt(idx) * jdx );
  }
  for (idx = 8, jdx=2; jdx < 6; idx++, jdx++) {
    sum = sum + ( psNumber.charAt(idx) * jdx );
  }
  var nam = sum % 11;
  var checkDigit = 11 - nam ;
  checkDigit = (checkDigit >= 10 ) ? checkDigit-10:checkDigit;
  if ( !psNumber.toString().isNum() || psNumber.charAt(12) != checkDigit) {
    flag = false;
    this.parent.alert(alertflag, this.getMessage(0));
  }
  return flag;
}

function em_n_facotry() {
  for (idx=0 ; idx<support_matrix.length ; idx++) { //search matrix
    if (this.isAttribute(support_matrix[idx][0])) { //if this has matrix[0] attribute
      if ((support_matrix[idx][1] == 2) && !this.isAttrValue(support_matrix[idx][0])) continue; // if attribute should have value but it is not
      this.addXObj(support_matrix[idx][0], support_matrix[idx][2]);
    }
  }

  if (window.GetOption("N_NEXT_FOCUS_ON_ENTER")) this.addXObj("enter_focus", "pro_enter_focus");
}

function em_add_x_obj(xKey, xClass, param) {
  var flag = true;
  var idx = support_matrix.getHashIndex(xKey);
  if (support_matrix[idx][1] == 0) flag = false; //Not Used Skip;
  var supportTypes = support_matrix[idx][3].split(",");
  if(!supportTypes.hasValue(this.type)) flag = false; //not support type.
  for (var idx=0; this.xObject.length > idx && flag; idx++) //is already bound?
  if (this.xObject[idx].x_key == xKey) flag = false;
  if (flag) {
    var xObj = eval("new " + xClass +"(this, param)");
    this.xObject[this.xObject.length] = xObj;
    if (xObj.initialize) xObj.initialize();
  }
  return flag;
}

function emp_set_filter(xObj, sFilter) {
  if (this.xFilter) return;
  this.xFilter = sFilter;
  xObj.onkeypress = filter_onkeypress;
}

/*******************  mask 셋팅 *******************/
function emp_set_mask(xObj, sMask, maskHdl, unMaskHdl) {
  if (this.xMask) return;
  if (sMask) this.xMask = sMask;
  this.masking = maskHdl;
  this.unMasking = unMaskHdl;
  xObj.onblur = this.masking;
  xObj.onfocus = this.unMasking;
}

function em_event_handler() {
  var srcObj = window.event.srcElement;
  var type = window.event.type;
  for (var idx=0; srcObj.xObject && idx < srcObj.xObject.length; idx++) {
    if( eval(srcObj.xObject[idx]) && eval("srcObj.xObject[idx].on" + type))
    eval("srcObj.xObject[idx].on" + type + "(window.event)");
  }
  if ( type == 'focus' && ( srcObj.type == "text" || srcObj.type == "password" || srcObj.type == "textarea" || srcObj.type == "file" ) && srcObj.select) {
    srcObj.select();
  }
}

// 이벤트 focus체크
function em_event_focus_handler(evnt) {
  var srcObj = evnt ? evnt.srcElement : window.event.srcElement;
  var focusObj = null;
  if (srcObj.getNextFocus ) {
    focusObj = srcObj.getNextFocus();
    if ( focusObj != srcObj ) focusObj.focus();
  } else if (srcObj.blur) srcObj.blur();
}

function emp_get_next_focus(objname) {
  if (this.parent.elements.length == 1 && this==this.parent.elements[0]) return this;
  var selfIndex = 0;
  for (var idx=0; idx < this.parent.elements.length; idx++) {
     if (this.parent.elements[idx] == this) selfIndex = idx;
  }
  do {
    selfIndex ++;
    if (selfIndex >= this.parent.elements.length) {
      if (this.parent.elements[selfIndex-1].readOnly)	{
        selfIndex = getSubmit(this.parent, (selfIndex-2));		// 입력 필드가 끝이 readOnly이면
      } else {
        selfIndex = getSubmit(this.parent, (selfIndex-1));		// 입력 필드가 끝이면
      }
    }
    var focusObj = this.parent.elements[selfIndex];
    if ( focusObj == this) break;
    if (objname && focusObj.name && focusObj.name == objname) break;
  } while ( typeof(focusObj) == 'undefined' || focusObj.tagName == "OBJECT" ||
        ( focusObj.type && focusObj.type=='hidden') ||
        focusObj.readOnly || ( focusObj.getAttribute && focusObj.getAttribute("disabled")) ||
        ( focusObj.amIhide && focusObj.amIhide()) ||
        ( objname && focusObj.name && focusObj.name != objname )
  );
  return focusObj;
}

function element_initialize(parent) { //attribute
  this.parent = parent;
  this.xObject = new Array;

  this.isAttribute = is_attribute;
  this.isAttrValue = is_attribute_value;

  this.setFilter = emp_set_filter;
  this.setMask = emp_set_mask;

  this.getNextFocus = emp_get_next_focus;

  this.nFactory = em_n_facotry;
  this.addXObj = em_add_x_obj;

  // 이벤트 핸들러 셋팅 *******************
  this.eventHandler = em_event_handler;
  this.detachEvent("onkeypress", this.eventHandler);
  this.detachEvent("onkeyup", this.eventHandler);
  this.detachEvent("onkeydown", this.eventHandler);
  this.detachEvent("onfocus", this.eventHandler);
  this.detachEvent("onblur", this.eventHandler);
  this.detachEvent("onchange", this.eventHandler);
  this.detachEvent("onclick", this.eventHandler);
  this.detachEvent("onmouseover", this.eventHandler);
  this.detachEvent("onmouseout", this.eventHandler);
  this.attachEvent("onkeypress", this.eventHandler);
  this.attachEvent("onkeyup", this.eventHandler);
  this.attachEvent("onkeydown", this.eventHandler);
  this.attachEvent("onfocus", this.eventHandler);
  this.attachEvent("onblur", this.eventHandler);
  this.attachEvent("onchange", this.eventHandler);
  this.attachEvent("onclick", this.eventHandler);
  this.attachEvent("onmouseover", this.eventHandler);
  this.attachEvent("onmouseout", this.eventHandler);
  this.preventFocusHandler = em_event_focus_handler;
  // 이벤트 핸들러 셋팅 *******************
  //initialize
  this.nFactory();
}

//******************************** 폼초기화 *****************************
function form_initialize() {
  for(var idx=0; idx < this.elements.length ; idx++) {
    if (this.elements[idx].tagName == "OBJECT" ) continue;
    if (!window.GetOption("N_SUPPORT_HIDDEN_TYPE") && this.elements[idx].type == 'hidden') continue;
    this.elements[idx].initialize = element_initialize;
    this.elements[idx].initialize(this);
  }
}
//******************************** 폼초기화 *****************************

function initializefun() {
  this.GetOption = get_option;

  for ( var idx = 0 ; idx < document.forms.length ; idx++) {
    if (!document.forms[idx].initialize){
      document.forms[idx].initialize = form_initialize;
      document.forms[idx].initialize();
    }
  }
}

function evnt_mask_un_masking(evnt) {
  var evntSrc = evnt ? evnt : window.event;
  var srcObj = ( evntSrc && evntSrc.type == 'focus' ) ? evntSrc.srcElement : this;
  if (!srcObj.value) return;
  srcObj.value = srcObj.value.replace(window.GetOption("N_DELIMITER_CHAR"),"");
}

function evnt_decimal_un_masking(evnt) {
  var evntSrc = evnt ? evnt : window.event;
  var srcObj = ( evntSrc && evntSrc.type == 'focus' ) ? evntSrc.srcElement : this;
  if (!srcObj.value) return;
  srcObj.value = srcObj.value.replace(window.GetOption("N_DECIMA_CHAR"),"");
  var i;
  var tlen = srcObj.value.length;
  for (i=1; i<=2; i++){
    if (srcObj.value.charAt(tlen-i)=="0")	{
      srcObj.value = srcObj.value.substring(0,srcObj.value.length - 1);
    } else break;
  }
}

function evnt_qtydecimal_un_masking(evnt) {
  var evntSrc = evnt ? evnt : window.event;
  var srcObj = ( evntSrc && evntSrc.type == 'focus' ) ? evntSrc.srcElement : this;
  if (!srcObj.value) return;
  var minus = srcObj.value.indexOf("-");
  srcObj.value = srcObj.value.replace(window.GetOption("N_DECIMA_CHAR"),"");
  var i;

  if (srcObj.value.indexOf(".")>=0)	{
    var tlen = srcObj.value.length;
    var lenDec = parseInt(srcObj.getAttribute("len"));
    for (i=1; i<=lenDec+1; i++){
      if (srcObj.value.charAt(tlen-i)!="0")	{
         if (srcObj.value.charAt(tlen-i)==".") {
          srcObj.value = srcObj.value.substring(0,tlen - i);
         } else {
           srcObj.value = srcObj.value.substring(0,tlen - (i-1));
         }
        break;
      }
    }
  }
  if (minus>=0) {
    srcObj.value = "-" + srcObj.value;
  }
}

function evnt_percent_un_masking(evnt) {
  var evntSrc = evnt ? evnt : window.event;
  var srcObj = ( evntSrc && evntSrc.type == 'focus' ) ? evntSrc.srcElement : this;
  if (!srcObj.value) return;
  srcObj.value = srcObj.value.replace(window.GetOption("N_PERCENT_CHAR"),"");
  var i;

  if (srcObj.value.indexOf(".")>=0)	{
    var tlen = srcObj.value.length;
    for (i=1; i<=2+1; i++){
      if (srcObj.value.charAt(tlen-i)!="0")	{
         if (srcObj.value.charAt(tlen-i)==".") {
          srcObj.value = srcObj.value.substring(0,tlen - i);
         } else {
           srcObj.value = srcObj.value.substring(0,tlen - (i-1));
         }
        break;
      }
    }
  }
}

function evnt_mask_masking(evnt) {
  var evntSrc = evnt ? evnt : window.event;
  var srcObj = ( evntSrc && evntSrc.type =='blur' ) ? evntSrc.srcElement : this;
  if (!srcObj.value) return;
  var sStr = srcObj.value.replace( window.GetOption("N_DELIMITER_CHAR"),"");
  var mask = srcObj.xMask;
  var tStr = "";
  var jdx = 0;
  var tLen = sStr.length + 1;
  for(var idx=0; idx< sStr.length; idx++){
    tStr += sStr.charAt(idx);
    jdx++;
    if (jdx < mask.length && mask.charAt(jdx)!="9") tStr += mask.charAt(jdx++);
  }
  srcObj.value = tStr;
}

function evnt_money_masking(evnt) {
  var evntSrc = evnt ? evnt : window.event;
  var srcObj = ( evntSrc && evntSrc.type=='blur' ) ? evntSrc.srcElement : this;
  if (!srcObj.value) return;
  var sMoney = srcObj.value.replace( window.GetOption("N_DELIMITER_CHAR"),"");
  var tMoney = "";
  var i;
  var j=0;
  var tLen =sMoney.length;
  if (tLen <= 3 ) return ;
    for(i=0;i<tLen;i++){ if (i!=0 && ( i % 3 == tLen % 3) ) tMoney += ",";
    if(i < tLen ) tMoney += sMoney.charAt(i);
  }
  srcObj.value = tMoney;
}

function evnt_percent_masking(evnt) {
  var evntSrc = evnt ? evnt : window.event;
  var srcObj = ( evntSrc && evntSrc.type=='blur' ) ? evntSrc.srcElement : this;
  if (!srcObj.value) return;
  var sPercent = srcObj.value.replace( window.GetOption("N_DECIMA_CHAR"),"");
  var ePercent = "";
  var tPercent = "";
  var i;
  var tLen =sPercent.length;
  var dec = sPercent.indexOf(".");
  if (dec > 0) {
    ePercent = sPercent.substring(dec+1, tLen);
    sPercent = sPercent.substring(0, dec);
  }

  var tdec = ePercent.length;

  if (tdec<2) {
    for (i=tdec; i<2; i++) {
      ePercent = ePercent + "0";
    }
  } else {
    for (i=1; i<=(tdec-2); i++){
      if (ePercent.charAt(tdec-i)=="0")	{
        ePercent = ePercent.substring(0,ePercent.length - 1);
      } else break;
    }
  }

  tPercent = sPercent + "." + ePercent;
  srcObj.value = tPercent +"%";
}

function evnt_decimal_masking(evnt) {
  var evntSrc = evnt ? evnt : window.event;
  var srcObj = ( evntSrc && evntSrc.type=='blur' ) ? evntSrc.srcElement : this;
  if (!srcObj.value) return;
  var sMoney = srcObj.value.replace( window.GetOption("N_DECIMA_CHAR"),"");
  var eMoney = "";
  var tMoney = "";
  var i;
  var j=0;
  var tLen =sMoney.length;
  var dec = sMoney.indexOf(".");
  if (dec > 0) {
    eMoney = sMoney.substring(dec+1, tLen);
    sMoney = sMoney.substring(0, dec);
  }

  var fLen = sMoney.length;
  if ( fLen>= 3 ) {
    for(i=0;i<fLen;i++){
      if (i!=0 && ( i % 3 == fLen % 3) ) tMoney += ",";
      if(i < fLen ) tMoney += sMoney.charAt(i);
    }
  } else tMoney = sMoney;
  var tdec = eMoney.length;
  if (tdec<4) {
    for (i=tdec; i<4; i++) {
      eMoney = eMoney + "0";
    }
  } else {
    for (i=1; i<=(tdec-4); i++){
      if (eMoney.charAt(tdec-i)=="0")	{
        eMoney = eMoney.substring(0,eMoney.length - 1);
      } else break;
    }
  }
  tMoney = tMoney + "." + eMoney;
  srcObj.value = tMoney;
}

function evnt_qtydecimal_masking(evnt) {
  var evntSrc = evnt ? evnt : window.event;
  var srcObj = ( evntSrc && evntSrc.type=='blur' ) ? evntSrc.srcElement : this;
  if (!srcObj.value) return;
  var minus = srcObj.value.indexOf("-");
  var sMoney = srcObj.value.replace( window.GetOption("N_DECIMA_CHAR"),"");
  var eMoney = "";
  var tMoney = "";
  var i;
  var j=0;
  var tLen =sMoney.length;
  var dec = sMoney.indexOf(".");
  if (dec > 0) {
    eMoney = sMoney.substring(dec+1, tLen);
    sMoney = sMoney.substring(0, dec);
  }
  var fLen = sMoney.length;
  if ( fLen>= 3 ) {
    for(i=0;i<fLen;i++){
      if (i!=0 && ( i % 3 == fLen % 3) ) tMoney += ",";
      if(i < fLen ) tMoney += sMoney.charAt(i);
    }
  } else tMoney = sMoney;

  var tdec = eMoney.length;

  var lenDec = parseInt(srcObj.getAttribute("len"));

  if (tdec<lenDec) {
    for (i=tdec; i<lenDec; i++) {
      eMoney = eMoney + "0";
    }
  } else {
    for (i=1; i<=(tdec-lenDec); i++){
      if (eMoney.charAt(tdec-i)=="0")	{
        eMoney = eMoney.substring(0,eMoney.length - 1);
      } else break;
    }
  }
  if (minus >= 0){
    tMoney = "-" + tMoney;
  }
  tMoney = tMoney + "." + eMoney;

  srcObj.value = tMoney;
}

/******************************** 이벤트 발생 ****************************
/**************************************************
함수명 : ie_enter_focus_onkeypress
내   용 : 엔터시 다음 필드로 포커스 이동(onkeypress 이벤트시)
 **************************************************/
function enter_focus_onkeypress(evnt) {
  var evntSrc = evnt ? evnt : window.event;
  var sKey = String.fromCharCode(evntSrc.keyCode);
  // 키값이 Enter일때, 다음으로 focus 시킨다.
  if ( sKey == "\r" ) {
    var nextObj = this.parent.getNextFocus();
    if ( nextObj.focus ) nextObj.focus();
    evntSrc.returnValue = false;
  }
}

/**************************************************
함수명 : ie_filter_onkeypress
내   용 : 필터처리(onkeypress 이벤트시)
 **************************************************/
function filter_onkeypress(evnt) {
  var evntSrc = evnt ? evnt : window.event;
  if (this.parent.xFilter) {
    var sKey = String.fromCharCode(evntSrc.keyCode);
    var re = new RegExp(this.parent.xFilter);

    // Enter는 키검사를 하지 않는다.
    if(sKey!="\r" && !re.test(sKey)) evntSrc.returnValue=false;
    delete re;
  }
}

/*************************** 외부 호출 함수 ************************/
/**************************************************
함수명 : pro_first_focus
내   용 : 처음 로딩시 해당 필드로 포커스 이동
 **************************************************/
function pro_first_focus(parent) {
  this.parent = parent;
  this.x_key = "firstfocus";
  if (!this.parent.form.name || !window.GetOption("N_FOCUS_THIS_USE_TIME_OUT"))
    this.parent.focus();
  else {
    var parentId = this.parent.sourceIndex;
    window.setTimeout("document.all["+parentId+"].focus()", 30);
  }
}

/**************************************************
함수명 : pro_enter_focus
내   용 : 엔터시 다음 필드로 포커스 이동
 **************************************************/
function pro_enter_focus(parent) {
  this.parent = parent;
  this.x_key = "enter_focus";
  this.onkeypress = enter_focus_onkeypress;
}

/**************************************************
함수명 : pro_money
내   용 : 금액데이타표현 ex) 20,000
 **************************************************/
function pro_money(parent) {
   this.parent = parent;
   if (this.parent.value=="" || this.parent.value==0) this.parent.value="0"
   this.x_key = "money";
   this.x_value = parent.getAttribute(this.x_key);
   this.parent.setMask(this, "", evnt_money_masking, evnt_mask_un_masking);
   this.parent.setFilter(this, window.GetOption("N_NUM_FILTER"));
}

/**************************************************
함수명 : pro_date
내   용 : 날짜데이타표현 ex) 2000.01.01
 **************************************************/
function pro_date(parent) {
   this.parent = parent;
   this.x_key = "date";
   if ( !this.parent.isAttrValue("mask") ) this.parent.addXObj("mask", "pro_mask", window.GetOption("N_DATE_MASK"));
   if ( !this.parent.isAttrValue("filter") ) this.parent.setFilter(this, window.GetOption("N_NUM_FILTER"));
   //this.getMessage = in_get_message;
   this.validate = date_validate;
}

/**************************************************
함수명 : pro_month
내   용 : 날짜데이타표현 ex) 2000.01
 **************************************************/
function pro_month(parent) {
   this.parent = parent;
   this.x_key = "month";
   if ( !this.parent.isAttrValue("mask") ) this.parent.addXObj("mask", "pro_mask", window.GetOption("N_MONTH_MASK"));
   if ( !this.parent.isAttrValue("filter") ) this.parent.setFilter(this, window.GetOption("N_NUM_FILTER"));
   //this.getMessage = in_get_message;
   this.validate = date_validate;
}

/**************************************************
함수명 : pro_percent
내   용 : %데이타표현 ex) 100%
 **************************************************/
function pro_percent(parent) {
   this.parent = parent;
   this.x_key = "percent";
   this.x_value = parent.getAttribute(this.x_key);
   this.parent.setMask(this, "", evnt_percent_masking, evnt_percent_un_masking);
   this.parent.setFilter(this, window.GetOption("N_NUM_FILTER"));
}

function pro_mask(parent, defaultMask) { //constant data;
  this.parent = parent;
  this.x_key = "mask";
  this.x_value = (defaultMask) ? defaultMask : parent.getAttribute(this.x_key) ;
  this.parent.setMask(this, this.x_value, evnt_mask_masking, evnt_mask_un_masking);
  if ( window.GetOption("N_VALIDATE_ON_MASK")) {
    //this.getMessage = in_get_message;
    this.validate = mask_validate;
  }
}

/**************************************************
함수명 : pro_integer
내   용 : integer값 표현
 **************************************************/
function pro_integer(parent) {
  this.parent = parent;
  this.x_key = "integer";
  this.validate = integer_validate;
  //this.getMessage = pxm_get_message;
  this.parent.setFilter(this, window.GetOption("N_INTEGER_FILTER"));
}

/**************************************************
함수명 : pro_decimal
내   용 : 소숫점데이타표현 ex) 20,000.0000
 **************************************************/
function pro_decimal(parent) {
  this.parent = parent;
  this.x_key = "decimal";
  this.x_value = parent.getAttribute(this.x_key);
  this.parent.setMask(this, "", evnt_decimal_masking, evnt_decimal_un_masking);
  this.parent.setFilter(this, window.GetOption("N_NUM_DECIMA"));
}

/**************************************************
함수명 : pro_qtydecimal
내   용 : 소숫점데이타표현 ex) 20,000.00
 **************************************************/
function pro_qtydecimal(parent) {
  this.parent = parent;
  var lenDec = parseInt(parent.getAttribute("len"));
  var strDec = "";
  for (var i=0; i<lenDec; i++) {
    strDec += "0";
  }
  if (this.parent.value=="" || this.parent.value==0) this.parent.value="0." + strDec;
  this.x_key = "qtydecimal";
  this.x_value = parent.getAttribute(this.x_key);
  this.parent.setMask(this, "", evnt_qtydecimal_masking, evnt_qtydecimal_un_masking);
  this.parent.setFilter(this, window.GetOption("N_NUM_DECIMA"));
}

/**************************************************
함수명 : pro_fileno
내   용 : 파일번호표현 ex) 0309-23-N023
 **************************************************/
function pro_fileno(parent) {
   this.parent = parent;
   this.x_key = "fileno";
   if ( !this.parent.isAttrValue("mask") ) this.parent.addXObj("mask", "pro_mask", window.GetOption("N_FILENO_MASK"));
   //this.getMessage = in_get_message;
   this.validate = date_validate;
}

/**************************************************
함수명 : pro_refno
내   용 : 기준원가표현 ex) SKT-N023
 **************************************************/
function pro_refno(parent) {
   this.parent = parent;
   this.x_key = "refno";
   if ( !this.parent.isAttrValue("mask") ) this.parent.addXObj("mask", "pro_mask", window.GetOption("N_REFNO_MASK"));
   //this.getMessage = in_get_message;
   this.validate = date_validate;
}

/**************************************************
함수명 : pro_claimcd
내   용 : 기준원가표현 ex) 0605-001
 **************************************************/
function pro_post(parent) {
   this.parent = parent;
   this.x_key = "post";
   if ( !this.parent.isAttrValue("mask") ) this.parent.addXObj("mask", "pro_mask", window.GetOption("N_POST_MASK"));
   this.parent.setFilter(this, window.GetOption("N_NUM_FILTER"));
   //this.getMessage = in_get_message;
   this.validate = date_validate;
}

function pro_bsn(parent) {
  this.parent = parent;
  this.x_key = "bsn";
  if ( !this.parent.isAttrValue("mask") )
  this.parent.addXObj("mask", "pro_mask", window.GetOption("N_BSN_MASK"));
  this.parent.setFilter(this, window.GetOption("N_NUM_FILTER"));
  //this.getMessage = pxm_get_message;
  this.validate = bsn_validate;
}

function pro_ssn(parent) {
  this.parent = parent;
  this.x_key = "ssn";
  if ( !this.parent.isAttrValue("mask") )
  this.parent.addXObj("mask", "pro_mask", window.GetOption("N_SSN_MASK"));
  this.parent.setFilter(this, window.GetOption("N_NUM_FILTER"));
  //this.getMessage = pxm_get_message;
  this.validate = ssn_validate;
}

/**************************************************
함수명 : getMessage
내   용 : 필수 입력 필드에 값이 없으면 메세지
 **************************************************/
function getMessage(form) {
  for (var i=0; i<form.elements.length; i++) {
    if (form.elements[i].getAttribute("msg")) {
      if (!form.elements[i].value) {

        if ( typeof(form.elements[i]) != 'undefined' && (form.elements[i].type && form.elements[i].type!="hidden")
          && !(form.elements[i].readOnly) && !(form.elements[i].disabled) )  {

            var splitData = form.elements[i].getAttribute("msg").split("||");


            var msgData = "";

            if( splitData.length )
            {
                for( var kk = 0; kk < splitData.length; kk++ )
                {
                    msgData += splitData[kk] + "\n";
                }
            }
            else
            {
                msgData = form.elements[i].getAttribute("msg");
            }

            alert( msgData );


          form.elements[i].focus();
          return i;
        }
      }
    }
  }
  return -1;
}

function getSubmit(form, i) {
  var msgnum;
  var msg = "";
  if (form.elements[i].getAttribute("onSave")) {
    //msgnum = getMessage(form);
    //if (msgnum>=0) return msgnum;
    //document.all.imgwrite.src="/images/bt_write_on.gif";
    //if (document.all.EditLayer.style.display=="block") {
    //  document.all.gubun.value = "E";
    //  msg = "수정하시겠습니까?";
    //} else if (document.all.AddLayer.style.display=="block") {
    //  document.all.gubun.value = "W";
    //  msg = "등록하시겠습니까?";
    //}
    //if (msg=="") return 0;
    //if(window.confirm(msg)) {
      //try {
        eval(form.elements[i].getAttribute("onSave"));
      //} catch (e) {
        //alert("설정된 프로세서가 잘못되었습니다.");
      //}
    //} else {document.all.gubun.value = "";}
    //document.all.imgwrite.src="/images/bt_write.gif";
  } else if (form.elements[i].getAttribute("onSearch")) {
    try {
      eval(form.elements[i].getAttribute("onSearch"));
    } catch (e) {
      alert("설정된 프로세서가 잘못되었습니다.");
    }
  }
  return 0;
}