var closeHistory=1;
var historyWindow=null;
var termsWindow;
var readyToSubmit=true;
var expirationDate=new Date();
var noRoomDelete=0;		// added 4/22/03 to fix the history window  bug.
expirationDate.setFullYear(expirationDate.getFullYear() + 5);

function offClicker(object) {

	object.value=createAccents(object.value)
  	checkFields(object);
}	

function submitHandler() {

	
	for  (var i = 0; i < document.forms[0].elements.length; i++) {
		
		if (checkFields(document.forms[0].elements[i]) == false) {
			
			return false;
		
		}
	
	} 

	if (readyToSubmit==false) {
                return false;
        }

//	if (document.forms[0].keepHistory.checked) {

        
// ## Chuck edit to eliminate cookies/history
//        addHistoryToCookie();
//

//        }
	
	return true;

}

function checkFields(object) {
        
        if (errorHash[(object.name)] == 'philologic') {
        
                        if (object.value.search(/&|\(|\)|\<|\>|\-|\@|\%|\!|:|;|\$/) > -1) {
				var invalidChars = /["'\\()\?\$\/\<\>\[\]]/gi                               
//var invalidChars = /["'\\()]/gi
				object.value = object.value.replace(invalidChars,".");
				// ##alert('You have entered an unsearchable character in the "Search Texts" field. These include: & - < > ( ) @ % ! : ; $. Please delete them from your search and then continue.');
                                //##readyToSubmit=false;
                                //##return false;
                        }
                        
                        if (object.value.indexOf(" NOT ") > -1) {
                                alert('"NOT" is not a valid operator for the "Search Texts:" field.  If searching for the word "not" please reenter the word in lowercase.');
                                readyToSubmit=false;
                                return false;   
                        }
                        
                        if ((object.value.indexOf(" AND ") > -1) && (confirm('AND is not a valid operator for the "Search Texts" field.  If searching for the word "and" please press OK and continue.') == false)) {
                        
                                readyToSubmit=false;
                                return false;
                        
                        } else {
                        
                                object.value=changeAnd(object.value);
                                readyToSubmit=true;
                        }
                        
                        if (object.value.indexOf(" OR ") > -1) { 
                        
                                object.value=changeOr(object.value);
                                readyToSubmit=true;
                        }
                        
                } 

		if (errorHash[(object.name)] == 'sql') {
        
                        if (object.value.search(/\(|\)|\?|\<|\>|\[|\]|\$/) > -1) {
                        
				var invalidChars = /["'\\()\?\$\/\<\>\[\]]/gi
				object.value = object.value.replace(invalidChars,".");
			
                               //# alert('You have entered an unsearchable character in the "' + hash[(object.name)] + '" field. These include: ( ) ? < > [ ] $. Please replace the character with a period then continue.');
                               //# readyToSubmit=false;
                               //# return false;
                        
                        }
                }

                                
                if (errorHash[(object.name)] == 'sqlnumeric') {
                
                        if (object.value.search(/[^0-9-]/) > -1) {
                        
                                alert('Only numbers can be entered in the numeric field "' + hash[(object.name)] + '." Please correct, then continue.');
                                readyToSubmit=false;
                                return false;
                        }
                }
                readyToSubmit=true;
                return true;
}


function deleteAllHistory() {
		var now = new Date();
		document.cookie= escape(document.URL) + "=; expires=" + now.toGMTString();
		
		
		}
		

function checkForHistory() {

	if (document.cookie) {
		return true;
		} else {
		return false;
		}
	}

function addHistoryToCookie() {

	var oldLength = getAllHistoryItems(document.URL).length;
	
	var newCookieData="";
	
	var historyItems = getAllHistoryItems(document.URL);
	
	if (historyItems) {

		for (i = 0; i < historyItems.length; i++) {
			newCookieData += "%" + historyItems[i]; 
			}
	} 
	
	
	
	newCookieData = escape(document.URL) + "=" + getFormData() + newCookieData;
	
	document.cookie = newCookieData + "; expires=" + expirationDate.toGMTString();

	var newLength = getAllHistoryItems(document.URL).length;
	
	if (oldLength == newLength) {
	
		noRoomDelete = 1;	// flagged to prevent opening of History window.
		alert("You have run out of room for more history items in your cookie. Queries will be deleted, starting with the oldest, untill there is enough room in the cookie for the current query.");
		
		deleteHistoryItem(getAllHistoryItems(document.URL).length -1);
		addHistoryToCookie();
		noRoomDelete = 0;	// reset to initial value of zero. allow History window to open.
	}
}



function getRadioButtonIndex(groupName) {
	var groupLength = eval("document.forms[0]." + groupName + ".length");

	for (j=0; j < groupLength; j++) {
		
		if (eval("document.forms[0]." + groupName + "[" + j + "].checked")) {
			return j;
		}
	}
}


function getFormData() {

	var values="";

	for (var i=0; i < document.forms[0].elements.length; i++) {
		
		var element = document.forms[0].elements[i];
			
		if (element.type.indexOf("select") > -1) {
			
			if (element.selectedIndex != 0 || element.options[element.selectedIndex].value != "ALL") {
				values += element.name + "::" + element.selectedIndex + "$";

			}
	
		} else if (element.type.indexOf("text") > -1) {
			if (element.value != "") {
				values += element.name + "::" + element.value +  "$";
			}
			
		} else if (element.type.indexOf("radio") > -1) {
			if (element.checked && getRadioButtonIndex(element.name)!=0) {
				values += element.name + "[" + getRadioButtonIndex(element.name) + "]::$";

			}
		}	
	}

	return values;
}

function setSingleFormElement(toBeSet) {
	var nameAndValue = toBeSet.split("::");
	
	nameAndValue[0] = pageSpecificMapping(nameAndValue[0]);

	//nameAndValue[1] = nameAndValue[1].replace(/\<[^\>]*\>/g, '');

	nameAndValue[1] = nameAndValue[1].replace(/\?|\<|\>|\[|\]|\$|\(|\)/g, '.');

	
	var fieldName = eval("document.forms[0]." + nameAndValue[0]);

	if (fieldName.type == "text" ) {
		
		if (fieldName.value.length > 0) {
			fieldName.value = fieldName.value + " OR " + nameAndValue[1];
		} else {
			fieldName.value = nameAndValue[1];
		}
			
	}	else if (fieldName.type.indexOf("select") > -1) {		 
			fieldName.selectedIndex=nameAndValue[1];
			
	}	else if (fieldName.type.indexOf("radio") > -1) {
			fieldName.checked = true;
	}
}

function setFormData(historyIndex) {
	
	clearAll();
	
	var formFields = getOneHistoryItem(historyIndex);
	
	var j=0;

	for (var i=0; i < formFields.length -1; i++) {
		setSingleFormElement(formFields[i]);
		
	}
	
	readyToSubmit=true;
	
}

function clearAll() {

		
	for (i=0; i < document.forms[0].elements.length; i++) {
	
		if (document.forms[0].elements[i].type == "text") {
			document.forms[0].elements[i].value="";
		}
		
		if (document.forms[0].elements[i].type.indexOf("select") > -1) {
			document.forms[0].elements[i].selectedIndex=0;
		}
	}
}


function getFieldNames() {

	var fieldNames = new Array();
	
	var j=0;
	for (var i = 0; i < document.forms[0].elements.length; i++) {
		
		if (document.forms[0].elements[i].type.indexOf("select") + document.forms[0].elements[i].type.indexOf("text") + document.forms[0].elements[i].type.indexOf("radio")  > -3 ){
				
			fieldNames[j] = document.forms[0].elements[i].name; 
				j++;
		}
	}
	return fieldNames;

}


function getAllHistoryItems(cookieName) {
	
	

	indexOfCookieName = document.cookie.indexOf(escape(cookieName) + "=");
	
	
	if (indexOfCookieName > -1) {
	
		if (document.cookie.indexOf(";", indexOfCookieName) > -1) {
			var endOfCookie = document.cookie.indexOf(";", indexOfCookieName);
			
		} else {
			var endOfCookie = document.cookie.length;	
		}
	
		thisCookie = document.cookie.substring(indexOfCookieName + escape(cookieName).length + 1, endOfCookie);
		
		var historyItems = thisCookie.split("%");

				return historyItems;
	
	
		} else {
		
			return false;
			
		}
	

	}
	
	

function getOneHistoryItem(historyIndex) {

	historyItems=getAllHistoryItems(document.URL);
	
	var formFields = historyItems[historyIndex].split( "$");

	return formFields;
	
	}

function deleteHistoryItem(historyItemIndex) {

	deleteHistoryItemHelper(historyItemIndex);
	
}

function deleteHistoryItemHelper(historyItemIndex) {

	var newCookieData = escape(document.URL) + "=";

	var historyItems = getAllHistoryItems(document.URL);
	
	if (historyItems.length == 1 ) {
	
		deleteAllHistory();
		historyWindow.close();
		return true;
	}
	
	
	for (i=historyItemIndex; i < historyItems.length; i++) {
	
		historyItems[i] = historyItems[i+1];
		
		}
		
	historyItems.length--;
	
	for (i = 0; i < historyItems.length; i++) {
		
		newCookieData +=  historyItems[i]; 
				
		if ( i < historyItems.length -1) {
				
			newCookieData += "%";
		} 
	}


	document.cookie = newCookieData + "; expires=" + expirationDate.toGMTString();
	if (noRoomDelete != 1) {
		openHistoryWindow();
		}
	}


function openHistoryWindow() {
	

    historyWindow = window.open("", "historyWindow", "width=400,height=600,scrollbars=yes,resizable=yes");
	var historyWindowContents = "Query history for <b><font size=2>" + document.URL + "</b>\n";
	var historyItems = getAllHistoryItems(document.URL);
	
	var hashItems = new Object();
	
	for (i = 0; i < historyItems.length; i++) {
	
		}
	
	if (historyItems.length) {
	
		historyWindowContents += '<p><form name=joke><input type=button value="Clear History" onClick="opener.deleteAllHistory();self.close();">\n<input type=button value="Close Window" onClick="self.close();">';
		
		fieldNames = getFieldNames();
	
			
		for (i = 0; i < historyItems.length; i++) {
			
			currentHistoryItem = getOneHistoryItem(i);
			prepareItems();
			historyWindowContents += "<hr><table width=400 cellspacing=0 cellpadding=0><font size=-1>";
				
			
			for (var j = 0; j < currentHistoryItem.length; j++) {			
			
				
			
				if (currentHistoryItem[j] != "") {		
					
					var nameAndValue = currentHistoryItem[j].split("::");
					
					historyWindowContents += "<tr><td> <font color=#800000>";
					
					if (hash[(nameAndValue[0])]) {
					
						historyWindowContents += hash[(nameAndValue[0])] + "</font>";
						
						historyWindowContents += " <font color=#000000>";
						//historyWindowContents += "<a href=\"javascript:opener.setSingleFormElement(\'" + currentHistoryItem[j] + "\') ;\">"
						historyWindowContents += " " + nameAndValue[1];	
						historyWindowContents += "</font></td></tr>\n";
					
					} else if (hash[(nameAndValue[0] + nameAndValue[1])]) {
					
						historyWindowContents += hash[(nameAndValue[0] + nameAndValue[1])];	
						historyWindowContents += "</td></tr>\n";
					}
				}
			}
	
		

			historyWindowContents += "<tr><td><a href='javascript:opener.setFormData(" + i + ");self.close();'>";
			historyWindowContents += "<img src=paste.jpg border=0>"  + "</a>" ;
			
			historyWindowContents += "<a href='javascript:opener.deleteHistoryItem(" + i + 	");'>";
			historyWindowContents += "<img src=delete.jpg border=0>"  + "</a><br></td></tr></table>" ;

		}

	} else {
	
		historyWindowContents = "There is no search history recorded for this form.  A search is recorded only after a search has been executed.";
	}
	
	
	historyWindow.document.write("<html>\n<head>\n<title>history</title><link rel=stylesheet type=\"text/css\" href=\"popup.css\"</head>\r\r<body BGCOLOR='FFFFFF' TEXT='000000' LINK='800000' VLINK='#800000' ALINK='#800000' onLoad='self.focus();'>");
	historyWindow.document.write("<img src=history_header.jpg><p>");	
	historyWindow.document.write(historyWindowContents);
	historyWindow.document.write("</table></body></html>");
	historyWindow.document.close();
}  
	
function kill() {
	
	if ((historyWindow != null) && !historyWindow.closed && historyWindow.open && (closeHistory==1)) {
		historyWindow.close();
	}
}



function syncButtons(clicked) {
	if (clicked==1) {
		document.forms[0].keepHistoryTwo.checked=document.forms[0].keepHistory.checked;
	} else {
		document.forms[0].keepHistory.checked=document.forms[0].keepHistoryTwo.checked;
	}
}

function writeQueryUrl() {
	
	var queryString="";
	
	for (var i = 0; i < document.forms[0].elements.length; i++) {
	
		var element = document.forms[0].elements[i];
	
		if (element.type.indexOf('text') > -1 || element.type.indexOf('hidden') > -1) {

			queryString+= escape(element.name) + "="+ escape(element.value) + "&";
		}
		
		if (element.type.indexOf("radio") > -1) {
			if (element.checked) {
				queryString+= escape(element.name) + "=" + escape(element.value) + "&";
			}
		}
		
		if (element.type.indexOf("select") > -1) {
			
			queryString += escape(element.name) + "=" + escape(element.options[element.selectedIndex].value) + "&";

		}
	}
	queryString = formAction + queryString;
	
	return queryString;
}

function termsOpen(termName) {
	var UrlString = writeQueryUrl() + termName;
	termsWindow = window.open(UrlString, "termsWindow", "scrollbars=yes,resizable=yes,width=400,height=800,location=yes,left=440");
}

function createAccents (query) {
     
     var newQuery = query ;
     newQuery = newQuery.replace(/e\//g, 'é');
     newQuery = newQuery.replace(/e\\/g, 'è');
     newQuery = newQuery.replace(/e\^/g, 'ê');
     newQuery = newQuery.replace(/c\,[^(\s)]/g, 'ç');
     newQuery = newQuery.replace(/i\^/g, 'î');
     newQuery = newQuery.replace(/a\\/g, 'à');
     newQuery = newQuery.replace(/a\^/g, 'â');
     newQuery = newQuery.replace(/o\^/g, 'ô');
     newQuery = newQuery.replace(/i"/g, 'ï');
     newQuery = newQuery.replace(/u\^/g, 'ü');
     newQuery = newQuery.replace(/o"/g, 'ö');
     newQuery = newQuery.replace(/([^\.])\*/g,"$1\.\*");
     
     return newQuery;
}

function isNotBlank(s)
{
	for (var i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if ((c != ' ') && (c != '\n') && (c != '\t')) {
			return true;
		}
	}
	return false;
}

function changeAnd (and) {
     
     var newAnd = and ;
     newAnd = newAnd.replace(/ AND /g," and ");
     
     return newAnd;
}

function changeOr (OR) {
     
     var newPipe = OR ;
     newPipe = newPipe.replace(/ OR /g," | ");
     
     return newPipe;
}
