//이메일 형식 Validation
function edu_IsValidEMail(email)
{
	fmt = /^[a-z0-9\-_\.]+[@]{1}[a-z0-9\-]+[\.]{1}[a-z]+/;
	return fmt.test(email) && email.indexOf(".@") == -1 && email.indexOf("@.") == -1
}

// 숫자여부 체크
function edu_IsNumeric(psNum)
{
	fmt = /^\d+\d*$/;
	return fmt.test(psNum);
}

//실수여부 체크(부호 상관 없음)
function edu_IsFloat(psNum){
	if(!parseFloat(psNum)) return false;
	if(/[^0-9\x2E-]/.test(psNum)) return false;
	if(/\x2E.*\x2E/.test(psNum)) return false;
	if(psNum.indexOf("-")>0) return false;
	return true;
}

// 허가된 파일 확장자인지 체크
function edu_IsPermExt(fileObj, existExtArray)
{
	if (fileObj == null) return false;
	var result = false;
	var tmpExt = fileObj.value.slice(fileObj.value.lastIndexOf(".") + 1).toLowerCase(); 

	for (var i = 0; i < existExtArray.length; i++)
	{
		if (tmpExt == existExtArray[i])
		{
			result = true;
			break;
		}
	}

	return result;
}

function edu_IsEmpty(value)
{
	return value == null || value == "";
}

//	전달된 문자열의 Byte 길이를 반환한다. 
//	한글 및 특수문자의 길이도 각각 계산하여 반환한다 
function edu_GetByteLength(str)
{
	var byteLength = 0;
	str = String(str);

	for (var i = 0; i < str.length; i++)
	{
		var oneChar = escape(str.charAt(i));
		if (oneChar.length == 1) byteLength ++;
		else if (oneChar.indexOf("%u") != -1) byteLength += 2;
		else if (oneChar.indexOf("%") != -1) byteLength += oneChar.length / 3;
	}

	return byteLength;
}

//	언어 세팅에 따라 바이트길이를 글자수로 계산한다
function edu_getLimitCharCnt(limitByteLength)
{
	switch (CURRENT_LANG_TYPE)
	{
		case 'kr':
			return limitByteLength / 2;
		case 'en':
			return limitByteLength;
	}
}

/**
 * 날짜 유효성 검사 클래스 생성자
 * @param year 년 (String 또는 Number)
 * @param month	월 (String 또는 Number)
 * @param date 일 (String 또는 Number)
 * @param label 폼에 나타나는 날짜 필드명
 * @param isAlert 검사에 통과하지 못할 경우 alert을 띄울 것인지 여부
 * @return
 */
function DateChecker(year, month, date, label, isAlert){
	this.year = year;
	this.month = month;
	this.date = date;
	this.label = label;
	this.isAlert = isAlert;
}

//날짜 유효성 검사 결과로 반환되는 값들은 아래와 같습니다.
DateChecker.prototype.SUCCESS = 1; //통과
DateChecker.prototype.YEAR_IS_NAN = -1; //년도가 숫자가 아님
DateChecker.prototype.MONTH_IS_NAN = -2; //월이 숫자가 아님
DateChecker.prototype.DATE_IS_NAN = -3; //날짜가 숫자가 아님
DateChecker.prototype.MONTH_IS_LOW = -4; //월이 너무 작음
DateChecker.prototype.MONTH_IS_HIGH = -5; //월이 너무 큼
DateChecker.prototype.DATE_IS_LOW = -6; //날짜가 너무 작음
DateChecker.prototype.DATE_IS_HIGH = -7; //날짜가 너무 큼(예를 들자면, 2월 달에 31일을 입력한 경우)
DateChecker.prototype.UNKNOWN_ERROR = -8; //복잡하게 틀림

/**
 * 날짜 유효성 검사
 * @return
 */
DateChecker.prototype.check = function(){
	try{
		var regExp = /[^0-9]/;
		if(!this.year||this.year.toString().match(regExp)){
			if(this.isAlert) alert(this.label+"의 년도를 올바르게 입력해 주십시오.");
			return this.YEAR_IS_NAN;
		}
		if(!this.month||this.month.toString().match(regExp)){
			if(this.isAlert) alert(this.label+"의 월을 올바르게 입력해 주십시오.");
			return this.MONTH_IS_NAN;
		}
		if(!this.date||this.date.toString().match(regExp)){
			if(this.isAlert) alert(this.label+"의 날짜를 올바르게 입력해 주십시오.");
			return this.DATE_IS_NAN;
		}
		
		while(true){
			try{
				if(this.year.length>0&&this.year.charAt(0)=="0") this.year = this.year.slice(1);
				else break;
			}catch(e){
				break;
			}
		}
		
		while(true){
			try{
				if(this.month.length>0&&this.month.charAt(0)=="0") this.month = this.month.slice(1);
				else break;
			}catch(e){
				break;
			}
		}
		
		while(true){
			try{
				if(this.date.length>0&&this.date.charAt(0)=="0") this.date = this.date.slice(1);
				else break;
			}catch(e){
				break;
			}
		}
		
		if(!this.month||parseInt(this.month)<1){
			if(this.isAlert) alert(this.label+"의 월은 1 이상이어야 합니다.");
			return this.MONTH_IS_LOW;
		}
		if(parseInt(this.month)>12){
			if(this.isAlert) alert(this.label+"의 월은 12 이하이어야 합니다.");
			return this.MONTH_IS_HIGH;
		}
		if(!this.date||parseInt(this.date)<1){
			if(this.isAlert) alert(this.label+"의 날짜는 1 이상이어야 합니다.");
			return this.DATE_IS_LOW;
		}
	
		var dateObj = new Date(parseInt(this.year), parseInt(this.month)-1, parseInt(this.date));
		if(dateObj.getFullYear()>parseInt(this.year)||(dateObj.getMonth()+1)>parseInt(this.month)){
			if(this.isAlert) alert(this.label+"의 해당 월에는 "+this.date+"일이 존재하지 않습니다.");
			return this.DATE_IS_HIGH;
		}
	}catch(e){
		if(this.isAlert) alert(this.label+"의 값이 올바르지 않습니다.");
		return this.UNKNOWN_ERROR;
	}
	
	return 1;
};

/**
 * 날짜 유효성 검사기 클래스를 생성하여, 검사를 한 후, 결과를 리턴합니다.
 * 파라미터와 반환값에 대해서는 바로 위에 있는 DateChecker 클래스를 참조하십시오.
 * @param year
 * @param month
 * @param date
 * @param label
 * @param isAlert
 * @return
 */
function edu_IsValidDate(year, month, date, label, isAlert){
	var dc = new DateChecker(year, month, date, label, isAlert);
	return dc.check();
}

/**
 * HK캘린더에서 입력받은 yyyy.MM.dd 문자열
 * "."을 없애거나 원하는 문자열로 변환한다.
 * 1 = yyyyMMdd
 * 2 = yyyy-MM-dd
 * @param target  - yyyy.MM.dd
 * @param replace - 선택 ( 1, 2, ... )
 * @return String
 */
function edu_ConvertDate( target, replace ){
	retStr = "" + target; 
	
	var replacer = "";
	if( replace == "1" ) replacer = "";
	if( replace == "2" ) replacer = "-";
	
	while (retStr.indexOf(".")>-1) {
		pos= retStr.indexOf(".");
		retStr = "" + (retStr.substring(0, pos) + replacer + retStr.substring((pos + ".".length), retStr.length));
	}
	
	return retStr;
}
