//Form Submit 체크 함수
function fn_checkForm(theForm, theMName, theIsModify) {
	var varForm, varFormArray, i, objFElm, formType, formName;
	varForm = $(theForm);
	gVarCount = 0;

	//사용배열 가져오기
	eval('varFormArray = fn_formChkElt_' + theMName + ';');
	//폼이 가지는 모든 폼 요소 체크하기
	for(i = 0 ; i < varForm.elements.length ; i++){
		objFElm = varForm.elements[i];
		formType = objFElm.type;
		formName = objFElm.name;
		if(fn_checkFormElement(varForm, formType, formName, varFormArray, theIsModify)) return false;
	}
	return true;
}

function fn_checkFormElement(varForm, formType, formName, varFormArray, theIsModify) {
	var varFormE, i, j, varBool, varFAArray, varNameArray, varFAOArray, varFormElt, varFALength, varNameStr, varFormArrayName, varFormatNumber;
	if(formName) {
		//alert(formName + ' : ' + formType);
		if(formType == 'checkbox') {
			varFormE = document.getElementsByName(formName);
		} else {
			try {
				eval('varFormE = varForm.' + formName + ';');
			} catch(e) {
				varFormE = document.getElementsByName(formName);
			}
		}

		varBool = false;
		/*for(i = 0 ; i < varFormArray.length ; i++) {
			//alert(varFormArray[i][0] + ':' + formName.replace(/\[\]/gi, ''));
			if(varFormArray[i][0] == formName.replace(/\[\]/gi, '')) {
				varFAArray = varFormArray[i];
				varBool = true;
				break;
			}
		}*/
		
		varFormArrayName = [varFormArray[formName.replace(/(\[\])$/gi, '')], varFormArray[formName.replace(/(\[\]|[0-9])$/gi, '')]];
		varFormatNumber = ',1,2,4,5,6,8,9,'; 
		if(varFormArrayName[0])
		{
			varFAArray = varFormArrayName[0];
			//alert('array : ' + formName.replace(/(\[\]|[0-9])$/gi, ''));
			varBool = true;
		}
		else if(varFormArrayName[1] && varFormatNumber.indexOf(',' + varFormArrayName[1][5] + ',') != -1)
		{
			varFAArray = varFormArrayName[1];
			//alert('array : ' + formName.replace(/(\[\]|[0-9])$/gi, ''));
			varBool = true;
		}
			
		if(varBool) {
			if(varFAArray[10]) {
				varNameArray = varFAArray[10].split(',');
				varFAOArray = new Array();
				varFALength = varNameArray.length;
				for(i = 0; i < varFALength; i++) {
					//for(j = 0 ; j < varFormArray.length ; j++) {
						if(varFormArray[varNameArray[i]][0] == varNameArray[i]) {
							varFAOArray[varNameArray[i]] = varFormArray[varNameArray[i]];
							//alert(varNameArray[i]);
							varFAOArray[varNameArray[i]][2] = false;
							//varBool = true;
							//break;
						}
					//}
				}
				varNameStr = '';
				j = 0;
				for(i = 0; i < varFALength; i++) {
					if(varFormArray[varNameArray[i]][0] == varNameArray[i]) {
						varTempObjName = varFAOArray[varNameArray[i]][0];
						eval('varFormElt = varForm.' + varTempObjName + ';');
						//alert(varFAOArray[varNameArray[i]][0]);
						if(varFormElt || varFormatNumber.indexOf(',' + varFAOArray[varNameArray[i]][5] + ',') != -1) {
							eval('varFormElt = varForm.' + varTempObjName + '1;');
							if(fn_formElementCheck(varFormElt.type, varFormElt, varFAOArray[varNameArray[i]])) return true;
							varNameStr += (j != 0)?', ':'';
							varNameStr += varFAOArray[varNameArray[i]][1];
							j++;
						} else  {
							varFALength--;
						}
					}
				}
				/*
				if(varFAArray[11]) {
					if(varFALength && (parseInt(varFAArray[11]) > varFALength - gVarCount)) {
						alert('\'' + varNameStr + '\' 항목 중 ' + varFAArray[11] + '개의 항목을 채워야 합니다.\n\n확인후 다시 입력하세요');
						return true;
					}
				} else {
					if(varFALength && gVarCount && (varFALength <= gVarCount)) {
						alert('\'' + varNameStr + '\' 항목은 함께 채우거나 모두 채우지 말아야 합니다.\n\n확인후 다시 입력하세요');
						return true;
					}
				}
				*/
			} else {
				//alert(varFormE.name);
				if(fn_formElementCheck(formType, varFormE, varFAArray, theIsModify)) return true;
			}
		}
	}
}

