//<script>
<!-- 
/*
 * /js/net/highbase/lang/String.js
 * 
 * Date: 2005/04/19 03:44:26
 *
 * ====================================================================
 *
 * HIGHBASE.NET., Software License, Version 1.0
 *
 * Copyright (c) 2004-2005 HIGHBASE.NET.,
 * <<È¸»ç ÁÖ¼Ò>>  * All rights reserved.
 *
 * DON'T COPY OR REDISTRIBUTE THIS SOURCE CODE WITHOUT PERMISSION.
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL HIGHBASE.NET OR ITS
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 * ====================================================================
 *
 * For more information on this product, please see 
 * <<È¸»ç À¥ »çÀÌÆ® URL ÁÖ¼Ò>>
 *
 */
 
String.prototype.getByteSize = function(){
	size = 0;
	for (var i = 0; i < this.length; i++){
		tmp = this.charAt(i);
		if (escape(tmp).length > 3){
			size++;
		}
		size++;
	}
	return size;
}

String.prototype.printFormat = function(){
	if (arguments.length == 1){
		format = arguments[0];
		document.write(format.replace("#", this))
	}
	else{
		document.write(this);
	}
}

String.prototype.diff = function(b){
	var count = 0;
	var tmp1 = this.toString();
	var tmp2 = b;
	var pretmp2length;
	while(tmp1 != '' && tmp2 != ''){
		pretmp2length = tmp2.length;
		tmp2 = tmp2.replaceFirst(tmp1.charAt(0), '');
		tmp1 = tmp1.substring(1);
		if (tmp2.length == pretmp2length){
			count++;
		}
	}
	return count + tmp2.length;
}
/* ¹®ÀÚ¿­À» Ã£¾Æ µÎ¹øÂ° ¹®ÀÚ¿­·Î ´ëÄ¡½ÃÅ²´Ù.
 * find: Ã£À» ¹®ÀÚ¿­
 * repl: ¹Ù²ï ¹®ÀÚ¿­
 */
String.prototype.replaceFirst = function(find, repl){
	var findsize = find.length;
	var pos = this.indexOf(find);
	var buf = '';
	if (pos > -1){
		if (pos > 0){
			buf = buf + this.substring(0, pos);
		}
		buf = buf + repl;
		if (pos < this.length){
			buf = buf + this.substring(pos + find.length);
		}
	}
	return buf;
}

/**
 * ¸ðµç find¸¦ repl·Î º¯°æÇÏ¿© ¸®ÅÏ
 * Create: 2004.11.19 highbase
 * @param String find
 * @param String repl
 */
String.prototype.replaceAll = function(find, repl) {
	var tmp = this;
	var findsize = find.length;
	var buff = "";
	var pos;
	pos = tmp.indexOf(find);
	while (pos > -1){
		//document.writeln("tmp=[" + tmp + "],pos=[" + pos + "]<br>" );
		if (pos == 0) {
		}
		else {
			buff += tmp.substring(0, pos);
		}
		buff += repl;
		tmp = tmp.substring(pos + findsize);
		pos = tmp.indexOf(find);
	}
	if (tmp.length > 0) {
		buff += tmp;
	}
	
	return buff;
}

String.prototype.br = function(){
	return this.replaceAll(this.getDelimiter(),'<br>');	
}

String.prototype.trim = function(v){
	return this.lTrim().rTrim();
}

String.prototype.lTrim = function(){
	var i = 0;
	var size = this.length;
	while(i < size && "\r\n	 ".indexOf(this.substring(i, i + 1)) > -1){
		i++;
	}
	
	return this.substring(i);
}

String.prototype.rTrim = function(){
	var i = this.length - 1;
	while(i > 0 && "\r\n	 ".indexOf(this.substring(i, i + 1)) > -1){
		i--;
	}
	
	return this.substring(0, i + 1);
}

