/**
 *@author rbingsin
 */

/**
 ******************************************************************************
 * String Method
 ******************************************************************************
 */
	/**
	 *
	 * 앞뒤 공백 제거
	 *
	 * @param {Object} s : 문자열
	 */
	function fxTrim(s)
	{
		return s.replace(/^\s*/ ,"").replace(/\s*$/ ,"");
	}

	/**
	 *
	 * 앞쪽 공백 제거
	 *
	 * @param {Object} s : 문자열
	 */
	function fxLTrim(s)
	{
		return s.replace(/^\s*/ ,"");
	}

	/**
	 *
	 * 뒤쪽 공백 제거
	 *
	 * @param {Object} s : 문자열
	 */
	function fxRTrim(s)
	{
		return s.replace(/\s*$/ ,"");
	}

	/**
	 *
	 * 문자열 안에 조회 할 문자열의 개수를 리턴
	 *
	 * @param {Object} s : 전체 문자열
	 * @param {Object} w : 검사할 문자열
	 */
	function fxWordCount(s, w)
	{
		var c = 0;
		var sp;
		var lw = w.length;
		while(s.indexOf(w) > -1)
		{
			c++;
			sp = s.indexOf(w);
			ls = s.length;
			s = s.substr(0, sp) + s.substr(sp + lw, ls);
		}

		return c;
	}

	function fxSetToolTip(o)
	{
		o.T_BGCOLOR='#FEFCE1';
		o.T_PADDING=5;
		o.T_DELAY=0;
		o.T_BORDERWIDTH=1;
		o.T_FONTFACE='돋움';
		o.T_FONTSIZE='9pt';
		o.T_FONTCOLOR='#4C4C4C';
		o.T_BORDERCOLOR='#C1C1C1';
	}

/**
 ******************************************************************************
 * Number Method
 ******************************************************************************
 */
	/**
	 *
	 * 반올림
	 *
	 * @param {Object} v : 반올림 할 값
	 * @param {Object} p : 반올림 할 자리수
	 */
	function fxRoundPrecision(v, p)
	{
		var x = Math.pow(10, p);
		return Math.round(v * x) / x;
	}

	/**
	 *
	 * 백분율
	 *
	 * @param {Object} n : 분자
	 * @param {Object} d : 분모
	 * @param {Object} p : 반올림 할 소수점 자리수
	 */
	function fxPercent(n, d, p)
	{
		return fxRoundPrecision(n / d * 100, p)
	}

/**
 ******************************************************************************
 * Date Method
 ******************************************************************************
 */