function fn_formElementCheck(theType, theForm, theArray, theIsModify) {
	var varCkType, varFormOrg, varFormName, varName;
	var varForm1, varForm2, varForm3, varNumArray, varTArray, i, varMABool, varValue, varValues;
	varCkType = theArray[5];
	varFormOrg = theForm.form;
	varFormName = theArray[0];
	//varFormName = theForm.name;
	varName = theArray[1];
	if(varCkType == '5') {
		//주민번호 체크
		eval('varForm1 = varFormOrg.' + varFormName + '1;');
		eval('varForm2 = varFormOrg.' + varFormName + '2;');
		if(theArray[2] || varForm1.value.split(' ').join('') != "" || varForm2.value.split(' ').join('') != "") {
			if(fn_formTextCheck(varForm1,[varFormName, varName + ' 앞자리',true,6,6,102])) return true;
			if(fn_formTextCheck(varForm2,[varFormName + '_2',varName + ' 뒷자리',true,7,7,102])) return true;
			if(fn_fMNCheck(varForm1,varForm2, varName)) return true;
		} else {
			gVarCount++;
		}
	} else if(varCkType == '1' || varCkType == '2') {
		//전화,휴대폰 번호 체크
		eval('varForm1 = varFormOrg.' + varFormName + '1;');
		if(varCkType == '1') {
			varNumArray = ['02','031','032','033','041','042','043','051','052','053','054','055','061','062','063','064','0502','0504','0505','0506','010','011','016','017','018','019'];
			varTArray = [[2,4,varName + ' 첫자리'],[3,4,varName + ' 두째자리'],[4,4,varName + ' 세째자리']];
		} else if(varCkType == '2') {
			varNumArray = ['010','011','016','017','018','019'];
			varTArray = [[3,3,varName + ' 첫자리'],[3,4,varName + ' 두째자리'],[4,4,varName + ' 세째자리']];
		}
		eval('varForm2 = varFormOrg.' + varFormName + '2;');
		eval('varForm3 = varFormOrg.' + varFormName + '3;');
		if(theArray[2] || varForm1.value.split(' ').join('') != "" || varForm2.value.split(' ').join('') != "" || varForm3.value.split(' ').join('') != "") {
			if(fn_formTextCheck(varForm1,[varFormName + '1',varTArray[0][2],true,varTArray[0][0],varTArray[0][1],102])) return true;
			varMABool = false;
			for(i = 0 ; i < varNumArray.length ; i++) {
				if(varForm1.value == varNumArray[i]) {
					varMABool = true;
					break;
				}
			}
			if(!varMABool) {
				alert(varName + ' 첫자리에 유효하지 않은 번호입니다.\n\n확인후 다시 입력하세요');
				varForm1.focus();
				return true;
			}
			if(fn_formTextCheck(varForm2,[varFormName + '2',varTArray[1][2],true,varTArray[1][0],varTArray[1][1],102])) return true;
			if(fn_formTextCheck(varForm3,[varFormName + '3',varTArray[2][2],true,varTArray[2][0],varTArray[2][1],102])) return true;
		} else {
			gVarCount++;
		}
	} else if(varCkType == '4') {
		//주소 체크
		eval('varForm1 = varFormOrg.' + varFormName + '1;');
		eval('varForm2 = varFormOrg.' + varFormName + '2;');
		eval('varForm3 = varFormOrg.' + varFormName + '3;');
		//eval('varForm4 = varFormOrg.' + varFormName + '4;');
		if(theArray[2] || varForm1.value.split(' ').join('') != "" || varForm2.value.split(' ').join('') != "" || varForm3.value.split(' ').join('') != "") {
			if(fn_formTextCheck(varForm1,[varFormName + '1','우편번호 앞자리',true,3,3,102])) return true;
			if(fn_formTextCheck(varForm2,[varFormName + '2','우편번호 뒷자리',true,3,3,102])) return true;
			if(fn_formTextCheck(varForm3,[varFormName + '3','기본 주소',true,0,0,0])) return true;
			//if(fn_formTextCheck(varForm4,[varFormName + '4',varName,true,0,0,0])) return true;
		} else {
			gVarCount++;
		}
		/*
		if(theArray[2] && (varForm1.value.split(' ').join('') == "" || varForm2.value.split(' ').join('') == "" || varForm3.value.split(' ').join('') == "" || varForm4.value.split(' ').join('') == "")) {
			if(fn_formTextCheck(varForm1,[varFormName + '1','우편번호 앞자리',true,3,3,102])) return true;
			if(fn_formTextCheck(varForm2,[varFormName + '2','우편번호 뒷자리',true,3,3,102])) return true;
			if(fn_formTextCheck(varForm3,[varFormName + '3','기본 주소',true,0,0,0])) return true;
			if(fn_formTextCheck(varForm4,[varFormName + '4',varName,true,0,0,0])) return true;
		} else {
			gVarCount++;
		}
		*/
	} else if(varCkType == '6') {
		//날짜 체크
		//varForm1 = theForm;
		if(theForm) {
			varValue = theForm.value;
			if(theArray[2] || varValue.split(' ').join('') != "") {
				varValues = varValue.split('-');
				if(!fn_checkDateOrMaxDay(varValues[0], varValues[1], varValues[2])) {
					alert(varName + '항목의 날짜가 유효하지 않습니다!');
					theForm.focus();
					return true;
				}
			} else {
				gVarCount++;
			}
		} else {
			eval('varForm1 = varFormOrg.' + varFormName + '1;');
			eval('varForm2 = varFormOrg.' + varFormName + '2;');
			eval('varForm3 = varFormOrg.' + varFormName + '3;');
			if(theArray[2] || varForm1.value.split(' ').join('') != "" || varForm2.value.split(' ').join('') != "" || varForm3.value.split(' ').join('') != "") {
				if(fn_formTextCheck(varForm1,[varFormName + '1',varName + '항목의 년',true,0,0,109])) return true;
				if(fn_formTextCheck(varForm2,[varFormName + '2',varName + '항목의 월',true,1,12,109])) return true;
				if(fn_formTextCheck(varForm3,[varFormName + '3',varName + '항목의 일',true,1,31,109])) return true;
				if(!fn_checkDateOrMaxDay(varValues[0], varValues[1], varValues[2])) {
					alert(varName + '항목의 날짜가 유효하지 않습니다!');
					theForm.focus();
					return true;
				}
			} else {
				gVarCount++;
			}
		}
	} else {
		//폼 유형별 체크
		//if(theType == 'text' || theType == 'password' || theType == 'textarea') return fn_formTextCheck(theForm,theArray);
		if(theType == 'text' || theType == 'password' || theType == 'textarea' || theType == 'select-one' || theType == 'file') return fn_formTextCheck(theForm,theArray, theIsModify);
		//if(theType == 'select-one') return fn_formSelectOneCheck(theForm,theArray);
		if(theType == 'select-multiple') return fn_formSelectMultipleCheck(theForm,theArray);
		if(theType == 'radio') return fn_formRadioCheck(theForm,theArray);
		if(theType == 'checkbox') return fn_formCheckBoxCheck(theForm,theArray);
	}
}

