// JavaScript Document (Refer to docsearch.js for commenting of this file, as they are similar in function)
var placewin;
var plTxtArray = new Array;
var plIDArray = new Array;

function dateType() {
	var frm = document.pplsearch;
	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";
	}
}

function enableBtn(btn) {
	document.pplsearch.elements[btn].disabled = false;
}
function disableBtn(btn) {
	document.pplsearch.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("people_placefinder.cfm", "PlaceFinder", "width=600,height=600,scrollbars=yes");
}
function pf_getNameField() {
	return "places";
}
function pf_getIDField() {
	return "places_ids";
}
function getFormName() {
	return "pplsearch";
}

function resetForm() {
	var frm = document.pplsearch;
	
	frm.nametypelist.value = "All Name Types";
	frm.pplname.value = "";
	frm.daterangeselect.value = "0";
	frm.fromyear.value = "yyyy";
	frm.frommnth.value = "0";
	frm.fromday.value = "dd";
	frm.rolecats.value = "-1"
	frm.keywords.value = "";
	frm.kwlist.value = "";
	frm.places_str.value = "";
	
	plTxtArray = new Array;
	plIDArray = new Array;
	
	reloadDiv("rolecats");
	reloadDiv_special("places");
	reloadDiv_kw();
	
}

function isBlank() {
	var frm = document.pplsearch;
	
	if (frm.pplname.value.length > 0) return false;
	if (frm.namelist.value.length > 0) return false;
	if (frm.gender.value != "1") 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.keywords.value.length > 0) return false;
	if (frm.kwlist.value.length > 0) return false;
	if (frm.rolecats_ids.value.length > 0) return false;
	if (plTxtArray.length > 0) return false;
	
	return true;
}

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;
}

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.pplsearch;
	
	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;
			}
			
		}
	}
	
	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 rolecats ids and strings if any exist
	if (frm.rolecats_ids.value.length > 0) {
		frm.rolecats_ids.value = frm.rolecats_ids.value.substr(0, frm.rolecats_ids.value.length - 1);
	}
	
	if (frm.keywords.length != 0) {
		addKW();
	}
	
	if (frm.pplname.length != 0) {
		addName();
	}
	
	frm.is_search.value = "1";
	
	return true;
}

function findKey(src, k) {
	var expr = new RegExp("," + k + ",","ig");
	var elem = document.pplsearch.elements[src];
	if (elem.value.match(expr)) {
		return true;
	}
	return false;
}

function addKey(type) {
	var sel = document.pplsearch.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.pplsearch.elements[type + "_ids"].value += k + ",";
		// add a record entry
		reloadDiv(type);
	}
	document.pplsearch.keywords.focus();
}

function addKW() {
	var txt = document.pplsearch.keywords.value;
	var type = document.pplsearch.noteslist.value;
	
	txt = txt.replace( /[\"`\.,;!#|\$\/:\?\(\)\[\]_\-\\]/g, '');
	if (txt.length == 0) {
		return;
	}
	
	document.pplsearch.kwlist.value += type + ":" + txt + "|";
	document.pplsearch.keywords.value = "";
	reloadDiv_kw();
	document.pplsearch.keywords.focus();
}

function remKW(txt) {
	var elem = document.pplsearch.kwlist;
	elem.value = elem.value.replace(txt.replace("``", "'") + "|", "");
	reloadDiv_kw();
	document.pplsearch.keywords.focus();
}

function addName() {
	var txt = document.pplsearch.pplname.value;
	var type = document.pplsearch.nametypelist.value;
	
	txt = txt.replace( /[\"`\.,;!#|\$\/:\?\(\)\[\]_\-\\]/g, '');
	if (txt.length == 0) {
		return;
	}
	
	document.pplsearch.namelist.value += type + ":" + txt + "|";
	document.pplsearch.pplname.value = "";
	reloadDiv_name();
	document.pplsearch.pplname.focus();
}

function remName(txt) {
	var elem = document.pplsearch.namelist;
	elem.value = elem.value.replace(txt.replace("``", "'") + "|", "");
	reloadDiv_name();
	document.pplsearch.pplname.focus();
}

function remKey(type, k) {
	var elem = document.pplsearch.elements[type + "_ids"];
	elem.value = elem.value.replace(k + ",", "");
	reloadDiv(type);
	document.pplsearch.keywords.focus();
}

// removing keys from arrays for the finder divs
function remKey_special(type, k) {
	if (type == "places") {
		plTxtArray.splice(k, 1);
		plIDArray.splice(k, 1);
	}
	
	reloadDiv_special(type);
	document.pplsearch.keywords.focus();
}

function reloadDiv_kw() {
	var divname="kw_div";
	var divLayer = document.getElementById(divname);
	var frm = document.pplsearch;
	var str = frm.kwlist.value;
	
	if (str.length == 0) {
		divLayer.innerHTML = "";
		return;
	}
	var idArray = str.substr(0, str.length - 1).split('|');
	var delim;
	if (idArray[0].indexOf(':') > 0)
		delim = ":";
	else if (idArray[0].indexOf(';') > 0)
		delim = ";";
	else if (idArray[0].indexOf('!') > 0)
		delim = "!";
	
	var txtcolor = "#7b5223";
	
	var blank = true;
	divLayer.innerHTML = "";
	for (var i = 0; i < idArray.length; i++) {
		if (i == 0) {
			blank = false;
			divLayer.innerHTML = "<br/>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 = "All Notes and Titles";
		else if (txtTypeArray[0] == 2)
			txtType = "Bio Notes";
		else if (txtTypeArray[0] == 3)
			txtType = "Marriage Notes";
		else if (txtTypeArray[0] == 4)
			txtType = "Titles and Occupations";
		
		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_name() {
	var divname="name_div";
	var divLayer = document.getElementById(divname);
	var frm = document.pplsearch;
	var str = frm.namelist.value;
	
	if (str.length == 0) {
		divLayer.innerHTML = "";
		return;
	}
	var idArray = str.substr(0, str.length - 1).split('|');
	var delim;
	if (idArray[0].indexOf(':') > 0)
		delim = ":";
	else if (idArray[0].indexOf(';') > 0)
		delim = ";";
	else if (idArray[0].indexOf('!') > 0)
		delim = "!";
	
	var txtcolor = "#7b5223";
	
	var blank = true;
	divLayer.innerHTML = "";
	for (var i = 0; i < idArray.length; i++) {
		if (i == 0) {
			blank = false;
			divLayer.innerHTML = "<br/>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 = txtTypeArray[0];
		
		divLayer.innerHTML += "<li><font color=\"" + txtcolor + "\">" + txtTypeArray[1]+ " (in " + txtType + ")</font>&nbsp;" +
								"(<a class=\"remove\" href=\"javascript:remName('" + idArray[i].replace(/\'/g, "\\\'") + "');\">remove</a>)";
	}
	if (!blank)
		divLayer.innerHTML += "</ul></span>";
	
}


function reloadDiv(type) {
	var divname = type + "_div";
	var idlist = type + "_ids";
	var divLayer = document.getElementById(divname);
	var frm = document.pplsearch;
	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 == "rolecats")
		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_special(type) {
	var divname = type + "_div";
	var idlist = type + "_ids";
	var divLayer = document.getElementById(divname);
	var frm = document.pplsearch;
	var blank = true;
	var txtcolor="";
	
	var txtArray;
	var idArray;
	
	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>";
}

function getTextforID(type, id) {
	var sel = document.pplsearch.elements[type];
	for (var i = 0; i < sel.options.length; i++) {
		if (id == sel[i].value)
			return sel[i].text;
	}
	return "text not found";
}