Script Ancestry.com Hint Helper

This script works with Ancestry.com’s hint merge page to properly update data. This helps enforce genealogy best practices and saves time.

As of 12.12.2021. See ბოლო ვერსია.

// ==UserScript==
// @name     Script Ancestry.com Hint Helper
// @description This script works with Ancestry.com’s hint merge page to properly update data.  This helps enforce genealogy best practices and saves time.
// @version  1
// @grant    none
// @license MIT
// @include https://www.ancestry.com/family-tree/tree/*
// @namespace https://greasyfork.org/users/851861
// ==/UserScript==

monthNames = ['', 'January','February','March','April','May','June','July','August','September','October','November','December','Sept'];

function createInput(tag, value) {	
  return '<input id="altfield' + tag + '" type="hidden" value="' +  value + '" name="altfield' + tag + '">';
}

function addChecks( className ) {
  elements = document.getElementsByClassName (className);
	eLen = elements.length;

	for (i = 0; i < elements.length; i++) {
		elements[i].classList.add('checked');
	}
}

/*********
 * Corrects month by
 *   1) Changing "abt" to "Abt."
 *   2) Changing to DD mmm YYYY format
 *   3) Adding leading 0 to 1 digit dates (matching Family Tree Maker format)
 *   4) Adding "01 Apr" to resident dates from 1940 census
 *********/
function formatDate(date, is1940census) {
 	
  if (date.length > 0) {
    if (date.substring(0,4).toLowerCase() == 'abt ') {
      date = 'Abt. ' + date.substring(4);    
    } else {
      if (date.includes('/')) {
        temp = parts[0];
      } else {
        parts = date.split(' ');  
      }
      
      if (parts.length == 3) {
        if (parts[0].length == 1) {
          parts[0] = '0' + parts[0];       
        }

        parts[1] = abbrevMonth(parts[1]);
      }
      if (parts.length == 1 && is1940census) {
      	if (parts[0] == 1935 || parts[0] == 1940) {
        	parts.unshift('Apr');
          parts.unshift('01');
        }
      }
			date = parts.join(' ');
    }
  }
  return date;
}

/*********
 * Corrects month by
 *  1) Shortening month to three letters
 *  2) Converting number to letters
 *********/
function abbrevMonth(month) {
	if (month.length != 3) {
		if (monthNames.includes(month)) {
    	month = month.substring(0,3);	  
    } else if (month > 0) {
      month = monthNames[month].substring(0,3);
    }
	}
	return month;
}

/*********
 * Corrects any formatting problems with the places.  This includes:
 *  1) Add USA when there is a state
 *  2) Change "United States" to USA
 *  3) Add missing counties for some states (New England in first iteration)
 *  4) Remove the word "County" when there is a city or town
 *  5) Remove "Ward #" from city
 *********/
