﻿/*
<form name="ttt" onSubmit="return chkForm(this);">
	<input type="text" required hname="이 값을 입력하세요!">
	<input type="text" min="2" minname="2 자보다 길어야 합니다" option="regNum" oname="숫자로 작성하여 주십시오.">
	<input type="text" required hname="이메일필수!" option="regMail" oname="메일형식오류!">
	<input type="submit" name="Submit" value="확인">
</form>
*/

// 폼체크 sb : 함수를 호출하는 객체 disabled를 하기위함, fm : 폼 객체
function fCheck(sb, f)
{
	//sb.disabled = true;
	var i, currEl, focusMove;
	for(i=0 ; i < f.elements.length ; i++)
	{
		// 하나의 객체를 변수에 담는다.
		currEl = f.elements[i];

		// 필수사항 체크 시작
		if (currEl.getAttribute("required") != null)
		{
			// 포커스가 필요없을때
			if (currEl.getAttribute("nofocus") != null)
			{
				focusMove = false;
			}
			else
			{
				focusMove = true;
			}

			// 폼요소 구분해서 함수 호출
			if (currEl.type.toLowerCase()=="checkbox")
			{
				if (!chkCheckbox(currEl, currEl.hname, sb, focusMove)) return false;
			}
			else if (currEl.type.toLowerCase()=="radio")
			{
				if (!chkRadio(f, currEl, currEl.hname, sb, focusMove)) return false;
			}
			else
			{
				if (!chkText(currEl, currEl.hname, sb, focusMove)) return false;
			}
		}

		// 동일한 값인지 체크
		if (currEl.getAttribute("samed") != null)
		{
			if (!chkSame(currEl, currEl.sname, sb, focusMove, currEl.samed)) return false;
		}

		// 하나의 값이 정해지면 다른것은 필수항목이 된다.
		if (currEl.getAttribute("anded") != null)
		{
			if (!chkAnded(currEl, currEl.anded, currEl.andvalue, currEl.andmsg, sb, focusMove)) return false;
		}

		// 사업자등록번호 체크
		if (currEl.getAttribute("cnumber") != null)
		{
			if (!chkcnum(currEl, currEl.cname, sb, focusMove)) return false;
		}

		// 주민등록번호 체크
		if (currEl.getAttribute("pnumber") != null)
		{
			if (!PersonNumCheck(currEl.pnumber, currEl, currEl.pname, sb, focusMove)) return false;
		}

		// 입력 페턴을 체크한다.
		if (currEl.getAttribute("option") != null && currEl.value.length > 0)
		{
			if (!chkPatten(currEl, currEl.oname, sb, focusMove, currEl.option)) return false;
		}
		
		// 최소길이를 체크한다.
		if (currEl.getAttribute("min") != null && currEl.value.length > 0)
		{
			if (!chkMinimum(currEl, currEl.minname, sb, focusMove, currEl.min)) return false;
		}

		// 최대길이를 체크한다.
		if (currEl.getAttribute("max") != null && currEl.value.length > 0)
		{
			if (!chkMaximum(currEl, currEl.maxname, sb, focusMove, currEl.max)) return false;
		}

		// 최소값을 체크한다.
		if (currEl.getAttribute("minValue") != null && currEl.value.length > 0)
		{
			if (!chkMinValue(currEl, currEl.minMsg, sb, focusMove, currEl.minValue)) return false;
		}

		// 최대값을 체크한다.
		if (currEl.getAttribute("maxValue") != null && currEl.value.length > 0)
		{
			if (!chkMaxValue(currEl, currEl.minMsg, sb, focusMove, currEl.maxValue)) return false;
		}
	}

	sb.disabled = false;
	return true;
}

// 패턴체크
function chkPatten(field, name, sb, focusMove, patten)
{
	var regNum =/^[0-9]+$/;
	var regPhone =/^[0-9]{2,3}-[0-9]{3,4}-[0-9]{4}$/;		// 형식 : 033-1234-5678
	var regMail =/^[_a-zA-Z0-9-]+@[._a-zA-Z0-9-]+\.[a-zA-Z]+$/;
	var regMail1 =/^[_a-zA-Z0-9-]/;
	var regMail2 =/[._a-zA-Z0-9-]+\.[a-zA-Z]+$/;
	var regDomain =/^[.a-zA-Z0-9-]+.[a-zA-Z]+$/;
	var regAlpha =/^[a-zA-Z]+$/;
	var regHost =/^[a-zA-Z-]+$/;
	var regHangul =/[가-힣]/;
	var regHangulEng =/[가-힣a-zA-Z]/;
	var regHangulOnly =/^[가-힣]*$/;
	//var regId = /^[a-zA-Z]{1}[a-zA-Z0-9_-]{6,18}$/;
	var regId = /^[a-zA-Z0-9_-]{4,12}$/;
	var regDate =/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;				// 형식 : 2002-08-15
   
	patten = eval(patten);
	
	if(!patten.test(field.value))
	{
		alert(name);
		if (focusMove) field.focus();
		sb.disabled = false;
		return false;
	}
	return true;
}


// 법인번호
function CorporationNumCheck(field1, field2, errorMSG, sb, focusMove)
{
    var corpnum = [field1.value, field2.value];

		var sum = 0;
		var num = [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2];
		var last = parseInt(corpnum.charAt(12));
		for(var i = 0; i < 12; i++) 
		{
				sum += parseInt(corpnum.charAt(i)) * num[i];
		}
		var cnum = (10-( sum  % 10))%10;

		if (last==cnum)
		{
				return true;
		}
		else
		{
				return false;
		}
}


