
	function FieldIsEmpty(sFieldValue) {
		if (sFieldValue == null) {
			return true;
		}
		if (sFieldValue == '') {
			return true;
		}
		return false;
	}

	function ToggleFaq(sFaqId) {
		if (document.getElementById(sFaqId).style.display == 'none') {
			document.getElementById(sFaqId).style.display = '';
		}
		else {
			document.getElementById(sFaqId).style.display = 'none';
		}
	}

	function ValueIsNumber(sFieldValue) {
		var sNumber = new String('0123456789');
		
		if (sFieldValue.substring(0, 0) == '-') {
			sFieldValue = sFieldValue.substring(1, sFieldValue.length - 1);
		}
		for (i = 0; i < sFieldValue.length; i++) {
			if (sNumber.indexOf(sFieldValue.substring(i, i + 1)) == -1) {
				return false;
			}
		}
		return true;
	}

	function IsIpOrWildcard(sFieldValue) {
		if (sFieldValue == "*") {
			return true;
		}
		else {
			return IsValidIpNumber(sFieldValue);
		}
	}

	function IsDomainOrWildcard(sFieldValue) {
		if (sFieldValue.length > 2) {
			if (sFieldValue.substr(0, 2) == "*.") {
				sFieldValue = sFieldValue.substr(2, sFieldValue.length - 2);
			}
			return IsDomain(sFieldValue);
		}
		else {
			return false;
		}
	}

	function IsValidIpv6Number(sFieldValue) {
		iDotPos = sFieldValue.indexOf(":");
		if (iDotPos == -1) {
			return false;
		}

		// TODO: compressed versions ?!?!?!
		var aNumbers = sFieldValue.split(':');
		if (aNumbers.length != 8) {
			return false;
		}

		for (iIndex = 0; iIndex < aNumbers.length; iIndex++) {
			var sValue = aNumbers[iIndex];
			if (sValue.length < 1 || sValue.length > 4) {
				return false;
			}
			
			for (iCounter = 0; iCounter < sValue.length; iCounter++) {
				if ("0123456789abcdefABCDEF".indexOf(sValue.charAt(iCounter)) == -1) {
					return false;
				}
			}
		}

		return true;
	}

	function IsValidIpNumber(sFieldValue) {
		iDotPos = sFieldValue.indexOf(".");
		if (iDotPos == -1) {
			return false;
		}

		var aNumbers = sFieldValue.split('.');
		if (aNumbers.length != 4) {
			return false;
		}

		var bReturn = true;
		for (iIndex = 0; iIndex < aNumbers.length; iIndex++) {
			bReturn = ValueIsNumber(aNumbers[iIndex]);

			if (!bReturn || aNumbers[iIndex] < 0 || aNumbers[iIndex] > 255) {
				return false;
			}
		}

		if (aNumbers[0] == 0) {
			return false;
		}

		return true;
	}

	function IsLeftMost(sFieldValue, sLeftMost) {
		if (sFieldValue.length < sLeftMost) {
			return false;
		}
		if (sFieldValue.substr(sFieldValue.length - sLeftMost.length, sLeftMost.length).toLowerCase() != sLeftMost.toLowerCase()) {
			return false;
		}
		
		return true;
	}

	function Is2ndLevelDomain(sFieldValue) {
		iDotPos = sFieldValue.indexOf(".");
		if (iDotPos == -1) {
			return false;
		}

		var aWords = sFieldValue.split('.');
		if (aWords.length != 2) {
			return false;
		}
		return IsDomain(sFieldValue);
	}

	function IsDomain(sFieldValue) {
		iDotPos = sFieldValue.indexOf('.');
		if (iDotPos == -1) {
			return false;
		}

		var bReturn = true;
		var aWords = sFieldValue.split('.');
		for (iIndex = 0; iIndex < aWords.length; iIndex++) {
			if (!IsWord(aWords[iIndex], "abcdefghijklmnopqrstuvwxyz-0123456789")) {
				return false;
			}
		}
		return bReturn;
	}

	function IsWord(sWord, sValidChars) {
		if (sWord == '') {
			return false;
		}
		sWord = sWord.toLowerCase();
		var iCounter = 0;
		var iCharIndex;
		while (iCounter < sWord.length) {
			var iCharCode = sWord.charCodeAt(iCounter);
			iCharIndex = sValidChars.indexOf(sWord.charAt(iCounter));
			if (iCharIndex < 0 && iCharCode < 0x80) {
				return false;
			}
			iCounter = iCounter + 1
		}
		return true;
	}

	function IsValidEmail(sFieldValue) {
		iDotPos = sFieldValue.indexOf('@');
		if (iDotPos == -1) {
			return false;
		}

		var aParts = sFieldValue.split('@');
		if (aParts.length != 2) {
			return false;
		}

		var aLocalPart = aParts[0].split('.');
		for (iIndex = 0; iIndex < aLocalPart.length; iIndex++) {
			if (!IsWord(aLocalPart[iIndex], "abcdefghijklmnopqrstuvwxyz-0123456789")) {
				return false;
			}
		}

		iDotPos = aParts[1].indexOf('.');
		if (iDotPos == -1) {
			return false;
		}

		var aDomainPart = aParts[1].split('.');
		for (iIndex = 0; iIndex < aDomainPart.length; iIndex++) {
			if (!IsWord(aDomainPart[iIndex], "abcdefghijklmnopqrstuvwxyz-0123456789")) {
				return false;
			}
		}
		return true;
	}