//*******************************************************************************************
//Form type : text,password,textarea 체크 함수
function fn_formTextCheck(theForm,theArray, theIsModify) {
	var varName, varEFlag, varFileExt, varFileStr, varFileFlag, varBool, varExistFile;
	varName = theArray[1];
	//alert(varName + ':' + theForm.type);
	if(theForm.type == 'select-one') {
		if(fn_formSelectOneCheck(theForm,theArray)) return true;
	} else if(theForm.type == 'file') {
		//alert('file');
		varEFlag = theArray[7];
		varFileExt = theArray[8];
		if(varEFlag && varFileExt) {
			varFileExt = varEFlag + ',' + varFileExt;
		}
		varFileStr = theForm.value;
		//alert(theArray[2] + ':' + varFileStr.split(' ').join(''));
		varExistFile = false;
		if(theArray[2] && varFileStr.split(' ').join('') == "") {
			if(theArray[12] == '7')
			{
				// type => 7 (파일)
				if($(theArray[0] + '_isDelete') && !$(theArray[0] + '_isDelete').checked)
					varExistFile = true;
			}
			//alert(varFileStr.split(' ').join(''));
			//if(varFileStr.split(' ').join('') == "" || !varExistFile)
			if(!varExistFile)
			{
				alert(varName + '항목의 파일을 등록하세요');
				theForm.focus();
				return true;
			}
			else
				gVarCount++;
		} else if(varFileStr.split(' ').join('') == "") {
			gVarCount++;
		}
		//alert(varExistFile);
		//return true;
		if(varFileStr.split(' ').join('') != "" && varFileExt) {
			varFileExt = varFileExt.split(',');
			varFileStr = varFileStr.split('.');
			varFileStr = varFileStr[varFileStr.length - 1];
			varFileFlag = varFileExt[0];
			varBool = false;
			for(i = 0; i < varFileExt.length; i++) {
				if(varFileStr == varFileExt[i]) {
					if(varFileFlag == '!') {
						alert(varName + '항목에 등록할 수 없는 파일입니다.');
						theForm.focus();
						return true;
					} else {
						varBool = true;
						break;
					}
				} else {
					if(varFileFlag == '!') varBool = true;
				}
			}
			if(!varBool) {
				alert(varName + '항목에 등록할 수 없는 파일입니다.');
				theForm.focus();
				return true;
			}
		}
	} else if(theArray[0] != 'filename'){
		//alert(varName + ':' + theForm.type + ':' + theForm.value.split(' ').join('') + ':');
		if((!theIsModify || theArray[5] != 10) && theArray[2] && theForm.value.split(' ').join('') == "") {
			alert(varName + '항목을 채우세요');
			theForm.value = "";
			theForm.focus();
			return true;
		} else if(theForm.value.split(' ').join('') == "") {
			gVarCount++;
		}
		if(theForm.value.split(' ').join('')) {
			if(fn_stringSizeLetterCheck(theForm,theArray)) {
				theForm.focus();
				return true;
			}

			var varPwdCInput;
			eval('varPwdCInput = theForm.form.' + theArray[0] + '_c;');
			if(varPwdCInput) {
				if(fn_formTextCheck(varPwdCInput,[theArray[0] + '_c',varName + '확인',true,theArray[3],theArray[4],theArray[5]])) return true;
				if(theForm.value != varPwdCInput.value) {
					alert(varName + ' 항목과 ' + varName + ' 확인 항목이 동일하여야 합니다.');
					varPwdCInput.focus();
					return true;
				}
			}
		}
	}
}

