/* =======================================================================
ㅁutf-8
ㅁ폼값 체크 클래스
ㅁUPDATE : 2007-08-02

var chkFormz = new chk.ApmSoftNet.FORMZ();
alert(chkFormz.chketcstr('@'));
==========================================================================*/
var chk = {};
chk.ApmSoftNet = {};

// 값
chk.ApmSoftNet.FORMZ = function(){}
chk.ApmSoftNet.FORMZ.prototype =
{
	// 숫자 체크용
	isnum : function (strValue)
	{
		var len = strValue.length;
		for(var i=0;i<len;i++){
			achar = strValue.substring(i,i+1);
			if( achar < "0" || achar > "9" ){
				return false;
				break;
			}
		}
		return true;
	},
	
	// 넘버 포맷
	number_format : function(strValue){
		var achar;
		var tmpmubar = '';
		var snum = 0;
		var len = strValue.length;
		
		// 처음문자가 "-" 인지 확인
		tmpmubar = strValue.substr(0,1);
		if(tmpmubar == '-'){
			snum = snum + 1;
		}
		
		for(var i=snum;i<len;i++)	{
			achar = strValue.substring(i,i+1);
			if(achar != ','){
				if( achar < "0" || achar > "9" ){
					return false;
					break;
				}
			}
		}
		return true;
	},
	
	// 넘버 포맷
	set_number_format : function(strValue){
		var retv= '';
		if(this.chknull(strValue))
		{
			var tmpmubar = '';
			var T_PATTERN = /\,/g;
			strValue = strValue.replace(T_PATTERN, '');
			var len = strValue.length;
			var ncnt= 0;
			var ncntup=1;
			if(len>3){
				// 처음문자가 "-" 인지 확인
				tmpmubar = strValue.substr(0,1);
				if(tmpmubar == '-'){
					len--;
					var T_PATTERN2 = /\-/g;
					strValue = strValue.replace(T_PATTERN2, '');
				}else{
					tmpmubar = '';
				}
				
				for(var i=len;i>0;i--){
					achar = strValue.substr(i,1);
					istchar = strValue.substring(ncnt,ncntup);
					if(i%3 == 0 && len != i){
						retv += ','+istchar;
					}else{
						retv += istchar;
					}
				ncnt++;
				ncntup++;
				}
			}else{
				retv = strValue;
			}
		}
	return (tmpmubar) ? tmpmubar+''+retv : retv;
	},
	
	// 날짜 포맷
	set_date_format : function(strValue,stv){
		var retv= '';
		var today	= new Date();
		if(this.chknull(strValue))
		{
			var T_A = /\./g;
			var T_B = /\-/g;
			var T_C = /\//g;
			strValue = strValue.replace(T_A, '');
			strValue = strValue.replace(T_B, '');
			strValue = strValue.replace(T_C, '');
			var len = strValue.length;
			if(len==8){
				for(var i=0;i<len;i++){
					istchar = strValue.substr(i,1);
					switch(i){
						case 4:
						case 6:
							retv += stv+istchar;
						break;
						default :
							retv += istchar;
					}
				}
			}else if(len==2){ // 2-3, 2.3, 2/3
				istcharm = strValue.substr(0,1);
				istchard = strValue.substr(1,1);

				if(istcharm<1 || istcharm>12) istcharm = today.getMonth()+1;
				if(istchard<1 || istchard>31) istcharm = today.getDate();
				
				if(istcharm < 10) istcharm = '0'+istcharm;
				if(istchard < 10) istchard = '0'+istchard;
				
				retv = today.getFullYear()+''+stv+istcharm+''+stv+istchard;
			}else if(len==3){ // 2-13, 2.23, 2/13
				istcharm = strValue.substr(0,1);
				istchard = strValue.substr(1,2);
				
				if(istcharm<1 || istcharm>12) istcharm = today.getMonth()+1;
				if(istchard<1 || istchard>31) istcharm = today.getDate();
				
				if(istcharm < 10) istcharm = '0'+istcharm;
				if(istchard < 10) istchard = '0'+istchard;
				
				retv = today.getFullYear()+''+stv+istcharm+''+stv+istchard;
			}else if(len==4){ // 02-13, 12.23, 09/13
				istcharm = strValue.substr(0,2);
				istchard = strValue.substr(2,2);
				
				if(istcharm<1 || istcharm>12) istcharm = today.getMonth()+1;
				if(istchard<1 || istchard>31) istcharm = today.getDate();
				
				if(istcharm < 10) istcharm = '0'+istcharm;
				if(istchard < 10) istchard = '0'+istchard;
				
				retv = today.getFullYear()+''+stv+istcharm+''+stv+istchard;
			}else{
				retv = strValue;
			}
		}
	return retv;
	},
	
	chkhpNumber : function ( str ) {
		var result = true;
		var len = str.length;
		var num = str;
		var num1;
		
		if ( len < 10 || len>11) {
			result = false;
		} else {
			num1 = num.substring(0,3);	
	
			if ( num1 != "010" && num1 != "011" && num1 != "016" && num1 != "017" && num1 != "018" && num1 != "019" ) {
				result = false;
			} else {
				if ( !this.isnum(num) ) result = false;
			}
		}
		
		return result;
	},
	
	chklength : function(v,len){
		var vlen = v.length;
		if(vlen<len){ return false; }
	return true;
	},
	
	chknull : function(strValue)
	{
		if(strValue){
			var T_PATTERN = /(^\s*)|(\s*$)/g;
			var retCode = strValue.replace(T_PATTERN, "");
			
			if(retCode) return true;
			else return false;
		}else{ return false; }
	},

	chkkor : function (strValue)
	{
		var retCode = 0;
		var intErr = true;

		for (var i=0; i<strValue.length; i++){
			var retCode = strValue.charCodeAt(i);
			var retChar = strValue.substr(i,1).toUpperCase();
			  retCode = parseInt(retCode);

			if ( (retChar<"0" || retChar>"9") && (retChar<"A" || retChar>"Z") && ((retCode  > 255) || (retCode <  0)) ){
				intErr = false;
				break;
			}
		}
		return intErr;
	},

	chkonlyengnum : function (strValue)
	{
		var retCode = 0;
		var intErr = true;

		for (var i=0; i<strValue.length; i++){
			var retChar = strValue.substr(i,1).toUpperCase();
			var retCode = retChar.charCodeAt(0);

			retCode = parseInt(retCode);

			if ( (retCode>47 && retCode<58) || (retCode>64 && retCode<91) ){ intErr = true; }
			else{
				intErr = false;
				break;
			}
		}

		return intErr;
	},

	/**===========================
	* 특수 문자
	------------------------------
	!=33	"=34	#=35	$=36	%=37	&=38	'=39
	*=42	+=43	,=44	.=46	/=47

	:=58	;=59
	<=60	==61	>=62	?=63	@=64

	[=91	]=93	^=94	`=96
	{=123	}=125	~=126
	--------------------------*/
	chketcstr : function (strValue)
	{
		var intErr = true;
		var retCode = 0;
		for (var i=0; i<strValue.length; i++){
			var retChar = strValue.substr(i,1).toUpperCase();
			var retCode = retChar.charCodeAt(0);

			retCode = parseInt(retCode);
			switch (retCode){
				case 33: intErr = false; break;
				case 34: intErr = false; break;
				case 35: intErr = false; break;
				case 36: intErr = false; break;
				case 37: intErr = false; break;
				case 38: intErr = false; break;
				case 39: intErr = false; break;
	
				case 42: intErr = false; break;
				case 43: intErr = false; break;
				case 44: intErr = false; break;
				//case 46: intErr = false; break;
				case 47: intErr = false; break;
	
				case 58: intErr = false; break;
				case 59: intErr = false; break;
	
				case 60: intErr = false; break;
				case 61: intErr = false; break;
				case 62: intErr = false; break;
				case 63: intErr = false; break;
				case 64: intErr = false; break;
	
				case 91: intErr = false; break;
				case 92: intErr = false; break;
				case 93: intErr = false; break;
				case 94: intErr = false; break;
				case 96: intErr = false; break;
	
				case 123: intErr = false; break;
				case 125: intErr = false; break;
				case 126: intErr = false; break;
			}
		}
		return intErr;
	},
	
	/**태그 특수문자 체크용*/
	chktag : function (strValue)
	{
		var intErr = true;
		var retCode = 0;
		for (var i=0; i<strValue.length; i++){
			var retChar = strValue.substr(i,1).toUpperCase();
			var retCode = retChar.charCodeAt(0);

			retCode = parseInt(retCode);
			switch (retCode){
				case 33: intErr = false; break;
				case 34: intErr = false; break;
				case 35: intErr = false; break;
				case 36: intErr = false; break;
				case 37: intErr = false; break;
				case 38: intErr = false; break;
				case 39: intErr = false; break;
	
				case 42: intErr = false; break;
				case 43: intErr = false; break;
				//case 44: intErr = false; break;
				//case 46: intErr = false; break;
				case 47: intErr = false; break;
	
				case 58: intErr = false; break;
				case 59: intErr = false; break;
	
				case 60: intErr = false; break;
				case 61: intErr = false; break;
				case 62: intErr = false; break;
				case 63: intErr = false; break;
				case 64: intErr = false; break;
	
				case 91: intErr = false; break;
				case 92: intErr = false; break;
				case 93: intErr = false; break;
				case 94: intErr = false; break;
				case 96: intErr = false; break;
	
				case 123: intErr = false; break;
				case 125: intErr = false; break;
				case 126: intErr = false; break;
			}
		}
		return intErr;
	},

	// 사업자등록번호 체크
	check_busino : function (vencod)
	{
		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 i=0; i<9; i++) { sum += getlist[i]*chkvalue[i]; }

		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; }else{ return true; }
	},

	// 주민번호 체크용
	check_jumin_no : function (s){
		if( s.charAt(6) == 1 || s.charAt(6) == 2 ){
			if( s.charAt(12) ==
				(( 11 - ((s.charAt(0)*2+s.charAt(1)*3+s.charAt(2)*4
						 +s.charAt(3)*5+s.charAt(4)*6+s.charAt(5)*7
						 +s.charAt(6)*8+s.charAt(7)*9+s.charAt(8)*2
						 +s.charAt(9)*3+s.charAt(10)*4+s.charAt(11)*5)
						% 11)))%10)
				return true;
		}
		return false;
	},

	// 이메일
	check_email : function (em){
		if ((em.indexOf("@") == -1) || (em.indexOf(".") == -1) || (em.length <= 5)){ return false; }else{ return true; }
	},

	// url 경로체크
	check_url : function (url)
	{
		// [1] "." 이 최소 1개는 있어야 한다. http://apmsoft.net
		var url_arr = url.split('.');
		var url_cnt = url_arr.length;

		if(url_cnt<1){ return false; }

		// [2] "http://" 로 시작해야한다.
		url_cut = url.substr(0,7);
		if (url_cut != 'http://'){
			if(url_cnt<2){ return false; }
		}
	return true;
	}
}