// 주민등록번호
function PersonNumCheck(field1, field2, errorMSG, sb, focusMove)
{
  var ssn1 = field1.value;
  var ssn2 = field2.value;
  var ssn = new Array(13);

  for (i=0;i<ssn1.length;i++)
  {
    ssn[i] = parseInt(ssn1.charAt(i));
  }
  
  for (i=0;i<ssn2.length;i++)
  {
    ssn[i + 6] = parseInt(ssn2.charAt(i));
  }

  var tempSsn = ssn[0]*2 + ssn[1]*3 + ssn[2]*4 + ssn[3]*5 + ssn[4]*6 + ssn[5]*7 +
   ssn[6]*8 + ssn[7]*9 + ssn[8]*2 + ssn[9]*3 + ssn[10]*4 + ssn[11]*5;
  
  tempSsn %= 11;
  tempSsn = 11 - tempSsn;
  
  if (tempSsn > 9)
  {
    tempSsn %= 10;
  }
  
  if (tempSsn != ssn[12])
  {
    return false;
  }
  else
  {
    return true;
  }
}


// 사업자등록번호 체크
function chkcnum(field, errorMSG, sb, focusMove)
{
	try
	{
		var c1 = field.value.substring(0,1); 
		var c2 = field.value.substring(1,2); 
		var c3 = field.value.substring(2,3); 
		var c4 = field.value.substring(3,4); 
		var c5 = field.value.substring(4,5); 
		var c6 = field.value.substring(5,6); 
		var c7 = field.value.substring(6,7); 
		var c8 = field.value.substring(7,8); 
		var c9 = field.value.substring(8,9); 
		var c10 = field.value.substring(9,10); 
	}
	catch (ex)
	{
		var c1 = field.substring(0,1); 
		var c2 = field.substring(1,2); 
		var c3 = field.substring(2,3); 
		var c4 = field.substring(3,4); 
		var c5 = field.substring(4,5); 
		var c6 = field.substring(5,6); 
		var c7 = field.substring(6,7); 
		var c8 = field.substring(7,8); 
		var c9 = field.substring(8,9); 
		var c10 = field.substring(9,10); 
	}
  
  var a1 = (c1*1)+(c2*3)+(c3*7)+(c4*1)+(c5*3)+(c6*7)+(c7*1); 
  var a2 = a1 % 10; 
  var a3 = (c8 * 3) % 10; 
  var a4 = c9 * 5; 
  var a5 = Math.round(a4/10-0.5); 
  var a6 = a4 - (a5*10); 
  var a7 = (a2+a3+a5+a6) % 10; 
  var a8 = (10 - a7) % 10; 

  if (a8 != c10)
	{
		alert(errorMSG);
		if (focusMove) field.focus();
		sb.disabled = false;
		return false;
	}
	return true;
}


// 최소값 체크
function chkMinValue(field, msg, sb, focusMove, minValue)
{
	fieldvalue = field.value;
	if (fieldvalue < minValue)
	{
		alert(msg);
		if (focusMove) field.focus();
		sb.disabled = false;
		return false;
	}
	return true; 
}

// 최대값 체크
function chkMinValue(field, msg, sb, focusMove, maxValue)
{
	fieldvalue = field.value;
	if (fieldvalue > maxValue)
	{
		alert(msg);
		if (focusMove) field.focus();
		sb.disabled = false;
		return false;
	}
	return true; 
}


// 최소길이 체크
function chkMinimum(field, name, sb, focusMove, minimum)
{
	fieldvalue = field.value;
	if (fieldvalue.length < minimum)
	{
		alert(name);
		if (focusMove) field.focus();
		sb.disabled = false;
		return false;
	}
	return true; 
}

// 최대길이 체크
function chkMaximum(field, name, sb, focusMove, maximum)
{
	fieldvalue = field.value;
	if (fieldvalue.length > maximum)
	{
		alert(name);
		if (focusMove) field.focus();
		sb.disabled = false;
		return false;
	}
	return true;
}

// 필수값 체크
function chkText(field, name, sb, focusMove)
{
	fieldvalue = field.value;
	fieldvalue = fieldvalue.split(" ");

	// 오라클 에러를 발생시키는 ' 를 제거한다.
	var flag = "";
	var eExp= /'/gi;

	field.value = field.value.replace(eExp, flag);

	if(field.value.length + 1 == fieldvalue.length)
	{
		alert(name);
		if (focusMove) field.focus();
		sb.disabled = false;
		return false;
	}
	return true; 
}

// 필수값 체크 (체크박스)
function chkCheckbox(field, name, sb, focusMove)
{
	if (!field.checked)
	{
		alert(name);
		if (focusMove) field.focus();
		sb.disabled = false;
		return false;
	}
	return true; 
}

// 필수값 체크 (라디오박스)
function chkRadio(form, field, errorMSG, sb, focusMove)
{
	fieldname = eval(form.name+"."+field.name);

	for (var i=0 ; i < fieldname.length ; i++)
	{
		if (fieldname[i].checked) return true;
	}

	alert(errorMSG);
	sb.disabled = false;
	return false; 
}

// 두개의 값이 같은지 체크
function chkSame(field, errorMSG, sb, focusMove, scheck)
{
	var svalue = document.getElementById(scheck).value;
	if (field.value != svalue)
	{
		alert(errorMSG);
		if (focusMove) field.focus();
		sb.disabled = false;
		return false;
	}
	return true; 
}

function chkAnded(field, andField, andValue, errorMSG, sb, focusMove)
{
	var svalue = document.getElementById(andField).value;
	if (svalue == andValue && field.value=='')
	{
		alert(errorMSG);
		if (focusMove) field.focus();
		sb.disabled = false;
		return false;
	}
	return true; 
}
