// JavaScript Document
var placewin;
var peoplewin;
var pplTxtArray = new Array;
var pplIDArray = new Array;
var plTxtArray = new Array;
var plIDArray = new Array;

// Show the 'to date' fields if the date type is appropriate
function dateType() {
	var frm = document.docsearch;
	var sel = frm.daterangeselect.value;
	
	if (sel == 3){
		document.getElementById("toFields").style.display = "block";
		frm.fromyear.disabled = false;
		frm.frommnth.disabled = false;
		frm.fromday.disabled = false;
	}else if (sel == 0 || sel == 1 || sel == 2 || sel == 4) {
		if (sel == 0) {
			frm.fromyear.disabled = true;
			frm.frommnth.disabled = true;
			frm.fromday.disabled = true;
		}else {
			frm.fromyear.disabled = false;
			frm.frommnth.disabled = false;
			frm.fromday.disabled = false;
		}
		frm.toyear.value = "yyyy";
		frm.tomnth.value = "0";
		frm.today.value = "dd";
		document.getElementById("toFields").style.display = "none";
	}
}

// show the upper range field for mdp if appropriate type is selected
function mdpType() {
	var frm = document.docsearch;
	var sel = frm.mdpselect.value;
	var layer = document.getElementById("mdprange");
	
	if (sel == 1) {
		layer.style.display = "none";
		frm.mdp2.value = "";
	}else {
		layer.style.display = "inline";
	}
	
}

function enableBtn(btn) {
	document.docsearch.elements[btn].disabled = false;
}
function disableBtn(btn) {
	document.docsearch.elements[btn].disabled = true;
}

function placeFinder() {
	// first, remove any 'incomplete' entries (denoted by '-1')
	for (var i=0; i < plIDArray.length; i++) {
		if (plIDArray[i].substring(0,2) == -1) {
			plIDArray.splice(i, 1);
			plTxtArray.splice(i, 1);
			i--;
		}
	}
	
	placewin = window.open("document_placefinder.cfm", "PlaceFinder", "width=600,height=600,scrollbars=yes");
}

function peopleFinder() {
	// first, remove any 'incomplete' entries (denoted by '-1')
	for (var i=0; i < pplIDArray.length; i++) {
		if (pplIDArray[i].substring(0,2) == -1) {
			pplIDArray.splice(i, 1);
			pplTxtArray.splice(i, 1);
			i--;
		}
	}
	
	peoplewin = window.open("peoplefinder.cfm", "PeopleFinder", "width=600,height=600,scrollbars=yes");
}

// the next few functions are called by the finders to get info about this parent page
function pf_getNameField() {
	return "places";
}
function pf_getIDField() {
	return "places_ids";
}
function pplf_getNameField() {
	return "people";
}
function pplf_getIDField() {
	return "people_ids";
}
function getFormName() {
	return "docsearch";
}

function resetForm() {
	var frm = document.docsearch;
	
	frm.mdp.value = "";
	frm.mdp2.value = "";
	frm.daterangeselect.value = "0";
	frm.fromyear.value = "yyyy";
	frm.frommnth.value = "0";
	frm.fromday.value = "dd";
	frm.keywords.value = "";
	frm.kwlist.value = "";
	frm.topics.value = "-1";
	frm.topics_ids.value = "";
	frm.people_str.value = "";
	frm.places_str.value = "";
	
	pplTxtArray = new Array;
	pplIDArray = new Array;
	plTxtArray = new Array;
	plIDArray = new Array;
	
	reloadDiv("topics");
	reloadDiv_special("people");
	reloadDiv_special("places");
	reloadDiv_kw();
}

// different ways of checking if the form is blank or not
function isBlank() {
	var frm = document.docsearch;
	
	if (frm.mdp.value.length > 0) return false;
	if (frm.mdp2.value.length > 0) return false;
	if (frm.fromyear.value.length > 0 && frm.fromyear.value != "yyyy" && frm.daterangeselect.value != 0) return false;
	if (frm.daterangeselect.value == 4 && 
		(frm.fromyear.value != "yyyy" || frm.frommnth.value != 0 || frm.fromday.value != "dd")) return false;
	if (frm.toyear.value.length > 0 && frm.toyear.value != "yyyy") return false;
	if (frm.kwlist.value.length > 0) return false;
	if (frm.keywords.value.length > 0) return false;
	if (frm.topics_ids.value.length > 0) return false;
	if (pplTxtArray.length > 0) return false;
	if (plTxtArray.length > 0) return false;
	
	return true;
}

// used for date field
function isNumeric(str) {
	var validchars = "0123456789";
	
	for (var i = 0; i < str.length; i++) {
		if (validchars.indexOf(str.charAt(i)) == -1)
			return false;
	}
	
	return true;
}

