/**
 *  변경자   날   짜       변         경                내         용
 *  *****   **********    ******************************************
 *          2010-10-01    소수 입력 유효성 체크 함수 추가(fncChkDecimal)
 */

/*--------------------------------------------------------------------------------------------------

프로젝트 참여자중 아래 메서드를 수정하거나 추가 할 경우 반드시
다음 목록에 추가 하시고 알려주세요.                
                          
                          
              *-----------------String 객체 지원 함수
100. trim                         String.prototype.trim
101. 한글지원 글자 카운트       String.prototype.byte
102. 한글 지원 서브스트링         String.prototype.substringKor
104. replaceAll                   String.prototype.replaceAll
105. 자릿수 맞추기                String.prototype.zf
106. 숫자만 입력받기              String.prototype.allowNum
107. 콤마 추가(금액)    String.prototype.addCommas
108. 날짜(숫자와 -)만 입력받기              String.prototype.allowDate
                          
              *-----------------Date 객체 지원 함수
201. 날짜 포맷                    Date.prototype.format
      

              *-----------------Number 객체 지원 함수
301. 자릿수 맞추기                Number.prototype.zf
302. 숫자만 입력받기              Number.prototype.allowNum

              *-----------------쿠키지원 함수
401. 쿠키값 세팅                SetCookie(name, value, days)
402. 쿠키값 얻기                GetCookie(name)

              *-----------------FORM VALIDATION CHECKER
              *
소스의 원작자는 거친마루님입니다.
제가 몇가지 기능에 대해서 수정, 추가 하였습니다.

              *-----------------LISTENER TO ACCEPT VALID VALUES
키보드 리스너입니다.
경우에따라 이벤트 로드 메소드가 먹지 않는 경우가 있으니 
상황에 맞게 온오프 하세요.

              *-----------------FOR  DREAMWEAVER PUBLIC METHOD
드림위버에서 일반적으로 사용되는 메소드 입니다.
페이지에 추가하지 마시고 아래에 계속 넣으시면 됩니다.
플래시 및 임베드 오브젝트 스캐터입니다.
필요하시분은 추가 하세요.

              *-----------------FOR  폼 제어 함수
HTML Form 객체들을 조작하기 위한 메소드들 입니다.
801. 객체 값 지우기           setBlankValueTo(elementID)
802. 파일크기 단위 포함 문자열 생성     formatBytes(size)

--------------------------------------------------------------------------------------------------*/

/*#########################################################################
##############             String 객체 지원 함수             ##############
#########################################################################*/

//101. 트림
String.prototype.trim = function(str) { 
  str = this != window ? this : str; 
  return str.replace(/^\s+/g,'').replace(/\s+$/g,''); 
}

// 102. 한글지원 글자 카운트
String.prototype.bytes = function(str) {
    str = this != window ? this : str;
    var len = 0; 
    for(j=0; j<str.length; j++) {
        var chr = str.charAt(j);
        len += (chr.charCodeAt() > 128) ? 2 : 1
    }
    return len;
}

// 103. 한글 지원 서브스트링
String.prototype.substringKor = function(len, tail) {
  var str = this;
  var l = 0;
  for (var i=0; i<str.length; i++) {
    l += (str.charCodeAt(i) > 128) ? 2 : 1;
    if (l > len) return str.substring(0,i) + tail;
  }
  return str;
}

// 104. replaceAll
String.prototype.replaceAll = function(str1, str2) {
  var str = this.trim();
  if (str != "" && str1 != str2) {
    str = str.split(str1).join(str2);
  }
  return str;
}

// 105. 자릿수 맞추기(자리수 만큼 앞에 '0'추가)
// see Also.
// 301. Number.prototype.zf
// 999. String.prototype.string
String.prototype.zf = function(l) { return '0'.string(l - this.length) + this; } 

// 106. 숫자만 입력받기
String.prototype.allowNum = function(){
  if( (event.keyCode >= 48 && event.keyCode <= 57) || 
    (event.keyCode >= 96 && event.keyCode <= 105) ||
    (event.keyCode == 46) ||  // DEL
    (event.keyCode == 8)  || // backspace
    (event.keyCode == 9)  || // tabkey
    (event.keyCode == 13) || // enter key
    (event.keyCode == 37) || // ← key
    (event.keyCode == 38) ||  // ↑ key
    (event.keyCode == 39) ||  // → key
    (event.keyCode == 40) || // ↓ key
    (event.keyCode == 35) || // HOME key
    (event.keyCode == 36) ) {  // END key
    event.returnValue=true;
  } else {
    event.returnValue=false;
  }
  /*
  Mesg_Window_Call('alert', event.keyCode, function() {
    if( (event.keyCode >= 48 && event.keyCode <= 57) || 
      (event.keyCode >= 96 && event.keyCode <= 105) ||
      (event.keyCode == 46) ||  // DEL
      (event.keyCode == 8)  || // backspace
      (event.keyCode == 9)  || // tabkey
      (event.keyCode == 13) || // enter key
      (event.keyCode == 37) || // ← key
      (event.keyCode == 38) ||  // ↑ key
      (event.keyCode == 39) ||  // → key
      (event.keyCode == 40) || // ↓ key
      (event.keyCode == 35) || // HOME key
      (event.keyCode == 36) ) {  // END key
      event.returnValue=true;
    } else {
      event.returnValue=false;
    }     	  
  } );	
  */		  
}

String.prototype.allowDate = function(){
  if( (event.keyCode >= 48 && event.keyCode <= 57) || 
    (event.keyCode >= 96 && event.keyCode <= 105) ||
    (event.keyCode == 46) ||  // DEL
    (event.keyCode == 8)  || // backspace
    (event.keyCode == 9)  || // tabkey
    (event.keyCode == 13) || // enter key
    (event.keyCode == 37) || // ← key
    (event.keyCode == 38) ||  // ↑ key
    (event.keyCode == 39) ||  // → key
    (event.keyCode == 40) || // ↓ key
    (event.keyCode == 35) || // HOME key
    (event.keyCode == 36) ) {  // END key
    event.returnValue=true;
  } else {
    event.returnValue=false;
  } 
}

String.prototype.addCommas = function(){
  var nStr = this;
  nStr += '';
  x = nStr.split('.');
  x1 = x[0];
  x2 = x.length > 1 ? '.' + x[1] : '';
  var rgx = /(\d+)(\d{3})/;
  while (rgx.test(x1)) {
    x1 = x1.replace(rgx, '$1' + ',' + '$2');
  }
  return x1 + x2;
}
// 106-1. 숫자만 입력받기 input에 추가 onkeydown(allowNumChk(event))
function allowNumChk(event){
  if( (event.keyCode >= 48 && event.keyCode <= 57) || 
    (event.keyCode >= 96 && event.keyCode <= 105) ||
    (event.keyCode == 46) ||  // DEL
    (event.keyCode == 8)  || // backspace
    (event.keyCode == 9)  || // tabkey
    (event.keyCode == 13) || // enter key
    (event.keyCode == 37) || // ← key
    (event.keyCode == 38) ||  // ↑ key
    (event.keyCode == 39) ||  // → key
    (event.keyCode == 40) || // ↓ key
    (event.keyCode == 35) || // HOME key
    (event.keyCode == 36) ) {  // END key
    event.returnValue=true;
  } else {
    event.returnValue=false;
  }
}

// 107. toUpperCase
// prototype과 중복되는 내용이라 주석 처리.
// String.prototype.toUpperCase = function() {
// var event = window.event;
// if(event.keyCode >= 97 && event.keyCode <= 122) {
// event.keyCode = event.keyCode - 32;
// }
// }


/*
 * #########################################################################
 * ############## Date 객체 지원 함수 ##############
 * #########################################################################
 */

// 201. 날짜 포맷 - (new Date()).format('yyyy년mm월dd일');

// a global month names array
var gsMonthNames = new Array('January','February','March','April','May','June','July','August','September','October','November','December');

// a global day names array
var gsDayNames = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');

