﻿/*
SPADEACE CORE
javascript 
1.0.0.0
*/

//----------------------------------- 문자열 prototype / 시작 -----------------------------------

String.prototype.trim = function() {
	return this.replace(/(^\s*)|(\s*$)/g, "");
}
String.prototype.isNum = function() {
	return (/^[0-9]+$/).test(this);
}
String.prototype.num = function() {
	return (this.trim().replace(/[^0-9]/g, ""));
}
String.prototype.isMobile = function() {
	var arg = arguments[0] ? arguments[0] : "";
	return eval("(/01[016789]" + arg + "[1-9]{1}[0-9]{2,3}" + arg + "[0-9]{4}$/).test(this)");
}


//----------------------------------- 문자열 prototype / 끝 -----------------------------------


//---------------------------------- Layer / 시작 ----------------------------------

//레이어 추가
function FCreateLayer(pLayerID, pIndex, pStyle, pHasShadow)
{
	if(!document.all[pLayerID])
	{
		var vLayerHTML = "" +
			"<div id='" + pLayerID + "' style='position:absolute; overflow:visible; z-index:" + pIndex + "; display:none; " + pStyle + "'>" + 
				"<div id='LayerInnerContent' style='position:absolute; overflow:visible; z-index:" + (pIndex-1) + ";'></div>" + 
				"<div id='LayerInnerShadow' style='position:absolute; overflow:visible; z-index:" + (pIndex-2) + "; filter:progid:DXImageTransform.Microsoft.Blur(PixelRadius=10,MakeShadow=true,ShadowOpacity=0.5);'>" +
					"<div id='InnerShadowContent'></div>" +
				"</div>" +
			"</div>";
			
		document.body.innerHTML += vLayerHTML;
		
		if(!pHasShadow)
			document.all[pLayerID].LayerInnerShadow.style.display = "none";
	}
}

//기존 <div>를 레이어로 사용
function FInitLayer(pLayer, pIndex, pStyle, pHasShadow)
{
	if(pLayer.all["LayerInnerContent"])
		return;
		
	var vLayerHTML = "" +
		"<div id='" + pLayer.id + "' style='position:absolute; overflow:visible; z-index:" + pIndex + "; display:none; " + pStyle + "'>" + 
			"<div id='LayerInnerContent' style='position:absolute; overflow:visible; z-index:" + (pIndex-1) + ";'></div>" + 
			"<div id='LayerInnerShadow' style='position:absolute; overflow:visible; z-index:" + (pIndex-2) + "; filter:progid:DXImageTransform.Microsoft.Blur(PixelRadius=5,MakeShadow=true,ShadowOpacity=0.5);'>" +
				"<table style='position:relative; left:10px; top:10px;'><tr><td><div id='InnerShadowContent' style='width:150%; height:150%'></div></td></tr></table>" +
			"</div>" +
		"</div>";
		
	
	pLayer.outerHTML = vLayerHTML;
}

//레이어에 html 입력
function FLayerSetHTML(pLayerID, pHTML)
{
	document.all[pLayerID].all["LayerInnerContent"].innerHTML = pHTML;
	document.all[pLayerID].all["LayerInnerShadow"].all["InnerShadowContent"].innerHTML = pHTML;
}

//레이어 이동
function FLayerSetPosition(pLayerID, pLeft, pTop)
{
	document.all[pLayerID].style.left = pLeft + document.body.scrollLeft;
	document.all[pLayerID].style.top = pTop + document.body.scrollTop;
}

//레이어 보이기
function FLayerSetShow(pLayerID)
{
	document.all[pLayerID].style.display = "";
}

//레이어 가리기
function FLayerSetHide(pLayerID)
{
	document.all[pLayerID].style.display = "none";
}


//------- 이미지 미리보기 팝업 레이어 표시 부분 / 시작-------
//HTML 안에 <div id="OverImage" style="display:none;"></div> 를 살~ 넣어주자.

var ImgPop_IsShow = false;

var ImgPop_ImageURL;
var ImgPop_ImageTag;

function FOnMouseOver_ThumImg()
{
	ImgPop_IsShow = true;
}

