/////////////////////////////////////////////////////////////////////
//         name   : chkForm.js                                     //
//         Author : Kim juseok (snactin@empal.com)                 //
//         1. isNumeric(Str)                                       //
//         2. isAlphabet(Str)                                      //
//         3. isAlphabetNumeric(Str)                               //
//         4. isSpace(Str)                                         //
//         5. removeSpace(Str)                                     //
//         6. isEmpty(Str)                                         //
//         7. getByteLength(Str)			     				   //
//		   8. isKorean(name)					    			   //
//		   9. isTelNumeric(Str)						    		   //
//		   10. isDate( value )									   //
//		   11. isEmail(Str)                                        //
//		   12. conTelNumber(Str)                                   //
//		   13. isCompanyNumber(Str)                                //
//		   14. isJuminNumber(Str)                                  //
//         15. isFile(Str)                                         //
//         16. checkup_mailboxName(Str)                            //
/////////////////////////////////////////////////////////////////////

/************************************************************************
*  Function Name : isNumeric(Str)                                       *
*  Description   : input Data에 대해 숫자인지 아닌지 CHECK             	*
*  Input Data    : Str                                         		    *
*  Output Data   : true/false (숫자 -> true, 숫자가 아닌 경우 -> false) *
*  사용되는 Function : None                                         	*
************************************************************************/
function isNumeric(Str) {
	
	var retValue = true;
	var count;
	var permitChar = "0123456789";
	
	for (var i = 0; i < Str.length; i++) {
		count = 0;
		for (var j = 0; j < permitChar.length; j++) {
			if(Str.charAt(i) == permitChar.charAt(j)) {
				count++;
				break;
			}
		}
		
		if (count == 0) {
			retValue = false;
			break;
		}
	}
	return retValue;
}


/************************************************************************
*  Function Name : isAlphabet(Str)                                      *
*  Description   : input Data에 대해 영문자인지 아닌지 CHECK             *
*  Input Data    : Str                                         		    *
*  Output Data   : true/false (영문자->true, 영문자가 아닌 경우 ->false) *
*  사용되는 Function : None                                         	    *
************************************************************************/
function isAlphabet(Str) {
	
	var retValue = true;
	var count;
	var permitChar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	
	for (var i = 0; i < Str.length; i++) {
		count = 0;
		for (var j = 0; j < permitChar.length; j++) {
			if(Str.charAt(i) == permitChar.charAt(j)) {
				count++;
				break;
			}
		}
		
		if (count == 0) {
			retValue = false;
			break;
		}
	}
	return retValue;
}


/************************************************************************
*  Function Name : isAlphabetNumeric(Str)                               *
*  Description   : input Data에 대해 영숫자인지 CHECK		          	*
*  Input Data    : Str                                           		*
*  Output Data   : true/false (영숫자 -> true, 영숫자아닌경우 -> false) *
*  사용되는 Function : none		                                     	*
************************************************************************/
function isAlphabetNumeric(Str) {
	var retValue = true;
	var count;
	var permitChar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
	
	for (var i = 0; i < Str.length; i++) {
		count = 0;
		for (var j = 0; j < permitChar.length; j++) {
			if(Str.charAt(i) == permitChar.charAt(j)) {
				count++;
				break;
			}
		}
		
		if (count == 0) {
			retValue = false;
			break;
		}
	}
	return retValue;
}
function isAlphabetNumeric1(Str) {
	var retValue = true;
	var count;
	var permitChar = "abcdefghijklmnopqrstuvwxyz0123456789";
	
	for (var i = 0; i < Str.length; i++) {
		count = 0;
		for (var j = 0; j < permitChar.length; j++) {
			if(Str.charAt(i) == permitChar.charAt(j)) {
				count++;
				break;
			}
		}
		
		if (count == 0) {
			retValue = false;
			break;
		}
	}
	return retValue;
}

function isAlphabetNumeric2(Str) {
	var retValue = true;
	var count;
	var permitChar = "abcdefghijklmnopqrstuvwxyz0123456789-_";
	
	for (var i = 0; i < Str.length; i++) {
		count = 0;
		for (var j = 0; j < permitChar.length; j++) {
			if(Str.charAt(i) == permitChar.charAt(j)) {
				count++;
				break;
			}
		}
		
		if (count == 0) {
			retValue = false;
			break;
		}
	}
	return retValue;
}