//Form type : select-one 체크 함수
function fn_formSelectOneCheck(theForm,theArray) {
	var varName;
	varName = theArray[1];
	if(theForm.options.length) {
		if(theArray[2] && theForm.value.split(' ').join('') == "") {
			alert(varName + '항목을 선택하세요');
			theForm.focus();
			return true;
		} else if(theForm.value.split(' ').join('') == "") {
			gVarCount++;
		}
	}
}

//Form type : select-multiple 체크 함수
function fn_formSelectMultipleCheck(theForm,theArray) {
	var i, varName, varMin, varMax, theNum, alertStr1, alertStr;
	varName = theArray[1];
	if(theArray[2] && theForm.selectedIndex == -1) {
		alert(varName + '항목을 선택하세요');
		theForm.focus();
		return true;
	} else if(theForm.selectedIndex == -1) {
		gVarCount++;
	}
	varMin = theArray[3];
	varMax = theArray[4];
	if(theForm.selectedIndex != -1 && (varMin || varMax)) {
		theNum = 0;
		for(i = 0 ; i < theForm.options.length ; i++) (theForm.options[i].selected)?theNum++:theNum=theNum;
		if(theNum < varMin || theNum > varMax) {
			alertStr1 = (varName)?varName + " 항목을 ":"";
			alertStr = "";
			alertStr += (varMin)?varMin + "개 이상 ":"";
			alertStr += (varMax)?varMax + "개 이하로 ":"";
			alertStr = (varMin == varMax)?varMax + "개 ":alertStr;
			alertStr += " 선택해 주세요";
			alert(alertStr1 + alertStr);
			theForm.focus();
			return true;
		}
	}
}