// check if date is formatted properly
function yearFormat(yr, mnth, dy) {
	
	if (yr.length != 4)
		return false;
	
	if (yr == "yyyy" && (mnth != 0 || dy != "dd"))
		return false;
	
	if (yr != "yyyy" && !isNumeric(yr))
		return false;
	
	if (dy.length != 0 && dy != "dd" && !isNumeric(dy))
		return false;
	
	if (dy > 31)
		return false;
	
	if (dy.length != 0 && dy != "dd" && mnth == "0")
		return false;
	
	if (dy != "dd" && dy > 29 && mnth == "02")
		return false;
	
	if (dy != "dd" && dy > 30 && (mnth == "04" || mnth == "06" || mnth == "09" || mnth == "11"))
		return false;
	
	return true;
	
}

function submitForm() {
	var frm = document.docsearch;
	
	if (isBlank()) {
		window.alert("Form is empty!");
		return false;
	}
	
	// perform validation on date
	if (frm.fromyear.value.length != 0) {
		if (!yearFormat(frm.fromyear.value, frm.frommnth.value, frm.fromday.value) && frm.daterangeselect.value != "4") {
			window.alert("From date not valid!");
			return false;
		}
		if (frm.daterangeselect.value == "3") {
			if (!yearFormat(frm.toyear.value, frm.tomnth.value, frm.today.value)) {
				window.alert("To date not valid!");
				return false;
			}
			
			if (frm.fromyear.value + 0 > frm.toyear.value + 0) {
				window.alert("From date must occur before To date!");
				return false;
			}
			
		}
	}
	
	// mdp and mdp2 must both be numeric, and mdp cannot be empty if mdp2 is unempty
	if (frm.mdp.value != "") {
		if(frm.mdpselect.value == 2) {
			if (frm.mdp2.value.length == 0) {
				window.alert("You must enter an upper limit for volume number.");
				return false;
			}
		}
	}else {
		if (frm.mdp2.value.length > 0) {
			window.alert("You must enter a lower limit for volume number.");
			return false;
		}
	}
	
	// remove any 'incomplete' entries
	for (var i=0; i < pplIDArray.length; i++) {
		if (pplIDArray[i].substring(0,2) == -1) {
			pplIDArray.splice(i, 1);
			pplTxtArray.splice(i, 1);
			i--;
		}
	}		
	frm.people_ids.value = pplIDArray.join("-");
	frm.people_str.value = pplTxtArray.join("::");
	
	for (var i=0; i < plIDArray.length; i++) {
		if (plIDArray[i].substring(0,2) == -1) {
			plIDArray.splice(i, 1);
			plTxtArray.splice(i, 1);
			i--;
		}
	}
	frm.places_ids.value = plIDArray.join("-");
	frm.places_str.value = plTxtArray.join("::");
	
	// trim topics ids and strings if any exist
	if (frm.topics_ids.value.length > 0) {
		frm.topics_ids.value = frm.topics_ids.value.substr(0, frm.topics_ids.value.length - 1);
	}
	
	if (frm.keywords.length != 0) {
		addKW();
	}
	
	
	frm.is_search.value = "1";
	
	return true;
}

// used to check if an item has already been selected
function findKey(src, k) {
	var expr = new RegExp("," + k + ",","ig");
	var elem = document.docsearch.elements[src];
	if (elem.value.match(expr)) {
		return true;
	}
	return false;
}