function FOnMouseMove_ThumImg(pBaseDir, pImgName)
{	
	if(!ImgPop_IsShow)
	{
		FLayerSetHide("OverImage");
		return;
	}
	
	FInitLayer(OverImage, 10, "border:solid 1px #555555;", true);
	
	FLayerSetPosition("OverImage", event.clientX + 10, event.clientY + 10);
	
	if(document.all["OverImage"].style.display == "")
		return;
	
	//썸네일은 전부 jpg 파일로 저장된다.
	var vThumbImgName = pImgName.split(".")[0] + ".jpg";
	
	ImgPop_ImageURL = pBaseDir + "/Small/" + vThumbImgName;
	ImgPop_ImageTag = "<img src='" + ImgPop_ImageURL + "' />";
	
	FLayerSetShow("OverImage");
	
	var vRandomTrans = FGetRandomTransIndex();
	FPlayTrans(OverImage.all["LayerInnerContent"], vRandomTrans, 0.3, ImgPop_ImageTag, false)
	FPlayTrans(OverImage.all["LayerInnerShadow"].all["InnerShadowContent"], vRandomTrans, 0.3, ImgPop_ImageTag, false)
}


//이미지 마우스 아웃
function FOnMouseOut_ThumImg()
{
	ImgPop_IsShow = false;
	FLayerSetHide("OverImage");
}

//------- 이미지 미리보기 팝업 레이어 표시 부분 / 끝-------

//---------------------------------- Layer / 끝 ----------------------------------


//------------------ XML / 시작 ----------------------

var XMLDoc = new ActiveXObject("Msxml2.DOMDocument");
XMLDoc.setProperty("SelectionLanguage", "XPath");

//XML 파싱 에러 확인
function FXML_HasError(pXMLString)
{	
	XMLDoc.async = false;
	XMLDoc.loadXML(pXMLString);
	
	if(XMLDoc.parseError.errorCode != 0)
	{
		return true;
	}
	else
	{
		return false;
	}
}

//------------------ XML / 끝 ----------------------

//------------------ 팝업 / 시작 -----------------------

function FCreatePopup(pInnerHTML, pStyle, pPosX, pPosY, pWidth, pHeight, pRelObject)
{
	var DefaultNewPopup = window.createPopup(); //ie5.5

	DefaultNewPopup.document.body.innerHTML = pInnerHTML;
	DefaultNewPopup.document.style = pStyle;

	alert(DefaultNewPopup.document.body.clientWidth);

	if(pRelObject != null)
		DefaultNewPopup.show(pPosX, pPosY, pWidth, pHeight, pRelObject);
	else
		DefaultNewPopup.show(pPosX, pPosY, pWidth, pHeight);
}

//------------------ 팝업 / 끝 -----------------------


//replace 구현
//pSourceString 안에서 pOutString 가 있으면 pInString 로 변환
//무헐헐 정규표현식 replace 가 있었당~ 
function FReplace(pSourceString, pOutString, pInString)
{
	var tempArray = pSourceString.split(pOutString);
	return tempArray.join(pInString);
}

//pMinm, pMax 정수 사이의 임의수 반환
function FGetRandom(pMin, pMax)
{
	return Math.floor((pMax - pMin + 1) * Math.random() + pMin);
}


//10진수 -> 다른진수(pRadix) 변환
function FGetRadix(p10Number, pRadix)
{
	if(isNaN(p10Number))
		return NaN;
		
	if(p10Number == 0)
		return 0;
	
	var OutResult = "";
	
	var Step = Math.abs(p10Number);
	while(Step > 0)
	{
		var vRemain = Step % pRadix;
		var vAddStr = (vRemain > 9) ? 
			String.fromCharCode(55 + vRemain) : vRemain;
		Step = parseInt(Step / pRadix);
		
		OutResult = vAddStr + OutResult;
	}
	
	if(p10Number < 0)
		OutResult = "-" + OutResult;
	
    return OutResult;
}


//왼쪽부터 숫자만큼 문자열 자르기
function FLeft(pString, pLength)
{
	if(pString.length < pLength)
		return "";
	else
		return pString.substr(0, pLength);
}

//오른쪽부터 숫자만큼 문자열 자르기
function FRight(pString, pLength)
{
	if(pString.length < pLength)
	{
		return "";
	}
		
	return pString.substr(pString.length - pLength);
}

//문자검사
//특수문자(_제외) 검출시 false
function FIsWord(p_str)
{
	ptn_space = /\W/;
	if(ptn_space.test(p_str))
	{
		return false;
	}
	return true;	
}

//스페이스만 있거나 비어있는 문자열 검색
//공백이나 공백문자만 있을경우 true
function FIsWhite(p_str)
{
	ptn_space = /\S/;
	if(ptn_space.test(p_str))
	{
		return false;
	}
	return true;	
}

