// File name	: LFValidation.js
// Summary	: javascript functions to validate fields.
// Maker		: Derek Yu
// Created	: 07/12/01
// Modified	: Upgraded by Daeho on 03/12/03 (Version 2)
//
// Browser detection object
// Original Document : http://www.quirksmode.org/js/detect.html
//
// Browser name: FEIP_BrowserDetect.browser 
// Browser version: FEIP_BrowserDetect.version 
// OS name: FEIP_BrowserDetect.OS

var FEIP_BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{	// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 	// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
FEIP_BrowserDetect.init();



function getArrayDimension(objCom) {
	var objDim = objCom;
	var nDimension = 0;
	
	while (1) {
		if (typeof(objDim.length) == "undefined")
			break;
		objDim = objDim[0];
		nDimension++;
	}
	return nDimension;
}

function isArray(objCom) {
	if (typeof(objCom.length) == "undefined") {
		return false;
	}
	else {
		return true;
	}
}

function isArrayForSelectBox(objCom) {
	if (typeof(objCom[0].length) == "undefined") {
		return false;
	}
	else {
		return true;
	}
}

function isEmpty(strData) {
	return ((strData == null) || (strData.length == 0) || (strData == ""));
}

function trim(strData) {
	var strTrim = "";
	var i, j;
	
	if (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 trimLeft(strData) {
	var strTrim = "";
	var i;
	
	if (isEmpty(strData)) return strTrim;
	
	for (i = 0; i < strData.length; i++) {
		if (strData.charAt(i) != " ") break;
	}
	
	strTrim = strData.substr(i);
	return strTrim;
}

function trimRight(strData) {
	var strTrim = "";
	var j;
	
	if (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 isWhiteSpace(strData) {
	var strTrim = trim(strData);
	if (strTrim == "")
		return true;
	else
		return false;
}

function isDigit(d) {
	return ((d >= "0") && (d <= "9"));
}

function isLetter(c) {
	return (((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")));
}

function isNumeric(strNum) {
	var i;
	var strTrim;
	
	strTrim = 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 (!isDigit(chr))
			return false;
	}
	return true;
}

function isNumericFrm(objField, strFieldName) {
	if (!isNumeric(objField.value)) {
		alert("Invalid format, [" + strFieldName + "].");
		objField.focus();
		return false;
	}
	return true;
}

function isAlphaNumeric(strNum) {
	var i;
	var strTrim;
	
	strTrim = trim(strNum);
	if (strTrim == "") return false;
	
	for (i=0; i<strTrim.length; i++) {
		var chr = strTrim.charAt(i);
		if (!isDigit(chr) && !isLetter(chr))
			return false;
	}
	return true;
}

function isAlphaNumericFrm(objField, strFieldName) {
	if (isWhiteSpace(objField.value)) {
		alert("Please enter field, [" + strFieldName + "].");
		objField.focus();
		return false;
	}

	if (!isAlphaNumeric(objField.value)) {
		alert("Invalid format, [" + strFieldName + "].");
		objField.focus();
		return false;
	}
	return true;
}


function isFloat(strNum) {
	var i = 0, j = 0;
	var trimNum;

	trimNum = trim(strNum);
	if (trimNum == "") return false;
	
	if (trimNum.length==1 && trimNum==".") return false;
	
	if (trimNum.charAt(0) == "+" || trimNum.charAt(0) == "-") i = 1;
	for (; i<trimNum.length; i++) {
		var chr = trimNum.charAt(i);
		if (!isDigit(chr)) {
			if (chr == "." && j == 0) {
				j++;
			}
			else {
				return false;
			}
		}
	}
	
	return true;
}

function isFloatFrm(objField, strFieldName) {
	if (isWhiteSpace(objField.value)) {
		alert("Please enter field, [" + strFieldName + "].");
		objField.focus();
		return false;
	}

	if (!isFloat(objField.value)) {
		alert("Invalid format, [" + strFieldName + "].");
		objField.focus();
		return false;
	}
	return true;
}

function isDate(strDate) {
	var dateTemp = new Date(strDate);
	if (isNaN(dateTemp))
		return false;
	else
		return true;
}

function isDateFrm(objField, strFieldName) {
	if (isWhiteSpace(objField.value)) {
		alert("Please enter field, [" + strFieldName + "].");
		objField.focus();
		return false;
	}
	
	if (!isDate(objField.value)) {
		alert("Invalid format, [" + strFieldName + "].");
		objField.focus();
		return false;
	}
	return true;
}

function isEmail(strEmail) {
	var index;
	var indexDot;
	var trimStr;
	
	trimStr = 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 (isExistChars(trimStr, "\"~!#$%^&*()+=`{}[]:;'<>,/?\\|")) {
		return false;
	}
	return true;
}

function isEmailFrm(objField, strFieldName) {
	if (isWhiteSpace(objField.value)) {
		alert("Please enter field, [" + strFieldName + "].");
		objField.focus();
		return false;
	}
	
	if (!isEmail(objField.value)) {
		alert("Invalid format, [" + strFieldName + "].");
		objField.focus();
		return false; 
	}
	return true;
}

function isRangeNum(num, min, max) {
	var index;
	var trimNum;
	
	trimNum = trim(num);
	if (!isFloat(trimNum))
		return false;
	
	if (isFloat(min) && isFloat(max)) {
		if (parseFloat(trimNum) < parseFloat(min) || parseFloat(trimNum) > parseFloat(max)) return false;
	}
	else if (isFloat(min)) {
		if (parseFloat(trimNum) < parseFloat(min)) return false;
	}
	else if (isFloat(max)) {
		if (parseFloat(trimNum) > parseFloat(max)) return false;
	}
	return true;
}

function isRangeNumFrm(objField, strFieldName, min, max) {
	if (isWhiteSpace(objField.value)) {
		alert("Please enter field, [" + strFieldName + "].");
		objField.focus();
		return false;
	}
	if (!isRangeNum(objField.value, min, max)) {
		if (isFloat(min) && isFloat(max)) {
			alert("Please enter number (" + min + " <= Number <= " + max + "), [" + strFieldName + "].");
		}
		else if (isFloat(min)) {
			alert("Please enter number (Number >= " + min + "), [" + strFieldName + "].");
		}
		else if (isFloat(max)) {
			alert("Please enter number (Number <= " + max + "), [" + strFieldName + "].");
		}
		objField.focus();
		return false;
	}
	return true;
}

function isFillOutStr1(objField, strFieldName) {
	return isFillOut(objField, strFieldName, "", 0, "", "");
}

function isFillOutStr(objField, strFieldName, strNotAllowedChars) {
	return isFillOut(objField, strFieldName, strNotAllowedChars, 0, "", "");
}

function isFillOutNum1(objField, strFieldName) {
	return isFillOut(objField, strFieldName, "", 1, "", "");
}

function isFillOutNum(objField, strFieldName, min, max) {
	return isFillOut(objField, strFieldName, "", 1, min, max);
}

function isFillOutFloat1(objField, strFieldName) {
	return isFillOut(objField, strFieldName, "", 2, "", "");
}

function isFillOutFloat(objField, strFieldName, min, max) {
	return isFillOut(objField, strFieldName, "", 2, min, max);
}

function isFillOutDate(objField, strFieldName) {
	return isFillOut(objField, strFieldName, "", 3, "", "");
}

function isFillOut(objField, strFieldName, strNotAllowedChars, nDataType, min, max) {
//	numType : 0 - string, 1 - integer, 2 - float

	if (isWhiteSpace(objField.value)) {
		alert("Please enter field, [" + strFieldName + "].");
		objField.focus();
		return false;
	}

	switch (nDataType) {
	case 1:
		if (!isNumericFrm(objField, strFieldName))
			return false;
		break;
	case 2:
		if (!isFloatFrm(objField, strFieldName))
			return false;
		break;
	case 3:
		if (!isDateFrm(objField, strFieldName))
			return false;
		break;
	default:
		break;
	}

	if (strNotAllowedChars != "" && isExistCharsFrm(objField, strFieldName, strNotAllowedChars))
		return false;
	
	if ((nDataType == 1 || nDataType == 2) && (isFloat(min) || isFloat(max))) {
		if (!isRangeNumFrm(objField, strFieldName, min, max))
			return false
	}
	
	return true;
}

function 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 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 isSelected(objField, strFieldName) { 
	if (objField.selectedIndex == -1 || isWhiteSpace(objField.value)) {
		alert("Please select field, [" + strFieldName + "].");
		return false;
	}
	return true;
}




function isValidPhoneNumber(formObj1, formObj2, formObj3, isRequired) {
	if (isRequired == true) {
		if (isWhiteSpace(formObj1.value) || isWhiteSpace(formObj2.value) || isWhiteSpace(formObj3.value)) {
			alert("Invalid phone number.");
			formObj1.focus();
			return false;
		}
	}
	else {
		if (isWhiteSpace(formObj1.value) && isWhiteSpace(formObj2.value) && isWhiteSpace(formObj3.value)) {
			return true;
		}
	}
	
	if (formObj1.value.length!=3 || !isNumeric(formObj1.value)) {
		alert("Invalid phone number.");
		formObj1.focus();
		return false;
	}
	if (formObj2.value.length!=3 || !isNumeric(formObj2.value)) {
		alert("Invalid phone number.");
		formObj2.focus();
		return false;
	}
	if (formObj3.value.length!=4 || !isNumeric(formObj3.value)) {
		alert("Invalid phone number.");
		formObj3.focus();
		return false;
	}
	return true;
}

function isZipCodeForUSA(strZip) {
	var trimZip;
	
	trimZip = trim(strZip);
	if (trimZip.length != 5) {
		return false;
	}

	return isNumeric(trimZip);
}

function changeMoney(objField) {
	var dValue = trim(objField.value);
	if (dValue != "")
		objField.value = dValue;
}


function pressNumber(event, what) {
	var value;
	var el;

	if(FEIP_BrowserDetect.browser == "Explorer")
	{	
		value = event.keyCode 
		el = event.srcElement
	}
	else
  {
		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();
	}
}

function FEJS_changeCurrency(objDDL)
{
  var szCurrencyCookie = "CurrencyCode=" + escape(objDDL.options[objDDL.selectedIndex].value) + ";";

  var dateNow = new Date();
  dateNow.setTime(dateNow.getTime() + (1 * 24 * 60 * 60 * 1000));
	szCurrencyCookie += " expires=" + dateNow.toGMTString() + ";";
  szCurrencyCookie += " path=/";

  document.cookie = szCurrencyCookie;
  window.location.reload(false);
}

function FEJS_getCookie(szName)
{
  var nStart = document.cookie.indexOf(szName + "=");
  var nLen = nStart + szName.length + 1;
  if (!nStart && szName != document.cookie.substring(0, szName.length))
    return "";

  if (nStart == -1)
    return "";

  var nEnd = document.cookie.indexOf(";", nLen);
  if (nEnd == -1)
    nEnd = document.cookie.length;

  return unescape(document.cookie.substring(nLen, nEnd));
}

function FEJS_getContentSize()
{
  var nWidth = 0, nHeight = 0;
  
  if (typeof(window.innerWidth) == "number")
  {
    //Non-IE
    nWidth = window.innerWidth;
    nHeight = window.innerHeight;
  } 
  else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight))
  {
    //IE 6+ in 'standards compliant mode'
    nWidth = document.documentElement.clientWidth;
    nHeight = document.documentElement.clientHeight;
  }
  else if (document.body && (document.body.clientWidth || document.body.clientHeight))
  {
    //IE 4 compatible
    nWidth = document.body.clientWidth;
    nHeight = document.body.clientHeight;
  }
  
  return [nWidth, nHeight];
}

function FEJS_getScrollXY()
{
  var nXOffset = 0, nYOffset = 0;
  
  if (typeof(window.pageYOffset) == 'number')
  {
    //Netscape compliant
    nYOffset = window.pageYOffset;
    nXOffset = window.pageXOffset;
  } 
  else if (document.body && (document.body.scrollLeft || document.body.scrollTop))
  {
    //DOM compliant
    nYOffset = document.body.scrollTop;
    nXOffset = document.body.scrollLeft;
  }
  else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop))
  {
    //IE6 standards compliant mode
    nYOffset = document.documentElement.scrollTop;
    nXOffset = document.documentElement.scrollLeft;
  }
  return [nXOffset, nYOffset];
}

function FEJS_getScrollXYForPos()
{
  if (FEIP_BrowserDetect.browser == "Explorer" && FEIP_BrowserDetect.version < 8)
    return FEJS_getScrollXY();
  else
    return [0, 0];
}

function FEJS_getScrollSize()
{
  var nWidth = 0, nHeight = 0;

  nWidth = document.all ? Math.max(Math.max(document.documentElement.offsetWidth, document.documentElement.scrollWidth), document.body.scrollWidth) : (document.body ? document.body.scrollWidth : ((document.documentElement.scrollWidth != 0) ? document.documentElement.scrollWidth : 0));
  nHeight = document.all ? Math.max(Math.max(document.documentElement.offsetHeight, document.documentElement.scrollHeight), Math.max(document.body.offsetHeight, document.body.scrollHeight)) : (document.body ? document.body.scrollHeight : ((document.documentElement.scrollHeight != 0) ? document.documentElement.scrollHeight : 0));

  return [nWidth, nHeight];
}

function FEJS_showLoading()
{
  var objContainer = document.getElementById("bodyContainer");
  if (objContainer.disabled)
    return;
  
  objContainer.disabled = true;

  var arrSize = FEJS_getContentSize();
  var arrOffset = FEJS_getScrollXY();

  var nX = 0, nY = 0;
  var nWidth = arrSize[0], nHeight = arrSize[1];
  var nXOffset = arrOffset[0], nYOffset = arrOffset[1];
  
  nX = (nWidth / 2) + nXOffset;
  nY = (nHeight / 2) + nYOffset;

  var objLoading = document.getElementById("FEJS_idLoadingFrame");
  arrSize = FEJS_getScrollSize();
  nWidth = arrSize[0], nHeight = arrSize[1];
  objLoading.style.left = "0px";
  objLoading.style.top = "0px";
  objLoading.style.width = nWidth + "px";
  objLoading.style.height = nHeight + "px";
  objLoading.style.display = "block";

  var objLoadingImg = document.getElementById("FEJS_idLoadingImg");
  objLoadingImg.style.left = (nX - 21) + "px";
  objLoadingImg.style.top = (nY - 5) + "px";
  objLoadingImg.style.display = "block";
}

function FEJS_hideLoading()
{
  var objContainer = document.getElementById("bodyContainer");
  if (!objContainer.disabled)
    return;

  document.getElementById("FEJS_idLoadingImg").style.display = "none";
  document.getElementById("FEJS_idLoadingFrame").style.display = "none";
  objContainer.disabled = false;
}
