//-----------------------------------------------------------------------------

 // 문자의 좌, 우 공백 제거

// @return : String


String.prototype.trim       = function()    {  return this.replace(/(^\s*)|(\s*$)/g, ""); }
String.prototype.ltrim      = function()    {  return this.replace(/(^\s*)/, ""); }
String.prototype.rtrim      = function()    {  return this.replace(/(\s*$)/, "");  }
String.prototype.cutStr     = function(Len) {  return this.substring(0,Len);  } // 문자열을 잘라서 반환



String.prototype.queryString = function ()
{
    var querystring = new Array;
    var qS = String (this).split ('?')[1];
    return (qS) ?  '?'+qS : '';
 }    
    

/**
   var trim = function(Str) {

  return Str.replace(/(^\s*)|(\s*$)/g, "");

  }
*/


  // -- 한국의 우편번호 검색용 동이름
  var KorStats = function(Str) {
   return  Str.replace(/[^가-힣0-9a-zA-Z\s]/g, "").replace(/\s\s/g," ").trim();
  }
  
  var cutStr = function(Str, Len) {
    return Str.substring(0,Len);
  }
  

 //-----------------------------------------------------------------------------

// 문자의 좌 공백 제거

 // @return : String

 //-----------------------------------------------------------------------------

 var ltrim = function(Str) 
 {
    return Str.replace(/(^\s*)/, "");
  }

 //-----------------------------------------------------------------------------

  // 문자의 우 공백 제거

  // @return : String

  //-----------------------------------------------------------------------------

  var rtrim = function(Str) 
  {
    return Str.replace(/(\s*$)/, "");    
   }

   //-----------------------------------------------------------------------------
   // 문자열의 byte 길이 반환
   // @return : int
   //-----------------------------------------------------------------------------
   // 
  
   var Byte = function(Str) 
   {
     var cnt = 0;
     	for (var i = 0; i < Str.length; i++) 
  	     {
       		 if (Str.charCodeAt(i) > 127) cnt += 2;
             else cnt++;
        }
    	return cnt;
    }



     //-----------------------------------------------------------------------------

     // 숫자만 가져 오기

     // @return : String

     //-----------------------------------------------------------------------------

     var number = function(Str) 
     {
        
        if(isNaN(Str))
        {
            var StringNum = Str.trim().replace(/[^0-9]/g, "");
            while((/^0/).test(StringNum))
            {
                StringNum = StringNum.substring(1);
            }
          
           return StringNum;
        }
        else return Str;
       
     }

     //-----------------------------------------------------------------------------

     // 숫자에 3자리마다 , 를 찍어서 반환

     // @return : String

     //-----------------------------------------------------------------------------

     var money = function(Str) 
     {
         Str= Str+' ';
         
         var num = number(Str);
         while((/(-?[0-9]+)([0-9]{3})/).test(num)) {
             num = num.replace((/(-?[0-9]+)([0-9]{3})/), "$1,$2");
           }

         return num;
     }

     //-----------------------------------------------------------------------------

     // 숫자의 자리수(cnt)에 맞도록 반환

     // @return : String

     //-----------------------------------------------------------------------------

     var digits = function(Str, cnt) {

         var digit = "";

         if (Str.length < cnt) {

             for(var i = 0; i < cnt - Str.length; i++) {

                 digit += "0";

             }

         }

         return digit + Str;

     }

     //-----------------------------------------------------------------------------

     // " -> &#34; ' -> &#39;로 바꾸어서 반환

     // @return : String

     //-----------------------------------------------------------------------------

     var quota = function() {

         return Str.replace(/"/g, "&#34;").replace(/'/g, "&#39;");

     }

     //-----------------------------------------------------------------------------

     // 파일 확장자만 가져오기

    // @return : String

    //-----------------------------------------------------------------------------

    var ext = function() {

        return (Str.indexOf(".") < 0) ? "" : Str.substring(Str.lastIndexOf(".") + 1, Str.length);    

    }

    //-----------------------------------------------------------------------------

    // URL에서 파라메터 제거한 순수한 url 얻기

    // @return : String

    //-----------------------------------------------------------------------------    

    var uri = function() {

        var arr = Str.split("?");

        arr = arr[0].split("#");

        return arr[0];    

    }



/*---------------------------------------------------------------------------------*\

 *  각종 체크 함수들

\*---------------------------------------------------------------------------------*/

    //-----------------------------------------------------------------------------

    // 정규식에 쓰이는 특수문자를 찾아서 이스케이프 한다.

    // @return : String

    //-----------------------------------------------------------------------------

    var meta = function(str) {

       var result = ""

        for(var i = 0; i < str.length; i++) {

            if((/([\$\(\)\*\+\.\[\]\?\\\^\{\}\|]{1})/).test(str.charAt(i))) {

                result += str.charAt(i).replace((/([\$\(\)\*\+\.\[\]\?\\\^\{\}\|]{1})/), "\\$1");

            }

            else {

                result += str.charAt(i);

            }

        }

        return result;

    }

    //-----------------------------------------------------------------------------

    // 정규식에 쓰이는 특수문자를 찾아서 이스케이프 한다.

    // @return : String

    //-----------------------------------------------------------------------------

    var remove = function(Str, pattern) {

        return (pattern == null) ? Str : eval("Str.replace(/[" + pattern.meta() + "]/g, \"\")");

    }

    //-----------------------------------------------------------------------------

    // 최소 최대 길이인지 검증

    // str.isLength(min [,max])

    // @return : boolean

    //-----------------------------------------------------------------------------

    var isLength = function(Str) 
    {

        var min = arguments[0];

        var max = arguments[1] ? arguments[1] : null;

        var success = true;

        if(Str.length < min) {

            success = false;

        }

        if(max && Str.length > max) {

            success = false;

        }

        return success;

    }

    //-----------------------------------------------------------------------------

    // 최소 최대 바이트인지 검증

    // str.isByteLength(min [,max])

    // @return : boolean

    //-----------------------------------------------------------------------------

    var isByteLength = function(Str) 
    {

        var min = arguments[0];

        var max = arguments[1] ? arguments[1] : null;

        var success = true;

        if(Str.Byte() < min) {

            success = false;

        }

        if(max && Str.Byte() > max) {

            success = false;

        }

        return success;

    }

    //-----------------------------------------------------------------------------

    // 공백이나 널인지 확인

    // @return : boolean

    //-----------------------------------------------------------------------------

    var isBlank = function(Str) {

        var str = Str.trim();
        for(var i = 0; i < str.length; i++) 
        {

            if ((str.charAt(i) != "\t") && (str.charAt(i) != "\n") && (str.charAt(i)!="\r")) 
                return false;

           
        }

        return true;

    }

    //-----------------------------------------------------------------------------

    // 숫자로 구성되어 있는지 학인

    // arguments[0] : 허용할 문자셋

    // @return : boolean

    //-----------------------------------------------------------------------------

    var isNum = function() {

        return (/^[0-9]+$/).test(Str.remove(arguments[0])) ? true : false;

    }

    //-----------------------------------------------------------------------------

    // 영어만 허용 - arguments[0] : 추가 허용할 문자들

    // @return : boolean

    //-----------------------------------------------------------------------------

    var isEng = function() {
        return (/^[a-zA-Z]+$/).test(arguments[0]) ? true : false;
    }

    //-----------------------------------------------------------------------------

    // 숫자와 영어만 허용 - arguments[0] : 추가 허용할 문자들

    // @return : boolean

    //-----------------------------------------------------------------------------

    var isEngNum = function() {

        return (/^[0-9a-zA-Z]+$/).test(arguments[0]) ? true : false;

    }

    //-----------------------------------------------------------------------------

    // 숫자와 영어만 허용 - arguments[0] : 추가 허용할 문자들

    // @return : boolean

    //-----------------------------------------------------------------------------

    var isNumEng = function() {

        return Str.isEngNum(arguments[0]);

    }

    //-----------------------------------------------------------------------------

    // 아이디 체크 영어와 숫자만 체크 첫글자는 영어로 시작 - arguments[0] : 추가 허용할 문자들

    // @return : boolean

    //-----------------------------------------------------------------------------

    var isUserid = function(Str)
    {
        return (/^[a-zA-z]{1}[0-9a-zA-Z]+$/).test(Str) ? true : false;
    }

    //-----------------------------------------------------------------------------

    // 한글 체크 - arguments[0] : 추가 허용할 문자들

    // @return : boolean

    //-----------------------------------------------------------------------------

    var isKor = function(Str) 
    {
        return (/[가-힣]+/).test(Str.trim()) ? true : false;
    }
    
    var isOnlyKor = function(Str) 
    {
        return (/^[가-힣\s]+$/).test(Str.trim()) ? true : false;
    }
    
    
     var isEng = function(Str) 
    {
        return (/[a-zA-Z]+/).test(Str) ? true : false;
    }
    
    
    
    function shiftTime(time,y,m,d,h) 
    { //moveTime(time,y,m,d,h)
        var date = toTimeObject(time);
        date.setFullYear(date.getFullYear() + y); //y년을 더함
        date.setMonth(date.getMonth() + m);       //m월을 더함
        date.setDate(date.getDate() + d);         //d일을 더함
        date.setHours(date.getHours() + h);       //h시를 더함
        return toTimeString(date);
   }

    
    function userNick(Str)
    {
       return Str.replace(/[\s]/g, "");
    }
    //-----------------------------------------------------------------------------

    // 주민번호 체크 - arguments[0] : 주민번호 구분자

    // XXXXXX-XXXXXXX

    // @return : boolean

    //-----------------------------------------------------------------------------
     String.prototype.num = function() 
     {
            return (this.trim().replace(/[^0-9]/g, ""));
     }

     
     
     
    String.prototype.isJumin = function() {

        var arg = arguments[0] ? arguments[0] : "";

        var jumin = eval("this.match(/[0-9]{2}[01]{1}[0-9]{1}[0123]{1}[0-9]{1}" + arg + "[1234]{1}[0-9]{6}$/)");

        if(jumin == null) {

            return false;

        }

        else {

            jumin = jumin.toString().num().toString();

        }

        // 생년월일 체크

        var FirstChk = parseInt(jumin.charAt(6));
        var birthYY = (FirstChk < 3) ? "19" : "20";
        
        var Sex = (parseInt(jumin.charAt(6))%2) ? 'M' : 'F'; 
       
        birthYY += jumin.substr(0, 2);

        var birthMM = jumin.substr(2, 2) - 1;

        var birthDD = jumin.substr(4, 2);

        var birthDay = new Date(birthYY, birthMM, birthDD);
        var YearsAgo = new Date().getFullYear()-14; //14년 뺌
        var agoDay   = new Date(YearsAgo, birthMM, birthDD);
        

        if(birthDay.getYear() % 100 != jumin.substr(0,2) || birthDay.getMonth() != birthMM || birthDay.getDate() != birthDD) {
            return false;
        }        

        var sum = 0;

        var num = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5]

        var last = parseInt(jumin.charAt(12));

        for(var i = 0; i < 12; i++) 
        {
            sum += parseInt(jumin.charAt(i)) * num[i];
        }
        
        var Varify =  ((11 - sum % 11) % 10 == last) ? true : false;
        if(!Varify) return false;
        
        
        var Young = (birthDay > agoDay) ? true : false;
        
        var BDate = birthDay.getFullYear() +'-'+ jumin.substr(2, 2) +'-'+ birthDD;
        
        return { 'Young' : Young , 'BirthDay' : BDate , 'Sex' : Sex};
    }

    //-----------------------------------------------------------------------------

    // 외국인 등록번호 체크 - arguments[0] : 등록번호 구분자

    // XXXXXX-XXXXXXX

    // @return : boolean

    //-----------------------------------------------------------------------------

    String.prototype.isForeign = function() {

        var arg = arguments[0] ? arguments[0] : "";
        var jumin = eval("this.match(/[0-9]{2}[01]{1}[0-9]{1}[0123]{1}[0-9]{1}" + arg + "[5678]{1}[0-9]{1}[02468]{1}[0-9]{2}[6789]{1}[0-9]{1}$/)");

        if(jumin == null) {

            return false;

        }

        else {

            jumin = jumin.toString().num().toString();

        }

        // 생년월일 체크

        var birthYY = (parseInt(jumin.charAt(6)) == (5 || 6)) ? "19" : "20";

        birthYY += jumin.substr(0, 2);

        var birthMM = jumin.substr(2, 2) - 1;

        var birthDD = jumin.substr(4, 2);

        var birthDay = new Date(birthYY, birthMM, birthDD);

        if(birthDay.getYear() % 100 != jumin.substr(0,2) || birthDay.getMonth() != birthMM || birthDay.getDate() != birthDD) {

            return false;

        }

        if((parseInt(jumin.charAt(7)) * 10 + parseInt(jumin.charAt(8))) % 2 != 0) {

            return false;

        }

        var sum = 0;

        var num = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5]

        var last = parseInt(jumin.charAt(12));

        for(var i = 0; i < 12; i++) {

            sum += parseInt(jumin.charAt(i)) * num[i];

        }

        return (((11 - sum % 11) % 10) + 2 == last) ? true : false;

    }    

    //-----------------------------------------------------------------------------

    // 사업자번호 체크 - arguments[0] : 등록번호 구분자

    // XX-XXX-XXXXX

    // @return : boolean

    //-----------------------------------------------------------------------------

    var isBiznum = function(Str) {

        var arg = arguments[1] ? arguments[1] : "";

        var biznum = eval("Str.match(/[0-9]{3}" + arg + "[0-9]{2}" + arg + "[0-9]{5}$/)");

        if(biznum == null) {

            return false;

        }

        else {

            biznum = biznum.toString();

        }

        var sum = parseInt(biznum.charAt(0));

        var num = [0, 3, 7, 1, 3, 7, 1, 3];

        for(var i = 1; i < 8; i++) sum += (parseInt(biznum.charAt(i)) * num[i]) % 10;

        sum += Math.floor(parseInt(parseInt(biznum.charAt(8))) * 5 / 10);

        sum += (parseInt(biznum.charAt(8)) * 5) % 10 + parseInt(biznum.charAt(9));

        return (sum % 10 == 0) ? true : false;

    }

    //-----------------------------------------------------------------------------

    // 법인 등록번호 체크 - arguments[0] : 등록번호 구분자

    // XXXXXX-XXXXXXX

    // @return : boolean

    //-----------------------------------------------------------------------------

    var isCorpnum = function() {

        var arg = arguments[0] ? arguments[0] : "";

        var corpnum = eval("Str.match(/[0-9]{6}" + arg + "[0-9]{7}$/)");

        if(corpnum == null) {

            return false;

        }

        else {

            corpnum = corpnum.toString().num().toString();

        }

        var sum = 0;

        var num = [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]

        var last = parseInt(corpnum.charAt(12));

        for(var i = 0; i < 12; i++) {

            sum += parseInt(corpnum.charAt(i)) * num[i];

        }

        return ((10 - sum % 10) % 10 == last) ? true : false;

    }

    //-----------------------------------------------------------------------------

    // 이메일의 유효성을 체크

    // @return : boolean

    //-----------------------------------------------------------------------------

    var isEmail = function(Str) {
		if(Str)
        	return (/\w+([-+.]\w+)*@\w+([-.]\w+)*\.[a-zA-Z]{2,4}$/).test(Str.trim());
		else
			return false;

    }

    //-----------------------------------------------------------------------------

    // 전화번호 체크 - arguments[0] : 전화번호 구분자

    // @return : boolean

    //-----------------------------------------------------------------------------

    var isPhone = function() {

        var arg = arguments[0] ? arguments[0] : "";

        return eval("(/(02|0[3-9]{1}[0-9]{1})" + arg + "[1-9]{1}[0-9]{2,3}" + arg + "[0-9]{4}$/).test(Str)");

    }

    //-----------------------------------------------------------------------------

    // 핸드폰번호 체크 - arguments[0] : 핸드폰 구분자

    // @return : boolean

    //-----------------------------------------------------------------------------

    var isMobile = function() {

        var arg = arguments[0] ? arguments[0] : "";

        return eval("(/01[016789]" + arg + "[1-9]{1}[0-9]{2,3}" + arg + "[0-9]{4}$/).test(Str)");

    }
    
    var nl2br = function(Str)
	{
		return Str.replace(new RegExp("\n", "gi"), "<BR />");
	}
    