//한문자가 한글인지 검사, 올바른 한글 인지는 알수없다.
//한글문자이면 true 반환
function FIsKoreanChar(pChar)
{
	if( (pChar.charCodeAt() >= 12593) && (pChar.charCodeAt() <= 55203) )
	{
		return true
	}
	return false;
}

//문자열이 전부 한글인지 검사
//한글문자만 있을경우 true
function FIsKoreanString(pStr)
{
	for(var i=0; i<pStr.length; i++)
	{
		if(!FIsKoreanChar(pStr.substr(i,1)))
		{
			return false;
		}
	}
	return true;
}

//한국이름인지 검사, 한글만 포함되고 2자이상 4자이하
//한국이름이면 true
function FIsKoreanName(pStr)
{
	if( (FIsKoreanString(pStr)) && (pStr.length >= 2) && (pStr.length <= 4) )
	{
		return true;
	}
	return false;
}

//문자열에 HTML 태크요소,특수문자(<,>,&)를 검색
//HTML 요소가 있을경우 true
function FHasHTMLChar(pStr)
{
	ptn_HTML = /[<>&]+/;
	if(ptn_HTML.test(pStr))
	{
		return true;
	}
	return false;	
}

//글자가 특수문자(숫자, 영어, 한글, _를 제외한 모든글자)인지 검사
//특수문자이면 true
function FIsSpecialChar(pChar)
{
	if( (!FIsWord(pChar)) && (!FIsKoreanChar(pChar)) )
	{
		return true;
	}
	return false;
}

//문자열에 특수문자가 있는지 검사
//특수문자(숫자, 영문, 한글, _ 를 제외한 모든 글자)가 포함되 있으면 true
function FHasSpecialChar(pStr)
{
	for(var i=0; i<pStr.length; i++)
	{
		if(FIsSpecialChar(pStr.substr(i,1)))
		{
			return true;
		}
	}
	return false;
}

//한문자가 2바이트 문자인지 검사
//2바이트 문자이면 true
function FIs2ByteChar(pChar)
{
	if(pChar.charCodeAt() > 1000)
	{
		return true;
	}
	return false;
}

//문자열의 바이트 크기 반환
//영문,숫자는 1바이트 | 한글,특수문자는 2바이트
function FGetStringByteSize(pStr)
{
	var rtnByteSize = 0;
	for(var i=0; i<pStr.length; i++)
	{
		if(FIs2ByteChar(pStr.substr(i,1)))
		{
			rtnByteSize += 2;
		}
		else
		{
			rtnByteSize += 1;
		}
	}
	return rtnByteSize;
}

//확장자가 이미지 파일인지 검사
//이미지 파일이면 true
var arrImgList = ["gif", "jpeg", "jpg", "tga"];
function FIsImageFile(pUrl)
{
	var extIndex = pUrl.lastIndexOf(".");
	if(extIndex < 1)
		return false;
	for(var i=0; i<arrImgList.length; i++)
	{
		if(pUrl.substr(extIndex + 1) == arrImgList[i])
			return true;	
	}
	return false;
}

//url 확장자가 리스트(/로 구분)에 포함된 것인지 확인
//포함되어 있으면 true
function FIsValidFileExt(pUrl, pExtList)
{
	var arrExtList = pExtList.split("/");
	
	var extIndex = pUrl.lastIndexOf(".");
	if(extIndex < 1)
		return false;
	for(var i=0; i<arrExtList.length; i++)
	{
		if(pUrl.substr(extIndex + 1) == arrExtList[i])
			return true;	
	}
	return false;
}

//숫자검사
//숫자일 경우 true
function FIsNumber(p_value)
{
	if(isNaN(p_value))
		return false;
	return true;
}

//부호없는 숫자 검사
//부호없는 숫자일 경우 true
function FIsUnSignedNumber(p_value)
{
	if(!FIsNumber(p_value))
		return false;
	if( (p_value.indexOf("-") >= 0) || (p_value.indexOf("+") >= 0) )
		return false;
		
	return true;
}


//이메일 검사
function FIsEmail(p_email)
{
	pattern = /[\w]+@[\w]+\.[\w]+/;
	pattern2 = /[^\w@\.-_]/
	if(pattern.test(p_email) && !pattern2.test(p_email))
		return true;
	return false;
}