/**
 ******************************************************************************
 * Object Control Method
 ******************************************************************************
 */
	/**
	 *
	 * element가 존재하는지 검사
	 *
	 * @param {Object} obj
	 */
	function fxIsDefined(o)
	{
		return o != undefined ? true : false;
	}

	/**
	 *
	 * 폼element 내의 element수 검사
	 *
	 * @param {Object} f : 폼element
	 * @param {Object} n : 검사할 element명
	 */
	function fxElementCount(f, n)
	{
		var c = 0;
		for(var i = 0; i < f.elements.length; i++)
			if(n == f.elements[i].name)	c++;

		return c;
	}

	/**
	 *
	 * element의 배열값을 문자열로 변환
	 *
	 * @param {Object} f : 폼element
	 * @param {Object} n : element명
	 * @param {Object} d : 구분문자
	 */
	function fxElementsToString(f, n, d)
	{
		var r = "";
		for(var i = 0; i < f.elements.length; i++)
			if(n == f.elements[i].name) r += f.elements[i].value + d;

		if(r.length > 0) r = r.substr(0, r.length - d.length);

		return r;
	}

	/**
	 *
	 * element의 배열값을 디비문자열로 변환
	 *
	 * @param {Object} f : 폼element
	 * @param {Object} n : element명
	 */
	function fxElementsToDBString(f, n)
	{
		var r = "";
		for(var i = 0; i < f.elements.length; i++)
			if(n == f.elements[i].name) r += "'" + f.elements[i].value + "',";

		if(r.length > 0) r = r.substr(0, r.length - 1);

		return r;
	}

	/**
	 *
	 * 팝업 중앙에 띄우기
	 *
	 * @param {Object} u : 이동할 URL
	 * @param {Object} p : 팝업타겟명
	 * @param {Object} w : 가로사이즈
	 * @param {Object} h : 세로사이즈
	 * @param {Object} s : 스크롤사용여부(yes/no)
	 */
	function fxPopCenter(u, p, w, h, s)
	{
		var winl = (screen.width - w) / 2;
		var wint = (screen.height - h) / 2;

		opt = 'height=' + h + ',width=' + w + ',top=' + wint + ',left=' + winl + ',scrollbars=' + s + ',resizable=no';
		w = window.open(u, p, opt)

		if (parseInt(navigator.appVersion) >= 4)
			w.window.focus();
	}

	/**
	 *
	 * 선택된 체크박스의 문자열정보 리턴
	 *
	 * @param {Object} f : 폼element
	 * @param {Object} n : 체크박스element명
	 * @param {Object} d : 구분문자열
	 */
	function fxCheckValues(f, n, d)
	{
		var r = "";
		for (var i = 0; i < f.elements.length; i++)
		{
			var e = f.elements[i];
			if (n == e.name && e.checked) r += e.value + d;
		}

		if (r.length > 0) r = r.substr(0, r.length - d.length);

		return r;
	}

	/**
	 *
	 * 폼element 내의 선택된 checkbox수 검사
	 *
	 * @param {Object} f : 폼element
	 * @param {Object} n : checkbox element명
	 */
	function fxCheckCount(f, n)
	{
		var c = 0;
		for(var i = 0; i < f.elements.length; i++)
			if(n == f.elements[i].name && f.elements[i].checked) c++;

		return c;
	}

	/**
	 *
	 * 폼element 내의 선택된 checkbox나 radio의 선택여부 검사
	 *
	 * @param {Object} f : 폼element
	 * @param {Object} n : checkbox, radio element명
	 */
	function fxIsChecked(f, n)
	{
		var c = 0;
		for(var i = 0; i < f.elements.length; i++)
			if(n == f.elements[i].name && f.elements[i].checked)
				return true;

		return false;
	}

	/**
	 *
	 * 체크박스 전체선택/전체해제
	 *
	 * @param {Object} e : 전체선택/해제용 체크박스
	 * @param {Object} f : 폼element
	 * @param {Object} n : 전체선택/해제할 체크박스명
	 */
	function fxToggleAll(e, f, n)
	{
		if (e.checked) fxCheckAll(f, n);
		else fxClearAll(f, n);
	}

	/**
	 *
	 * 체크박스 전체해제
	 *
	 * @param {Object} f : 폼element
	 * @param {Object} n : 전체해제할 체크박스명
	 */
	function fxClearAll(f, n)
	{
		for (var i = 0; i < f.elements.length; i++)
			if (n == f.elements[i].name) f.elements[i].checked = false;
	}

	/**
	 *
	 * 체크박스 전체선택
	 *
	 * @param {Object} f : 폼element
	 * @param {Object} n : 전체선택할 체크박스명
	 */
	function fxCheckAll(f, n)
	{
		for (var i = 0; i < f.elements.length; i++)
			if (n == f.elements[i].name) f.elements[i].checked = true;
	}

	function fxControlSession(url)
	{
		alert("로그인 후에 이용해 주세요.");
		var to = top.opener;
		var to2;
		if(to == "[object]")
		{
			// 상위의 오프너페이지가 닫혀진 경우에는 자신의 페이지만 닫고 종료하도록 예외처리
			try
			{
				// 오프너페이지가 있는 경우
				while (to == "[object]")
				{
					to2 = to.top.opener

					// 오프너페이지의 오프너페이지가 있는 경우
					if (to2 == "[object]")
					{
						// 오프너페이지가 프레임인 경우
						if(to.parent == "[object]")
							to.parent.close();	// 오프너페이지가 프레임인 경우 프레임 상위에서 창을 닫는다.
						else	// 오프너페이지가 프레임이 아닌 경우
							to.close();			// 오프너페이자가 프레임이 아닌 경우는 그냥 창을 닫는다.
					}
					else	// 오프너페이지의 오프너가 없는 경우에는
					{
						// 오프너페이지가 프레임인 경우 상위의 페이지를 지정한 주소로 이동
						if(to.parent == "[object]")
							to.parent.location.href = url;
						else	// 오프너페이지가 프레임이 아닌 경우 지정한 주소로 이동
							to.location.href = url;
					}

					to = to2;	// 상위의 오프너페이지가 없을 때까지 루프를 돌면서 체크
				}

				// 현재 창이 프레임인 경우 상위에서 창을 닫는다.
				if (top.parent == "[object]")
					top.parent.self.close();
				else	// 현재 창이 프레임이 아닌 경우 창을 닫는다.
					top.self.close();
			}
			catch (e)
			{
				// 상위의 오프너페이지가 닫혀진 경우 현재 창만 닫고 끝낸다.
				if (top.parent == "[object]")
					top.parent.self.close();
				else
					top.self.close();
			}
		}
		else if(top.parent == "[object]")	// 프레임인 경우 상위페이지에서 지정한 주소로 이동
		{
			top.location.href = url;
		}
		else	// 현재 페이지에서 지정한 주소로 이동
		{
			location.href = url;
		}
	}

	function fxSubmit(fobj, act, tar, enc)
	{
		var preEncoding = fobj.encoding;
		var preAction = fobj.action;
		var preTarget = fobj.target;

		fobj.encoding = enc;
		fobj.action = act;
		fobj.target = tar;
		fobj.submit();

		fobj.encoding = preEncoding;
		fobj.action = preAction;
		fobj.target = preTarget;
	}