function addKW() {
	var txt = document.docsearch.keywords.value;
	var type = document.docsearch.synexlist.value;
	
	txt = txt.replace( /[\"`\.,;!#|\$\/:\?\(\)\[\]_\-\\]/g, '');
	
	if (txt.length == 0) {
		return;
	}
	
	document.docsearch.kwlist.value += type + ":" + txt + "|";
	document.docsearch.keywords.value = "";
	reloadDiv_kw();
	document.docsearch.keywords.focus();
}

function addKey(type) {
	var sel = document.docsearch.elements[type];
	var k = sel.options[sel.selectedIndex].value;
	
	if (findKey(type + "_ids", k))
		window.alert("Item already selected.");
	else if (k == -1)
		;
	else {
		// add the id and the text to the hidden fields
		document.docsearch.elements[type + "_ids"].value += k + ",";
		// add a record entry
		reloadDiv(type);
	}
	document.docsearch.keywords.focus();
}

function remKW(txt) {
	var elem = document.docsearch.kwlist;
	elem.value = elem.value.replace(txt.replace("``", "'") + "|", "");
	reloadDiv_kw();
	document.docsearch.keywords.focus();
}

function remKey(type, k) {
	var elem = document.docsearch.elements[type + "_ids"];
	elem.value = elem.value.replace(k + ",", "");
	reloadDiv(type);
	document.docsearch.keywords.focus();
}

// removing keys from arrays for the finder divs
function remKey_special(type, k) {
	if (type == "people") {
		pplTxtArray.splice(k, 1);
		pplIDArray.splice(k, 1);
	}else if (type == "places") {
		plTxtArray.splice(k, 1);
		plIDArray.splice(k, 1);
	}
	
	reloadDiv_special(type);
	document.docsearch.keywords.focus();
}

// the next few functions rebuild the divs containing search parameters
// they are separated due to the nature of the individual searches

function reloadDiv(type) {
	var divname = type + "_div";
	var idlist = type + "_ids";
	var divLayer = document.getElementById(divname);
	var frm = document.docsearch;
	var str = frm.elements[idlist].value;
	var txtcolor = "";
	
	if (str.length == 0) {
		divLayer.innerHTML = "";
		return;
	}
	var idArray = str.substr(0, str.length - 1).split(',');
	
	if (type == "topics")
		txtcolor = "#7b5223";
			
	var blank = true;
	divLayer.innerHTML = "";
	for (var i = 0; i < idArray.length; i++) {
		if (i == 0) {
			blank = false;
			divLayer.innerHTML = "All of:<span align=\"right\"><ul>";
		}
		divLayer.innerHTML += "<li><font color=\"" + txtcolor + "\">" + getTextforID(type, idArray[i]) + "</font>&nbsp;" +
								"(<a class=\"remove\" href=\"javascript:remKey('" + type + 
			"', " + idArray[i] + ");\">remove</a>)";
	}
	if (!blank)
		divLayer.innerHTML += "</ul></span>";
}

function reloadDiv_kw() {
	var divname="kw_div";
	var divLayer = document.getElementById(divname);
	var frm = document.docsearch;
	var str = frm.kwlist.value;
	
	if (str.length == 0) {
		divLayer.innerHTML = "";
		return;
	}
	var idArray = str.substr(0, str.length - 1).split('|');
	
	var txtcolor = "#7b5223";
	
	var blank = true;
	divLayer.innerHTML = "";
	for (var i = 0; i < idArray.length; i++) {
		if (i == 0) {
			blank = false;
			divLayer.innerHTML = "All of:<span align=\"right\"><ul>";
		}
		
		var delim;
		if (idArray[i].indexOf(':') > 0)
			delim = ":";
		else if (idArray[i].indexOf(';') > 0)
			delim = ";";
		else if (idArray[i].indexOf('!') > 0)
			delim = "!";
		
		if (!idArray[i].length)
			continue;
		
		var txtTypeArray = idArray[i].split(delim);
		var txtType;
		if (txtTypeArray[0] == 1)
			txtType = "Synopsis and Extract";
		else if (txtTypeArray[0] == 2)
			txtType = "Document Synopsis";
		else if (txtTypeArray[0] == 3)
			txtType = "Document Extract";
			
		divLayer.innerHTML += "<li><font color=\"" + txtcolor + "\">" + txtTypeArray[1]+ " (in " + txtType + ")</font>&nbsp;" +
								"(<a class=\"remove\" href=\"javascript:remKW('" + idArray[i].replace(/\'/g, "\\\'") + "');\">remove</a>)";
	}
	if (!blank)
		divLayer.innerHTML += "</ul></span>";
	
}

function reloadDiv_special(type) {
	var divname = type + "_div";
	var idlist = type + "_ids";
	var divLayer = document.getElementById(divname);
	var frm = document.docsearch;
	var blank = true;
	var txtcolor="";
	
	var txtArray;
	var idArray;
	
	if (type == "people") {
		txtcolor = "#396681";
		txtArray = pplTxtArray;
		idArray = pplIDArray;
	}else if (type == "places") {
		txtcolor = "#6d8130";
		txtArray = plTxtArray;
		idArray = plIDArray;
	}
	
	divLayer.innerHTML = "";
	for (var i = 0; i < txtArray.length; i++) {
		if (txtArray[i].length > 0) {
			blank = false;
			if (i == 0) {
				divLayer.innerHTML = "All of:<ul>";
			}
			divLayer.innerHTML += "<li><font color=\"" + txtcolor + "\">" + txtArray[i] + "</font>&nbsp;" + 
				"(<a class=\"remove\" href=\"javascript:remKey_special('" + type + "', " + i + ");\">remove</a>)";
		}
	}
	if (!blank)
		divLayer.innerHTML += "</ul>";
}

// used to return an entry for lists with (key, value) pairs loaded from the database
function getTextforID(type, id) {
	var sel = document.docsearch.elements[type];
	for (var i = 0; i < sel.options.length; i++) {
		if (id == sel[i].value)
			return sel[i].text;
	}
	return "text not found";
}