function formatPlace(place) {
 	if (place.length > 0) {
    parts = place.split(', ');
    
    switch(parts[parts.length -1]) {
      case 'Alabama': case 'Alaska': case 'Arizona': case 'Arkansas': case 'California': case 'Colorado': case 'Connecticut': case 'Delaware': case 'Florida': case 'Georgia': case 'Hawaii': case 'Idaho': case 'Illinois': case 'Indiana': case 'Iowa': case 'Kansas': case 'Kentucky': case 'Louisiana': case 'Maine': case 'Maryland': case 'Massachusetts': case 'Michigan': case 'Minnesota': case 'Mississippi': case 'Missouri': case 'Montana': case 'Nebraska': case 'Nevada': case 'New Hampshire': case 'New Jersey': case 'New Mexico': case 'New York': case 'North Carolina': case 'North Dakota': case 'Ohio': case 'Oklahoma': case 'Oregon': case 'Pennsylvania': case 'Rhode Island': case 'South Carolina': case 'South Dakota': case 'Tennessee': case 'Texas': case 'Utah': case 'Vermont': case 'Virginia': case 'Washington': case 'West Virginia': case 'Wisconsin': case 'Wyoming':
        parts.push('USA');
        break;
      case 'United States':
        parts[parts.length -1] = 'USA';
    }
    
    cityParts = parts[0].split(' ');
      
    if (cityParts.length > 2 && cityParts[cityParts.length - 2] == 'Ward') {
		  cityParts.pop();
      cityParts.pop();
      parts[0] = cityParts.join(' ');     
    }
    
    if (parts.length == 3 && parts[2] == 'USA') {			
      county = '';
      
    	switch ( parts[1] ) {
        case 'Connecticut':
          switch ( parts[0] ) {  
            case 'Bethel': case 'Bridgeport': case 'Brookfield': case 'Danbury': case 'Darien': case 'Easton': case 'Greenwich': case 'Monroe': case 'New Canaan': case 'New Fairfield': case 'Newtown': case 'Norwalk': case 'Redding': case 'Ridgefield': case 'Shelton': case 'Sherman': case 'Stamford': case 'Stratford': case 'Trumbull': case 'Weston': case 'Westport': case 'Wilton': county = 'Fairfield'; break; 
            case 'Avon': case 'Berlin': case 'Bloomfield': case 'Bristol': case 'Burlington': case 'Canton': case 'East Granby': case 'East Hartford': case 'East Windsor': case 'Enfield': case 'Farmington': case 'Glastonbury': case 'Granby': case 'Hartland': case 'Manchester': case 'Marlborough': case 'New Britain': case 'Newington': case 'Plainville': case 'Rocky Hill': case 'Simsbury': case 'South Windsor': case 'Southington': case 'Suffield': case 'West Hartford': case 'Wethersfield': case 'Windsor': case 'Windsor Locks': county = 'Hartford'; break; 
            case 'Barkhamsted': case 'Bethlehem': case 'Bridgewater': case 'Canaan': case 'Colebrook': case 'Cornwall': case 'Goshen': case 'Harwinton': case 'Kent': case 'Morris': case 'New Hartford': case 'New Milford': case 'Norfolk': case 'North Canaan': case 'Plymouth': case 'Roxbury': case 'Salisbury': case 'Sharon': case 'Thomaston': case 'Torrington': case 'Warren': case 'Washington': case 'Watertown': case 'Winchester': case 'Woodbury': county = 'Litchfield'; break; 
            case 'Chester': case 'Clinton': case 'Cromwell': case 'Deep River': case 'Durham': case 'East Haddam': case 'East Hampton': case 'Essex': case 'Haddam': case 'Killingworth': case 'Middlefield': case 'Middletown': case 'Old Saybrook': case 'Portland': case 'Westbrook': county = 'Middlesex'; break; 
            case 'Ansonia': case 'Beacon Falls': case 'Bethany': case 'Branford': case 'Cheshire': case 'Derby': case 'East Haven': case 'Guilford': case 'Hamden': case 'Madison': case 'Meriden': case 'Middlebury': case 'Milford': case 'Naugatuck': case 'North Branford': case 'North Haven': case 'Orange': case 'Oxford': case 'Prospect': case 'Seymour': case 'Southbury': case 'Wallingford': case 'Waterbury': case 'West Haven': case 'Wolcott': case 'Woodbridge': county = 'New Haven'; break; 
            case 'Bozrah': case 'Colchester': case 'East Lyme': case 'Franklin': case 'Griswold': case 'Groton': case 'Lebanon': case 'Ledyard': case 'Lisbon': case 'Lyme': case 'Montville': case 'North Stonington': case 'Norwich': case 'Old Lyme': case 'Preston': case 'Salem': case 'Sprague': case 'Stonington': case 'Voluntown': case 'Waterford': county = 'New London'; break; 
            case 'Andover': case 'Bolton': case 'Columbia': case 'Coventry': case 'Ellington': case 'Hebron': case 'Mansfield': case 'Somers': case 'Stafford': case 'Union': case 'Vernon': case 'Willington': county = 'Tolland'; break; 
            case 'Ashford': case 'Brooklyn': case 'Canterbury': case 'Chaplin': case 'Eastford': case 'Hampton': case 'Killingly': case 'Plainfield': case 'Pomfret': case 'Putnam': case 'Scotland': case 'Sterling': case 'Thompson': case 'Woodstock': county = 'Windham'; break; 
          }
          break;
        case 'Maine':
          switch ( parts[0] ) {  
            case 'Durham': case 'Greene': case 'Leeds': case 'Lisbon': case 'Livermore': case 'Livermore Falls': case 'Mechanic Falls': case 'Minot': case 'Poland': case 'Sabattus': case 'Turner': case 'Wales': county = 'Androscoggin'; break; 
            case 'Allagash': case 'Amity': case 'Ashland': case 'Blaine': case 'Bridgewater': case 'Castle Hill': case 'Caswell': case 'Chapman': case 'Crystal': case 'Dyer Brook': case 'Eagle Lake': case 'Easton': case 'Fort Fairfield': case 'Fort Kent': case 'Frenchville': case 'Grand Isle': case 'Hamlin': case 'Hammond': case 'Haynesville': case 'Hersey': case 'Hodgdon': case 'Houlton': case 'Island Falls': case 'Limestone': case 'Linneus': case 'Littleton': case 'Ludlow': case 'Madawaska': case 'Mapleton': case 'Mars Hill': case 'Masardis': case 'Merrill': case 'Monticello': case 'New Canada': case 'New Limerick': case 'New Sweden': case 'Oakfield': case 'Orient': case 'Perham': case 'Portage Lake': case 'Sherman': case 'Smyrna': case 'St. Agatha': case 'St. Francis': case 'Stockholm': case 'Van Buren': case 'Wade': case 'Wallagrass': case 'Washburn': case 'Westfield': case 'Westmanland': case 'Weston': case 'Woodland': county = 'Aroostook'; break; 
            case 'Durham': case 'Greene': case 'Leeds': case 'Lewiston': case 'Lisbon': case 'Livermore': case 'Livermore Falls': case 'Mechanic Falls': case 'Minot': case 'Poland': case 'Sabattus': case 'Turner': case 'Wales': county = 'Androscoggin'; break; 
            case 'Allagash': case 'Amity': case 'Ashland': case 'Blaine': case 'Bridgewater': case 'Caribou': case 'Castle Hill': case 'Caswell': case 'Chapman': case 'Crystal': case 'Dyer Brook': case 'Eagle Lake': case 'Easton': case 'Fort Fairfield': case 'Fort Kent': case 'Frenchville': case 'Grand Isle': case 'Hamlin': case 'Hammond': case 'Haynesville': case 'Hersey': case 'Hodgdon': case 'Houlton': case 'Island Falls': case 'Limestone': case 'Linneus': case 'Littleton': case 'Ludlow': case 'Madawaska': case 'Mapleton': case 'Mars Hill': case 'Masardis': case 'Merrill': case 'Monticello': case 'New Canada': case 'New Limerick': case 'New Sweden': case 'Oakfield': case 'Orient': case 'Perham': case 'Portage Lake': case 'Presque Isle': case 'Sherman': case 'Smyrna': case 'St. Agatha': case 'St. Francis': case 'Stockholm': case 'Van Buren': case 'Wade': case 'Wallagrass': case 'Washburn': case 'Westfield': case 'Westmanland': case 'Weston': case 'Woodland': county = 'Aroostook'; break; 
            case 'Baldwin': case 'Bridgton': case 'Brunswick': case 'Cape Elizabeth': case 'Casco': case 'Chebeague Island': case 'Falmouth': case 'Freeport': case 'Frye Island': case 'Gorham': case 'Gray': case 'Harpswell': case 'Harrison': case 'Long Island': case 'Naples': case 'New Gloucester': case 'North Yarmouth': case 'Portland': case 'Pownal': case 'Raymond': case 'Scarborough': case 'Sebago': case 'South Portland': case 'Standish': case 'Westbrook': case 'Windham': case 'Yarmouth': county = 'Cumberland'; break; 
            case 'Avon': case 'Carrabassett Valley': case 'Carthage': case 'Chesterville': case 'Eustis': case 'Farmington': case 'Industry': case 'Jay': case 'Kingfield': case 'New Sharon': case 'New Vineyard': case 'Phillips': case 'Rangeley': case 'Strong': case 'Temple': case 'Weld': case 'Wilton': county = 'Franklin'; break; 
            case 'Amherst': case 'Aurora': case 'Bar Harbor': case 'Blue Hill': case 'Brooklin': case 'Brooksville': case 'Bucksport': case 'Castine': case 'Cranberry Isles': case 'Dedham': case 'Deer Isle': case 'Eastbrook': case 'Ellsworth': case 'Frenchboro': case 'Gouldsboro': case 'Great Pond': case 'Lamoine': case 'Mariaville': case 'Mount Desert': case 'Orland': case 'Osborn': case 'Otis': case 'Sedgwick': case 'Sorrento': case 'Southwest Harbor': case 'Stonington': case 'Sullivan': case 'Surry': case "Swan's Island": case 'Tremont': case 'Trenton': case 'Verona Island': case 'Waltham': case 'Winter Harbor': county = 'Hancock'; break; 
            case 'Albion': case 'Augusta': case 'Belgrade': case 'Benton': case 'Chelsea': case 'China': case 'Clinton': case 'Farmingdale': case 'Fayette': case 'Gardiner': case 'Hallowell': case 'Litchfield': case 'Manchester': case 'Monmouth': case 'Mount Vernon': case 'Oakland': case 'Pittston': case 'Randolph': case 'Readfield': case 'Rome': case 'Sidney': case 'Vassalboro': case 'Vienna': case 'Waterville': case 'Wayne': case 'West Gardiner': case 'Windsor': case 'Winslow': case 'Winthrop': county = 'Kennebec'; break; 
            case 'Appleton': case 'Camden': case 'Cushing': case 'Friendship': case 'Hope': case 'Isle au Haut': case 'North Haven': case 'Owls Head': case 'Rockland': case 'Rockport': case 'South Thomaston': case 'St. George': case 'Thomaston': case 'Union': case 'Vinalhaven': case 'Warren': county = 'Knox'; break; 
            case 'Alna': case 'Boothbay': case 'Boothbay Harbor': case 'Bremen': case 'Bristol': case 'Damariscotta': case 'Dresden': case 'Edgecomb': case 'Jefferson': case 'Newcastle': case 'Nobleboro': case 'Somerville': case 'South Bristol': case 'Southport': case 'Waldoboro': case 'Westport Island': case 'Whitefield': case 'Wiscasset': county = 'Lincoln'; break; 
            case 'Andover': case 'Bethel': case 'Brownfield': case 'Buckfield': case 'Byron': case 'Canton': case 'Denmark': case 'Dixfield': case 'Fryeburg': case 'Gilead': case 'Greenwood': case 'Hanover': case 'Hartford': case 'Hebron': case 'Hiram': case 'Lovell': case 'Mexico': case 'Newry': case 'Norway': case 'Otisfield': case 'Paris': case 'Peru': case 'Porter': case 'Roxbury': case 'Rumford': case 'Stoneham': case 'Stow': case 'Sumner': case 'Sweden': case 'Upton': case 'Waterford': case 'West Paris': case 'Woodstock': county = 'Oxford'; break; 
            case 'Alton': case 'Bangor': case 'Bradford': case 'Bradley': case 'Brewer': case 'Burlington': case 'Carmel': case 'Charleston': case 'Chester': case 'Clifton': case 'Corinna': case 'Corinth': case 'Dexter': case 'Dixmont': case 'East Millinocket': case 'Eddington': case 'Edinburg': case 'Enfield': case 'Etna': case 'Exeter': case 'Garland': case 'Glenburn': case 'Greenbush': case 'Hampden': case 'Hermon': case 'Holden': case 'Howland': case 'Hudson': case 'Kenduskeag': case 'Lagrange': case 'Lakeville': case 'Lee': case 'Levant': case 'Lowell': case 'Mattawamkeag': case 'Maxfield': case 'Medway': case 'Milford': case 'Millinocket': case 'Mount Chase': case 'Newburgh': case 'Newport': case 'Old Town': case 'Orono': case 'Orrington': case 'Passadumkeag': case 'Patten': case 'Plymouth': case 'Springfield': case 'Stacyville': case 'Stetson': case 'Veazie': case 'Winn': case 'Woodville': county = 'Penobscot'; break; 
            case 'Abbot': case 'Beaver Cove': case 'Bowerbank': case 'Brownville': case 'Dover-Foxcroft': case 'Greenville': case 'Guilford': case 'Medford': case 'Milo': case 'Monson': case 'Parkman': case 'Sangerville': case 'Sebec': case 'Shirley': case 'Wellington': case 'Willimantic': county = 'Piscataquis'; break; 
            case 'Arrowsic': case 'Bath': case 'Bowdoin': case 'Bowdoinham': case 'Georgetown': case 'Phippsburg': case 'Richmond': case 'Topsham': case 'West Bath': case 'Woolwich': county = 'Sagadahoc'; break; 
            case 'Anson': case 'Athens': case 'Bingham': case 'Cambridge': case 'Canaan': case 'Caratunk': case 'Cornville': case 'Detroit': case 'Embden': case 'Fairfield': case 'Harmony': case 'Hartland': case 'Jackman': case 'Madison': case 'Mercer': case 'Moose River': case 'Moscow': case 'New Portland': case 'Norridgewock': case 'Palmyra': case 'Pittsfield': case 'Ripley': case 'Skowhegan': case 'Smithfield': case 'Solon': case 'St. Albans': case 'Starks': county = 'Somerset'; break; 
            case 'Belfast': case 'Belmont': case 'Brooks': case 'Burnham': case 'Frankfort': case 'Freedom': case 'Islesboro': case 'Jackson': case 'Liberty': case 'Lincolnville': case 'Monroe': case 'Montville': case 'Morrill': case 'Northport': case 'Palermo': case 'Prospect': case 'Searsmont': case 'Searsport': case 'Stockton Springs': case 'Swanville': case 'Thorndike': case 'Troy': case 'Unity': case 'Winterport': county = 'Waldo'; break; 
            case 'Addison': case 'Alexander': case 'Baileyville': case 'Beals': case 'Beddington': case 'Calais': case 'Charlotte': case 'Cherryfield': case 'Columbia': case 'Columbia Falls': case 'Cooper': case 'Crawford': case 'Cutler': case 'Danforth': case 'Deblois': case 'Dennysville': case 'East Machias': case 'Harrington': case 'Jonesboro': case 'Jonesport': case 'Lubec': case 'Machias': case 'Machiasport': case 'Marshfield': case 'Meddybemps': case 'Milbridge': case 'Northfield': case 'Pembroke': case 'Perry': case 'Princeton': case 'Robbinston': case 'Roque Bluffs': case 'Steuben': case 'Talmadge': case 'Topsfield': case 'Vanceboro': case 'Waite': case 'Wesley': case 'Whiting': case 'Whitneyville': county = 'Washington'; break; 
            case 'Acton': case 'Alfred': case 'Arundel': case 'Berwick': case 'Biddeford': case 'Buxton': case 'Cornish': case 'Dayton': case 'Eliot': case 'Hollis': case 'Kennebunk': case 'Kennebunkport': case 'Kittery': case 'Lebanon': case 'Limerick': case 'Limington': case 'Lyman': case 'Newfield': case 'North Berwick': case 'Ogunquit': case 'Old Orchard Beach': case 'Parsonsfield': case 'Saco': case 'Sanford': case 'Shapleigh': case 'South Berwick': case 'Waterboro': case 'Wells': county = 'York'; break;               
          }
          break;
        case 'Massachusetts':
          switch ( parts[0] ) {  
            case 'Bourne': case 'Brewster': case 'Chatham': case 'Dennis': case 'Eastham': case 'Falmouth': case 'Harwich': case 'Mashpee': case 'Orleans': case 'Provincetown': case 'Sandwich': case 'Truro': case 'Wellfleet': case 'Yarmouth': county = 'Barnstable'; break; 
            case 'Adams': case 'Alford': case 'Becket': case 'Cheshire': case 'Clarksburg': case 'Dalton': case 'Egremont': case 'Florida': case 'Great Barrington': case 'Hancock': case 'Hinsdale': case 'Lanesborough': case 'Lee': case 'Lenox': case 'Monterey': case 'Mount Washington': case 'New Ashford': case 'New Marlborough': case 'North Adams': case 'Otis': case 'Peru': case 'Pittsfield': case 'Richmond': case 'Sandisfield': case 'Savoy': case 'Sheffield': case 'Stockbridge': case 'Tyringham': case 'Washington': case 'West Stockbridge': case 'Williamstown': case 'Windsor': county = 'Berkshire'; break; 
            case 'Acushnet': case 'Attleboro': case 'Berkley': case 'Dartmouth': case 'Dighton': case 'Easton': case 'Fairhaven': case 'Fall River': case 'Freetown': case 'Mansfield': case 'New Bedford': case 'North Attleborough': case 'Norton': case 'Raynham': case 'Rehoboth': case 'Seekonk': case 'Somerset': case 'Swansea': case 'Taunton': case 'Westport': county = 'Bristol'; break; 
            case 'Aquinnah': case 'Chilmark': case 'Edgartown': case 'Gosnold': case 'Oak Bluffs': case 'Tisbury': case 'West Tisbury': county = 'Dukes'; break; 
            case 'Amesbury': case 'Andover': case 'Beverly': case 'Boxford': case 'Danvers': case 'Georgetown': case 'Gloucester': case 'Groveland': case 'Hamilton': case 'Haverhill': case 'Ipswich': case 'Lawrence': case 'Lynn': case 'Lynnfield': case 'Manchester-by-the-Sea': case 'Marblehead': case 'Merrimac': case 'Methuen': case 'Middleton': case 'Nahant': case 'Newbury': case 'Newburyport': case 'North Andover': case 'Peabody': case 'Rockport': case 'Rowley': case 'Salem': case 'Salisbury': case 'Saugus': case 'Swampscott': case 'Topsfield': case 'Wenham': case 'West Newbury': county = 'Essex'; break; 
            case 'Ashfield': case 'Bernardston': case 'Buckland': case 'Charlemont': case 'Colrain': case 'Conway': case 'Deerfield': case 'Erving': case 'Gill': case 'Greenfield': case 'Hawley': case 'Heath': case 'Leverett': case 'Leyden': case 'Monroe': case 'Montague': case 'New Salem': case 'Northfield': case 'Orange': case 'Rowe': case 'Shelburne': case 'Shutesbury': case 'Sunderland': case 'Warwick': case 'Wendell': case 'Whately': county = 'Franklin'; break; 
            case 'Agawam': case 'Blandford': case 'Brimfield': case 'Chester': case 'Chicopee': case 'East Longmeadow': case 'Granville': case 'Holland': case 'Holyoke': case 'Longmeadow': case 'Ludlow': case 'Monson': case 'Montgomery': case 'Palmer': case 'Russell': case 'Southwick': case 'Springfield': case 'Tolland': case 'Wales': case 'West Springfield': case 'Westfield': case 'Wilbraham': county = 'Hampden'; break; 
            case 'Amherst': case 'Belchertown': case 'Chesterfield': case 'Cummington': case 'Easthampton': case 'Goshen': case 'Granby': case 'Hadley': case 'Hatfield': case 'Huntington': case 'Middlefield': case 'Northampton': case 'Pelham': case 'Plainfield': case 'South Hadley': case 'Southampton': case 'Ware': case 'Westhampton': case 'Williamsburg': case 'Worthington': county = 'Hampshire'; break; 
            case 'Acton': case 'Arlington': case 'Ashby': case 'Ashland': case 'Ayer': case 'Bedford': case 'Belmont': case 'Billerica': case 'Boxborough': case 'Burlington': case 'Cambridge': case 'Carlisle': case 'Chelmsford': case 'Concord': case 'Dracut': case 'Dunstable': case 'Everett': case 'Framingham': case 'Groton': case 'Holliston': case 'Hopkinton': case 'Hudson': case 'Lexington': case 'Lincoln': case 'Littleton': case 'Lowell': case 'Malden': case 'Marlborough': case 'Maynard': case 'Medford': case 'Melrose': case 'Natick': case 'Newton': case 'North Reading': case 'Pepperell': case 'Reading': case 'Sherborn': case 'Shirley': case 'Somerville': case 'Stoneham': case 'Stow': case 'Sudbury': case 'Tewksbury': case 'Townsend': case 'Tyngsborough': case 'Wakefield': case 'Waltham': case 'Watertown': case 'Wayland': case 'Westford': case 'Weston': case 'Wilmington': case 'Winchester': case 'Woburn': county = 'Middlesex'; break; 
            case 'Nantucket': county = 'Nantucket'; break; 
            case 'Avon': case 'Bellingham': case 'Braintree': case 'Brookline': case 'Canton': case 'Cohasset': case 'Dedham': case 'Dover': case 'Foxborough': case 'Franklin': case 'Holbrook': case 'Medfield': case 'Medway': case 'Millis': case 'Milton': case 'Needham': case 'Norwood': case 'Plainville': case 'Quincy': case 'Randolph': case 'Sharon': case 'Stoughton': case 'Walpole': case 'Wellesley': case 'Westwood': case 'Weymouth': case 'Wrentham': county = 'Norfolk'; break; 
            case 'Abington': case 'Bridgewater': case 'Brockton': case 'Carver': case 'Duxbury': case 'East Bridgewater': case 'Halifax': case 'Hanover': case 'Hanson': case 'Hingham': case 'Hull': case 'Kingston': case 'Lakeville': case 'Marion': case 'Marshfield': case 'Mattapoisett': case 'Middleborough': case 'Norwell': case 'Pembroke': case 'Plympton': case 'Rochester': case 'Rockland': case 'Scituate': case 'Wareham': case 'West Bridgewater': case 'Whitman': county = 'Plymouth'; break; 
            case 'Boston': case 'Chelsea': case 'Revere': case 'Winthrop': county = 'Suffolk'; break; 
            case 'Ashburnham': case 'Athol': case 'Auburn': case 'Barre': case 'Berlin': case 'Blackstone': case 'Bolton': case 'Boylston': case 'Brookfield': case 'Charlton': case 'Clinton': case 'Douglas': case 'Dudley': case 'East Brookfield': case 'Fitchburg': case 'Gardner': case 'Grafton': case 'Hardwick': case 'Harvard': case 'Holden': case 'Hopedale': case 'Hubbardston': case 'Lancaster': case 'Leicester': case 'Leominster': case 'Lunenburg': case 'Mendon': case 'Milford': case 'Millbury': case 'Millville': case 'New Braintree': case 'North Brookfield': case 'Northborough': case 'Northbridge': case 'Oakham': case 'Oxford': case 'Paxton': case 'Petersham': case 'Phillipston': case 'Princeton': case 'Royalston': case 'Rutland': case 'Shrewsbury': case 'Southborough': case 'Southbridge': case 'Spencer': case 'Sterling': case 'Sturbridge': case 'Sutton': case 'Templeton': case 'Upton': case 'Uxbridge': case 'Warren': case 'Webster': case 'West Boylston': case 'West Brookfield': case 'Westborough': case 'Westminster': case 'Winchendon': county = 'Worcester'; break; 
          }
          break;
          
        case 'New Hampshire':
          switch ( parts[0] ) {  
            case 'Alton': case 'Barnstead': case 'Belmont': case 'Center Harbor': case 'Gilford': case 'Gilmanton': case 'Laconia': case 'Meredith': case 'New Hampton': case 'Sanbornton': case 'Tilton': county = 'Belknap'; break; 
            case 'Albany': case 'Bartlett': case 'Brookfield': case 'Chatham': case 'Conway': case 'Eaton': case 'Effingham': case 'Freedom': case "Hart's Location": case 'Jackson': case 'Madison': case 'Moultonborough': case 'Ossipee': case 'Sandwich': case 'Tamworth': case 'Tuftonboro': case 'Wakefield': case 'Wolfeboro': county = 'Carroll'; break; 
            case 'Alstead': case 'Chesterfield': case 'Dublin': case 'Fitzwilliam': case 'Gilsum': case 'Harrisville': case 'Hinsdale': case 'Jaffrey': case 'Keene': case 'Marlborough': case 'Marlow': case 'Nelson': case 'Richmond': case 'Rindge': case 'Roxbury': case 'Stoddard': case 'Sullivan': case 'Surry': case 'Swanzey': case 'Troy': case 'Walpole': case 'Westmoreland': case 'Winchester': county = 'Cheshire'; break; 
            case 'Berlin': case 'Clarksville': case 'Colebrook': case 'Columbia': case 'Dalton': case 'Dummer': case 'Errol': case 'Gorham': case 'Jefferson': case 'Lancaster': case 'Milan': case 'Northumberland': case 'Pittsburg': case 'Randolph': case 'Shelburne': case 'Stark': case 'Stewartstown': case 'Stratford': case 'Whitefield': county = 'Coos'; break; 
            case 'Alexandria': case 'Ashland': case 'Bath': case 'Benton': case 'Bethlehem': case 'Bridgewater': case 'Bristol': case 'Campton': case 'Canaan': case 'Dorchester': case 'Easton': case 'Ellsworth': case 'Enfield': case 'Franconia': case 'Groton': case 'Hanover': case 'Haverhill': case 'Hebron': case 'Holderness': case 'Landaff': case 'Lebanon': case 'Lincoln': case 'Lisbon': case 'Littleton': case 'Lyman': case 'Lyme': case 'Monroe': case 'Orange': case 'Orford': case 'Piermont': case 'Plymouth': case 'Rumney': case 'Sugar Hill': case 'Thornton': case 'Warren': case 'Waterville Valley': case 'Wentworth': case 'Woodstock': county = 'Grafton'; break; 
            case 'Amherst': case 'Antrim': case 'Bedford': case 'Bennington': case 'Brookline': case 'Deering': case 'Francestown': case 'Goffstown': case 'Greenfield': case 'Greenville': case 'Hancock': case 'Hollis': case 'Hudson': case 'Litchfield': case 'Lyndeborough': case 'Manchester': case 'Mason': case 'Milford': case 'Mont Vernon': case 'Nashua': case 'New Boston': case 'New Ipswich': case 'Pelham': case 'Peterborough': case 'Sharon': case 'Temple': case 'Weare': case 'Wilton': case 'Windsor': county = 'Hillsborough'; break; 
            case 'Allenstown': case 'Andover': case 'Boscawen': case 'Bow': case 'Bradford': case 'Canterbury': case 'Chichester': case 'Concord': case 'Danbury': case 'Dunbarton': case 'Epsom': case 'Franklin': case 'Henniker': case 'Hill': case 'Hooksett': case 'Hopkinton': case 'Loudon': case 'New London': case 'Newbury': case 'Northfield': case 'Pembroke': case 'Pittsfield': case 'Salisbury': case 'Sutton': case 'Warner': case 'Webster': case 'Wilmot': county = 'Merrimack'; break; 
            case 'Atkinson': case 'Auburn': case 'Brentwood': case 'Candia': case 'Chester': case 'Danville': case 'Deerfield': case 'Derry': case 'East Kingston': case 'Epping': case 'Exeter': case 'Fremont': case 'Greenland': case 'Hampstead': case 'Hampton': case 'Hampton Falls': case 'Kensington': case 'Kingston': case 'Londonderry': case 'New Castle': case 'Newfields': case 'Newington': case 'Newmarket': case 'Newton': case 'North Hampton': case 'Northwood': case 'Nottingham': case 'Plaistow': case 'Portsmouth': case 'Raymond': case 'Rye': case 'Salem': case 'Sandown': case 'Seabrook': case 'South Hampton': case 'Stratham': case 'Windham': county = 'Rockingham'; break; 
            case 'Barrington': case 'Dover': case 'Durham': case 'Farmington': case 'Lee': case 'Madbury': case 'Middleton': case 'Milton': case 'New Durham': case 'Rochester': case 'Rollinsford': case 'Somersworth': case 'Strafford': county = 'Strafford'; break; 
            case 'Acworth': case 'Charlestown': case 'Claremont': case 'Cornish': case 'Croydon': case 'Goshen': case 'Grantham': case 'Langdon': case 'Lempster': case 'Newport': case 'Plainfield': case 'Springfield': case 'Sunapee': case 'Unity': case 'Washington': case 'Springfield': case 'Sunapee': case 'Unity': case 'Washington': county = 'Sullivan'; break; 
          }
          break;

        case 'Rhode Island':
          switch ( parts[0] ) {  
            case 'Barrington': case 'Warren': county = 'Bristol'; break; 
            case 'Coventry': case 'East Greenwich': case 'Warwick': case 'West Greenwich': case 'West Warwick': county = 'Kent'; break; 
            case 'Jamestown': case 'Little Compton': case 'Middletown': case 'Portsmouth': case 'Tiverton': county = 'Newport'; break; 
            case 'Burrillville': case 'Central Falls': case 'Cranston': case 'Cumberland': case 'East Providence': case 'Foster': case 'Glocester': case 'Johnston': case 'Lincoln': case 'North Providence': case 'North Smithfield': case 'Pawtucket': case 'Scituate': case 'Smithfield': case 'Woonsocket': county = 'Providence'; break; 
            case 'Charlestown': case 'Exeter': case 'Hopkinton': case 'Narragansett': case 'New Shoreham': case 'North Kingstown': case 'Richmond': case 'South Kingstown': case 'Westerly': county = 'Washington'; break; 
          }
          break;   
        case 'Vermont':
          switch ( parts[0] ) {  
            case 'Bethel': case 'Bridgeport': case 'Brookfield': case 'Danbury': case 'Darien': case 'Easton': case 'Greenwich': case 'Monroe': case 'New Canaan': case 'New Fairfield': case 'Newtown': case 'Norwalk': case 'Redding': case 'Ridgefield': case 'Shelton': case 'Sherman': case 'Stamford': case 'Stratford': case 'Trumbull': case 'Weston': case 'Westport': case 'Wilton': county = 'Fairfield'; break; 
            case 'Avon': case 'Berlin': case 'Bloomfield': case 'Bristol': case 'Burlington': case 'Canton': case 'East Granby': case 'East Hartford': case 'East Windsor': case 'Enfield': case 'Farmington': case 'Glastonbury': case 'Granby': case 'Hartland': case 'Manchester': case 'Marlborough': case 'New Britain': case 'Newington': case 'Plainville': case 'Rocky Hill': case 'Simsbury': case 'South Windsor': case 'Southington': case 'Suffield': case 'West Hartford': case 'Wethersfield': case 'Windsor': case 'Windsor Locks': county = 'Hartford'; break; 
            case 'Barkhamsted': case 'Bethlehem': case 'Bridgewater': case 'Canaan': case 'Colebrook': case 'Cornwall': case 'Goshen': case 'Harwinton': case 'Kent': case 'Morris': case 'New Hartford': case 'New Milford': case 'Norfolk': case 'North Canaan': case 'Plymouth': case 'Roxbury': case 'Salisbury': case 'Sharon': case 'Thomaston': case 'Torrington': case 'Warren': case 'Washington': case 'Watertown': case 'Winchester': case 'Woodbury': county = 'Litchfield'; break; 
            case 'Chester': case 'Clinton': case 'Cromwell': case 'Deep River': case 'Durham': case 'East Haddam': case 'East Hampton': case 'Essex': case 'Haddam': case 'Killingworth': case 'Middlefield': case 'Middletown': case 'Old Saybrook': case 'Portland': case 'Westbrook': county = 'Middlesex'; break; 
            case 'Ansonia': case 'Beacon Falls': case 'Bethany': case 'Branford': case 'Cheshire': case 'Derby': case 'East Haven': case 'Guilford': case 'Hamden': case 'Madison': case 'Meriden': case 'Middlebury': case 'Milford': case 'Naugatuck': case 'North Branford': case 'North Haven': case 'Orange': case 'Oxford': case 'Prospect': case 'Seymour': case 'Southbury': case 'Wallingford': case 'Waterbury': case 'West Haven': case 'Wolcott': case 'Woodbridge': county = 'New Haven'; break; 
            case 'Bozrah': case 'Colchester': case 'East Lyme': case 'Franklin': case 'Griswold': case 'Groton': case 'Lebanon': case 'Ledyard': case 'Lisbon': case 'Lyme': case 'Montville': case 'North Stonington': case 'Norwich': case 'Old Lyme': case 'Preston': case 'Salem': case 'Sprague': case 'Stonington': case 'Voluntown': case 'Waterford': county = 'New London'; break; 
            case 'Andover': case 'Bolton': case 'Columbia': case 'Coventry': case 'Ellington': case 'Hebron': case 'Mansfield': case 'Somers': case 'Stafford': case 'Union': case 'Vernon': case 'Willington': county = 'Tolland'; break; 
            case 'Ashford': case 'Brooklyn': case 'Canterbury': case 'Chaplin': case 'Eastford': case 'Hampton': case 'Killingly': case 'Plainfield': case 'Pomfret': case 'Putnam': case 'Scotland': case 'Sterling': case 'Thompson': case 'Woodstock': county = 'Windham'; break; 
          }
          break;
      }
      
      if (county.length > 0) {
        parts.splice(1, 0, county);
      }
    }
    
   	if (parts.length == 4) {
    	if (parts[1].endsWith("County")) {
        parts[1] = parts[1].substring(0, parts[1].length - 7); 
      }
    }
    
    if (parts[parts.length - 1] == 'United States of America') {
    	parts[parts.length - 1] = 'USA';
    }
    
		place = parts.join(', ');
  }
  return place;
}

