﻿

var ValidUtil = 
{

    jsver:"1.0",


   //숫자인지 아닌지 여부 판별
   //@obj : parameter object 
   //@strName : 메세지를 띄울 컬럼명 (예:전화번호)
    isNumeric:function(obj,strName)
   {
        if(isNaN(obj))
        {  
            alert("[" + strName + "] 은 숫자만 입력하십시요");
            return false;
        }else
        {
            return true;
        }
   },  
   
   //해당 ID의 input 필드의 유효성검사
   //@objid : input object 의 ID (예:txtName)
   //@columnname : 메세지를 띄울 컬럼명 (예:이름)
   isBlankFieldById:function(objid,columnname,checkbanword)
   {
        return this.isBlankField(document.getElementById(objid),columnname,checkbanword);
   },
   
   //해당 object 의 input 필드의 유효성검사
   //@obj : parameter object
   //@columnname : 메세지를 띄울 컬럼명 (예:이름)
   isBlankField:function(obj,columnname,checkbanword)
   {
        if(obj.value=="")
        {
            var msgtype = "입력";
            if(obj.tagName=="SELECT")msgtype = "선택";
            
            alert("[" + columnname + "] 을 " + msgtype + "하십시요",obj);
   
            return false;
        } 
        else
        {
        
            var docheck = true;
            if(typeof(checkbanword)!="undefined"&&checkbanword==false)docheck = false;
            
            //input type=file 인경우 금칙어 조건을 패스하도록 로직 변경
            //alert(obj.tagName + " / " + obj.type);
            
            try
            {
                if(obj.tagName=="INPUT"&&obj.type=="file")docheck = false;
            }catch(e){}
                
            if(docheck)
            {
                //금칙어 검사
                if(ValidUtil.hasBanWord(obj.value)!="")
                {
                    return false;
                }else
                {
                    return true;
                }
            }
        }
        return true;
   },
   
   
    //아이디 문자와 숫자만 허용되는 자바스크립트
   //@checkstr : 체크할 문자열 
    isAlphaNumeric : function (checkStr)
    {
        var checkOK = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_";
        for (i = 0;  i < checkStr.length;  i++)
        {
	        ch = checkStr.charAt(i);
	        for (j = 0;  j < checkOK.length;  j++)
		        if (ch == checkOK.charAt(j))
			        break;
	        if (j == checkOK.length)
	        {
	          return (false);
	          break;
	        }
        }
        return (true);
    },


    // Email Check
    //@strEmail : 체크할 이메일 값
    //@strName : 오류시 나타내야할 컬럼명 (예:이메일)  
    isEmailAddress : function (strEmail, strName)
    {
        /** 금지사항
        - @가 2개이상
        - .이 붙어서 나오는 경우
        -  @.나  .@이 존재하는 경우
        - 맨처음이.인 경우
        **/
        var regDoNot = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; 
        /** 필수사항
        - @이전에 하나이상의 문자가 있어야 함
        - @가 하나있어야 함
        - Domain명에 .이 하나 이상 있어야 함
        - Domain명의 마지막 문자는 영문자 2~3개이어야 함
        **/
        var regMust = /^[a-zA-Z0-9\-\.\_]+\@[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3})$/;
        

        if ( !regDoNot.test(strEmail) && regMust.test(strEmail) ) {

        } else {
	        msg = "[" + strName + "] 을 잘못 입력하셨습니다.";
	        alert(msg);
	        return false;
        }

        return true;
    },


    // 주민등록번호 체크
    //@jumin1 : 주민등록번호 앞 6자리
    //@jumin2 : 주민등록번호 뒤 7자리
    //@strName : 오류시 나타내야할 컬럼명 (예:주민등록번호)   
    isJuminNumber : function (jumin1, jumin2, strName) {
        var i;
        var IDtot = 0;
        var IDAdd = "234567892345";
        var now = new Date();
        var year;
        var day1;
        var day2;
        var age;
        var sex;

        for (i=0 ; i<=5 ; i++)
	        IDtot = IDtot + ((i%8+2) * parseInt(jumin1.substring(i,i+1))) ;  

        for (i=6 ; i<=11 ; i++)
	        IDtot = IDtot + ((i%8+2) * parseInt(jumin2.substring(i-6,i-5))) ;  

        IDtot = 11 - (IDtot % 11);
        IDtot = IDtot % 10;

        if (IDtot != jumin2.substring(6,7)) {
	        msg = "[" + strName + "] 을 잘못 입력하셨습니다.";
	        alert(msg);
	        return false;
        }
    		
        return true;
    },

    //길이체크
    //@strValue : 길이비교를 검사를 위한 값
    //@strName : 오류시 나타내야할 컬럼명 (예:주민등록번호)   
    //@lowLength : 최소자리수
    //@highLength : 최대자리수   
    LengthCheck : function ( strValue, strName, lowLength, highLength , showkorment)
    {
	    var nsize = 0;
	    
	    var mx = highLength;// * 2;
	    
	    var inshowkorment = true;
	    if(typeof(showkorment)!="undefined")
	    {
	        inshowkorment = showkorment;
	    }
	    
	    var msgadd = "";
	    //if(inshowkorment)msgadd += " (주의: 한글 1자는 2자로 계산함)";	    
	        
	    

	    nsize = strValue.length;//this.GetLength(strValue);
	    
	    //alert(strValue.length + " / " + mx);
	    
	    if ( nsize < lowLength ) {
		    msg = "[" + strName + "] : " + lowLength + "자 이상 입력하십시요." + msgadd;
		    alert(msg);
		    return false;
	    } else if ( nsize > mx ) {
		    msg = "[" + strName + "] : " + highLength + "자 이하로 입력하십시요." + msgadd;
		    alert(msg);
		    return false;
	    }
	    else
		    return true;
    },
   
    //해당 문자열의 길이를 검사합니다. (유니코드일경우 길이 2로 계산되는 함수임
    //@strValue : 길이를 검사할 문자열 
    GetLength : function ( strValue )
    {
	    var nsize = 0;
	    var chrOrig;
	    var charEscaped;

	    for( var intinx = 0; intinx <= strValue.length -1 ; intinx++ ){
		    chrOrig = strValue.substring(intinx,intinx+1);
		    chrEscaped = escape(chrOrig); 
		    if ( chrEscaped.substring(0,2) == "%u" )
			    nsize = nsize + 2;
		    else
			    nsize++;
	    }
	    return nsize;
    },
   
    tagLengthCheck : function(strValue)
   {
        var retval = true;
        var tagcnt = 0;
        
        var tagmaxcount = 10;
        var tagmaxlength = 10;
        
        
        if(strValue!="")
        {
            var arr = strValue.split(',');
            for(i=0;i<arr.length;i++)
            {
                if(arr[i].trim()=="")continue;               
                tagcnt++;
                if(arr[i].length>tagmaxlength)
               {
                    alert("한태그는 " + tagmaxlength + "자 이하로 입력하셔야 합니다");
                    retval = false;
                    break;
               }  
            }
        }
        
        if(tagcnt>tagmaxcount)
        {
            alert("태그는 최대 " + tagmaxcount + " 개 까지만 입력하실 수 있습니다");
            retval = false;
        }
        
        return retval;
   },  
   
   focusMove : function(strValue, strLength, moveObj)
   {
        var nsize = this.GetLength(strValue);
        
        if(nsize == strLength)
            $(moveObj).focus();
   },
   //해당 문자열이 유효항 날짜인지를 검사합니다.
   //@strValue : 길이를 검사할 문자열 
   //@strName : 오류시 나타내야할 컬럼명 (예:이메일) 
   isValidDate : function ( strValue, strName )   
   {
        try
        {
            var sArrVal = strValue.split('-');
            var nYear = parseInt(sArrVal[0], 10);
            var nMonth = parseInt(sArrVal[1], 10);
            var nDay = parseInt(sArrVal[2], 10);
	        var nEndDay = 0;
	        
	        	        
	        if(isNaN(nYear) || isNaN(nMonth) || isNaN(nDay))
	        {
		        msg = "[" + strName + "] 가(이) 유효하지 않습니다.";
		        alert(msg);
		        return false;        
	        }  
        	
        	
	        nEndDay = Common.GetEndDay(nYear, nMonth);
	        
	        
	        if(nEndDay == 0)
	        {
		        msg = "[" + strName + "] 가(이) 유효하지 않습니다.";
		        alert(msg);
		        return false;
		    }    
        	
	        if(nDay < 1 || nDay > nEndDay)
	        {
		        msg = "[" + strName + "] 가(이) 유효하지 않습니다.";
		        alert(msg);
		        return false;
		    } 
        		
	        return true;
	    }
	    catch(e)
	    {
	        msg = "[" + strName + "] 가(이) 유효하지 않습니다.";
	        alert(msg);
	        return false;
	   }
   },
   //두 날짜의 전후를 구분한다.
   //@sStartDate : 시작일 
   //@sEndDate : 종료일
    IsDateCmp : function(sStartDate, sEndDate)
    {
        var sSArrVal = sStartDate.split('-');
        var nSYear = parseInt(sSArrVal[0], 10);
        var nSMonth = parseInt(sSArrVal[1], 10);
        var nSDay = parseInt(sSArrVal[2], 10);  
        
        var sEArrVal = sEndDate.split('-');
        var nEYear = parseInt(sEArrVal[0], 10);
        var nEMonth = parseInt(sEArrVal[1], 10);
        var nEDay = parseInt(sEArrVal[2], 10);           
	    
	    var nRet = 0;
    	
	    nRet = (nSYear * 10000 + nSMonth * 100 + nSDay) - (nEYear * 10000 + nEMonth * 100 + nEDay);
	    

	    if(nRet > 0)
	    {
	        msg = "종료일이 시작일보다 앞설 수 없습니다.";
	        alert(msg);	    
		    return false;
		}
	    else if(nRet == 0)
	    {
	        msg = "종료일이 시작일과 같을 수 없습니다.";
	        alert(msg);	    
		    return false;
		}
	    else
		    return true;
    },   
    // 두 시간의 전후를 구분한다.
    //@sStartTime : 시작시간
    //@sStartMin : 시작분
    //@sEndTime : 끝시간
    //@sEndMin : 끝 분
    IsTimeCmp : function(sStartTime, sStartMin, sEndTime, sEndMin)
    {
        var sStart = sStartTime + sStartMin;
        var sEnd = sEndTime + sEndMin;
        
        var nStart = parseInt(sStart, 10);
        var nEnd = parseInt(sEnd, 10);
       
        
        if(isNaN(nStart) || isNaN(nEnd))
        {
	        msg = "시간이 유효하지 않습니다.";
	        alert(msg);
	        return false;   
        }

	    var nRet = 0;
        nRet = nEnd - nStart;
        
        
        if(nRet < 0)
        {
	        msg = "종료시간이 시작시간보다 앞설 수 없습니다.";
	        alert(msg);	    
		    return false;
        }
	    else if(nRet == 0)
	    {
	        msg = "종료시간이 시작시간과 같을 수 없습니다.";
	        alert(msg);	    
		    return false;
		}
	    else
		    return true;        
    },
   
   //버젼반환
   getVersion:function()
   {
        //마지막 함수 , 때문에 미리 만들어놓음.
        return this.jsver;
   }
}