//Form type : Radio 체크 함수
function fn_formRadioCheck(theForm,theArray) {
	var i, varName, theBool;
	varName = theArray[1];
	theBool = false;
	for(i = 0 ; i < theForm.length ; i++) {
		if(theForm[i].checked) {
			theBool = true;
			break;
		}
	}
	if(theArray[2] && !theBool) {
		alert(varName + '항목을 선택하세요');
		return true;
	} else if(!theBool) {
		gVarCount++;
	}
}

//Form type : checkbox 체크 함수
function fn_formCheckBoxCheck(theForm,theArray) {
	var i, varName, varMin, varMax, theNum, alertStr1, alertStr, varResult, start, lastI;
	theNum = 0;
	varName = theArray[1];
	varMin = theArray[3];
	varMax = theArray[4];

	for(i = 0 ; i < theForm.length ; i++) (theForm[i].checked)?theNum++:theNum=theNum;
	if(theArray[2] && !theNum) {
		alert(varName + '항목을 선택하세요');
		return true;
	} else if(!theNum) {
		gVarCount++;
	}
	if(theNum) {
		if(theNum < varMin || (varMax && theNum > varMax)) {
			alertStr1 = (varName)?varName + " 항목을 ":"";
			alertStr = "";
			alertStr += (varMin)?varMin + "개 이상 ":"";
			alertStr += (varMax)?varMax + "개 이하로 ":"";
			alertStr = (varMin == varMax)?varMax + "개 ":alertStr;
			alertStr += " 선택해 주세요";
			alert(alertStr1 + alertStr);
			return true;
		}
	}
	if(theForm.length > 1 && document.getElementsByName(theForm[0].name + '_hidden')[0]) {
		varResult = '';
		start = 1;
		for(i = 0 ; i < theForm.length ; i++) {
			if(theForm[i].checked) {
				varResult += (start != 1)?';':'';
				varResult += theForm[i].value;
				start++;
				continue;
			}
		}
		document.getElementsByName(theForm[0].name + '_hidden')[0].value = varResult;
	}
}