//인터넷 주소 검사
//http:// 가 처음 부분에 있어야 함.
function FIsURL(pURL)
{
	urlPattern = /http:\/\/[\w]+[\.]+[\w]+/;
	if(urlPattern.test(pURL))
	{
		return true;
	}
	return false;
}

//아이디검사
//소문자와 숫자, _만 허용한다.
function FIsID(p_id)
{
	pattern = /[^_a-z0-9]+/;
	if(pattern.test(p_id))
		return false;
	return true;
}

//문자열 길이 제한
//p_min 보다 짧으면 -1, 길면 1, 허용길이면 0 반환
function FLimitStrLength(p_string, p_min, p_max)
{
	if( (p_min != -1) && (p_string.length < p_min) )
		return -1;
	if( (p_max != -1) && (p_string.length > p_max) )
		return 1;
	return 0;
}

//숫자 크기 제한
//숫자가 아니면 -2, p_min 보다 작으면 -1, 크면 1, 허용값이면 0 반환
function FLimitNumber(p_number, p_min, p_max)
{
	if(!FIsNumber(p_number))
		return -2;
	if( (p_min != -9999) && (p_number < p_min) )
		return -1;
	if( (p_max != -9999) && (p_number > p_max) )
		return 1;
	return 0;
}

//년도확인
//올바른 년도 이면 true
function FIsYear(p_value)
{
	if(!FIsUnSignedNumber(p_value))
		return false;
	if(p_value.length != 4)
		return false;
		
	return true;
}

//월 확인
//올바른 월인 경우 true
function FIsMonth(p_value)
{
	if(!FIsUnSignedNumber(p_value))
		return false;
	var result = FLimitNumber(p_value, 1, 12)
	if(result != 0)
		return false;
		
	return true;
}

//일 확인
//올바른 일인 경우 true
function FIsDay(p_value)
{
	if(!FIsUnSignedNumber(p_value))
		return false;
	var result = FLimitNumber(p_value, 1, 31)
	if(result != 0)
		return false;
		
	return true;
}

//필드의 문자열 길이 검사
function FIsValidFieldLength(pFieldName, pValueName, pMinLength, pMaxLength)
{
	var vFieldValue = document.all[pFieldName].value;
	
	var vResult = FLimitStrLength(vFieldValue, pMinLength, pMaxLength);
	
	var errorMsg;
	
	if(vResult != 0)
	{
		if(vResult == -1)
		{
			errorMsg = 
				"[" + pValueName + "]필드 내용의 길이는 " + pMinLength + " 이상이어야 합니다.";
		}
		if(vResult == 1)
		{
			errorMsg = 
				"[" + pValueName + "]필드 내용의 길이는 " + pMaxLength + " 이하이어야 합니다.";
		}
		
		alert(errorMsg);
		document.all[pFieldName].focus();
		
		return false;
	}
	
	return true;
}

//필드의 숫자 검사
function FIsValidFieldNumber(pFieldName, pValueName, pMin, pMax)
{
	var vFieldValue = document.all[pFieldName].value;
	
	var vResult = FLimitNumber(vFieldValue, pMin, pMax);
	
	if(vResult != 0)
	{
		var errorMsg
		
		if(vResult == -2)
		{
			errorMsg = "[" + pValueName + "]필드의 내용은 숫자만 허용합니다.";
		}
		else if(vResult == -1)
		{
			errorMsg = "[" + pValueName + "]필드의 값은 " + pMin + " 이상이어야 합니다.";
		}
		else if(vResult == 1)
		{
			errorMsg = "[" + pValueName + "]필드의 값은 " + pMax + " 이하이어야 합니다.";
		}
		alert(errorMsg);
		document.all[pFieldName].focus();
		
		return false;
	}
	
	return true;
}

//필드의 확장자 검사
function FIsValidFieldFileExt(pFieldName, pValueName, pExtList)
{
	vFileUrl = document.all[pFieldName].value;
	if(FIsValidFileExt(vFileUrl, pExtList))
	{
		return true;	
	}
	else
	{
		var errorMsg = 
			"[" + pValueName + "]필드에는 (" + pExtList + ")의 확장자를 가진 파일만 입력하세요.";
		alert(errorMsg);
		document.all[pFieldName].focus();
		return false;
	}
}

