// -------------------------------------------------
//         Form Validation Javascript Library
//             made by dirkill@gif.co.kr
//                   (2000.10.23)
//--------------------------------------------------
// 2000.10.23 : Made
// 2000.11.03 : VFAction Field Added (for Error handling)
// 2001.03.06 : "P" (AlphaNum) Type Added
// 2001.03.07 : BUG FIXED ==> if (ssl = 4 && fv.length != parseInt(ss[3])) -_-;;;
// 2001.03.07 : Fix VFToNumber, parseInt("08") returns 0 (BUG)
//--------------------------------------------------
// FORM HIDDEN OBJECT
// 	dxv_TITLE = Form Name
// 	dxv_CONFIRM = Confirm Message
// 	dxv_LANG = [KOR|ENG]
// 	dxv_fieldname = "FieldName | R/X | NSEAP | Min Value | Max Value"
//									R : Required, X : No Required
//									N : Number, S : String, E : Email, A : Alphabet, P : AlphaNum
// <form name action method OnSubmit="return ValidateForm(this);">
var VFErrMessage = "", VFAction = "", VFErrTitle = "", VFErrFinish = "", VFErrNumber = 0, VFErrLang = "KOR";

//--------------------------------------------------
// function ValidateForm(...)
// function VFAddErr(sfn, korerr, engerr)
// function VFIsEmailValid(em)
// function VFIsAlphabet(str)
// function VFIsAlphaNum(str)
// function VFIsNumeric(str)
// function VFIsPossibleID(str)
// function VFIsPossiblestr(str)
// function VFAddComma(str)
// function VFDelComma(str)
// function VFToNumber(str)
//--------------------------------------------------

// Args 1 : Form Name
// Args 2 : 0 - Check & Message, 1 - Only Check (Skip Confirm), 2 - Skip Message, Confirm
// ex) ValidateForm(this, 0), ValidateForm("form1", 2)
function ValidateForm() {
	VFErrTitle = "ÀÔ·ÂÀÌ Æ²·È½À´Ï´Ù.";
	VFErrLang = "KOR";
	VFErrFinish = "";
	VFErrMessage = "";
	VFErrNumber = 0;
	VFAction = "";

	var fn, ft, fv, ssl, frm, chk, args, efn, nval, tmp;
	args = ValidateForm.arguments;
	frm = args[0];
	if (args.length > 1) chk = args[1];
	else chk = 0

	for (var i=0; i<frm.length; i++) {
		if (frm[i].name.substr(0, 3) != "dxv") continue;
		fn = frm[i].name.substr(3);
		ft = frm[i].value;
		if (fn == "_TITLE") { VFErrTitle = ft; continue; }
		if (fn == "_CONFIRM") { VFErrFinish = ft; continue; }
		if (fn == "_LANG") { VFErrLang = ft; continue; }
		if (fn == "_ACTION") { VFAction = ft; continue; }

		var ss = ft.split("|");
		ssl = ss.length;
		if (ssl < 2) continue;
		fv = eval("frm." + fn + ".value");
		if (ss[1] == "X" && fv == "") continue;
		if (ss[1] == "R" && fv == "") {
			VFAddErr(ss[0], "ÀÔ·ÂµÇÁö ¾Ê¾Ò½À´Ï´Ù.", "Reqiuered.");
			frm[fn].focus();
			continue;
		}
		if (ssl < 3) continue;
		switch (ss[2]) {
			case "P":
			case "S":
			case "A":
				if (ss[2] == "A" && !VFIsAlphabet(fv)) {
					VFAddErr(ss[0], "¾ËÆÄºª¹®ÀÚ¸¸ ÀÔ·ÂÇÒ ¼ö ÀÖ½À´Ï´Ù.", "only Alphabet allowed.");
					frm[fn].focus();
					break;
				} else if (ss[2] == "P" && !VFIsAlphaNum(fv)) {
					VFAddErr(ss[0], "¾ËÆÄºª/¼ýÀÚ¸¸ ÀÔ·ÂÇÒ ¼ö ÀÖ½À´Ï´Ù.", "only Alphabet and Number allowed.");
					frm[fn].focus();
					break;
				}

				if (ssl < 4) break;
				if (ssl == 4 && fv.length != parseInt(ss[3]))
					VFAddErr(ss[0], ss[3] + "ÀÚ¸®·Î ÀÔ·ÂÇÏ½Ê½Ã¿À.", ss[3] + " Length characters allowed.");
				else if (ssl > 3 && fv.length < parseInt(ss[3]))
					VFAddErr(ss[0], ss[3] + "±ÛÀÚ ÀÌ»ó ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù.", "Greater than " + ss[3] + " length.");
				else if (ssl > 4 && fv.length > parseInt(ss[4]))
					VFAddErr(ss[0], ss[4] + "±ÛÀÚ ÀÌ»ó ÀÔ·ÂÇÒ ¼ö ¾ø½À´Ï´Ù.", "Less than " + ss[4] + " length.");
				break;

			case "E":
				if (!VFIsEmailValid(fv)) {
					VFAddErr(ss[0], "À¯È¿ÇÑ ÀÌ¸ÞÀÏ ÁÖ¼Ò°¡ ¾Æ´Õ´Ï´Ù", "Not a valid Email address.");
					frm[fn].focus();
				}
				break;

			case "N":
				if (!VFIsNumeric(fv)) {
					alert('t');
					VFAddErr(ss[0], "¼ýÀÚ¸¦ ÀÔ·ÂÇØ ÁÖ¼¼¿ä.", "only Number allowed.");
					frm[fn].focus();
					break;
				}
				nval = VFToNumber(fv);
				if (ssl > 3 && nval < parseInt(ss[3]))
					VFAddErr(ss[0], ss[3] + "º¸´Ù Å« ¼ýÀÚ¸¦ ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù.", "Greater than " + ss[3] + ".");
				else if (ssl > 4 && nval > parseInt(ss[4]))
					VFAddErr(ss[0], ss[4] + "º¸´Ù ÀÛÀº  ¼ýÀÚ¸¦ ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù.", "Less than " + ss[4] + ".");
				break;
			default:
				break;
		}
	}

	if (VFErrNumber > 0) {
		if (chk < 2) VFViewErr();
		return false;
	}

	if (VFErrFinish!= "" && chk < 1) {
		if (!confirm(VFErrFinish)) return false;
	}

	if (VFAction != "")
		frm.action = VFAction;

	return true;
}

