﻿function getBytes(sString) {
	var c = 0;
	for (var i=0; i<sString.length; i++) {
		c += parseInt(getByte(sString.charAt(i)));
	}
	return c;
}
function getByte(sChar) {
	var c = 0;
	var u = escape(sChar);
	if (u.length < 4) { // 반각문자 : 기본적인 영문, 숫자, 특수기호
		c++; // + 1byte
	} else {
		var s = parseInt(sChar.charCodeAt(0));
		if (((s >= 65377)&&(s <= 65500))||((s >= 65512)&&(s <= 65518))) // 반각문자 유니코드 10진수 범위 : 한국어, 일본어, 특수문자
			c++; // + 1byte
		else // 전각문자 : 위 조건을 제외한 모든 문자
			c += 2; // + 2byte
	}
	return c;
}
function cutOverText(obj,maxByte,viewAreaID) {
	var sString = obj.value;
	var c = 0;
	for (var i=0; i<sString.length; i++) {
		c += parseInt(getByte(sString.charAt(i)));
		if (c>maxByte) {
			obj.value = sString.substring(0,i);
			break;
		}
	}
	showNowByte(obj.value,viewAreaID);
}
function showNowByte(sString,viewAreaID) {
	var vArea = document.getElementById(viewAreaID);
	if (vArea) vArea.innerHTML = getBytes(sString);
}
function checkByte(obj,maxByte,viewAreaID) {
	var sString = obj.value;
	showNowByte(sString,viewAreaID);
	if (getBytes(sString) > maxByte) {
		alert("최대 "+maxByte+"Bytes(한글 "+(maxByte/2)+"자/영문 "+maxByte+"자)까지만 입력하실 수 있습니다.");
		cutOverText(obj,maxByte,viewAreaID);
	}
}

function Validator_CheckPw (obj) {
	var f = obj;
	//비번 체크 추가
	var resultStr = "";
	var i_str = obj.value;

	// 8자이상의 영문, 숫자, 특수문자만 사용 제한
	var pattern = /^[A-Za-z0-9_\-\!@#]{4,100}$/;
	var basic = pattern.test(i_str);
	var len_chk = (i_str.length > 7)?true:false;
	if (!basic || !len_chk) {
		resultStr = "비밀번호가 올바르지 않습니다.\n비밀번호는 8자이상의 영문, 숫자, 특수문자만 사용할 수 있습니다.";
		return resultStr;
	}

	var strType=-1;
	var engstr= "abcdefghijklmnopqrstuvwxyz";
	var strind = -2;
	var indcnt= 0;

	var dupstr = "";
	var dupcnt= 0;

	var arr_buf=new Array();
	var alp_cnt=0;
	var num_cnt=0;
	var chr_cnt=0;
	var i;

	for(i=0;i<i_str.length;i++) {
		arr_buf[i]=i_str.substring(i,i+1);

		var curtype = -1;
		// 영문일 경우
		if ( ('A'<=arr_buf[i] && arr_buf[i]<='Z') || ('a'<=arr_buf[i] && arr_buf[i]<='z') ) {
			alp_cnt++;

			// 순차 카운트
			if ('A'<=arr_buf[i] && arr_buf[i]<='Z') {
				curtype = 0;
			}
			else {
				curtype = 1;
			}
			// 대소문자 구분없이 순차라면 
			if (engstr.indexOf(arr_buf[i].toLowerCase())==(strind+1)) {
				// 같은 순서라도 대소문자 구분
				if (strType==curtype) {
					indcnt ++;
					if (indcnt==3) {
						resultStr = "비밀번호가 올바르지 않습니다.\n연속문자를 4회이상 입력할 수 없습니다.";
						return resultStr;
						break;
					}
				}
				else {
					indcnt=0;;
				}
			} 
			else 	{
				indcnt=0;;
			}

			strind = engstr.indexOf(arr_buf[i].toLowerCase());
		}
		// 숫자일 경우
		else if ('0'<=arr_buf[i] && arr_buf[i]<='9') {
			num_cnt++;

			curtype = 2;
			// 숫자 순차 카운트
			if (Number(arr_buf[i])==(Number(dupstr)+1)) {
				// 같은 순서라도  구분
				if (strType==curtype) {
					indcnt ++;
					if (indcnt==3) {
						resultStr = "비밀번호가 올바르지 않습니다.\n연속숫자를 4회이상 입력할 수 없습니다.";
						return resultStr;
						break;
					}
				}
				else {
					indcnt=0;
				}
			} 
			else 	{
				indcnt=0;
			}
		}
		else {
			indcnt=0;
		}
		strType = curtype;

		// 중복문자 카운트
		if (arr_buf[i]==dupstr) {
			dupcnt ++;
			if (dupcnt==3) {
				resultStr = "비밀번호가 올바르지 않습니다.\n동일문자를 4회이상 연속 입력할 수 없습니다.";
				return resultStr;
			break;
			}
		}
		else {
			dupcnt=0;
		}
		dupstr = arr_buf[i];
	}

	if (alp_cnt < 1 || num_cnt < 1){
		resultStr =  "비밀번호가 올바르지 않습니다.\n영문, 숫자 혼용입력이 필수입니다.";
		return resultStr;
	}	
	return resultStr;
}
function NumberCheck(obj)
{
	var checkOK = "0123456789";
	var checkStr = obj.value;
	var allValid = true;
	var decPoints = 0;
	var allNum = "";
	for (i = 0;  i < checkStr.length;  i++){
		ch = checkStr.charAt(i);
		for (j = 0;  j < checkOK.length;  j++)
		if (ch == checkOK.charAt(j))
		break;
		if (j == checkOK.length){
			allValid = false;
			break;
		}
		allNum += ch;
	}

	if (!allValid){
		alert("숫자만 입력할 수 있습니다.");
		//obj.value = obj.value.substring(0, obj.value.length - 1);
		obj.value = "";
		obj.focus();					
	}
}