//다른 필드의 입력 내용 검사
function FIsValidFieldValue(pFieldName, pCompareValue, pValueName, pIsEqual, pMessage)
{
	var vOtherItemValue = document.all[pFieldName].value;
	var vCompareResult = false;
	var vMessage = "[" + pValueName + "]필드는 " + pMessage + " 해야 합니다.";
	
	if(FIsWhite(pCompareValue))
	{
		if(FIsWhite(vOtherItemValue))
		{
			vCompareResult = true;
		}
	}
	else
	{
		if(vOtherItemValue == pCompareValue)
		{
			vCompareResult = true;
		}
	}
	
	if(pIsEqual)
	{
		if(vCompareResult)
		{
			alert(vMessage);
			return false;
		}
		else
		{
			return true;
		}
	}
	else
	{
		if(vCompareResult)
		{
			return true;	
		}
		else
		{
			alert(vMessage);
			return false;	
		}
	}	
}


/*
//아이디 필드 검사
function f_checkID_field(p_field)
{
	if( (p_field.value.length < 6)||(p_field.value.length > 15) )
	{
		alert("아이디는 6자 이상 15자 이내 입니다.");
		p_field.focus();
		return false;
	}

	if(FIsWhite(p_field.value))
	{
		alert("아이디를 입력하세요");
		p_field.focus();
		return false;
	}
	
	tmp_firstChar = p_field.value.substring(0,1)
	if(f_checkDecimal(tmp_firstChar))
	{
		alert("아이디는 숫자로 시작할수 없습니다.");
		p_field.focus();
		return false;
	}
	
	if(!f_checkID(p_field.value))
	{
		alert("아이디는 소문자와 숫자, _ 만으로 입력하세요");
		p_field.focus();
		return false;
	}
	
	return true;
}
*/



//주민번호 검사
function FIsJuminNum(p_juminNum1, p_juminNum2)
{
//p_juminNum1 주민번호 앞번호
//p_juminNum2 주민번호 뒷번호
//올바르면 0
//앞번호 오류 1
//뒷번호 오류 2
//주민번호 조합 오류 3
	
	if(FIsWhite(p_juminNum1))
	{
		alert("주민번호 앞자리를 입력하세요");
		return 1;
	}
	
	if(p_juminNum1.length != 6)
	{
		alert("주민번호 앞자리는 6자리 입니다.");
		return 1;
	}
	
	if(!FIsNumber(p_juminNum1))
	{
		alert("주민번호는 숫자로만 입력하세요");
		return 1;
	}
	
	if(FIsWhite(p_juminNum2))
	{
		alert("주민번호 뒷자리를 입력하세요");
		return 2;
	}
	if(p_juminNum2.length != 7)
	{
		alert("주민번호 뒷자리는 7자리 입니다.");
		return 2;
	}
	if(!FIsNumber(p_juminNum2))
	{
		alert("주민번호는 숫자로만 입력하세요");
		return 2;
	}
	
	v_getNum = p_juminNum1 + '' + p_juminNum2;
	
	v_multNum = '234567892345';
	v_total = 0;
	
	for(i=0; i<12; i++)
	{
		v_total += parseInt(v_getNum.substr(i, 1)) * parseInt(v_multNum.substr(i, 1));
	}
	
	v_keyNum = (11 - v_total % 11) % 10;
		
	
	if (parseInt(v_getNum.substr(12,1)) != v_keyNum)
	{
		alert("주민번호가 올바르지 않습니다.");
		return 3;
	}
		
	return 0;
}

//주민번호 필드 검사
function FIsValidJuminNumField(pJumin1Name, pJumin2Name)
{
	var vJumin1 = document.all[pJumin1Name].value;
	var vJumin2 = document.all[pJumin2Name].value;
	
	var rtnError = FIsJuminNum(vJumin1, vJumin2);
	
	if(rtnError == 1)
	{
		document.all[pJumin1Name].focus();
	}
	else if(rtnError == 2)
	{
		document.all[pJumin2Name].focus();
	}
	else if(rtnError == 3)	
	{
		document.all[pJumin1Name].focus();
	}
	
	if(rtnError > 0)
		return false;
	
	return true;
}

