/**
 * ¹®ÀÚ¿­¿¡ ´ëÇÑ Ã³¸®¸¦ ´ã´çÇÏ´Â ÀÚ¹Ù½ºÅ©¸³Æ® °´Ã¼ <BR>
 *
 * @version	1.0, 2003-12-16
 * @author	namjinpark
 *@constructor
 */
function StringUtil() {
	this.getStrByteSize 	= getStrByteSize_StringUtil;
	this.isNum 				= isNum_StringUtil;
	this.brToReturn 		= brToReturn_StringUtil;
	this.returnToBr 		= returnToBr_StringUtil;
	this.trim 				= trim_StringUtil;
	this.cutString 			= cutString_StringUtil;
	this.isNonSpecial		= isNonSpecial_StringUtil;
	this.replace			= replace_StringUtil;
}

/**
 * str Áß Æ¯Á¤ ¹®ÀÚ¿­À» ´ëÃ¼ ¹®ÀÚ¿­·Î ¹Ù²Ù¾î¼­ ¹ÝÈ¯ÇÑ´Ù. <br>
 *
 * @param	str 		¹®ÀÚ¿­
 * @param	original	¹Ù²Ü¹®ÀÚ¿­
 * @param	original	¹Ù²ð¹®ÀÚ¿­
 * @return	´ëÃ¼µÈ ¹®ÀÚ¿­
 */
function replace_StringUtil(str, original, replacement) {
	var result;
	result = "";
	while(str.indexOf(original) != -1) {
		if (str.indexOf(original) > 0)
		result = result + str.substring(0, str.indexOf(original)) + replacement;
	else
		result = result + replacement;
		str = str.substring(str.indexOf(original) + original.length, str.length);
	}
	return result + str;
}

/**
 * ÀÔ·ÂµÈ ¹®ÀÚ¿­ÀÌ ¸î Byte ÀÎÁö¸¦ ±¸ÇÏ´Â Function.<br>
 * html ¹®¼­¿¡¼­ ¹®ÀÚ ±æÀÌ¸¦ °Ë»çÇÏ´Â ºÎºÐ¿¡ ÁÖÀÇÇØ¾ß ÇÒ Á¡ÀÌ ÀÖ½À´Ï´Ù.<br>
 * µ¥ÀÌÅ¸ º£ÀÌ½º¿¡ ¹®ÀÚ¿­ ±æÀÌ¸¦ ÃÖ´ë 10À¸·Î ÇÏ°í
 * À¥¿¡¼­ ±æÀÌ°¡ 10ÀÌ ³ÑÀ» °æ¿ì ¿¡·¯ ¸Þ½ÃÁö¸¦ º¸¿©ÁÖµµ·Ï
 * (ÀúÀåÇÏ±âÀü¿¡ ´Ù½Ã °Ë»ç¸¦ ÇÏ°ÚÁö¸¸) ÇØÁÖ´Â °æ¿ì Á¦´ë·Î Ã¼Å©¸¦ ¸øÇÏ´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù.<br>
 * ÇÑ±ÛÀÇ °æ¿ì javascript¿¡¼­(Java ¿¡¼­µµ ¸¶Âù°¡Áö)
 * ±æÀÌ¸¦ 1·Î »ý°¢À» ÇÏ±â ¶§¹®¿¡ °Ë»ç°¡ Á¦´ë·Î µÇÁö ¾Ê½À´Ï´Ù.<br>
 * ±× ÀÌÀ¯´Â ÇÑ±ÛÀÇ °æ¿ì 2 ByteÀÎ 16-bit Unicode·Î ÀÌ·ç¾î Á³±â ¶§¹®ÀÌ´Ù.
 *
 * @param	Byte ¼ö¸¦ ±¸ÇÏ°íÀÚ ÇÏ´Â ¹®ÀÚ¿­
 * @return	ÀÔ·ÂµÈ ¹®ÀÚ¿­ÀÇ Byte ¼ö
 */
function getStrByteSize_StringUtil(pm_sStr) {
	var slength = 0;
	var tlength = 0;

	if(name != null)
		tlength = pm_sStr.length;

	slength = tlength;

	var i = 0;

	for(i; i < tlength; i++) {
		if(pm_sStr.charCodeAt(i) > 256) {
			slength ++;
		}
	}
	return slength;
}

/**
 * ÀÔ·Â°ªÀÌ ¼ýÀÚÀÎÁö¸¦ È®ÀÎÇÑ´Ù. <BR>
 *@param	name	È®ÀÎÇÏ·Á´Â ¹®ÀÚ¿­
 *@return  ÀÔ·Â°ªÀÌ ÀüºÎ ¼ýÀÚÀÏ °æ¿ì true return, ¼ýÀÚ°¡ ¾Æ´Ñ °ªÀÌ Æ÷ÇÔµÇ¾úÀ» °æ¿ì false return
 */
