/*********************************************
 * filename	: chkType.js
 * desc		: form and etc check function
 **********************************************/

/**
 * error alert type default define
 *
 *	1 : javascript alert, 2 : open window error process
 */
var alertType = 2;
var _strMsgOnlyTailConv = "_convtail";

/**
 * string String::cut(int len)
 *
 *	(example) if (strVal.cut(15)) {}
 */
String.prototype.cut = function(len) {
	var str = this;
	var l = 0;
	for (var i=0; i<str.length; i++) {
		l += (str.charCodeAt(i) > 128) ? 2 : 1;
		if (l > len) return str.substring(0,i) + "...";
	}
	return str;
}

/**
 * int String::bytes(void)
 *
 *	(example) if (strVal.bytes()>20) {}
 */
String.prototype.bytes = function(str) {
	str = this != window ? this : str;
	var len = 0;
	for(j=0; j<str.length; j++) {
		var chr = str.charAt(j);
		len += (chr.charCodeAt() > 128) ? 2 : 1
	}
	return len;
}

String.prototype.trim = function(str) {
	str = this != window ? this : str;
	return str.replace(/^\s+/g,'').replace(/\s+$/g,'');
}

/**
 * void execErrWin (int error_alert_type, string error message, ... )
 *
 *	:: error_alert_type - 1 : javascript alert, 2 : open window error process
 */
function _execErrWin (typeAct,strMsg,strTitle,nWinWidth,nWinHeight,strBtn,nBtnWidth,strIcon,bModal) {
	if(!typeAct || 'undefined'==typeof(typeAct)) { var typeAct = alertType; }

	if ('1'==typeAct) {
		alert("\n" + strMsg + "\n");
	} else if ('2'==typeAct) {
		openModalAlert(_siteCurCode,strMsg,strTitle,nWinWidth,nWinHeight,strBtn,nBtnWidth,strIcon,bModal);
	}
	return;
}

/**
 * boolean chkFileExt (string filename,  alert type,  )
 *
 *	(example) chkFileExt(filename,1,'IMG')
 */
function chkFileExt (strFile,typeAct,typeExt) {
	if(!typeAct || 'undefined'==typeof(typeAct)) { var typeAct = false; }
	var retVal = strFile.match(/\.(gif|jpg|jpeg|png|bmp)$/i) ? true : false;
	if (!retVal) { _execErrWin(typeAct,ls_errmsg_pwdip,ls_errtit_input); }

	return retVal;
}
function chkNextField(val,len,objnext) {
	if (val.length==len) objnext.focus();
}

function chkSubmitForm(form,typeAct) {
	for (i = 0; i < form.elements.length; i++ ) {
		var el = form.elements[i];
		if (el.tagName == "FIELDSET") continue;
		if(el.type == "TEXT" || el.type == "text" ||
			el.type == "PASSWORD" || el.type == "password" ||
			el.type == "TEXTAREA" || el.type == "textarea"){
			el.value = el.value.trim();
		}
		var fs = el.getAttribute("FS");
		var minbyte	= el.getAttribute('MINBYTE');
		var maxbyte	= el.getAttribute('MAXBYTE');
		var fixbyte	= el.getAttribute('FIXBYTE');
		var option	= el.getAttribute("OPTION");
		var match	= el.getAttribute("MATCH");
		var glue	= el.getAttribute('GLUE');
		if(fs != null) {
			minbyte = fs.split("_")[0];
			maxbyte = fs.split("_")[1];
		}

		if (el.getAttribute("REQUIRED") != null) {
			if(el.type == "TEXT" || el.type == "text" ||
				el.type == "PASSWORD" || el.type == "password" ||
				el.type == "TEXTAREA" || el.type == "textarea"){

				//el.value = el.value.trim();
				if (el.value == null || el.value == "") {
					return _execError(el,typeAct,ls_errfrm_noip);
				}
			} else if(el.type == "RADIO" || el.type == "radio"){
				if(!_chkRadio(form,el))
					return _execError(el,typeAct,ls_errfrm_noradio);
			} else if(el.type == "SELECT-ONE" || el.type == "select-one"){
				if(!_chkSelect(form,el))
					return _execError(el,typeAct,ls_errfrm_noradio);
			}
		}
		if (minbyte != null && el.value != "") {
			if (el.value.bytes() < parseInt(minbyte)) {
				strMsg = _getErrMsg2(ls_errfrm_tooshort,"{minbyte}",minbyte);
				return _execError(el,typeAct,strMsg);
			}
		}
		if (maxbyte != null && el.value != "") {
			var len = 0;
			if (el.value.bytes() > parseInt(maxbyte)) {
				strMsg = _getErrMsg2(ls_errfrm_toolong,"{maxbyte}",maxbyte);
				return _execError(el,typeAct,strMsg);
			}
		}
		if (fixbyte != null && el.value != "") {
			var len = 0;
			if (el.value.bytes() != parseInt(fixbyte)) {
				strMsg = _getErrMsg2(ls_errfrm_fixlength,"{fixbyte}",fixbyte);
				return _execError(el,typeAct,strMsg);
			}
		}
		if (match && (el.value != form.elements[match].value)) {
			return _execError(el,typeAct,ls_errfrm_notmatch);
		}
		if (option != null && el.value != "") {
			if (el.getAttribute('SPAN') != null) {
				var _value = new Array();
				for (span=0; span<el.getAttribute('SPAN');span++ ) {
					_value[span] = form.elements[i+span].value;
				}
				var value = _value.join(glue == null ? '' : glue);
				if (!funcs[option](el,value)) return false;
			} else {
				if (!funcs[option](el)) return false;
			}
		}
	}
	return true;
}

