//*********** file name	: LFValidation.js
//*********** summary	: javascript functions to validate fields.
//*********** maker		: DaeHo Yu
//*********** created	: 07/12/01
//*********** modified	: Upgraded by Daeho on 03/12/03 (Version 2)
//*********** modified	: Upgraded by Daeho on 07/20/05 (Version 3)

var DH_VD_Browser = (document.all) ? "IE" : "NS";

function getArrayDimension(objCom) {
	var objDim = objCom;
	var nDimension = 0;
	
	while (1) {
		if (typeof(objDim.length) == "undefined")
			break;
		objDim = objDim[0];
		nDimension++;
	}
	return nDimension;
}

function LFV_isArray(objCom) {
	// not array
	if (typeof(objCom.length) == "undefined") {
		return false;
	}
	else {
		// if select box
		if (objCom.type == "select-one") {
			// not array select box
			if (typeof(objCom[0].length) == "undefined") {
				return false;
			}
			// select box array
			else {
				return true;
			}
		}
		// array
		else {
			return true;
		}
	}
}

// It's not work for select box.
// There's no way to select multi select boxes.
function LFV_getSelectedCount(objCom) {
	var nCount = 0;
	
	if (LFV_isArray(objCom)) {
		for (var i = 0; i < objCom.length; i++) {
			if (objCom[i].checked)
				nCount++;
		}
	}
	else {
		if (objCom.checked)
			nCount++;
	}
	
	return nCount;
};

// It's not work for select box.
// There's no way to select multi select boxes.
function LFV_getSelectedValues(objCom, szDelimiter) {
	var szValue = "";
	if (typeof(szDelimiter) == "undefined")
		szDelimiter = ",";
	
	if (LFV_isArray(objCom)) {
		for (var i = 0; i < objCom.length; i++) {
			if (objCom[i].checked)
				szValue += szDelimiter + objCom[i].value;
		}
		if (szValue != "")
			szValue = szValue.substring(szDelimiter.length, szValue.length);
	}
	else {
		if (objCom.checked)
			szValue = objCom.value;
	}
	
	return szValue;
};

function LFV_checkAll(objCom, bChecked) {
	if (LFV_isArray(objCom)) {
		for (var i = 0; i < objCom.length; i++) {
			objCom[i].checked = bChecked;
		}
	}
	else {
		objCom.checked = bChecked;
	}
};

function isArrayForSelectBox(objCom) {
	if (typeof(objCom[0].length) == "undefined") {
		return false;
	}
	else {
		return true;
	}
}

function LFV_isEmpty(strData) {
	return ((strData == null) || (strData.length == 0) || (strData == ""));
}

function LFV_trim(strData) {
	var strTrim = "";
	var i, j;
	
	if (LFV_isEmpty(strData)) 
		return strTrim;

	for (i = 0; i < strData.length; i++) {
		if (strData.charAt(i) != " ") break;
	}
	for (j = strData.length-1; j >= 0; j--) {
		if (strData.charAt(j) != " ") break;
	}

	strTrim = strData.substr(i, j-i+1);
	return strTrim;
}

function LFV_trimLeft(strData) {
	var strTrim = "";
	var i;
	
	if (LFV_isEmpty(strData)) return strTrim;
	
	for (i = 0; i < strData.length; i++) {
		if (strData.charAt(i) != " ") break;
	}
	
	strTrim = strData.substr(i);
	return strTrim;
}

function LFV_trimRight(strData) {
	var strTrim = "";
	var j;
	
	if (LFV_isEmpty(strData)) return strTrim;
	
	for (j = strData.length-1; j >= 0; j--) {
		if (strData.charAt(j) != " ") break;
	}
	
	strTrim = strData.substr(0, j+1);
	return strTrim;
}

function LFV_isWhiteSpace(strData) {
	var strTrim = LFV_trim(strData);
	if (strTrim == "")
		return true;
	else
		return false;
}

function LFV_isDigit(d) {
	return ((d >= "0") && (d <= "9"));
}

