function Trim(str) {
	while (str.length > 0 && str.charAt(0) == ' ') {
		str = str.substring(1)
	}
	while (str.length > 0 && str.charAt(str.length - 1) == ' ') {
		str = str.substring(0, str.length - 1)
	}
	return str
}

function ConvertNumber(str,lngDataTypeID) {
	var newstr;
	str = Trim(str)
	if (isNaN(str)) {
		return ("'" + str + "'")
	}
	else {
		if(str == ""){
			if((lngDataTypeID == G_DATA_TYPE_INTEGER_ZERO_EVAL)||(lngDataTypeID == G_DATA_TYPE_CURRENCY_ZERO_EVAL))
				return 0;
			else
				return "null"  + str;
			}
		else {
			newstr = Number(str)
			return newstr;
		}
	}
}


function Evaluator(strDependencyExpression) {
	var str
	var strStart = "ConvertNumber"
	var strEnd = "))"
	var strStartIndex
	var strEndIndex
	
	strStartIndex = strDependencyExpression.indexOf(strStart)
	while (strStartIndex >= 0) {
		strEndIndex = strDependencyExpression.indexOf(strEnd, strStartIndex)
	  str = strDependencyExpression.substring(strStartIndex, strEndIndex + strEnd.length)
	  str = eval(str)
		strDependencyExpression = strDependencyExpression.substring(0, strStartIndex) + str + strDependencyExpression.substring(strEndIndex + strEnd.length, strDependencyExpression.length);
		strStartIndex = strDependencyExpression.indexOf(strStart)
	}
	strDependencyExpression = NullReplacer(strDependencyExpression)

	return eval(strDependencyExpression)
}

function NullReplacer(strWithNulls) {
	var strToFind = "null";
	var strIndex;
	var strExprStart;
	var strExprEnd;
	var NEIndex;
	var openParenCount;
	var closeParenCount;
	
	strIndex = strWithNulls.indexOf(strToFind);
	while (strIndex >= 0) {
		strExprStart = strIndex;
		openParenCount = 0;
		while ((strExprStart > 0) && (strWithNulls.charAt(strExprStart - 1) != '|') && (strWithNulls.charAt(strExprStart - 1) != '&') && (openParenCount < 1)) {
			strExprStart--;
			if (strWithNulls.charAt(strExprStart) == '(') {
				openParenCount++;
			}
			if (strWithNulls.charAt(strExprStart) == ')') {
				openParenCount--;
			}
		}
	
		strExprEnd = strIndex;
		closeParenCount = 0;
		while ((strExprEnd < strWithNulls.length) && (strWithNulls.charAt(strExprEnd) != '|') && (strWithNulls.charAt(strExprEnd) != '&') && (closeParenCount > -1)) {
			// Keep count of any parentheses found
			if (strWithNulls.charAt(strExprEnd) == '(') {
				closeParenCount++;
			}
			if (strWithNulls.charAt(strExprEnd) == ')') {
				closeParenCount--;
			}
			strExprEnd++;
		}

		NEIndex = strWithNulls.indexOf("!=", strExprStart);
		if ((NEIndex >= strExprStart) && (NEIndex < strExprEnd)) {
			if ((openParenCount >= 1) && (closeParenCount > -1)) {
				strExprStart++;
			}
			else if ((openParenCount < 1) && (closeParenCount <= -1)) {
				strExprEnd--;
			}
			strWithNulls = strWithNulls.substring(0, strExprStart) + "true" + strWithNulls.substring(strExprEnd, strWithNulls.length);
		}
		else {
			if ((openParenCount >= 1) && (closeParenCount <= -1)) {
				strWithNulls = strWithNulls.substring(0, strExprStart) + strToFind + strWithNulls.substring(strExprEnd, strWithNulls.length);
			}
			else {
				if (openParenCount >= 1) {
					strExprStart++;
				}
				else if (closeParenCount <= -1) {
					strExprEnd--;
				}
				strWithNulls = strWithNulls.substring(0, strExprStart) + "false" + strWithNulls.substring(strExprEnd, strWithNulls.length);
			}
		}
		strIndex = strWithNulls.indexOf(strToFind);
	}
	return strWithNulls;
}