Date.prototype.format = function(f) {
  if (!this.valueOf()) return '';
  var d = this;
  return f.replace(/(yyyy|mmmm|mmm|mm|dddd|ddd|dd|hhh|hh|nn|ss|a\/p)/gi,
    function($1) {
      switch ($1.toLowerCase()) {
        case 'yyyy': return d.getFullYear();
        case 'mmmm': return gsMonthNames[d.getMonth()];
        case 'mmm':  return gsMonthNames[d.getMonth()].substr(0, 3);
        case 'mm':   return (d.getMonth() + 1).zf(2);
        case 'dddd': return gsDayNames[d.getDay()];
        case 'ddd':  return gsDayNames[d.getDay()].substr(0, 3);
        case 'dd':   return d.getDate().zf(2);
        case 'hhh':  return d.getHours().zf(2);
        case 'hh':   return ((h = d.getHours() % 12) ? h : 12).zf(2);
        case 'nn':   return d.getMinutes().zf(2);
        case 'ss':   return d.getSeconds().zf(2);
        case 'a/p':  return d.getHours() < 12 ? 'a' : 'p';
      }
    }    
  );
}


/*
 * #########################################################################
 * ############## Number 객체 지원 함수 ##############
 * #########################################################################
 */

// 301. 자릿수 맞추기(자리수 만큼 앞에 '0'추가)
// see Also.
// 105. String.prototype.zf
// 999. String.prototype.string
Number.prototype.zf = function(l) { return this.toString().zf(l); } 

// 302. 숫자만 입력받기
Number.prototype.allowNum = function() { return this.toString().allowNum(); }


/*
 * #########################################################################
 * ############## 쿠키 지원 함수 ##############
 * #########################################################################
 */
// 401. 쿠키세팅
function setCookie(name, value, expiredays) {
  var todayDate = new Date();
  todayDate.setDate(todayDate.getDate() + expiredays);
  document.cookie = name + "=" + escape(value) + "; path=/; expires=" + todayDate.toGMTString() + ";";
}

// 402. 쿠키값얻기
function getCookie(name) {
  var Found = false;
  var start, end;
  var i = 0;

  while (i <= document.cookie.length) {
    start = i;
    end = start + name.length;
    if (document.cookie.substring(start, end) == name) {
      Found = true;
      break;
    }
    i++;
  }

  if (Found == true) {
    start = end + 1;
    end = document.cookie.indexOf(';', start);
    if (end < start) end = document.cookie.length;
    return document.cookie.substring(start, end);
  }
  return '';
}

function clearCookie(name) {
    var now = new Date();
    var yesterday = new Date(now.getTime() - 1000 * 60 * 60 * 24);
    this.setCookie(name, '', yesterday);
}
/*
 * #########################################################################
 * ############## 종 속 함 수 ##############
 * #########################################################################
 */

// 998. dependent
String.prototype.hasFinalConsonant = function(str) {
    str = this != window ? this : str; 
    var strTemp = str.substr(str.length-1);
    return ((strTemp.charCodeAt(0)-16)%28!=0);
}

// 999. dependent on 105.String.prototype.zf
String.prototype.string = function(l) { var s = '', i = 0; while (i++ < l) { s += this; } return s; } 


function showModal(url, w, h, obj, c) 
{
  var windowStyle = ""
// + "dialogTop:"+event.clientY+";"
// + "dialogLeft:"+event.clientX+";"
    + "dialogWidth:"+w+"px;"
    + "dialogHeight:"+h+"px;"
    + "edge:raised;"
    + "unadorned:on;"
    if(true) + "center:yes;"
    + "help:no;"
    + "resizable:no;"
    + "status:no;"
    + "dialogHide:yes;";
  return window.showModalDialog(url,obj,windowStyle); 
}


/*
 * #########################################################################
 * ############## FORM VALIDATION CHECKER ##############
 * #########################################################################
 */

// / 에러메시지 포멧 정의 ///
var NO_BLANK = "{name+은는} 필수항목입니다";
var NOT_VALID = "{name+이가} 올바르지 않습니다";

// / 특수 패턴 검사 함수 매핑 ///
var funcs = new Array();
funcs['Id']       = onlyId;       // /^[a-zA-Z]{1}[a-zA-Z0-9_]+$/
funcs['Num']      = onlyNum;        // /^[0-9]+$/
funcs['Float']      = onlyFloat;        // /^[0-9]+$/
funcs['Float1']      = onlyFloat1;        // /^[0-9]+$/
funcs['Float2']      = onlyFloat2;        // /^[0-9]+$/
funcs['Eng']      = onlyEng;        // /^[a-zA-Z]+$/
funcs['EngNum']     = onlyEngNum;     // /^[a-zA-Z0-9]+$/
funcs['Han']      = onlyHan;        // /^[가-힣]+$/
funcs['HanEng']     = onlyHanEng;     // /^[가-힣a-zA-Z]+$/
funcs['HanEngNum']    = onlyHanEngNum;    // /^[가-힣a-zA-Z0-9]+$/
funcs['HanNum']     = onlyHanNum;     // /^[가-힣0-9]+$/
funcs['HanIncl']     = onlyHanIncl;       // 반드시 한글 포함

funcs['email']      = isValidEmail;
funcs['date']     = isValidDT;
funcs['dateymd']     = isValidDT;
funcs['dateym']     = isValidDT_YM;
funcs['datey']     = isValidDT_Y;
funcs['price']      = isValidPrice;
funcs['phone']      = isValidPhone;
funcs['jumin']      = isValidJumin;
funcs['bizno']      = isValidBizNo;
funcs['domain']     = isValidDomain;


function initForm(form) {
  
    for (var i = 0; i < form.elements.length; i++ ) {
        var el = form.elements[i];
        if (el.tagName == "FIELDSET") continue;
        el.value = el.value.trim();

        var option = el.getAttribute("OPTION");

        if (option != null) {
      optVal = option.toLowerCase();
      if(optVal == "eng") {
        el.style.imeMode = "disabled";
      } else if(optVal == "han") {
        el.style.imeMode = "active";
      }
        }

        if (el.getAttribute("REQUIRED") != null) {
            el.style.border = '1px solid #FF8080';
        }
    }
}

var gInjectionWords = "<script||</script||javascript:||:expression(";
var gInjectionWordArray = gInjectionWords.split("||");

function detectInjection(formValue) {
  if (formValue == null || formValue == "")
    return false;
  
  var nIdx = 0;
  for (nIdx = 0 ; nIdx < gInjectionWordArray.length; nIdx++) {
    if (gInjectionWordArray[nIdx] != "" && formValue.indexOf(gInjectionWordArray[nIdx]) != -1) {
      Mesg_Window_Call("alert", "보안 규정에 위배되는 정보가 감지 되었습니다.\n다음 값[" + gInjectionWordArray[nIdx] + "]은 보안상의 이유로 사용하실 수 없으니 다른 값으로 변경해 주시기 바랍니다.", function() {});
      return true;
    }
  }
  
  return false;
}

// / DUP SUBMIT 방지하기 위한 활성화 플래그 ///
var ACTIVATION_FLAG = true;

function validate(form) {
  try {
    // 이미 SUBMIT 되었다면 진행 시키지 않는다.
    if(ACTIVATION_FLAG == false) return false;
    var nVIdx = 0;
    
      for (nVIdx = 0; nVIdx < form.elements.length; nVIdx++ ) {
          var el = form.elements[nVIdx];
          if (el.tagName == "FIELDSET"
               || el.tagName == "OBJECT") continue;
          
          el.value = el.value.trim();
          
          if (detectInjection(el.value)) {
            return false;
          }
          
          var fs = el.getAttribute("FS");
          var minbyte = el.getAttribute("MINBYTE");
          var maxbyte = el.getAttribute("MAXBYTE");
          var option = el.getAttribute("OPTION");
          var match = el.getAttribute("MATCH");
          var glue = el.getAttribute("GLUE");
  
          if(fs != null) {
              minbyte = fs.split("_")[0];
              maxbyte = fs.split("_")[1];
          }
  
          if (el.getAttribute("REQUIRED") != null) {
              if (el.value == null || el.value == "") {
                  return doError(el,NO_BLANK);
              }
          }
  
          if (minbyte != null) {
              if (el.value.bytes() < parseInt(minbyte)) {
                  return doError(el,"{name+은는} 최소 "+minbyte+"글자 이상 입력해야 합니다.");
              }
          }
  
          if (maxbyte != null && el.value != "") {
              var len = 0;
              if (el.value.bytes() > parseInt(maxbyte)) {
                  return doError(el,"{name}의 길이는 최대 "+maxbyte+"글자 입니다.");
              }
          }
  
          if (match && (el.value != form.elements[match].value)) return doError(el,"{name+이가} 일치하지 않습니다");
  
          if (option != null && el.value != "") {
            if(funcs[option] == null) return doError(el,"{name+이가} 지원하지 않는 옵션'"+el.getAttribute("OPTION")+"'을 포함하고 있습니다.");
                
            if (el.getAttribute('SPAN') != null) {
              var _value = new Array();
              for (span=0; span<el.getAttribute('SPAN');span++ ) {
                  _value[span] = form.elements[nVIdx+span].value;
              }
              var value = _value.join(glue == null ? '' : glue);
              if (!funcs[option](el,value)) return false;
            } else {
                if (!funcs[option](el)) return false;
            }
          }
      }
      
      if (typeof validateMore == "function") {
        try {
          if (validateMore(form) != true)
            return false;
        } catch (e) {
          alert("validateMore() 실행중 에러 발생\n" + e + "\n" + e.message);
        }
      }
      
      // / 단 한번의 SUBMIT 요청만 수행하도록 비활성화 시킨다. ///
      ACTIVATION_FLAG = false;
  } catch(e) {
    alert("공통모듈의 validate() 함수 실행중에 에러가 발생했습니다.\n" + e + "\n" + e.message);
  }
    
    return true;
}

