/**
 * 문자열 유틸리티 스크립트
 *
 * @author 도장민(stampmin@hotmail.com)
 *
 * @version 1.000, 2006/10/16
 */

// flag = 0 : 영문자, 숫자, '_', '-', '.' 만 허용(아이디 등 체크)
// flag = 1 : 숫자, '-' 만 허용(주민번호 등 체크)
// flag = 2 : 숫자, ',' 만 허용(통화단위 체크)
// flag = 3 : 영문자, _ 만 허용
// flag = 4 : 영문자만 허용
// flag = 5 : 숫자, '.' 만 허용
function checkValidValue(elemId, fieldName, flag)
{
	if ( elemId == null || elemId.value == "" ) return;
	if ( eval(flag) == 0 )
	{
		for(i=0; i < elemId.value.length; i++)
		{
			if(!((elemId.value.charAt(i) >= "0" && elemId.value.charAt(i) <= "9") || (elemId.value.charAt(i) >= "A" && elemId.value.charAt(i) <= "Z")
			|| (elemId.value.charAt(i) >= "a" && elemId.value.charAt(i) <= "z") || (elemId.value.charAt(i) == "_") || (elemId.value.charAt(i) == "-") || (elemId.value.charAt(i) == ".")))
			{
				alert(fieldName +" 입력은 숫자, 영문자, '_', '-', '.' 만 허용됩니다!");
				elemId.focus();
				return;
			}
		}
	}
	else if ( eval(flag) == 1 )
	{
		for(i=0; i < elemId.value.length; i++)
		{
			if( !( (elemId.value.charAt(i) >= "0" && elemId.value.charAt(i) <= "9") || (elemId.value.charAt(i) == "-") ) )
			{
				alert(fieldName +" 입력은 숫자와 '-' 만 허용됩니다!");
				elemId.focus();
				return;
			}
		}
	}
	else if ( eval(flag) == 2 )
	{
		for( i = 0; i < elemId.value.length; i++ )
		{
			if( !(( elemId.value.charAt(i) >= "0" && elemId.value.charAt(i) <= "9" ) || (elemId.value.charAt(i) == ",")) )
			{
				alert(fieldName + " 입력은 숫자와 ',' 만 가능합니다!");
				elemId.focus();
				return;
			}
		}
	}
	else if ( eval(flag) == 3 )
	{
		for( i = 0; i < elemId.value.length; i++ )
		{
			if( !((elemId.value.charAt(i) >= "A" && elemId.value.charAt(i) <= "Z") || (elemId.value.charAt(i) >= "a" && elemId.value.charAt(i) <= "z") || (elemId.value.charAt(i) == "_")))
			{
				alert(fieldName + " 입력은 영문자와 '_' 만 가능합니다!");
				elemId.focus();
				return;
			}
		}
	}
	else if ( eval(flag) == 4 )
	{
		for( i = 0; i < elemId.value.length; i++ )
		{
			if( !((elemId.value.charAt(i) >= "A" && elemId.value.charAt(i) <= "Z") || (elemId.value.charAt(i) >= "a" && elemId.value.charAt(i) <= "z")))
			{
				alert(fieldName + " 입력은 영문자만 가능합니다!");
				elemId.focus();
				return;
			}
		}
	}
	else if ( eval(flag) == 5 )
	{
		for( i = 0; i < elemId.value.length; i++ )
		{
			if( !(( elemId.value.charAt(i) >= "0" && elemId.value.charAt(i) <= "9" ) || (elemId.value.charAt(i) == ".")) )
			{
				alert(fieldName + " 입력은 숫자와 '.' 만 가능합니다!");
				elemId.focus();
				return;
			}
		}
	}
	return true;
}

// point : 가능한 소수점 자릿수
function checkValidFloat(elemId, point, fieldName)
{
	if ( elemId == null || elemId.value == "" ) return;
	var str = elemId.value;
	var t=0;

	point = eval(point);

	for (var i=0 ; i < str.length;i++)
	{
		if (str.charAt(i) == ".")
		{
			t = str.length - (i+1);

			if (t > eval(point))
			{
				alert(fieldName+" 입력은 소수점 " + point + "자리 까지만 가능합니다!");
				elemId.focus();
				return;
			}
		}
		else if (str.charAt(i) < "0" || str.charAt(i) > "9")
		{
			alert(fieldName + " 입력은 숫자와 '.'만 가능합니다!");
			elemId.focus();
			return;
		}
	}

	return true;
}

// 아이디 체크 :  onblur="checkIdValue(this)"
function checkIdValue(elemId)
{
	if ( elemId == null || elemId.value == "" ) return;
	if ( elemId.value.length < 4 || elemId.value.length > 15 )
	{
		alert("글자수는 4~15자까지 가능합니다.");
		elemId.focus();
		return;
	}
	checkValidValue(elemId, "아이디", 0);
}