/************************************************************************
*  Function Name : isAlphabetNumeric(Str)                               *
*  Description   : input Data에 대해 영숫자인지 CHECK		          	*
*  Input Data    : Str                                           		*
*  Output Data   : true/false (영숫자 -> true, 영숫자아닌경우 -> false) *
*  사용되는 Function : none		                                     	*
************************************************************************/
function isAlphabetNumeric2(Str) {
	var retValue = true;
	var count1;
	var count2;
	var permitChar1 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_";
	var permitChar2 = "0123456789";
	
	count1= 0;
	count2= 0;
	
	for (var i = 0; i < Str.length; i++) {
		for (var j = 0; j < permitChar1.length; j++) {
			if(Str.charAt(i) == permitChar1.charAt(j)) {
				count1++;
			}
		}
		
		for (var k = 0; k < permitChar2.length; k++) {
			if(Str.charAt(i) == permitChar2.charAt(k)) {
				count2++;
			}
		}
	}
		
	if (count1 == 0 || count2 == 0) {
		retValue = false;
	}
	
	return retValue;
}


/************************************************************************
*  Function Name : isSpace(Str)                                         *
*  Description   : input Data에 대해 공백이 있는지 여부 CHECK          	*
*  Input Data    : Str                                           		*
*  Output Data   : true/false (공백 -> true, 공백이 없는 경우 -> false)  *
*  사용되는 Function : ChkVal(String)                                  	*
************************************************************************/
function isSpace(Str) {
	return ChkVal(Str);
}

function ChkVal(Str) {
	var retValue=false;
	for (var i=0; i<Str.length; i++) {
		if (Str.charAt(i)==' ') {
			retValue=true;
			break;
		}
	}
	return retValue;
}

/********************************************************************
*  Function Name : removeSpace(str)                                 *
*  Description   : Input Data 의 Space를 제거한다.                   *
*  Input Data    : Str                                              *
*  Output Data   : retValue                                         *
*  사용 Function : None                                             *
********************************************************************/
function removeSpace(Str)
{
    var src = new String(Str);
    var retValue = new String();
    var i, len = src.length;
	
    for(i = 0;i < len;i++) {
        if(src.charAt(i) != " ") {
            retValue = retValue + src.charAt(i);
        }
    }
    
    return retValue;
}

/************************************************************************
*  Function Name : isEmpty(Str)                                         *
*  Description   : input Data에 대해  NULL CHECK       				   	*
*  Input Data    : Str                                           		*
*  Output Data   : true/false (NULL -> true, NULL아닌경우 -> false)     *
*  사용되는 Function : removeSpace(Str)                                	*
************************************************************************/
function isEmpty(Str) {
	var isAllSpace_ = isAllSpace(Str);
    return(Str == "" || isAllSpace_) ? true : false;
}


/************************************************************************
*  Function Name : getByteLength(Str)	                                *
*  Description   : input Data에 대해 byte길이를 구함  	                *
*  				   한글 한글자를 2byte로 인식한다.					  	*
*  Input Data    : Str                                           		*
*  Output Data   : retValue (byte길이)									*
*  사용되는 Function : none		                                     	*
************************************************************************/
function getByteLength(Str){
	var retValue = 0;
	if ( Str == null ) return 0;
	for(var i=0;i<Str.length;i++){
		var c = escape(Str.charAt(i));
		if ( c.length == 1 ) retValue ++;
		else if ( c.indexOf("%u") != -1 ) retValue += 2;
		else if ( c.indexOf("%") != -1 ) retValue += c.length/3;
	}
	return retValue;
}


/************************************************************************
*  Function Name : isKorean(Str)                                  		*
*  Description   : input Data에 대해 한글인지 CHECK		          		*
*  Input Data    : Str                                           		*
*  Output Data   : true/false (한글 -> true, 한글아닌경우 -> false)   	*
*  사용되는 Function : none		                                     	*
************************************************************************/
function isKorean(Str) {
    var ch = "\0";    
	var retValue = true;     
	for (var i = 0, ch = Str.charAt(i); (i <Str.length) && (retValue); ch = Str.charAt(++i)) {
        if ((ch >= '0') && (ch <= '9'))              retValue = false;
        else if ((ch >= 'a') && (ch <= 'z'))              retValue = false;
        else if ((ch >= 'A') && (ch <= 'Z'))              retValue = false;
        else 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 == '(' )
			retValue = false;     
	}    
	return retValue;
}