//*******************************************************************************************
//글자수 및 문자종류 제한 체크 함수
function fn_stringSizeLetterCheck(theForm,theArray) {
	var varStr, varPStr, i, len, alertStr1, alertStr, varName, varMin, varMax;
	//글자수 체크
	varStr = theForm.value;
	len = 0;
	varName = theArray[1];
	varMin = theArray[3];
	varMax = theArray[4];
	if(theArray[5] == 9) {
		//숫자일 경우
		varPStr = parseInt(varStr);
		if(varPStr < varMin || (varMax != 0 && varPStr > varMax)){
			alertStr1 = (varName)?varName + " 항목을 ":"";
			alertStr = "";
			alertStr += (varMin)?varMin + " 이상 ":"";
			alertStr += (varMax)?varMax + " 이하로 ":"";
			alertStr = (varMin == varMax)?varMax + "로 ":alertStr;
			alertStr += " 입력해 주세요";
			alert(alertStr1 + alertStr);
			return true;
		}
	} else {
		//문자열일 경우
		if(varMin || varMax) {
			for(i=0;i < varStr.length; i++) (varStr.charCodeAt(i) > 255)? len+=2:len++;
			if(len < varMin || (varMax != 0 && len > varMax)){
				alertStr1 = (varName)?varName + " 항목을 ":"";
				alertStr = "";
				alertStr += (varMin)?varMin + "자 이상 ":"";
				alertStr += (varMax)?varMax + "자 이하로 ":"";
				alertStr = (varMin == varMax)?varMax + "자로 ":alertStr;
				alertStr += " 입력해 주세요";
				alert(alertStr1 + alertStr);
				return true;
			}
		}
	}
	//문자 종류 체크
	var upperCase, lowerCase, Number, varLimitStr, varNoLimitStr, j, limitLetter;
	var varLType, varCType, varCFlag, varCStr, varReg, varMatch;
	upperCase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
	lowerCase = 'abcdefghijklmnopqrstuvwxyz';
	Number = '1234567890';
	varLType = theArray[5];
	varCType = theArray[6];
	varCFlag = theArray[7];
	varCStr = theArray[8];
	varReg = theArray[9];
	//alert(varName + ' : ' + varCStr);
	if(varReg) {
		varMatch = emailStr.match(varReg);
		if (!varMatch) {
			alert((varName)?varName + ' 항목은 유효하지 않는 값이 입력되었습니다.\n\n확인 후 다시 입력해 주세요':'유효하지 않는 값이 입력되었습니다.\n\n확인 후 다시 입력해 주세요');
			return true;
		}
	} else if(varLType || varCType || varCStr) {
		//alert(varLType + ' : ' + varCType + ' : ' + varCStr + ' || ' + theForm.name + ' : ' + theForm.value);
		varLimitStr = '';
		limitLetter = '';
		if(varLType == 101 || varCType == '2,3') {
			varLimitStr = upperCase + lowerCase;
			limitLetter = "영어";
		} else if(varLType == 102 || varCType == '4') {
			varLimitStr = Number;
			limitLetter = "숫자로된 문자";
		} else if(varLType == 103 || varCType == '1,2,3'|| varCType == '2,3,4') {
			varLimitStr = upperCase + lowerCase + Number;
			limitLetter = "영어와 숫자";
		} else if(varLType == 104 || varCType == '1,2' || varCType == '2,4') {
			varLimitStr = lowerCase + Number;
			limitLetter = "영어소문자 와 숫자";
		} else if(varLType == 105 || varCType == '1,3' || varCType == '3,4') {
			varLimitStr = lowerCase + Number;
			limitLetter = "영어대문자 와 숫자";
		} else if(varLType == 106 || varCType == '2') {
			varLimitStr = lowerCase + Number;
			limitLetter = "영어소문자";
		} else if(varLType == 107 || varCType == '3') {
			varLimitStr = lowerCase + Number;
			limitLetter = "영어대문자";
		} else if(varLType == 109 || varCType == '1') {
			varLimitStr = Number;
			limitLetter = "숫자";
		} else if(varLType == 3) {
			if(!fn_checkEmail(theForm)) return true;
		}
		if(varLType != 3) {
			varNoLimitStr = '';
			//if(varCFlag == '!') {
			if(varCFlag == '2') {
				// 사용불가문자
				varNoLimitStr = varCStr;
			} else {
				varLimitStr += varCStr;
				if(varCStr)
					limitLetter += (limitLetter)?',' + varCStr:varCStr;
			}

			for(j = 0 ; j < varStr.length ; j++) {
				//if(varCFlag == '!') {
				if(varCFlag == '2') {
					// 사용불가문자
					if(varNoLimitStr && varNoLimitStr.indexOf(varStr.charAt(j)) != -1) {
						alert((varName)?varName + ' 항목은 \'' + varCStr + '\'의 문자는 입력할 수 없습니다.\n\n확인 후 다시 입력해 주세요':'\'' + varCStr + '\'의 문자는 입력할 수 없습니다.\n\n확인 후 다시 입력해 주세요');
						return true;
					}
				} else {
					// 사용가능문자
					//alert(varNoLimitStr + ' : ' + varLType + ' : ' + varStr.charAt(0) + ' : ' + varNoLimitStr + ' : ' + varLimitStr);
					//if(varNoLimitStr && varLimitStr.indexOf(varStr.charAt(j)) == -1 || (varLType == 109 && varStr.charAt(0) == '0')) {
					
					if(varLimitStr && varLimitStr != 'undefined' && varLimitStr.indexOf(varStr.charAt(j)) == -1) {
						alert((varName)?varName + ' 항목은 \'' + limitLetter + '\'만 입력할 수 있습니다.\n\n확인 후 다시 입력해 주세요':'\'' + limitLetter + '\' 만 입력할 수 있습니다.\n\n확인 후 다시 입력해 주세요');
						return true;
					}
				}
			}
		}
	}
}

