﻿/*
 * author  : 이주용
 * version : 09.03.20
 * comment : 전화번호 형식을 체크한다.
 */
String.prototype.checkPhoneNo = function(){
	return this.checkFormat(f.PHONENO);
};


/*
 * author  : 이주용
 * version : 09.03.20
 * comment : 사업자번호 형식을 체크한다.
 */
String.prototype.checkBizNo = function(){
	return this.checkFormat(f.BIZNO);
};

/*
 * author  : 이주용
 * version : 09.03.20
 * comment : 주민번호 형식을 체크한다.
 */
String.prototype.checkJumin = function(){
	return this.checkFormat(f.JUMIN);
};

/*
 * author  : 이주용
 * version : 09.03.20
 * comment : 메일주소 형식을 체크한다.
 */
String.prototype.checkEmail = function(){
	return this.checkFormat(f.EMAIL);
};

/*
 * author  : 이주용
 * version : 09.03.20
 * comment : 법인번호 형식을 체크한다.
 */
String.prototype.checkInCor = function(){
	return this.checkFormat(f.INCOR);
};

/*
 * author  : 이주용
 * version : 09.03.20
 * comment : 법인번호 형식을 체크한다.
 */
String.prototype.checkZipNo = function(){
	return this.checkFormat(f.ZIPNO);
};

String.prototype.checkFormat = function(num){
	var regexp;
	var ret = false;
	
	switch(num){
	case 1:	// 전화번호 [000-0000-0000]		
		regexp = /^\d{2,3}-?\d{3,4}-?\d{4}$/;
		ret = regexp.test(this);
		break;
	case 2:	// 사업자번호 000-00-00000
		regexp = /^\d{3}-?\d{2}-?\d{5}$/;
		ret = (regexp.test(this) && fn_CheckBusino(this));
		break;
	case 3:	// 주민번호
		regexp = /^\d{6}-?\d{7}$/;
		ret = (regexp.test(this) && fn_CheckJumin(this));
		break;
	case 4:	// 법인번호
		regexp = /^\d{6}-?\d{7}$/;
		ret = (regexp.test(this) && fn_CheckCorpoNo(this));
		break;
	case 5: // 이메일주소
		regexp = /[^@]+@[A-Za-z0-9_-]+[.]+[A-Za-z]+/;
		ret = regexp.test(this);
		
		if(!ret)
		{
			regexp = /[^@]+@[A-Za-z0-9_-]+[.]+[A-Za-z0-9_-]+[.]+[A-Za-z]+/;
			ret = regexp.test(this);
		}
		
		if(!ret)
		{
			regexp = /[^@]+@[A-Za-z0-9_-]+[.]+[A-Za-z0-9_-]+[.]+[A-Za-z0-9_-]+[.]+[A-Za-z]+/;
			ret = regexp.test(this);
		}
		break;
	
	case 6: // 시간 (hh:mm:ss)
		regexp = /([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])/;
		ret = regexp.test(this);
		break;
		
	case 7: // 시간 (hh:mm:ss)
		regexp = /^\d{3}-\d{3}$/;
		ret = regexp.test(this);
		break;
	}
	return ret;
};

/*
 * author  : 이주용
 * version : 09.03.20
 * comment : 입력 값의 형태를 지정한다.
 */
function Format(){
	this.PHONENO = 1;
	this.BIZNO = 2;
	this.JUMIN = 3;	
	this.INCOR = 4;
	this.EMAIL = 5;
	this.TIME = 6;
	this.ZIPNO = 7;
}

/*
 * author  : 이주용
 * version : 09.03.20
 * comment : 메시지를 정의한다.
 */
function Message(){
	this.message = new Array(
			'-전화번호 형식 오류\n','-사업자번호 형식 오류\n','-법인번호 형식 오류\n','-주민번호 형식 오류\n','-이메일 형식 오류\n','-시간 형식 오류\n','-우편번호 형식 오류\n'
			
	);
}

Message.prototype.getMessage = function(index){
	return this.message[index-1];
};


var f = new Format();
var m = new Message();

/*
 * author  : 이주용
 * version : 09.03.23
 * comment : 전화번호 형식인 경우 번호 셋팅 
 */
function fn_SetPhoneNumber(phoneNo) 
{ 
	var ret = phoneNo.trim();
	ret = ret.replace(/[^0-9]/g,''); 
	ret = ret.replace(/(0(?:2|[0-9]{2}))([0-9]+)([0-9]{4}$)/,"$1-$2-$3"); 
	return ret; 
} 

/*
주민등록 번호 체크
입력 필드가 2개인경우
*/
function fn_CheckJumin(varobj1)
{	
	var jumin_string = varobj1.replace(/[-|.]/gi,'');
	var a = jumin_string.substring(6,7);

	if (a < '0' || a > '2') {
		return false;
	}

	var sum = 0;
	var num = 2;

	for(var i=0;i<12;i++)
	{
		a = jumin_string.substring(i,i+1);
		sum = sum + num * (a - '0');
		num++;
		if( num == 10 ) num = 2;
	}

	i = (11 - (sum % 11)) % 10;

	a = jumin_string.substring(12,13);
	if( a != i) 
	{
		return false;
	}

	return true;
} 


/*
author : 이주용
version : 09.06.12
comment : 법인번호의 형식을 체크한다.
*/
function fn_CheckCorpoNo(corpnum){  
	  
	  var re = /-/g;
	  sRegNo = corpnum.replace('-','');
	
	  if (sRegNo.length != 13){
	   return false;
	  }
	
	  var arr_regno  = sRegNo.split("");
	  var arr_wt   = new Array(1,2,1,2,1,2,1,2,1,2,1,2);
	  var iSum_regno  = 0;
	  var iCheck_digit = 0;
	
	  for (i = 0; i < 12; i++){
	    iSum_regno +=  eval(arr_regno[i]) * eval(arr_wt[i]);
	  }
	
	  iCheck_digit = 10 - (iSum_regno % 10);
	
	  iCheck_digit = iCheck_digit % 10;
	
	  if (iCheck_digit != arr_regno[12]){
	    return false;
	  }
	  
	  return true
}

/*
 * author : 이주용
 * version : 09.03.23
 * comment : 사업자 번호의 유효성 체크
 */
function fn_CheckBusino(vencod) { 
	
	vencod = vencod.replace(/[-|.]/gi,'');
	
    var sum = 0; 
    var getlist =new Array(10); 
    var chkvalue =new Array("1","3","7","1","3","7","1","3","5"); 
    for(var i=0; i<10; i++) { getlist[i] = vencod.substring(i, i+1); } 
    for(var j=0; j<9; j++) { sum += getlist[j]*chkvalue[j]; } 
    sum = sum + parseInt((getlist[8]*5)/10); 
    sidliy = sum % 10; 
    sidchk = 0; 
    if(sidliy != 0) { sidchk = 10 - sidliy; } 
    else { sidchk = 0; } 
    if(sidchk != getlist[9]) { return false; } 
    return true; 
}


function fn_IsOverMaxLength(str, maxLength)
{   
    var checkByte = 0;
    var subStrLength = 0;
    
    var hangul = maxLength / 2;
    var english = maxLength;
    
    for(var i = 0; i < str.length; i++)
    {
        var oneChar = str.charAt(i);
        
        if(escape(oneChar).length > 4)
        {
            checkByte += 2;
        }
        else
        {
            checkByte++;
        }
        
        if(checkByte <= maxLength)            
        {
            subStrLength = i + 1;
        }
        else
        {
            break;
        }
    }
    
    return checkByte > maxLength; 
}