/************************************************************************
*  Function Name : isTelNumeric(Str)                                	*
*  Description   : input Data에 대해 '-'포함 숫자인지 CHECK        		*
*  Input Data    : retValue                                           	*
*  Output Data   : true/false (숫자 -> true, 숫자아닌경우 -> false) 	*
*  사용되는 Function : none		                                     	*
************************************************************************/
function isTelNumeric(Str) {
	
	var retValue = true;
	var count;
	var permitChar = "0123456789-";
	
	for (var i = 0; i < Str.length; i++) {
		count = 0;
		for (var j = 0; j < permitChar.length; j++) {
			if(Str.charAt(i) == permitChar.charAt(j)) {
				count++;
				break;
			}
		}
		
		if (count == 0) {
			retValue = false;
			break;
		}
	}
	return retValue;
}


/************************************************************************
*  Function Name : isDate(Str)	                            		    *
*  Description   : input Data에 대해 입력된 날짜 validation CHECK  		*
*  Input Data    : Str                                        	   	    *
*  Output Data   : true/false (유효 -> true, 유효하지않은경우 -> false)	*
*  사용되는 Function : checkMonth( month ), checkDay( year, month, day )*
************************************************************************/
function isDate( Str ) {
    
    if( Str.length != 8 ){
    	return false;
    }
    var year = Str.substring(0,4);
    var month = subTxt(Str.substring(4,6));
    var day   = subTxt(Str.substring(6,8));
    if ( parseInt( year ) >= 1900  && checkMonth( month ) && checkDay( year, month, day ) )
        return true;
    else
	 return false;
	
}

function subTxt( Str )
{
	if(Str.substring(0,1) == 0) {
		Str = Str.substring(1,2);
	}
	return Str;
}

function checkMonth( Str )
{
    if ( parseInt( Str ) <= 0  || parseInt( Str ) > 12  )
        return false;
    else
        return true;
}

function checkDay( yyyy, mm, dd )
{
    var monthDD = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    var im = parseInt(mm) - 1;
    
    if( ( (yyyy % 4 == 0) && (yyyy % 100 != 0)) || (yyyy % 400 == 0) )
        monthDD[1] = 29;
    
    if( parseInt( dd ) <= 0 || parseInt( dd ) > monthDD[im] )
        return false;
    else
        return true;
}