String.prototype.findFirstWhiteSpacePos = function(){
	var WHITE_SPACE = " ";
	var TAB = "	";
	var CARRIAGE_RETURN = "\n";
	var LINE_FEED = "\r";
	var posWS = this.indexOf(WHITE_SPACE);
	var posTAB = this.indexOf(TAB);
	var posCR = this.indexOf(CARRIAGE_RETURN);
	var posLF = this.indexOf(LINE_FEED);
	
	posWS = (posWS < 0 ? this.length : posWS);
	posTAB = (posTAB < 0 ? this.length : posTAB);
	posCR = (posCR < 0 ? this.length : posCR);
	posLF = (posLF < 0 ? this.length : posLF);
	
	rval = posWS < posTAB ? posWS : posTAB;
	rval = posCR < rval ? posCR : rval;
	rval = posLF < rval ? posLF : rval;
	//log.printDebug("findFirstWhiteSpacePos=[" + rval + "]");
	return rval;
}

String.prototype.times = function(count){
	var sb = new StringBuffer();
	
	for (var i = 0; i < count; i++){
		sb.append(this);
	}
	
	return sb.toString();
}

String.prototype.startWith = function(s){
	return (this.indexOf(s) == 0);
}

String.prototype.endWith = function(s) {
	var nSize = s.length;
	var tmp = this.substring(this.length - nSize);
	
	return (tmp == s)
}

/**
 * ÁÖ¾îÁø Æû¿¡ ¹®ÀÚ¿­À» Àû¿ëÇÏ¿© ¸®ÅÏÇÑ´Ù.
 * @param form
 */
String.prototype.formString = function(form){
	var tmp = form;
	var isLeftMode = false;
	if (tmp.startWith("-")){
		isLeftMode = true;
		tmp = tmp.substring(1);
	}
	
	var formSize = tmp.length;
	var thisSize = this.length;
	if (thisSize > formSize) 
		return this;
	var buff = null;
	if (isLeftMode) {
		buff = this + tmp;
		buff = buff.substring(0, formSize);
	}
	else {
		buff = tmp + this;
		buff = buff.substring(buff.length - formSize);
	}
	
	return buff;
}

/*
 * ±¸ºÐÀÚ ÀÌÈÄÀÇ ¹®ÀÚ¿­À» ¸®ÅÏÇÑ´Ù.
 */
String.prototype.getFindNext = function(delimiter){
	var nPos = this.indexOf(delimiter);
	if (nPos > 0){
		return this.substring(nPos + delimiter.length);
	}
	else{
		return this;
	}
}

String.prototype.getLastFindNext = function(delimiter){
	var nPos = this.lastIndexOf(delimiter);
	if (nPos > 0){
		return this.substring(nPos + delimiter.length);
	}
	else{
		return this;
	}
}

//	2005.03.31	highbase
String.prototype.right = function(nSize) {
	return this.substring(this.length - nSize);
}

/*
 * 2005.04.15	highbase
 */
var N_ID_TYPE_ONLY_ENG	= 1;
var N_ID_TYPE_ENG_NUM_COMBI	= 2;

String.prototype.hasNumber = function() {
	return this.hasChar("0123456789");
}
String.prototype.hasAlphabet = function() {
	return this.toLowerCase().hasChar("abcdefghijklmnopqrstuvwxyz");
}
String.prototype.hasChar = function(sString) {
	for (var i = 0; i < this.length; i++) {
//		document.write("" + sString.indexOf(this.charAt(i)) + "<br>")
		if (sString.indexOf(this.charAt(i)) > -1) {
			return true;
		}
	}
	return false;
}
String.prototype.checkID = function(nMinSize, nMaxSize, nType) {
	if (this.length < nMinSize) {
		//alert("ÃÖ¼Ò ±æÀÌ´Â " + nMinSize + "ÀÌ»ó ÀÔ´Ï´Ù.");
		return false;
	}
	if (this.length > nMaxSize) {
		//alert("ÃÖ´ë ±æÀÌ´Â " + nMaxSize + "ÀÌÇÏ ÀÔ´Ï´Ù.");
		return false;
	}
	switch (nType) {
	case N_ID_TYPE_ENG_NUM_COMBI:
		for (var i = 0; i < this.length; i++) {
			if ("abcdefghijklmnopqrstuvwxyz0123456789".indexOf(this.toLowerCase().charAt(i)) == -1) {
				return false;
			}
		}
		break;
	case N_ID_TYPE_ONLY_ENG:
		break;
	}
	
	return true;
}
/*
 * 2005.04.19 highbase
 * °ø¹é¹®ÀÚ¸¦ Á¦°ÅÇÑ´Ù. ÅÇ,°ø¹é,°³Çà¹®ÀÚ
 */
