/*-------------------------------------------------------------------+
 * 1. 파일명: string.js
 * 2. 설  명: JavaScript의 String 객체가 제공하지 못하는 추가함수를 정의한다.
 * 3. 의존성: 없음
 * 4. 작성일: 2006.10.10.
 -------------------------------------------------------------------*/



/**
 * 문자열의 양 끝 빈 문자열을 제거한다.
 */
function trim(str) {
	if ( str == null || typeof(str) == "undefined" ) return null;

	/* 문자열이 아니면 문자열로 변경한다. */
	if ( typeof(str) != "string" ) str = new String(str);

	return str.replace(/(^\s+)|(\s+$)/g, "");
}


/**
 * 문자열의 Byte 수를 돌려 준다. 영문자는 1byte, 한글은 일단 2byte로 계산한다.
 * UTF-8로 하면 3byte로 해야 하는데....
 */
function countByte(str) {
	if ( str == null || typeof(str) == "undefined" ) return 0;

	if ( typeof(str) != "string" ) str = new String(str);

	var byteCount = 0;
	for ( var i = 0; i < str.length; i++ ) {
		byteCount += ( str.charCodeAt(i) <= 255 ? 1 : 2 );
	}

	return byteCount;
}


/**
 * 주어진 값의 폭이 전체 폭보다 작은 만큼 왼쪽에
 * 패팅문자로 채운 문자열을 돌려 준다.
 *
 * @param value    패딩될 값.
 * @param maxWidth 패딩되었을 때 전체 폭. 글자 수가 아님에 주의한다.
 * @param padChar  패딩할 때 사용될 문자. 없으면 공백문자(" ")가 사용된다.
 */
function padLeft(value, maxWidth, padChar) {
	var padStr = makePadStr(value, maxWidth, padChar);

	return padStr + value;
}


/**
 * 주어진 값의 폭이 전체 폭보다 작은 만큼 오른쪽에
 * 패팅문자로 채운 문자열을 돌려 준다.
 *
 * @param value    패딩될 값.
 * @param maxWidth 패딩되었을 때 전체 폭. 글자 수가 아님에 주의한다.
 * @param padChar  패딩할 때 사용될 문자. 없으면 공백문자(" ")가 사용된다.
 */
function padRight(value, maxWidth, padChar) {
	var padStr = makePadStr(value, maxWidth, padChar);

	return value + padStr;
}


/**
 * 주어진 값의 폭이 전체 폭보다 작은 만큼 패팅문자로
 * 채울 문자열을 만들어 돌려 준다.
 *
 * @param value    패딩될 값.
 * @param maxWidth 패딩되었을 때 전체 폭. 글자 수가 아님에 주의한다.
 * @param padChar  패딩할 때 사용될 문자. 없으면 공백문자(" ")가 사용된다.
 */
function makePadStr(value, maxWidth, padChar) {
	/* 값이 없으면 빈 문자열을 사용한다. */
	if ( value == null || value == undefined ) value = "";

	/* 패팅 문자가 없으면 공백문자 */
	if ( padChar == null || padChar == undefined ) padChar = " ";

	/* 패딩될 수를 구한다. */
	var paddedWidth = maxWidth - countByte(value);

	var padStr = "";
	for (var i = 0; i < paddedWidth; i++ ) {
		padStr += padChar;
	}

	return padStr;
}


/**
 * 문자열에 들어 있는 특정한 문자를 지운다.
 *
 * @param removedChar 지워질 문자열.
 */
function removeChar(str, removedChar) {
	if ( typeof(str) == "undefined" || str == null ) return str;

	if ( typeof(removedChar) == "undefined" || removedChar == null ) return str;

	if ( typeof(str) != "string" ) str = new String(str);

	var regExp = new RegExp(removedChar, "g");

	return str.replace(regExp, "");
}



/**
 * Text형 입력폼 값을 양쪽에 있는 공백문자를 제거한다.
 *
 * @param obj Text형 입력폼 객체
 */
function trimObj(obj) {
	obj.value = trim(obj.value);
}


/**
 * Text형 입력폼의 값에서 슬래쉬('/')를 제거하여
 * 다시 Text형 입력폼의 값으로 세팅한다.
 *
 * @param  obj  Text형 입력폼 객체
 * @param  ch   제거할 문자.
 */
function removeCharObj(obj, ch) {
	obj.value = removeChar(obj.value, ch);
}


