var wildcardCaseInsensitive=true;function setWildcardCaseInsensitive(bool){wildcardCaseInsensitive=bool}var alertUser=true;function setAlertUser(bool){alertUser=bool}function doCheckLuceneQuery(queryField){return doCheckLuceneQueryValue(queryField.value)}function doCheckLuceneQueryValue(query){if(query!=null&&query.length>0){query=removeEscapes(query);if(!checkAllowedCharacters(query))return false;if(!checkAsterisk(query))return false;if(!checkAmpersands(query))return false;if(!checkCaret(query))return false;if(!checkSquiggle(query))return false;if(!checkExclamationMark(query))return false;if(!checkQuestionMark(query))return false;if(!checkParentheses(query))return false;if(!checkPlusMinus(query))return false;if(!checkANDORNOT(query))return false;if(!checkQuotes(query))return false;if(!checkColon(query))return false;if(wildcardCaseInsensitive)if(query.indexOf("*")!=-1){var i=query.indexOf(":");if(i==-1)query.value=query.toLowerCase();else query.value=query.substring(0,i)+query.substring(i).toLowerCase()}return true}}function removeEscapes(query){return query.replace(/\\./g,"")}function checkAllowedCharacters(query){matches=query.match(/[^a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^~\\@#\/$%'= ]/);if(matches!=null&&matches.length>0){alertUser&&SpeechBox.DisplayMessage("","Invalid search query! The allowed characters are a-z A-Z 0-9.  _ + - : () \" & * ? | ! {} [ ] ^ ~ \\ @ = # % $ ' /. Please try again.");return false}return true}function checkAsterisk(query){matches=query.match(/^[\*]*$|[\s]\*|^\*[^\s]/);if(matches!=null){alertUser&&SpeechBox.DisplayMessage("","Invalid search query! The wildcard (*) character must be preceded by at least one alphabet or number. Please try again.");return false}return true}function checkAmpersands(query){matches=query.match(/[&]{2}/);if(matches!=null&&matches.length>0){matches=query.match(/^([a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^~\\@#\/$%'=]+( && )?[a-zA-Z0-9_+\-:.()\"*?|!{}\[\]\^~\\@#\/$%'=]+[ ]*)+$/);if(matches==null){alertUser&&SpeechBox.DisplayMessage("","Invalid search query! Queries containing the special characters && must be in the form: term1 && term2. Please try again.");return false}}return true}function checkCaret(query){matches=query.match(/[^\\]\^([^\s]*[^0-9.]+)|[^\\]\^$/);if(matches!=null){alertUser&&SpeechBox.DisplayMessage("","Invalid search query! The caret (^) character must be preceded by alphanumeric characters and followed by numbers. Please try again.");return false}return true}function checkSquiggle(query){matches=query.match(/[^\\]~[^\s]*[^0-9\s]+/);if(matches!=null){alertUser&&SpeechBox.DisplayMessage("","Invalid search query! The tilde (~) character must be preceded by alphanumeric characters and followed by numbers. Please try again.");return false}return true}function checkExclamationMark(query){matches=query.match(/^[^!]*$|^([a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^~\\@#\/$%'=]+( ! )?[a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^~\\@#\/$%'=]+[ ]*)+$/);if(matches==null||matches.length==0){alertUser&&SpeechBox.DisplayMessage("","Invalid search query! Queries containing the special character ! must be in the form: term1 ! term2. Please try again.");return false}return true}function checkQuestionMark(query){matches=query.match(/^(\?)|([^a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^~\\@#\/$%'=]\?+)/);if(matches!=null&&matches.length>0){alertUser&&SpeechBox.DisplayMessage("","Invalid search query! The question mark (?) character must be preceded by at least one alphabet or number. Please try again.");return false}return true}function checkParentheses(query){var hasLeft=false,hasRight=false;matchLeft=query.match(/[(]/g);if(matchLeft!=null)hasLeft=true;matchRight=query.match(/[)]/g);if(matchRight!=null)hasRight=true;if(hasLeft||hasRight){if(hasLeft&&!hasRight||hasRight&&!hasLeft){alertUser&&SpeechBox.DisplayMessage("","Invalid search query! Parentheses must be closed. Please try again.");return false}else{var number=matchLeft.length+matchRight.length;if(number%2>0||matchLeft.length!=matchRight.length){alertUser&&SpeechBox.DisplayMessage("","Invalid search query! Parentheses must be closed. Please try again.");return false}}matches=query.match(/\(\)/);if(matches!=null){alertUser&&SpeechBox.DisplayMessage("","Invalid search query! Parentheses must contain at least one character. Please try again.");return false}}return true}function checkPlusMinus(query){matches=query.match(/^[^\n+\-]*$|^([+-]?[a-zA-Z0-9_:.()\"*?&|!{}\[\]\^~\\@#\/$%'=]+[ ]?)+$/);if(matches==null||matches.length==0){alertUser&&SpeechBox.DisplayMessage("","Invalid search query! '+' and '-' modifiers must be followed by at least one alphabet or number. Please try again.");return false}return true}function checkANDORNOT(query){matches=query.match(/AND|OR|NOT/);if(matches!=null&&matches.length>0){matches=query.match(/^([a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^~\\@\/#$%'=]+\s*((AND )|(OR )|(AND NOT )|(NOT ))?[a-zA-Z0-9_+\-:.()\"*?&|!{}\[\]\^~\\@\/#$%'=]+[ ]*)+$/);if(matches==null||matches.length==0){alertUser&&SpeechBox.DisplayMessage("","Invalid search query!  Queries containing AND/OR/NOT must be in the form: term1 AND|OR|NOT|AND NOT term2 Please try again.");return false}matches=query.match(/^((AND )|(OR )|(AND NOT )|(NOT ))|((AND)|(OR)|(AND NOT )|(NOT))[ ]*$/);if(matches!=null&&matches.length>0){alertUser&&SpeechBox.DisplayMessage("","Invalid search query!  Queries containing AND/OR/NOT must be in the form: term1 AND|OR|NOT|AND NOT term2 Please try again.");return false}}return true}function checkQuotes(query){matches=query.match(/\"/g);if(matches!=null&&matches.length>0){var number=matches.length;if(number%2>0){alertUser&&SpeechBox.DisplayMessage("",'Invalid search query! Please close all quote (") marks.');return false}matches=query.match(/""/);if(matches!=null){alertUser&&SpeechBox.DisplayMessage("","Invalid search query! Quotes must contain at least one character. Please try again.");return false}}return true}function checkColon(query){matches=query.match(/[^\\\s]:[\s]|[^\\\s]:$|[\s][^\\]?:|^[^\\\s]?:/);if(matches!=null){alertUser&&SpeechBox.DisplayMessage("","Invalid search query! Field declarations (:) must be preceded by at least one alphabet or number and followed by at least one alphabet or number. Please try again.");return false}return true}
