function sendQuery(item,form,expvalue,wordexpvalue) {
	
	if (item.value == 'Submit Query') {
		var maxcondition = parseInt(form.condition.value);
		var displayname = 'Grouping Expression';
		if(checkGroupingExpression(form,expvalue,maxcondition,displayname) == true) {
			maxcondition = parseInt(form.wordcondition.value);
			displayname = 'Keyword Expression';
			if(checkGroupingExpression(form,wordexpvalue,maxcondition,displayname) == true) {
				form.submit();
				item.value = 'Please wait.';
				return true;
			}
		}
	}
	return false;
}

function checkGroupingExpression(form,field,maxcondition,displayname)
{
	if (maxcondition <= 1) return true;
	
	var allowedCharacters = "AND|NOT|OR|(|)|1|2|3|4|5|6|7|8|9|10"
	var numberSet = "1|2|3|4|5|6|7|8|9|10"
	var allowedCharactersDelimter = "|"
	var expression = field.value;
	var expressionPiece = ""
	var leadingwhitespaces = /^\s+/;
	var trailingwhitespaces = /\s+$/;
	var multiwhitespaces = /\s+/g;
	var singlewhitespace = /\s/g;
	var leadingAnd = /^\s*\(*\s*AND/i;
	var leadingOr =  /^\s*\(*\s*OR/i;
	var trailingAnd = /AND\s*\)*\s*$/i;
	var trailingNot = /NOT\s*\)*\s*$/i;
	var trailingOr = /OR\s*\)*\s*$/i;
	var emptyParen = /\(\s*\)/;
	var emptyRightLeftParen = /\)\s*\(/;
	var trailingOpenParen = /\(\s*$/;
	var leadingCloseParen = /^\s*\)/;
	var LeftParen = /\(/g;
	var RightParen = /\)/g;
	var AndAndCombination = /AND\s*\(*\s*\)*\s*AND/i;
	var OrOrCombination = /OR\s*\(*\s*\)*\s*OR/i;
	var OrAndCombination = /OR\s*\(*\s*\)*\s*AND/i;
	var AndOrCombination = /AND\s*\(*\s*\)*\s*OR/i;
	var reDigit = /^\d+/;
	var j = -1;
	var ok = false;
	var TempArray = expression.split("(");
	var LeftParenCount = TempArray.length;
	var TempArray = expression.split(")");
	var RightParenCount = TempArray.length;
	if (LeftParenCount != RightParenCount) {
		alert('The number of left parentheses does not match the number of right parentheses');
		return false;
	}
	if ((emptyParen.test(expression)) || (emptyRightLeftParen.test(expression))) {
		alert('Missing criteria between parentheses in ' + displayname);
		return false;
	}
	if (AndAndCombination.test(expression)) {
		alert('Missing criteria between ANDs in ' + displayname);
		return false;
	}
	if (OrOrCombination.test(expression)) {
		alert('Missing criteria between ORs in ' + displayname);
		return false;
	}
	if (AndOrCombination.test(expression)) {
		alert('Missing criteria between an AND and an OR in ' + displayname);
		return false;
	}
	if (OrAndCombination.test(expression)) {
		alert('Missing criteria between an OR and an AND in ' + displayname);
		return false;
	}		
	if (trailingOpenParen.test(expression)) {
		alert('Cannot end ' + displayname + ' with and an "("');
		return false;
	}		
	if (leadingCloseParen.test(expression)) {
		alert('Cannot begin ' + displayname + ' with and an ")"');
		return false;
	}	
	if (leadingAnd.test(expression)) {
		alert('Cannot begin ' + displayname + ' with AND');
		return false;
	}
	if (leadingOr.test(expression)) {
		alert('Cannot begin ' + displayname + ' with OR');
		return false;
	}
	if (trailingAnd.test(expression)) {
		alert('Cannot end ' + displayname + ' with AND');
		return false;
	}
	if (trailingOr.test(expression)) {
		alert('Cannot end ' + displayname + ' with OR');
		return false;
	}
	if (trailingNot.test(expression)) {
		alert('Cannot end ' + displayname + ' with NOT');
		return false;
	}
	if (expression.indexOf(",") != -1) {
		alert('Commas are not allowed within the ' + displayname);
		return false;
	}
	expression = expression.replace(LeftParen,"( ");
	expression = expression.replace(RightParen," )");
	expression = expression.replace(leadingwhitespaces,"");
	expression = expression.replace(trailingwhitespaces,"");
	expression = expression.replace(multiwhitespaces," ");
	expression = expression.replace(singlewhitespace,",");
	if (expression == "") {
		alert('The ' + displayname + ' is empty.');
		return false;
	}
	expression = expression.toUpperCase();
	var expressionArr = expression.split(",");
	expression = expression.replace(/,/g," ");
	for(var i = 0; i < expressionArr.length; i++) {
		expressionPiece = expressionArr[i];
		if(( (allowedCharacters.indexOf(expressionPiece) != -1) && (expressionPiece.indexOf(allowedCharactersDelimter) == -1) ) == false) {
			alert(expressionArr[i] + ' is an invalid entry in the ' + displayname);
			return false;
		}
		if (reDigit.test(expressionPiece) == true) {
			var errorOccured = false;
			var alertMessage = "";
			/* Check that a number is not entered twice*/
			for(var k = 0; k < expressionArr.length; k++) {
				var testExpressionPiece = expressionArr[k];
				if (expressionPiece == testExpressionPiece && k != i) {
					alertMessage = 'The criteria number (' + expressionPiece + '\) is entered twice.';
					errorOccured = true;
				}
			}
			if (errorOccured == true) {
				alert(alertMessage);
				return false;
			} 
			if (((1 <= parseInt(expressionPiece)) && (parseInt(expressionPiece) <= maxcondition)) == false) {
				alert('The ' + displayname + ' contains a criteria number (' + expressionPiece + '\) which is outside of the acceptable range (1 - ' + maxcondition + '\).');
				return false;
			}
		}
		if (expressionPiece == "NOT" && i != 0) {
			j = i;
			ok = false;
			while (j > -1 && ok == false) {
				testPiece = expressionArr[j];
				if (numberSet.indexOf(testPiece) != -1) {
					alert('The logical expression NOT is not a connector.  It must be preceded by AND or OR.');
					return false;
				}
				if (testPiece == "AND" || testPiece == "OR") ok = true;
				j--;
			}
		}
	}
	field.value = expression;
	return true;
}

