function getkey(e){
	if(document.all){
		return event.keyCode;
	}
	else {
		return e.keyCode;
	}
}
function convertdate(middle,which){
	//dte = document.getElementById(which+"dt");
	dte = document.edit.elements[middle+'dt'+which];
	//txt = document.getElementById(which+"date");
	txt = document.edit.elements[middle+'date'+which];
	prefix = "";
	suffix = "";
	base = trim(txt.value.toUpperCase()).replace('  ',' ');
	if(base.substr(1,1) <= "9"){
		if(left(base,1).toLowerCase() == "a"){
			prefix = "aft ";
			base = base.substr(1);
		}
		else if(left(base,1).toLowerCase() == "b"){
			prefix = "bef ";
			base = base.substr(1);
		}
		else if(left(base,1).toLowerCase() == "c"){
			prefix = "abt ";
			base = base.substr(1);
		}
	}
	else if("aft,bef,abt".indexOf(left(base,3).toLowerCase())>= 0){
		prefix = left(base,3).toLowerCase()+" ";
		base = base.substr(3);
	}
	if(right(base,3).toLowerCase() == " bc"){
		suffix = " BC";
		base = left(base,base.length-3);
	}
	if(left(base,1)==" "){
		base = base.substr(1);
	}

	dteval = "";
	if(right(base,1) == "/"){
		if(Number(left(base,4)) <= 999){
			base = base + "0" + (Number(left(base,4))+10);
		}
		else {
			base = base + (Number(left(base,4))+10);
		}
	}
	re = /[0-9]{4}-[0-9]{4}/
	if(re.test(base)){
		base = left(base,4)+"/"+right(base,4);
	}
    if(txt.value === "" || left(right(base,4),2) == "00" || suffix == " BC"){
    	txt.value = prefix + base + suffix;
    	dte.value = "";
    	return true;
	}
	else if("-/".indexOf(left(right(base,3),1)) > 0){
		alert("Please enter a 4-digit year.");
		return false;					
	}
    else if(base.length >= 6 && (base.indexOf("/") < base.lastIndexOf("/") || base.indexOf("-") < base.lastIndexOf("-"))){
    	if(checkdate(base)){
			dt = new Date(base);
			day = dt.getDate();
			if(day <= 9){
				day = String("0"+day); 
			}
			month = dt.getMonth()+1;
			if(month <= 9){
				month = String("0"+month); 
			}
			year = dt.getFullYear().toString();
	        dteval = year+"-"+month+"-"+day;
	        dt = null;
        }
        else {
			errordt(base);
			return false;
		}
	}
	else if(checkdt(base)){
	    if(checkmask("9999",base)){
	        dteval = base+"-01-01";
		}
	    else if(checkmask("9999/9999",base)){
	        dteval = left(base, 4)+"-01-01";
		}
	    else if(checkmask("9/9999",base)){
	        dteval = right(base, 4)+"-0"+left(base, 1)+"-01";
		}
	    else if(checkmask("99/9999",base) && left(base, 2) <= 12){
	        dteval = right(base, 4)+"-"+left(base, 2)+"-01";
		}
	    else if(checkmask("9-9999",base)){
	        dteval = right(base, 4)+"-0"+left(base, 1)+"-01";
		}
	    else if(checkmask("99-9999",base) && left(base, 2) <= 12){
	        dteval = right(base, 4)+"-"+left(base, 2)+"-01";
		}
	    else if(checkmask("999",base)){
			base = "0"+base;
	        dteval = "0"+base+"-01-01";
		}
		else{
			re = /^[0-9]{1,2} (JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC) [0-9]{4}$/;
			if(re.test(base)){
				dt = new Date(base);
				temp = base.split(" ");
				temp[1] = "JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC".indexOf(temp[1])/3+1;
				if(temp[0] <= 9) temp[0] = "0"+temp[0];
				if(temp[1] <= 9) temp[1] = "0"+temp[1];
		    	if(checkdate(temp[1]+"/"+temp[0]+"/"+temp[2])){
					dteval = temp[2]+"-"+temp[1]+"-"+temp[0];
				}
				else {
					errordt(txt.value);
					return false;					
		    	}
			}
			else {
				re = /^(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC) [0-9]{4}$/;
				if(re.test(base)){
					dt = new Date("1 "+base);
					var m = right("0"+(dt.getMonth()+1),2);
					var d = right("0"+dt.getDate(),2);
					dteval = right(base,4)+"-"+m+"-"+d;
				}
			}
		}
	}
	else {
		return false;
	}
	txt.value = prefix + base + suffix;
	dte.value = dteval;
	dte = null;
	dteval = null;
	return true;
}
function checkdt(dt){
	re = /^([0-9]{4}(-|\/)[0-9]{4}|[0-9]{1,2}(-|\/)[0-9]{4}|[0-9]{1,2}(-|\/)[0-9]{1,2}(-|\/)[0-9]{4}|[0-9]{4})$/;
	if(dt.length && !re.test(dt)){
		re = /^([0-9]{1,2} )?(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC) [0-9]{4}$/;
		if(!re.test(dt)){
			errordt(dt);
			return false;
		}
	}
	return true;
}
function errordt(dt){
	alert("Invalid Date: "+dt+"\nAccepted formats are:\n\n[abt bef aft]\nm/d/yyyy\nm-d-yyyy\nm/yyyy\nyyyy\nyyyy/yyyy\nd MMM yyyy\nMMM yyyy\n[BC]");
}
function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function left(txt,num){
	return txt.substr(0,num);
}
function right(txt,num){
	return txt.substr(txt.length-num,num);
}
function index(obj){
	if(obj.value && document.getElementById("fname").value){
		window.location.href = "/ourfamily/list.cfm?1all=this&3lname="+obj.value+"&2fname="+document.getElementById("fname").value;
	}
	else if(obj.value){
		window.location.href = "/ourfamily/list.cfm?1all=this&2lname="+obj.value;
	}
	else if(document.getElementById("fname").value){
		window.location.href = "/ourfamily/list.cfm?1all=this&2fname="+document.getElementById("fname").value;
	}
}
function check(url){
	window.location.href = url;
}
function shortcuts(obj){
	if("|\\/+,.[]=0123456789<>{}!@#$%^&*();:".indexOf(obj.value) > 0){
		go(obj.value);
	}
}
function fieldChecked(field){
	if(typeof(field.checked) == "boolean"){
		return field.checked ? 1:0;
	}
	else {
		x = 0;
		for (i=0; i<field.length; i++){
			if (field[i].checked){
				x = x + 1;
			}
		}
		return x;
	}
}
function check_date_format(frm){
	for(pf=1;pf<=9;pf++){
		if(frm.elements["edate"+pf]){
			if(!convertdate('e',pf)){
				frm.elements["edate"+pf].focus();
				return false;
			}
		}
		else {
			break;
		}
	}
	return true;
}
function clean_place(fld){
	temp = trim(fld.value);
	if(right(fld.value,1) == ","){
		temp = left(temp,temp.length-1);
	}
	re = /[ ]{2,20}/
	if(re.test(temp)){
		temp = temp.replace(re,", ");
	}
	fld.value = temp;
}
function checkdate(obj){
//Returns true if value is a date format or is NULL
//otherwise returns false
	if(typeof(obj) == "object"){
		var vl = obj.value;
	}
	else {
		var vl = obj;
	}
	if (vl.length == 0){ return true; }

    //Returns true if value is a date in the mm/dd/yyyy format
	var isplit = vl.indexOf('/');

	if (isplit == -1 || isplit == vl.length){ return false; }

    sMonth = vl.substring(0, isplit);
	isplit = vl.indexOf('/', isplit + 1);

	if (isplit == -1 || (isplit + 1 ) == vl.length){ return false; }

    sDay = vl.substring((sMonth.length + 1), isplit);
	sYear = vl.substring(isplit + 1);
	today = new Date();
	yr = today.getFullYear();
	if (!checkinteger(sMonth) || sMonth <= 0){ return false; }
	else if (!checkrange(sMonth, 1, 12)){ return false; }
	else if (!checkinteger(sYear)){ return false; }
	else if (Number(sYear) > yr){ return false; }
	else if (!checkinteger(sDay) || sDay <= 0){ return false; }
	else if (!checkday(sYear, sMonth, sDay)){ return false; }
	else return true;
}
function checkday(checkYear, checkMonth, checkDay){
	maxDay = 31;

	if (checkMonth == 4 || checkMonth == 6 || checkMonth == 9 || checkMonth == 11)
		maxDay = 30;
	else
	if (checkMonth == 2){
		if (checkYear % 4 > 0)
			maxDay =28;
		else
		if (checkYear % 100 == 0 && checkYear % 400 > 0)
			maxDay = 28;
		else
			maxDay = 29;
	}
	return checkrange(checkDay, 1, maxDay); //check day
}
function checkinteger(object_value){
    //Returns true if value is a number or is NULL
    //otherwise returns false	

    if (object_value.length == 0){ return true; }

    //Returns true if value is an integer defined as
    //   having an optional leading + or -.
    //   otherwise containing only the characters 0-9.
	var decimal_format = ".";
	var check_char;

    //The first character can be + -  blank or a digit.
	check_char = object_value.indexOf(decimal_format)
    //Was it a decimal?
    if (check_char < 1) return checknumber(object_value);
    else return false;
}
function checkrange(object_value, min_value, max_value){
    //if value is in range then return true else return false

    if (object_value.length == 0){ return true; }

    if (!checknumber(object_value)){
	return false;
	}
    else{
	return (numberrange((eval(object_value)), min_value, max_value));
	}
    //All tests passed, so...
    return true;
}
function checknumber(object_value) {
    //Returns true if value is a number or is NULL
   	//otherwise returns false	
    if (object_value.length == 0){ return true; }

    //Returns true if value is a number defined as
   	//   having an optional leading + or -.
    //   having at most 1 decimal point.
    //   otherwise containing only the characters 0-9.
	var start_format = " .+-0123456789";
	var number_format = " .0123456789";
	var check_char;
	var decimal = false;
	var trailing_blank = false;
	var digits = false;

    //The first character can be + - .  blank or a digit.
	check_char = start_format.indexOf(object_value.charAt(0))
    //Was it a decimal?
	if (check_char == 1){ decimal = true; }
	else if (check_char < 1){ return false; }
       
	//Remaining characters can be only . or a digit, but only one decimal.
	for (var i = 1; i < object_value.length; i++){
		check_char = number_format.indexOf(object_value.charAt(i))
		if (check_char < 0){ return false; }
		else if (check_char == 1){
			if (decimal){ return false; }
			else decimal = true;
		}
		else if (check_char == 0){
			if (decimal || digits) trailing_blank = true;
        	// ignore leading blanks
		}
    	else if (trailing_blank){ return false; }
		else digits = true;
	}	
   	//All tests passed, so...
    return true
}
function numberrange(object_value, min_value, max_value){
    // check minimum
    if (min_value != null){
        if (object_value < min_value){ return false; }
	}

    // check maximum
    if (max_value != null){
		if (object_value > max_value){ return false; }
	}
    //All tests passed, so...
    return true;
}
function checkmask(mask, value) {
	if(value.length == 0) {
		return false;
	}
	for (var i=0; i <= Math.max(value.length,mask.length); i++) {
		var m = mask.substring(i,i+1);
		var v = value.substring(i,i+1);
		if(m == "9") {
			if(outside(v, "0", "9")){ return false; }
		}
		else if(m == "A") {
			if(outside(v.toUpperCase()), "A", "Z"){ return false; }
		}
		else if(m == "?") {
		}
		else if(m == " " && v === "") {
		}
		else {
			if(m != v){ return false; }
		}
	}
	return true;
}
function outside(string, x, y) {
	if (string < x || string > y){ return true; }
	return false
}
function rerun_validation(obj){
	for(var i=0; i < obj.elements.length; i++){
		var fld = obj.elements[i];
		if(fld.onchange != null){
			validationtype = fld.onchange.toString();
			if(validationtype.indexOf("validatethis") >= 0 && validationtype.indexOf("if(") < 0){
				oktosubmit = false;
				fld.onchange();
				if(!oktosubmit) return false;
			}
		}
		else if(fld.onblur != null){
			validationtype = fld.onblur.toString();
			if(validationtype.indexOf("validatethis") >= 0){
				oktosubmit = false;
				fld.onblur();
				if(!oktosubmit) return false;
			}
		}
	}
	return true;
}
function validatethis(type, field) {
	var msg = "";
	msg1 = "";
	msg2 = "";
	if(type == "N"){
		if(checknumber(field.value) == false){
			mask = "of a number, without words or punctuation."
			msg = "Invalid format"
		}
	}
	else if(type == "D"){
		r = /^[0-9]{4}$/;
		if (!r.test(field.value) && checkdate(field) == false) {
		msg = "Please enter a valid date";
		}
	}
	else if(type == "mm/dd/yyyy"){
		if(right(field.value,4).indexOf("/") > 0){
			msg = "Please enter a valid date, 4 digit year";
		}
		else if (!checkdate(field)) {
			msg = "Please enter a valid date";
		}
	}
	else if(type == "mm/dd/yyyy or yyyy"){
		var r  = /^[0-2][0-9]{3}$/;
		var r2 = /^[0-2][0-9]{3}-[0-9]{2}-[0-9]{2}$/;
		if(right(field.value,4).indexOf("/") > 0){
			msg = "Please enter a valid date, 4 digit year";
		}
		else if (!checkdate(field) && !r.test(field.value) && !r2.test(field.value)) {
			msg = "Please enter a valid date (mm/dd/yyyy or yyyy)";
		}
	}
	else if(type == "mm/yyyy"){
		if(date_mmyyyy(field) == false){
			msg = "Please enter a valid date";
		}
	}
	else if(type == "color"){
		var r = /^[a-fA-F0-9]{6}$/;
		if(!r.test(field.value)){
			msg = "Please enter a HTML color code.";
		}
	}
	else if(type == "I"){
		if (checkinteger(field.value) == false) {
		msg = "Please enter a valid integer."
		}
	}
	else if(type == "email"){
		var r = /^[\w\-%_\.']+@([\w\-]+\.)+\w{2,4}$/;
		if(field.value && !r.test( field.value )){
			msg = "Please enter a valid e-mail address.";
		}
	}
	else if(type == "multiple email"){
		var r = /^(\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+(,\s*)*)+$/;
		if(field.value && !r.test( field.value )){
			msg = "Please enter one or more valid e-mail addresses separated by commas.";
		}
	}
	else if(type == "URL"){
		if(field.value && field.value.indexOf(".") <= 0){
			msg = "Please enter a full website address.";
		}
		else {
			var prefix = left(field.value,4).toLowerCase();
			if(field.value && prefix != "http" && prefix != "ftp:"){
				field.value = "http://" + field.value;
			}
		}
	}
	else if(left(type,4) == "list"){
		commas = field.value.length - field.value.replace(/,/g,"").length;
		if(commas > Number(right(type,1))-1){
			msg = "Please enter a list of at most 2 comma-separated items";
		}
	}
	if(msg !== ""){
		alert(msg);
		field.select();
		field.focus();
		oktosubmit = false;
		return false;
	}
	oktosubmit = true;
	return true;
}
function tab(t,create){
	curr = document.getElementById("tab"+t).style.display;
	if(curr != "none"){
		$("#tab"+t).hide();
		document.getElementById("btn"+t).className="";
		currenttab=t;
	}
	else {
		$("#tab"+t).show();
		if(document.getElementById("btn"+t)){
		document.getElementById("btn"+t).className="hoverbg";
		}
		currenttab=t;
	}
	if(document.getElementById("btn"+t)){
		document.getElementById("btn"+t).blur();
	}
	if(create==1){
		c = "";
		for(t=1;t<=8;t++){
			if(document.getElementById("tab"+t).style.display == "none"){
				c = c + "0";
			}
			else {
				c = c + "1";
			}
		}
		createCookie("ofttab",c,100);
	}
	//document.getElementById("index").focus();
}
function taball(){
	displaystyle = document.all? "block": "table-row-group";
	for(var i=1;i<=8;i++){
		$("#tab"+i).show();
		document.getElementById("btn"+i).className="hoverbg";
	}
	if(document.getElementById("tab4").innerHTML.indexOf("edit by clicking") > 0){
		document.getElementById("tab4").style.display="none";
	}
}
function edittab(which){
	for(other=1;other<=4;other++){
		if(document.getElementById("edittab"+other) && which != other){
			document.getElementById("edittab" + other).style.display="none";
			document.getElementById("editbtn" + other).className="btnoff";
			document.getElementById("editbtn" + other).style.marginBottom="0px";
			document.getElementById("editbtn" + other).style.height="20px";
		}
	}
	document.getElementById("edittab" + which).style.display="block";
	document.getElementById("editbtn" + which).className="btnon";
	document.getElementById("editbtn" + which).style.height="25px";
	document.getElementById("editbtn" + which).style.marginBottom="-1px";
	document.getElementById("editbtn" + which).blur();
}
function husband(cls){
	with(document){
		getElementById('hn').className="lineright " + cls;
		getElementById('he').className="lineright " + cls;
		if(getElementById('ho')){
		getElementById('ho').className="lineright " + cls;
		}
		if(getElementById('hnfm')){
		getElementById('hnfm').className="lineright " + cls;
		}
	}
}
function wife(cls){
	with(document){
		getElementById('wn').className=cls;
		getElementById('we').className=cls;
		if(getElementById('wo')){
		getElementById('wo').className=cls;
		}
		if(getElementById('wnfm')){
		getElementById('wnfm').className=cls;
		}
	}
}
function spouse(obj){
    txt = obj.options[obj.selectedIndex].text;
    txt = clean_url(txt);
	window.location.href = '/ourfamily/browse.cfm/'+txt+'/f'+obj.options[obj.selectedIndex].value;
}
function persistwindow(url,windowname,param){
	try{
		newWindow = window.open(url, windowname, param);
	}
	catch(err){
		newWindow = window.showModelessDialog(url, windowname, param);
	}
	return newWindow;
}
function open_window(url,w,h,target){
	if(w == null) w = 630;
	if(h == null) h = 450;
	if(target == null) target = "";
	window.name = "main";
	var option = "width="+w+",height="+h+",toolbar=0,location=0,directories=0,status=1,menuBar=1,scrollBars=1,resizable=1"
	newWindow = persistwindow(url, target, option);
	if(typeof(newWindow)=="object"){
		newWindow.focus();
	}
}
function shwtip(text,obj,fld,leftoff) {
	if(!leftoff) leftoff = 0;
	tipobj = document.getElementById("tip");
	h = Number(obj.style.height.replace('px',''));
	if(h <= 0){
		h = 20;
	}
	tipobj.style.top = getposOffset(obj,"top")+h+"px";
	tipobj.style.left = (getposOffset(obj,"left")+leftoff)+"px";
	tipobj.innerHTML = text;
	if(fld){
		if(document.getElementById(fld)){
			document.getElementById(fld).style.visibility = "hidden";
		}
	}
	tipobj.style.visibility = "visible";
	tipobj = null;
}
function hidtip(fld) {
	document.getElementById("tip").style.visibility = "hidden";
	if(fld){
		if(document.getElementById(fld)){
			document.getElementById(fld).style.visibility = "visible";
		}
	}
}
function getposOffset(what, offsettype){
	var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
	var parentEl=what.offsetParent;
	while (parentEl!=null){
	totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
	parentEl=parentEl.offsetParent;
	}
	return totaloffset;
}
function windowheight(){
	if(navigator.appName == "Netscape"){
		if(self.innerHeight > 64){
			return self.innerHeight;
		}
	}
	if(document.documentElement.clientHeight > 66){
		return document.documentElement.clientHeight;
	}
	else {
		return document.body.clientHeight;
	}
}
function windowwidth(){
	if(document.body.clientWidth > 0){
		return document.body.clientWidth;
	}
	else{
		return document.documentElement.clientWidth;
	}
}
function listfirst(list){
	if(list.indexOf(",") > 0){
		return left(list,list.indexOf(","));
	}
	else {
		return list;
	}
}
function listlast(list){
	if(list.lastIndexOf(",") > 0){
		ret = list.substr(list.lastIndexOf(",")+1);
		if(left(ret,1) == " "){
			ret = right(ret,ret.length-1);
		}
		return ret;
	}
	else {
		return list;
	}
}
function listfind(list,txt,delimiter){
	if(delimiter == null) delimiter = ',';
	list = list.split(delimiter);
	for(pos=0;pos<list.length;pos++){
		if(list[pos].toLowerCase()==txt.toLowerCase()){
			return pos+1;
		}
	}
	return 0;
}
function ListGetAt(list, position, delimiter){
	if(delimiter == null) delimiter = ',';
	list = list.split(delimiter);
	if(list.length > position-1)
		return list[position-1].replace(/^[ ]*/,"");
	else
		return 'undefined';
}
function ListLen(list,delimiter){
	if(delimiter == null) delimiter = ',';
	list = list.split(delimiter);
	return list.length;
}
function hide(i){
	obj = document.getElementById("x"+i);
	if(obj){
		if(obj.style.display=="none"){
			if(document.all){
				obj.style.display="block";
			}
			else {
				obj.style.display="table-row-group";
			}
			obj = document.getElementById("b"+i).innerHTML = "&ndash;";
			if(i.length <= 3){
				createCookie("oft"+i,2,100);
			}
		}
		else {
			obj.style.display="none";
			obj = document.getElementById("b"+i).innerHTML = "+";
			if(i.length <= 3){
				createCookie("oft"+i,1,100);
			}
		}
		if(typeof(e) == "object") e.cancelBubble=true;
	}
}
function set_dropdown(obj,code){
	for(i=0;i<obj.length;i++){
		if(obj.options[i].value == code){
			obj.selectedIndex = i;
			break;
		}
	}
}
function hide2(i,oc){
	obj = document.getElementById("x"+i);
	if(obj){
		if(oc==2){
			if(document.all){
				obj.style.display="block";
			}
			else {
				obj.style.display="table-row-group";
			}
			obj = document.getElementById("b"+i).innerHTML = "&ndash;";
		}
		else if(oc==1){
			obj.style.display="none";
			obj = document.getElementById("b"+i).innerHTML = "+";
		}
	}
}
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*86400000));//24*60*60*1000
		var expires = "; expires=" + date.toGMTString();
	} else {
		expires = "";
	}
	document.cookie = name + "=" + value + expires + "; path=/";
}
function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for (var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}
function opthot(e){
	if(e.altKey){
		key = String.fromCharCode(e.charCode).toUpperCase();
		tb = document.getElementById("optbody");
		allrows = tb.rows.length;
		for(i=1;i<=allrows;i++){
			if(document.getElementById("lbl"+i)){
				if(document.getElementById("lbl"+i).innerHTML.indexOf("("+key+")") > 0){
					if(document.getElementById(i+"text")){
						document.getElementById(i+"text").focus();
					}
					e.cancelBubble=true;
					return;
				}
			}
		}
		if(key=="L"){
			set_dropdown(document.edit.optselect,"lname");
			current = optshow();
			document.edit.elements[current+"lname"].focus();
		}
		else if(key=="F"){
			set_dropdown(document.edit.optselect,"fname");
			current = optshow();
			document.edit.elements[current+"fname"].focus();
		}
		else if(key=="B"){
			set_dropdown(document.edit.optselect,"all");
			current = optshow();
			document.edit.elements[current+"all"].focus();
		}
		else if(key=="D"){
			set_dropdown(document.edit.optselect,"date");
			current = optshow();
			document.edit.elements[current+"whichdate"].focus();
		}
		else if(key=="P"){
			set_dropdown(document.edit.optselect,"place");
			current = optshow();
			document.edit.elements[current+"whichplace"].focus();
		}
		e.cancelBubble=true;
	}
}
function optset(fld,vl){
	tb = document.getElementById("optbody");
	allrows = tb.rows.length;
	for(w=1;w<allrows;w++){
		if(document.edit.elements[w+fld]){
			if(vl == "remove"){
				optremove(w);
				return;
			}
			else if(",whichplace,p2".indexOf(fld) > 0){
				document.edit.elements[w+fld].selectedIndex = vl;
				return;
			}
			else if(",soundex".indexOf(fld) > 0){
				document.edit.elements[w+fld].checked = vl;
				return;
			}
			else if(",p3".indexOf(fld) > 0){
				document.edit.elements[w+fld].value = vl;
				return;
			}
		}
	}
}
function enable(btn,cls){
	document.getElementById(btn).disabled = false;
	if(cls){
		document.getElementById(btn).className = cls;
	}
	else {
		document.getElementById(btn).className = "";
	}
}
function disable(btn){
	document.getElementById(btn).disabled = true;
	document.getElementById(btn).className = "disabled";
}
function linkin(txt,obj){
	document.getElementById("linktext").innerHTML = txt;
	document.getElementById("linktext").style.display="block";
	document.getElementById("linktext").style.top = getposOffset(obj,"top")-18+"px";
	document.getElementById("linktext").style.left = getposOffset(obj,"left")-2+"px";
}
function linkout(){
	document.getElementById("linktext").style.display="none";
}
function firstcap(obj){
	with(obj){
		value = left(value,1).toUpperCase() + right(value,value.length-1);
	}
}
function died_early(which){
	msg = "";
	if(msg !== ""){
		alert(msg);
	}
	typ = document.edit.elements["type"+which].value;
	if(typ == 'D'){
		birth = left(find_date('B'),4);
		death = left(find_date('D'),4);
		if(birth && death){
			if(Number(birth) + 12 >= Number(death)){
				document.getElementById("flags_50").checked = true;
			}
		}
	}
}
function setfocus(obj,next){
	if(obj.selectedIndex >= 1){
		next.focus();
	}
}
function showsugg(){
	if(document.getElementById("suggestplace")){
		if(document.getElementById("suggestplace").innerHTML.length > 0){
			document.getElementById("suggestplace").style.display="block";
			if(document.all){
				if(document.edit.autolink){
					document.edit.autolink.style.display="none";
					document.edit.recentlink.style.display="none";
				}
			}
		}
	}
}
function hidesugg(){
	if(document.getElementById("suggestplace")){
		document.getElementById("suggestplace").style.display="none";
		//document.getElementById("suggestplace").innerHTML = "";
		if(document.all){
			if(document.edit.autolink){
				document.edit.autolink.style.display="block";
				document.edit.recentlink.style.display="block";
			}
		}
	}
}
function resizesugg(s){
	space = windowheight() - div.style.top.substr(0,3) - 30;
	if(s * 20 >= space){
		div.style.height = space + "px";
	}
	else {
		div.style.height = "auto";
	}
}
function updown(key){
	//38 = up, 40 = down
	cn = document.getElementById("suggestplace").childNodes;
	if(key==40){
		if(position == null || position >= cn.length-1) {
			position = -1;
		}
		position++;
		temp = position;
		for(k=temp;k<=cn.length;k++){
			if(k==cn.length){
				position = 0;
				k = 0;
			}
			if(cn[k].style.display=="" || cn[k].style.display=="block"){
				position = k;
				cn[position].focus();
				break;
			}
		}
	}
	else if(key==38){
		if(position == null || position <= 0) {
			position = cn.length;
		}
		position--;
		temp = position;
		for(k=temp;k>=-1;k--){
			if(k==-1){
				position = cn.length-1;
				k = cn.length-1;
			}
			if(cn[k].style.display=="" || cn[k].style.display=="block"){
				position = k;
				cn[position].focus();
				break;
			}
		}
	}
	else if(key==27){
		position = null;
		hidesugg();
		document.getElementById("suggestplace").innerHTML = "";
		document.edit.elements[current].focus();
	}
}
function suggestnarrow(p,like){
	position = null;
	cn = document.getElementById("suggestplace").childNodes;
	p = p.toLowerCase();
	found = 0;
	for(i=0;i<cn.length;i++){
		if(like && cn[i].innerHTML.toLowerCase().indexOf(p) >= 0){
			found++;
			cn[i].style.display="block";
		}
		else if(cn[i].innerHTML.substr(0,p.length).toLowerCase()==p){
			found++;
			cn[i].style.display="block";
		}
		else {
			cn[i].style.display="none";
		}
	}
	if(found==0){
		hidesugg();
	}
	else {
		if(document.all){
			resizesugg(found);
		}
		showsugg();
	}
}
function suggestlist(e){
	key = getkey(e);
	if(key == 36){
		position = null;
		updown(40);
	}
	else if(key == 35){
		position = null;
		updown(38);
	}
	updown(key);
}
function suggest(obj, e){
	key = getkey(e);
	vl = obj.value
	if(key == 38 || key == 40){
		updown(key);
	}
	else if(key == 8 && vl.charCodeAt(0) >= 65){
		suggestnarrow(vl);
	}
	else if(key == 123){
		open_window("place_lookup.cfm?place="+obj.value+"&field="+obj.name);
	}
	else if(vl.length==1 || vl.length==2 || right(vl,1) == "," || right(vl,1) == " ") {
		re = /^([a-z]{2}|[A-Z][a-z]),/
		if(re.test(vl)){
			obj.value = left(vl,2).toUpperCase() + vl.substr(2);
		}
		if(right(vl,1) == "," && key != 8){
			obj.value += " ";
		}
		else if(right(vl,2) == "  "){
			obj.value = left(vl,vl.length-1);
		}
		current = obj.name;
		position = null;
		hidtip();
		div = document.getElementById("suggestplace");
		div.innerHTML = "";
		div.style.top = (getposOffset(obj,"top")+20)+"px";
		div.style.left = (getposOffset(obj,"left")-18)+"px";
		div.style.maxHeight = (windowheight() - div.style.top.substr(0,3) - 30) + "px";
		div.style.width = "376px";
		div.style.overflow = "auto";
		$.getJSON("/ourfamily/ajax/place.cfm?value="+vl,
			function(data){
				opt = data.data;
				if(opt.place.length > 0){
					div = document.getElementById("suggestplace");
					content = "";
					for(i=0;i<opt.place.length;i++){
						p = opt.place[i].replace("'","\\'");
						if(i > 0){
							if(opt.which[i-1]==1 && opt.which[i]==2){
								content += "<HR>";
							}
						}
						content += "<a href=\"javascript:use('"+p+"')\">" + opt.place[i] + "</a>";
					}
					div.innerHTML = content;
					if(document.all){
						resizesugg(opt.place.length);
					}
					showsugg();
				}
	        });
	}
	else if((key >= 65 && key <= 90) || (key >= 97 && key <= 122)){
		suggestnarrow(vl);
	}
}
function use(p){
	if(left(p,3) != "---"){
		fld = document.edit.elements[current];
		fld.value = p;
		fld.focus();
		if(left(current,1) == "p"){ //new_places
			if(typeof document.edit.elements["change" + current.substr(2)] == "object"){
				chg = document.edit.elements["change" + current.substr(2)].value = 1;
			}
		}
		//document.getElementById("suggestplace").innerHTML = "";
		hidesugg();
	}
}
function usemod(a,n){
	document.edit.account_id.value = a;
	document.edit.searchfor.value = n;
	document.edit.searchfor.focus();
	document.getElementById("suggestplace").innerHTML = "";
	hidesugg();
}
function dropdown(obj,e,minlength){
	vl = obj.value;
	fld = obj.name;
	key = getkey(e);
	if(minlength == null) minlength=2;
	if(vl.length >= minlength && (key == 38 || key == 40)){
		updown(key);
	}
	else if(key == 27){
		hidesugg();
	}
	else if((vl.length >= minlength && vl.length <= 3) || (vl.length > 3 && key == 8)){
		current = fld;
		div = document.getElementById("suggestplace");
		div.innerHTML = "";
		div.style.top = (getposOffset(obj,"top")+20)+"px";
		div.style.left = (getposOffset(obj,"left")-18)+"px";
		div.style.maxHeight = (windowheight() - div.style.top.substr(0,3) - 30) + "px";
		div.style.width = "205px";
		div.style.overflow = "auto";
		$.getJSON("/ourfamily/ajax/"+fld+".cfm?value="+vl,
			function(data){
				opt = data.data;
				if(opt[fld].length > 0){
					div = document.getElementById("suggestplace");
					content = "";
					for(i=0;i<opt[fld].length;i++){
						p = opt[fld][i].replace("'","\\'");
						if(fld == "lname" && i > 0){
							if(opt.which[i-1]==1 && opt.which[i]==2){
								content += "<HR>";
							}
						}
						content += "<a href=\"javascript:use('"+p+"')\">" + opt[fld][i] + "</a>";
					}
					div.innerHTML = content;
					if(document.all){
						resizesugg(opt[fld].length);
					}
					showsugg();
				}
	        });		
	}
	else if(vl.length >= minlength && (key >= 65 && key <= 90) || (key >= 97 && key <= 122)){
		suggestnarrow(vl);
	}
}
function cleanchar(txt){
	txt = txt.replace(String.fromCharCode(228),'a');
	return txt;
}
function addLoadEvent(func){
	var oldonload = window.onload;
	if (typeof(window.onload) != 'function'){
    	window.onload = func;
	} else {
		window.onload = function(){
		oldonload();
		func();
		}
	}
}
function suggestuser(obj,e){
	vl = obj.value;
	key = getkey(e);
	if(vl.length <= 2){
		document.edit.account_id.value = "";
	}
	if(document.edit.account_id.value){
		return;
	}
	if(key == 27){
		hidesugg();
	}
	else if(vl.length >= 3 || vl.length <= 5){
		if(key == 38 || key == 40){
			updown(key);
		}
		else {
			div = document.getElementById("suggestplace");
			div.style.top = (getposOffset(obj,"top")+20)+"px";
			div.style.left = (getposOffset(obj,"left")-18)+"px";
			div.style.maxHeight = (windowheight() - div.style.top.substr(0,3) - 30) + "px";
			div.style.width = "376px";
			div.style.overflow = "auto";
			$.getJSON("/ourfamily/ajax/user.cfm?text="+vl,
				function(data){
					opt = data.data;
					if(opt.name.length > 0){
						content = "";
						for(i=0;i<opt.name.length;i++){
							p = opt.name[i].replace("'","\\'");
							a = opt.account_id[i];
							content += "<a href=\"javascript:usemod("+a+",'"+opt.name[i]+"')\">" + opt.name[i] +" &ndash; "+ opt.email[i] + "</a>";
						}
						div.innerHTML = content;
						if(document.all){
							resizesugg(opt.name.length);
						}
						showsugg();
					}
		        }
			);
		}
	}
	else if(vl.length >= 6){
		if(key == 8 || (key >= 65 && key <= 90) || (key >= 97 && key <= 122)){
			suggestnarrow(vl,true);
		}
		else if(key == 38 || key == 40){
			updown(key);
		}
	}
}
function loadplace(which,n,cleartext,noretrieve,obj){
	if(obj){
		if(left(obj.name,1) != "p"){
			obj = left(obj.name,2);
		}
		else {
			obj = "p";
		}
	}
	else {
		obj = "p";
	}
	if(window.location.href.indexOf("lookup") > 0){
		frm = self.opener.document.edit;
	}
	else {
		frm = document.edit;
	}
	if(which == 1){
		vl1 = frm.elements[obj+"1"+n].options[frm.elements[obj+"1"+n].selectedIndex].value;
		if(cleartext){
			frm.elements[obj+"3"+n].value = "";
		}
		if(vl1.length == 0){
			frm.elements[obj+"1"+n].selectedIndex = null;
			frm.elements[obj+"2"+n].selectedIndex = null;
			clear_option(frm.elements[obj+"2"+n]);
			return;
		}
		txturl = "/ourfamily/ajax/place.cfm?which="+which+"&value="+vl1;
		lastsugg = 0;
	}
	else if (which == 2){
		p1 = frm.elements[obj+"1"+n];
		p2 = frm.elements[obj+"2"+n];
		if(cleartext){
			frm.elements[obj+"3"+n].value = "";
		}
		vl1 = p1.options[p1.selectedIndex].value;
		vl2 = "";
		if(p2.options.length > 0){
			vl2 = p2.options[p2.selectedIndex].value;
		}
		if((vl2.length == 0 || left(vl2,3) == "---") && vl1.length == 0){
			frm.elements[obj+"2"+n].selectedIndex = null;
			hidesugg();
			return;
		}
		if(lastsugg == n && lastsugg > 0){
			showsugg();
			return;
		}
		txturl = "/ourfamily/ajax/place.cfm?which="+which+"&value="+vl1+"&value2="+vl2;
	}
	if(noretrieve){
		return;
	}
	var data = $.ajax({type: "GET",url: txturl, dataType: "json", async: false}).responseText;
	if(data.replace("\r\n\r\n\r\n","").length > 0){
		data = eval("(" + data + ")");
		if(data.recordcount > 0){
			opt = data.data;
			if(which == 1){
				dest = frm.elements[obj+""+(which+1)+n]
				temp = dest.options.length;
				clear_option(dest);
				if(data.recordcount > 1){
					add_option(dest,"","");
					if(window.location.href.indexOf("list.cfm")>0 || window.location.href.indexOf("query_edit.cfm")>0){
						add_option(dest,"(blank)","(blank)");
						add_option(dest,"(not blank)","(not blank)");
					}
					for(i=0;i<data.recordcount;i++){
						add_option(dest,opt.description[i],opt.description[i]);
					}
				}
				else {
					if(window.location.href.indexOf("list.cfm") > 0 || window.location.href.indexOf("query_edit.cfm")>0){
						if(txturl.indexOf("blank)") > 0){
							add_option(dest,"","");
							add_option(dest,"(blank)","(blank)");
							add_option(dest,"(not blank)","(not blank)");
						}
					}
					else {
						loadplace(2,n,false);
						frm.elements[obj+"3"+n].focus();
						showsugg();
					}
				}
			}
			else {
				current = obj+"3"+n;
				obj = frm.elements[current];
				div = document.getElementById("suggestplace");
				div.innerHTML = "";
				div.style.top = (getposOffset(obj,"top")+20)+"px";
				div.style.left = (getposOffset(obj,"left")-18)+"px";
				div.style.maxHeight = (windowheight() - div.style.top.substr(0,3) - 30) + "px";
				div.style.width = "376px";
				div.style.overflow = "auto";
				div = document.getElementById("suggestplace");
				content = "";
				for(i=0;i<opt.description.length;i++){
					p = opt.description[i].replace("'","\\'");
					content += "<a href=\"javascript:use('"+p+"')\">" + opt.description[i] + "</a>";
				}
				div.innerHTML = content;
				if(document.all){
					resizesugg(opt.description.length);
				}
				lastsugg = n;
				showsugg();
			}
		}
	}
}
function add_option(obj, tx, vl){
	l = obj.options.length;
	newOpt = new Option(tx, vl, false, false);
	obj.options[l]=newOpt;
	l++;
	obj.length = l;
}
function clear_option(obj){
	temp = obj.options.length;
	for(i=0;i<temp;i++){
		obj.options[0] = null;
	}
}
function placenarrow(obj, e){
	key = getkey(e);
	vl = obj.value;
	if(key == 38 || key == 40){
		updown(key);
	}
	else if(key == 27){
		hidesugg();
	}
	else if(key == 123){
		open_window("place_lookup.cfm?place="+obj.value+"&field="+obj.name);
	}
	else {
		suggestnarrow(vl);
	}
}
function contact(a){
	document.getElementById("tab3").style.display = document.all? "block": "table-row-group";
	$(".contact").css("background-color","yellow");
	if(Number(a) > 0){
		document.getElementById("tab5").style.display = document.all? "block": "table-row-group";
		document.getElementById("btnEmailaFriend").style.background = "yellow";
		document.getElementById("btnEmailaFriend").style.color = "black";
		dialog("To contact the researcher about this record... use the <b>Email-a-Friend</b> option, post a note under <b>Discuss</b>, submit a <b>Suggested</b> update, or contact the person listed under <b>Researchers</b>.",16000);
	}
	else {
		document.getElementById("tab5").style.display = "none";
		dialog("To contact the researcher about this record, use the <span style='background:yellow'>Discussion</span> option here to post a message to the site...<BR><BR>Or, if you register & login, then you can contact the researcher directly.",10000);
	}	
}
function dialog(txt,timeout){
	var newdiv = document.createElement('div');
	newdiv.className = "dialog";
	newdiv.innerHTML = "<div id='x' onclick='clear_dialog()'>X</div>";
	newdiv.innerHTML = newdiv.innerHTML + txt;
	document.body.appendChild(newdiv)
	timeoutid = setTimeout(clear_dialog,timeout);
}
function clear_dialog(){
	$(".dialog").hide();
	clearTimeout(timeoutid);
}
function module_add(obj){
	var i = obj.options[obj.selectedIndex].value;
	var t = obj.options[obj.selectedIndex].text;
	if(i){
		var h = '<div id="'+i+'" class="module">';
		h += '<h4>'+t+'</h4>';
		h += '<table class="tableborder"><tr class="column"><th>Date</th><th>Name</th>';
		h += '</tr><tr><td>Data...</td></tr></table></div>';
		$("body").append(h);
		$("#"+i).draggable({grid:[5,5]});
		$("#"+i).resizable({grid:[5,5]});
		$("#"+i).css("top","300px");
		$("#"+i).css("left","300px");
		obj.selectedIndex=null;
	}
}
function module_remove(obj){
	var i = obj.options[obj.selectedIndex].value;
	if(i){
		$("#"+i).remove();
		obj.selectedIndex=null;
	}
}
function altkey(obj,e){
	var key = getkey(e);
	var frm = document.edit;
	if(key >= 48 && key <= 57 && e.altKey){
		key = key - 48;
		var disp = frm.elements["alt"+key];
		var field = left(obj.name,obj.name.length-2);
		var line = right(obj.name,1);
		if($("#"+field+"1"+line).val() || $("#"+field+"3"+line).val()){
			disp.value = $("#"+field+"1"+line).val()+" -- ";
			if($("#"+field+"2"+line).val()){
				disp.value += $("#"+field+"2"+line).val();
			}
			disp.value += " -- " + $("#"+field+"3"+line).val();
			disp.className += " altshow";
		}
		else if(disp.value){
			segments = disp.value.split(" -- ");
			$("#"+field+"1"+line).val(segments[0]);
			if(segments[1].length > 0){
				var cty = frm.elements[field+"2"+line]; 
				clear_option(cty);
				add_option(cty, "", "");
				add_option(cty, segments[1], segments[1]);
				cty.selectedIndex=1;
			}
			else {
				loadplace(2,line,true,false,obj);
			}
			if(segments[2].length > 0){
				$("#"+field+"3"+line).val(segments[2]);
			}
			frm.elements["change"+line].value=1;
			frm.elements["enotes"+line].focus();
		}
	}
}
function county(n){
	if(document.edit.elements["p2"+n].selectedIndex <= 0 && document.edit.elements["p3"+n].value){
	    have_counties = "England,Scotland,Wales,Ireland,Australia,Austria,Belgium,Canada,Czech Republic,Denmark,Finland,France,Germany,Switzerland,Poland,Italy,Mexico,Netherlands,Norway,Spain,Sweden,AL,AR,AZ,CA,CO,NC,MD,DC,DE,FL,GA,IA,ID,IL,IN,LA,KS,KY,ME,MI,MN,MO,MS,MT,ND,NE,NH,NV,OR,VT,NJ,NM,NY,OH,OK,PA,MA,CT,RI,SC,SD,TN,TX,UT,VA,WA,WI,WV,WY";
	    if(listfind(have_counties,$("#p1"+n).val())){
		    tr = $("#p2"+n).parent().parent()
			$("#p2"+n).parent().parent().after("<tr><td></td><td colspan=2>Please select a county if it is known where the city/town is.  Use the Globe if you need help finding it.</td></tr>");
	        $("#p2"+n).css("background","yellow");
	        $("#gl"+n).css("background","yellow");
		}
	}
}
function showDialog(url,title,width,height){
	if(!width) width = 400;
	if(!height) height = 300;
	$("#dialog").dialog({
		bgiframe: true,
		autoOpen: true,
		width: width,
		height: height,
		modal: true,
		close: function() {
		}
	});
	$("#dialog").css("padding","0px");
	$("#dialog").css("overflow","hidden");
	$("#iframe_source").css("height","450px");
	$("#iframe_source").show();
	$("#dialog").dialog('open');
	document.getElementById("iframe_source").src = url;
}
function populatelist(fld,which){
	$.getJSON("/ourfamily/ajax/"+which+".cfm",
		function(data){
			opt = data.data;
			fld = document.getElementById(fld);
			for(i=0;i<data.recordcount;i++){
				add_option(fld, opt.description[i], opt.id[i]);
			}
        }
	);
}
function show_magnify(){
	$(".chkp").mouseenter(function(){
	    dir = $(this).attr("src");
		temp = dir.split("/");
	    dir = dir.replace(temp[temp.length-1],"");
	    file = $(this).attr("id");
	    html = "<img id='magnify' src='"+dir+file+"'>";
		$(this).after(html);
		$("#magnify").css("top",$(window).scrollTop());
		var base = $(this).offset().left;
		if(base > 500){
			$("#magnify").css("left",base-$("#magnify").width()-25);
		}
		else {
			$("#magnify").css("left",base+$(this).width()+5);
		}
	}).mouseleave(function(){
		$("#magnify").remove();
	})
}
function clean_url(txt){
	txt = txt.replace(/\(.*\)/,"");
	txt = trim(txt).replace("+","ppzpp");
	txt = txt.replace(/[ ]{2,9}/g," ");
	txt = txt.replace(/ /g,"sszss");
	txt = txt.replace(/\W/g,"");
	txt = txt.replace(/ppzpp/g,"+");
	txt = txt.replace(/sszss/g,"-");
	return txt;
}
function activate(n){
	if(document.edit.elements["type"+n].selectedIndex==0){
		$("#tb"+n+" tr:eq(0) td:eq(1)").hide();
		$("#tb"+n+" tr:eq(1)").hide();
		$("#tb"+n+" tr:eq(2)").hide();
		$("#tb"+n+" input[type=text]").val("");
		$("#tb"+n+" select").attr("selectedIndex",null);
	}
	else {
		$("#tb"+n+" tr:eq(0) td:eq(1)").show();
		$("#tb"+n+" tr:eq(1)").show();
		$("#tb"+n+" tr:eq(2)").show();
		$("#edate"+n).focus();
	}
}