/** ¹®ÀÚ¿­ÀÇ ¹ÙÀÌÆ®¼ö ¹®ÀÚ¿­.bytes() ·Î ¹ÝÈ¯ ¹Þ´Â´Ù **/
String.prototype.bytes = function() {
	var str = this;
    var l = 0;
    for (var i=0; i<str.length; i++) l += (str.charCodeAt(i) > 128) ? 2 : 1;
    return l;
}

/** ¹®ÀÚ¿­¸¦ ¸®ÅÏÇÑ´Ù.(°ø¹éÆ÷ÇÔ) **/
function g_strTrim(s) 
{
    return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
}

/** ¹®ÀÚ·Ä ÀÚ¸£±â **/
function g_strCut(str, len, tail) 
{
	var l = 0;
	for (var i=0; i<str.length; i++) 
	{
		l += (str.charCodeAt(i) > 128) ? 2 : 1;
		if (l > len) return str.substring(0,i) + tail;
	}
	return str;
}

/**bool String::bytes **/
function g_strBytes(s) 
{
	var str = s;
	var l = 0;
	for (var i=0; i<str.length; i++)	l += (str.charCodeAt(i) > 128) ? 2 : 1;
	return l;
}

/** µû¿ÈÇ¥¿Í ¿ª½½·¡½¬ Ã³¸® **/
function g_strBackslash(paramStr) 
{
	var str = paramStr;
	if(str.indexOf("\\") >= 0) str = str.replace(/\\/g, "\\\\");
	if(str.indexOf("\"") >= 0) str = str.replace(/\"/g, "\\\"");
	return str;
}

/** Æ¯¼ö¹®ÀÚ°¡ Æ÷ÇÔµÇ¾î ÀÖ´ÂÁö °Ë»ç **/
function g_strChkSpecialChar(string) 
{
	valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	for (var i=0; i< string.length; i++) 
		if (valid.indexOf(string.charAt(i)) == -1) return false;
	return true;
}