/************************************************************************
*  Function Name : isEmail(Str)                            				*
*  Description   : input Data에 대해 Email validation CHECK        		*
*  Input Data    : Str                                           		*
*  Output Data   : true/false ((유효 -> true, 유효하지않은경우 -> false)*
*  사용되는 Function : none		                                     	*
************************************************************************/
function isEmail(Str) {
	var chkflag=true;
	var retValue;
	if (window.RegExp) {
		var tmpstr="a";
		var exam=new RegExp(tmpstr);
		if (tmpstr.match(exam)) {
			var ret1=new RegExp("(\\.@)|(\\,@)|(\\;@)|(\\!@)|(\\?@)|(\\#@)|(\\$@)|(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
			var ret2=new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
			retValue=(!ret1.test(Str) && ret2.test(Str));
		}
		else
			chkflag=false;
	}
	else
		chkflag=false;
	if (!chkflag)
		retValue=((Str!="") && (Str.indexOf("@"))>0 && (Str.index.Of(".")>0)); 
	return retValue;
}

function isEmail2(Str) {
	var retValue = true;
	var count;
	var permitChar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.";
	
	for (var i = 0; i < Str.length; i++) {
		count = 0;
		var essenChar = Str.indexOf('.');
		
		for (var j = 0; j < permitChar.length; j++) {
			if(Str.charAt(i) == permitChar.charAt(j)) {
				count++;
				break;
			}
		}
		
		if (count == 0) {
			retValue = false;
			break;
		}
		
		if (essenChar == -1) {
			retValue = false;
			break;
		}
	}
	return retValue;
}


/************************************************************************
*  Function Name : conTelNumber(Str)                          			*
*  Description   : 영문자 input Data에 대해 숫자전화번호로 변환			*
*  Input Data    : Str                                           		*
*  Output Data   : phonenumber 											*
*  사용되는 Function : none		                                     	*
************************************************************************/
function conTelNumber(Str) {
	
	var Strlength = Str.length;
	Str = Str.toLowerCase();
	var phonenumber = "";
	
	for (i = 0; i < Strlength; i++) {
		var character = Str.charAt(i);
		
		switch(character) {
		case '0': phonenumber+="0";break;
		case '1': phonenumber+="1";break;
		case '2': phonenumber+="2";break;
		case '3': phonenumber+="3";break;
		case '4': phonenumber+="4";break;
		case '5': phonenumber+="5";break;
		case '6': phonenumber+="6";break;
		case '7': phonenumber+="7";break;
		case '8': phonenumber+="8";break;
		case '9': phonenumber+="9";break;
		case '-': phonenumber+="-";break;
		case 'a': case 'b': case 'c': phonenumber+="2";break;
		case 'd': case 'e': case 'f': phonenumber+="3";break;
		case 'g': case 'h': case 'i': phonenumber+="4";break;
		case 'j': case 'k': case 'l': phonenumber+="5";break;
		case 'm': case 'n': case 'o': phonenumber+="6";break;
		case 'p': case 'q': case 'r': case 's': phonenumber+="7";break;
		case 't': case 'u': case 'v': phonenumber+="8";break;
		case 'w': case 'x': case 'y': case 'z': phonenumber+="9";break;
		}
	} 
	return phonenumber;
}


/************************************************************************
*  Function Name : isCompanyNumber(Str)                        			*
*  Description   : input Data에 대해 사업자등록번호 CHECK          		*
*  Input Data    : Str                                           		*
*  Output Data   : true/false ((유효 -> true, 유효하지않은경우 -> false)*
*  사용되는 Function : none		                                     	*
************************************************************************/
function isCompanyNumber(Str) {
	
	var num9=0;
	var crtsum=0;
	var num,num1,num2 =0;
	
	num9 = parseInt(Str.substring(8,9))*5;
	if (num9>9) {
		num1 =parseInt(num9/10);
		num2 = num9%10;
		num = num1 + num2;
	} else {
		num = parseInt(num9);
	}
	crtsum = parseInt(Str.substring(0,1))+
		parseInt(Str.substring(1,2))*3+
		parseInt(Str.substring(2,3))*7+
		parseInt(Str.substring(3,4))+
		parseInt(Str.substring(4,5))*3+
		parseInt(Str.substring(5,6))*7+
		parseInt(Str.substring(6,7))+
		parseInt(Str.substring(7,8))*3+
		num;
	crtsum = 10 - (crtsum%10);
	if ((crtsum%10) == (parseInt(Str.substring(9,10)))) {
		return true;
	} else { 
		return false;
    }
}


/************************************************************************
*  Function Name : isJuminNumber(Str1, Str2)                   			*
*  Description   : input Data에 대해 주민등록번호 CHECK            		*
*  Input Data    : Str1, Str2                                      		*
*  Output Data   : true/false ((유효 -> true, 유효하지않은경우 -> false)*
*  사용되는 Function : none		                                     	*
************************************************************************/
function isJuminNumber(ResNo1, ResNo2)
{
	var chk =0;
	var yy = ResNo1.substring(0,2);

	var mm = parseInt(ResNo1.substring(2,4), 10);
	var dd = parseInt(ResNo1.substring(4,6), 10);
	var sex = parseInt(ResNo2.substring(0,1), 10);

	// 유효한 달, 일 체크
	if ((mm>12)||(mm<1)||(dd<1)||(dd>31)) {
		return false;
	}

  	if ((sex != 1 && sex !=2 && sex !=3 && sex !=4)||(ResNo2.length != 7 )){
    		return false;
  	}

  	for (var i = 0; i <=5 ; i++){
		chk = chk + ((i%8+2) * parseInt(ResNo1.substring(i,i+1)))
 	}

  	for (var i = 6; i <=11 ; i++){
        	chk = chk + ((i%8+2) * parseInt(ResNo2.substring(i-6,i-5)))
 	}


  	chk = 11 - (chk %11)
  	chk = chk % 10


  	if (chk != ResNo2.substring(6,7))
  	{
    		return false;
  	}


    var intYear, intMonth, intDay
    var dayToday, dayUser

    if (sex == 3 || sex == 4) {
        intYear = "20" + yy
    }

    intMonth = mm - 1
    intDay = dd

    dayUser = new Date(intYear, intMonth, intDay);
    dayToday = new Date()

    if ( (dayUser.getTime() - dayToday.getTime()) > 0 ) {
		    return false;
	}

    return true
}

/************************************************************************
*  Function Name : isFile(Str)				                   			*
*  Description   : input Data에 대해 파일이름 CHECK            		    *
*  Input Data    : Str		                                    		*
*  Output Data   : true/false ((유효 -> true, 유효하지않은경우 -> false)*
*  사용되는 Function : none		                                     	*
************************************************************************/
function isFile(Str){
	var matchTxt=Str.match(/^[A-Za-z]:(\\.+)+$|^\\(\\.+)+$/ig);
	if ( matchTxt == null ) {
		return false;
	} else {
		return true;
	}
}

/************************************************************************
*  Function Name : checkup_mailboxName(Str)				                   			*
*  Description   : input Data에 대해 유효하지 않은 이름 CHECK            		    *
*  Input Data    : Str		                                    		*
*  Output Data   : true/false ((유효 -> true, 유효하지않은경우 -> false)*
*  사용되는 Function : none		                                     	*
************************************************************************/
function checkup_mailboxName(pstr)
{
    // "\\/:*.,?\"'<>|+ #%{}~"
    if(pstr.indexOf("\\") >= 0
        || pstr.indexOf("/") >= 0
        || pstr.indexOf(":") >= 0
        || pstr.indexOf("*") >= 0
        || pstr.indexOf(".") >= 0
        || pstr.indexOf(",") >= 0
        || pstr.indexOf("?") >= 0
        || pstr.indexOf("\"") >= 0
        || pstr.indexOf("'") >= 0
        || pstr.indexOf("<") >= 0
        || pstr.indexOf(">") >= 0
        || pstr.indexOf("|") >= 0

        || pstr.indexOf("+") >= 0
        // || pstr.indexOf(" ") >= 0
        || pstr.indexOf("#") >= 0
        || pstr.indexOf("%") >= 0
        || pstr.indexOf("{") >= 0
        || pstr.indexOf("}") >= 0
        || pstr.indexOf("~") >= 0
        || pstr.indexOf("&") >= 0
        || pstr.indexOf(";") >= 0
        ) {
    return false;
    }
    return true;
}

/************************************************************************
*  Function Name : thousandComma(val)				           			*
*  Description   : 숫자인경우 천단위에  , 를 붙여서 반환한다.  		    *
*  Input Data    : val		                                    		*
*  Output Data   : *
************************************************************************/
function thousandComma(val)
{
		var clength = val.length;
		var new_val  = "";

		for(i = 0; i < clength; i++){ 
			new_val +=  val.substring(i, i+1);        
			if(((clength - i-1)%3) == 0 && (clength-i-1) > 0 ) new_val +=  ','; 
		} 

		return new_val;
}


/************************************************************************
*  Function Name : isUrl(Str)                            				*
*  Description   : input Data에 대해 URL validation CHECK        		*
*  Input Data    : Str                                           		*
*  Output Data   : true/false ((유효 -> true, 유효하지않은경우 -> false)*
*  사용되는 Function : none		                                     	*
************************************************************************/
function isUrl(Str) {
	var chkflag=true;
	var retValue;
	if (window.RegExp) {
		var tmpstr="a";
		var exam=new RegExp(tmpstr);
		if (tmpstr.match(exam)) {
			var ret1=new RegExp("(\\.@)|(\\,@)|(\\;@)|(\\!@)|(\\?@)|(\\#@)|(\\$@)|(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
			var ret2=new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
			retValue=(!ret1.test(Str) && ret2.test(Str));
		}
		else
			chkflag=false;
	}
	else
		chkflag=false;
	
	if (!chkflag)
		retValue=((Str!="") && (Str.index.Of(".")>0)); 

	return retValue;
}


/************************************************************************
*  Function Name : isAllSpace(Str)                                         *
*  Description   : input Data에 대해 공백만 있는지 여부 CHECK          	*
*  Input Data    : Str                                           		*
*  Output Data   : true/false (공백만 있을 우우 -> true, 공백외의 것도 있는 경우 -> false)  *
*  사용되는 Function : ChkVal(String)                                  	*
************************************************************************/
function isAllSpace(Str) {
	return ChkVal_(Str);
}

function ChkVal_(Str) {
	var retValue=true;
	
	if(typeof(Str) == "number")
	{
		retValue=false;
	}
	else
	{
		for (var i=0; i<Str.length; i++) {
			if (Str.charAt(i)!=' ') {
				retValue=false;
				break;
			}
		}
	}
	return retValue;
}