// 메일 검사(필터링) : onblur="checkEmailValue(this)"
function checkEmailValue(elemId)
{
	if ( elemId == null || elemId.value == "" ) return;
	var filter=/^(\w+(?:\.\w+)*)@((?:\w+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
	if ( !filter.test(elemId.value) )
	{
		alert("E-mail 주소 형식이 올바르지 않습니다.\n\n예) userid@domain.com");
		elemId.focus();
		return;
	}
}

// 전화번호 검사(필터링) : onblur="checkPhoneValue(this)"
function checkPhoneValue(elemId)
{
	if ( elemId == null || elemId.value == "" ) return;
	// 국번은 2~4자리로 시작되면, -숫자3~4자리 2번반복
	var filter=/^\d{2,4}(-\d{3,4}){2}$/;
	if ( !filter.test(elemId.value) )
	{
		alert("전화번호 형식을 아래와 같이 입력해주세요.\n\n예) 010-1234-5678");
		elemId.focus();
		return;
	}
}

// 날짜 입력형식 체크 : onblur="checkDateValue(this, '구분자')", 구분자는 '-', '/', '.' 만 지원
function checkDateValue(elemId, delim)
{
	if ( elemId == null || elemId.value == "" ) return;
	if ( delim == null || delim.value == "" ) delim = "-";	// 기본 구분자

	var filter;
	if ( delim == "-" )
		filter = /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;
	else if ( delim == "/" )
		filter = /^[0-9]{4}\/[0-9]{2}\/[0-9]{2}$/;
	else if ( delim == "." )
		filter = /^[0-9]{4}.[0-9]{2}.[0-9]{2}$/;

	if ( !filter.test(elemId.value) )
	{
		alert("날짜가 잘못되었습니다.\n\n날짜 형식을 아래와 같이 입력해주세요.\n\n예) 2000" + delim + "01" + delim + "01");
		elemId.focus();
		return;
	}

	arrDate = elemId.value.split(delim);
	if ( !(arrDate[0] >= 1900 && arrDate[0] <=9999 && arrDate[1] >= 1 && arrDate[1] <= 12 && arrDate[2] >= 1 && arrDate[2] <= 31) )
	{
		alert("날짜가 잘못되었습니다.\n\n날짜 형식을 아래와 같이 입력해주세요.\n\n예) 2000" + delim + "01" + delim + "01");
		elemId.focus();
		return;
	}
}

// 특정문자 출현수 가져오기
function countChar(str, ch)
{
	var cnt = 0;
	if ( str != null )
	{
		for ( var n=0; n < str.length; n++ )
			if ( str.charAt(n) == ch )	++cnt;
	}
	return cnt;
}

// 제한문자수 초과 체크
// 예) onblur="isOverMaxLength(this, 100)"
function isOverMaxLength(elemId, max)
{
	if (elemId.value.length > max)
	{
		alert(max + "자 이내로 작성하여주세요");
		elemId.focus();
		return true;
	}
	return false;
}

// srcElemId - 계산할 문자열 객체
// displayElemId - 계산된 바이트를 출력할 객체
// limitBytes - 제한 바이트수
// 예) onblur="checkByte(this, form1.LETTER_CNT, 1000)"
function checkByte(srcElemId, displayElemId, limitBytes)
{
	var len = srcElemId.value.length;
	var bytesCount = 0;			// 바이트수
	var limitIndex = 0;				// 잘리는 지점

	for (i = 0; i < len; i++)
	{
		// ISO Latin-1 Code 의 길이가 4 이상이면 2 bytes
		if (escape(srcElemId.value.charAt(i)).length > 4)
		{
			bytesCount += 2;
		}
		else //if (srcElemId.value.charAt(i) != '\r' && srcElemId.value.charAt(i) != '\n')		// SMS 전송시 CrLf 문자는 제외
		{
			bytesCount++;
		}

		if ( limitIndex == 0 && bytesCount > limitBytes )	limitIndex = i;
	}

	displayElemId.value = bytesCount;

	if( bytesCount > limitBytes )
	{
		alert("제한 용량을 초과하였습니다.\n제한용량을 넘을 경우 입력이 되지 않습니다.");
		//srcElemId.value = srcElemId.value.substr(0, limitIndex);
		//displayElemId.value = limitBytes;
		srcElemId.focus();
	}
}
/**
* 지정 자리수에서 모자란 만큼 앞에 '0'채우기
* @param figures 지정 자리수
*/
function insertZeroNum(val, figures)
{
	temp = new String(val);
	zeroNum = figures - temp.length;		// 앞에 채워질 0의 개수
	for (n = 0; n < zeroNum; n++)
		temp = "0" + temp;
	return temp;
}

String.prototype.trim = function() {
	return this.replace(/(^ *)|( *$)/g, "");
}
String.prototype.ltrim = function() {
	return this.replace(/(^ *)/g, "");
}
String.prototype.rtrim = function() {
	return this.replace(/( *$)/g, "");
}

function formatCurrency(num)
{
	var minus = false;
	var result = "";
	if (num < 0) { num *= -1; minus = true}
	//정수, 소수부분 분리
	var dotPos = (num + "").split(".")
	var dotU = dotPos[0]	// 정수
	var dotD = dotPos[1]	// 소수
	var commaFlag = dotU.length%3 // 첫번째 콤마자리

	if(commaFlag > 0)
	{
		result = dotU.substring(0, commaFlag);
		if (dotU.length > 3) result += ","; // 첫번째 콤마
	}

	for (var n=commaFlag; n < dotU.length; n+=3) {
			result += dotU.substring(n, n+3);
			if( n < dotU.length-3) result += ",";
	}

	if(minus) result = "-" + result;
	if(dotD) return result + "." + dotD
	else return result
}

// 이전 페이지 URL에서 'http://domain' 을 뺀 URL
function getReferrerFromRoot()
{
	var prevUrl = document.referrer.substring(7);
	if ( document.referrer )
	{
		return prevUrl.substring(prevUrl.indexOf('/'));
	}
	else
		return "";
}