function _getErrMsg(strFormat) {
	var ptnvar = /{([a-zA-Z0-9_]+)}/;
	var args=_getErrMsg.arguments;
	var strRetMsg = strFormat;
	var name = args[1];
	if (name && 'undefined'!=typeof(name)) {
		ptnvar.exec(strRetMsg);
		strRetMsg = strRetMsg.replace(ptnvar,eval(RegExp.$1));
	}
	return strRetMsg;
}

function _getErrMsg2(strFormat,ptnTgr,repVal) {
	return strFormat.replace(ptnTgr, repVal);
}

function _execError(el,typeAct,type,action) {
	var name = (mname = el.getAttribute("MNAME")) ? mname : el.getAttribute("NAME");
	var strMsg = _getErrMsg(type,name);

	_execErrWin (typeAct,strMsg);

	if (action == "sel") {
		el.select();
	} else if (action == "del")	{
		el.value = "";
	}
	el.focus();
	return false;
}

function _chkRadio(form,curel) {
	var fieldname = eval(form.name+'.'+curel.name);

	for (var i=0; i<fieldname.length; i++) {
		if (fieldname[i].checked)
			return true;
	}
	return false;
}
function _chkSelect(form,curel) {
	var fieldname = eval(form.name+'.'+curel.name);
	if (''!=fieldname[fieldname.selectedIndex].value) return true;
	else return false;
}

/*
 * special pattern checking function mapping
 */
var funcs = new Array();
funcs['email'] = isValidEmail;
funcs['phone'] = isValidPhone;
funcs['userid'] = isValidUserid;
funcs['userpwd'] = isEqualPass;
funcs['hangul'] = hasHangul;
funcs['number'] = isNumeric;
funcs['engonly'] = alphaOnly;
funcs['jumin'] = isValidJumin;
funcs['jumin2'] = isValidJumin2;
funcs['bizno'] = isValidBizNo;
/*
funcs['Id']     = onlyId;             //    /^[a-zA-Z]{1}[a-zA-Z0-9_]+$/_
funcs['Num']     = onlyNum;            //    /^[0-9]+$/
funcs['Eng']     = onlyEng;              //    /^[a-zA-Z]+$/
funcs['EngNum'] = onlyEngNum;        //    /^[a-zA-Z0-9]+$/
funcs['Han']     = onlyHan;            //    /^[°¡-ÆR]+$/
funcs['HanEng']    = onlyHanEng;        //    /^[°¡-ÆRa-zA-Z]+$/
funcs['HanEngNum']    = onlyHanEngNum;//    /^[°¡-ÆRa-zA-Z0-9]+$/
funcs['HanNum']    = onlyHanNum;        //    /^[°¡-ÆR0-9]+$/
funcs['Han1']    = onlyHan1;        //    ¹Ýµå½Ã ÇÑ±Û Æ÷ÇÔ

funcs['email'] = isValidEmail;
funcs['phone'] = isValidPhone;
funcs['jumin'] = isValidJumin;
funcs['bizno'] = isValidBizNo;
funcs['domain'] = isValidDomain;
*/

/*
 * pattern checking function
 */
function isValidEmail(el,value,typeAct) {
	var value = value ? value : el.value;
	var pattern = /^[_a-zA-Z0-9-\.]+@[\.a-zA-Z0-9-]+\.[a-zA-Z]+$/;
	return (pattern.test(value)) ? true : _execError(el,typeAct,ls_errfrm_noval);
}

function isValidUserid(el,typeAct) {
	var pattern = /^[a-zA-Z]{1}[a-zA-Z0-9_-]{1,32}$/;
	return (pattern.test(el.value)) ? true : _execError(el,typeAct,ls_errfrm_idchk);
}