function clearValidationFlags() {
  ACTIVATION_FLAG = true;
}

function josa(str,tail) {
    return (str.hasFinalConsonant()) ? tail.substring(0,1) : tail.substring(1,2);
}

function doError(el,type,action) {
    var pattern = /{([a-zA-Z0-9_]+)\+?([가-힣]{2})?}/;
    var name = (hname = el.getAttribute("HNAME")) ? hname : el.getAttribute("NAME");
    pattern.exec(type);
    var tail = (RegExp.$2) ? josa(eval(RegExp.$1),RegExp.$2) : "";
/*    alert(type.replace(pattern,eval(RegExp.$1) + tail));
    if (action == "sel") {
        el.select();
    } else if (action == "del")    {
        el.value = "";
    }
    el.focus();
    return false;*/
    Mesg_Window_Call('alert', type.replace(pattern,eval(RegExp.$1) + tail), function() {
      if (action == "sel") {
          el.select();
      } else if (action == "del")    {
          el.value = "";
      }
      try { el.focus(); } catch (e) {}
      return false;
    } );
    return false;
}    

// / 패턴 검사 함수들 ///
function onlyId(el) {
    var pattern = /^[a-zA-Z]{1}[a-zA-Z0-9_]+$/;
    return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 첫글자를 영문으로 시작해야하고,\n 그 이후에는 영문,숫자, _ 문자만 사용할 수 있습니다");
}


function onlyNum(el) {
    var pattern = /^[0-9]+$/;
    return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 숫자로만 입력해야 합니다");
}

function onlyFloat(el) {
  var pattern = /^[0-9]+[\.]+[0-9]+$/;
  return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 소수로만 입력해야 합니다");
}
function onlyFloat1(el) {
  var pattern = /^[0-9]+[\.]+[0-9]{1,1}?$/;
  return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 소수점 한자리로만 입력해야 합니다");
}
function onlyFloat2(el) {
  var pattern = /^[0-9]+[\.]+[0-9]{2,2}?$/;
  return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 소수점 두자리 로만 입력해야 합니다");
}

function onlyEng(el) {
    var pattern = /^[a-zA-Z\s]+$/;
    return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 영문자로만 입력해야 합니다");
}

function onlyEngNum(el) {
    var pattern = /^[a-zA-Z0-9\s]+$/;
    return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 영문자,숫자로만 입력해야 합니다");
}

function onlyHan(el) {
    var pattern = /^[가-힣\s]+$/;
    return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 한글로만 입력해야 합니다");
}

function onlyHanEng(el) {
    var pattern = /^[가-힣a-zA-Z\s]+$/;
    return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 한글,영문자로만 입력해야 합니다");
}

function onlyHanEngNum(el) {
    var pattern = /^[가-힣a-zA-Z0-9\s]+$/;
    return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 한글,영문자,숫자로만 입력해야 합니다");
}

function onlyHanNum(el) {
    var pattern = /^[가-힣0-9\s]+$/;
    return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 한글,숫자로만 입력해야 합니다");
}

function onlyHanIncl(el) {
    var pattern = /[가-힣]/;
    return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 한글을 포함해야 합니다");
}

function isValidEmail(el,value) {
    var value = value ? value : el.value;
    var pattern = /^[_a-zA-Z0-9-\.]+@[\.a-zA-Z0-9-]+\.[a-zA-Z]+$/;
    return (pattern.test(value)) ? true : doError(el,NOT_VALID);
}

function isValidDT(el) {
// var pt = /^\d{4}-\d{2}-\d{2}$/;
// if (!pt.test(s)) return false;
    var val = el.value.trim().replaceAll('-', '');
    
    var rtnVal = false;
    var y = parseInt(val.substr(0,4), 10); 
    var m = parseInt(val.substr(4,2), 10) - 1; 
    var d = parseInt(val.substr(6,2), 10);
    var dt = new Date(y, m, d);
    if (dt.getFullYear() == y && dt.getMonth() == m && dt.getDate() == d) {
      /*
      if(val.length == 14) {
        hh = parseInt(val.substr(8,2), 10);
        mm = parseInt(val.substr(10,2), 10);
        ss = parseInt(val.substr(12,2), 10);
        if((hh >= 1 && hh <= 24) && (mm >= 1 && mm <= 60) && (ss >= 1 && ss <= 60)) 
          rtnVal = true;
      } else 
      */
      if(val.length == 8) {
        rtnVal = true;
      } else 
        rtnVal = false;
    } else 
      rtnVal = false;
    
    return rtnVal ? true : doError(el,"{name+이가} 올바른 날짜(년월일) 타입이 아닙니다.");
}

function isValidDT_YM(el) {
   var val = el.value.trim().replaceAll('-', '');
   
   var rtnVal = false;
   var y = parseInt(val.substr(0,4), 10); 
   var m = parseInt(val.substr(4,2), 10) - 1; 
   var dt = new Date(y, m, 1); 
   if (dt.getFullYear() == y && dt.getMonth() == m) {
     if(val.length == 6) {
       rtnVal = true;
     } else 
       rtnVal = false;
   } else 
     rtnVal = false;
   
   return rtnVal ? true : doError(el,"{name+이가} 올바른 날짜(년월) 타입이 아닙니다.");
}

function isValidDT_Y(el) {
   var val = el.value.trim().replaceAll('-', '');
   
   var rtnVal = false;
   var y = parseInt(val.substr(0,4), 10); 
   var dt = new Date(y, 1, 1); 
   if (dt.getFullYear() == y) {
     if(val.length == 4) {
       rtnVal = true;
     } else 
       rtnVal = false;
   } else 
     rtnVal = false;
   
   return rtnVal ? true : doError(el,"{name+이가} 올바른 연도 타입이 아닙니다.");
}

function isValidPrice(el) {
    return (!isNaN(el.value.replaceAll(',',''))) ? true : doError(el,NOT_VALID);
}

function isValidPhone(el,value) {
    //var pattern = /^([0]{1}[0-9]{1,2})-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/;
  var pattern = /^[0-9-]+$/;
    var num = value ? value : el.value;
    if (pattern.exec(num)) {
        /*
        if(RegExp.$1 == "010" || RegExp.$1 == "011" || RegExp.$1 == "016" || RegExp.$1 == "017" || RegExp.$1 == "018" || RegExp.$1 == "019") {
            if (!el.getAttribute('SPAN')) el.value = RegExp.$1 + RegExp.$2 + RegExp.$3;
        }
        */
        return true;
    } else {
        return doError(el,NOT_VALID);
    }
}

function isValidJumin(el,value) {
    var pattern = /^([0-9]{6})-?([0-9]{7})$/; 
    var num = value ? value : el.value;
    if (!pattern.test(num)) return doError(el,NOT_VALID); 
    num = RegExp.$1 + RegExp.$2;

    var sum = 0;
    var last = num.charCodeAt(12) - 0x30;
    var bases = "234567892345";
    for (var i=0; i<12; i++) {
        if (isNaN(num.substring(i,i+1))) return doError(el,NOT_VALID);
        sum += (num.charCodeAt(i) - 0x30) * (bases.charCodeAt(i) - 0x30);
    }
    var mod = sum % 11;
    return ((11 - mod) % 10 == last) ? true : doError(el,NOT_VALID);
}