function formatCounty(place) {
	parts = place.split(',');
  if (parts.length == 3) {
  	parts[0] = parts[0] + ' County';
  }
  
	place = parts.join(', ');
  return place;  
}

/***********************
 * Check checkboxes
 ***********************/

addChecks('eventItem updateMergeItem hasAltPref');
addChecks('eventItem updateEventItem diffItem hasAltPref');
addChecks('eventItem updateEventItem hasAltPref');
addChecks('eventItem descItem newItem');

elements = document.getElementsByClassName ('eventItem descItem  newItem');

for (i = 0; i < elements.length; i++) {
	elements[i].classList.remove('checked');
}

elements = document.getElementsByClassName ('radio altPrefRadio');

for (i = 0; i < elements.length; i++) {
  if (elements[i].id.substring(0,4) == '_pre' ) {
    elements[i].classList.remove('checked');
  } else {
    elements[i].classList.add('checked');
    elements[i].checked = true;
  }
}

elements = document.getElementsByClassName ('recTbl altItem');
for (i = 0; i < elements.length; i++) {
  elements[i].classList.remove('hide');
}

elements = document.getElementsByClassName ('recTbl wasItem');
for (i = 0; i < elements.length; i++) {
  elements[i].classList.add('hide');
}

elements = document.getElementsByClassName ('mergeCheck');
for (i = 0; i < elements.length; i++) {
  if (elements[i].title.length == 0) {
  	if (elements[i].tagName == 'A') {
   		elements[i].classList.add('checked');
  	}
  }
}