//이메일 형식 체크
function fn_checkEmail(obj) {

	if (typeof obj == "undefined") {
		return true;
	}

	var emailStr = obj.value;

	if (emailStr != "" ){

		var emailPat=/^(.+)@(.+)$/
		var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
		var validChars="\[^\\s" + specialChars + "\]"
		var firstChars=validChars
		var quotedUser="(\"[^\"]*\")"
		var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
		var atom="(" + firstChars + validChars + "*" + ")"
		var word="(" + atom + "|" + quotedUser + ")"
		var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
		var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
		var matchArray=emailStr.match(emailPat)

		var alertStr = "유효하지 않는 이메일입니다. 정확히 기록해 주세요.";

		if (matchArray==null) {
			alert(alertStr);
			obj.focus();
			return false;
		}

		var user=matchArray[1]
		var domain=matchArray[2]

		if (user.match(userPat)==null) {
		    // user is not valid
		     alert(alertStr);
		    obj.focus();
			return false;
		}

		var IPArray=domain.match(ipDomainPat)
		if (IPArray!=null) {
		    // this is an IP address
			  for (var i=1;i<=4;i++) {
			    if (IPArray[i]>255) {
			        alert(alertStr);
					obj.focus();
					return false;
			    }
		    }
		}

		var domainArray=domain.match(domainPat)
		if (domainArray==null) {
			alert(alertStr);
		    obj.focus();
			return false;
		}

		var atomPat=new RegExp(atom,"g")
		var domArr=domain.match(atomPat)
		var len=domArr.length
		if (domArr[domArr.length-1].length<2 ||
		    domArr[domArr.length-1].length>3) {
		   // the address must end in a two letter or three letter word.
		   alert(alertStr);
		   obj.focus();
		   return false;
		}
/*
		if (domArr[domArr.length-1].length==2 && len<3) {
		   var errStr="This address ends in two characters, which is a country"
	   	   errStr+=" code.  Country codes must be preceded by "
  	 	   errStr+="a hostname and category (like com, co, pub, pu, etc.)"
		   alert(errStr);
		   obj.focus();
		   return false;
		}
*/

		if (domArr[domArr.length-1].length==3 && len<2) {
		   var errStr="This address is missing a hostname!"
		   alert(errStr);
		   obj.focus();
		   return false;
		}
	}

	return true;
}

//주민등록번호 체크
function fn_fMNCheck(target1,target2,cmt) {

   	var t1 = target1.value;
   	var t2 = target2.value;
   	var sum;
   	sum = 0;

   	sum += t1.charAt(0)*2;
   	sum += t1.charAt(1)*3;
   	sum += t1.charAt(2)*4;
   	sum += t1.charAt(3)*5;
   	sum += t1.charAt(4)*6;
   	sum += t1.charAt(5)*7;

   	sum += t2.charAt(0)*8;
   	sum += t2.charAt(1)*9;
   	sum += t2.charAt(2)*2;
   	sum += t2.charAt(3)*3;
   	sum += t2.charAt(4)*4;
   	sum += t2.charAt(5)*5;

   	check = (11 - sum%11)%10;

   	var l =  t2.length - 1;
   	if ( t2.charAt(l) != check ){
    	alert(cmt + '항목이 정확하지 않습니다');
    	target1.focus();
    	return true;
    } else {
    	return false;
	}
}

function fn_checkDateOrMaxDay(yy, mm, dd) {
	yy = new Number(yy);
	mm = new Number(mm);
	dd = new Number(dd);
	var max_days=0;
	if(mm == 1) {
		max_days = 31 ;
	}
	else if(mm == 2) {
		if ((( yy % 4 == 0) && (yy % 100 != 0)) || (yy % 400 == 0))  max_days = 29;
		else max_days = 28;
	}
	else if (mm == 3)   max_days = 31;
	else if (mm == 4)   max_days = 30;
	else if (mm == 5)   max_days = 31;
	else if (mm == 6)   max_days = 30;
	else if (mm == 7)   max_days = 31;
	else if (mm == 8)   max_days = 31;
	else if (mm == 9)   max_days = 30;
	else if (mm == 10)  max_days = 31;
	else if (mm == 11)  max_days = 30;
	else if (mm == 12)  max_days = 31;
	else max_days = 0;

	//alert((dd) + ':' + (max_days != 0 && dd <= max_days) + ':' + dd + ':' + max_days);
	if(dd) {
		if(max_days != 0 && dd <= max_days) return true;
		else return false;
	} else {
		return max_days;
	}
}

function fn_onlyNum() {
        var keyCode = event.keyCode;
        if (keyCode != 13 && (keyCode < 48 || keyCode > 57)){
                event.returnValue=false;
        }
}