function isNum_StringUtil(name) {
    var ch = "\0";
	var flag = true;

    for (var i = 0, ch = name.charAt(i);
        (i < name.length) && (flag); ch = name.charAt(++i)) {
        if ((ch >= '0') && (ch <= '9'))
        	;
        else if( (i == 0)&&(ch == '-'))
        	;
        else
            flag = false;
    }
    return flag;
}

/**
 * ÀÔ·ÂµÈ ¹®ÀÚ¿­¿¡ ÀÖ´Â <BR> ¹®ÀÚ¸¦ '\n' ¹®ÀÚ·Î ±³Ã¼ÇÏ¿© ¹ÝÈ¯ÇÑ´Ù.
 *
 * @param	pm_sStr	º¯È¯ ÇÏ°íÀÚ ÇÏ´Â ¹®ÀÚ¿­
 * @return	<BR> ¹®ÀÌ '\n'À¸·Î ±³Ã¼µÈ ¹®ÀÚ¿­
 */
function brToReturn_StringUtil(pm_sStr) {
	var lm_sRegExp = /<BR>/gi;
	var lm_sRetStr = pm_sStr.replace(lm_sRegExp,'\n');
	return lm_sRetStr;
}

/**
 * ÀÔ·ÂµÈ ¹®ÀÚ¿­¿¡ ÀÖ´Â '\n' ¹®ÀÚ¸¦ <BR> ¹®ÀÚ·Î ±³Ã¼ÇÏ¿© ¹ÝÈ¯ÇÑ´Ù.
 *
 * @param	pm_sStr	º¯È¯ ÇÏ°íÀÚ ÇÏ´Â ¹®ÀÚ¿­
 * @return	<BR> ¹®ÀÌ '\n'À¸·Î ±³Ã¼µÈ ¹®ÀÚ¿­
 */
function returnToBr_StringUtil(pm_sStr) {
	var lm_sRegExp = /\n/gi;
	var lm_sRetStr = pm_sStr.replace(lm_sRegExp,'<BR>');
	return lm_sRetStr;
}

/**
 * ¹®ÀÚ¿­ÀÇ ¾ÕµÚ¿¡ ÀÖ´Â °ø¹éÀ» Á¦°ÅÇÏ´Â Function.<br>
 * JavaÀÇ String °´Ã¼¿¡ ÀÖ´Â trim() ¸Þ½îµå
 *
 * @param	pm_sStr	¾ÕµÚÀÇ °ø¹éÀ» Á¦°ÅÇÏ°íÀÚ ÇÏ´Â ¹®ÀÚ¿­
 * @return	¾ÕµÚÀÇ °ø¹éÀÌ Á¦°ÅµÈ ¹®ÀÚ¿­
 */
function trim_StringUtil(pm_sStr){
   return pm_sStr.replace(/^\s+|\s+$/g, '');
}

/**
 * ÀÏÁ¤ Byte ÀÌ»óÀÇ ¹®ÀÚ¿­ ÀÌÈÄ¸¦ Àß¶ó³»°í append¸¦ Ãß°¡ÇÑ´Ù.
 *
 * @param   String  ¼öÁ¤À» ¿øÇÏ´Â ¹®ÀÚ¿­
 * @param   int     Byte ±æÀÌ<br>
 *					»ý·«½Ã default °ªÀº 20
 * @param   String  µÞ ºÎºÐÀÇ ¹®ÀÚ¿­À» Àß¶ó³»°í Ãß°¡ÇÏ°íÀÚ ÇÏ´Â ¹®ÀÚ¿­<br>
 *					»ý·«½Ã default °ªÀº "..."<br>
 *                  ¿¹) Á¦¸ñÀÌ ³Ê¹« ±æ¶§ µÞ ºÎºÐÀÌ Áö±Ý Ã³·³ Àß¸®°Ô...
 * @return	String  ÀÔ·ÂµÈ Byte ÀÌ»óÀÏ °æ¿ì µÞ ºÎºÐÀÌ append·Î ´ëÄ¡µÈ ¹®ÀÚ¿­
 */
function cutString_StringUtil(pm_sStr, pm_iSize, pm_sAppend) {
	var lm_sRetStr = "";
	var lm_iStrSize = 0;
	var lm_iSize = 20;
	var lm_sAppend = "...";

	if(pm_iSize != null) {
		lm_iSize = pm_iSize;
	}

	if(pm_sAppend != null) {
		lm_sAppend = pm_sAppend;
	}

    // Byte ±æÀÌ¸¦ ¸ÕÀú °Ë»çÇÏ¿© ÀÔ·ÂµÈ ±æÀÌº¸´Ù ±ä °æ¿ì¸¸ Ã³¸®
    if(this.getStrByteSize(pm_sStr) > lm_iSize) {
    	var i = 0;
		for(i = 0; i < pm_sStr.length; i++) {
			if(pm_sStr.charCodeAt(i) > 256) {
				lm_iStrSize += 2;
			} else {
				lm_iStrSize++;
			}

            if(lm_iStrSize > lm_iSize) {
                break;
            } else {
                lm_sRetStr += pm_sStr.charAt(i);
            }
        }
        // append¸¦ µÞ ºÎºÐ¿¡ Ãß°¡
        lm_sRetStr += lm_sAppend;

        return lm_sRetStr;
    }

	return pm_sStr;
}