/**
 ******************************************************************************
 * Paging Method
 ******************************************************************************
 */
	/**
	 *
	 * 페이지 이동
	 *
	 * @param {Object} p : 이동할 페이지
	 * @param {Object} f : 폼element
	 * @param {Object} pn : 페이지element명
	 */
	function fxSubmitPaging(p, f, pn)
	{
		var pobj = eval("f." + pn);

		if (pobj == undefined)
		{
			var pageobj = document.createElement("input");
			pageobj.type = "hidden";
			pageobj.name = pn;
			pageobj.value = p;

			f.appendChild(pageobj);
		}
		else
			pobj.value = p;

		f.submit();
	}

/**
 ******************************************************************************
 * Form Data Check Method
 ******************************************************************************
 */
	var xmlHttp;
	var xes;
	var frm;

	function fxCreateXMLHttpRequest()
	{
		if (window.ActiveXObject)
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		else if (window.XMLHttpRequest)
			xmlHttp = new XMLHttpRequest();
	}

	function fxInitValidationXml(pagename, frm)
	{
		this.frm = frm;
		fxCreateXMLHttpRequest();
		xmlHttp.onreadystatechange = fxHandleStateChange;
		xmlHttp.open("GET", pagename + ".xml", true);
		xmlHttp.send(null);
	}

	function fxHandleStateChange()
	{
		if(xmlHttp.readyState == 4)
		{
			if(xmlHttp.status == 200)
			{
				xmlDoc = xmlHttp.responseXML;
				xes = xmlDoc.getElementsByTagName("element");

				for(var i = 0; i < xes.length; i++)
				{
					xe = xes[i];
					datatype = xe.getAttribute("datatype");

					if(datatype != "file")
					{
						try
						{
							ele = eval("frm." + xe.getAttribute("name"));
							ele.setAttribute("required", xe.getAttribute("required"));
							ele.setAttribute("label", xe.getAttribute("label"));
							ele.setAttribute("datatype", xe.getAttribute("datatype"));
							ele.setAttribute("dateformat", xe.getAttribute("dateformat"));
							ele.setAttribute("chartype", xe.getAttribute("chartype"));
							ele.setAttribute("maxlen", xe.getAttribute("maxlen"));
							ele.setAttribute("minlen", xe.getAttribute("minlen"));
							ele.setAttribute("charfilter", xe.getAttribute("charfilter"));
							ele.setAttribute("filetype", xe.getAttribute("filetype"));
							ele.setAttribute("decimalpoint", xe.getAttribute("decimalpoint"));
							ele.setAttribute("minvalue", xe.getAttribute("minvalue"));
							ele.setAttribute("maxvalue", xe.getAttribute("maxvalue"));
							ele.setAttribute("beforedateobj", xe.getAttribute("beforedateobj"));
							ele.setAttribute("afterdateobj", xe.getAttribute("afterdateobj"));
							ele.setAttribute("duplicatedate", xe.getAttribute("duplicatedate"));
						}
						catch(e)
						{
							if(xe.getAttribute("optional") == "false")
								alert(xe.getAttribute("name") + " 항목은 객체가 아니거나 사용되지 않는 객체입니다.");
						}
					}
				}
			}
			else
				alert("Ajax Response Error");
		}
	}

	/**
	 *
	 * 폼하위의 모든 element에 대해서 입력 또는 선택여부체크
	 *
	 * @param {Object} f : 폼
	 */
	function fxValidteFormElement(f)
	{
		var msg = "";
		var addfiles = "";
		var deletefiles = "";

		// xmlDoc가 null이면 초기화 스크립트 누락
		if(xes == null)	return "xmlDoc Init Error";

		for(var i = 0; i < xes.length; i++)
		{
			xe = xes[i];
			required = xe.getAttribute("required");
			label = xe.getAttribute("label");
			datatype = xe.getAttribute("datatype");
			elementname = xe.getAttribute("name");

			// 첨부파일 필수체크
			if(datatype == "file")
			{
				fcnt = eval(elementname + ".fnGetFileCount()");

				if(fcnt == 0 && required == "true")
				{
					return "[" + label + "]항목을 등록해 주세요.";
				}
				else
				{
					if(addfiles == "")
						addfiles = eval(elementname + ".fnGetAddFileList()");
					else
						addfiles += "," + eval(elementname + ".fnGetAddFileList()");

					if(deletefiles == "")
						deletefiles = eval(elementname + ".fnGetDeleteFileList()");
					else
						deletefiles += "," + eval(elementname + ".fnGetDeleteFileList()");
				}
			}
			else
			{
				fe = eval("f." + elementname);
				if(fe != undefined)
				{
					fe.value = fxTrim(fe.value);

					if(required == "true" && fe.disabled == false && fe.style.display != "none")
					{
						// 각각의 obj타입별 체크
						if((fe.type == "checkbox" || fe.type == "radio") && !fxIsChecked(f, fe.name))
						{
							return "[" + label + "] 항목을 선택하지 않았습니다. 선택해 주세요.";
						}
						else if((fe.type == "select-one" || fe.type == "select-multiple") && fe.value == "")
						{
							fe.focus();
							return "[" + label + "] 항목을 선택하지 않았습니다. 선택해 주세요.";
						}
						else if(fe.type == "file" && fe.value == "")
						{
							fe.focus();
							return "[" + label + "] 항목을 선택하지 않았습니다. 선택해 주세요.";
						}
						else if(fe.value == "")
						{
							fe.focus();
							return "[" + label + "] 항목을 입력하지 않았습니다. 입력해 주세요.";
						}
					}

					msg = fxValidteElement(f, fe);
				}
			}

			if(msg != "") return msg;
		}

		// 등록,삭제파일코드 hiddenelement 등록
		var addhidden = document.createElement("input");
		addhidden.type = "hidden";
		addhidden.name = "AddFiles";
		addhidden.value = addfiles;
		f.appendChild(addhidden);

		var deletehidden = document.createElement("input");
		deletehidden.type = "hidden";
		deletehidden.name = "DeleteFiles";
		deletehidden.value = deletefiles;
		f.appendChild(deletehidden);

		// 날짜타입 디비입력상태로 변경
		for(var i = 0; i < xes.length; i++)
		{
			xe = xes[i];
			datatype = xe.getAttribute("datatype");
			elementname = xe.getAttribute("name");

			if(datatype == "date")
			{
				fe = eval("f." + elementname);
				fe.value = fxConvertDefaultDateFormat(fe.value, fe.getAttribute("dateformat"));
			}
		}

		return msg;
	}

	/**
	 *
	 * 각 폼안의 element별 데이타 체크
	 *
	 * @param {Object} f : 폼element
	 * @param {Object} fe : 폼내의 element
	 */
	function fxValidteElement(f, fe)
	{
		if(fe.style.display == "none") return "";

		var msg = "";																// 리턴메세지(오류메세지)
		var datatype =			fe.getAttribute("datatype");						// 데이타 타입 설정(string, date, integer, +integer, -integer, float, +float, -float)
		var chartype =			fe.getAttribute("chartype");						// 문자 타입 설정(kor, eng, num)
		var label =				fe.getAttribute("label");							// 메세지에 사용할 오브젝트명
		var maxlen =			fe.getAttribute("maxlen");						// 문자열인 경우 최대길이
		var minlen =			fe.getAttribute("minlen");						// 문자열인 경우 최소길이
		var charfilter =		fe.getAttribute("charfilter");						// 필터링단어('||'를 구분자로 이용)
		var filetype =			fe.getAttribute("filetype");						// 파일확장자설정
		var decimalpoint =		fe.getAttribute("decimalpoint");					// 실수인 경우 소숫점설정
		var minvalue =			fe.getAttribute("minvalue");						// 숫자타입인 경우 최소값 설정
		var maxvalue =			fe.getAttribute("maxvalue");						// 숫자타입인 경우 최대값 설정
		var beforedate =		fe.getAttribute("beforedate");						// 선택날짜와 비교할 이전날짜
		var afterdate =			fe.getAttribute("afterdate");						// 선택날짜와 비교할 이후날짜
		var beforedateobj =		fe.getAttribute("beforedateobj");					// 선택날짜와 비교할 이전날짜 element명
		var afterdateobj =		fe.getAttribute("afterdateobj");					// 선택날짜와 비교할 이후날짜 element명
		var duplicatedate =		fe.getAttribute("duplicatedate");					// 겹치는 날짜에 대한 처리조건
		var dateformat =		fe.getAttribute("dateformat");						// 날짜포멧

		// 문자열 입력값 체크
		if(fe.value != "" && datatype == "string")
		{
			// 입력가능문자열타입 체크(영문,한글,숫자)
			if(chartype != null && chartype.length > 0)
			{
				var kor = /^[ㄱ-힣]{1,}$/;
				var eng = /^[a-zA-Z]{1,}$/;
				var num = /^[\d]{1,}$/;
				var koreng = /^[a-zA-Zㄱ-힣]{1,}$/;
				var kornum = /^[\dㄱ-힣]{1,}$/;
				var engnum = /^[a-zA-Z\d]{1,}$/;
				var korengnum = /^[a-zA-Z\dㄱ-힣]{1,}$/;

				var searchCnt = 0;

				if(chartype.indexOf("kor",0) > -1) searchCnt = 1;
				if(chartype.indexOf("eng",0) > -1) searchCnt += 3;
				if(chartype.indexOf("num",0) > -1) searchCnt += 5;

				switch(searchCnt)
				{
					case 1 : kor.test(fe.value) ? "" : msg = label + "에는 한글만 입력할 수 있습니다."; break;
					case 3 : eng.test(fe.value) ? "" : msg = label + "에는 영문만 입력할 수 있습니다."; break;
					case 5 : num.test(fe.value) ? "" : msg = label + "에는 숫자만 입력할 수 있습니다."; break;
					case 4 : koreng.test(fe.value) ? "" : msg = label + "에는 한글과 영문만 입력할 수 있습니다."; break;
					case 6 : kornum.test(fe.value) ? "" : msg = label + "에는 한글과 숫자만 입력할 수 있습니다."; break;
					case 8 : engnum.test(fe.value) ? "" : msg = label + "에는 영문과 숫자만 입력할 수 있습니다."; break;
					case 9 : korengnum.test(fe.value) ? "" : msg = label + "에는 한글,영문과 숫자만 입력할 수 있습니다."; break;
				}

				if(msg != "")
				{
					fe.focus();
					return msg;
				}
			}

			// 최대입력문자자릿수 체크
			if(maxlen != null && parseInt(maxlen) > 0 && fe.value.length > parseInt(maxlen))
			{
				fe.focus();
				return label + "에는 " + maxlen + "자리 이상 입력할수 없습니다.";
			}

			// 최소입력문자자릿수 체크
			if(minlen != null && parseInt(minlen) > 0 && fe.value.length < parseInt(minlen))
			{
				fe.focus();
				return label + "에는 " + minlen + "자리 이상 입력해야 합니다.";
			}

			// 필터링할 문자체크
			if(charfilter != null && charfilter.length > 0)
			{
				var strArr = charfilter.split("||");

				for(var i = 0; i < strArr.length; i++)
				{
					chkChar = strArr[i];

					if(chkChar != "" && fe.value.indexOf(chkChar,0) > -1)
					{
						fe.focus();
						return label + "에는 '" + chkChar + "' 의 문자는 입력하실 수 없습니다.";
					}
				}
			}
		}

		// 파일업로드 입력값 체크
		if(fe.type == "file" && fe.value != "" && filetype != null && filetype != "")
		{
			// 업로드가능한 파일타입체크
			var fname = fe.value;
			var fDot = fname.lastIndexOf(".") + 1;
			var ftype = fname.substring(fDot).toUpperCase();

			if(filetype.toUpperCase().indexOf(ftype,0) == -1)
			{
				fe.focus();
				return "업로드 할 수 없는 파일타입입니다.";
			}
		}

		// 숫자타입 입력값 체크
		if(fe.value.length > 0 && (datatype.indexOf("integer") > -1 || datatype.indexOf("float") > -1))
		{
			if(datatype == "+integer")
			{
				regExp = /^(\+|\d*)\d+$/;
				msg = label + "에는 양의 정수만 입력할 수 있습니다.";
			}
			else if(datatype == "-integer")
			{
				regExp = /^(\-\d*)\d+$/;
				msg = label + "에는 음의 정수만 입력할 수 있습니다.";
			}
			else if(datatype == "integer")
			{
				regExp = /^(\-|\+|\d*)\d+$/;
				msg = label + "에는 정수만 입력할 수 있습니다.";
			}
			else if(datatype == "+float")
			{
				regExp = /^(\+|\d*)\d+(\.|\d*)\d*$/;
				msg = label + "에는 양의 실수만 입력할 수 있습니다.";
			}
			else if(datatype == "-float")
			{
				regExp = /^(\-\d*)\d+(\.|\d*)\d*$/;
				msg = label + "에는 음의 실수만 입력할 수 있습니다.";
			}
			else if(datatype == "float")
			{
				regExp = /^(\-|\+|\d*)\d+(\.|\d*)\d*$/;
				msg = label + "에는 실수만 입력할 수 있습니다.";
			}

			if(regExp.test(fe.value))
			{
				fe.value = parseFloat(fe.value);
				msg = "";
			}
			else
			{
				fe.focus();
				return msg;
			}

			// 소숫자리 체크
			if(!isNaN(decimalpoint))
			{
				var len = -1;

				if(fe.value.indexOf(".") >= 0)
					len = fe.value.substring(fe.value.indexOf(".") + 1).length;

				if(len > parseInt(decimalpoint))
				{
					fe.focus();
					return label + "에는 소수점 " + decimalpoint + "자리까지 입력해 주세요.";
				}
			}

			// 최소값 체크
			if(!isNaN(minvalue) && parseFloat(fe.value) < parseFloat(minvalue))
			{
				fe.focus();
				return label + "에는 " + parseFloat(minvalue) + "보다 같거나 큰값을 입력해 주세요.";
			}

			// 최대값 체크
			if(!isNaN(maxvalue) && parseFloat(fe.value) > parseFloat(maxvalue))
			{
				fe.focus();
				return label + "에는 " + parseFloat(maxvalue) + "보다 같거나 작은값을 입력해 주세요.";
			}
		}

		// 날짜체크
		if(fe.value.length > 0 && datatype == "date")
		{
			// 날짜 유효성 체크 (년/월/일에 대한 유효성 체크)
			if(!fxIsDate(fe))
			{
				fe.value = "";
				fe.focus();
				return "[" + label + "] 항목은 올바른 날짜 형식이 아닙니다. [" + dateformat + "] 형식으로 등록해 주세요.";
			}

			// 날짜 체크(이전날짜(beforedate)나 이후날짜(afterdate)가 있는 해당 아이디에 대해서 체크한다)
			if(beforedate != null && beforedate.length > 0)
			{
				var preDate = fxConvertDefaultDateFormat(beforedate, dateformat);			// 비교할 이전날짜
				var toDate = fxConvertDefaultDateFormat(fe.value, dateformat);							// 비교할 선택날짜

				// 겹치는 날짜체크 옵션(duplicatedate)
				if(duplicatedate == "false")
				{
					if(parseFloat(preDate) >= parseFloat(toDate))
						return "[" + label + "] 항목은 '" + beforedate + "' 보다 이후 날짜를 선택하셔야 합니다.";
				}
				else
				{
					if(parseFloat(preDate) > parseFloat(toDate))
						return "[" + label + "] 항목은 '" + beforedate + "' 보다 같거나 이후 날짜를 선택하셔야 합니다.";
				}
			}
			else if(beforedateobj != null && beforedateobj.length > 0)
			{
				var beforedateobj = eval("f." + beforedateobj);
				var beforedateformat = beforedateobj.getAttribute("dateformat");
				var beforedatename = beforedateobj.getAttribute("label");

				if (!fxCompareFormat(beforedateformat, dateformat)) return "비교할 날짜와 날짜형식이 일치하지 않습니다.";

				var preDate = fxConvertDefaultDateFormat(beforedateobj.value, beforedateformat);			// 비교할 이전날짜
				var toDate = fxConvertDefaultDateFormat(fe.value, dateformat);											// 비교할 선택날짜

				// 겹치는 날짜체크 옵션(duplicatedate)
				if(duplicatedate == "false")
				{
					if(parseFloat(preDate) >= parseFloat(toDate))
						return "[" + label + "] 항목은 '" + beforedatename + "' 보다 이후 날짜를 선택하셔야 합니다.";
				}
				else
				{
					if(parseFloat(preDate) > parseFloat(toDate))
						return "[" + label + "] 항목은 '" + beforedatename + "' 보다 같거나 이후 날짜를 선택하셔야 합니다.";
				}
			}

			if(afterdate != null && afterdate.length > 0)
			{
				var afterDate = fxConvertDefaultDateFormat(afterdate, dateformat);				// 비교할 이전날짜
				var toDate = fxConvertDefaultDateFormat(fe.value, dateformat);							// 비교할 선택날짜

				// 겹치는 날짜체크 옵션(duplicatedate)
				if(duplicatedate == "false")
				{
					if(parseFloat(afterDate) <= parseFloat(toDate))
						return "[" + label + "] 항목은 '" + afterdate + "' 보다 이전 날짜를 선택하셔야 합니다.";
				}
				else
				{
					if(parseFloat(afterDate) < parseFloat(toDate))
						return "[" + label + "] 항목은 '" + afterdate + "' 보다 같거나 이전 날짜를 선택하셔야 합니다.";
				}
			}
			else if(afterdateobj != null && afterdateobj.length > 0)
			{
				var afterdateobj = eval("f." + afterdateobj);
				var afterdateformat = afterdateobj.getAttribute("dateformat");
				var afterdatename = afterdateobj.getAttribute("label");

				if (!fxCompareFormat(afterdateformat, dateformat)) return "비교할 날짜와 날짜형식이 일치하지 않습니다.";

				var afterDate = fxConvertDefaultDateFormat(afterdateobj.value, afterdateformat);			// 비교할 이전날짜
				var toDate = fxConvertDefaultDateFormat(fe.value, dateformat);											// 비교할 선택날짜

				// 겹치는 날짜체크 옵션(duplicatedate)
				if(duplicatedate == "false")
				{
					if(parseFloat(afterDate) <= parseFloat(toDate))
						return "[" + label + "] 항목은 '" + afterdatename + "' 보다 이전 날짜를 선택하셔야 합니다.";
				}
				else
				{
					if(parseFloat(afterDate) < parseFloat(toDate))
						return "[" + label + "] 항목은 '" + afterdatename + "' 보다 같거나 이전 날짜를 선택하셔야 합니다.";
				}
			}
		}

		return msg;
	}

	// 날짜 유효성 체크
	function fxIsDate(fe)
	{
		var flag = true;
		var msg = "";

		var iYear = 0;
		var iMonth = 0;
		var iDay = 0;
		var iDaysInMonth = null;
		var iHour = -1;
		var iMinute = -1;

		var sDateFormat = fe.getAttribute("dateformat");			// yyyy : 년도, mm : 월, dd : 일, hh : 시간, mi : 분
		var aDaysInMonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

		// 포멧과 비교할 날짜 길이가 같지 않다면 false 리턴
		if(sDateFormat.length != fe.value.length) return false;
		iYear  = fe.value.substring(sDateFormat.indexOf("yyyy"), sDateFormat.indexOf("yyyy") + 4);
		iMonth  = fe.value.substring(sDateFormat.indexOf("MM"), sDateFormat.indexOf("MM") + 2);
		iDaysInMonth = (iMonth != 2) ? aDaysInMonth[iMonth-1] : (( iYear%4 == 0 && iYear%100 != 0 || iYear % 400==0 ) ? 29 : 28 );
		iDay  = fe.value.substring(sDateFormat.indexOf("dd"), sDateFormat.indexOf("dd") + 2);

		if(isNaN(iYear) || isNaN(iMonth) || isNaN(iDay)) return false;

		if(iYear < 1 || iYear > 9999 || iMonth > 12 || iMonth < 1 || iDay < 1 || iDay > iDaysInMonth) return false;

		return true;
	}

	// 비교할 날짜의 날짜 포멧이 일치하는지 검사
	function fxCompareFormat(fm1, fm2)
	{
		if((fm1.indexOf("yyyy") + 1) * (fm2.indexOf("yyyy") + 1) == 0) return false;
		if((fm1.indexOf("MM") + 1) * (fm2.indexOf("MM") + 1) == 0) return false;
		if((fm1.indexOf("dd") + 1) * (fm2.indexOf("dd") + 1) == 0) return false;

		return true;
	}

	// yyyyMMdd 형태로 반환
	function fxConvertDefaultDateFormat(ds, df)
	{
		var rtnStr = "";

		if(df.indexOf("yyyy") > -1)
			rtnStr = ds.substring(df.indexOf("yyyy"), df.indexOf("yyyy") + 4);

		if(df.indexOf("MM") > -1)
			rtnStr += ds.substring(df.indexOf("MM"), df.indexOf("MM") + 2);

		if(df.indexOf("dd") > -1)
			rtnStr += ds.substring(df.indexOf("dd"), df.indexOf("dd") + 2);

		return rtnStr;
	}


// 플래시
// flashWrite(파일경로, 가로, 세로, 아이디)
function flashWrite(url,w,h,id){

	// 플래시 코드 정의
	var flashStr=
	"<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0' width='"+w+"' height='"+h+"' id='"+id+"' align='middle'>"+
	"<param name='allowScriptAccess' value='always' />"+
	"<param name='movie' value='"+url+"' />"+
	"<param name='menu' value='false' />"+
	"<param name='quality' value='high' />"+
	"<param name='wmode' value='transparent' />"+
	"<embed src='"+url+"' menu='false' quality='high' wmode='transparent' width='"+w+"' height='"+h+"' name='"+id+"' align='middle' allowScriptAccess='always' type='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/go/getflashplayer' />"+
	"</object>";

	// 플래시 코드 출력
	document.write(flashStr);

}