function VFAddErr(sfn, korerr, engerr) {
	VFErrNumber++;
	VFErrMessage = VFErrMessage + "\n" + VFErrNumber + ") " + sfn + " : \t" + ((VFErrLang == "ENG") ? engerr : korerr);
}

function VFViewErr() {
	alert(VFErrTitle + "\n" + VFErrMessage);
}

function VFConfirm() {
	if (VFErrFinish == "") return true;
	if (confirm(VFErrFinish)) return true;
	return false;
}

// From WebMonkey Script Library
function VFIsEmailValid(em) {
	var AtSym    = em.indexOf('@');
	var Period   = em.lastIndexOf('.');
	var Space    = em.indexOf(' ');
	var Length   = em.length - 1;

	if ((AtSym < 1) ||					// '@' cannot be in first position
			(Period <= AtSym+1) ||	// Must be atleast one valid char btwn '@' and '.'
			(Period == Length ) ||	// Must be atleast one valid char after '.'
			(Space  != -1)) {				// No empty spaces permitted
		return false;
	}
	return true;
}

// From Shinbiro
function VFIsAlphabet(str) {
	str = str.toUpperCase();
	if (str.length == 0) return false;
	for (i = 0; i < str.length; i++)
		if (!((str.charAt(i) >= 'A' &&str.charAt(i) <= 'Z'))) return false;
	return true;
}

function VFIsAlphaNum(str) {
	str = str.toUpperCase();
	if (str.length == 0) return false;
	for (i = 0; i < str.length; i++)
		if (!((str.charAt(i) >= 'A' && str.charAt(i) <= 'Z') ||
			(str.charAt(i) >= '0' && str.charAt(i) <= '9'))) return false;
	return true;
}

function VFIsNumeric(str) {
	for (i = 0; i < str.length; i++)
		if (str.charAt(i) < '0' || str.charAt(i) > '9') return false;
	return true;
}

function VFIsPossibleID(str) {
	str = str.toUpperCase();
	if (str.length == 0) return false;
	for (i = 0; i < str.length; i++)
		if ( (str.charAt(i) == '|') ||
			!((str.charAt(i) >= 'A' && str.charAt(i) <= 'Z') ||
			(str.charAt(i) >= '0' && str.charAt(i) <= '9') ||
			(str.charAt(i) == '_'))) return false;
	return true;
}

function VFIsPossiblestr(str) { // Æ¯¼ö¹®ÀÚ "|" ÆÇº°?
	var str = str.value;
	for (i = 0; i < str.length; i++) {
		if ((str.charAt(i) == '|')) {
			//alert('Æ¯¼ö ¹®ÀÚ´Â ÀÔ·ÂÇÒ ¼ö ¾ø½À´Ï´Ù.');
			return false;
		}
	}
	return true;
}

// from DongYang Cosmetics Intranet by dirkill's Project (2000.6)
function VFAddComma(numstr) {
	var str = new String(numstr);
	var newstr = new String;
	var maxlen = str.length
	for (var i=maxlen-1; i>=0; i--) {
		newstr = str.charAt(i) + newstr;
		if ((maxlen-i) % 3 == 0 && i!=0) newstr = "," + newstr;
	}
	return (newstr);
}