var arErrorMsgList = 
[
	{type:"noEmpty", msg:"내용을 입력하세요."},
	{type:"word", msg:"영문과 _ 외에는 입력할 수 없습니다."},
	{type:"korean", msg:"한글만 입력할 수 있습니다."},
	{type:"koreanName", msg:"2자이상 4자이하의 한국이름만 입력할 수 있습니다."},
	{type:"image", msg:"이미지 파일 경로만 입력할 수 있습니다."},
	{type:"noHTML", msg:"HTML요소(<,>,&)는 입력할 수 없습니다."},
	{type:"noSpecialChar", msg:"특수문자(숫자, 영문, 한글, _를 제외한 모든 문자)는 입력할 수 없습니다."},
	{type:"limitLength", msg:"범위안의 문자수로 입력하세요."},
	{type:"number", msg:"숫자만 입력하세요."},
	{type:"limitNumber", msg:"범위안의 숫자만 입력하세요."},
	{type:"email", msg:"이메일형식에 맞게 입력하세요."},
	{type:"url", msg:"http:// 으로 시작하는 인터넷주소로 입력하세요."},
	{type:"year", msg:"4자리수(ex : 2004)의 년도를 입력하세요."},
	{type:"month", msg:"(1 - 12) 안의 월을 입력하세요."},
	{type:"day", msg:"(1 - 31) 안의 일을 입력하세요."},
	{type:"xmlParse", msg:"Well-Formed Document 규칙을 지켜주세요."}
];

function FGetMessage(p_type, p_valueName)
{
	for(msg in arErrorMsgList)
	{
		if(arErrorMsgList[msg].type == p_type)
			return "[" + p_valueName + "] 필드에 " + arErrorMsgList[msg].msg;
	}
	return "입력내용중 오류가 있습니다.";
}


//필드값 검사
//p_name는 name 속성의 문자열 
function FCheckFormItem(p_name, p_type, p_typeSub, p_valueName, p_msg)
{
	if(document.all[p_name])
	{
		formItem = document.all[p_name];
		itemValue = formItem.value;
		
		message = FGetMessage(p_type, p_valueName);
		var isValid = true;
		
		//기본적으로 빈필드 허용으로 공백은 검사하지 않고 무사통과
		//공백검사 경우에만 공백인가를 검사한다.
		if( (p_type != "noEmpty") && (p_type != "noEmptyIf") && FIsWhite(itemValue) )
			return true;
		
		switch(p_type)
		{
			case "noEmpty" :
				if(FIsWhite(itemValue))
					isValid = false;
					
				break;
									
			case "limitLength" :
				var vMinLength = p_typeSub.split("/")[0];
				var vMaxLength = p_typeSub.split("/")[1];
				if(!FIsValidFieldLength(p_name, p_valueName, vMinLength, vMaxLength))
				{
					isValid = false;
					message = "";				
				}
					
				break;
				
			case "word" :
				if(!FIsWord(itemValue))
					isValid = false;
					
				break;
				
			case "korean" :
				if(!FIsKoreanString(itemValue))
					isValid = false;
					
				break;
				
			case "koreanName" :
				if(!FIsKoreanName(itemValue))
					isValid = false;
					
				break;
				
			case "noHTML" :
				if(FHasHTMLChar(itemValue))
					isValid = false;
					
				break;
				
			case "noSpecialChar" :
				if(FHasSpecialChar(itemValue))
					isValid = false;
					
				break;
				
			case "image" :
				if(!FIsImageFile(itemValue))
					isValid = false;
					
				break;
				
			case "fileExt" :
				if(!FIsValidFieldFileExt(p_name, p_valueName, p_typeSub))
				{
					isValid = false;
					message = "";
				}
					
				break;
				
			case "number" :
				if(!FIsNumber(itemValue))
					isValid = false;
					
				break;
				
			case "limitNumber" :
				var vMin = parseInt(p_typeSub.split("/")[0]);
				var vMax = parseInt(p_typeSub.split("/")[1]);
				if(!FIsValidFieldNumber(p_name, p_valueName, vMin, vMax))
				{
					isValid = false;
					message = "";				
				}
					
				break;
				
			case "year" :
				if(!FIsYear(itemValue))
					isValid = false;
					
				break;
				
			case "month" :
				if(!FIsMonth(itemValue))
					isValid = false;
					
				break;
				
			case "day" :
				if(!FIsDay(itemValue))
					isValid = false;
					
				break;
				
			case "id" :
				if(!FIsID(itemValue))
					isValid = false;
					
				break;
				
			case "email" :
				if(!FIsEmail(itemValue))
					isValid = false;
					
				break;
				
			case "url" :
				if(!FIsURL(itemValue))
					isValid = false;
					
				break;
				
			case "xmlParse" :
				if(FXML_HasError("<test>" + itemValue + "</test>"))
					isValid = false;
					
				break;
				
			case "jumin" :
				if(!FIsValidJuminNumField(p_name, p_typeSub))
				{
					isValid = false;
					message = "";
				}
				break;
			
			case "noEmptyIf" :
				var vOrderItemName = p_typeSub.split("/")[0];
				var vCompareValue = p_typeSub.split("/")[1];
				var vIsEqual = (p_typeSub.split("/")[2] == "equal") ? true : false;
				var vMessage = p_typeSub.split("/")[3];
				if( (FIsWhite(itemValue)) && (!FIsValidFieldValue(vOrderItemName, vCompareValue, p_valueName, vIsEqual, vMessage)) )
				{
					isValid = false;
					message = "";
				}
				break;
			
			case "numberIf" :
				var vOrderItemName = p_typeSub.split("/")[0];
				var vCompareValue = p_typeSub.split("/")[1];
				var vIsEqual = (p_typeSub.split("/")[2] == "equal") ? true : false;
				var vMessage = p_typeSub.split("/")[3];
				if( (!FIsNumber(itemValue)) && (!FIsValidFieldValue(vOrderItemName, vCompareValue, p_valueName, vIsEqual, vMessage)) )
				{
					isValid = false;
					message = "";
				}
				break;
			
			case "limitLengthIf" :
				var vOrderItemName = p_typeSub.split("/")[0];
				var vCompareValue = p_typeSub.split("/")[1];
				var vIsEqual = (p_typeSub.split("/")[2] == "equal") ? true : false;
				var vMinLength = p_typeSub.split("/")[3];
				var vMaxLength = p_typeSub.split("/")[4];
				var vMessage = p_typeSub.split("/")[5];
				if( (FLimitStrLength(itemValue, vMinLength, vMaxLength) != 0) && (!FIsValidFieldValue(vOrderItemName, vCompareValue, p_valueName, vIsEqual, vMessage)) )
				{
					isValid = false;
					message = "";
				}
				break;
			
			case "limitNumberIf" :
				var vOrderItemName = p_typeSub.split("/")[0];
				var vCompareValue = p_typeSub.split("/")[1];
				var vIsEqual = (p_typeSub.split("/")[2] == "equal") ? true : false;
				var vMin = parseInt(p_typeSub.split("/")[3]);
				var vMax = parseInt(p_typeSub.split("/")[4]);
				var vMessage = p_typeSub.split("/")[5];
				if( (FLimitNumber(itemValue, vMin, vMax) != 0) && (!FIsValidFieldValue(vOrderItemName, vCompareValue, p_valueName, vIsEqual, vMessage)) )
				{
					isValid = false;
					message = "";
				}
				break;
				
		}
		
		if(!isValid)
		{
			if(message != "")
			{
				alert(message);
				formItem.focus();
			}
		}
		return isValid;
	}
	else
	{
		return true;
	}
}