elements = document.getElementsByClassName ('secItem matchedItem deselected');
elen = elements.length;
for (i = elen; i > 0; i=i-1) {
 	elements[i-1].classList.remove('deselected');
}

elements = document.getElementsByClassName ('secItem newItem deselected');
elen = elements.length;
for (i = elen; i > 0; i=i-1) {
	elements[i-1].classList.remove('deselected');
}


/***********************
 * Set up hidden inputs
 ***********************/
var altFields = new Array();
var altFieldTags = new Array();
var dataNorms = new Array();
var altChecks = new Array();

elements = document.getElementsByClassName ('alternates');

for (i = 0; i < elements.length; i++) {
	
  fields = elements[i].getElementsByClassName ('field');
  
  for (j = 0; j < fields.length / 2; j++) {
	  altFields.push(fields[j].innerHTML);
    
    if(fields[j].attributes.length == 1) {
      dataNorms.push('');
    } else {
      dataNorms.push(fields[j].attributes[1]);
    }
  }
  
  if (fields.length == 2) {
    altFields.push('');
    altFields.push('');
    dataNorms.push('');
    dataNorms.push('');
  }
}


elements = document.getElementsByClassName ('radio altPrefRadio');

for (i = 0; i < elements.length; i++) {
  
  if (elements[i].id.substring(0,4) == '_pre' ) {
    elements[i].classList.remove('checked');
  } else {
    elements[i].classList.add('checked');
    elements[i].checked = true;
  }

  if (elements[i].id.substring(0,15) == '_prefRadiofield' ) {
  	altFieldTags.push(elements[i].id.substring(15));
    altFieldTags.push('');
    altFieldTags.push('');
  } else if (elements[i].id.substring(0,10) == '_prefRadio' ) {
		altFieldTags.push('1' + elements[i].id.substring(10) );
    altFieldTags.push('2' + elements[i].id.substring(10) );
    altFieldTags.push('3' + elements[i].id.substring(10) );
  } else if (elements[i].id.substring(0,9) == '_altRadio' ) {
  	altChecks.push('altChk' + elements[i].id.substring(9));
  }
  
}