// 폼 체크 클래스 선언
var chkFormz = new chk.ApmSoftNet.FORMZ();

// 클래스를 활용한 자동 체크 함수
function chkFormzFuncDec(objfrm)
{	
	var params		= '';	// 최종값 모으기 함수
	var preChkName	= '';	// 체크박스, 라디오메뉴에서이미실행여부 확인용
	var frm = document.forms[objfrm];
	var frmlen = frm.elements.length;

	for(var i=0; i<frmlen; i++){
		var obj = frm.elements[i];
		var objType	= obj.getAttribute('type');
 		var objText	= obj.getAttribute("itemtext");
		var objName	= obj.getAttribute('name');
		var objId	= obj.getAttribute('id');

		var msg		= '';		// 메세지
		var objv	= '';		// 값			
		var require	= false;	// 필수
		var chkfilter='';		// 추가 필터코스

		objType = (objType==null) ? obj.tagName.toLowerCase() : objType;
		switch(objType)
		{
			case 'password'	: 
			case 'text' 	: 
				msg= '입력하세요';
				objv = obj.value;
				if(obj.getAttribute("required") != null){ require = true; }
				
				var chkfilObj = obj.getAttribute("chkfilter");
				if(chkfilObj){ 	chkfilter = chkfilObj; }else{ chkfilter = objName; }
			break;
			case 'hidden' :
				msg= '하세요';
				objv = obj.value;
				if(obj.getAttribute("required") != null){ 	require = true; }
			break;
			case 'checkbox'	:
				msg	= '체크하세요';
				if(preChkName != objName){ // 이미실행여부 체크
					var chkcObj = document.getElementsByName(objName);
					var chkclen = chkcObj.length;
					var chkmaxn = parseInt(chkclen-1);
					for(var ci=0; ci<chkclen; ci++){					
						if(chkcObj[ci].checked == true){
							if(ci==chkmaxn){ objv += chkcObj[ci].value }
							else{ objv += chkcObj[ci].value+',' }
						}
					}
				}else{ objv=''; }
				preChkName = objName;
			break;
			case 'radio'	: 
				msg	= '체크하세요';
				if(preChkName != objName){ // 이미실행여부 체크
					require = true;
					
					var chkrObj = document.getElementsByName(objName);
					var chkrlen = chkrObj.length;
					for(var ri=0; ri<chkrlen; ri++){
						if(chkrObj[ri].getAttribute("itemtext") != null){
							objText= chkrObj[ri].getAttribute("itemtext");
						}
						
						if(chkrObj[ri].checked == true){ objv = chkrObj[ri].value; }
					}
					
					if(objv){ require = false; }
				}else{
					objv='';
				}
				preChkName = objName;
			break;
			case 'select-one' :
			case 'select' :
				msg ='선택하세요';
				objv = obj.value;
				//var opts = obj.options;
				
				if(obj.getAttribute("required") != null){ 	require = true; }

				/*for (var i=0; i<opts.length; i++) {
					if (opts[i].selected) {
						alert(opts[i].text + " " + opts[i].value);
						objv = opts[i].value;
					}
				}*/
			break;
			case 'textarea' :
				msg= '입력하세요';
				var required = obj.getAttribute("required");
				if(required != null || required){ require = true; }

				var chkfilObj = obj.getAttribute("chkfilter");
				if(chkfilObj){ chkfilter = chkfilObj; }else{ chkfilter = objName; }

				var editorId = obj.getAttribute("editor");
				if(editorId != null || editorId){
					var ediobjnm = editorId+objId;
					var contentsv = document.getElementById(ediobjnm).contentWindow.document;
					if(new RegExp(/Firefox/).test(navigator.userAgent)){ objv = contentsv.body.innerHTML; }
					else{ objv = contentsv.body.innerHTML; }
				}else{ objv = obj.value; }
			break;
			default : objv = '';
		}

		// 필수항목인지 체크 /-----------
		if(require)
		{					
			// null 값 체크
			if(!chkFormz.chknull(objv)){
				if(objText)	
				{				
					alert(objText+'을(를) '+msg);
					switch(objType){
						case 'text':
						case 'password' :
							obj.select();
							obj.focus();
							return;
						break;
						case 'hidden': return; break;
						case 'textarea' :
							var editorId = obj.getAttribute("editor");
							if(editorId != null || editorId){
								var ediobjnm = editorId+objId;
								var contentsv = document.getElementById(ediobjnm).contentWindow.document;
								document.getElementById(ediobjnm).contentWindow.focus();
							}else{ obj.focus(); }
							return;
						default : obj.focus(); return;
					}
				}else{
					alert(objName+'에 itemtext 값이 정의되어 있지 않습니다.');
					return;
				}
			}
		}
		
		// 옵션 항목인데 값이 있을때도 포함해서 값 체크		
		// 필드별 추가 체크 옵션
		if(objv)
		{
			if(chkfilter){
				switch(chkfilter){
					case 'passwd' : // 비밀번호
						if(!chkFormz.chkonlyengnum(objv)){
							alert('비밀번호는 영문 또는 숫자만 입력하세요');
							obj.select();
							obj.focus();
							return;
						}
			
						// 특수문자
						if(!chkFormz.chketcstr(objv)){
							alert('비밀번호에 특수문자를 사용할 수 없습니다.');;
							obj.select();
							obj.focus();
							return;
						}
					break;					
					case 'email' : // 이메일
						if(!chkFormz.check_email(objv)){
							alert('이메일 주소를 정확하게 입력해 주세요');
							obj.select();
							obj.focus();
							return;
						}
					break;					
					case 'biznum' : // 사업자 등록번호
						if(!chkFormz.isnum(objv)){
							alert('숫자만 입력하세요');
							obj.select();
							obj.focus();
							return;
						}
						if(!chkFormz.check_busino(objv)){
							alert('사업자 등록번호를 정확하게 입력해 주세요');
							obj.select();
							obj.focus();
							return;
						}
					break;
					case 'jumin': // 주민번호 앞자리
						if (objv.length != 13){
							alert(objText+'를 정확하게 입력하세요.');
							obj.select();
							obj.focus();
							return;
						}

						if(!chkFormz.isnum(objv)){
							alert(objText+'는 숫자만 입력하세요');
							obj.select();
							obj.focus();
							return;
						}

						if(!chkFormz.check_jumin_no(objv)){
							alert(objText+'를 정확하게 입력하세요.');
							obj.select();
							obj.focus();
							return;
						}
					break;					
					case 'linkurl'	: // 링크관련
						if(!chkFormz.check_url(objv)){
							alert('주소를 http:// 형태로 정확하게 입력해 주세요');
							obj.select();
							obj.focus();
							return;
						}
					break;			
					case 'onlynum' : // 숫자만
						if(!chkFormz.isnum(objv)){
							alert(objText+'(은)는 숫자만 입력하세요');
							obj.select();
							obj.focus();
							return;
						}
					break;					
					case 'number_format' : // 숫자만
						if(!chkFormz.number_format(objv)){
							alert(objText+"(은)는 숫자와 ',' 만 입력하세요");
							obj.focus();
							return;
						}
					break;
					case 'engnum': // 영문+숫자 만
						if(!chkFormz.chkonlyengnum(objv)){
							alert(objText+'(은)는 영문 또는 숫자만 입력하세요');
							obj.select();
							obj.focus();
							return;
						}

						// 특수문자
						if(!chkFormz.chketcstr(objv)){
							alert(objText+'(은)는 특수문자를 사용할 수 없습니다.');;
							obj.select();
							obj.focus();
							return;
						}
					break;
					case 'etcstr': // 특수문자 사용할 수 없음
						// 특수문자
						if(!chkFormz.chketcstr(objv)){
							alert(objText+'(은)는 특수문자를 사용할 수 없습니다.');;
							obj.select();
							obj.focus();
							return;
						}
					break;
					case 'tag': // 특수문자 사용할 수 없음
						// 특수문자
						if(!chkFormz.chktag(objv)){
							alert(objText+'(은)는 "," 과 "."를 제외한 특수문자는 사용할 수 없습니다');;
							obj.select();
							obj.focus();
							return;
						}
					break;
					
				}
			}
			// 값을 모아서 되돌려 주기
			params += '&'+objName+'='+encodeURIComponent(objv)
		}
	}

	// return
	if(params){ return params; }
}