/*

testList = 
[
	{name:"txt_name", type:"noEmpty", typeSub:"", valueName:"이름"}, - txt_name 필드는 값을 반드시 넣어야 함
	{name:"txt_name", type:"word", typeSub:"", valueName:"이름"}, - 영문, 숫자, _ 만 허용함
	{name:"txt_name", type:"limitLength", typeSub:"3/4", valueName:"이름"}, - 길이는 3이상 4이하로 제한
	{name:"txt_name", type:"koreanName", typeSub:"", valueName:"이름"},  한글이름
	{name:"file_img", type:"image", typeSub:"", valueName:"이미지"}, 확장자가 이미자파일
	{name:"file_doc", type:"fileExt", typeSub:"txt/doc/hwp", valueName:"문서파일"}, 확장자 지정
	{name:"txt_age", type:"noEmpty", typeSub:"", valueName:"나이"}, - txt_age 반드시 넣어야 함
	{name:"txt_age", type:"number", typeSub:"", valueName:"나이"}, - 숫자만 입력해야 함
	{name:"txt_age", type:"limitNumber", typeSub:"0/100", valueName:"나이"}, - 0이상 100 이하로 제한
	{name:"txt_email", type:"email", typeSub:"", valueName:"이메일"}, - txt_email 필드는 이메일 형식
	{name:"inPassword", type:"noEmptyIf", typeSub:"inIsProtected/Y/[제한]필드가 Yes이므로", valueName:"암호"} - inPassword 필드는 inIsProtected 필드 값이 Y일경우 값을 입력해야 한다.
	{name:"inPassword", type:"numberIfNot", typeSub:"inIsProtected/Y/[제한]필드가 Yes이므로", valueName:"암호"} - inPassword 필드는 inIsProtected 필드 값이 Y가 아닌 경우 숫자여야 한다..
	{name:"txt_jumin1", type:"jumin", typeSub:"txt_jumin2", valueName:""} - txt_jumin1 과 txt_jumin2 는 주민번호
];
폼값검색 조건배열 예

*/