elements = document.getElementsByClassName ('alternates');

for (i = 0; i < elements.length; i++) {
  fields = elements[i].getElementsByClassName ('altField');
  
  for (j = 0; j < fields.length; j++) {
    
    if (altFields[i * 3 + j] != '') {
      tag = altFieldTags[i * 3 + j];
      
      fields[j].innerHTML = createInput(tag, altFields[i * 3 + j]);
      
      if (dataNorms[i * 3 + j] != '') {
        if (dataNorms[i * 3 + j].value.includes(",")) {
          fields[j].innerHTML = fields[j].innerHTML + createInput(tag + '_GPID', dataNorms[i * 3 + j].value);
        } else {
          fields[j].innerHTML = fields[j].innerHTML + createInput(tag + '_ND', dataNorms[i * 3 + j].value);
        }
      }
    }    
  }
}

elements = document.getElementsByClassName ('eventItem descItem newItem');

for (i = 0; i < elements.length; i++) {
	divs = elements[i].getElementsByClassName ('recDiv');
  
  divs[1].style = 'display: none;';
}

for (i = 0; i < altChecks.length; i++) {
	elements = document.getElementById (altChecks[i]);
  elements.value = "1";
}

elements = document.getElementsByClassName ('editTextField textdefault textsml');

for (i = 0; i < elements.length; i++) {
	elements[i].innerHTML = '';
}