function isValidBizNo(el, value) { 
    var pattern = /([0-9]{3})-?([0-9]{2})-?([0-9]{5})/; 
    var num = value ? value : el.value;
    if (!pattern.test(num)) return doError(el,NOT_VALID); 
    num = RegExp.$1 + RegExp.$2 + RegExp.$3;
    var cVal = 0; 
    for (var i=0; i<8; i++) { 
        var cKeyNum = parseInt(((_tmp = i % 3) == 0) ? 1 : ( _tmp  == 1 ) ? 3 : 7); 
        cVal += (parseFloat(num.substring(i,i+1)) * cKeyNum) % 10; 
    } 
    var li_temp = parseFloat(num.substring(i,i+1)) * 5 + '0'; 
    cVal += parseFloat(li_temp.substring(0,1)) + parseFloat(li_temp.substring(1,2)); 
    return (parseInt(num.substring(9,10)) == 10-(cVal % 10)%10) ? true : doError(el,NOT_VALID); 
}

function isValidDomain(el) {
    var pattern = /^.+(\.[a-zA-Z]{2,3})$/;
    return (pattern.test(el.value)) ? true : doError(el,NOT_VALID);
}





/*
 * #########################################################################
 * ############## LISTENER TO ACCEPT VALID VALUES ##############
 * #########################################################################
 */
document.onkeydown = doIt;

// do nothing yet.
function doIt(e)
{
  var targ;
  if (!e) var e = window.event;
  if(e.keyCode == 116 ||
      (e.ctrlKey && e.keyCode == 78)) {
    e.keyCode='';
    return e.returnValue=false;
  }
  if (e.target) targ = e.target;
  else if (e.srcElement) targ = e.srcElement;
  if (targ.nodeType == 3) targ = targ.parentNode;
  
  var option = targ.getAttribute("option");
  if(option != null) {
    optVal = option.toLowerCase();
    if (optVal == "date") {
      targ.style.imeMode = "disabled";
    } else if (optVal == "price" || optVal == "num") {
      targ.style.imeMode = "disabled";
      return (targ.value.allowNum());
    }
  }
}


// document.onreadystatechange = fnStartInit;
function fnStartInit() {
   if (document.readyState=='complete') {
      // initForm(document.forms[0]);
   }
}



/*
 * #########################################################################
 * ############## FOR DREAMWEAVER PUBLIC METHOD ##############
 * #########################################################################
 */