String.prototype.deleteWhiteSpace = function() {
//	logger.log("[" + this.indexOf("\r\n") + "][" + this.indexOf("\t") + "][" + this.indexOf("\ ") + "]");
	if (this.indexOf("\r\n") > -1 || this.indexOf("\t") > -1 || this.indexOf(" ") > -1) {
		return this.replace("\r\n", "").replace("\t", "").replace(" ", "").deleteWhiteSpace();
	}
	else {
		return this;
	}
}
/*
 * 2005.04.29 highbase
 * 
 */
String.prototype.comma = function(sNum) {
	var atmp = new Array();
	var buff = new Array();
	
	if (typeof(sNum) == 'undefined') {
		sNum = 3;
	}
	
	//step1.
	for (var i = 0; i < this.length; i++) {
		atmp[i] = this.charAt(i);
	}
	
	//step2.
	atmp.reverse();
	
	//step3.
	for (var key in atmp){
		if (key > 0 && key % sNum == 0) {
			buff[buff.length++] = ',';
		}
		buff[buff.length++] = atmp[key];
	}
	
	//step4.
	buff.reverse();
	
	return buff.join('')
}

String.prototype.omitLine = function() {
	var nHead = 0;
	var nTail = 0;
	var sDelimiter = this.getDelimiter();
	var a = this.split(sDelimiter);
	var buff = new Array();
	
	switch (arguments.length){
		case 2:
			nTail = arguments[1];
		case 1:
			nHead = arguments[0];
			break;
		default:
			;
	}
	
	var nIndex = 0;
	for (var i = 0; i < nHead && i < a.length; i++) {
		buff[nIndex++] = a[i];
	}
	if (nIndex < a.length - nTail) {
		buff[nIndex++] = "...";
	}
	for (var i = (a.length - (nTail > a.length?a.length - nIndex:nTail)); i < a.length; i++) {
		buff[nIndex++] = a[i];
	}
	
	return buff.join(sDelimiter);
}

String.prototype.search = function(bCondition, sSearchString, fnImpact) {
//	this.log(368, "fnImpact=[" + fnImpact + "]");
//	this.log(368, "eval(fnImpact('" + sSearchString + "');)=[]");
	if (bCondition)
		return this.split(sSearchString).join(eval(fnImpact + "('" + sSearchString + "');"));
	else
		return this;
}

String.prototype.getDelimiter = function() {
	if (this.indexOf('\\r\\n') > 0) return '\\r\\n';
	if (this.indexOf('\r\n') > 0) return '\r\n';
	if (this.indexOf('\n') > 0) return '\n';
	if (this.indexOf('\t') > 0) return '\t';
	if (this.indexOf(' ') > 0) return ' ';
}

String.prototype.log = function(no, msg) {
	if (typeof(logger) == "object")
		logger.log("String#" + no + " " + msg);
}
//==============================================================================
//alert("String Loaded!!!");
//document.write("1\n2\n3\n4\n5\n6\n7\n8".omitLine(2,2).split('\n').join('<br />'));
//document.write("1\n1\n1\n1\n1\n1\n1\n1\n".omitLine(3));
// -->
//</script>