function VFDelComma(str) {
	var newstr = new String;
	for (var i=0; i<str.length; i++) {
		if (str.charAt(i) >= "0" && str.charAt(i) <= "9")
			newstr += str.charAt(i);
	}
	return (newstr);
}

function VFToNumber(str) {
	//var num = parseInt(str);
	for (i=0; i<str.length; i++) { // 2001.03.07
		if (str.charAt(i) != "0") break;
	}
	var str2 = str.substr(i);
	var num = parseInt(str2);
	if (isNaN(num)) return 0;
	return num;
}

function VFIsExistSpecChar(str) {
	var sSpenChar = "¢½¢¼¢¿¡Ù¢Ñ¢Î¢Í¢Û¢·¢¹¢Â¢Ã¡Û¡Þ¢Ä¡Ý¡à¡â¡ä¡Ø¢Á¢Ç¡¼¡Î¢Þ¢¾¢´¢À¡Ú¢Ð¢Ï¢Ý¢Ü¢¸¢º¡¥¡£¡Ü¡ß¡º¡»¡á¡ã¡å¡Å¢Ì¢È¢å¡Ï¢ß¨ç¨è¨é¨ê¨ë¨ì¨í¨î¨ï¨ð¨ñ¨ò¨ó¨ô¨õ¡Ö¡Õ¢Ú¡ñ¡Æ¥Ø¥è¥Ò¥â¥á¨Ý¨Þ¨ß¨à¨á¨â¨ã¨ä¨å¨æ¨Ç¡ì¡í¡¶¡·¡¼¡½£À¢â¥ð¢Ë¢É¢ä¢Ó¢´¨È¨É¨Ê¨Ë¨Ì¨Í¨Î¨Ï¨Ð¨Ñ¨Ò¨Ó¨Ô¨Õ¨Ö¨×¨Ø¨Ù¨Ú¨Û¨Ü¢Ê¢ã¢Ô¢µ¨±¨²¨³¨´¨µ¨¶¨·¨¸¨¹¨º¨»¨¼¨½¨¾¨¿¨À¨Á¨Â¨Ã¨Ä¨Å¨Æ¡½¡¾¢¶";

	if (str.length == 0) return false;
	for (i=0; i<sSpenChar.length; i++) {
		ch = sSpenChar.charAt(i);
		if (str.indexOf(ch) >= 0) {
			return true;
		}
	}
	return false;
}

function EvtCheckNumKey() {
	if (event.keyCode!=13) {
		if (event.keyCode<48 || event.keyCode>57) {
			alert("¼ýÀÚÀÌ¿Ü¿¡´Â ±âÀÔÇÏ½Ç¼ö ¾ø½À´Ï´Ù.");
			event.returnValue=false;
		}
	}
}

function EvtCheckSignNumKey() {
	if (event.keyCode!=13 && event.keyCode!=45) {
		if (event.keyCode<48 || event.keyCode>57) {
			alert("¼ýÀÚÀÌ¿Ü¿¡´Â ±âÀÔÇÏ½Ç¼ö ¾ø½À´Ï´Ù.");
			event.returnValue=false;
		}
	}
}

function EvtCheckNumber(itm) {
	if (event.keyCode!=13) {
		if (!VFIsNumeric(itm.value)) {
			alert("¼ýÀÚÀÌ¿Ü¿¡´Â ±âÀÔÇÏ½Ç¼ö ¾ø½À´Ï´Ù.");
			event.returnValue=false;
		}
	}
}

function CountSelected(elem) {
	var tot = 0;
	if (eval(elem)) {
		for (var i=0; i<elem.length; i++) {
			if (elem[i].checked) tot++;
		}
	}
	return tot;
}

//===== codelist¿¡ ÀÖ´Â ¹®ÀÚ¸¸ Çã¿ë, Æ²¸° ¹®ÀÚÀÌ¸é emsg Ç¥½Ã (2004/08/04)
function EvtCheckAsignedKey(codelist, emsg) {
	if (event.keyCode!=13) {
		var code = String.fromCharCode(event.keyCode);
		if (codelist.indexOf(code) < 0) {
			if (emsg) {
				alert(emsg);
			} else {
				alert("»ç¿ë°¡´ÉÇÑ ¹®ÀÚ°¡ ¾Æ´Õ´Ï´Ù.");
			}
			event.returnValue=false;
		}
	}
}

//=================== ÇÑ±Û °ü·Ã
function HLen(str) {
	var ln = 0;
	for(var i=0; i<str.length; i++) ln += (str.charCodeAt(i) > 128 ? 2 : 1);
	return ln;
}

function HLeft(str, len, etc) {
	var ln = 0;
	for(var i=0; i<str.length; i++) {
		ln += (str.charCodeAt(i) > 128 ? 2 : 1);
		if (ln > len) {
			var ret = str.substring(0, i);
			if (etc) ret += etc;
			return ret;
		}
	}
	return str;
}