function MM_swapImgRestore() { // v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { // v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { // v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { // v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_showHideLayers() { // v6.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}

function MM_openBrWindow(theURL,winName,features) { // v2.0
    window.open(theURL,winName,features);
}

function swf(src, w, h) {  
  document.write('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="'+w+'" height="'+h+'" align="middle">');
  document.write('<param name="allowScriptAccess" value="sameDomain" />');
  document.write('<param name="movie" value="'+src+'" />');
  document.write('<param name="quality" value="high" />');
  document.write('<param name="bgcolor" value="#ffffff" />');
  document.write('<embed src="'+src+'" quality="high" bgcolor="#ffffff" width="'+w+'" height="'+h+'" name="templtate" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />');
  document.write('</object>');
}


/**
 * 일반전화번호/팩스번호 체크
 */
function check_Number(obj){
    objdata = obj.value.replace('-','') 
    
    while(objdata.search("-")!=-1){
      objdata = num.replace("-","");
      objdata = eval(objdata);
    }
    if(isNaN(objdata)){
/*      alert(obj.alt+"는 숫자로 작성하셔야 합니다.");
      obj.value="";
      try { obj.focus(); } catch (e) {}
      return false;*/
				Mesg_Window_Call('alert', obj.alt+"는 숫자로 작성하셔야 합니다.", function() {
      	obj.value="";
      	try { obj.focus(); } catch (e) {}
      	return false;
     	  } );			      
    }
}


/**
 * 연/월/일(yyyymmdd)의 유효성을 체크하고 표준날짜포맷(YYYY-MM-DD)으로 변환하여 리턴
 */
function format_YYYYMMDD(object){
  var now=new Date(); 
  var num, year, month, day;
  num= object.value;

  if( (object.value).length== 0 )
    return;

  while(num.search("-")!=-1){
    num = num.replace("-","");
  }

  while(num.search("/")!=-1){
    num = num.replace("/","");
  }
  
  while(num.search("_")!=-1){
    num = num.replace("_","");
  }

  // num = num.replace(".","");

  if(isNaN(num)){
  year =  now.getFullYear();
    month = (now.getMonth()+1);
    day = now.getDate();
    if(month <  10)
    month = '0' + month;
    if(day < 10)
    day = '0' + day;
/*    alert("숫자로만 작성하셔야 합니다.");
    try { object.focus(); } catch (e) {}
    num=year+"-"+month+"-"+day;
    object.value = num;
  var tem_id = object.id;
  var tem_id_1 = tem_id.substring(2)
  if(tem_id_1.length  > 7 || tem_id_1 == 's_Date'  || tem_id_1 == 'e_Date' )
    document.getElementById(tem_id_1).value = num;
    return num;
*/
    Mesg_Window_Call('alert', "숫자로만 작성하셔야 합니다.", function() {
      try { object.focus(); } catch (e) {}
      num=year+"-"+month+"-"+day;
      object.value = num;
      var tem_id = object.id;
      var tem_id_1 = tem_id.substring(2);
      if(tem_id_1.length  > 7 || tem_id_1 == 's_Date'  || tem_id_1 == 'e_Date' )
        if (document.getElementById(tem_id_1) != null && document.getElementById(tem_id_1) != "undefined")
          document.getElementById(tem_id_1).value = num;
      return num;
    } );
    
  }

  if(num!=0&&num.length==8){
    year= num.substring(0,4);
    month=num.substring(4,6);
    day=num.substring(6);

    if(isValidDay(year,month,day)==false){
      num="";
      year =  now.getFullYear();
      month = (now.getMonth()+1);
      day = now.getDate();
      if(month <  10)
      month = '0' + month;
     if(day < 10)
    day = '0' + day;
      /*alert("유효하지 않은 일자입니다. 다시 한번 확인하시고 입력해 주세요.");   
      try { object.focus(); } catch (e) {}
      num=year+"-"+month+"-"+day;
      object.value = num;
      return num;
      */
      Mesg_Window_Call('alert', "유효하지 않은 일자입니다. 다시 한번 확인하시고 입력해 주세요.", function() {
        try { object.focus(); } catch (e) {}
        num=year+"-"+month+"-"+day;
        object.value = num;
        return num;
      } );
      
    }
    num=year+"-"+month+"-"+day;
    object.value = num;
  var tem_id = object.id;
  var tem_id_1 = tem_id.substring(2);
  if(tem_id_1.length  > 7 || tem_id_1 == 's_Date'  || tem_id_1 == 'e_Date' )
    if (document.getElementById(tem_id_1) != null && document.getElementById(tem_id_1) != "undefined")
      document.getElementById(tem_id_1).value = num;
    
  }else{
    num=""; 
    year =  now.getFullYear();
    // month==now.getMonth();
    month = (now.getMonth()+1);
    day = now.getDate();
    if(month <  10)
    month = '0' + month;
   if(day < 10)
    day = '0' + day;

	Mesg_Window_Call('alert', "유효하지 않은 일자입니다. 다시 한번 확인하시고 입력해 주세요.", function() {
	try { object.focus(); } catch (e) {}
	num=year+"-"+month+"-"+day;
	object.value = num;
	return num;
    } );
    /*alert("날짜 입력형식 오류입니다. 다시 한번 확인하시고 입력해 주세요.");
    try { object.focus(); } catch (e) {}
    num=year+"-"+month+"-"+day;
    object.value = num;
  var tem_id = object.id;
  var tem_id_1 = tem_id.substring(2)

  if(tem_id_1.length  > 7 || tem_id_1 == 's_Date'  || tem_id_1 == 'e_Date' )
    document.getElementById(tem_id_1).value = num;
    return num;
    */
  }
  
  return num;
}

/**
 * 연/월(yyyymm)의 유효성을 체크하고 표준날짜포맷(YYYY-MM)으로 변환하여 리턴
 */
function format_YYYYMM(object){
  var now=new Date(); 
  var num, year, month;
  num= object.value;

  if( (object.value).length== 0 )
    return;

  while(num.search("-")!=-1){
    num = num.replace("-","");
  }

  while(num.search("/")!=-1){
    num = num.replace("/","");
  }
  
  while(num.search("_")!=-1){
    num = num.replace("_","");
  }

  // num = num.replace(".","");

  if(isNaN(num)){
    year =  now.getFullYear();
    month = (now.getMonth()+1);
    day = now.getDate();
    if(month <  10)
    month = '0' + month;
    
    Mesg_Window_Call('alert', mChk_only_num, function() {
     	  var r = aquamsgBox.getValue();
     	  if(r == "OK")
     	   try { object.focus(); } catch (e) {}
     	  } );			
  	return false;  
    
    num=year+"-"+month;
    object.value = num;
    var tem_id = object.id;
    document.getElementById(tem_id).value = num;
    return num;
  
  } 

  if(num!=0&&num.length==6){
    year= num.substring(0,4);
    month=num.substring(4);
    
    if(parseInt(month,10)> 12){
      num="";
      year =  now.getFullYear();
      month = (now.getMonth()+1);
      
      if(month <  10)
      month = '0' + month;
     
      /*alert("유효하지 않은 월입니다. 다시 한번 확인하시고 입력해 주세요.");   
      try { object.focus(); } catch (e) {}
      num=year+"-"+month;
      object.value = num;
      return num;
      */
      Mesg_Window_Call('alert', "유효하지 않은 월입니다. 다시 한번 확인하시고 입력해 주세요.", function() {
        try { object.focus(); } catch (e) {}
        num=year+"-"+month;
        object.value = num;
        return num;
      } );
    }
    num=year+"-"+month;
    object.value = num;
    var tem_id = object.id;
    document.getElementById(tem_id).value = num;
    return num;
  }else{
    
    /*alert("년도/월  입력형식 오류입니다. 다시 한번 확인하시고 입력해 주세요.");
    year =  now.getFullYear();
    month = (now.getMonth()+1);
    num=year+"-"+month;
    object.value = num;
    var tem_id = object.id;
    document.getElementById(tem_id).value = num;
    try { object.focus(); } catch (e) {}
    return num;
    */
    Mesg_Window_Call('alert', "년도/월  입력형식 오류입니다. 다시 한번 확인하시고 입력해 주세요.", function() {
      year =  now.getFullYear();
      month = (now.getMonth()+1);
      num=year+"-"+month;
      object.value = num;
      var tem_id = object.id;
      document.getElementById(tem_id).value = num;
      try { object.focus(); } catch (e) {}
      return num;
    } );
  }
}

/**
 * 문자열 (연/월/일(yyyymmdd)) 의 유효성을 체크
 */
function check_YYYYMMDD(dateValue){

  var num, year, month, day;
  num=dateValue;

  while(num.search("-")!=-1){
    num = num.replace("-","");
  }

  while(num.search("/")!=-1){
    num = num.replace("/","");
  }
  
  while(num.search("_")!=-1){
    num = num.replace("_","");
  }
  if(isNaN(num)){

    Mesg_Window_Call('alert', mChk_only_num, function() {
   	  var r = aquamsgBox.getValue();
   	  if(r == "OK")
   		  ;
   	  } );			
	return false;    
  }

  if(num!=0&&num.length==8){
    year= num.substring(0,4);
    month=num.substring(4,6);
    day=num.substring(6);

    if(isValidDay(year,month,day)==false){
      num="";      
      Mesg_Window_Call('alert', mChk_ValidDay, function() {
       	  var r = aquamsgBox.getValue();
       	  if(r == "OK")
       		  ;
       	  } );			
    	return false;         
    }
        
  }else{
    num="";
    Mesg_Window_Call('alert', mChk_ValidDay_error, function() {
     	  var r = aquamsgBox.getValue();
     	  if(r == "OK")
     		  ;
     	  } );			
  	return false;        
  }
  return true;
}



/**
 * 유효한(존재하는) 일(日)인지 체크
 */
function isValidDay(yyyy, mm, dd) {
    var m = parseInt(mm,10) - 1;
    var d = parseInt(dd,10);

    var end = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    if ((yyyy % 4 == 0 && yyyy % 100 != 0) || yyyy % 400 == 0) {
        end[1] = 29;
    }

    return (d >= 1 && d <= end[m]);
}


/**
 * 유효한(존재하는) 시(時)인지 체크
 */
function isValidHour(object) {
  var hh = object.value;
    var h = parseInt(hh,10);
    if (h >= 1 && h <= 24){
    if( hh.length < 2 ){
      object.value = '0'+hh;
    }
    return;
  }else{
    /*alert("시 입력형식 오류입니다. 다시 한번 확인하시고 입력해 주세요.");
    
    try { object.focus(); } catch (e) {}
    */
    Mesg_Window_Call('alert', "시 입력형식 오류입니다. 다시 한번 확인하시고 입력해 주세요.", function() {
      try { object.focus(); } catch (e) {}
    } );
  }
}

/**
 * 유효한(존재하는) 분(分)인지 체크
 */
function isValidMin(object) {
  var mi = object.value;
    var m = parseInt(mi,10);
    if (m >= 1 && m <= 60){
    if( mi.length < 2 ){
      object.value = '0'+mi;
    }
    return;
  }else{
    /*alert("분 입력형식 오류입니다. 다시 한번 확인하시고 입력해 주세요.");
    
    try { object.focus(); } catch (e) {}
    */
    Mesg_Window_Call('alert', "분 입력형식 오류입니다. 다시 한번 확인하시고 입력해 주세요.", function() {
      try { object.focus(); } catch (e) {}
    } );
  }
}

function focus_value(object){

  var str=object.value;

  while(str.search("-")!=-1){
    str = str.replace("-","");
  }
  object.value = str;
}


/* 길이(byte) 체크 - maxlength를 쓰는 엘리먼트에서 적용 */
function checkBytes(object) {

  var maxlength = object.getAttribute("MAXLENGTH");
  
  if (maxlength != null && object.value != "") {
    if (object.value.bytes() > parseInt(maxlength)) {
      /*alert("입력길이는 최대 "+maxlength+"Byte 입니다.");
      try { object.focus(); } catch (e) {}
      return false;
      */
      Mesg_Window_Call('alert', "입력길이는 최대 "+maxlength+"Byte 입니다.", function() {
        try { object.focus(); } catch (e) {}
        return false;
      } );
    }
    
  }
  return true;
}

/* 길이(byte) 체크 - maxlength를 쓰수없는 엘리먼트(textarea)에서 적용 */
function checkTextBytes(object, maxlength) {

  // var maxlength = object.getAttribute("MAXLENGTH");
  if (maxlength != null && object.value != "") {
    
    if (object.value.bytes() > parseInt(maxlength)) {
      /*alert("입력길이는 최대 "+maxlength+"Byte 입니다.");
      try { object.focus(); } catch (e) {}
      return false;
      */
      Mesg_Window_Call('alert', "입력길이는 최대 "+maxlength+"Byte 입니다.", function() {
        try { object.focus(); } catch (e) {}
        return false;
      } );
    }
    
  }
  return true;
}

/* 길이(byte) 체크오버사이즈는 삭제 - maxlength를 쓰수없는 엘리먼트(textarea)에서 적용 */
function checkBytesCut(object, maxlength) {

  // var maxlength = object.getAttribute("MAXLENGTH");
  
  if (maxlength != null && object.value != "") {
    
    if (object.value.bytes() > parseInt(maxlength)) {
    
      /*alert("입력길이는 최대 "+maxlength+"Byte 입니다.");
      var objLength =object.value.length;  
   
      while( object.value.bytes() > parseInt(maxlength)){
        object.value = object.value.substring(0, object.value.length-1);
    
      }
    try { object.focus(); } catch (e) {}
    return false;
    */
      Mesg_Window_Call('alert', "입력길이는 최대 "+maxlength+"Byte 입니다.", function() {
        var objLength =object.value.length;  
   
        while( object.value.bytes() > parseInt(maxlength)){
          object.value = object.value.substring(0, object.value.length-1);
        }
        try { object.focus(); } catch (e) {}
        return false;
      } );
    }
    
  }
  return true;
}

/* 길이(byte)를 input_object 앨리먼트에 입력 - maxlength를 쓰수없는 엘리먼트(textarea)에서 적용 */
function checkTextBytesInput(object, maxlength, input_object) {

  input_object.value = object.value.bytes();
  if (maxlength != null && object.value != "") {
    
    if (object.value.bytes() > parseInt(maxlength)) {
      /*alert("입력길이는 최대 "+maxlength+"Byte 입니다.");
      try { object.focus(); } catch (e) {}
      return false;
      */
      Mesg_Window_Call('alert', "입력길이는 최대 "+maxlength+"Byte 입니다.", function() {
        try { object.focus(); } catch (e) {}
        return false;
      } );
    }
    
  }
  return true;
}

/* strValue : 입력값 , maxByte : 최대입력 byte- wiseGrid 값 체크시 적용 */
function checkBytesGrid(strValue, maxByte) {

  if (strValue.bytes() > parseInt(maxByte)) {
    /*alert("입력길이는 최대 "+maxByte+"Byte 입니다.");
    
    return false;
    */
    Mesg_Window_Call('alert', "입력길이는 최대 "+maxByte+"Byte 입니다.", function() {
      return false;
    } );
  }
    
  return true;
}

/*
 * 2008.12.08 추가 유치원 평가 숫자 유효성 체크 
 * 사용방법 : fncChkNumber(value) 
 * 리턴값	: true 또는 false
 */
function fncChkNumber(num){
  
  var availStr    = "0123456789";
  var compareStr  = num;    
  var btnLen      = compareStr.length;

  for (var j = 0 ; j < btnLen ; j++)
  {
  
    ch = compareStr.substr(j,1);

    if(availStr.indexOf(ch) < 0)
    {     
      return false;
    }
  } 

  return true;
}

/*
 * 2008.12.08 추가 유치원 평가 숫자 유효성 체크 후 메세지 출력
 * 사용방법 : fncCheckMsg(object, 컬럼명)
 * 리턴값	: true 또는 false
 */
function fncCheckMsg(obj,name){
  
  if(!fncChkNumber(obj.value)){ 
    
    /*alert(name+ "은(는) 숫자만 입력해주세요.");
    obj.value = "";
    return false;
    */
    Mesg_Window_Call('alert', name+ "은(는) 숫자만 입력해주세요.", function() {
      obj.value = "";
      return false;
    } );
  }else{
    return true;
  }
}

/*
 * 2008.12.31 추가 
 * 유치원 평가 : 전화번호 유효성 체크 
 * 사용방법 : fncChkTelNo(value)
 * 리턴값	: true 또는 false
 */
function fncChkTelNo(num){
	
	var availStr		= "0123456789-";
	var compareStr	= num;		
	var btnLen			= compareStr.length;

	for (var j = 0 ; j < btnLen ; j++)
	{
	
		ch = compareStr.substr(j,1);

		if(availStr.indexOf(ch) < 0)
		{			
			return false;
		}
	}	

	return true;
}

/*
 * 2009.01.05 추가 
 * 유치원 평가 : 메뉴 로케이션 - 홈 링크
 * 
 */
function fncGoHome(){

	top.location.href="Main_main.action";
}



/*
 * CO ; 전호번호, 핸드폰번호, FAX 번호 유효성 체크
 * 사용방법 : flag 에 aquamsg.js에 정의된 변수 값과 동일한 값을 넘겨 받아 사용  
 * 리턴값	: true 또는 false
 */
function fncChkTelNo2(obj, flag){
	
	var availStr		= "0123456789-)";
	var compareStr	= obj.value;		
	var btnLen			= compareStr.length;
	var msg_param ="";

	for (var j = 0 ; j < btnLen ; j++)
	{
		ch = compareStr.substr(j,1);

		if(availStr.indexOf(ch) < 0)
		{			
			if(flag == "tel"){
				msg_param = mChk_telno;
			}else if(flag == "cell"){
				msg_param = mChk_cellphone_no;
			}else if(flag == "fax"){
				msg_param = mChk_fax_no;
			}
			
	        Mesg_Window_Call('alert', msg_param, function() {
	         	  var r = aquamsgBox.getValue();         		
	         		 obj.value = "";
	         		 try { obj.focus(); } catch (e) {}	         	     
	         	  } );			
			return false;
		}
	}	

	return true;
}


/*
 * CO ; 숫자값만 입력 가능할 경우
 * 사용방법 : flag 에 aquamsg.js에 정의된 변수 값과 동일한 값을 넘겨 받아 사용  
 *           fncChkOnlyNumber(document.main.NUM_VALUE1,'num_value1')
 * 리턴값      : true 또는 false
 */
function fncChkOnlyNumber(obj, flag){
	  
    var availStr    = "0123456789";
    var compareStr  = obj.value;    
    var btnLen      = compareStr.length;

    for (var j = 0 ; j < btnLen ; j++) {	  
        ch = compareStr.substr(j,1);

        if(availStr.indexOf(ch) < 0) {     
			if(flag == "num_value1"){
				msg_param = mChk_num_value1;
			}else if(flag == "num_value2"){
				msg_param = mChk_num_value2;
			}else if(flag == "num_value3"){
				msg_param = mChk_num_value3;
			}
			
	        Mesg_Window_Call('alert', msg_param, function() {
	         	  var r = aquamsgBox.getValue();
	         		 obj.value = "";
	         		 try { obj.focus(); } catch (e) {}         	     
	         	  } );			
			return false;
        }
    } 

  return true;
}
/* 
*  엑셀저장 클릭시 데이터가 없을 경우
*/
function fncChkExcelNoData(){	
    Mesg_Window_Call('alert', mMsg_excel_noData, function() {
  	var r = aquamsgBox.getValue();
  	} );
    return false;  
}

function fncChkDateValidate(){	
    Mesg_Window_Call('alert', mChk_from_to, function() {
  	var r = aquamsgBox.getValue();
  	} );
    return false;  
}


/* 
*  업로드 상태 바 
*/
function upload_status(uploadStatus){
    var obj=document.getElementById("divHTML");
    if(uploadStatus == "start"){        
	    obj.innerHTML = "<div id='Layer1' style='opacity:0;moz-opacity:0;filter:alpha(opacity=0); position:absolute; width:100%; height:100%; z-index:1; left: 0px; top: 0px; background-color: #CDCEA6; layer-background-color: #CDCEA6; border: 1px none #000000;'></div><div id='Layer2' style='position:absolute; width:127px; height:37px; z-index:2; left: 300px; top: 170px;'><table><tr><td><img src='./common/images/co_loading.gif'></td></tr></table></div>";
    }else{
        obj.innerHTML = "";
    }    
}

/*
 * #########################################################################
 * ############## 폼 제어 함수 ################################################
 * #########################################################################
 */
function removeAllOptions(selectbox, bHeaderRemain) {
  if (bHeaderRemain != false)
    bHeaderRemain = true;
  
  for(var i = selectbox.options.length; i >= (bHeaderRemain ? 1 : 0); i--) {
    selectbox.options.remove(i);
  }
}

function addOption(selectbox, text, value) {
  var optn = document.createElement("OPTION");
  optn.text = text;
  optn.value = value;
  selectbox.options.add(optn);
}

/*
 * 2009.08.27 추가 
 * 공통 : 객체 값 지우기 
 * 사용방법 : setBlankValueTo(elementID)
 * 리턴값  : 
 */
function setBlankValueTo(elementID) {
  document.getElementById(elementID).value = "";
}

/*
 * 2009.08.29 추가 
 * 공통 : 시작일자와 종료일자 체크
 * 사용방법 : checkDateFromTo(dateFrom, dateTo, true)
 * 리턴값  : true/false
 */
function checkDateFromTo(dateFrom, dateTo, bAlert) {  
  dateFrom = dateFrom.replaceAll("-", "");
  dateTo = dateTo.replaceAll("-", "");
  
  if (checkDateFromTo.arguments.length < 3 )
    bAlert = true;
  
  if(dateFrom != null && dateFrom != "" && dateTo != null && dateTo != "" ) {    
    if ( Number(dateFrom) > Number(dateTo) ) {
      if (bAlert == true) {
        Mesg_Window_Call('alert', mChk_from_to, function() {} );
      }
      return false;
    } 
  } 
  return true;  
}

/*
 * 2009.09.15 추가 
 * 공통 : 파일의 크기(Byte)단위에 맞는 문자열 반환
 * 사용방법 : formatBytes(size)
 * 리턴값  : 문자열
 */
function formatBytes(size) {
  var unit = ["B", "KB", "MB", "GB", "TB"];
  var idx = 0;
  
  if (parseInt(size / 1024) > 0) {
    for (idx = 1; parseInt(size / 1024 / 1024) > 0; idx++)
      size = parseInt(size / 1024);
    size /= 1024;
  }
  
  return (Math.round(size * 100) / 100) + " " + unit[idx];
}

/*
 * 2009.09.15 추가 
 * 공통 : WiseGrid에서 체크된 로우가 있는지 여부를 반환한다.
 * 사용방법 : WGridIsRowChecked(wgridID, headerName)
 *           wgridID      : 선언된 WiseGrid의 ID (생략가능)                          
 *                          기본값 = WiseGrid
 *           headerName   : 체크박스를 설정한 WiseGrid의 헤더 Key (생략가능)
 *                          기본값 = SELECTED
 * 리턴값  : 체크된 로우가 있을시 true, 아니면 false
 */
function WGridIsRowChecked(wgridID, headerName) {
  try {
    if (WGridGetCheckedRowCnt(wgridID, headerName) > 0)
      return true;
    else
      return false;
  } catch (e) {
    alert("WGridIsRowChecked() 함수 실행중에 에러가 발생했습니다.\n" + e + "\n" + e.message);
  }
  return false;
}

/*
 * 2009.09.15 추가 
 * 공통 : WiseGrid에서 체크된 로우수를 반환한다.
 * 사용방법 : WGridGetCheckedRowCnt(wgridID, headerName)
 *           wgridID      : 선언된 WiseGrid의 ID (생략가능)                          
 *                          기본값 = WiseGrid
 *           headerName   : 체크박스를 설정한 WiseGrid의 헤더 Key (생략가능)
 *                          기본값 = SELECTED
 * 리턴값  : 체크된 로우수
 */
function WGridGetCheckedRowCnt(wgridID, headerName) {
  try {
    if (WGridGetCheckedRowCnt.arguments.length < 1 )
      wgridID = "WiseGrid";
    
    if (WGridGetCheckedRowCnt.arguments.length < 2 )
      headerName = "SELECTED";
    
    var GridObj = document.getElementById(wgridID);
    var nRowCnt = 0;
  
    for (var i = 0; i < GridObj.GetRowCount(); i++) { 
      if (GridObj.GetCellValue(headerName, i) == "1") 
        nRowCnt = nRowCnt + 1;
    }
  } catch (e) {
    alert("WGridGetCheckedRowCnt() 함수 실행중에 에러가 발생했습니다.\n" + e + "\n" + e.message);
  }
  return nRowCnt;
}

/*
 * 2009.10.07 추가 
 * 공통 : WiseGrid에서 해당 셀의 Row Index를 반환한다.
 * 사용방법 : WGridGetRowIndex(wgridID, headerName)
 *           wgridID      : 선언된 WiseGrid의 ID                          
 *           headerName   : 값을 비교할 WiseGrid의 컬럼 헤더 Key
 *           value        : WiseGrid의 해당 컬럼과 비교할 값
 *           bHiddenValue : Hidden Value 와 비교 여부 (생략 가능)
 *                          기본값 = false
 * 리턴값  : 동일 값이 있으면 해당 Row의 Index 값, 없으면 -1
 */
function WGridGetRowIndex(wgridID, headerName, value, bHiddenValue) {
  try {
    if (WGridGetRowIndex.arguments.length < 4 )
      bHiddenValue = false;
    
    var nRow = -1;
    var strCellValue = "";
    var i;
    
    var GridObj = document.getElementById(wgridID);
            
    for (i = 0; i < GridObj.GetRowCount(); i++) {
      if (bHiddenValue) {
        strCellValue = GridObj.GetCellHiddenValue(headerName, i);
      } else {
        strCellValue = GridObj.GetCellValue(headerName, i);
      }
      if (strCellValue == value) {
        nRow = i;
        break;
      }
    }    
  } catch (e) {
    alert("WGridGetRowIndex() 함수 실행중에 에러가 발생했습니다.\n" + e + "\n" + e.message);
    nRow = -1;
  }
  
  return nRow;
}

/*
 * 2009.10.28 추가 
 * 공통 : WiseGrid의 수신된 RawData를 반환한다.
 * 사용방법 : WGridGetRecvRawData(wgridID)
 *           wgridID      : WiseGrid의 ID                          
 *           rawDataKey   : WiseGrid에 존재하는 수신된 RawData의 Key
 * 리턴값  : WiseGrid의 수신된 RawData
 */
function WGridGetRecvRawData(wgridID, rawDataKey) {
  var resultRawData = null;
  
  try {
    if (WGridGetRecvRawData.arguments.length < 2 ) {
      alert("WGridGetRecvRawData() 함수의 파라미터(wgridID, rawDataKey)가 정상적으로 설정되지 않았습니다.");
      return null;
    }
    
    var GridObj = document.getElementById(wgridID);
    if (GridObj == null || typeof GridObj == "undefined") {
      alert("WGridGetRecvRawData() 함수에서 [wgridID=" + wgridID +  "] 에 해당하는 WiseGrid를 찾을 수 없습니다.");
      return null;
    }
    
    resultRawData = GridObj.GetRecvRawData(rawDataKey);
  } catch (e) {
    alert("WGridGetRecvRawData() 함수 실행중에 에러가 발생했습니다.\n" + e + "\n" + e.message);
  }
  
  return resultRawData;
}

/*
 * 2009.10.28 추가 
 * 공통 : WiseGrid의  RawData를 반환한다.
 * 사용방법 : WGridGetRawData(wgridID)
 *           wgridID      : WiseGrid의 ID                          
 *           param        : WiseGrid의 GetGridRawData 함수로 전달할 인자 값
 * 리턴값  : WiseGrid의 RawData
 */
function WGridGetRawData(wgridID, param) {
  var resultRawData = null;
  
  try {
    if (WGridGetRawData.arguments.length < 2 ) {
      param = null;
    }
    
    var GridObj = document.getElementById(wgridID);
    if (GridObj == null || typeof GridObj == "undefined") {
      alert("WGridGetRawData() 함수에서 [wgridID=" + wgridID +  "] 에 해당하는 WiseGrid를 찾을 수 없습니다.");
      return null;
    }
    
    if (param == null) {
      resultRawData = GridObj.GetGridRawData();
    } else {
      resultRawData = GridObj.GetGridRawData(param);
    }
  } catch (e) {
    alert("WGridGetRawData() 함수 실행중에 에러가 발생했습니다.\n" + e + "\n" + e.message);
  }
  
  return resultRawData;
}

/*
 * 2009.10.28 추가 
 * 공통 : 특정 WiseGrid의 RawData를 설정한다.
 * 사용방법 : WGridSetRawData(wgridID, rawData)
 *           wgridID       : WiseGrid의 ID                          
 *           rawData       : WiseGrid에 설정할 rawData
 *           bValidate     : Validation 처리 여부 (true/false)
 * 리턴값  : 성공여부 (true/false)
 */
function WGridSetRawData(wgridID, rawData, bValidate) {
  try {    
    if (WGridSetRawData.arguments.length < 2 ) {
      alert("WGridSetRawData() 함수의 파라미터(wgridID, rawData)가 정상적으로 설정되지 않았습니다.");
      return false;
    }
    
    if (WGridSetRawData.arguments.length < 3 ) {
      bValidate = false;
    }
    
    var GridObj = document.getElementById(wgridID);
    if (GridObj == null || typeof GridObj == "undefined") {
      alert("WGridSetRawData() 함수에서 [wgridID=" + wgridID +  "] 에 해당하는 WiseGrid를 찾을 수 없습니다.");
      return false;
    }
    
    GridObj.SetGridRawData(rawData, bValidate);
    
  } catch (e) {
    alert("WGridSetRawData() 함수 실행중에 에러가 발생했습니다.\n" + e + "\n" + e.message);
    return false;
  }
  
  return true;
}

/*
 * 2009.10.28 추가 
 * 공통 : 특정 WiseGrid에 RawData를 추가한다.
 * 사용방법 : WGridAddRawData(wgridID, rawDataKey, rawData)
 *           wgridID       : WiseGrid의 ID           
 *           rawDataKey    : WiseGrid에 추가할 rawData의 키값               
 *           rawData       : WiseGrid에 추가할 rawData
 * 리턴값  : 성공여부 (true/false)
 */
function WGridAddRawData(wgridID, rawDataKey, rawData) {
  try {    
    if (WGridAddRawData.arguments.length < 3 ) {
      alert("WGridAddRawData() 함수의 파라미터(wgridID, rawDataKey, rawData)가 정상적으로 설정되지 않았습니다.");
      return false;
    }
    
    var GridObj = document.getElementById(wgridID);
    if (GridObj == null || typeof GridObj == "undefined") {
      alert("WGridAddRawData() 함수에서 [wgridID=" + wgridID +  "] 에 해당하는 WiseGrid를 찾을 수 없습니다.");
      return false;
    }
    
    GridObj.AddGridRawData(rawDataKey, rawData);
    
  } catch (e) {
    alert("WGridAddRawData() 함수 실행중에 에러가 발생했습니다.\n" + e + "\n" + e.message);
    return false;
  }
  
  return true;
}

/*
 * 2009.09.15 추가 
 * 공통 : 이미지 버튼을 활성화/비활성화 시킨다.
 *       파일명에 _dis 가 붙은 이미지(비활성화 이미지)파일과 붙지않은 이미지(활성화이미지)파일이  세트로 존재해야한다.
 * 사용방법 : enableImgButton(btnID, isEnabled)
 *           btnID        : 이미지 버튼의 ID
 *           isEnabled    : 활성화 여부
 *                          기본값 = true
 *           bOnClickControl : onclick 함수를 활성화에 따라 제어할지 여부 *                  
 *                             기본값 = true
 *           nHandCursor  : 커서를 hand로 언제 설정할지 여부
 *                          0 = Hand 커서로 변경 안함
 *                          1 = 활성화될때 Hand 커서로 변경
 *                          2 = 비활성화될때 Hand 커서로 변경         
 *                          기본값 = 1
 * 리턴값  : 
 */
function enableImgButton(btnID, isEnabled, bOnClickControl, nHandCursor) {
  try {
    if (enableImgButton.arguments.length < 2 )
      isEnabled = true;
    
    if (enableImgButton.arguments.length < 3 )
      bOnClickControl = true;
    
    if (enableImgButton.arguments.length < 4 )
      nHandCursor = 1;
   
    var objImgBtn = document.getElementById(btnID);
    
    if (objImgBtn == null || typeof objImgBtn == "undefined" || objImgBtn.nodeName=="DIV")
      return;
    
    if (isEnabled) {
      objImgBtn.src = objImgBtn.src.replaceAll("_dis.gif", ".gif");
      if (bOnClickControl) {
        if (objImgBtn.onclick == ""
          && objImgBtn.onclick_bak != "") {
          objImgBtn.onclick = objImgBtn.onclick_bak;
        }
      }
      if (nHandCursor == 1)
        objImgBtn.style.cursor = "hand";
      else if (nHandCursor == 2)
        objImgBtn.style.cursor = "default";
    } else {
      objImgBtn.src = objImgBtn.src.replaceAll("_dis.gif", ".gif");
      objImgBtn.src = objImgBtn.src.replaceAll(".gif", "_dis.gif");
      if (bOnClickControl) {
        if (objImgBtn.onclick != "") {
          objImgBtn.onclick_bak = objImgBtn.onclick;
          objImgBtn.onclick = "";
        }
      }
      if (nHandCursor == 1)
        objImgBtn.style.cursor = "default";
      else if (nHandCursor == 2)
        objImgBtn.style.cursor = "hand";
    }
  } catch (e) {
    alert("enableImgButton() 함수 실행중에 에러가 발생했습니다.\n" + e + "\n" + e.message);
  }
}

/*
 * 2009.09.15 추가 
 * 공통 : DIV 영역을 활성화/비활성화 시킨다.       
 * 사용방법 : showDIV(divID, isEnabled)
 *           divID        : DIV ID
 *           isEnabled    : 활성화 여부
 *                          기본값 = true
 * 리턴값  : 
 */
function showDIV(divID, isEnabled) {
  try {
    if (showDIV.arguments.length < 2 )
      isEnabled = true;
   
    var objDIV = document.getElementById(divID);
    
    if (objDIV == null || typeof objDIV == "undefined")
      return;
    
    if (isEnabled) {
      objDIV.style.display = "block";
    } else {
      objDIV.style.display = "none";
    }
  } catch (e) {
    alert("showDIV() 함수 실행중에 에러가 발생했습니다.\n" + e + "\n" + e.message);
  }
}

/*
 * 2009.09.15 추가 
 * 공통 : 실제 창의 높이가 원하는 높이가 되도록 보정된 다이얼로그 높이를 반환한다.
 *       IE 7.0일 경우 높이를 보정한다.
 * 사용방법 : getDialogHeight(height)
 *           height       : 다이얼로그 창의 높이
 * 리턴값  : 보정된 높이값 
 */
function getDialogHeight(height) {
  try {
    var userAgent = window.navigator.userAgent;
    var dialogHeight = height; // 원하는 대화창 크기 = 200px
    if (userAgent.indexOf("MSIE 7.0") != -1) {
       var xpTitleBarHeight = 29; // XP 타이틀 바 = 29px   
       var border = 2; // 가장 자리 = 2px
       var ifXPSP2_statusBarHeight = 0; // XPSP2 이하의 상태 표시줄 = 25px
       dialogHeight -= (xpTitleBarHeight + border + ifXPSP2_statusBarHeight);  
    }
  } catch (e) {
    alert("getDialogHeight() 함수 실행중에 에러가 발생했습니다.\n" + e + "\n" + e.message);
  }
  return dialogHeight;
}

/**
 * 2009.10.27 추가
 * 공통 : 차트를 만든다.  
 * @param chart_type 차트 타입 /common/flash/FusionCharts/[차트타입명].swf 의 차트타입명이 들어간다.
 * @param object 차트를 랜더링할 div태그의 id 
 * @param xml_data 차트 속성과 데이터에 관한 XML 문자열
 * @return 없음
 */
function cbis4FsChartRender(chart_type, object, xml_data, width, height)
{
	if(width == null)
		width = "100%";
	if(height == null)
		height = "100%";
	var url = window.location.href.split('/');
	var host = "http://"+url[2]+"/"+url[3]+"/";
	var chartObj = new FusionCharts(host+'/common/flash/FusionCharts/'+chart_type+'.swf', object+"_chart", width, height, "0", "1");
	
	$("#"+object).html("");
	chartObj.setDataXML(xml_data);
	chartObj.render(object);	
}

/**
 * 2009.10.28 추가
 * 차트의 클릭 이벤트 오버라이드용 함수
 * @param id ChartBean에서 부여한 아이디
 * @param series 시리즈
 * @param category 카테고리
 * @param value 값
 * @return 없음
 */
function cbis4FsChartClickEvent(id, series, category , value)
{
	
}

/**
 * 2009.12.07 추가
 * XSS 필터 함수
 * @param xssContents 필터링할 문자열
 * @return 필터된 문자열
 */
function xssFilter(xssContents) 
{
  var xssDelete = xssContents;
  xssDelete = xssDelete.replace(/</g, "%3C").replace(/>/g, "%3E");
  xssDelete = xssDelete.replace(/\"/g, "%22").replace(/\'/g, "%27");
  xssDelete = xssDelete.replace(/#/g, "%23").replace(/@/g, "%40");

  return xssDelete;
} 

/**
 * 2009.12.09 추가
 * XSS 필터 함수
 * @param rxssContents 필터링할 문자열
 * @return 필터된 문자열
 */
function rxssFilter(xssContents) 
{
  var xssDelete = xssContents;
  xssDelete = xssDelete.replace(/%3C/g, "<").replace(/%3E/g, ">");
  xssDelete = xssDelete.replace(/%22/g, "\"").replace(/%27/g, "\'");
  xssDelete = xssDelete.replace(/%23/g, "#").replace(/%40/g, "@");

  return xssDelete;
} 

function checkWiseGridError(GridObj) {
  if (GridObj.GetStatus() == "vfalse") {
    Mesg_Window_Call('alert', GridObj.GetMessage(), function() {} );
    return true;      
  }
  return false;
}

/**
 * 2010.10.01 추가
 * 소수 입력 유효성 체크 함수
 * @param obj Object
 * @param len 소수점 이하 제한 자리수
 * @return true/false
 */
function fncChkDecimal(obj,len)
{
  if(obj.value.lastIndexOf('.') == -1) {    //소수점 존재여부 Check
    alert('유효하지 않은 형식입니다. 다시 입력하세요.');
    obj.value = "";
    return false;
  } else {
    objValue = obj.value.split('.');
    if(isNaN(objValue[0])) {                //입력값 숫자여부 Check
      alert('유효하지 않은 형식입니다. 다시 입력하세요.');
      obj.value = "";
      return false;
    } else {
      if(isNaN(objValue[1])) {              //입력값 숫자여부 Check
        alert('유효하지 않은 형식입니다. 다시 입력하세요.');
        obj.value = "";
        return false;
      } else if(objValue[1].length > len) { //소수점 이하 자리수 Check
        alert('소수점 이하  ' + len + ' 자리수를 초과할 수 없습니다. 다시 입력하세요.');
        obj.value = "";
        return false;
      }
      else  return true;
    }
  }
}