function LFV_isLetter(c) {
	return (((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")));
}

function LFV_isNumeric(strNum) {
	var i;
	var strTrim;
	
	strTrim = LFV_trim(strNum);
	if (strTrim == "") return false;
	
	i = 0;
	if (strTrim.charAt(0) == "+" || strTrim.charAt(0) == "-") i++;
	
	for (; i<strTrim.length; i++) {
		var chr = strTrim.charAt(i);
		if (!LFV_isDigit(chr))
			return false;
	}
	return true;
}

function LFV_isNumericFrm(objField, strFieldName) {
	if (!LFV_isNumeric(objField.value)) {
		alert("Invalid format, [" + strFieldName + "].");
		objField.focus();
		return false;
	}
	return true;
}

function LFV_isAlpha(szData) {
	var i;
	var szTrim;
	
	szTrim = LFV_trim(szData);
	if (szTrim == "") return false;
	
	for (i = 0; i < szTrim.length; i++) {
		var chr = szTrim.charAt(i);
		if (!LFV_isLetter(chr))
			return false;
	}
	return true;
}

function LFV_isAlphaNumeric(strNum) {
	var i;
	var strTrim;
	
	strTrim = LFV_trim(strNum);
	if (strTrim == "") return false;
	
	for (i=0; i<strTrim.length; i++) {
		var chr = strTrim.charAt(i);
		if (!LFV_isDigit(chr) && !LFV_isLetter(chr))
			return false;
	}
	return true;
}

function LFV_isAlphaNumericFrm(objField, strFieldName) {
	if (LFV_isWhiteSpace(objField.value)) {
		alert("Please enter field, [" + strFieldName + "].");
		objField.focus();
		return false;
	}

	if (!LFV_isAlphaNumeric(objField.value)) {
		alert("Invalid format, [" + strFieldName + "].");
		objField.focus();
		return false;
	}
	return true;
}

function LFV_isAlphaSpecial(strNum, strSpecial) {
	var i;
	
	if (LFV_isWhiteSpace(strNum) == true) {
		return false;
	}
	
	strNum = LFV_trim(strNum);
	
	for (i=0; i<strNum.length; i++) {
		var chr = strNum.charAt(i);
		var nIndex = strSpecial.indexOf(chr);
		if (!LFV_isLetter(chr) && nIndex < 0) {
			return false;
		}
	}
	return true;
}

function LFV_isAlphaNumericSpecial(strNum, strSpecial) {
	var i;
	
	if (LFV_isWhiteSpace(strNum) == true) {
		return false;
	}
	
	strNum = LFV_trim(strNum);
	
	for (i=0; i<strNum.length; i++) {
		var chr = strNum.charAt(i);
		var nIndex = strSpecial.indexOf(chr);
		if (!LFV_isDigit(chr) && !LFV_isLetter(chr) && nIndex < 0) {
			return false;
		}
	}
	return true;
}

function LFV_isFloat(szNum) {
	var i = 0, j = 0;

	if (szNum == "") {
		return false;
	}
	if (szNum.length == 1 && szNum == ".") {
		return false;
	}

	if (szNum.length > 1) {	
		if (szNum.charAt(0) == "+" || szNum.charAt(0) == "-") {
			i = 1;
		}
	}
	else {
		if (szNum == "+" || szNum == "-") {
			i = 1;
		}
	}

	for (; i < szNum.length; i++) {
		var chr = szNum.charAt(i);
		if (!LFV_isDigit(chr)) {
			if (chr == "." && j == 0) {
				j++;
			}
			else {
				return false;
			}
		}
	}
	
	return true;
}

function LFV_isFloatFrm(objField, strFieldName) {
	if (LFV_isWhiteSpace(objField.value)) {
		alert("Please enter field, [" + strFieldName + "].");
		objField.focus();
		return false;
	}

	if (!LFV_isFloat(objField.value)) {
		alert("Invalid format, [" + strFieldName + "].");
		objField.focus();
		return false;
	}
	return true;
}

function LFV_isDate(strDate) {
	var dateTemp = new Date(strDate);
	if (isNaN(dateTemp))
		return false;
	else
		return true;
}

function LFV_isDateFrm(objField, strFieldName) {
	if (LFV_isWhiteSpace(objField.value)) {
		alert("Please enter field, [" + strFieldName + "].");
		objField.focus();
		return false;
	}
	
	if (!LFV_isDate(objField.value)) {
		alert("Invalid format, [" + strFieldName + "].");
		objField.focus();
		return false;
	}
	return true;
}

function LFV_isEmail(strEmail) {
	var index;
	var indexDot;
	var trimStr;
	
	trimStr = LFV_trim(strEmail);
	if (trimStr == "") return false;
	
	index = trimStr.indexOf("@");
	if (index <= 0 || index == trimStr.length - 1) return false;
	
	indexDot = trimStr.indexOf(".", index+1);
	if (indexDot <= index+1 || indexDot == trimStr.length - 1) return false;
	
	if (LFV_isExistChars(trimStr, "\"~!#$%^&*()+=`{}[]:;'<>,/?\\|")) {
		return false;
	}
	return true;
}

function LFV_isEmailFrm(objField, strFieldName) {
	if (LFV_isWhiteSpace(objField.value)) {
		alert("Please enter field, [" + strFieldName + "].");
		objField.focus();
		return false;
	}
	
	if (!LFV_isEmail(objField.value)) {
		alert("Invalid format, [" + strFieldName + "].");
		objField.focus();
		return false; 
	}
	return true;
}

function LFV_isRangeNum(num, min, max) {
	var index;
	var trimNum;
	
	trimNum = LFV_trim(num);
	if (!LFV_isFloat(trimNum))
		return false;
	
	if (LFV_isFloat(min) && LFV_isFloat(max)) {
		if (parseFloat(trimNum) < parseFloat(min) || parseFloat(trimNum) > parseFloat(max)) return false;
	}
	else if (LFV_isFloat(min)) {
		if (parseFloat(trimNum) < parseFloat(min)) return false;
	}
	else if (LFV_isFloat(max)) {
		if (parseFloat(trimNum) > parseFloat(max)) return false;
	}
	return true;
}

function LFV_isRangeNumFrm(objField, strFieldName, min, max) {
	if (LFV_isWhiteSpace(objField.value)) {
		alert("Please enter field, [" + strFieldName + "].");
		objField.focus();
		return false;
	}
	if (!LFV_isRangeNum(objField.value, min, max)) {
		if (LFV_isFloat(min) && LFV_isFloat(max)) {
			alert("Please enter number (" + min + " <= Number <= " + max + "), [" + strFieldName + "].");
		}
		else if (LFV_isFloat(min)) {
			alert("Please enter number (Number >= " + min + "), [" + strFieldName + "].");
		}
		else if (LFV_isFloat(max)) {
			alert("Please enter number (Number <= " + max + "), [" + strFieldName + "].");
		}
		objField.focus();
		return false;
	}
	return true;
}

function LFV_isFillOutStr(objField, strFieldName, strNotAllowedChars) {
	if (typeof(strNotAllowedChars) == "undefined")
		strNotAllowedChars = "";
	return LFV_isFillOut(objField, strFieldName, strNotAllowedChars, 0, "", "");
}

function LFV_isFillOutNum(objField, strFieldName, min, max) {
	if (typeof(min) == "undefined")
		min = "";
	if (typeof(max) == "undefined")
		max = "";
	return LFV_isFillOut(objField, strFieldName, "", 1, min, max);
}

function LFV_isFillOutFloat(objField, strFieldName, min, max) {
	if (typeof(min) == "undefined")
		min = "";
	if (typeof(max) == "undefined")
		max = "";
	return LFV_isFillOut(objField, strFieldName, "", 2, min, max);
}

function LFV_isFillOutDate(objField, strFieldName) {
	return LFV_isFillOut(objField, strFieldName, "", 3, "", "");
}

function LFV_isFillOut(objField, strFieldName, strNotAllowedChars, nDataType, min, max) {
//	numType : 0 - string, 1 - integer, 2 - float

	if (LFV_isWhiteSpace(objField.value)) {
		alert("Please enter field, [" + strFieldName + "].");
		objField.focus();
		return false;
	}

	switch (nDataType) {
	case 1:
		if (!LFV_isNumericFrm(objField, strFieldName))
			return false;
		break;
	case 2:
		if (!LFV_isFloatFrm(objField, strFieldName))
			return false;
		break;
	case 3:
		if (!LFV_isDateFrm(objField, strFieldName))
			return false;
		break;
	default:
		break;
	}

	if (strNotAllowedChars != "" && LFV_isExistCharsFrm(objField, strFieldName, strNotAllowedChars))
		return false;
	
	if ((nDataType == 1 || nDataType == 2) && (LFV_isFloat(min) || LFV_isFloat(max))) {
		if (!LFV_isRangeNumFrm(objField, strFieldName, min, max))
			return false
	}
	
	return true;
}

function LFV_isExistChars(strData, strNotAllowedChars) {
	var i, index;
	
	for (i = 0; i < strData.length; i++) {
		index = strNotAllowedChars.indexOf(strData.charAt(i));
		if (index >= 0) return true;
	}
	return false;
}

function LFV_isExistCharsFrm(objField, strFieldName, strNotAllowedChars) {
	var i, index;
	var strSrc;
	
	strSrc = objField.value;
	for (i = 0; i < strNotAllowedChars.length; i++) {
		index = strSrc.indexOf(strNotAllowedChars.charAt(i));
		if (index >= 0) {
			if (strFieldName != "") {
				alert("Not allowed (" + strNotAllowedChars.charAt(i) + ") character, [" + strFieldName + "].");
				objField.focus();
			}
			return true;
		}
	}
	return false;
}

function LFV_isSelected(objField, strFieldName) { 
	if (objField.selectedIndex == -1 || LFV_isWhiteSpace(objField.value)) {
		alert("Please select field, [" + strFieldName + "].");
		return false;
	}
	return true;
}

function LFV_isChecked(objField, szFieldName) {
	if (LFV_isArray(objField)) {
		for (var i = 0; i < objField.length; i++) {
			if (objField[i].checked) {
				return true;
			}
		}
	}
	else {
		if (objField.checked) {
			return true;
		}
	}
	
	return false;
}




function LFV_isValidPhoneNumber(formObj1, formObj2, formObj3, isRequired) {
	if (isRequired == true) {
		if (LFV_isWhiteSpace(formObj1.value) || LFV_isWhiteSpace(formObj2.value) || LFV_isWhiteSpace(formObj3.value)) {
			alert("Invalid phone number.");
			formObj1.focus();
			return false;
		}
	}
	else {
		if (LFV_isWhiteSpace(formObj1.value) && LFV_isWhiteSpace(formObj2.value) && LFV_isWhiteSpace(formObj3.value)) {
			return true;
		}
	}
	
	if (formObj1.value.length!=3 || !LFV_isNumeric(formObj1.value)) {
		alert("Invalid phone number.");
		formObj1.focus();
		return false;
	}
	if (formObj2.value.length!=3 || !LFV_isNumeric(formObj2.value)) {
		alert("Invalid phone number.");
		formObj2.focus();
		return false;
	}
	if (formObj3.value.length!=4 || !LFV_isNumeric(formObj3.value)) {
		alert("Invalid phone number.");
		formObj3.focus();
		return false;
	}
	return true;
}

function LFV_isZipCodeForUSA(strZip) {
	var trimZip;
	
	trimZip = LFV_trim(strZip);
	if (trimZip.length != 5) {
		return false;
	}

	return LFV_isNumeric(trimZip);
}

function changeMoney(objField) {
	var dValue = LFV_trim(objField.value);
	if (dValue != "")
		objField.value = dValue;
}


function pressNumber(event, what) {
	var value;
	var el;
			
	if(DH_VD_Browser == "IE"){	
		value = event.keyCode 
		el = event.srcElement
	}
		
	if(DH_VD_Browser == "NS"){
		value = event.which 
		el = event.target
	}
		
	var key = String.fromCharCode(value)
	
	if (value == 8) {
		return true;
	}
		
	var dot = false;
	var str = what.value;
	if (str.indexOf(".") >= 0) {
		dot = true;
	}
	if (((key < '0' || key > '9') && key != ',' && (key != '.')) || (key == '.' && dot)) {
		return false;
	}
	return true;
}

function fixNumber(what) {
	if (what.value == "") return;
	
	var bMinus = false;
	if (parseFloat(what.value) < 0) bMinus = true;
	
	var str = what.value;
	var i;
	var newstr = "";
	var add;
	var started = false;
	var dot = false;
	for (i = 0; i < str.length; i++) {
		add = false;
		if (str.charAt(i) != ',' && str.charAt(i) >= '0' && str.charAt(i) <= '9') {
			add = true;
		}
		else
		if (str.charAt(i) == '.' && !dot) {
			started = true;
			dot = true
			add = true;			
		}	
			

		if (str.charAt(i) == '.' && i == 0) {
			newstr+='0';
		}

		if (add)
			newstr += str.charAt(i);	
	}
	if (newstr.length == 0 || newstr == ".") 
		newstr = "0";
		
	newstr = parseFloat(newstr).toString();

	if (newstr.charAt(0) == '.') {
		newstr = "0" + newstr;
	}
		
	var start = newstr.indexOf(".");
	if (start < 0) {
		start = newstr.length - 1;
	}
	else {
		start--;
	}
	var newstr2 = "";
	while (i >= 0) {
		if ( i > start) {
		}
		else {
			if ((start - i) % 3 == 0 && i !=start) {
				
				newstr2 += ",";
					
			}
		}
		newstr2 += newstr.charAt(i);
		i--;
	}
	what.value = reverse(newstr2);
	if (bMinus)
		what.value = "-" + what.value;
}

function reverse(str)
{
	var newstr = "";
	for (i = str.length; i >= 0; i --) {
		newstr += str.charAt(i);
	}
	return newstr;
}

function returnNumber(what)
{
	return what.value.replace(/,/g, "");
}

function checkPercent(objField, strFieldName)
{
	var dValue = objField.value;
	if (dValue < 0 || dValue > 100) {
		alert("Percentage you entered is invalid. Please try again.");
		objField.focus();
	}
}