/** tag unescape **/
function g_tagUnescape(value)
{
	//<,>,&,',"º¹¿ø
	value = value.replace(/&lt;/g, "<");
	value = value.replace(/&gt;/g, ">");
	value = value.replace(/&amp;/g, "&");
	value = value.replace(/&#039;/g, "'");
	value = value.replace(/&#034;/g, "\"");
	return value;
}


/** ±ÛÀÚ Á¦ÇÑ **/
function g_strCheckLength ( fm, str_name, cnt_limit )
{
	var length = fm.elements[str_name].value.length ;
	if ( length > cnt_limit )
	{
		alert ( "±ÛÀÚ Á¦ÇÑÀ» ÃÊ°úÇß½À´Ï´Ù" ) ;
		fm.elements[str_name].value = fm.elements[str_name].value.substring ( 0, cnt_limit ) ;
		fm.elements[str_name].focus () ;
	}
}

/** ¹®ÀÚ¿­ ±æÀÌ¸¦ byte ·Î ¹ÝÈ¯ÇÑ´Ù. **/
function g_strGetLengthToByte(str)
{
  return(str.length+(escape(str)+"%u").match(/%u/g).length-1);
}

/** limitByte ÀÇ byte ¸¸Å­ str À» ÀÚ¸¥ ÈÄ ¹ÝÈ¯ÇÑ´Ù. **/
function g_strCutRtnString( str , limitByte)
{
    var inc = 0;
    var nbytes = 0;
    var msg = "";
    var msglen = str.length;

    for (i=0; i<msglen; i++) {
        var ch = str.charAt(i);
        if (escape(ch).length > 4) {
            inc = 2;
        } else if (ch == '\n') {

            if (str.charAt(i-1) != '\r') {
                inc = 1;
            }
        } else if (ch == '<' || ch == '>') {
            inc = 4;
        } else {
            inc = 1;
        }
        if ((nbytes + inc) > limitByte ) {
            break;
        }
        nbytes += inc;
        msg += ch;
    }
    return msg;
}


/** ¹®ÀÚ¿­ ºñ±³ ÇÔ¼ö **/
function g_strcmp(strA, strB) {
	return ( strA > strB ? 1 : ( strA == strB ? 0 : -1));
}

function g_streql(strA, strB) {
	return ( strcmp(strA, strB) == 0 );
}
function g_stricmp(strA, strB) {
	if ( typeof(strA) == "string" && typeof(strB) == "string" )
		return strcmp(strA.toUpperCase(),strB.toUpperCase());
	else
		return -1;
}
function g_strieql(strA, strB) {
	return ( g_stricmp(strA, strB) == 0 );
}

/** ¼ýÀÚ °Ë»ç **/
function g_checkNumber( str) {
	for( var i=0; i < str.length; i++) {
		var ch = str.substring( i, i+1 );
		if( (ch < "0" || ch > "9") && ch != "." ) 
		return false;
	}
	return true;
}

/** base64 encode & decode **/
var base64list = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';

function g_base64encode(s)
{
  var t = '', p = -6, a = 0, i = 0, v = 0, c;

  while ( (i < s.length) || (p > -6) ) {
    if ( p < 0 ) {
      if ( i < s.length ) {
        c = s.charCodeAt(i++);
        v += 8;
      } else {
        c = 0;
      }
      a = ((a&255)<<8)|(c&255);
      p += 8;
    }
    if ( v > 0 )
      t += base64list.charAt((a>>p)&63);
    else
      t += base64list.charAt(64);
    p -= 6;
    v -= 6;
  }
  return t;
}

function g_base64decode(s)
{
  var t = '', p = -8, a = 0, q = 0, c, m, n;

  for( var i = 0; i < s.length; i++ ) {
    c = base64list.indexOf(s.charAt(i));
    if ( c < 0 )
      continue;
    a = (a<<6)|(c&63);
    p += 6;
    if ( p >= 0 ) {
      c = (a>>p)&255;
      if ( c > 0 )
        t += String.fromCharCode(c);
      a &= 63;
      p -= 8;
    }
  }
  return t;
}

/** ÀÌ¸ÞÀÏ °Ë»ç **/
function g_checkEmail(emailStr)
{
    if (emailStr.length == 0) {
        return true;
    }
    var emailPat=/^(.+)@(.+)$/;
    var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
    var validChars="\[^\\s" + specialChars + "\]";
    var quotedUser="(\"[^\"]*\")";
    var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
    var atom=validChars + '+';
    var word="(" + atom + "|" + quotedUser + ")";
    var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
    var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
    var matchArray=emailStr.match(emailPat);
    if (matchArray == null) {
        return false;
    }
    var user=matchArray[1];
    var domain=matchArray[2];
    if (user.match(userPat) == null) {
        return false;
    }
    var IPArray = domain.match(ipDomainPat);
    if (IPArray != null) {
        for (var i = 1; i <= 4; i++) {
           if (IPArray[i] > 255) {
              return false;
           }
        }
        return true;
    }
    var domainArray=domain.match(domainPat);
    if (domainArray == null) {
        return false;
    }
    var atomPat=new RegExp(atom,"g");
    var domArr=domain.match(atomPat);
    var len=domArr.length;
    if ((domArr[domArr.length-1].length < 2) ||
        (domArr[domArr.length-1].length > 3)) {
        return false;
    }
    if (len < 2) {
        return false;
    }
    return true;
}

function strCheckString(str, hasStrCode, maxlen){ 
	// has StrCode
	// h : ÇÑ±Û, e : ¿µ¹®, s : ½ºÆäÀÌ½º Á¶ÇÕ
	// 'Á¦¿ÜÇÏ°í ½ÍÀº ÆÐÅÏ'À» ´ëÀÔÇØ »ç¿ëÇÏ¼¼¿ä. [A-Za-z]
    var pattern ;
	if(hasStrCode == "h") pattern = new RegExp('[^°¡-ÆR]', 'i'); 
	else if(hasStrCode == "e") pattern = new RegExp('[^A-Za-z]', 'i'); 
	else if(hasStrCode == "hs") pattern = new RegExp('[^°¡-ÆR\x20]', 'i'); 
	else if(hasStrCode == "es") pattern = new RegExp('[^A-Za-z\x20]', 'i'); 
	else if(hasStrCode == "he") pattern = new RegExp('[^A-Za-z°¡-ÆR]', 'i'); 
	else if(hasStrCode == "hes") pattern = new RegExp('[^A-Za-z°¡-ÆR\x20]', 'i'); 
	
	else if(hasStrCode == "hn") pattern = new RegExp('[^0-9°¡-ÆR]', 'i'); 
	else if(hasStrCode == "en") pattern = new RegExp('[^0-9A-Za-z]', 'i'); 
	else if(hasStrCode == "hsn") pattern = new RegExp('[^0-9°¡-ÆR\x20]', 'i'); 
	else if(hasStrCode == "esn") pattern = new RegExp('[^0-9A-Za-z\x20]', 'i'); 
	else if(hasStrCode == "hen") pattern = new RegExp('[^0-9A-Za-z°¡-ÆR]', 'i'); 
	else if(hasStrCode == "hesn") pattern = new RegExp('[^0-9A-Za-z°¡-ÆR\x20]', 'i'); 
	else if(hasStrCode == "hesn") pattern = new RegExp('[^0-9A-Za-z°¡-ÆR\x20\%]', 'i'); 
	else if(hasStrCode == "p") pattern = new RegExp('[%]', 'i'); 

    if(str.bytes() > maxlen) return false; 
	if(pattern.exec(str) != null) { 
        // ÆÐÅÏ°ú ÀÏÄ¡ÇÏ´Â °æ¿ì 
        return false; 
    }else{ 
        return true; 
    } 
}


function CheckEmail(emailStr) {
	return g_checkEmail(emailStr);
}