
var __moveKey = [8, 37, 39, 46, 13, 9];
	/*
	key == 8  // 백스페이스 키
	key == 37 // 왼쪽 화살표 키
	 key == 39 // 오른쪽 화살표 키
	 key == 46 // DEL 키
	 key == 13 // 엔터 키
	 key == 9  // Tab 키
	*/


	/* vim: set expandtab tabstop=4 shiftwidth=4: */ 
	//+--------------------------------------------------------+ 
	//| Copyright : Song Hyo-Jin <shj at xenosi.de>            | 
	//+--------------------------------------------------------+ 
	//| License : BSD                                          | 
	//+--------------------------------------------------------+ 
	//
	//$Id: numberFormatting.js, 2008. 12. 09. crucify Exp $ 
	/*
	 * 	text = '123,4,4234.234,23523.2,342'; 
	 * text.toInt() == 12344234 
	 * text.toNum() == 12344234.23423523 
	 * text.numberFormat() = 12,344,234.234,235,23
	 */
	
	String.prototype.toInt = function() { 
		 if(/^-/.test(this)) { 
		     return this.replace(/\..*$/g, '').replace(/[^\d]/g, '') * -1; 
		 } else { 
		     return this.replace(/\..*$/g, '').replace(/[^\d]/g, '') * 1; 
		 } 
	}
	String.prototype.toNum = function() { 
		 if(/^-/.test(this)) { 
		     return this.replace(/(\.[^\.]+)\..*$/g, '$1').replace(/[^\d\.]/g, '') * -1.0; 
		 } else { 
		     return this.replace(/(\.[^\.]+)\..*$/g, '$1').replace(/[^\d\.]/g, '') * 1.0; 
		 } 
	}
	String.prototype.numberFormat = function() { 
		 var num = (this.toNum() + '').split(/\./); 
		 var commal = function(text) { 
		     var ret = text.replace(/(\d)(\d{3},)/g, '$1,$2'); 
		     if(ret == text) return ret; 
		     return commal(ret); 
		 } 
		 var commar = function(text) { 
		     var ret = text.replace(/(,\d{3})(\d)/g, '$1,$2'); 
		     if(ret == text) return ret; 
		     return commar(ret); 
		 } 
		 var ret = commal(num[0].replace(/(\d)(\d{3})$/g, '$1,$2')); 
		 if(num.length > 1) { 
		     ret += '.' + commar(num[1].replace(/^(\d{3})(\d)/g, '$1,$2')); 
		 } 
		 return ret; 
	} 

	 /**
	 * usage : 
	 * var form = document.form;
	 * var required = {
	 *	"name" : "이름을 입력해 주세요",
	 *	"phone" : "전화번호를 입력해 주세요."	
	 * };
	 * checkForm(form, required);
	 */
	
	 function checkForm(tForm, required) {
	 	
	  	for (var i in required) {
	    		var el = eval("tForm." + i);
	    		if (!el.value) {
	      			alert(required[i]);
	      			el.focus();
	      			return false;
	    		}
	  	}
	  	return true;
	 }
	 
	 /**
	 * 전자우편 체크
	 *
	 */
	 
	 function checkEmail(email) {
	       var pattern = /^(.+)@(.+)$/;
	       var atom = "\[^\\s\\(\\)<>#@,;:!\\\\\\\"\\.\\[\\]\]+";
	       var word="(" + atom + "|(\"[^\"]*\"))";
	       var user_pattern = new RegExp("^" + word + "(\\." + word + ")*$");
	       var ip_pattern = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	       var domain_pattern = new RegExp("^" + atom + "(\\." + atom +")*$");
	
	       var arr = email.match(pattern);
	       if (!arr) return false;
	       if (!arr[1].match(user_pattern)) return false;
	
	       var ip = arr[2].match(ip_pattern);
	       if (ip) {
	              for (var i=1; i<5; i++) if (ip[i] > 255) return false;
	       }
	       else {
	              if (!arr[2].match(domain_pattern)) return false;
	              var domain = arr[2].match(new RegExp(atom,"g"));
	              if (domain.length<2) return false;
	              if (domain[domain.length-1].length<2 || domain[domain.length-1].length>3)
	                     return false;
	       }
	       return true; 
	} 
	
	
	/**
	* return checkForeginNo('외국인번호13자리');
	* return checkJumin('주민번호13자리');
	* return checkBizNo('사업자번호10자리');
	*/

	// 재외국인 번호 체크
	function checkForeginNo(fgnno) {
	        var sum=0;
	        var odd=0;
	        buf = new Array(13);
	        for(i=0; i<13; i++) { buf[i]=parseInt(fgnno.charAt(i)); }
	        odd = buf[7]*10 + buf[8];
	        if(odd%2 != 0) { return false; }
	        if( (buf[11]!=6) && (buf[11]!=7) && (buf[11]!=8) && (buf[11]!=9) ) {
	                return false;
	        }
	        multipliers = [2,3,4,5,6,7,8,9,2,3,4,5];
	        for(i=0, sum=0; i<12; i++) { sum += (buf[i] *= multipliers[i]); }
	        sum = 11 - (sum%11);
	        if(sum >= 10) { sum -= 10; }
	        sum += 2;
	        if(sum >= 10) { sum -= 10; }
	        if(sum != buf[12]) { return false }
	        return true;
	}

	// 주민번호 체크
	function checkJumin(juminno) {
	        if(juminno=="" || juminno==null || juminno.length!=13) {
	//                alert("주민등록번호를 적어주세요.");
	                return false;
	        }
	        var jumin1 = juminno.substr(0,6);
	        var jumin2 = juminno.substr(6,7);
	        var yy           = jumin1.substr(0,2);        // 년도
	        var mm     = jumin1.substr(2,2);        // 월
	        var dd     = jumin1.substr(4,2);        // 일
	        var genda  = jumin2.substr(0,1);        // 성별
	        var msg, ss, cc;
	
	        // 숫자가 아닌 것을 입력한 경우
	        if (!isNumeric(jumin1)) {
	                alert("주민등록번호 앞자리를 숫자로 입력하세요.");
	                return false;
	        }
	        // 길이가 6이 아닌 경우
	        if (jumin1.length != 6) {
	                alert("주민등록번호 앞자리를 다시 입력하세요.");
	                return false;
	        }
	        // 첫번째 자료에서 연월일(YYMMDD) 형식 중 기본 구성 검사
	        if (yy < "00" || yy > "99" ||
	                mm < "01" || mm > "12" ||
	                dd < "01" || dd > "31") {
	                alert("주민등록번호 앞자리를 다시 입력하세요.");
	                return false;
	        }
	        // 숫자가 아닌 것을 입력한 경우
	        if (!isNumeric(jumin2)) {
	                alert("주민등록번호 뒷자리를 숫자로 입력하세요.");
	                return false;
	        }
	        // 길이가 7이 아닌 경우
	        if (jumin2.length != 7) {
	                alert("주민등록번호 뒷자리를 다시 입력하세요.");
	                return false;
	        }
	        // 성별부분이 1 ~ 4 가 아닌 경우
	        if (genda < "1" || genda > "4") {
	                alert("주민등록번호 뒷자리를 다시 입력하세요.");
	                return false;
	        }
	        // 연도 계산 - 1 또는 2: 1900년대, 3 또는 4: 2000년대
	        cc = (genda == "1" || genda == "2") ? "19" : "20";
	        // 첫번째 자료에서 연월일(YYMMDD) 형식 중 날짜 형식 검사
	        if (isYYYYMMDD(parseInt(cc+yy), parseInt(mm), parseInt(dd)) == false) {
	                alert("주민등록번호 앞자리를 다시 입력하세요.");
	                return false;
	        }
	        // Check Digit 검사
	        if (!isSSN(jumin1, jumin2)) {
	                alert("입력한 주민등록번호를 검토한 후, 다시 입력하세요.");
	                return false;
	        }
	        return true;
	}

	// 사업자등록번호 체크
	function checkBizNo(vencod) {
	        var sum = 0;
	        var getlist =new Array(10);
	        var chkvalue =new Array("1","3","7","1","3","7","1","3","5");
	        for(var i=0; i<10; i++) { getlist[i] = vencod.substring(i, i+1); }
	        for(var i=0; i<9; i++) { sum += getlist[i]*chkvalue[i]; }
	        sum = sum + parseInt((getlist[8]*5)/10);
	        sidliy = sum % 10;
	        sidchk = 0;
	        if(sidliy != 0) { sidchk = 10 - sidliy; }
	        else { sidchk = 0; }
	        if(sidchk != getlist[9]) { return false; }
	        return true;
	}


	function isYYYYMMDD(y, m, d) {
	        switch (m) {
	        case 2:        // 2월의 경우
	                if (d > 29) return false;
	                if (d == 29) {
	                        // 2월 29의 경우 당해가 윤년인지를 확인
	                        if ((y % 4 != 0) || (y % 100 == 0) && (y % 400 != 0))
	                                return false;
	                }
	                break;
	        case 4:        // 작은 달의 경우
	        case 6:
	        case 9:
	        case 11:
	                if (d == 31) return false;
	        }
	        // 큰 달의 경우
	        return true;
	}

	function isNumeric(s) {
	        for (i=0; i<s.length; i++) {
	                c = s.substr(i, 1);
	                if (c < "0" || c > "9") return false;
	        }
	        return true;
	}
	
	function isLeapYear(y) {
	        if (y < 100)
	        y = y + 1900;
	        if ( (y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0) ) {
	                return true;
	        } else {
	                return false;
	        }
	}
	
	function getNumberOfDate(yy, mm) {
	        month = new Array(29,31,28,31,30,31,30,31,31,30,31,30,31);
	        if (mm == 2 && isLeapYear(yy)) mm = 0;
	        return month[mm];
	}
	
	function isSSN(s1, s2) {
	        n = 2;
	        sum = 0;
	        for (i=0; i<s1.length; i++)
	                sum += parseInt(s1.substr(i, 1)) * n++;
	        for (i=0; i<s2.length-1; i++) {
	                sum += parseInt(s2.substr(i, 1)) * n++;
	                if (n == 10) n = 2;
	        }
	        c = 11 - sum % 11;
	        if (c == 11) c = 1;
	        if (c == 10) c = 0;
	        if (c != parseInt(s2.substr(6, 1))) return false;
	        else return true;
	}

	 



	/*****
   * kwCho 2008 9.29
   * 전화번호 자동 분리
   * Event Handler  onkeyup 이벤트에 적용
   * 
   * 
  
   */
  var phoneBind = function(ev, delim) {
	
	  var keynum =  ev.which || ev.keyCode; 

	  if((keynum > 47 && keynum < 58) || (keynum < 106 && keynum > 95)) { //숫자범위 또는 키패드에서의 숫자 
		  /*
		    key == 8  // 백스페이스 키
		    key == 37 // 왼쪽 화살표 키
		     key == 39 // 오른쪽 화살표 키
		     key == 46 // DEL 키
		     key == 13 // 엔터 키
		     key == 9  // Tab 키
		*/
		   
	  } else {
	 	return;	
	  }
	  
	  var element = this;
	  var p = element.value;
	  delim = delim || "-";
	  var num = p.replace( /\D/g, '' );

	  num.sub(/(02|0[3-9]{1}[0-9]{1})([0-9]+)/, function (match){
		  var p1 = match[1];
		  var p2 = match[2];
		  var p3 = "";
		  if (match[2].length > 3) {
				if (match[2].length < 8) {
					p2 = match[2].substring(0, 3);
					p3 = match[2].substring(3);
				} else {
					p2 = match[2].substring(0, 4);
					p3 = match[2].substring(4);
				}
		  }
		 var gnrP  = p1 + delim + p2;
		 gnrP +=  p3 ?  delim + p3 : "";
		  
		  element.value = gnrP;
	  });
  }
  
  /*****
   * kwCho 2008 9.29
   * 휴대폰 자동 분리
   * Event Handler  onkeyup 이벤트에 적용
   */
  var hPhoneBind = function(ev, delim) {
		
	  var keynum =  ev.which || ev.keyCode; 

	  if((keynum > 47 && keynum < 58) || (keynum < 106 && keynum > 95)) { //숫자범위 또는 키패드에서의 숫자 
		
	  } else {
	 	return;	
	  }
	  
	  var element = this;
	  var p = element.value;
	  delim = delim || "-";
	  var num = p.replace( /\D/g, '' );

	  num.sub(/(01[016789])([0-9]+)/, function (match){
		  var p1 = match[1];
		  var p2 = match[2];
		  var p3 = "";
		  if (match[2].length > 3) {
				if (match[2].length < 8) {
					p2 = match[2].substring(0, 3);
					p3 = match[2].substring(3);
				} else {
					p2 = match[2].substring(0, 4);
					p3 = match[2].substring(4);
				}
		  }
		 var gnrP  = p1 + delim + p2;
		 gnrP +=  p3 ?  delim + p3 : "";
		  
		  element.value = gnrP;
	  });
  }
  
  
  /*****
   * kwCho 2008 9.29
   * 사업자번호 자동 분리
   * Event Handler  onkeyup 이벤트에 적용
   */
  var coNoBind = function(ev, delim) {
		
	  var keynum =  ev.which || ev.keyCode; 

	  if((keynum > 47 && keynum < 58) || (keynum < 106 && keynum > 95)) { //숫자범위 또는 키패드에서의 숫자 
		
	  } else {
	 	return;	
	  }
	  
	  var element = this;
	  var p = element.value;
	  delim = delim || "-";
	  var num = p.replace( /\D/g, '' );

	  num.sub(/([0-9]{3})([0-9]+)/, function (match){
		  var p1 = match[1];
		  var p2 = match[2];
		  var p3 = "";
		  if (match[2].length > 2) {
			p2 = match[2].substring(0, 2);
			p3 = match[2].substring(2);
		  }
		 var gnrP  = p1 + delim + p2;
		 gnrP +=  p3 ?  delim + p3 : "";
		  
		  element.value = gnrP;
	  });
  }
  
  
  /*****
   * kwCho 2008 9.29
   * 주민번호자동분리
   * Event Handler  onkeyup 이벤트에 적용
   */
  var perNoBind = function(ev, delim) {
		
	  var keynum =  ev.which || ev.keyCode; 

	  if((keynum > 47 && keynum < 58) || (keynum < 106 && keynum > 95)) { //숫자범위 또는 키패드에서의 숫자 
		
	  } else {
	 	return;	
	  }
	  
	  var element = this;
	  var p = element.value;
	  delim = delim || "-";
	  var num = p.replace( /\D/g, '' );

	  num.sub(/([0-9]{6})([0-9]+)/, function (match){
		  var p1 = match[1];
		  var p2 = match[2];
		  var gnrP  = p1 + delim + p2;
		  
		  element.value = gnrP;
	  });
  }
  
  /*****
   * kwCho 2008 9.29
   * 날짜 자동 분리 - 숫자 8개로 구성해야함
   * Event Handler  onkeyup 이벤트에 적용
   */
  var dateBind = function(ev, delim) {
		
	  var keynum =  ev.which || ev.keyCode; 

	  if((keynum > 47 && keynum < 58) || (keynum > 95 && keynum < 106)) { //숫자범위 또는 키패드에서의 숫자 
		
	  } else {
	 	return;	
	  }
	  
	  var element = this;
	  var p = element.value;
	  delim = delim || "-";
	  var num = p.replace( /\D/g, '' );

	  num.sub(/([0-9]{4})([0-9]+)/, function (match){
		  var p1 = match[1];
		  var p2 = match[2];
		  var p3 = "";
		  if (match[2].length >= 2) {
			p2 = match[2].substring(0, 2);
			p3 = match[2].substring(2);
		  }
		  var gnrP  = p1 + delim + p2;
		  gnrP +=  p3 ?  delim + p3 : "";
		  element.value = gnrP;
	  });
  }
  
  /*****
   * kwCho 2008 9.29
   * 숫자만 허용
   * Event Handler  onkeyup 이벤트에 적용
   */
  var onlyNumberBind = function(ev, comma, point) {
	  var keynum =  ev.which || ev.keyCode; 

	  var element = this;
	  // keynum 109:-, 110 : 소수점
	  if (__moveKey.include(keynum) || keynum == 109 || (point && keynum == 110) ) {
		  // nothing to do...
	  } else {
		  element.value = comma ? element.value.numberFormat() : element.value.toNum();
	  }
  }
  
  function addComma(str) { // 
      return (str + '').numberFormat();
  }
  


 var AjaxSpinner = Class.create({
  		
  		initialize : function (submitBtn, spinnerImg) {
  			
  			if (submitBtn) {
  				this.submitBtn = (typeof submitBtn == "string") ? [submitBtn] : submitBtn;
  			} else {
  				this.submitBtn = [];
  			}
  			this.spinnerImg = spinnerImg || "spinner";
  			
  			
  			 //로딩시 스피너이지미 뛰우기
			Ajax.Responders.register({
				onCreate: function() { 
					this.create();
				}.bind(this),
				//요청 끝나면 그림 사라짐
				onComplete: function() { 
						this.complete();
				}.bind(this)
			});
	
  		},
  		create : function() {
  			this.submitBtn.each(function(elStr) {
  				if ($(elStr)) {
  					$(elStr).disabled = true;
  				}
  			});
  			
  			$(this.spinnerImg).show(); 
  		},
  		complete : function() {
  			this.submitBtn.each(function(elStr) {
  				if ($(elStr)) {
  					$(elStr).disabled = false;
  				}
  			});
  			$(this.spinnerImg).hide(); 
  		}
 	});

	/**
	* 영문과 숫자, 길이 체그 - 아이디 체크에 사용
	*/
	
	function checkEngNo(str, len) {
 		if (str.search(/^(\w[\w-]*\w$)/) == -1 || str.length < len){
    		return false;
    	}
    	return true;	
    }
	
	// IE와 FF에서 모두 작동하는 클립보드 복사
	// FF에서는 about:config 에 들어가 Signed.applets.codebase_principal_support 값을 true로 변경해야 함

	function clipCopy(meintext) {
	　 if (window.clipboardData) {
	　 　 window.clipboardData.setData("Text", meintext);
	　 } else if (window.netscape) {
	　 　 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
	　 　 var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
	　 　 if (!clip) return;
	　 　 var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
	　 　 if (!trans) return;
	　 　 trans.addDataFlavor('text/unicode');
	　 　 var str = new Object();
	　 　 var len = new Object();
	　 　 var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
	　 　 var copytext=meintext;
	　 　 str.data=copytext;
	　 　 trans.setTransferData("text/unicode",str,copytext.length*2);
	　 　 var clipid=Components.interfaces.nsIClipboard;
	　 　 if (!clip) return false;
	　 　 clip.setData(trans,null,clipid.kGlobalClipboard);
	　 }


	}

	// IE와 FF에서 모두 작동하는 클립보드 붙여넣기
	// FF에서는 about:config 에 들어가 Signed.applets.codebase_principal_support 값을 true로 변경해야 함

	 function clipPaste() {
	　 var chec=document.board_write;
	　 var clip_data;
	　 if (window.clipboardData) {
	　 　 clip_data = window.clipboardData.getData("Text"); // 클립보드 복사
	　 } else if (window.netscape) {
	　 　 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
	　 　 var clip = Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(Components.interfaces.nsIClipboard);
	　 　 if (!clip) return;
	　 　 var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
	　 　 if (!trans) return;
	　 　 trans.addDataFlavor("text/unicode");
	　 　 clip.getData(trans, clip.kGlobalClipboard);
	　 　 var str = new Object();
	　 　 var strLength = new Object();
	　 　 trans.getTransferData("text/unicode", str, strLength);
	　 　 if(str) str = str.value.QueryInterface(Components.interfaces.nsISupportsString);
	　 　 else return;
	　 　 if(str) clip_data = str.data.substring(0, strLength.value / 2);
	　 }
	　 return clip_data;
	}
	
	/**
	* 체크박스 체크 되었나?
	*/
	function checkboxChecked (cName) {

	 	var checked = false;
	 	$$("input[name='" + cName + "']").each(function(el, index) {
	 		if (el.checked) {
	 			checked	= true;
	 			return;
	 		}
	 	});
	 	return checked;
	};  
    	

// flashWrite(파일경로, 가로, 세로, 아이디, 배경색, 변수, 윈도우모드)
	function flashWrite(url,w,h,id,bg,vars,win){

		// 플래시 코드 정의
		var flashStr=
		"<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='https://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0' width='"+w+"' height='"+h+"' id='"+id+"' align='middle'>"+
		"<param name='allowScriptAccess' value='always' />"+
		"<param name='movie' value='"+url+"' />"+
		"<param name='FlashVars' value='"+vars+"' />"+
		"<param name='wmode' value='"+win+"' />"+
		"<param name='menu' value='false' />"+
		"<param name='quality' value='high' />"+
		"<param name='scale' value='exactfit' />"+
		"<param name='bgcolor' value='"+bg+"' />"+
		"<embed src='"+url+"' FlashVars='"+vars+"' wmode='"+win+"' menu='false' quality='high' bgcolor='"+bg+"' width='"+w+"' height='"+h+"' name='"+id+"' align='middle' allowScriptAccess='always' type='application/x-shockwave-flash' pluginspage='https://www.macromedia.com/go/getflashplayer' />"+
		"</object>";

		// 플래시 코드 출력
		document.write(flashStr);

	}