function isEqualPass(el,typeAct) {
	if (el.value==eval(el.getAttribute("mcompfld")+'.value')) {
		return true;
	} else {
		_execError(el,typeAct,ls_errfrm_pwddiff)
	}
}

function hasHangul(el,typeAct) {
	var pattern = /^[°¡-ÆR]+$/;
	return (pattern.test(el.value)) ? true : _execError(el,typeAct,ls_errfrm_onlyhan);
}

function alphaOnly(el,typeAct) {
	var pattern = /^[a-zA-Z]+$/;
	return (pattern.test(el.value)) ? true : _execError(el,typeAct,ls_errfrm_noval);
}

function isNumeric(el,typeAct) {
	var pattern = /^[0-9]+$/;
	return (pattern.test(el.value)) ? true : _execError(el,typeAct,ls_errfrm_onlynum);
}


function isValidJumin2(el,typeAct) {
	var nJumin1 = eval(el.getAttribute("mjuminfld")+'.value');

    var pattern = /^([0-9]{6})-?([0-9]{7})$/;
	var num = nJumin1 + '-' + el.value;
    if (!pattern.test(num)) return _execError(el,typeAct,ls_errfrm_noval);
    num = RegExp.$1 + RegExp.$2;

	var sum = 0;
	var last = num.charCodeAt(12) - 0x30;
	var bases = "234567892345";
	for (var i=0; i<12; i++) {
		if (isNaN(num.substring(i,i+1))) return _execError(el,typeAct,ls_errfrm_noval);
		sum += (num.charCodeAt(i) - 0x30) * (bases.charCodeAt(i) - 0x30);
	}
	var mod = sum % 11;
	return ((11 - mod) % 10 == last) ? true : _execError(el,typeAct,ls_errfrm_noval);
}

function isValidJumin(el,value,typeAct) {
    var pattern = /^([0-9]{6})-?([0-9]{7})$/;
	var num = value ? value : el.value;

	if (!pattern.test(num)) return _execError(el,typeAct,ls_errfrm_noval);
	num = RegExp.$1 + RegExp.$2;

	var sum = 0;
	var last = num.charCodeAt(12) - 0x30;
	var bases = "234567892345";
	for (var i=0; i<12; i++) {
		if (isNaN(num.substring(i,i+1))) return _execError(el,typeAct,ls_errfrm_noval);
		sum += (num.charCodeAt(i) - 0x30) * (bases.charCodeAt(i) - 0x30);
	}
	var mod = sum % 11;
	return ((11 - mod) % 10 == last) ? true : _execError(el,typeAct,ls_errfrm_noval);
}

function isValidBizNo(el,typeAct) {
    var pattern = /([0-9]{3})-?([0-9]{2})-?([0-9]{5})/;
	var num = el.value;
    if (!pattern.test(num)) return _execError(el,typeAct,ls_errfrm_noval);
    num = RegExp.$1 + RegExp.$2 + RegExp.$3;
    var cVal = 0;
    for (var i=0; i<8; i++) {
        var cKeyNum = parseInt(((_tmp = i % 3) == 0) ? 1 : ( _tmp  == 1 ) ? 3 : 7);
        cVal += (parseFloat(num.substring(i,i+1)) * cKeyNum) % 10;
    }
    var li_temp = parseFloat(num.substring(i,i+1)) * 5 + '0';
    cVal += parseFloat(li_temp.substring(0,1)) + parseFloat(li_temp.substring(1,2));
    return (parseInt(num.substring(9,10)) == 10-(cVal % 10)%10) ? true : _execError(el,typeAct,ls_errfrm_noval);
}

function isValidPhone(el,value,typeAct) {
	var pattern = /^([0]{1}[0-9]{1,2})-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/;
    var num = value ? value : el.value;
	if (pattern.exec(num)) {
		if(RegExp.$1 == "011" || RegExp.$1 == "016" || RegExp.$1 == "017" || RegExp.$1 == "018" || RegExp.$1 == "019") {
			if (!el.getAttribute('SPAN')) el.value = RegExp.$1 + "-" + RegExp.$2 + "-" + RegExp.$3;
		}
		return true;
	} else {
		return _execError(el,typeAct,ls_errfrm_noval);
	}
}

function _onFormSubmit(objForm,typeAct) {
	var bRet = chkSubmitForm(objForm,typeAct);
	if (bRet) { objForm.submit(); }
	else { return; }
}
function _onFormReset(objForm) {
	objForm.reset();
}

function _onFormSubmit2(bSubmit,form) {
	if (bSubmit) {
		form.submit();
	} else {
		return false;
	}
}