/**
 * ¹®ÀÚ¿­ Áß¿¡ Æ¯¼ö¹®ÀÚ°¡ Æ÷ÇÔµÇ¾ú´ÂÁö¸¦ ÆÄ¾ÇÇÑ´Ù.
 *@param	name 	¹®ÀÚ¿­
 *@return	ÀÔ·Â°ª¿¡ Æ¯¼ö ¹®ÀÚ°¡ ÇÏ³ªµµ Æ÷ÇÔµÇÁö ¾Ê¾ÒÀ» °æ¿ì true return
 */
function isNonSpecial_StringUtil(name) {

    var ch = "\0";

    for (var i = 0, ch = name.charAt(i);
        i <name.length; ch = name.charAt(++i)) {
        if ( ch == ' ' || ch == '~' || ch == '`' || ch == '\\'||
             ch == '-' || ch == '_' || ch == '|' || ch == '+' ||
             ch == '=' || ch == ',' ||
             ch == '<' || ch == '>' || ch == '?' || ch == '!' ||
             ch == '@' || ch == '#' || ch == '$' || ch == '%' ||
             ch == '^' || ch == '&' || ch == '*' || ch == '(' ||
             ch == ')' || ch == '\"' || ch == '[' || ch == ']' ||
             ch == ';' || ch == '\'' || ch == '{' ||
             ch == '}' ) {
            return false;
        }
    }
    return true;
}

/**
 * base64 ÀÎÄÚµù
 *@param	¹®ÀÚ¿­
 *@return	ÀÎÄÚµùµÈ ¹®ÀÚ¿­
 */
function enco(ar1){

  var InStr = ar1;
  var ttb = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  var len_1 = InStr.length;
  var len_res = InStr.length % 3;
  var len_div = len_1 - len_res;
  var ra = new makeArray(4);
  var i=0;
  var Stat = "";

  var str="";
  while(1)
  {
    if( i >= len_1 )
         break;


    if( i >= len_div )
         Stat = "End";

    A = eval(InStr.charCodeAt(i++));
    B = eval(InStr.charCodeAt(i++));
    C = eval(InStr.charCodeAt(i++));

    if( i > len_div )
    {
        Stat = "End";

        if( len_res >= 1)
          C = 0;
        if( len_res == 1 )
          B = 0;
    }
    ra[1] = A >> 2;
    ra[2] = ( (A & 3) << 4 ) + (B >> 4);
    ra[3] = ( ( B & 15 ) << 2 ) + ( C >> 6);
    ra[4] = C & 63;

    if( Stat == "End" && len_res >= 1 )
          ra[4] = 64;
    if( Stat == "End" && len_res == 1 )
          ra[3] = 64;

    for(k=1;k<=4;k++)
       str = str + ttb.substr(ra[k],1);
 }
  return str;
}

/**
 * base64 ÀÎÄÚµù
 *@param	¹®ÀÚ¿­
 *@return	ÀÎÄÚµùµÈ ¹®ÀÚ¿­
 */
function deco(ar1){

  var InStr = ar1;
  var len_1 = InStr.length;
  var ttb = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  var len_res = InStr.length % 4;
  var len_div = len_1 - len_res;
  var re = new makeArray(3);
  var In  = new makeArray(4);
  var DecNum = new makeArray(4);
  var i=0;
  var Stat = "";
  var tmp16, tmp16s;
  var EnB=4;
  var str="";

  while(1)
  {
    if( i >= len_1 )
         break;

    for(k=1;k<=4;k++)
    {
      In[k] = InStr.charAt(i++);
      DecNum[k] = ttb.indexOf(In[k]);
    }

    if( i >= len_div )
    {
        Stat = "End";
        if( len_res == 3 || DecNum[4] == 64 )
          EnB = 3;
        if( len_res == 2 || DecNum[3] == 64 )
          EnB = 2;
    }

    re[1] = ( DecNum[1] << 2 ) + ( DecNum[2] >> 4);
    re[2] = ( ( DecNum[2] & 15 ) << 4 ) + ( DecNum[3] >> 2);
    re[3] = ( ( DecNum[3] & 3 ) << 6 ) | DecNum[4] ;

    for(k=1;k<=3;k++)
    {
       if( k < EnB )
       {
          tmp16 = re[k].toString(16);
          tmp16s = "%" + tmp16;
          str = str + tmp16s  ;
       }
    }
   }
  str = unescape(str);
  return str;
}


function makeArray(n){
    this.length=n
    for(var i=1; i<=n; i++){
            this[i]=null;
    }
    return this
}