elements = document.getElementsByClassName ('nodeChecked');
for (i = 0; i < elements.length; i++) {
	elements[i].value = '1';
}


/***********************
 * Clean up fields
 ***********************/

var is1940census = false;
var isCaliforniaDeathIndex = false;
var isCaliforniaBirthIndex = false;
elements = document.getElementsByClassName ('subtitle recHeader textlrg coloralt4 bold');

if (elements[0].innerHTML == 'in the 1940 United States Federal Census') {
	is1940census = true; 
} else if (elements[0].innerHTML == 'in the California, U.S., Death Index, 1940-1997') {
	isCaliforniaDeathIndex = true; 
} else if (elements[0].innerHTML == 'in the California Birth Index, 1905-1995') {
	isCaliforniaBirthIndex = true; 
}


var fields = new Array();

elements = document.getElementsByClassName ('dateField');

for (i = 0; i < elements.length; i++) {
	fields.push(elements[i].id.substring(5));
}

for (i = 0; i < fields.length; i++) {
  elements = document.getElementById( 'field' + fields[i] );
  elements.value = formatDate(elements.value, is1940census);
  
  elements = document.getElementById( 'altfield' + fields[i] );
  if (elements) {
  	elements.value = formatDate(elements.value, is1940census);
  }
}

fields = new Array();

elements = document.getElementsByClassName ('placeField');

for (i = 0; i < elements.length; i++) {
	fields.push(elements[i].id.substring(5));
}

for (i = 0; i < fields.length; i++) {
  elements = document.getElementById( 'field' + fields[i] );
  elements.value = formatPlace(elements.value);

  elements = document.getElementById( 'altfield' + fields[i] );
  if (elements) {
  	elements.value = formatPlace(elements.value);
  }
}

if (isCaliforniaDeathIndex == true) {
  elements = document.getElementById( 'field' + fields[fields.length -1] );
  if ( elements.value.includes(',') == false ) {
  	elements.value = elements.value + ' County, California, USA';  
  }  

  elements = document.getElementById( 'altfield' + fields[fields.length -1] );
  if (elements) {
  	elements.value = elements.value + ' County, California, USA'; 
  }  
}

if (isCaliforniaBirthIndex == true) {
  elements = document.getElementById( 'field2_0_1' );
  elements.value = formatCounty( elements.value );
  
  elements = document.getElementById( 'altfield2_0_1' );
  if (elements) {
  	elements.value = formatCounty( elements.value );
  }  
}