//배열에 등록된 필드의 오류를 검사.
function FCheckForm(p_formItemList)
{
	for(formItem in p_formItemList)
	{
		if(!FCheckFormItem(
				p_formItemList[formItem].name, 
				p_formItemList[formItem].type, 
				p_formItemList[formItem].typeSub, 
				p_formItemList[formItem].valueName
			)
		)
		{
			return false;
		}
	}
	return true;
}


//폼(이름) 확인
//폼값 전송중 2회이상 클릭시 다중 등록 방지
var vIsSending = false;
function FSubmitForm(pFormName, pFormItemList)
{
	var formObj = document.all[pFormName];
	
	FSubmitFormObj(formObj, pFormItemList);
}

//폼(오브젝트) 확인
function FSubmitFormObj(pFormObj, pFormItemList)
{
	if(!vIsSending)
	{
		if( (FCheckForm(pFormItemList)) || (pFormItemList == "") || (pFormItemList == null) )
		{
			vIsSending = true;
	
			FShowTransportMessage();
			
			pFormObj.submit();
		}
	}
	else
	{
		//alert("처리중입니다. 잠시 기다리세요."); //헉.. ATM 메시지당..
	}
}

//폼 enctype="multipart/form-data" 설정
function FSetFormEnctype()
{
	document.forms[0].enctype="multipart/form-data";
}

//체크박스 전체선택하기
function FSelectAllCheckBox(pName)
{
	var chkBoxs = document.all[pName];
	
	if(!chkBoxs)
		return;
		
	if(chkBoxs.length)
	{
		var AllChecked = true;
		
		for(i=0; i<chkBoxs.length; i++)
		{
			if(!chkBoxs[i].checked)
			{
				AllChecked = false;
				break;
			}
		}
		
		for(i=0; i<chkBoxs.length; i++)
		{
			if(AllChecked)
				chkBoxs[i].checked = false;
			else
				chkBoxs[i].checked = true;
		}
	}
	else
	{
		chkBoxs.checked = !chkBoxs.checked;
	}
}


//체크한 체크박스의 값들 가져오기
function FGetCheckedBoxValue(pName)
{
	var SelBoardID = document.all[pName];
		
	if(!SelBoardID)
		return "";
	
	var ReturnValue = "";	
		
	if(SelBoardID.length)
	{
		for(i=0; i<SelBoardID.length; i++)
		{
			if(SelBoardID[i].checked)
			{
				ReturnValue += "," + SelBoardID[i].value;
			}
		}
		
		ReturnValue = ReturnValue.substr(1);
	}
	else
	{
		if(SelBoardID.checked)
			ReturnValue = SelBoardID.value;
	}
	
	return ReturnValue;
}


//이미지 크기 조정하기
function FSetImageWidth(pImgName, pMaxWidth)
{
	for(i=0; i<document.images.length; i++)
	{
		if(document.images[i].name == pImgName)
		{
			if(document.images[i].width > pMaxWidth)
			{
				document.images[i].width = pMaxWidth;
			}
		}
	}
}


//-------------------------------------------------------------
//모달, 모델리스
//window.showModelessDialog("SMLD_target.htm","Dialog Arguments Value","dialogHeight: 746px; dialogWidth: 285px; dialogTop: 218px; dialogLeft: 592px; edge: Raised; center: Yes; help: Yes; resizable: Yes; status: Yes;");


function OpenModalPopup(pURL, pArguments, pFeatures)
{
	return window.showModalDialog(pURL, pArguments, pFeatures);

}

function OpenModelessPopup(pURL, pArguments, pFeatures)
{
	return window.showModelessDialog(pURL, pArguments, pFeatures);
}



//-------------------------------------------------------------



//-------------------------------------------------------------
//창열기

function OpenZipCode()
{
	open("/_Common/Popup/ZipCode.aspx", "OpenZipCode", "width=400, height=150");
}



function OpenSearchID()
{
	open("/_Common/Popup/SearchID.aspx", "OpenZipCode", "width=300, height=150");
}



//---------------------------------------------------------------