Place Harmonizer Beta

Harmonizes, formats, and locks a selected place

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

/* global I18n */
/* global OpenLayers */
/* global $ */
/* global W */
/* global GM_info */
/* global require */
/* global performance */
/* global OL */
/* global _ */
// ==UserScript==
// @name		 Place Harmonizer Beta
// @namespace 	 https://greatest.deepsurf.us/en/users/19426-bmtg
// @version		1.1.31
// @description  Harmonizes, formats, and locks a selected place
// @author	   WMEPH development group
// @include         https://editor-beta.waze.com/*editor/*
// @include         https://www.waze.com/*editor/*
// @exclude          https://www.waze.com/*user/editor/*
// @grant	   none

// ==/UserScript==
(function () {
	// item = W.selectionManager.selectedItems[0].model
	var WMEPHversion = GM_info.script.version.toString(); // pull version from header
	var WMEPHversionMeta = WMEPHversion.match(/(\d+\.\d+)/i)[1];  // get the X.X version
	var majorNewFeature = false;  // set to true to make an alert pop up after script update with new feature
	var scriptName = GM_info.script.name.toString();
	var isDevVersion = (scriptName.match(/Beta/i) !== null);  //  enables dev messages and unique DOM options if the script is called "... Beta"
	var USA_PNH_DATA, USA_PNH_NAMES = [], USA_CH_DATA, USA_STATE_DATA, USA_CH_NAMES = [];  // Storage for PNH and Category data
	var CAN_PNH_DATA, CAN_PNH_NAMES = [];  // var CAN_CH_DATA, CAN_CH_NAMES = [] not used for now
	var hospitalPartMatch, hospitalFullMatch, animalPartMatch, animalFullMatch, schoolPartMatch, schoolFullMatch;  // vars for cat-name checking
	var WMEPHdevList, WMEPHbetaList;  // Userlists
	var devVersStr='', devVersStrSpace='', devVersStrDash='';  // strings to differentiate DOM elements between regular and beta script
	var devVersStringMaster = "Beta";
	var dataReadyCounter = 0;
	var betaDataDelay = 10;
	if (isDevVersion) { 
		devVersStr = devVersStringMaster; devVersStrSpace = " " + devVersStr; devVersStrDash = "-" + devVersStr; 
		betaDataDelay = 20;
	}
	var WMEServicesArray = ["VALLET_SERVICE","DRIVETHROUGH","WI_FI","RESTROOMS","CREDIT_CARDS","RESERVATIONS","OUTSIDE_SEATING","AIR_CONDITIONING","PARKING_FOR_CUSTOMERS","DELIVERIES","TAKE_AWAY","WHEELCHAIR_ACCESSIBLE"];
	var collegeAbbreviations = 'USF|USFSP|UF|UCF|UA|UGA|FSU|UM|SCP|FAU|FIU';
	var defaultKBShortcut,shortcutParse, modifKey = 'Alt+';
	var forumMsgInputs;
	var venueWhitelist, venueWhitelistStr, WLSToMerge, wlKeyName, wlButtText = 'WL';  // Whitelisting vars
	var WLlocalStoreName = 'WMEPH-venueWhitelistNew';
	var WLlocalStoreNameCompressed = 'WMEPH-venueWhitelistCompressed';
	var compressedWLLS;
	var WMEPH_NameLayer, nameLayer, dupeIDList = [], dupeHNRangeList, dupeHNRangeIDList, dupeHNRangeDistList;
	// Web search Window forming:
	var searchResultsWindowSpecs = '"resizable=yes, top='+ Math.round(window.screen.height*0.1) +', left='+ Math.round(window.screen.width*0.3) +', width='+ Math.round(window.screen.width*0.7) +', height='+ Math.round(window.screen.height*0.8) +'"';
	var searchResultsWindowName = '"WMEPH Search Results"';
	var WMEPHmousePosition;
	var useState = true;
	var cloneMaster = null;
	var bannButt, bannButt2, bannServ, bannDupl, bannButtHL;  // Banner Buttons objects
	var RPPLockString = 'Lock?';
	var panelFields = {};  // the fields for the sidebar
	
	// Array prototype extensions (for Firefox fix)
	Array.prototype.toSet = function () {
		return this.reduce(function (e, t) {return e[t] = !0, e;}, {});
	};
	Array.prototype.first = function () {
		return this[0];
	};
	Array.prototype.isEmpty = function () {
		return 0 === this.length;
	};
	
	/* ****** Pull PNH and Userlist data ****** */
	setTimeout(function() {
		// Pull USA PNH Data
		setTimeout(function() {
			$.ajax({
				type: 'GET',
				url: 'https://spreadsheets.google.com/feeds/list/1-f-JTWY5UnBx-rFTa4qhyGMYdHBZWNirUTOgn222zMY/o6q7kx/public/values',
				jsonp: 'callback', data: { alt: 'json-in-script' }, dataType: 'jsonp',
				success: function(response) {
					USA_PNH_DATA = [];
					for (var i = 0; i < response.feed.entry.length; i++) {
						USA_PNH_DATA.push(response.feed.entry[i].gsx$pnhdata.$t);
					}
				}
			});
		}, 0);
		// Pull Category Data ( Includes CAN for now )
		setTimeout(function() {
			$.ajax({
				type: 'GET',
				url: 'https://spreadsheets.google.com/feeds/list/1-f-JTWY5UnBx-rFTa4qhyGMYdHBZWNirUTOgn222zMY/ov3dubz/public/values',
				jsonp: 'callback', data: { alt: 'json-in-script' }, dataType: 'jsonp',
				success: function(response) {
					USA_CH_DATA = [];
					for (var i = 0; i < response.feed.entry.length; i++) {
						USA_CH_DATA.push(response.feed.entry[i].gsx$pcdata.$t);
					}
				}
			});
		}, 20);
		// Pull State-based Data (includes CAN for now)
		setTimeout(function() {
			$.ajax({
				type: 'GET',
				url: 'https://spreadsheets.google.com/feeds/list/1-f-JTWY5UnBx-rFTa4qhyGMYdHBZWNirUTOgn222zMY/os2g2ln/public/values',
				jsonp: 'callback', data: { alt: 'json-in-script' }, dataType: 'jsonp',
				success: function(response) {
					USA_STATE_DATA = [];
					for (var i = 0; i < response.feed.entry.length; i++) {
						USA_STATE_DATA.push(response.feed.entry[i].gsx$psdata.$t);
					}
				}
			});
		}, 40);
		// Pull CAN PNH Data
		setTimeout(function() {
			$.ajax({
				type: 'GET',
				url: 'https://spreadsheets.google.com/feeds/list/1TIxQZVLUbAJ8iH6LPTkJsvqFb_DstrHpKsJbv1W1FZs/o4ghhas/public/values',
				jsonp: 'callback', data: { alt: 'json-in-script' }, dataType: 'jsonp',
				success: function(response) {
					CAN_PNH_DATA = [];
					for (var i = 0; i < response.feed.entry.length; i++) {
						CAN_PNH_DATA.push(response.feed.entry[i].gsx$pnhdata.$t);
					}
				}
			});
		}, 60);
		// Pull name-category lists
		setTimeout(function() {
			$.ajax({
				type: 'GET',
				url: 'https://spreadsheets.google.com/feeds/list/1qPjzDu7ZWcpz9xrWYgU7BFLVdbk9ycqgPK9f2mydYlA/op17piq/public/values',
				jsonp: 'callback', data: { alt: 'json-in-script' }, dataType: 'jsonp',
				success: function(response) {
					hospitalPartMatch = response.feed.entry[0].gsx$hmchp.$t;
					hospitalFullMatch = response.feed.entry[0].gsx$hmchf.$t;
					animalPartMatch = response.feed.entry[0].gsx$hmcap.$t;
					animalFullMatch = response.feed.entry[0].gsx$hmcaf.$t;
					schoolPartMatch = response.feed.entry[0].gsx$schp.$t;
					schoolFullMatch = response.feed.entry[0].gsx$schf.$t;
					hospitalPartMatch = hospitalPartMatch.toLowerCase().replace(/ \|/g,'|').replace(/\| /g,'|').split("|");
					hospitalFullMatch = hospitalFullMatch.toLowerCase().replace(/ \|/g,'|').replace(/\| /g,'|').split("|");	
					animalPartMatch = animalPartMatch.toLowerCase().replace(/ \|/g,'|').replace(/\| /g,'|').split("|");	
					animalFullMatch = animalFullMatch.toLowerCase().replace(/ \|/g,'|').replace(/\| /g,'|').split("|");
					schoolPartMatch = schoolPartMatch.toLowerCase().replace(/ \|/g,'|').replace(/\| /g,'|').split("|");	
					schoolFullMatch = schoolFullMatch.toLowerCase().replace(/ \|/g,'|').replace(/\| /g,'|').split("|");
				}
			});
		}, 80);
		// Pull dev and beta UserList Data
		setTimeout(function() {
			$.ajax({
				type: 'GET',
				url: 'https://spreadsheets.google.com/feeds/list/1L82mM8Xg-MvKqK3WOfsMhFEGmVM46lA8BVcx8qwgmA8/ofblgob/public/values',
				jsonp: 'callback', data: { alt: 'json-in-script' }, dataType: 'jsonp',
				success: function(response) {
					var WMEPHuserList = response.feed.entry[0].gsx$phuserlist.$t;
					WMEPHuserList = WMEPHuserList.split("|");
					var betaix = WMEPHuserList.indexOf('BETAUSERS');
					WMEPHdevList = [];
					WMEPHbetaList = [];
					for (var ulix=1; ulix<betaix; ulix++) {
						WMEPHdevList.push(WMEPHuserList[ulix].toLowerCase());
					}
					for (ulix=betaix+1; ulix<WMEPHuserList.length; ulix++) {
						WMEPHbetaList.push(WMEPHuserList[ulix].toLowerCase());
					}
				}
			});
		}, 100);
	}, betaDataDelay);
	
	function placeHarmonizer_bootstrap() {
		if ( "undefined" !== typeof W.loginManager && "undefined" !== typeof W.map) {
			setTimeout(dataReady,200);  //  Run the code to check for data return from the Sheets
			// Create duplicatePlaceName layer
			var rlayers = W.map.getLayersBy("uniqueName","__DuplicatePlaceNames");
			if(rlayers.length === 0) {
				var lname = "WMEPH Duplicate Names";
				var style = new OpenLayers.Style({ label : "${labelText}", labelOutlineColor: '#333', labelOutlineWidth: 3, labelAlign: '${labelAlign}', 
					fontColor: "${fontColor}", fontOpacity: 1.0, fontSize: "20px", labelYOffset: -30, labelXOffset: 0, fontWeight: "bold",
					fill: false, strokeColor: "${strokeColor}", strokeWidth: 10, pointRadius: "${pointRadius}" });
				nameLayer = new OpenLayers.Layer.Vector(lname, { displayInLayerSwitcher: false, uniqueName: "__DuplicatePlaceNames", styleMap: new OpenLayers.StyleMap(style) });
				nameLayer.setVisibility(false);
				W.map.addLayer(nameLayer);
				WMEPH_NameLayer = nameLayer;
			} else {
				WMEPH_NameLayer = rlayers[0];
			}
		} else {
			phlog("Waiting for WME map and login...");
			setTimeout(function () { placeHarmonizer_bootstrap(); }, 50);
		}
	}
	
	function dataReady() {
		// If the data has returned, then start the script, otherwise wait a bit longer
		if ("undefined" !== typeof CAN_PNH_DATA && "undefined" !== typeof USA_PNH_DATA && "undefined" !== typeof USA_CH_DATA && 
			"undefined" !== typeof WMEPHdevList && "undefined" !== typeof WMEPHbetaList && "undefined" !== typeof hospitalPartMatch ) {	
			setTimeout(function(){ // Build the name search lists
				USA_PNH_NAMES = makeNameCheckList(USA_PNH_DATA);
				USA_CH_NAMES = makeCatCheckList(USA_CH_DATA);
				CAN_PNH_NAMES = makeNameCheckList(CAN_PNH_DATA);
				// CAN using USA_CH_NAMES at the moment
			}, 10);
			setTimeout(loginReady, 20);  //  start the main code
		} else {
			if (dataReadyCounter % 20 === 0) {
				var waitMessage = 'Waiting for ';
				if ("undefined" === typeof CAN_PNH_DATA) {
					waitMessage = waitMessage + "CAN PNH Data; ";
				} 
				if ("undefined" === typeof USA_PNH_DATA) {
					waitMessage = waitMessage + "USA PNH Data; ";
				}
				if ("undefined" === typeof hospitalPartMatch) {
					waitMessage = waitMessage + "Cat-Name Data; ";
				}
				if ("undefined" === typeof WMEPHdevList) {
					waitMessage = waitMessage + "User List Data;";
				}
				phlog(waitMessage);
			}
			if (dataReadyCounter<200) {
				dataReadyCounter++;
				setTimeout(function () { dataReady(); }, 100);
			} else {
				phlog("Data load took too long, reload WME...");
			}
		}
	}
	
	function loginReady() {
		dataReadyCounter = 0;
		if ( W.loginManager.user !== null) {
			setTimeout(runPH, 10);  //  start the main code
		} else {
			if (dataReadyCounter<50) {
				dataReadyCounter++;
				phlog("Waiting for WME login...");
				setTimeout(function () { dataReady(); }, 200);
			} else {
				phlog("Login failed...?  Reload WME.");
			}
			
		}
	}
	
	function runPH() {
		// Script update info
		var WMEPHWhatsNewList = [  // New in this version
			'1.1.31: NV phone format fix',
			'1.1.31: Hours message fix',
			'1.1.31: Highlighter fix',
			'1.1.30: Cardyin fixes',
			'1.1.29: Missing HN can be entered in the banner',
			'1.1.29: RPPs with street address but no city are blue now',
			'1.1.29: Hours, HL, and WL tweaks, fixes',
			'1.1.28: Bug fix',
			'1.1.27: Autoremove dashes for HNs in Queens, NY',
			'1.1.27: Autosplits Sun,Mon hours because of WME display bug',
			'1.1.26: Bug fix',
			'1.1.25: Fields changed by the script are highlighted in green',
			'1.1.25: Option to auto-run the script when a place is selected (R3+)',
		];
		var WMEPHWhatsNewMetaList = [  // New in this major version
			'1.1: Built-in place highlighter shows which places on the map need work',
		];  
		var newSep = '\n - ', listSep = '<li>';  // joiners for script and html messages
		var WMEPHWhatsNew = WMEPHWhatsNewList.join(newSep);
		var WMEPHWhatsNewMeta = WMEPHWhatsNewMetaList.join(newSep);
		var WMEPHWhatsNewHList = WMEPHWhatsNewList.join(listSep);
		var WMEPHWhatsNewMetaHList = WMEPHWhatsNewMetaList.join(listSep);
		WMEPHWhatsNew = 'WMEPH v. ' + WMEPHversion + '\nUpdates:' + newSep + WMEPHWhatsNew;
		WMEPHWhatsNewMeta = 'WMEPH v. ' + WMEPHversionMeta + '\nMajor features:' + newSep + WMEPHWhatsNewMeta;
		if ( localStorage.getItem('WMEPH-featuresExamined'+devVersStr) === null ) {
			localStorage.setItem('WMEPH-featuresExamined'+devVersStr, '0');  // Storage for whether the User has pressed the button to look at updates
		}
		var thisUser = W.loginManager.user;
		var UpdateObject = require("Waze/Action/UpdateObject");
		
		// Whitelist initialization
		compressedWLLS = false;
		if ( validateWLS( LZString.decompressFromUTF16(localStorage.getItem(WLlocalStoreNameCompressed)) ) === false ) {  // If no compressed WL string exists
			if ( validateWLS(localStorage.getItem(WLlocalStoreName)) === false ) {  // If no regular WL exists
				venueWhitelist = { '1.1.1': { Placeholder: {  } } }; // Populate with a dummy place
				saveWL_LS(compressedWLLS);
				compressedWLLS = true;
				saveWL_LS(compressedWLLS);
			} else {  // if regular WL string exists, then transfer to compressed version
				localStorage.setItem('WMEPH-OneTimeWLBU', localStorage.getItem(WLlocalStoreName));
				loadWL_LS(compressedWLLS);
				compressedWLLS = true;
				saveWL_LS(compressedWLLS);
				alert('Whitelists are being converted to a compressed format.  If you have trouble with your WL, please submit an error report.');
			}
		} else {
			compressedWLLS = true;
			loadWL_LS(compressedWLLS);
		}
		
		if (W.loginManager.user.userName === 'ggrane') {
			searchResultsWindowSpecs = '"resizable=yes, top='+ Math.round(window.screen.height*0.1) +', left='+ Math.round(window.screen.width*0.3) +', width='+ Math.round(window.screen.width*0.86) +', height='+ Math.round(window.screen.height*0.8) +'"';
		}
	
		// Initialize the WL Object
		var currentWL = {};
		
		// If the editor installs for the 1st time, alert with the new elements
		if ( localStorage.getItem('WMEPHversionMeta'+devVersStr) === null ) {
			alert(WMEPHWhatsNewMeta);
			localStorage.setItem('WMEPHversionMeta'+devVersStr, WMEPHversionMeta);
			localStorage.setItem('WMEPHversion'+devVersStr, WMEPHversion);
			localStorage.setItem(GLinkWarning, '0');  // Reset warnings
			localStorage.setItem(SFURLWarning, '0');
			localStorage.setItem('WMEPH-featuresExamined'+devVersStr, '1');  // disable the button
		} else if (localStorage.getItem('WMEPHversionMeta'+devVersStr) !== WMEPHversionMeta) { // If the editor installs a newer MAJOR version, alert with the new elements
			alert(WMEPHWhatsNewMeta);
			localStorage.setItem('WMEPHversionMeta'+devVersStr, WMEPHversionMeta);
			localStorage.setItem('WMEPHversion'+devVersStr, WMEPHversion);
			localStorage.setItem(GLinkWarning, '0');  // Reset warnings
			localStorage.setItem(SFURLWarning, '0');
			localStorage.setItem('WMEPH-featuresExamined'+devVersStr, '1');  // disable the button
		} else if (localStorage.getItem('WMEPHversion'+devVersStr) !== WMEPHversion) {  // If MINOR version....
			if (majorNewFeature) {  //  with major feature update, then alert
				alert(WMEPHWhatsNew);
				localStorage.setItem('WMEPH-featuresExamined'+devVersStr, '1');  // disable the button
			} else {  //  if not major feature update, then keep the button
				localStorage.setItem('WMEPH-featuresExamined'+devVersStr, '0');
			}
			localStorage.setItem('WMEPHversion'+devVersStr, WMEPHversion);  // store last installed version in localstorage
		}
		
		// Settings setup
		var GLinkWarning = 'GLinkWarning';  // Warning message for first time using Google search to not to use the Google info itself.
		if (!localStorage.getItem(GLinkWarning)) {  // store settings so the warning is only given once
			localStorage.setItem(GLinkWarning, '0');
		}
		var SFURLWarning = 'SFURLWarning';  // Warning message for first time using localized storefinder URL.
		if (!localStorage.getItem(SFURLWarning)) {  // store settings so the warning is only given once
			localStorage.setItem(SFURLWarning, '0');
		}
		
		setTimeout(add_PlaceHarmonizationSettingsTab, 50);  // initialize the settings tab
		
		// Event listeners
		W.selectionManager.events.registerPriority("selectionchanged", this, checkSelection);
		if ( W.model.venues.hasOwnProperty('events') ) {
			W.model.venues.events.registerPriority('objectschanged', this, deleteDupeLabel);
		} else if ( W.model.venues.hasOwnProperty('on') ) {
			W.model.venues.on('objectschanged', deleteDupeLabel);
		}
		W.accelerators.events.registerPriority('save', null, destroyDupeLabels);
		var WMEPHurl = 'https://www.waze.com/forum/posting.php?mode=reply&f=819&t=164962';  // WMEPH Forum thread URL
		var USAPNHMasURL = 'https://docs.google.com/spreadsheets/d/1-f-JTWY5UnBx-rFTa4qhyGMYdHBZWNirUTOgn222zMY/edit#gid=0';  // Master USA PNH link
		var placesWikiURL = 'https://wiki.waze.com/wiki/Places';  // WME Places wiki
		var restAreaWikiURL = 'https://wiki.waze.com/wiki/Rest_areas#Adding_a_Place';  // WME Places wiki
		var betaUser, devUser;
		if (WMEPHbetaList.length === 0 || "undefined" === typeof WMEPHbetaList) {
			if (isDevVersion) {
				alert('Beta user list access issue.  Please post in the GHO or PM/DM bmtg about this message.  Script should still work.');
			}
			betaUser = false;
			devUser = false;
		} else {
			devUser = (WMEPHdevList.indexOf(thisUser.userName.toLowerCase()) > -1);
			betaUser = (WMEPHbetaList.indexOf(thisUser.userName.toLowerCase()) > -1);
		}
		if (devUser) {
			betaUser = true; // dev users are beta users
			if (thisUser.userName !== 'bmtg') { debugger; }
		}  
		var usrRank = thisUser.normalizedLevel;  // get editor's level (actual level)
		var userLanguage = 'en';
		
		// lock levels are offset by one
		var lockLevel1 = 0, lockLevel2 = 1, lockLevel3 = 2, lockLevel4 = 3, lockLevel5 = 4;
		var defaultLockLevel = lockLevel2, PNHLockLevel;
		var PMUserList = { // user names and IDs for PM functions
			SER: {approvalActive: true, modID: '16941753', modName: 't0cableguy'},
			WMEPH: {approvalActive: true, modID: '17027620', modName: 'bmtg'}
		};
		var severityButt=0;  // error tracking to determine banner color (action buttons)
		var duplicateName = '';
		var catTransWaze2Lang = I18n.translations[userLanguage].venues.categories;  // pulls the category translations
		var item, itemID, newName, optionalAlias, newURL, tempPNHURL = '', newPhone;
		var newAliases = [], newAliasesTemp = [], newCategories = [];
		var numAttempts = 0;
		
		// Split out state-based data (USA_STATE_DATA)
		var USA_STATE_HEADERS = USA_STATE_DATA[0].split("|");
		var ps_state_ix = USA_STATE_HEADERS.indexOf('ps_state');
		var ps_state2L_ix = USA_STATE_HEADERS.indexOf('ps_state2L');
		var ps_region_ix = USA_STATE_HEADERS.indexOf('ps_region');
		var ps_gFormState_ix = USA_STATE_HEADERS.indexOf('ps_gFormState');
		var ps_defaultLockLevel_ix = USA_STATE_HEADERS.indexOf('ps_defaultLockLevel');
		//var ps_requirePhone_ix = USA_STATE_HEADERS.indexOf('ps_requirePhone');
		//var ps_requireURL_ix = USA_STATE_HEADERS.indexOf('ps_requireURL');
		var ps_areacode_ix = USA_STATE_HEADERS.indexOf('ps_areacode');
		var stateDataTemp, areaCodeList = '800,822,833,844,855,866,877,888';  //  include toll free non-geographic area codes
		var ixBank, ixATM, ixOffices;
						
		// Set up Run WMEPH button once place is selected
		bootstrapRunButton();
		
		/**
		 * Generates highlighting rules and applies them to the map.
		 */
		var layer = W.map.landmarkLayer;
		function initializeHighlights() {
			var ruleGenerator = function(value, symbolizer) {
				return new W.Rule({
					filter: new OL.Filter.Comparison({
						type: '==',
						value: value,
						evaluate: function(venue) {
							return venue && venue.model && venue.model.attributes.wmephSeverity === this.value;
						}
					}),
					symbolizer: symbolizer
				});
			};
			
			var severity0 = ruleGenerator(0, {
				'pointRadius': '5',
				'strokeWidth': '4',
				'strokeColor': '#24ff14'
			});
			
			var severityLock = ruleGenerator('lock', {
				'pointRadius': '5',
				'strokeColor': '#24ff14',
				'strokeLinecap': '1',
				'strokeDashstyle': '7 2',
				'strokeWidth': '5'
			});
			if (thisUser.userName === 'bmtg') {
				severityLock = ruleGenerator('lock', {
					'pointRadius': '8',
					'strokeColor': '#24ff14',
					'strokeLinecap': '1',
					'strokeDashstyle': '7 2',
					'strokeWidth': '11'
				});
			}
			
			var severity1 = ruleGenerator(1, {
				'strokeColor': '#0099ff',
				'strokeWidth': '4',
				'pointRadius': '7'
			});
			
			var severityLock1 = ruleGenerator('lock1', {
				'pointRadius': '5',
				'strokeColor': '#0099ff',
				'strokeLinecap': '1',
				'strokeDashstyle': '7 2',
				'strokeWidth': '5'
			});
			if (thisUser.userName === 'bmtg') {
				severityLock1 = ruleGenerator('lock1', {
					'pointRadius': '8',
					'strokeColor': '#0099ff',
					'strokeLinecap': '1',
					'strokeDashstyle': '7 2',
					'strokeWidth': '11'
				});
			}
			
			var severity2 = ruleGenerator(2, {
				'strokeColor': '#ff0000',
				'strokeWidth': '4',
				'pointRadius': '8'
			});
			
			var severity3 = ruleGenerator(3, {
				'strokeColor': '#ff0000',
				'strokeWidth': '4',
				'pointRadius': '8'
			});
			
			var severity4 = ruleGenerator(4, {
				'fillColor': 'black',
				'fillOpacity': '0.35',
				'strokeColor': '#f42',
				'strokeLinecap': '1',
				'strokeWidth': '13',
				'strokeDashstyle': '4 2'
			});
			
			var severityHigh = ruleGenerator(5, {
				'pointRadius': '12',
				'fillColor': 'black',
				'fillOpacity': '0.4',
				'strokeColor': '#f4a',
				'strokeLinecap': '1',
				'strokeWidth': '10',
				'strokeDashstyle': '4 2'
			});
			
			var severityAdLock = ruleGenerator('adLock', {
				'pointRadius': '12',
				'fillColor': 'yellow',
				'fillOpacity': '0.4',
				'strokeColor': '#000',
				'strokeLinecap': '1',
				'strokeWidth': '10',
				'strokeDashstyle': '4 2'
			});
			
			
			
			Array.prototype.push.apply(layer.styleMap.styles['default'].rules, [severity0, severityLock, severity1, severityLock1, severity2, severity3, severity4, severityHigh, severityAdLock]);
			// to make Google Script linter happy ^^^ Array.prototype.push.apply(layer.styleMap.styles.default.rules, [severity0, severityLock, severity1, severity2, severity3, severity4, severityHigh]);
			/* Can apply to normal view or selection/highlight views as well.
			_.each(layer.styleMap.styles, function(style) {
				style.rules = style.rules.concat([severity0, severityLock, severity1, severity2, severity3, severity4, severityHigh]);
			});
			*/
		}
		
		/**
		 * To highlight a place, set the wmephSeverity attribute to the desired highlight level.
		 */
		function applyHighlightsTest(venues) {
			venues = venues ? _.isArray(venues) ? venues : [venues] : [];
			var currentVenue = false;
			var storedBannButt = bannButt, storedBannServ = bannServ, storedBannButt2 = bannButt2;
			var t0 = performance.now();  // Speed check start
			
			_.each(venues, function (venue) {
				if (venue.CLASS_NAME === 'Waze.Feature.Vector.Landmark' &&
					venue.attributes) {
					// Highlighting logic would go here
					// Severity can be: 0, 'lock', 1, 2, 3, 4, or 'high'. Set to 
					// anything else to use default WME style.
					if ( $("#WMEPH-ColorHighlighting" + devVersStr).prop('checked') ) {
						try {
							venue.attributes.wmephSeverity = harmonizePlaceGo(venue,'highlight');
						} catch (err) {
							phlogdev("getCentroid error occurred.");
						}
					} else {
						venue.attributes.wmephSeverity = 'default';
					}
					
				}
			});
			if (W.selectionManager.selectedItems.length === 1) {
				var venue = W.selectionManager.selectedItems[0].model;
				if (venue.type === "venue") { 
					venue.attributes.wmephSeverity = harmonizePlaceGo(venue,'highlight');
					bannButt = storedBannButt;
					bannServ = storedBannServ;
					bannButt2 = storedBannButt2;
				}
			}
			layer.redraw();
			var t1 = performance.now();  // log search time
			phlogdev("Ran highlighter in " + (t1 - t0) + " milliseconds.");
			
		}
		
		// Setup highlight colors
		initializeHighlights();
		
		// Set up CH loop
		function bootstrapWMEPH_CH() {
			if ( $("#WMEPH-ColorHighlighting" + devVersStr).prop('checked') ) {
				// Turn off place highlighting in WMECH if it's on.
				if ( $("#_cbHighlightPlaces").prop('checked') ) {
					$("#_cbHighlightPlaces").trigger('click');
				}
				// Add listeners
				W.model.venues.on('objectschanged', function (e) {
					applyHighlightsTest(e);
				});

				W.model.venues.on('objectsadded', function (e) {
					applyHighlightsTest(e);
				});

				// Apply the colors
				applyHighlightsTest(W.model.venues.getObjectArray());

				//setTimeout(bootstrapWMEPH_CH,500);  // Refresh the Highlights periodically
			} else {
				// reset the colors to default
				applyHighlightsTest(W.model.venues.getObjectArray());
				//updateWMEPH_CH(false);
			}
		}
		
		// used for phone reformatting
		if (!String.plFormat) {
			String.plFormat = function(format) {
				var args = Array.prototype.slice.call(arguments, 1);
				return format.replace(/{(\d+)}/g, function(name, number) {
					return typeof args[number] !== "undefined" ? args[number] : null;
				});
			};
		}
		
		// Change place.name to title case
		var ignoreWords = "an|and|as|at|by|for|from|hhgregg|in|into|of|on|or|the|to|with".split('|');
		var capWords = "3M|AAA|AMC|AOL|AT&T|ATM|BBC|BLT|BMV|BMW|BP|CBS|CCS|CGI|CISCO|CJ|CNN|CVS|DHL|DKNY|DMV|DSW|EMS|ER|ESPN|FCU|FCUK|FDNY|GNC|H&M|HP|HSBC|IBM|IHOP|IKEA|IRS|JBL|JCPenney|KFC|LLC|MBNA|MCA|MCI|NBC|NYPD|PDQ|PNC|TCBY|TNT|TV|UPS|USA|USPS|VW|XYZ|ZZZ".split('|');
		var specWords = "d'Bronx|iFix".split('|');
		
		function toTitleCase(str) {
			if (!str) {
				return str;
			}
			var allCaps = (str === str.toUpperCase());
			// Cap first letter of each word
			str = str.replace(/([A-Za-z\u00C0-\u017F][^\s-\/]*) */g, function(txt) {
				return ((txt === txt.toUpperCase()) && !allCaps) ? txt : txt.charAt(0).toUpperCase() + txt.substr(1);
			});
			// Cap O'Reilley's, L'Amour, D'Artagnan as long as 5+ letters
			str = str.replace(/[oOlLdD]'[A-Za-z']{3,}/g, function(txt) {
				return ((txt === txt.toUpperCase()) && !allCaps) ? txt : txt.charAt(0).toUpperCase() + txt.charAt(1) + txt.charAt(2).toUpperCase() + txt.substr(3);
			});
			// Cap McFarley's, as long as 5+ letters long
			str = str.replace(/[mM][cC][A-Za-z']{3,}/g, function(txt) {
				return ((txt === txt.toUpperCase()) && !allCaps) ? txt : txt.charAt(0).toUpperCase() + txt.charAt(1).toLowerCase() + txt.charAt(2).toUpperCase() + txt.substr(3);
			});
			// anything with an "&" sign, cap the character after &
			str = str.replace(/&.+/g, function(txt) {
				return ((txt === txt.toUpperCase()) && !allCaps) ? txt : txt.charAt(0) + txt.charAt(1).toUpperCase() + txt.substr(2);
			});
			// lowercase any from the ignoreWords list
			str = str.replace(/[^ ]+/g, function(txt) {
				var txtLC = txt.toLowerCase();
				return (ignoreWords.indexOf(txtLC) > -1) ? txtLC : txt;
			});
			// uppercase any from the capWords List
			str = str.replace(/[^ ]+/g, function(txt) {
				var txtUC = txt.toUpperCase();
				return (capWords.indexOf(txtUC) > -1) ? txtUC : txt;
			});
			// preserve any specific words 
			str = str.replace(/[^ ]+/g, function(txt) {
				//var txtAC = txt.toUpperCase();
				for (var swix=0; swix<specWords.length; swix++) {
					if ( txt.toUpperCase() === specWords[swix].toUpperCase() ) {
						return specWords[swix];
					}
				}
				return txt;
			});
			// Fix 1st, 2nd, 3rd, 4th, etc. to lowercase
			str = str.replace(/\b(\d*1)st\b/gi, '$1st');
			str = str.replace(/\b(\d*2)nd\b/gi, '$1nd');
			str = str.replace(/\b(\d*3)rd\b/gi, '$1rd');
			str = str.replace(/\b(\d+)th\b/gi, '$1th');
			// Cap first letter of entire name
			str = str.charAt(0).toUpperCase() + str.substr(1);
			return str;
		}
	
		// Change place.name to title case
		function toTitleCaseStrong(str) {
			if (!str) {
				return str;
			}
			var allCaps = (str === str.toUpperCase());
			// Cap first letter of each word
			str = str.replace(/([A-Za-z\u00C0-\u017F][^\s-\/]*) */g, function(txt) {
				return ((txt === txt.toUpperCase()) && !allCaps) ? txt : txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
			});
			// Cap O'Reilley's, L'Amour, D'Artagnan as long as 5+ letters
			str = str.replace(/[oOlLdD]'[A-Za-z']{3,}/g, function(txt) {
				return ((txt === txt.toUpperCase()) && !allCaps) ? txt : txt.charAt(0).toUpperCase() + txt.charAt(1) + txt.charAt(2).toUpperCase() + txt.substr(3).toLowerCase();
			});
			// Cap McFarley's, as long as 5+ letters long
			str = str.replace(/[mM][cC][A-Za-z']{3,}/g, function(txt) {
				return ((txt === txt.toUpperCase()) && !allCaps) ? txt : txt.charAt(0).toUpperCase() + txt.charAt(1).toLowerCase() + txt.charAt(2).toUpperCase() + txt.substr(3).toLowerCase();
			});
			// anything sith an "&" sign, cap the word after &
			str = str.replace(/&\w+/g, function(txt) {
				return ((txt === txt.toUpperCase()) && !allCaps) ? txt : txt.charAt(0) + txt.charAt(1).toUpperCase() + txt.substr(2);
			});
			// lowercase any from the ignoreWords list
			str = str.replace(/[^ ]+/g, function(txt) {
				var txtLC = txt.toLowerCase();
				return (ignoreWords.indexOf(txtLC) > -1) ? txtLC : txt;
			});
			// uppercase any from the capWords List
			str = str.replace(/[^ ]+/g, function(txt) {
				var txtLC = txt.toUpperCase();
				return (capWords.indexOf(txtLC) > -1) ? txtLC : txt;
			});
			// Fix 1st, 2nd, 3rd, 4th, etc.
			str = str.replace(/\b(\d*1)st\b/gi, '$1st');
			str = str.replace(/\b(\d*2)nd\b/gi, '$1nd');
			str = str.replace(/\b(\d*3)rd\b/gi, '$1rd');
			str = str.replace(/\b(\d+)th\b/gi, '$1th');
			// Cap first letter of entire name
			str = str.charAt(0).toUpperCase() + str.substr(1);
			return str;
		}
		
		// normalize phone
		function normalizePhone(s, outputFormat, returnType) {
			if ( !s && returnType === 'existing' ) {
				bannButt.phoneMissing.active = true;
				if (currentWL.phoneWL) {
					bannButt.phoneMissing.WLactive = false;
				}
				return s;
			}
			s = s.replace(/(\d{3}.*)extension.*/i, '$1');
			s = s.replace(/(\d{3}.*)ext.*/i, '$1');
			s = s.replace(/(\d{3}.*) xt\.? \d.*/i, '$1');
			s = s.replace(/(\d{3}.*) x\.? \d.*/i, '$1');
			var s1 = s.replace(/\D/g, '');  // remove non-number characters
			var m = s1.match(/^1?([2-9]\d{2})([2-9]\d{2})(\d{4})$/);  // Ignore leading 1, and also don't allow area code or exchange to start with 0 or 1 (***USA/CAN specific)
			if (!m) {  // then try alphanumeric matching
				s1 = s.replace(/[^0-9A-Z]/g, '').replace(/^\D*(\d)/,'$1').replace(/^1?([2-9][0-9]{2}[0-9A-Z]{7})/g,'$1');
				s1 = replaceLetters(s1);
				m = s1.match(/^([2-9]\d{2})([2-9]\d{2})(\d{4})$/);  // Ignore leading 1, and also don't allow area code or exchange to start with 0 or 1 (***USA/CAN specific)
				if (!m) {	
					if ( returnType === 'inputted' ) {
						return 'badPhone';
					} else {
						bannButt.phoneInvalid.active = true;
						return s;
					}
				} else {
					return String.plFormat(outputFormat, m[1], m[2], m[3]);
				}
			} else {
				return String.plFormat(outputFormat, m[1], m[2], m[3]);
			}
		}
		
		// Alphanumeric phone conversion
		function replaceLetters(number) {
			var conversionMap = _({
				2: /A|B|C/,
				3: /D|E|F/,
				4: /G|H|I/,
				5: /J|K|L/,
				6: /M|N|O/,
				7: /P|Q|R|S/,
				8: /T|U|V/,
				9: /W|X|Y|Z/
			});
			number = typeof number === 'string' ? number.toUpperCase() : '';
			return number.replace(/[A-Z]/g, function(match, offset, string) {
				return conversionMap.findKey(function(re) {
					return re.test(match);
				});
			});
		}
		
		// Normalize url
		function normalizeURL(s, lc) {
			if (!s) {  // Notify that url is missing and provide web search to find website and gather data (provided for all editors)
				bannButt.urlMissing.active = true;
				if (currentWL.urlWL) {
					bannButt.urlMissing.WLactive = false;
				}
				bannButt.webSearch.active = true;  // Activate websearch button
				return s;
			}
			s = s.replace(/ \(.*/g, '');  // remove anything with parentheses after it
			s = s.replace(/ /g, '');  // remove any spaces
			var m = s.match(/^http:\/\/(.*)$/i);  // remove http:// 
			if (m) { s = m[1]; } 
			if (lc) {  // lowercase the entire domain
				s = s.replace(/[^\/]+/i, function(txt) { // lowercase the domain
					return (txt === txt.toLowerCase()) ? txt : txt.toLowerCase();
				});
			} else {  // lowercase only the www and com
				s = s.replace(/www\./i, 'www.');
				s = s.replace(/\.com/i, '.com');
			}
			m = s.match(/^(.*)\/pages\/welcome.aspx$/i);  // remove unneeded terms
			if (m) { s = m[1]; }
			m = s.match(/^(.*)\/pages\/default.aspx$/i);  // remove unneeded terms
			if (m) { s = m[1]; }
			m = s.match(/^(.*)\/index.html$/i);  // remove unneeded terms
			if (m) { s = m[1]; }
			m = s.match(/^(.*)\/index.htm$/i);  // remove unneeded terms
			if (m) { s = m[1]; }
			m = s.match(/^(.*)\/index.php$/i);  // remove unneeded terms
			if (m) { s = m[1]; }
			m = s.match(/^(.*)\/$/i);  // remove final slash
			if (m) { s = m[1]; }
			return s;
		}  // END normalizeURL function
	
		// Only run the harmonization if a venue is selected
		function harmonizePlace() {
			// Script is only for R2+ editors
			if (!betaUser && usrRank < 2) {
				alert("Script is currently available for editors of Rank 2 and up.");
				return;
			}
			// Beta version for approved users only
			if (isDevVersion && !betaUser) {
				alert("Please sign up to beta-test this script version.\nSend a PM or Slack-DM to bmtg, or post in the WMEPH forum thread. Thanks.");
				return;	
			}
			// Only run if a single place is selected
			if (W.selectionManager.selectedItems.length === 1) {
				var item = W.selectionManager.selectedItems[0].model;
				if (item.type === "venue") { 
					blurAll();  // focus away from current cursor position
					harmonizePlaceGo(item,'harmonize'); 
				} else {  // Remove duplicate labels
					WMEPH_NameLayer.destroyFeatures();
				}
			} else {  // Remove duplicate labels
				WMEPH_NameLayer.destroyFeatures();
			}
		}
	
		// Main script
		function harmonizePlaceGo(item, useFlag) {
			var hpMode = {
				harmFlag: false,
				hlFlag: false,
				scanFlag: false
			};
			
			if ( useFlag.indexOf('harmonize') > -1 ) {
				hpMode.harmFlag = true;
				phlog('Running script on selected place...');
			}
			if ( useFlag.indexOf('highlight') > -1 ) {
				hpMode.hlFlag = true;
			}
			if ( useFlag.indexOf('scan') > -1 ) {
				hpMode.scanFlag = true;
			}
			var placePL = getItemPL();  //  set up external post div and pull place PL
			// https://www.waze.com/editor/?env=usa&lon=-80.60757&lat=28.17850&layers=1957&zoom=4&segments=86124344&update_requestsFilter=false&problemsFilter=false&mapProblemFilter=0&mapUpdateRequestFilter=0&venueFilter=1
			placePL = placePL.replace(/\&layers=[^\&]+(\&?)/g, '$1');  // remove Permalink Layers
			placePL = placePL.replace(/\&update_requestsFilter=[^\&]+(\&?)/g, '$1');  // remove Permalink Layers
			placePL = placePL.replace(/\&problemsFilter=[^\&]+(\&?)/g, '$1');  // remove Permalink Layers
			placePL = placePL.replace(/\&mapProblemFilter=[^\&]+(\&?)/g, '$1');  // remove Permalink Layers
			placePL = placePL.replace(/\&mapUpdateRequestFilter=[^\&]+(\&?)/g, '$1');  // remove Permalink Layers
			placePL = placePL.replace(/\&venueFilter=[^\&]+(\&?)/g, '$1');  // remove Permalink Layers
			var region, state2L, newPlaceURL, approveRegionURL, servID, useState = true;
			var gFormState = "";
			var PNHOrderNum = '', PNHNameTemp = '', PNHNameTempWeb = '';
			severityButt = 0;
			var customStoreFinder = false;  // switch indicating place-specific custom store finder url
			var customStoreFinderLocal = false;  // switch indicating place-specific custom store finder url with localization option (GPS/addr)
			var customStoreFinderURL = "";  // switch indicating place-specific custom store finder url
			var customStoreFinderLocalURL = "";  // switch indicating place-specific custom store finder url with localization option (GPS/addr)
			var fieldUpdateObject = {name: false, aliases: false, categories: false, brand: false, description: false, lockRank: false, address: false, url: false, phone: false, openingHours: false, 
				services: { VALLET_SERVICE: false, DRIVETHROUGH: false, WI_FI: false, RESTROOMS: false, CREDIT_CARDS: false, RESERVATIONS: false,
					OUTSIDE_SEATING: false, AIR_CONDITIONING: false, PARKING_FOR_CUSTOMERS: false, DELIVERIES: false, TAKE_AWAY: false, WHEELCHAIR_ACCESSIBLE: false }
			};
			// Whitelist: reset flags
			currentWL = {
				dupeWL: [], 
				restAreaName: false,
				restAreaSpec: false,
				unmappedRegion: false,
				gasMismatch: false,
				hotelMkPrim: false,
				changeHMC2Office: false,
				changeHMC2PetVet: false,
				changeSchool2Offices: false,
				pointNotArea: false,
				areaNotPoint: false,
				HNWL: false,
				hnNonStandard: false,
				HNRange: false,
				parentCategory: false,
				suspectDesc: false,
				resiTypeName: false,
				longURL: false,
				gasNoBrand: false,
				subFuel: false,
				hotelLocWL: false,
				localizedName: false,
				urlWL: false,
				phoneWL: false,
				aCodeWL: false,
				noHours: false
			};
				
			// **** Set up banner action buttons.  Structure:
			// active: false until activated in the script 
			// severity: determines the color of the banners and whether locking occurs
			// message: The text before the button option
			// value: button text
			// title: tooltip text
			// action: The action that happens if the button is pressed
			// WL terms are for whitelisting
			bannButt = {  
				hnDashRemoved: { 
					active: false, severity: 0, message: "Dash removed from house number. Verify"
				},
				
				fullAddressInference: {  // no WL
					active: false, severity: 3, message: 'Missing address was inferred from nearby segments. Verify the address and run script again.' 
				},
				
				nameMissing: {  // no WL
					active: false, severity: 3, message: 'Name is missing.'
				},
				
				hoursOverlap: {  // no WL
					active: false, severity: 3, message: 'Overlapping hours of operation. Place might not save.'
				},
				
				unmappedRegion: {
					active: false, severity: 3, message: 'This category is usually not mapped in this region.',
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist unmapped category',
					WLaction: function() {
						wlKeyName = 'unmappedRegion';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				restAreaName: {
					active: false, severity: 3, message: 'Rest area name is out of spec. Use the Rest Area wiki button below to view formats.',
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist rest area name',
					WLaction: function() {
						wlKeyName = 'restAreaName';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				restAreaGas: { // no WL
					active: false, severity: 3, message: 'Gas stations at Rest Areas should be separate area places.'
				},
				
				restAreaSpec: {  // if the gas brand and name don't match
					active: false, severity: 3, message: "Is this a rest area?", value: "Yes", title: 'Update with proper categories and services.',
					action: function() {
						// update categories according to spec
						newCategories = insertAtIX(newCategories,"TRANSPORTATION",0);  // Insert/move Gas category in the first position
						newCategories = insertAtIX(newCategories,"SCENIC_LOOKOUT_VIEWPOINT",1);  // Insert/move Gas category in the first position
						W.model.actionManager.add(new UpdateObject(item, { categories: newCategories }));
						fieldUpdateObject.categories='#dfd';
						// make it 24/7
						W.model.actionManager.add(new UpdateObject(item, { openingHours: [{days: [1,2,3,4,5,6,0], fromHour: "00:00", toHour: "00:00"}] }));
						fieldUpdateObject.openingHours='#dfd';
						//higlightChangedFields(fieldUpdateObject,hpMode);
						
						bannServ.add247.checked = true;
						bannServ.addParking.actionOn();  // add parking service
						bannServ.addWheelchair.actionOn();  // add parking service
						bannButt.restAreaSpec.active = false;  // reset the display flag
						
						harmonizePlaceGo(item,'harmonize');
					},
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist place',
					WLaction: function() {
						wlKeyName = 'restAreaSpec';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				gasMismatch: {  // if the gas brand and name don't match
					active: false, severity: 3, message: "Gas name and brand don't match.  Move brand to name?", value: "Yes", title: 'Change the primary name to the brand and make the current name the alt-name.',
					action: function() {
						newAliases = insertAtIX(newAliases, newName, 0);
						for (var naix=0; naix<newAliases.length; naix++) {
							newAliases[naix] = toTitleCase(newAliases[naix]);
						}
						newName = item.attributes.brand;
						newAliases = removeSFAliases(newName, newAliases);
						W.model.actionManager.add(new UpdateObject(item, { name: newName, aliases: newAliases }));
						fieldUpdateObject.name='#dfd';
						fieldUpdateObject.aliases='#dfd';
						higlightChangedFields(fieldUpdateObject,hpMode);
						bannButt.gasMismatch.active = false;  // reset the display flag
					},
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist gas brand mismatch',
					WLaction: function() {
						wlKeyName = 'gasMismatch';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				gasUnbranded: {  // no WL
					active: false, severity: 3, message: '"Unbranded" should not be used for the station brand. Change to correct brand or use the blank entry at the top of the brand list.'
				},
				
				gasMkPrim: {  // no WL
					active: false, severity: 3,  message: "Gas Station is not the primary category", value: "Fix", title: 'Make the Gas Station category the primary category.',
					action: function() {
						newCategories = insertAtIX(newCategories,"GAS_STATION",0);  // Insert/move Gas category in the first position
						W.model.actionManager.add(new UpdateObject(item, { categories: newCategories }));
						fieldUpdateObject.categories='#dfd';
						bannButt.gasMkPrim.active = false;  // reset the display flag
						harmonizePlaceGo(item,'harmonize');
					}
				},
				 
				hotelMkPrim: {
					active: false, severity: 3, message: "Hotel category is not first", value: "Fix", title: 'Make the Hotel category the primary category.',
					action: function() {
						newCategories = insertAtIX(newCategories,"HOTEL",0);  // Insert/move Hotel category in the first position
						W.model.actionManager.add(new UpdateObject(item, { categories: newCategories }));
						fieldUpdateObject.categories='#dfd';
						bannButt.hotelMkPrim.active = false;  // reset the display flag
						harmonizePlaceGo(item,'harmonize');
					},
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist hotel as secondary category',
					WLaction: function() {
						wlKeyName = 'hotelMkPrim';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				changeHMC2Office: {
					active: false, severity: 3, message: "This doesn't look like a hospital or urgent care location.", value: "Change to Offices", title: 'Change to Office Category',
					action: function() {
						newCategories[newCategories.indexOf('HOSPITAL_MEDICAL_CARE')] = "OFFICES";
						//phlogdev(newCategories);
						W.model.actionManager.add(new UpdateObject(item, { categories: newCategories }));
						fieldUpdateObject.categories='#dfd';
						bannButt.changeHMC2Office.active = false;  // reset the display flag
						harmonizePlaceGo(item,'harmonize');  // Rerun the script to update fields and lock
					},
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist Hospital category',  
					WLaction: function() {
						wlKeyName = 'changeHMC2Office';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				changeHMC2PetVet: {
					active: false, severity: 3, message: "This looks like it should be a Pet/Veterinarian category. Change?", value: "Yes", title: 'Change to Pet/Veterinarian Category',
					action: function() {
						newCategories[newCategories.indexOf('HOSPITAL_MEDICAL_CARE')] = "PET_STORE_VETERINARIAN_SERVICES";
						W.model.actionManager.add(new UpdateObject(item, { categories: newCategories }));
						fieldUpdateObject.categories='#dfd';
						bannButt.changeHMC2PetVet.active = false;  // reset the display flag
						harmonizePlaceGo(item,'harmonize');  // Rerun the script to update fields and lock
					},
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist PetVet category',  
					WLaction: function() {
						wlKeyName = 'changeHMC2PetVet';
						whitelistAction(itemID, wlKeyName);
					}
				}, 
				
				changeSchool2Offices: {
					active: false, severity: 3, message: "This doesn't look like it should be School category.", value: "Change to Office", title: 'Change to Offices Category',
					action: function() {
						newCategories[newCategories.indexOf('SCHOOL')] = "OFFICES";
						W.model.actionManager.add(new UpdateObject(item, { categories: newCategories }));
						fieldUpdateObject.categories='#dfd';
						bannButt.changeSchool2Offices.active = false;  // reset the display flag
						harmonizePlaceGo(item,'harmonize');  // Rerun the script to update fields and lock
					},
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist School category',  
					WLaction: function() {
						wlKeyName = 'changeSchool2Offices';
						whitelistAction(itemID, wlKeyName);
					}
				}, 
				
				pointNotArea: {  // Area 2 Point button
					active: false, severity: 3, message: "This category should be a point place.", value: "Change to point", title: 'Change to point place',
					action: function() {
						// If a stop point is set, use it for the point, else use Centroid
						var newGeometry;
						if (item.attributes.entryExitPoints.length > 0) {
							newGeometry = item.attributes.entryExitPoints[0].point;
						} else {
							newGeometry = item.geometry.getCentroid();
						}
						updateFeatureGeometry (item, newGeometry);
						bannButt.pointNotArea.active = false;
					},
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist point (not area)',  
					WLaction: function() {
						wlKeyName = 'pointNotArea';
						whitelistAction(itemID, wlKeyName);
					}
				}, 
				
				areaNotPoint: {  // Point 2 Area button
					active: false, severity: 3, message: "This category should be an area place.", value: "Change to area", title: 'Change to Area',
					action: function() {
						// If a stop point is set, use it for the point, else use Centroid
						updateFeatureGeometry (item, item.getPolygonGeometry());
						bannButt.areaNotPoint.active = false;
					},
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist area (not point)',  
					WLaction: function() {
						wlKeyName = 'areaNotPoint';
						whitelistAction(itemID, wlKeyName);
					}
				}, 
				
				hnMissing: { 
					active: false, severity: 3, message: 'No HN: <input type="text" id="WMEPH-HNAdd'+devVersStr+'" autocomplete="off" style="width:100px;padding-left:3px;color:#000;background-color:#FDD">',
					value: "Add", title: 'Add HN to place',
					action: function() {
						var newHN = $('#WMEPH-HNAdd'+devVersStr).val();
						newHN = newHN.replace(/ +/g, '');
						phlogdev(newHN);
						var hnTemp = newHN.replace(/[^\d]/g, '');
						var hnTempDash = newHN.replace(/[^\d-]/g, '');
						if (hnTemp > 0 && hnTemp < 1000000) {
							W.model.actionManager.add(new UpdateObject(item, { houseNumber: hnTempDash }));
							fieldUpdateObject.address='#dfd';
							bannButt.hnMissing.active = false;
						} else {
							$('#WMEPH-HNAdd'+devVersStr)[0].style="background-color: pink";
						}
						
					}, 
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist empty HN',  
					WLaction: function() {
						wlKeyName = 'HNWL';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				hnNonStandard: {
					active: false, severity: 3, message: 'House number is non-standard.', 
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist non-standard HN',  
					WLaction: function() {
						wlKeyName = 'hnNonStandard';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				HNRange: { 
					active: false, severity: 2, message: 'House number seems out of range for the street name. Verify.', value: '',
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist HN range',  
					WLaction: function() {
						wlKeyName = 'HNRange';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				streetMissing: {  // no WL
					active: false, severity: 3, message: 'Street missing.'
				},
				
				cityMissing: {  // no WL
					active: false, severity: 3, message: 'City missing.'
				},
				
				bankType1: {   // no WL
					active: false, severity: 3, message: 'Clarify the type of bank: the name has ATM but the primary category is Offices' 
				},
				
				bankBranch: {  // no WL
					active: false, severity: 1, message: "Is this a bank branch office? ", value: "Yes", title: "Is this a bank branch?",
					action: function() {
						newCategories = ["BANK_FINANCIAL","ATM"];  // Change to bank and atm cats
						newName = newName.replace(/[\- (]*ATM[\- )]*/g, ' ').replace(/^ /g,'').replace(/ $/g,'');	 // strip ATM from name if present
						W.model.actionManager.add(new UpdateObject(item, { name: newName, categories: newCategories }));
						fieldUpdateObject.name='#dfd';
						fieldUpdateObject.categories='#dfd';
						higlightChangedFields(fieldUpdateObject,hpMode);
						bannButt.bankCorporate.active = false;   // reset the bank Branch display flag
						bannButt.bankBranch.active = false;   // reset the bank Branch display flag
						bannButt.standaloneATM.active = false;   // reset the standalone ATM display flag
						bannButt.bankType1.active = false;  // remove bank type warning
					}
				},
				
				standaloneATM: { // no WL
					active: false, severity: 2, message: "Or is this a standalone ATM? ", value: "Yes", title: "Is this a standalone ATM with no bank branch?",
					action: function() {
						if (newName.indexOf("ATM") === -1) {
							newName = newName + ' ATM';	
						}
						newCategories = ["ATM"];  // Change to ATM only
						W.model.actionManager.add(new UpdateObject(item, { name: newName, categories: newCategories }));
						fieldUpdateObject.name='#dfd';
						fieldUpdateObject.categories='#dfd';
						higlightChangedFields(fieldUpdateObject,hpMode);
						bannButt.bankCorporate.active = false;   // reset the bank Branch display flag
						bannButt.bankBranch.active = false;   // reset the bank Branch display flag
						bannButt.standaloneATM.active = false;   // reset the standalone ATM display flag
						bannButt.bankType1.active = false;  // remove bank type warning
					}
				},
				
				bankCorporate: {  // no WL
					active: false, severity: 1, message: "Or is this the bank's corporate offices?", value: "Yes", title: "Is this the bank's corporate offices?",
					action: function() {
						newCategories = ["OFFICES"];  // Change to offices category
						newName = newName.replace(/[\- (]*atm[\- )]*/ig, ' ').replace(/^ /g,'').replace(/ $/g,'').replace(/ {2,}/g,' ');	 // strip ATM from name if present
						W.model.actionManager.add(new UpdateObject(item, { name: newName + ' - Corporate Offices', categories: newCategories }));
						fieldUpdateObject.name='#dfd';
						fieldUpdateObject.categories='#dfd';
						higlightChangedFields(fieldUpdateObject,hpMode);
						bannButt.bankCorporate.active = false;   // reset the bank Branch display flag
						bannButt.bankBranch.active = false;   // reset the bank Branch display flag
						bannButt.standaloneATM.active = false;   // reset the standalone ATM display flag
						bannButt.bankType1.active = false;  // remove bank type warning
					}
				},
				
				catPostOffice: {  // no WL
					active: false, severity: 2, message: 'If this is not a USPS post office, change the category, as "Post Office" is only used for USPS locations.'
				},
				
				ignEdited: {  // no WL
					active: false, severity: 2, message: 'Last edited by an IGN editor'
				},
				
				wazeBot: {  // no WL
					active: false, severity: 2, message: 'Last edited by waze-bot-maint'
				},
				
				parentCategory: {
					active: false, severity: 2, message: 'This parent category is usually not mapped in this region.',
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist parent Category',  
					WLaction: function() {
						wlKeyName = 'parentCategory';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				checkDescription: {  // no WL
					active: false, severity: 2, message: 'Description field already contained info; PNH description was added in front of existing. Check for inconsistency or duplicate info.'
				},
				
				overlapping: {  // no WL
					active: false, severity: 2, message: 'Place points are stacked up.'
				},
				
				suspectDesc: {  // no WL
					active: false, severity: 2, message: 'Description field might contain copyrighted info.',
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist description',  
					WLaction: function() {
						wlKeyName = 'suspectDesc';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				resiTypeName: {
					active: false, severity: 2, message: 'The place name suggests a residential place or personalized place of work.  Please verify.',
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist Residential-type name',  
					WLaction: function() {
						wlKeyName = 'resiTypeName';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				mismatch247: {  // no WL
					active: false, severity: 2, message: 'Hours of operation listed as open 24hrs but not for all 7 days.'
				},
				
				phoneInvalid: {  // no WL
					active: false, severity: 2, message: 'Phone invalid.'
				},
				
				areaNotPointMid: {
					active: false, severity: 2, message: 'This category is usually an area place, but can be a point in some cases. Verify if point is appropriate.',
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist area (not point)',  
					WLaction: function() {
						wlKeyName = 'areaNotPoint';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				pointNotAreaMid: {
					active: false, severity: 2, message: 'This category is usually a point place, but can be a area in some cases. Verify if area is appropriate.',
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist point (not area)',  
					WLaction: function() {
						wlKeyName = 'pointNotArea';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				longURL: {
					active: false, severity: 1, message: 'Existing URL doesn\'t match the suggested PNH URL. Use the Place Website button below to verify. If existing URL is invalid:', value: "Use PNH URL", title: "Change URL to the PNH standard",
					action: function() {
						if (tempPNHURL !== '') {
							W.model.actionManager.add(new UpdateObject(item, { url: tempPNHURL }));
							fieldUpdateObject.url='#dfd';
							higlightChangedFields(fieldUpdateObject,hpMode);
							bannButt.longURL.active = false;
							updateURL = true;
						} else {
							if (confirm('WMEPH: URL Matching Error!\nClick OK to report this error') ) {  // if the category doesn't translate, then pop an alert that will make a forum post to the thread
								forumMsgInputs = {
									subject: 'Re: WMEPH URL comparison Error report',
									message: 'Error report: URL comparison failed for "' + item.attributes.name + '"\nPermalink: ' + placePL,
								};
								WMEPH_errorReport(forumMsgInputs);
							}
						}
					},
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist existing URL',  
					WLaction: function() {
						wlKeyName = 'longURL';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				gasNoBrand: {
					active: false, severity: 1, message: 'Verify that gas station has no brand.',
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist no gas brand',  
					WLaction: function() {
						wlKeyName = 'gasNoBrand';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				subFuel: {
					active: false, severity: 1, message: 'Make sure this place is for the gas station itself and not the main store building.  Otherwise undo and check the categories.',
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist no gas brand',  
					WLaction: function() {
						wlKeyName = 'subFuel';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				areaNotPointLow: {
					active: false, severity: 1, message: 'This category is usually an area place, but can be a point in some cases. Verify if point is appropriate.',
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist area (not point)',  
					WLaction: function() {
						wlKeyName = 'areaNotPoint';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				pointNotAreaLow: {
					active: false, severity: 1, message: 'This category is usually a point place, but can be a area in some cases. Verify if area is appropriate.',
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist point (not area)',  
					WLaction: function() {
						wlKeyName = 'pointNotArea';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				formatUSPS: {  // ### needs WL or not?
					active: false, severity: 1, message: 'Localize the post office according to this region\'s standards for USPS locations (e.g., "USPS - Tampa")'
				},
				
				catHotel: { 
					active: false, severity: 1, message: 'Check hotel website for any name localization (e.g. Hilton - Tampa Airport)',
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist hotel localization',
					WLaction: function() {
						wlKeyName = 'hotelLocWL';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				localizedName: { 
					active: false, severity: 1, message: 'Place needs localization information',
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist localization',
					WLaction: function() {
						wlKeyName = 'localizedName';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				specCaseMessage: {  // no WL
					active: false, severity: 1, message: 'WMEPH: placeholder (please report this error if you see this message)'
				},
				
				pnhCatMess: {  // no WL
					active: false, severity: 0, message: 'WMEPH: placeholder (please report this error if you see this message)'
				},
				
				specCaseMessageLow: {  // no WL
					active: false, severity: 0, message: 'WMEPH: placeholder (please report this error if you see this message)'
				},
				
				urlMissing: { 
					active: false, severity: 1, message: "URL missing", 
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist empty URL',
					WLaction: function() {
						wlKeyName = 'urlWL';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				phoneMissing: { 
					active: false, severity: 1, message: 'No phone: <input type="text" id="WMEPH-PhoneAdd'+devVersStr+'" autocomplete="off" style="width:120px;padding-left:3px;color:#000;background-color:#DDF">',
					value: "Add", title: 'Add phone to place',
					action: function() {
						var newPhoneVal = $('#WMEPH-PhoneAdd'+devVersStr).val();
						var newPhone = normalizePhone(newPhoneVal, outputFormat, 'inputted');
						if (newPhone === 'badPhone') {
							// bad input
							$('#WMEPH-PhoneAdd'+devVersStr)[0].style="background-color: pink";
						} else {
							phlogdev(newPhone);
							if (countryCode === "USA" || countryCode === "CAN") {
								if (newPhone !== null && newPhone.match(/[2-9]\d{2}/) !== null) {
									var areaCode = newPhone.match(/[2-9]\d{2}/)[0];
									if ( areaCodeList.indexOf(areaCode) === -1 ) {
										bannButt.badAreaCode.active = true;
										if (currentWL.aCodeWL) {
											bannButt.badAreaCode.WLactive = false;
										}
									}
								}
							}
							W.model.actionManager.add(new UpdateObject(item, { phone: newPhone }));
							fieldUpdateObject.phone='#dfd';
							bannButt.phoneMissing.active = false;
						} 
						
					}, 
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist empty phone',
					WLaction: function() {
						wlKeyName = 'phoneWL';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				badAreaCode: { 
					active: false, severity: 1, message: "Area Code mismatch ", 
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist the area code',
					WLaction: function() {
						wlKeyName = 'aCodeWL';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				noHours: {  
					active: false, severity: 1, message: 'No hours: <input type="text" value="Paste Hours Here" id="WMEPH-HoursPaste'+devVersStr+'" autocomplete="off" style="width:170px;padding-left:3px;color:#AAA">',
					value: "Add hours", title: 'Add pasted hours to existing',
					action: function() {
						var pasteHours = $('#WMEPH-HoursPaste'+devVersStr).val();
						phlogdev(pasteHours);
						$('.nav-tabs a[href="#landmark-edit-more-info"]').tab('show');
						pasteHours = pasteHours + ',' + getOpeningHours(item).join(',');
						var hoursObjectArray = parseHours(pasteHours);
						if (hoursObjectArray !== false) {
							phlogdev(hoursObjectArray);
							W.model.actionManager.add(new UpdateObject(item, { openingHours: hoursObjectArray }));
							fieldUpdateObject.openingHours='#dfd';
							higlightChangedFields(fieldUpdateObject,hpMode);
							bannButt.noHours.value = 'Add hours';
							bannButt.noHours.severity = 0;
							bannButt.noHours.WLactive = false;
							bannButt.noHours.message = 'Hours: <input type="text" value="Paste Hours Here" id="WMEPH-HoursPaste'+devVersStr+'" style="width:170px;padding-left:3px;color:#AAA">';
							
						} else {
							phlog('Can\'t parse those hours');
							bannButt.noHours.severity = 1;
							bannButt.noHours.WLactive = true;
							bannButt.noHours.message = 'Hours: <input type="text" value="Can\'t parse, try again" id="WMEPH-HoursPaste'+devVersStr+'" style="width:170px;padding-left:3px;color:#AAA">';
						}
					}, 
					value2: "Replace all hours", title2: 'Replace existing hours with pasted hours',
					action2: function() {
						var pasteHours = $('#WMEPH-HoursPaste'+devVersStr).val();
						phlogdev(pasteHours);
						$('.nav-tabs a[href="#landmark-edit-more-info"]').tab('show');
						var hoursObjectArray = parseHours(pasteHours);
						if (hoursObjectArray !== false) {
							phlogdev(hoursObjectArray);
							item.attributes.openingHours.push.apply(item.attributes.openingHours, hoursObjectArray);
							W.model.actionManager.add(new UpdateObject(item, { openingHours: hoursObjectArray }));
							fieldUpdateObject.openingHours='#dfd';
							higlightChangedFields(fieldUpdateObject,hpMode);
							bannButt.noHours.value2 = 'Replace hours';
							bannButt.noHours.severity = 0;
							bannButt.noHours.WLactive = false;
							bannButt.noHours.message = 'Hours: <input type="text" value="Paste Hours Here" id="WMEPH-HoursPaste'+devVersStr+'" style="width:170px;padding-left:3px;color:#AAA">';
						} else {
							phlog('Can\'t parse those hours');
							bannButt.noHours.severity = 1;
							bannButt.noHours.WLactive = true;
							bannButt.noHours.message = 'Hours: <input type="text" value="Can\'t parse, try again" id="WMEPH-HoursPaste'+devVersStr+'" style="width:170px;padding-left:3px;color:#AAA">';
						}
						
					}, 
					WLactive: true, WLmessage: '', WLtitle: 'Whitelist no Hours',
					WLaction: function() {
						wlKeyName = 'noHours';
						whitelistAction(itemID, wlKeyName);
					}
				},
				
				resiTypeNameSoft: {  // no WL
					active: false, severity: 0, message: 'The place name suggests a residential place or personalized place of work.  Please verify.'
				},
				
				localURL: {  // no WL
					active: false, severity: 0, message: 'Some locations for this business have localized URLs, while others use the primary corporate site. Check if a local URL applies to this location.'
				},
				
				babiesRUs: {  // no WL
					active: false, severity: 0, message: 'If there is a Toys R Us at this location, make it the primary name and Babies R Us the alt name and rerun the script.'
				},
				
				lockRPP: {    // no WL
					active: false, severity: 0, message: 'Lock this residential point?', value: "Lock", title: 'Lock the residential point',
					action: function() {
						var RPPlevelToLock = $("#RPPLockLevel :selected").val() || defaultLockLevel + 1;
						phlogdev('RPPlevelToLock: '+ RPPlevelToLock);
						
						RPPlevelToLock = RPPlevelToLock -1 ;
						W.model.actionManager.add(new UpdateObject(item, { lockRank: RPPlevelToLock }));
						// no field highlight here
						bannButt.lockRPP.message = 'Current lock: '+ (parseInt(item.attributes.lockRank)+1) +'. '+RPPLockString+' ?';
					}
				},
				
				addAlias: {    // no WL
					active: false, severity: 0, message: "Is " + optionalAlias + " at this location?", value: "Yes", title: 'Add ' + optionalAlias,
					action: function() {
						newAliases = insertAtIX(newAliases,optionalAlias,0);
						if (specCases.indexOf('altName2Desc') > -1 &&  item.attributes.description.toUpperCase().indexOf(optionalAlias.toUpperCase()) === -1 ) {
							newDescripion = optionalAlias + '\n' + newDescripion;
							W.model.actionManager.add(new UpdateObject(item, { description: newDescripion }));
							fieldUpdateObject.description='#dfd';
							higlightChangedFields(fieldUpdateObject,hpMode);
						}
						newAliases = removeSFAliases(newName, newAliases);
						W.model.actionManager.add(new UpdateObject(item, { aliases: newAliases }));
						fieldUpdateObject.aliases='#dfd';
						higlightChangedFields(fieldUpdateObject,hpMode);
						bannButt.addAlias.active = false;  // reset the display flag
					}
				},
				
				addCat2: {   // no WL
					active: false, severity: 0, message: "Is there a " + newCategories[0] + " at this location?", value: "Yes", title: 'Add ' + newCategories[0],
					action: function() {
						newCategories.push.apply(newCategories,altCategories);
						W.model.actionManager.add(new UpdateObject(item, { categories: newCategories }));
						fieldUpdateObject.categories='#dfd';
						higlightChangedFields(fieldUpdateObject,hpMode);
						bannButt.addCat2.active = false;  // reset the display flag
					}
				},
				
				addPharm: {   // no WL
					active: false, severity: 0, message: "Is there a Pharmacy at this location?", value: "Yes", title: 'Add Pharmacy category',
					action: function() {
						newCategories = insertAtIX(newCategories, 'PHARMACY', 1);
						W.model.actionManager.add(new UpdateObject(item, { categories: newCategories }));
						fieldUpdateObject.categories='#dfd';
						higlightChangedFields(fieldUpdateObject,hpMode);
						bannButt.addPharm.active = false;  // reset the display flag
					}
				},
				
				addSuper: {   // no WL
					active: false, severity: 0, message: "Does this location have a supermarket?", value: "Yes", title: 'Add Supermarket category',
					action: function() {
						newCategories = insertAtIX(newCategories, 'SUPERMARKET_GROCERY', 1);
						W.model.actionManager.add(new UpdateObject(item, { categories: newCategories }));
						fieldUpdateObject.categories='#dfd';
						higlightChangedFields(fieldUpdateObject,hpMode);
						bannButt.addSuper.active = false;  // reset the display flag
					}
				},
				
				appendAMPM: {   // no WL
					active: false, severity: 0, message: "Is there an ampm at this location?", id: "appendAMPM", value: "Yes", title: 'Add ampm to the place',
					action: function() {
						newCategories = insertAtIX(newCategories, 'CONVENIENCE_STORE', 1);
						newName = 'ARCO ampm';
						newURL = 'ampm.com';
						W.model.actionManager.add(new UpdateObject(item, { name: newName, url: newURL, categories: newCategories }));
						fieldUpdateObject.name='#dfd';
						fieldUpdateObject.url='#dfd';
						fieldUpdateObject.categories='#dfd';
						higlightChangedFields(fieldUpdateObject,hpMode);
						bannButt.appendAMPM.active = false;  // reset the display flag
						bannButt.addConvStore.active = false;  // also reset the addConvStore display flag
					}
				},
				
				addATM: {    // no WL
					active: false, severity: 0, message: "ATM at location? ", value: "Yes", title: "Add the ATM category to this place",
					action: function() {
						newCategories = insertAtIX(newCategories,"ATM",1);  // Insert ATM category in the second position
						W.model.actionManager.add(new UpdateObject(item, { categories: newCategories }));
						fieldUpdateObject.categories='#dfd';
						higlightChangedFields(fieldUpdateObject,hpMode);
						bannButt.addATM.active = false;   // reset the display flag
					}
				},
				
				addConvStore: {  // no WL
					active: false, severity: 0, message: "Add convenience store category? ", value: "Yes", title: "Add the Convenience Store category to this place",
					action: function() {
						newCategories = insertAtIX(newCategories,"CONVENIENCE_STORE",1);  // Insert C.S. category in the second position
						W.model.actionManager.add(new UpdateObject(item, { categories: newCategories }));
						fieldUpdateObject.categories='#dfd';
						higlightChangedFields(fieldUpdateObject,hpMode);
						bannButt.addConvStore.active = false;   // reset the display flag
					}
				},
				
				isitUSPS: {  // no WL
					active: false, severity: 0, message: "Is this a USPS location? ", value: "Yes", title: "Is this a USPS location?",
					action: function() {
						bannServ.addAC.actionOn();
						bannServ.addCreditCards.actionOn();
						bannServ.addParking.actionOn();
						bannServ.addDeliveries.actionOn();
						bannServ.addWheelchair.actionOn();
						W.model.actionManager.add(new UpdateObject(item, { url: "usps.com" }));
						fieldUpdateObject.url='#dfd';
						higlightChangedFields(fieldUpdateObject,hpMode);
						if (region === 'SER') {
							W.model.actionManager.add(new UpdateObject(item, { aliases: ["United States Postal Service"] }));
							fieldUpdateObject.aliases='#dfd';
							higlightChangedFields(fieldUpdateObject,hpMode);
						}
						bannButt.isitUSPS.active = false;
					}
				},
				
				STC: {    // no WL
					active: false, severity: 0, message: "Force Title Case: ", value: "Yes", title: "Force Title Case to InterNal CaPs",
					action: function() {
						newName = toTitleCaseStrong(item.attributes.name);  // Get the Strong Title Case name
						if (newName !== item.attributes.name) {  // if they are not equal
							W.model.actionManager.add(new UpdateObject(item, { name: newName }));
							fieldUpdateObject.name='#dfd';
							higlightChangedFields(fieldUpdateObject,hpMode);
						}
						bannButt.STC.active = false;  // reset the display flag
					}
				},
				
				sfAliases: {    // no WL
					active: false, severity: 0, message: 'Unnecessary aliases were removed.'
				},
				
				placeMatched: {    // no WL
					active: false, severity: 0, message: 'Place matched from PNH data.'
				},
				
				placeLocked: {    // no WL
					active: false, severity: 0, message: 'Place locked.'
				},
				
				PlaceWebsite: {    // no WL
					active: false, severity: 0, message: "", value: "Place Website", title: "Direct link to place website",
					action: function() {
						var openPlaceWebsiteURL, linkProceed = true;
						if (updateURL) {
							openPlaceWebsiteURL = 'http:\/\/' + newURL;
							// replace WME url with storefinder URLs if they are in the PNH data
							if (customStoreFinder) {
								openPlaceWebsiteURL = customStoreFinderURL;
							} else if (customStoreFinderLocal) {
								openPlaceWebsiteURL = customStoreFinderLocalURL;
							}
							// If the user has 'never' opened a localized store finder URL, then warn them (just once)
							if (localStorage.getItem(SFURLWarning) === '0' && customStoreFinderLocal) {
								linkProceed = false;
								if (confirm('***Localized store finder sites often show multiple nearby results. Please make sure you pick the right location.\nClick OK to agree and continue.') ) {  // if the category doesn't translate, then pop an alert that will make a forum post to the thread
									localStorage.setItem(SFURLWarning, '1');  // prevent future warnings
									linkProceed = true;
								}
							} 
						} else {
							openPlaceWebsiteURL = 'http:\/\/' + item.attributes.url;
						}
						// open the link depending on new window setting
						if (linkProceed) {
							if ( $("#WMEPH-WebSearchNewTab" + devVersStr).prop('checked') ) {
									window.open(openPlaceWebsiteURL);
							} else {
									window.open(openPlaceWebsiteURL, searchResultsWindowName, searchResultsWindowSpecs);
							}
						}
					}
				},
				
				webSearch: {  // no WL
					active: false, severity: 0, message: "", value: "Web Search", title: "Search the web for this place.  Do not copy info from 3rd party sources!",
					action: function() {
						if (localStorage.getItem(GLinkWarning) !== '1') {
							if (confirm('***Please DO NOT copy info from Google or third party sources.*** This link is to help you find the business webpage.\nClick OK to agree and continue.') ) {  // if the category doesn't translate, then pop an alert that will make a forum post to the thread
								localStorage.setItem(GLinkWarning, '1');
							}
						}
						if (localStorage.getItem(GLinkWarning) === '1') {
							if ( $("#WMEPH-WebSearchNewTab" + devVersStr).prop('checked') ) {
									window.open(buildGLink(newName,addr,item.attributes.houseNumber));
							} else {
									window.open(buildGLink(newName,addr,item.attributes.houseNumber), searchResultsWindowName, searchResultsWindowSpecs);
							}
						}
					}
				},
				
				NewPlaceSubmit: {    // no WL
					active: false, severity: 0, message: "No PNH match. If it's a chain: ", value: "Submit new chain data", title: "Submit info for a new chain through the linked form",
					action: function() {
						window.open(newPlaceURL);
					}
				},
				
				ApprovalSubmit: {  // no WL
					active: false, severity: 0, message: "PNH data exists but is not approved for this region: ", value: "Request approval", title: "Request region/country approval of this place",
					action: function() {
						if ( PMUserList.hasOwnProperty(region) && PMUserList[region].approvalActive ) {
							var forumPMInputs = {
								subject: 'PNH approval for "' + PNHNameTemp + '"',
								message: 'Please approve "' + PNHNameTemp + '" for the ' + region + ' region.  Thanks\n \nPNH order number: ' + PNHOrderNum + '\n \nExample Permalink: ' + placePL + '\n \nPNH Link: ' + USAPNHMasURL,
								preview: 'Preview', attach_sig: 'on' 
							};
							forumPMInputs['address_list[u]['+PMUserList[region].modID+']'] = 'to';  // Sends a PM to the regional mod instead of the submission form
							WMEPH_newForumPost('https://www.waze.com/forum/ucp.php?i=pm&mode=compose', forumPMInputs);
						} else {
							window.open(approveRegionURL);
						}
					}
				}
			};  // END bannButt definitions
			
			bannButtHL = bannButt;
			
			bannButt2 = {  
				placesWiki: {
					active: true, severity: 0, message: "", value: "Places wiki", title: "Open the places wiki page",
					action: function() {
						window.open(placesWikiURL);
					}
				},
				restAreaWiki: {
					active: false, severity: 0, message: "", value: "Rest Area wiki", title: "Open the Rest Area wiki page",
					action: function() {
						window.open(restAreaWikiURL);
					}
				},
				clearWL: {
					active: false, severity: 0, message: "", value: "Clear Place whitelist", title: "Clear all Whitelisted fields for this place",
					action: function() {
						if (confirm('Are you sure you want to clear all whitelisted fields for this place?') ) {  // misclick check
							delete venueWhitelist[itemID];
							saveWL_LS(compressedWLLS);
							harmonizePlaceGo(item,'harmonize');  // rerun the script to check all flags again
						}
					}
				},  // END placesWiki definition
				PlaceErrorForumPost: {
					active: true, severity: 0, message: "", value: "Report script error", title: "Report a script error",
					action: function() {
						var forumMsgInputs = {
							subject: 'Re: WMEPH Bug report',
							message: 'Script version: ' + WMEPHversion + devVersStr + '\nPermalink: ' + placePL + '\nPlace name: ' + item.attributes.name + '\nCountry: ' + addr.country.name + '\n--------\nDescribe the error:  \n ',
						};
						WMEPH_errorReport(forumMsgInputs);
					}
				},
				whatsNew: {
					active: false, severity: 0, message: "", value: "*Recent script updates*", title: "Open a list of recent script updates",
					action: function() {
						alert(WMEPHWhatsNew);
						localStorage.setItem('WMEPH-featuresExamined'+devVersStr, '1');
						bannButt2.whatsNew.active = false;
					}
				}
			};  // END bannButt2 definitions
			
			// set up banner action buttons.  Structure:
			// active: false until activated in the script 
			// checked: whether the service is already set on the place. Determines grey vs white icon color 
			// icon: button icon name
			// value: button text  (Not used for Icons, keep as backup
			// title: tooltip text
			// action: The action that happens if the button is pressed
			bannServ = {  
				addValet: {  // append optional Alias to the name
					active: false, checked: false, icon: "serv-valet", w2hratio: 50/50, value: "Valet", title: 'Valet',
					action: function() {
						servID = WMEServicesArray[0];
						if ( ($("#service-checkbox-"+servID).prop('checked') && bannServ.addValet.checked) || 
							(!$("#service-checkbox-"+servID).prop('checked') && !bannServ.addValet.checked) ) { 
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
						}
						updateServicesChecks(bannServ);
					},
					pnhOverride: false,
					actionOn: function() {
						servID = WMEServicesArray[0];
						if ( !$("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addValet.checked = true;
						}
						updateServicesChecks(bannServ);
						bannServ.addValet.active = true;
					},
					actionOff: function() {
						servID = WMEServicesArray[0];
						if ( $("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addValet.checked = false;
						}
						updateServicesChecks(bannServ);
						bannServ.addValet.active = false;
					}
				}, 
				addDriveThru: {  // append optional Alias to the name
					active: false, checked: false, icon: "serv-drivethru", w2hratio: 78/50, value: "DriveThru", title: 'Drive-Thru',
					action: function() {
						servID = WMEServicesArray[1];
						if ( ($("#service-checkbox-"+servID).prop('checked') && bannServ.addDriveThru.checked) || 
							(!$("#service-checkbox-"+servID).prop('checked') && !bannServ.addDriveThru.checked) ) { 
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
						}
						updateServicesChecks(bannServ);
					},
					pnhOverride: false,
					actionOn: function() {
						servID = WMEServicesArray[1];
						if ( !$("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addDriveThru.checked = true;
						}
						updateServicesChecks(bannServ);
						bannServ.addDriveThru.active = true;
					},
					actionOff: function() {
						servID = WMEServicesArray[1];
						if ( $("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addDriveThru.checked = false;
						}
						updateServicesChecks(bannServ);
						bannServ.addDriveThru.active = false;
					}
				}, 
				addWiFi: {  // append optional Alias to the name
					active: false, checked: false, icon: "serv-wifi", w2hratio: 67/50, value: "WiFi", title: 'WiFi',
					action: function() {
						servID = WMEServicesArray[2];
						if ( ($("#service-checkbox-"+servID).prop('checked') && bannServ.addWiFi.checked) || 
							(!$("#service-checkbox-"+servID).prop('checked') && !bannServ.addWiFi.checked) ) { 
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
						}
						updateServicesChecks(bannServ);
					},
					pnhOverride: false,
					actionOn: function() {
						servID = WMEServicesArray[2];
						if ( !$("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addWiFi.checked = true;
						}
						updateServicesChecks(bannServ);
						bannServ.addWiFi.active = true;
					},
					actionOff: function() {
						servID = WMEServicesArray[2];
						if ( $("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addWiFi.checked = false;
						}
						updateServicesChecks(bannServ);
						bannServ.addWiFi.active = false;
					}
				}, 
				addRestrooms: {  // append optional Alias to the name
					active: false, checked: false, icon: "serv-restrooms", w2hratio: 49/50, value: "Restroom", title: 'Restrooms',
					action: function() {
						servID = WMEServicesArray[3];
						if ( ($("#service-checkbox-"+servID).prop('checked') && bannServ.addRestrooms.checked) || 
							(!$("#service-checkbox-"+servID).prop('checked') && !bannServ.addRestrooms.checked) ) { 
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
						}
						updateServicesChecks(bannServ);
					},
					pnhOverride: false,
					actionOn: function() {
						servID = WMEServicesArray[3];
						if ( !$("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addRestrooms.checked = true;
						}
						updateServicesChecks(bannServ);
						bannServ.addRestrooms.active = true;
					},
					actionOff: function() {
						servID = WMEServicesArray[3];
						if ( $("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addRestrooms.checked = false;
						}
						updateServicesChecks(bannServ);
						bannServ.addRestrooms.active = false;
					}
				}, 
				addCreditCards: {  // append optional Alias to the name
					active: false, checked: false, icon: "serv-credit", w2hratio: 73/50, value: "CC", title: 'Credit Cards',
					action: function() {
						servID = WMEServicesArray[4];
						if ( ($("#service-checkbox-"+servID).prop('checked') && bannServ.addCreditCards.checked) || 
							(!$("#service-checkbox-"+servID).prop('checked') && !bannServ.addCreditCards.checked) ) { 
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
						}
						updateServicesChecks(bannServ);
					},
					pnhOverride: false,
					actionOn: function() {
						servID = WMEServicesArray[4];
						if ( !$("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addCreditCards.checked = true;
						}
						updateServicesChecks(bannServ);
						bannServ.addCreditCards.active = true;
					},
					actionOff: function() {
						servID = WMEServicesArray[4];
						if ( $("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addCreditCards.checked = false;
						}
						updateServicesChecks(bannServ);
						bannServ.addCreditCards.active = false;
					}
				}, 
				addReservations: {  // append optional Alias to the name
					active: false, checked: false, icon: "serv-reservations", w2hratio: 55/50, value: "Reserve", title: 'Reservations',
					action: function() {
						servID = WMEServicesArray[5];
						if ( ($("#service-checkbox-"+servID).prop('checked') && bannServ.addReservations.checked) || 
							(!$("#service-checkbox-"+servID).prop('checked') && !bannServ.addReservations.checked) ) { 
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
						}
						updateServicesChecks(bannServ);
					},
					pnhOverride: false,
					actionOn: function() {
						servID = WMEServicesArray[5];
						if ( !$("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addReservations.checked = true;
						}
						updateServicesChecks(bannServ);
						bannServ.addReservations.active = true;
					},
					actionOff: function() {
						servID = WMEServicesArray[5];
						if ( $("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addReservations.checked = false;
						}
						updateServicesChecks(bannServ);
						bannServ.addReservations.active = false;
					}
				}, 
				addOutside: {  // append optional Alias to the name
					active: false, checked: false, icon: "serv-outdoor", w2hratio: 73/50, value: "OusideSeat", title: 'Outside Seating',
					action: function() {
						servID = WMEServicesArray[6];
						if ( ($("#service-checkbox-"+servID).prop('checked') && bannServ.addOutside.checked) || 
							(!$("#service-checkbox-"+servID).prop('checked') && !bannServ.addOutside.checked) ) { 
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
						}
						updateServicesChecks(bannServ);
					},
					pnhOverride: false,
					actionOn: function() {
						servID = WMEServicesArray[6];
						if ( !$("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addOutside.checked = true;
						}
						updateServicesChecks(bannServ);
						bannServ.addOutside.active = true;
					},
					actionOff: function() {
						servID = WMEServicesArray[6];
						if ( $("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addOutside.checked = false;
						}
						updateServicesChecks(bannServ);
						bannServ.addOutside.active = false;
					}
				}, 
				addAC: {  // append optional Alias to the name
					active: false, checked: false, icon: "serv-ac", w2hratio: 50/50, value: "AC", title: 'AC',
					action: function() {
						servID = WMEServicesArray[7];
						if ( ($("#service-checkbox-"+servID).prop('checked') && bannServ.addAC.checked) || 
							(!$("#service-checkbox-"+servID).prop('checked') && !bannServ.addAC.checked) ) { 
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
						}
						updateServicesChecks(bannServ);
					},
					pnhOverride: false,
					actionOn: function() {
						servID = WMEServicesArray[7];
						if ( !$("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addAC.checked = true;
						}
						updateServicesChecks(bannServ);
						bannServ.addAC.active = true;
					},
					actionOff: function() {
						servID = WMEServicesArray[7];
						if ( $("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addAC.checked = false;
						}
						updateServicesChecks(bannServ);
						bannServ.addAC.active = false;
					}
				},  
				addParking: {  // append optional Alias to the name
					active: false, checked: false, icon: "serv-parking", w2hratio: 46/50, value: "Parking", title: 'Parking',
					action: function() {
						servID = WMEServicesArray[8];
						if ( ($("#service-checkbox-"+servID).prop('checked') && bannServ.addParking.checked) || 
							(!$("#service-checkbox-"+servID).prop('checked') && !bannServ.addParking.checked) ) { 
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
						}
						updateServicesChecks(bannServ);
					},
					pnhOverride: false,
					actionOn: function() {
						servID = WMEServicesArray[8];
						if ( !$("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addParking.checked = true;
						}
						updateServicesChecks(bannServ);
						bannServ.addParking.active = true;
					},
					actionOff: function() {
						servID = WMEServicesArray[8];
						if ( $("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addParking.checked = false;
						}
						updateServicesChecks(bannServ);
						bannServ.addParking.active = false;
					}
				}, 
				addDeliveries: {  // append optional Alias to the name
					active: false, checked: false, icon: "serv-deliveries", w2hratio: 86/50, value: "Delivery", title: 'Deliveries',
					action: function() {
						servID = WMEServicesArray[9];
						if ( ($("#service-checkbox-"+servID).prop('checked') && bannServ.addDeliveries.checked) || 
							(!$("#service-checkbox-"+servID).prop('checked') && !bannServ.addDeliveries.checked) ) { 
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
						}
						updateServicesChecks(bannServ);
					},
					pnhOverride: false,
					actionOn: function() {
						servID = WMEServicesArray[9];
						if ( !$("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addDeliveries.checked = true;
						}
						updateServicesChecks(bannServ);
						bannServ.addDeliveries.active = true;
					},
					actionOff: function() {
						servID = WMEServicesArray[9];
						if ( $("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addDeliveries.checked = false;
						}
						updateServicesChecks(bannServ);
						bannServ.addDeliveries.active = false;
					}
				}, 
				addTakeAway: {  // append optional Alias to the name
					active: false, checked: false, icon: "serv-takeaway", w2hratio: 34/50, value: "TakeOut", title: 'Take Out',
					action: function() {
						servID = WMEServicesArray[10];
						if ( ($("#service-checkbox-"+servID).prop('checked') && bannServ.addTakeAway.checked) || 
							(!$("#service-checkbox-"+servID).prop('checked') && !bannServ.addTakeAway.checked) ) { 
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
						}
						updateServicesChecks(bannServ);
					},
					pnhOverride: false,
					actionOn: function() {
						servID = WMEServicesArray[10];
						if ( !$("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addTakeAway.checked = true;
						}
						updateServicesChecks(bannServ);
						bannServ.addTakeAway.active = true;
					},
					actionOff: function() {
						servID = WMEServicesArray[10];
						if ( $("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addTakeAway.checked = false;
						}
						updateServicesChecks(bannServ);
						bannServ.addTakeAway.active = false;
					}
				}, 
				addWheelchair: {  // add service
					active: false, checked: false, icon: "serv-wheelchair", w2hratio: 50/50, value: "WhCh", title: 'Wheelchair Accessible',
					action: function() {
						servID = WMEServicesArray[11];
						if ( ($("#service-checkbox-"+servID).prop('checked') && bannServ.addWheelchair.checked) || 
							(!$("#service-checkbox-"+servID).prop('checked') && !bannServ.addWheelchair.checked) ) { 
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
						}
						updateServicesChecks(bannServ);
					},
					pnhOverride: false,
					actionOn: function() {
						servID = WMEServicesArray[11];
						if ( !$("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addWheelchair.checked = true;
						}
						updateServicesChecks(bannServ);
						bannServ.addWheelchair.active = true;
					},
					actionOff: function() {
						servID = WMEServicesArray[11];
						if ( $("#service-checkbox-"+servID).prop('checked') ) { 	
							$("#service-checkbox-"+servID).trigger('click');
							fieldUpdateObject.services[servID] = '#dfd';
							bannServ.addWheelchair.checked = false;
						}
						updateServicesChecks(bannServ);
						bannServ.addWheelchair.active = false;
					}
				},
				add247: {  // add 24/7 hours
					active: false, checked: false, icon: "serv-247", w2hratio: 73/50, value: "247", title: 'Hours: Open 24\/7',
					action: function() {
						if (!bannServ.add247.checked) {
							W.model.actionManager.add(new UpdateObject(item, { openingHours: [{days: [1,2,3,4,5,6,0], fromHour: "00:00", toHour: "00:00"}] }));
							fieldUpdateObject.openingHours='#dfd';
							higlightChangedFields(fieldUpdateObject,hpMode);
							bannServ.add247.checked = true;
							bannButt.noHours.active = false;
						}
					}
				}
			};  // END bannServ definitions
			
			if (hpMode.harmFlag) {
				// Update icons to reflect current WME place services
				updateServicesChecks(bannServ);
				
				// Turn on New Features Button if not looked at yet
				if (localStorage.getItem('WMEPH-featuresExamined'+devVersStr) === '0') {
					bannButt2.whatsNew.active = true;
				}
				//Setting switch for the Places Wiki button
				if ( $("#WMEPH-HidePlacesWiki" + devVersStr).prop('checked') ) {
					bannButt2.placesWiki.active = false;
				}
				// provide Google search link to places
				if (devUser || betaUser || usrRank > 1) {  // enable the link for all places, for R2+ and betas
					 bannButt.webSearch.active = true;
				}
				// reset PNH lock level
				PNHLockLevel = -1;
				
			}
			
			
			// get GPS lat/long coords from place, call as itemGPS.lat, itemGPS.lon
			var itemGPS = OpenLayers.Layer.SphericalMercator.inverseMercator(item.attributes.geometry.getCentroid().x,item.attributes.geometry.getCentroid().y);
			var lockOK = true;  // if nothing goes wrong, then place will be locked
			var categories = item.attributes.categories;
			newCategories = categories.slice(0);
			newName = item.attributes.name;
			newName = toTitleCase(newName);
			// var nameShort = newName.replace(/[^A-Za-z]/g, '');  // strip non-letters for PNH name searching
			// var nameNumShort = newName.replace(/[^A-Za-z0-9]/g, ''); // strip non-letters/non-numbers for PNH name searching
			newAliases = item.attributes.aliases.slice(0);
			for (var naix=0; naix<newAliases.length; naix++) {
				newAliases[naix] = toTitleCase(newAliases[naix]);
			}
			var brand = item.attributes.brand;
			var newDescripion = item.attributes.description;
			newURL = item.attributes.url;
			var newURLSubmit = "";
			if (newURL !== null && newURL !== '') {
				newURLSubmit = newURL;
			}
			newPhone = item.attributes.phone;
			var addr = item.getAddress();
			if ( addr.hasOwnProperty('attributes') ) {
				addr = addr.attributes;
			}
			var PNHNameRegMatch;
			
			// Some user submitted places have no data in the country, state and address fields.
			if (!addr.state || !addr.country) {
				if (hpMode.harmFlag) {
					if (W.map.getZoom() < 4 ) {
						if ( $("#WMEPH-EnableIAZoom" + devVersStr).prop('checked') ) {
							W.map.moveTo(W.selectionManager.selectedItems[0].model.geometry.getCentroid().toLonLat(), 5);
							return;
						} else {
							alert("No address and the state cannot be determined. Please zoom in and rerun the script. You can enable autozoom for this type of case in the options.");
							return;  //  don't run the rest of the script
						}
					} else {
						var inferredAddress = WMEPH_inferAddress(7);  // Pull address info from nearby segments
						
						if (inferredAddress.state && inferredAddress.country ) {
							addr = inferredAddress;
							if ( $("#WMEPH-AddAddresses" + devVersStr).prop('checked') ) {  // update the item's address if option is enabled
								updateAddress(item, addr);
								fieldUpdateObject.address='#dfd';
								if (item.attributes.houseNumber && item.attributes.houseNumber.replace(/[^0-9A-Za-z]/g,'').length > 0 ) {
									bannButt.fullAddressInference.active = true;
									lockOK = false;
								}
							} else {
								bannButt.streetMissing.active = true;
								bannButt.cityMissing.active = true;
								lockOK = false;
							}
						} else {  //  if the inference doesn't work...
							alert("Place has no address data. Please set the address and rerun the script.");
							return;  //  don't run the rest of the script
						}
					}
				} else if (hpMode.hlFlag) {
					if ( item.attributes.adLocked ) {
						return 'adLock';
					} else if ( item.attributes.categories.indexOf("PARKING_LOT") > -1 && item.attributes.lockRank < levelToLock ) {
						return 4;
					} else if ( item.isPoint() && (item.attributes.categories.indexOf("HOSPITAL_MEDICAL_CARE") > -1 || item.attributes.categories.indexOf("GAS_STATION") > -1) ) {
						return 5;
						phlogdev('Unaddressed HMC/GS');
					} else {
						return 3;
					}
					
				}
			} else if (hpMode.harmFlag && $('.editing').length === 1 ) {
				$('.save-button').click();  // apply any address changes
			}
			
			// Whitelist breakout if place exists on the Whitelist and the option is enabled
			itemID = item.attributes.id; 
			var WLMatch = false;
			if ( venueWhitelist.hasOwnProperty(itemID) ) {
				if ( hpMode.harmFlag || ( hpMode.hlFlag && !$("#WMEPH-DisableWLHL" + devVersStr).prop('checked')  ) ) {
					WLMatch = true;
					// Enable the clear WL button if any property is true
					for (var WLKey in venueWhitelist[itemID]) {  // loop thru the venue WL keys
						if ( venueWhitelist[itemID].hasOwnProperty(WLKey) && (venueWhitelist[itemID][WLKey].active || false) ) {
							bannButt2.clearWL.active = true;
							currentWL[WLKey] = venueWhitelist[itemID][WLKey];  // update the currentWL settings
						}
					}
					if (venueWhitelist[itemID].hasOwnProperty('dupeWL') && venueWhitelist[itemID].dupeWL.length > 0) {
						bannButt2.clearWL.active = true;
						currentWL.dupeWL = venueWhitelist[itemID].dupeWL;
					}
					// Update address and GPS info for the place
					venueWhitelist[itemID].city = addr.city.name;  // Store city for the venue
					venueWhitelist[itemID].state = addr.state.name;  // Store state for the venue
					venueWhitelist[itemID].country = addr.country.name;  // Store country for the venue
					venueWhitelist[itemID].gps = itemGPS;  // Store GPS coords for the venue
				}
			}
			
			// Country restrictions
			var countryCode;
			if (addr.country.name === "United States") {
				countryCode = "USA";
			} else if (addr.country.name === "Canada") {
				countryCode = "CAN";
			} else if (addr.country.name === "American Samoa") {
				countryCode = "USA";
				useState = false;
			} else if (addr.country.name === "Guam") {
				countryCode = "USA";
				useState = false;
			} else if (addr.country.name === "Northern Mariana Islands") {
				countryCode = "USA";
				useState = false;
			} else if (addr.country.name === "Puerto Rico") {
				countryCode = "USA";
				useState = false;
			} else if (addr.country.name === "Virgin Islands (U.S.)") {
				countryCode = "USA";
				useState = false;
			} else {
				if (hpMode.harmFlag) {
					alert("At present this script is not supported in this country.");
				}
				return 3;
			}
			
			// Parse state-based data
			state2L = "Unknown"; region = "Unknown";
			for (var usdix=1; usdix<USA_STATE_DATA.length; usdix++) {
				stateDataTemp = USA_STATE_DATA[usdix].split("|");
				if (addr.state.name === stateDataTemp[ps_state_ix]) {
					state2L = stateDataTemp[ps_state2L_ix];
					region = stateDataTemp[ps_region_ix];
					gFormState = stateDataTemp[ps_gFormState_ix];
					if (stateDataTemp[ps_defaultLockLevel_ix].match(/[1-5]{1}/) !== null) {
						defaultLockLevel = stateDataTemp[ps_defaultLockLevel_ix] - 1;  // normalize by -1
					} else {
						if (hpMode.harmFlag) {
							alert('Lock level sheet data is not correct');
						} else if (hpMode.hlFlag) {
							return '3';
						}
					}
					areaCodeList = areaCodeList+','+stateDataTemp[ps_areacode_ix];
					break;
				}
				// If State is not found, then use the country
				if (addr.country.name === stateDataTemp[ps_state_ix]) {
					state2L = stateDataTemp[ps_state2L_ix];
					region = stateDataTemp[ps_region_ix];
					gFormState = stateDataTemp[ps_gFormState_ix];
					if (stateDataTemp[ps_defaultLockLevel_ix].match(/[1-5]{1}/) !== null) {
						defaultLockLevel = stateDataTemp[ps_defaultLockLevel_ix] - 1;  // normalize by -1
					} else {
						if (hpMode.harmFlag) {
							alert('Lock level sheet data is not correct');
						} else if (hpMode.hlFlag) {
							return '3';
						}
					}
					areaCodeList = areaCodeList+','+stateDataTemp[ps_areacode_ix];
					break;
				}
				
			}
			if (state2L === "Unknown" || region === "Unknown") {	// if nothing found:
				if (hpMode.harmFlag) {
					if (confirm('WMEPH: Localization Error!\nClick OK to report this error') ) {  // if the category doesn't translate, then pop an alert that will make a forum post to the thread
						forumMsgInputs = {
							subject: 'Re: WMEPH Localization Error report',
							message: 'Error report: Localization match failed for "' + addr.state.name + '".',
						};
						WMEPH_errorReport(forumMsgInputs);
					}
				}
				return 3;
			}
			
			// Clear attributes from residential places
			if (item.attributes.residential) {
				if (hpMode.harmFlag) {
					if ( !$("#WMEPH-AutoLockRPPs" + devVersStr).prop('checked') ) {
						lockOK = false;
					}
					if (item.attributes.name !== '') {  // Set the residential place name to the address (to clear any personal info)
						phlogdev("Residential Name reset");
						W.model.actionManager.add(new UpdateObject(item, {name: ''}));
						// no field HL
					}
					newCategories = ["RESIDENCE_HOME"];
					// newDescripion = null;
					if (item.attributes.description !== null && item.attributes.description !== "") {  // remove any description
						phlogdev("Residential description cleared");
						W.model.actionManager.add(new UpdateObject(item, {description: null}));
						// no field HL
					}
					// newPhone = null;
					if (item.attributes.phone !== null && item.attributes.phone !== "") {  // remove any phone info
						phlogdev("Residential Phone cleared");
						W.model.actionManager.add(new UpdateObject(item, {phone: null}));
						// no field HL
					}
					// newURL = null;
					if (item.attributes.url !== null && item.attributes.url !== "") {  // remove any url
						phlogdev("Residential URL cleared");
						W.model.actionManager.add(new UpdateObject(item, {url: null}));
						// no field HL
					}
					if (item.attributes.services.length > 0) {
						phlogdev("Residential services cleared");
						W.model.actionManager.add(new UpdateObject(item, {services: [] }));
						// no field HL
					}
				}
				if (item.is2D()) {
					bannButt.pointNotArea.active = true;
				}
			} else if (item.attributes.name !== "" && item.attributes.name !== " " && item.attributes.name !== null) {  // for non-residential places
				// Place Harmonization 
				var PNHMatchData;
				if (hpMode.harmFlag) {
					PNHMatchData = harmoList(newName,state2L,region,countryCode,newCategories);  // check against the PNH list
				} else if (hpMode.hlFlag) {
					PNHMatchData = ['Highlight'];
					//PNHMatchData = harmoList(newName,state2L,region,countryCode,newCategories);  // check against the PNH list
				}
				PNHNameRegMatch = false;
				if (PNHMatchData[0] !== "NoMatch" && PNHMatchData[0] !== "ApprovalNeeded" && PNHMatchData[0] !== "Highlight" ) { // *** Replace place data with PNH data
					PNHNameRegMatch = true;
					var showDispNote = true;
					var updatePNHName = true;
					// Break out the data headers
					var PNH_DATA_headers;
					if (countryCode === "USA") {
						PNH_DATA_headers = USA_PNH_DATA[0].split("|");
					} else if (countryCode === "CAN") {
						PNH_DATA_headers = CAN_PNH_DATA[0].split("|");
					}
					var ph_name_ix = PNH_DATA_headers.indexOf("ph_name");
					var ph_aliases_ix = PNH_DATA_headers.indexOf("ph_aliases");
					var ph_category1_ix = PNH_DATA_headers.indexOf("ph_category1");
					var ph_category2_ix = PNH_DATA_headers.indexOf("ph_category2");
					var ph_description_ix = PNH_DATA_headers.indexOf("ph_description");
					var ph_url_ix = PNH_DATA_headers.indexOf("ph_url");
					var ph_order_ix = PNH_DATA_headers.indexOf("ph_order");
					// var ph_notes_ix = PNH_DATA_headers.indexOf("ph_notes");
					var ph_speccase_ix = PNH_DATA_headers.indexOf("ph_speccase");
					var ph_sfurl_ix = PNH_DATA_headers.indexOf("ph_sfurl");
					var ph_sfurllocal_ix = PNH_DATA_headers.indexOf("ph_sfurllocal");
					// var ph_forcecat_ix = PNH_DATA_headers.indexOf("ph_forcecat");
					var ph_displaynote_ix = PNH_DATA_headers.indexOf("ph_displaynote");
					
					// Retrieve the data from the PNH line(s)
					var nsMultiMatch = false, orderList = [];
					//phlogdev('Number of PNH matches: ' + PNHMatchData.length);
					if (PNHMatchData.length > 1) { // If multiple matches, then 
						var brandParent = -1, pmdTemp, pmdSpecCases, PNHMatchDataHold = PNHMatchData[0].split('|');
						for (var pmdix=0; pmdix<PNHMatchData.length; pmdix++) {  // For each of the matches, 
							pmdTemp = PNHMatchData[pmdix].split('|');  // Split the PNH data line
							orderList.push(pmdTemp[ph_order_ix]);  // Add Order number to a list
							if (pmdTemp[ph_speccase_ix].match(/brandParent(\d{1})/) !== null) {  // If there is a brandParent flag, prioritize by highest match
								pmdSpecCases = pmdTemp[ph_speccase_ix].match(/brandParent(\d{1})/)[1];
								if (pmdSpecCases > brandParent) {  // if the match is more specific than the previous ones:
									brandParent = pmdSpecCases;  // Update the brandParent level
									PNHMatchDataHold = pmdTemp;  // Update the PNH data line
									//phlogdev('pmdSpecCases: ' + pmdSpecCases);
								}
							} else {  // if any item has no brandParent structure, use highest brandParent match but post an error
								nsMultiMatch = true;
							}
						}
						PNHMatchData = PNHMatchDataHold;
					} else {
						PNHMatchData = PNHMatchData[0].split('|');  // Single match just gets direct split
					}
					
							
					
					var priPNHPlaceCat = catTranslate(PNHMatchData[ph_category1_ix]);  // translate primary category to WME code
					
					// if the location has multiple matches, then pop an alert that will make a forum post to the thread
					if (nsMultiMatch) {
						if (confirm('WMEPH: Multiple matches found!\nDouble check the script changes.\nClick OK to report this situation.') ) {  
							forumMsgInputs = {
								subject: 'Re: WMEPH Multiple match report',
								message: 'Error report: PNH Order Nos. "' + orderList.join(', ') + '" are ambiguous multiple matches.',
							};
							WMEPH_errorReport(forumMsgInputs);
						}
					}
					
					// Check special cases
					var specCases, scFlag, localURLcheck = '';
					if (ph_speccase_ix > -1) {  // If the special cases column exists
						specCases = PNHMatchData[ph_speccase_ix];  // pulls the speccases field from the PNH line
						if (specCases !== "0" && specCases !== "") {
							specCases = specCases.replace(/, /g, ",").split(",");  // remove spaces after commas and split by comma
						}
						for (var scix = 0; scix < specCases.length; scix++) { 
							// find any button/message flags in the special case (format: buttOn_xyzXyz, etc.)
							if ( specCases[scix].match(/^buttOn_/g) !== null ) {  
								scFlag = specCases[scix].match(/^buttOn_(.+)/i)[1];
								bannButt[scFlag].active = true;
							} else if ( specCases[scix].match(/^buttOff_/g) !== null ) {
								scFlag = specCases[scix].match(/^buttOff_(.+)/i)[1];
								bannButt[scFlag].active = false;
							} else if ( specCases[scix].match(/^messOn_/g) !== null ) {
								scFlag = specCases[scix].match(/^messOn_(.+)/i)[1];
								bannButt[scFlag].active = true;
							} else if ( specCases[scix].match(/^messOff_/g) !== null ) {
								scFlag = specCases[scix].match(/^messOff_(.+)/i)[1];
								bannButt[scFlag].active = false;
							} else if ( specCases[scix].match(/^psOn_/g) !== null ) {
								scFlag = specCases[scix].match(/^psOn_(.+)/i)[1];
								bannServ[scFlag].actionOn();
								bannServ[scFlag].pnhOverride = true;
							} else if ( specCases[scix].match(/^psOff_/g) !== null ) {
								scFlag = specCases[scix].match(/^psOff_(.+)/i)[1];
								bannServ[scFlag].actionOff();
								bannServ[scFlag].pnhOverride = true;
							}
							// parseout localURL data if exists (meaning place can have a URL distinct from the chain URL
							if ( specCases[scix].match(/^localURL_/g) !== null ) {
								localURLcheck = specCases[scix].match(/^localURL_(.+)/i)[1];
							}
							// parse out optional alt-name
							if ( specCases[scix].match(/^optionAltName<>(.+)/g) !== null ) {
								optionalAlias = specCases[scix].match(/^optionAltName<>(.+)/i)[1];
								if (newAliases.indexOf(optionalAlias) === -1) {
									bannButt.addAlias.active = true;
								}
							}
							// Gas Station forceBranding
							if ( ["GAS_STATION"].indexOf(priPNHPlaceCat) > -1 && specCases[scix].match(/^forceBrand<>(.+)/i) !== null ) {
								var forceBrand = specCases[scix].match(/^forceBrand<>(.+)/i)[1];
								if (item.attributes.brand !== forceBrand) {
									W.model.actionManager.add(new UpdateObject(item, { brand: forceBrand }));
									fieldUpdateObject.brand='#dfd';
									phlogdev('Gas brand updated from PNH');
								}
							}
							// Check Localization
							if ( specCases[scix].match(/^checkLocalization<>(.+)/i) !== null ) {
								updatePNHName = false;
								var baseName = specCases[scix].match(/^checkLocalization<>(.+)/i)[1];
								var baseNameRE = new RegExp(baseName, 'g');
								if ( newName.match(baseNameRE) === null ) {
									bannButt.localizedName.active = true;
									if (currentWL.localizedName) {
										bannButt.localizedName.WLactive = false;
									}
									bannButt.PlaceWebsite.value = 'Place Website';
									if (ph_displaynote_ix > -1 && PNHMatchData[ph_displaynote_ix] !== '0' && PNHMatchData[ph_displaynote_ix] !== '') {
										bannButt.localizedName.message = PNHMatchData[ph_displaynote_ix];
									}
								}
								showDispNote = false;
							}
							
							// Prevent name change
							if ( specCases[scix].match(/keepName/g) !== null ) {
								updatePNHName = false;
							}
							
						}
					}
					
					// If it's a place that also sells fuel, enable the button
					if ( PNHMatchData[ph_speccase_ix] === 'subFuel' && newName.toUpperCase().indexOf('GAS') === -1 && newName.toUpperCase().indexOf('FUEL') === -1 ) {  
						bannButt.subFuel.active = true;
						if (currentWL.subFuel) {
							bannButt.subFuel.WLactive = false;
						}
					}
					
					// Display any notes for the specific place
					if (showDispNote && ph_displaynote_ix > -1 && PNHMatchData[ph_displaynote_ix] !== '0' && PNHMatchData[ph_displaynote_ix] !== '' ) {
						if ( containsAny(specCases,['pharmhours']) ) {
							if ( item.attributes.description.toUpperCase().indexOf('PHARMACY') === -1 || ( item.attributes.description.toUpperCase().indexOf('HOURS') === -1 && item.attributes.description.toUpperCase().indexOf('HRS') === -1 ) ) {
								bannButt.specCaseMessage.active = true;
								bannButt.specCaseMessage.message = PNHMatchData[ph_displaynote_ix];
							}
						} else if ( containsAny(specCases,['drivethruhours']) ) {
							if ( item.attributes.description.toUpperCase().indexOf('DRIVE') === -1 || ( item.attributes.description.toUpperCase().indexOf('HOURS') === -1 && item.attributes.description.toUpperCase().indexOf('HRS') === -1 ) ) {
								if ( $("#service-checkbox-"+'DRIVETHROUGH').prop('checked') ) {
									bannButt.specCaseMessage.active = true;
									bannButt.specCaseMessage.message = PNHMatchData[ph_displaynote_ix];
								} else {
									bannButt.specCaseMessageLow.active = true;
									bannButt.specCaseMessageLow.message = PNHMatchData[ph_displaynote_ix];
								}
							}
						} else {
							bannButt.specCaseMessageLow.active = true;
							bannButt.specCaseMessageLow.message = PNHMatchData[ph_displaynote_ix];
						}
					}
					
					// Localized Storefinder code:
					if (ph_sfurl_ix > -1) {  // if the sfurl column exists...
						if ( ph_sfurllocal_ix > -1 && PNHMatchData[ph_sfurllocal_ix] !== "" && PNHMatchData[ph_sfurllocal_ix] !== "0" ) {
							if ( !bannButt.localizedName.active ) {
								bannButt.PlaceWebsite.value = "Store Locator (L)";
							}
							var tempLocalURL = PNHMatchData[ph_sfurllocal_ix].replace(/ /g,'').split("<>");
							var searchStreet = "", searchCity = "", searchState = "";
							if ("string" === typeof addr.street.name) {
								searchStreet = addr.street.name;
							}
							var searchStreetPlus = searchStreet.replace(/ /g, "+");
							searchStreet = searchStreet.replace(/ /g, "%20");
							if ("string" === typeof addr.city.name) {
								searchCity = addr.city.name;
							}
							var searchCityPlus = searchCity.replace(/ /g, "+");
							searchCity = searchCity.replace(/ /g, "%20");
							if ("string" === typeof addr.state.name) {
								searchState = addr.state.name;
							}
							var searchStatePlus = searchState.replace(/ /g, "+");
							searchState = searchState.replace(/ /g, "%20");
							
							for (var tlix = 1; tlix<tempLocalURL.length; tlix++) {
								if (tempLocalURL[tlix] === 'ph_streetName') {
									customStoreFinderLocalURL = customStoreFinderLocalURL + searchStreet;
								} else if (tempLocalURL[tlix] === 'ph_streetNamePlus') {
									customStoreFinderLocalURL = customStoreFinderLocalURL + searchStreetPlus;
								} else if (tempLocalURL[tlix] === 'ph_cityName') {
									customStoreFinderLocalURL = customStoreFinderLocalURL + searchCity;
								} else if (tempLocalURL[tlix] === 'ph_cityNamePlus') {
									customStoreFinderLocalURL = customStoreFinderLocalURL + searchCityPlus;
								} else if (tempLocalURL[tlix] === 'ph_stateName') {
									customStoreFinderLocalURL = customStoreFinderLocalURL + searchState;
								} else if (tempLocalURL[tlix] === 'ph_stateNamePlus') {
									customStoreFinderLocalURL = customStoreFinderLocalURL + searchStatePlus;
								} else if (tempLocalURL[tlix] === 'ph_state2L') {
									customStoreFinderLocalURL = customStoreFinderLocalURL + state2L;
								} else if (tempLocalURL[tlix] === 'ph_latitudeEW') {
									//customStoreFinderLocalURL = customStoreFinderLocalURL + itemGPS[0];
								} else if (tempLocalURL[tlix] === 'ph_longitudeNS') {
									//customStoreFinderLocalURL = customStoreFinderLocalURL + itemGPS[1];
								} else if (tempLocalURL[tlix] === 'ph_latitudePM') {
									customStoreFinderLocalURL = customStoreFinderLocalURL + itemGPS.lat;
								} else if (tempLocalURL[tlix] === 'ph_longitudePM') {
									customStoreFinderLocalURL = customStoreFinderLocalURL + itemGPS.lon;
								} else if (tempLocalURL[tlix] === 'ph_latitudePMBuffMin') {
									customStoreFinderLocalURL = customStoreFinderLocalURL + (itemGPS.lat-0.15).toString();
								} else if (tempLocalURL[tlix] === 'ph_longitudePMBuffMin') {
									customStoreFinderLocalURL = customStoreFinderLocalURL + (itemGPS.lon-0.15).toString();
								} else if (tempLocalURL[tlix] === 'ph_latitudePMBuffMax') {
									customStoreFinderLocalURL = customStoreFinderLocalURL + (itemGPS.lat+0.15).toString();
								} else if (tempLocalURL[tlix] === 'ph_longitudePMBuffMax') {
									customStoreFinderLocalURL = customStoreFinderLocalURL + (itemGPS.lon+0.15).toString();
								} else if (tempLocalURL[tlix] === 'ph_houseNumber') {
									customStoreFinderLocalURL = customStoreFinderLocalURL + item.attributes.houseNumber;
								} else {
									customStoreFinderLocalURL = customStoreFinderLocalURL + tempLocalURL[tlix];
								}
							}
							if ( customStoreFinderLocalURL.indexOf('http') !== 0 ) {
								customStoreFinderLocalURL = 'http:\/\/' + customStoreFinderLocalURL;
							}
							customStoreFinderLocal = true;
						} else if (PNHMatchData[ph_sfurl_ix] !== "" && PNHMatchData[ph_sfurl_ix] !== "0") {
							if ( !bannButt.localizedName.active ) {
								bannButt.PlaceWebsite.value = "Store Locator";
							}
							customStoreFinderURL = PNHMatchData[ph_sfurl_ix];
							if ( customStoreFinderURL.indexOf('http') !== 0 ) {
								customStoreFinderURL = 'http:\/\/' + customStoreFinderURL;
							}
							customStoreFinder = true;
						}
					}
					
					// Category translations						
					var altCategories = PNHMatchData[ph_category2_ix];
					if (altCategories !== "0" && altCategories !== "") {  //  translate alt-cats to WME code
						altCategories = altCategories.replace(/,[^A-Za-z0-9]*/g, ",").split(",");  // tighten and split by comma
						for (var catix = 0; catix<altCategories.length; catix++) {  
							var newAltTemp = catTranslate(altCategories[catix]);  // translate altCats into WME cat codes
							if (newAltTemp === "ERROR") {  // if no translation, quit the loop
								phlog('Category ' + altCategories[catix] + 'cannot be translated.');
								return;
							} else {
								altCategories[catix] = newAltTemp;  // replace with translated element
							}
						}
					}
					
					// name parsing with category exceptions
					var splix;
					if (["HOTEL"].indexOf(priPNHPlaceCat) > -1) { 
						if (newName.toUpperCase() === PNHMatchData[ph_name_ix].toUpperCase()) {  // If no localization
							bannButt.catHotel.message = 'Check hotel website for any name localization (e.g. '+ PNHMatchData[ph_name_ix] +' - Tampa Airport).';
							bannButt.catHotel.active = true;
							newName = PNHMatchData[ph_name_ix];
						} else {
							// Replace PNH part of name with PNH name
							splix = newName.toUpperCase().replace(/[-\/]/g,' ').indexOf(PNHMatchData[ph_name_ix].toUpperCase().replace(/[-\/]/g,' ') );
							if (splix>-1) {
								newName = newName.slice(0,splix) + ' ' + PNHMatchData[ph_name_ix] + ' ' + newName.slice(splix+PNHMatchData[ph_name_ix].length);
								newName = newName.replace(/ {2,}/g,' ');
							}
						}
						if ( altCategories !== "0" && altCategories !== "" ) {  // if PNH alts exist
							insertAtIX(newCategories, altCategories, 1);  //  then insert the alts into the existing category array after the GS category
						}
						if ( newCategories.indexOf('HOTEL') !== 0 ) {  // If no GS category in the primary, flag it
							bannButt.hotelMkPrim.active = true;
							if (currentWL.hotelMkPrim) {
								bannButt.hotelMkPrim.WLactive = false;
							} else {
								lockOK = false;
							}
						}
					} else if ( ["BANK_FINANCIAL"].indexOf(priPNHPlaceCat) > -1 && PNHMatchData[ph_speccase_ix].indexOf('notABank') === -1 ) {
						// PNH Bank treatment
						ixBank = item.attributes.categories.indexOf("BANK_FINANCIAL");
						ixATM = item.attributes.categories.indexOf("ATM");
						ixOffices = item.attributes.categories.indexOf("OFFICES");
						// if the name contains ATM in it
						if ( newName.match(/\batm\b/ig) !== null ) {
							if ( ixOffices === 0 ) {
								bannButt.bankType1.active = true;
								bannButt.bankBranch.active = true;
								bannButt.standaloneATM.active = true;
								bannButt.bankCorporate.active = true;
							} else if ( ixBank === -1 && ixATM === -1 ) {
								bannButt.bankBranch.active = true;
								bannButt.standaloneATM.active = true;
							} else if ( ixATM === 0 && ixBank > 0 ) {
								bannButt.bankBranch.active = true;
							} else if ( ixBank > -1 ) {
								bannButt.bankBranch.active = true;
								bannButt.standaloneATM.active = true;
							}
							newName = PNHMatchData[ph_name_ix] + ' ATM';
							newCategories = insertAtIX(newCategories, 'ATM', 0);
							// Net result: If the place has ATM cat only and ATM in the name, then it will be green and renamed Bank Name ATM
						} else if (ixBank > -1  || ixATM > -1) {  // if no ATM in name but with a banking category:
							if ( ixOffices === 0 ) {
								bannButt.bankBranch.active = true;
							} else if ( ixBank > -1  && ixATM === -1 ) {
								bannButt.addATM.active = true;
							} else if ( ixATM === 0 && ixBank === -1 ) {
								bannButt.bankBranch.active = true;
								bannButt.standaloneATM.active = true;
							} else if ( ixBank > 0 && ixATM > 0 ) {
								bannButt.bankBranch.active = true;
								bannButt.standaloneATM.active = true;
							}
							newName = PNHMatchData[ph_name_ix];
							// Net result: If the place has Bank category first, then it will be green with PNH name replaced
						} else {  // for PNH match with neither bank type category, make it a bank
							newCategories = insertAtIX(newCategories, 'BANK_FINANCIAL', 1);
							bannButt.standaloneATM.active = true;
							bannButt.bankCorporate.active = true;
						}// END PNH bank treatment
					} else if ( ["GAS_STATION"].indexOf(priPNHPlaceCat) > -1 ) {  // for PNH gas stations, don't replace existing sub-categories
						if ( altCategories !== "0" && altCategories !== "" ) {  // if PNH alts exist
							insertAtIX(newCategories, altCategories, 1);  //  then insert the alts into the existing category array after the GS category
						}
						if ( newCategories.indexOf('GAS_STATION') !== 0 ) {  // If no GS category in the primary, flag it
							bannButt.gasMkPrim.active = true;
							lockOK = false;
						} else {
							newName = PNHMatchData[ph_name_ix];
						}
					} else if (updatePNHName) {  // if not a special category then update the name
						newName = PNHMatchData[ph_name_ix];
						newCategories = [priPNHPlaceCat];
						if (altCategories !== "0" && altCategories !== "") {
							newCategories.push.apply(newCategories,altCategories);
						}
					}
					
					// *** need to add a section above to allow other permissible categories to remain? (optional)
					
					// Parse URL data
					var localURLcheckRE;
					if ( localURLcheck !== '') {
						if (newURL !== null || newURL !== '') {
							localURLcheckRE = new RegExp(localURLcheck, "i");
							if ( newURL.match(localURLcheckRE) !== null ) {
								newURL = normalizeURL(newURL,false);
							} else {
								newURL = normalizeURL(PNHMatchData[ph_url_ix],false);
								bannButt.localURL.active = true;
							}
						} else {
							newURL = normalizeURL(PNHMatchData[ph_url_ix],false);
							bannButt.localURL.active = true;
						}
					} else {
						newURL = normalizeURL(PNHMatchData[ph_url_ix],false);
					}
					// Parse PNH Aliases
					newAliasesTemp = PNHMatchData[ph_aliases_ix].match(/([^\(]*)/i)[0];
					if (newAliasesTemp !== "0" && newAliasesTemp !== "") {  // make aliases array
						newAliasesTemp = newAliasesTemp.replace(/,[^A-za-z0-9]*/g, ",");  // tighten up commas if more than one alias.
						newAliasesTemp = newAliasesTemp.split(",");  // split by comma
					}
					if ( specCases.indexOf('noUpdateAlias') === -1 && (!containsAll(newAliases,newAliasesTemp) && newAliasesTemp !== "0" && newAliasesTemp !== "" && specCases.indexOf('optionName2') === -1 ))  {
						newAliases = insertAtIX(newAliases,newAliasesTemp,0);
					}
					// Enable optional alt-name button
					if (bannButt.addAlias.active) {
						bannButt.addAlias.message = "Is there a " + optionalAlias + " at this location?";
						bannButt.addAlias.title = 'Add ' + optionalAlias;
					}
					// update categories if different and no Cat2 option
					if ( !matchSets( uniq(item.attributes.categories),uniq(newCategories) ) ) {
						if ( specCases.indexOf('optionCat2') === -1 && specCases.indexOf('buttOn_addCat2') === -1 ) {
							phlogdev("Categories updated" + " with " + newCategories);
							W.model.actionManager.add(new UpdateObject(item, { categories: newCategories }));
							fieldUpdateObject.categories='#dfd';
						} else {  // if second cat is optional
							phlogdev("Primary category updated" + " with " + priPNHPlaceCat);
							W.model.actionManager.add(new UpdateObject(item, { categories: [priPNHPlaceCat] }));
							fieldUpdateObject.categories='#dfd';
						}
						// Enable optional 2nd category button
						if (specCases.indexOf('buttOn_addCat2') > -1 && newCategories.indexOf(catTransWaze2Lang[altCategories[0]]) === -1 ) {
							bannButt.addCat2.message = "Is there a " + catTransWaze2Lang[altCategories[0]] + " at this location?";
							bannButt.addCat2.title = 'Add ' + catTransWaze2Lang[altCategories[0]];
						}
					}
					
					// Description update
					newDescripion = PNHMatchData[ph_description_ix];
					if (newDescripion !== null && newDescripion !== "0" && item.attributes.description.toUpperCase().indexOf(newDescripion.toUpperCase()) === -1 ) {
						if ( item.attributes.description !== "" && item.attributes.description !== null && item.attributes.description !== ' ' ) {
							bannButt.checkDescription.active = true;
						}
						phlogdev("Description updated");
						newDescripion = newDescripion + '\n' + item.attributes.description;
						W.model.actionManager.add(new UpdateObject(item, { description: newDescripion }));
						fieldUpdateObject.description='#dfd';
					}
					
					// Special Lock by PNH
					if (specCases.indexOf('lockAt5') > -1 ) {
						PNHLockLevel = 4;
					}
					
					
				} else {  // if no PNH match found
					if (PNHMatchData[0] === "ApprovalNeeded") {
						//PNHNameTemp = PNHMatchData[1].join(', ');
						PNHNameTemp = PNHMatchData[1][0];  // Just do the first match
						PNHNameTempWeb = PNHNameTemp.replace(/\&/g, "%26");
						PNHNameTempWeb = PNHNameTemp.replace(/\#/g, "%23");
						PNHNameTempWeb = PNHNameTempWeb.replace(/\//g, "%2F");
						PNHOrderNum = PNHMatchData[2].join(',');
					}
					
					// Strong title case option for non-PNH places
					if (newName !== toTitleCaseStrong(newName)) {
						bannButt.STC.active = true;
					}
					
					newURL = normalizeURL(newURL,true);  // Normalize url
					
					// Generic Hotel Treatment
					if ( newCategories.indexOf("HOTEL") > -1  && newName.indexOf(' - ') === -1 && newName.indexOf(': ') === -1) {
						bannButt.catHotel.active = true;
						if (currentWL.hotelLocWL) {
							bannButt.catHotel.WLactive = false;
						}
					}
				
					// Generic Bank treatment
					ixBank = item.attributes.categories.indexOf("BANK_FINANCIAL");
					ixATM = item.attributes.categories.indexOf("ATM");
					ixOffices = item.attributes.categories.indexOf("OFFICES");
					// if the name contains ATM in it
					if ( newName.match(/\batm\b/ig) !== null ) {
						if ( ixOffices === 0 ) {
							bannButt.bankType1.active = true;
							bannButt.bankBranch.active = true;
							bannButt.standaloneATM.active = true;
							bannButt.bankCorporate.active = true;
						} else if ( ixBank === -1 && ixATM === -1 ) {
							bannButt.bankBranch.active = true;
							bannButt.standaloneATM.active = true;
						} else if ( ixATM === 0 && ixBank > 0 ) {
							bannButt.bankBranch.active = true;
						} else if ( ixBank > -1 ) {
							bannButt.bankBranch.active = true;
							bannButt.standaloneATM.active = true;
						}
						// Net result: If the place has ATM cat only and ATM in the name, then it will be green
					} else if (ixBank > -1  || ixATM > -1) {  // if no ATM in name:
						if ( ixOffices === 0 ) {
							bannButt.bankBranch.active = true;
						} else if ( ixBank > -1  && ixATM === -1 ) {
							bannButt.addATM.active = true;
						} else if ( ixATM === 0 && ixBank === -1 ) {
							bannButt.bankBranch.active = true;
							bannButt.standaloneATM.active = true;
						} else if ( ixBank > 0 && ixATM > 0 ) {
							bannButt.bankBranch.active = true;
							bannButt.standaloneATM.active = true;
						}
						// Net result: If the place has Bank category first, then it will be green
					} // END generic bank treatment
					
				}  // END PNH match/no-match updates
				
				// Strip/add suffixes
				if ( hpMode.harmFlag && thisUser.userName === 'bmtg' )  {
					var suffixStr = ' - ZQXWCEVRBT';
					var suffixStrRE = new RegExp(suffixStr, 'i');
					if ( newName.indexOf(suffixStr) > -1 ) {
						//newName = newName.replace(suffixStrRE, '');
					}
					if ( newName.indexOf(suffixStr) === -1 ) {
						//newName = newName + suffixStr;
					}
				}
				
				// Update name:
				if (hpMode.harmFlag && newName !== item.attributes.name) {
					phlogdev("Name updated");
					W.model.actionManager.add(new UpdateObject(item, { name: newName }));
					fieldUpdateObject.name='#dfd';
				}
						
				// Update aliases
				newAliases = removeSFAliases(newName, newAliases);
				for (naix=0; naix<newAliases.length; naix++) {
					newAliases[naix] = toTitleCase(newAliases[naix]);
				}
				if (hpMode.harmFlag && newAliases !== item.attributes.aliases && newAliases.length !== item.attributes.aliases.length) {
					phlogdev("Alt Names updated");
					W.model.actionManager.add(new UpdateObject(item, { aliases: newAliases }));
					fieldUpdateObject.aliases='#dfd';
				}
				
				// Gas station treatment (applies to all including PNH)
				if (newCategories[0] === 'GAS_STATION') {
					// Brand checking
					if ( !item.attributes.brand || item.attributes.brand === null || item.attributes.brand === "" ) {
						bannButt.gasNoBrand.active = true;
						if (currentWL.gasNoBrand) {
							bannButt.gasNoBrand.WLactive = false;
						}
					} else if (item.attributes.brand === 'Unbranded' ) {  //  Unbranded is not used per wiki
						bannButt.gasUnbranded.active = true;
						lockOK = false;
					} else {
						var brandNameRegEx = new RegExp('\\b'+item.attributes.brand.toUpperCase().replace(/[ '-]/g,''), "i");
						if ( newName.toUpperCase().replace(/[ '-]/g,'').match(brandNameRegEx) === null ) {
							bannButt.gasMismatch.active = true;
							if (currentWL.gasMismatch) {
								bannButt.gasMismatch.WLactive = false;
							} else {
								lockOK = false;
							}
						}
					}
					// Add convenience store category to station
					if (newCategories.indexOf("CONVENIENCE_STORE") === -1 && !bannButt.subFuel.active) {
						if ( hpMode.harmFlag && $("#WMEPH-ConvenienceStoreToGasStations" + devVersStr).prop('checked') ) {  // Automatic if user has the setting checked
							newCategories = insertAtIX(newCategories, "CONVENIENCE_STORE", 1);  // insert the C.S. category
							W.model.actionManager.add(new UpdateObject(item, { categories: newCategories }));
							fieldUpdateObject.categories='#dfd';
							phlogdev('Conv. store category added');
						} else {  // If not checked, then it will be a banner button
							bannButt.addConvStore.active = true;
						}
					}
				}  // END Gas Station Checks
				
				// Make PNH submission links
				var regionFormURL = '';
				var newPlaceAddon = '';
				var approvalAddon = '';
				var approvalMessage = 'Submitted via WMEPH. PNH order number ' + PNHOrderNum;
				var tempSubmitName = newName.replace(/\&/g,'%26').replace(/\//g, "%2F").replace(/\#/g, "%23");
				if (hpMode.harmFlag) {
					switch (region) {
						case "NWR": regionFormURL = 'https://docs.google.com/forms/d/1hv5hXBlGr1pTMmo4n3frUx1DovUODbZodfDBwwTc7HE/viewform';
							newPlaceAddon = '?entry.925969794='+tempSubmitName+'&entry.1970139752='+newURLSubmit+'&entry.1749047694='+thisUser.userName+gFormState; 
							approvalAddon = '?entry.925969794='+PNHNameTempWeb+'&entry.50214576='+approvalMessage+'&entry.1749047694='+thisUser.userName+gFormState;
							break;
						case "SWR": regionFormURL = 'https://docs.google.com/forms/d/1Qf2N4fSkNzhVuXJwPBJMQBmW0suNuy8W9itCo1qgJL4/viewform';
							newPlaceAddon = '?entry.1497446659='+tempSubmitName+'&entry.1970139752='+newURLSubmit+'&entry.1749047694='+thisUser.userName+gFormState; 
							approvalAddon = '?entry.1497446659='+PNHNameTempWeb+'&entry.50214576='+approvalMessage+'&entry.1749047694='+thisUser.userName+gFormState; 
							break;
						case "HI": regionFormURL = 'https://docs.google.com/forms/d/1K7Dohm8eamIKry3KwMTVnpMdJLaMIyDGMt7Bw6iqH_A/viewform';
							newPlaceAddon = '?entry.1497446659='+tempSubmitName+'&entry.1970139752='+newURLSubmit+'&entry.1749047694='+thisUser.userName+gFormState; 
							approvalAddon = '?entry.1497446659='+PNHNameTempWeb+'&entry.50214576='+approvalMessage+'&entry.1749047694='+thisUser.userName+gFormState; 
							break;
						case "PLN": regionFormURL = 'https://docs.google.com/forms/d/1ycXtAppoR5eEydFBwnghhu1hkHq26uabjUu8yAlIQuI/viewform';
							newPlaceAddon = '?entry.925969794='+tempSubmitName+'&entry.1970139752='+newURLSubmit+'&entry.1749047694='+thisUser.userName+gFormState; 
							approvalAddon = '?entry.925969794='+PNHNameTempWeb+'&entry.50214576='+approvalMessage+'&entry.1749047694='+thisUser.userName+gFormState; 
							break;
						case "SCR": regionFormURL = 'https://docs.google.com/forms/d/1KZzLdlX0HLxED5Bv0wFB-rWccxUp2Mclih5QJIQFKSQ/viewform';
							newPlaceAddon = '?entry.925969794='+tempSubmitName+'&entry.1970139752='+newURLSubmit+'&entry.1749047694='+thisUser.userName+gFormState; 
							approvalAddon = '?entry.925969794='+PNHNameTempWeb+'&entry.50214576='+approvalMessage+'&entry.1749047694='+thisUser.userName+gFormState; 
							break;
						case "TX": regionFormURL = 'https://docs.google.com/forms/d/1x7VM7ofPOKVnWOaX7d70OWXpnVKf6Mkadn4dgYxx4ic/viewform';
							newPlaceAddon = '?entry.925969794='+tempSubmitName+'&entry.1970139752='+newURLSubmit+'&entry.1749047694='+thisUser.userName+gFormState; 
							approvalAddon = '?entry.925969794='+PNHNameTempWeb+'&entry.50214576='+approvalMessage+'&entry.1749047694='+thisUser.userName+gFormState; 
							break;
						case "GLR": regionFormURL = 'https://docs.google.com/forms/d/19btj-Qt2-_TCRlcS49fl6AeUT95Wnmu7Um53qzjj9BA/viewform';
							newPlaceAddon = '?entry.925969794='+tempSubmitName+'&entry.1970139752='+newURLSubmit+'&entry.1749047694='+thisUser.userName+gFormState; 
							approvalAddon = '?entry.925969794='+PNHNameTempWeb+'&entry.50214576='+approvalMessage+'&entry.1749047694='+thisUser.userName+gFormState; 
							break;
						case "SAT": regionFormURL = 'https://docs.google.com/forms/d/1bxgK_20Jix2ahbmUvY1qcY0-RmzUBT6KbE5kjDEObF8/viewform';
							newPlaceAddon = '?entry.2063110249='+tempSubmitName+'&entry.2018912633='+newURLSubmit+'&entry.1924826395='+thisUser.userName+gFormState; 
							approvalAddon = '?entry.2063110249='+PNHNameTempWeb+'&entry.123778794='+approvalMessage+'&entry.1924826395='+thisUser.userName+gFormState; 
							break;
						case "SER": regionFormURL = 'https://docs.google.com/forms/d/1jYBcxT3jycrkttK5BxhvPXR240KUHnoFMtkZAXzPg34/viewform';
							newPlaceAddon = '?entry.822075961='+tempSubmitName+'&entry.1422079728='+newURLSubmit+'&entry.1891389966='+thisUser.userName+gFormState; 
							approvalAddon = '?entry.822075961='+PNHNameTempWeb+'&entry.607048307='+approvalMessage+'&entry.1891389966='+thisUser.userName+gFormState; 
							break;
						case "TER": regionFormURL = 'https://docs.google.com/forms/d/1v7JhffTfr62aPSOp8qZHA_5ARkBPldWWJwDeDzEioR0/viewform';
							newPlaceAddon = '?entry.925969794='+tempSubmitName+'&entry.1970139752='+newURLSubmit+'&entry.1749047694='+thisUser.userName+gFormState; 
							approvalAddon = '?entry.925969794='+PNHNameTempWeb+'&entry.50214576='+approvalMessage+'&entry.1749047694='+thisUser.userName+gFormState; 
							break;
						case "NEW": regionFormURL = 'https://docs.google.com/forms/d/1UgFAMdSQuJAySHR0D86frvphp81l7qhEdJXZpyBZU6c/viewform';
							newPlaceAddon = '?entry.925969794='+tempSubmitName+'&entry.1970139752='+newURLSubmit+'&entry.1749047694='+thisUser.userName+gFormState; 
							approvalAddon = '?entry.925969794='+PNHNameTempWeb+'&entry.50214576='+approvalMessage+'&entry.1749047694='+thisUser.userName+gFormState; 
							break;
						case "NOR": regionFormURL = 'https://docs.google.com/forms/d/1iYq2rd9HRd-RBsKqmbHDIEBGuyWBSyrIHC6QLESfm4c/viewform';
							newPlaceAddon = '?entry.925969794='+tempSubmitName+'&entry.1970139752='+newURLSubmit+'&entry.1749047694='+thisUser.userName+gFormState; 
							approvalAddon = '?entry.925969794='+PNHNameTempWeb+'&entry.50214576='+approvalMessage+'&entry.1749047694='+thisUser.userName+gFormState; 
							break;
						case "MAR": regionFormURL = 'https://docs.google.com/forms/d/1PhL1iaugbRMc3W-yGdqESoooeOz-TJIbjdLBRScJYOk/viewform';
							newPlaceAddon = '?entry.925969794='+tempSubmitName+'&entry.1970139752='+newURLSubmit+'&entry.1749047694='+thisUser.userName+gFormState; 
							approvalAddon = '?entry.925969794='+PNHNameTempWeb+'&entry.50214576='+approvalMessage+'&entry.1749047694='+thisUser.userName+gFormState; 
							break;
						case "CA_EN": regionFormURL = 'https://docs.google.com/forms/d/13JwXsrWPNmCdfGR5OVr5jnGZw-uNGohwgjim-JYbSws/viewform';
							newPlaceAddon = '?entry_839085807='+tempSubmitName+'&entry_1067461077='+newURLSubmit; 
							approvalAddon = '?entry_839085807='+PNHNameTempWeb+'&entry_1125435193='+approvalMessage; 
							break;
						case "QC": regionFormURL = 'https://docs.google.com/forms/d/13JwXsrWPNmCdfGR5OVr5jnGZw-uNGohwgjim-JYbSws/viewform';
							newPlaceAddon = '?entry_839085807='+tempSubmitName+'&entry_1067461077='+newURLSubmit; 
							approvalAddon = '?entry_839085807='+PNHNameTempWeb+'&entry_1125435193='+approvalMessage; 
							break;
						default: regionFormURL = "";
					}
					newPlaceURL = regionFormURL + newPlaceAddon;
					approveRegionURL = regionFormURL + approvalAddon;	
				}
				
				// Category/Name-based Services, added to any existing services:
				var CH_DATA, CH_NAMES;
				if (countryCode === "USA") {
					CH_DATA = USA_CH_DATA;
					CH_NAMES = USA_CH_NAMES;
				} else if (countryCode === "CAN") {
					CH_DATA = USA_CH_DATA;   // #### CAN shares the USA sheet, can eventually can be split to new sheet if needed
					CH_NAMES = USA_CH_NAMES;
				}
				var CH_DATA_headers = CH_DATA[0].split("|");
				var CH_DATA_keys = CH_DATA[1].split("|");
				var CH_DATA_list = CH_DATA[2].split("|");
				
				var servHeaders = [], servKeys = [], servList = [], servHeaderCheck;
				for (var jjj=0; jjj<CH_DATA_headers.length; jjj++) {
					servHeaderCheck = CH_DATA_headers[jjj].match(/^ps_/i);  // if it's a service header
					if (servHeaderCheck) { 
						servHeaders.push(jjj); 
						servKeys.push(CH_DATA_keys[jjj]); 
						servList.push(CH_DATA_list[jjj]); 
					}
				}
					
				var CH_DATA_Temp;
				for (var iii=0; iii<CH_NAMES.length; iii++) {
					if (newCategories.indexOf(CH_NAMES[iii]) > -1 ) {
						CH_DATA_Temp = CH_DATA[iii].split("|");
						for (var psix=0; psix<servHeaders.length; psix++) {
							if ( !bannServ[servKeys[psix]].pnhOverride ) {
								if (CH_DATA_Temp[servHeaders[psix]] === '1') {  // These are automatically added to all countries/regions (if auto setting is on)
									bannServ[servKeys[psix]].active = true;
									if ( hpMode.harmFlag && $("#WMEPH-EnableServices" + devVersStr).prop('checked')  ) {
										// Automatically enable new services
										bannServ[servKeys[psix]].actionOn();
									}
								} else if (CH_DATA_Temp[servHeaders[psix]] === '2') {  // these are never automatically added but shown
									bannServ[servKeys[psix]].active = true;
								} else if (CH_DATA_Temp[servHeaders[psix]] !== '') {  // check for state/region auto add
									bannServ[servKeys[psix]].active = true;
									if ( hpMode.harmFlag && $("#WMEPH-EnableServices" + devVersStr).prop('checked')) {
										var servAutoRegion = CH_DATA_Temp[servHeaders[psix]].replace(/,[^A-za-z0-9]*/g, ",").split(",");
										// if the sheet data matches the state, region, or username then auto add
										if ( servAutoRegion.indexOf(state2L) > -1 || servAutoRegion.indexOf(region) > -1 || servAutoRegion.indexOf(thisUser.userName) > -1 ) {
											bannServ[servKeys[psix]].actionOn();
										}
									}
								}
							}
						}
					}
				}
				
				// PNH specific Services:
				
				
				
				// ### remove unnecessary parent categories (Restaurant doesn't need food and drink)
				if ( hpMode.harmFlag && newCategories.indexOf('FOOD_AND_DRINK') > -1 ) {
					if (newCategories.indexOf('RESTAURANT') > -1 || newCategories.indexOf('FAST_FOOD') > -1 ) {
						newCategories.splice(newCategories.indexOf('FOOD_AND_DRINK'),1);  // remove Food/Drink Cat
						W.model.actionManager.add(new UpdateObject(item, { categories: newCategories }));
						fieldUpdateObject.categories='#dfd';
					}
				}
			
			
				// Area vs. Place checking, Category locking, and category-based messaging
				var pvaPoint, pvaArea, regPoint, regArea, pc_message, pc_lockTemp, pc_rare, pc_parent;
				for (iii=0; iii<CH_NAMES.length; iii++) {
					if (newCategories.indexOf(CH_NAMES[iii]) === 0 ) {  // Primary category
						CH_DATA_Temp = CH_DATA[iii].split("|");
						// CH_DATA_headers
						//pc_point	pc_area	pc_regpoint	pc_regarea	pc_lock1	pc_lock2	pc_lock3	pc_lock4	pc_lock5	pc_rare	pc_parent	pc_message
						pvaPoint = CH_DATA_Temp[CH_DATA_headers.indexOf('pc_point')];
						pvaArea = CH_DATA_Temp[CH_DATA_headers.indexOf('pc_area')];
						regPoint = CH_DATA_Temp[CH_DATA_headers.indexOf('pc_regpoint')].replace(/,[^A-za-z0-9]*/g, ",").split(",");
						regArea = CH_DATA_Temp[CH_DATA_headers.indexOf('pc_regarea')].replace(/,[^A-za-z0-9]*/g, ",").split(",");
						if (regPoint.indexOf(state2L) > -1 || regPoint.indexOf(region) > -1 || regPoint.indexOf(countryCode) > -1) {
							pvaPoint = '1';
							pvaArea = '';
						} else if (regArea.indexOf(state2L) > -1 || regArea.indexOf(region) > -1 || regArea.indexOf(countryCode) > -1) {
							pvaPoint = '';
							pvaArea = '1';
						}
						if (item.isPoint()) {
							if (pvaPoint === '' || pvaPoint === '0') {
								bannButt.areaNotPoint.active = true;
								if (currentWL.areaNotPoint) {
									bannButt.areaNotPoint.WLactive = false;
								} else {
									lockOK = false;
								}
							} else if (pvaPoint === '2') {
								bannButt.areaNotPointLow.active = true;
								if (currentWL.areaNotPoint) {
									bannButt.areaNotPointLow.WLactive = false;
								}
							} else if (pvaPoint === '3') {
								bannButt.areaNotPointMid.active = true;
								if (currentWL.areaNotPoint) {
									bannButt.areaNotPointMid.WLactive = false;
								} else {
									lockOK = false;
								}
							} else if (pvaPoint === 'hosp' && newName.toUpperCase().match(/\bER\b/g) === null && newName.toUpperCase().match(/\bEMERGENCY ROOM\b/g) === null ) {
								// hopsitals get flagged high unless ER or Emergency Room in the name
								bannButt.areaNotPoint.active = true;
								if (currentWL.areaNotPoint) {
									bannButt.areaNotPoint.WLactive = false;
								} else {
									lockOK = false;
								}
							}
						} else if (item.is2D()) {
							if (pvaArea === '' || pvaArea === '0') {
								bannButt.pointNotArea.active = true;
								if (currentWL.pointNotArea) {
									bannButt.pointNotArea.WLactive = false;
								} else {
									lockOK = false;
								}
							} else if (pvaArea === '2') {
								bannButt.pointNotAreaLow.active = true;
								if (currentWL.pointNotArea) {
									bannButt.pointNotAreaLow.WLactive = false;
								}
							} else if (pvaArea === '3') {
								bannButt.pointNotAreaMid.active = true;
								if (currentWL.pointNotArea) {
									bannButt.pointNotAreaMid.WLactive = false;
								} else {
									lockOK = false;
								}
							}
						}
						// display any messaged regarding the category
						pc_message = CH_DATA_Temp[CH_DATA_headers.indexOf('pc_message')];
						if (pc_message !== '0' && pc_message !== '' && pc_message === null) {
							bannButt.pnhCatMess.active = true;
							bannButt.pnhCatMess.message = pc_message;
						}
						// Unmapped categories
						pc_rare	 = CH_DATA_Temp[CH_DATA_headers.indexOf('pc_rare')].replace(/,[^A-Za-z0-9}]+/g, ",").split(',');
						if (pc_rare.indexOf(state2L) > -1 || pc_rare.indexOf(region) > -1 || pc_rare.indexOf(countryCode) > -1) {
								bannButt.unmappedRegion.active = true;
								if (currentWL.unmappedRegion) {
									bannButt.unmappedRegion.WLactive = false;
								} else {
									lockOK = false;
								}
						}
						// Parent Category
						pc_parent	 = CH_DATA_Temp[CH_DATA_headers.indexOf('pc_parent')].replace(/,[^A-Za-z0-9}]+/g, ",").split(',');
						if (pc_parent.indexOf(state2L) > -1 || pc_parent.indexOf(region) > -1 || pc_parent.indexOf(countryCode) > -1) {
								bannButt.parentCategory.active = true;
								if (currentWL.parentCategory) {
									bannButt.parentCategory.WLactive = false;
								}
						}
						// Set lock level
						for (var lockix=1; lockix<6; lockix++) {
							pc_lockTemp = CH_DATA_Temp[CH_DATA_headers.indexOf('pc_lock'+lockix)].replace(/,[^A-Za-z0-9}]+/g, ",").split(',');
							if (pc_lockTemp.indexOf(state2L) > -1 || pc_lockTemp.indexOf(region) > -1 || pc_lockTemp.indexOf(countryCode) > -1) {
								defaultLockLevel = lockix - 1;  // Offset by 1 since lock ranks start at 0
								break;
							}
						}
					break;  // If only looking at primary category, then break
					}
				}
				
				var anpNone = collegeAbbreviations.split('|'), anpNoneRE;
				for (var cii=0; cii<anpNone.length; cii++) {
					anpNoneRE = new RegExp('\\b'+anpNone[cii]+'\\b', 'g');
					if ( newName.match( anpNoneRE) !== null ) {
						bannButt.areaNotPointLow.severity = 0;
						bannButt.areaNotPointLow.WLactive = false;
					}
				}
				
				
				
				// Check for missing hours field 
				if (item.attributes.openingHours.length === 0) {  // if no hours...
					if (!containsAny(newCategories,["STADIUM_ARENA","CEMETERY","MILITARY","TRANSPORTATION","FERRY_PIER","SUBWAY_STATION",
					"BRIDGE","TUNNEL","JUNCTION_INTERCHANGE","ISLAND","SEA_LAKE_POOL","RIVER_STREAM","FOREST_GROVE","CANAL","SWAMP_MARSH","DAM"]) ) {
						bannButt.noHours.active = true;
						if (currentWL.noHours) {
							bannButt.noHours.WLactive = false;
						}
						if ( containsAny(newCategories,["SCHOOL","CONVENTIONS_EVENT_CENTER","CAMPING_TRAILER_PARK","COTTAGE_CABIN","COLLEGE_UNIVERSITY","GOLF_COURSE","SPORTS_COURT","MOVIE_THEATER","SHOPPING_CENTER","RELIGIOUS_CENTER","PARKING_LOT","PARK","PLAYGROUND","AIRPORT","FIRE_DEPARTMENT","POLICE_STATION","SEAPORT_MARINA_HARBOR","FARM"]) ) {
							bannButt.noHours.severity = 0;
							bannButt.noHours.WLactive = false;
						}
					}
					if (hpMode.hlFlag && $("#WMEPH-DisableHoursHL" + devVersStr).prop('checked')) {
						bannButt.noHours.severity = 0;
					}
				} else if (item.attributes.openingHours.length === 1) {  // if one set of hours exist, check for partial 24hrs setting
					if (item.attributes.openingHours[0].days.length < 7 && item.attributes.openingHours[0].fromHour==='00:00' && 
					(item.attributes.openingHours[0].toHour==='00:00' || item.attributes.openingHours[0].toHour==='23:59' ) ) {
						bannButt.mismatch247.active = true;
					}
				}
				if ( !checkHours(item.attributes.openingHours) ) {
					//phlogdev('Overlapping hours');
					bannButt.hoursOverlap.active = true;
					bannButt.noHours.active = true;
				} else {
					var tempHours = item.attributes.openingHours.slice(0);
					for ( var ohix=0; ohix<item.attributes.openingHours.length; ohix++ ) {
						if ( tempHours[ohix].days.length === 2 && tempHours[ohix].days[0] === 1 && tempHours[ohix].days[1] === 0) {
							// separate hours
							phlogdev('Correcting M-S entry...');
							tempHours.push({days: [0], fromHour: tempHours[ohix].fromHour, toHour: tempHours[ohix].toHour});
							tempHours[ohix].days = [1];
							W.model.actionManager.add(new UpdateObject(item, { openingHours: tempHours }));
						}
					}
				}
				
				// Highlight 24/7 button if hours are set that way, and add button for all places
				if ( item.attributes.openingHours.length === 1 && item.attributes.openingHours[0].days.length === 7 && item.attributes.openingHours[0].fromHour === '00:00' && item.attributes.openingHours[0].toHour ==='00:00' ) {
					bannServ.add247.checked = true;
				}
				bannServ.add247.active = true;
				
				// URL updating
				var updateURL = true;
				if (newURL !== item.attributes.url && newURL !== "" && newURL !== "0") {
					if ( PNHNameRegMatch && item.attributes.url !== null && item.attributes.url !== '' ) {  // for cases where there is an existing URL in the WME place, and there is a PNH url on queue:
						var newURLTemp = normalizeURL(newURL,true);  // normalize
						var itemURL = normalizeURL(item.attributes.url,true);
						newURLTemp = newURLTemp.replace(/^www\.(.*)$/i,'$1');  // strip www
						var itemURLTemp = itemURL.replace(/^www\.(.*)$/i,'$1');  // strip www
						if ( newURLTemp !== itemURLTemp ) { // if formatted URLs don't match, then alert the editor to check the existing URL
							bannButt.longURL.active = true;
							if (currentWL.longURL) {
								bannButt.longURL.WLactive = false;
							}
							bannButt.PlaceWebsite.value = "Place Website";
							if (hpMode.harmFlag && updateURL && itemURL !== item.attributes.url) {  // Update the URL
								phlogdev("URL formatted");
								W.model.actionManager.add(new UpdateObject(item, { url: itemURL }));
								fieldUpdateObject.url='#dfd';
							}
							updateURL = false;
							tempPNHURL = newURL;
						}
					}
					if (hpMode.harmFlag && updateURL && newURL !== item.attributes.url) {  // Update the URL
						phlogdev("URL updated");
						W.model.actionManager.add(new UpdateObject(item, { url: newURL }));
						fieldUpdateObject.url='#dfd';
					}
				}
				
				// Phone formatting		
				var outputFormat = "({0}) {1}-{2}";
				if ( containsAny(["CA","CO"],[region,state2L]) && (/^\d{3}-\d{3}-\d{4}$/.test(item.attributes.phone))) {
					outputFormat = "{0}-{1}-{2}";
				} else if (region === "SER" && thisUser.userName === 't0cableguy') {
					outputFormat = "{0}-{1}-{2}";
				} else if (region === "SER" && !(/^\(\d{3}\) \d{3}-\d{4}$/.test(item.attributes.phone))) {
					outputFormat = "{0}-{1}-{2}";
				} else if (region === "GLR") {
					outputFormat = "{0}-{1}-{2}";
				} else if (state2L === "NV") {
					outputFormat = "{0}-{1}-{2}";
				} else if (countryCode === "CAN") {
					outputFormat = "+1-{0}-{1}-{2}";
				}
				newPhone = normalizePhone(item.attributes.phone, outputFormat, 'existing');
				
				// Check if valid area code  #LOC# USA and CAN only
				if (countryCode === "USA" || countryCode === "CAN") {
					if (newPhone !== null && newPhone.match(/[2-9]\d{2}/) !== null) {
						var areaCode = newPhone.match(/[2-9]\d{2}/)[0];
						if ( areaCodeList.indexOf(areaCode) === -1 ) {
							bannButt.badAreaCode.active = true;
							if (currentWL.aCodeWL) {
								bannButt.badAreaCode.WLactive = false;
							}
						}
					}
				}
				if (hpMode.harmFlag && newPhone !== item.attributes.phone) {
					phlogdev("Phone updated");
					W.model.actionManager.add(new UpdateObject(item, {phone: newPhone}));
					fieldUpdateObject.phone='#dfd';
				}
			
				// Post Office cat check
				if (newCategories.indexOf("POST_OFFICE") > -1 && countryCode === "USA" ) {
					var USPSStrings = ['USPS','POSTOFFICE','USPOSTALSERVICE','UNITEDSTATESPOSTALSERVICE','USPO','USPOSTOFFICE','UNITEDSTATESPOSTOFFICE','UNITEDSTATESPOSTALOFFICE'];
					var USPSMatch = false;
					for (var uspix=0; uspix<USPSStrings.length; uspix++) {
						if ( newName.toUpperCase().replace(/[ \/\-\.]/g,'').indexOf(USPSStrings[uspix]) > -1 ) {  // If it already has a USPS type term in the name, don't add the option
							USPSMatch = true;
							customStoreFinderURL = "https://tools.usps.com/go/POLocatorAction.action";
							customStoreFinder = true;
							if (hpMode.harmFlag && region === 'SER' && item.attributes.aliases.indexOf("United States Postal Service") === -1) {
								W.model.actionManager.add(new UpdateObject(item, { aliases: ["United States Postal Service"], url: 'www.usps.com' }));
								fieldUpdateObject.aliases='#dfd';
								fieldUpdateObject.url='#dfd';
								phlogdev('USPS alt name added');
							}
							if ( newName.indexOf(' - ') === -1 && newName.indexOf(': ') === -1 ) {
								bannButt.formatUSPS.active = true;
							}
							break;
						}
					}
					if (!USPSMatch) {
						lockOK = false;
						bannButt.isitUSPS.active = true;
						bannButt.catPostOffice.active = true;
					}
				}  // END Post Office category check
				
			}  // END if (!residential && has name)
			
			// Name check
			if ( !item.attributes.residential && ( !item.attributes.name || item.attributes.name.replace(/[^A-Za-z0-9]/g,'').length === 0 )) {
				if ( 'ISLAND|FOREST_GROVE|SEA_LAKE_POOL|RIVER_STREAM|CANAL'.split('|').indexOf(item.attributes.categories[0]) === -1 ) {
					bannButt.nameMissing.active = true;
					lockOK = false;
				}
			}
					
			// House number check
			if (!item.attributes.houseNumber || item.attributes.houseNumber.replace(/\D/g,'').length === 0 ) {
				if ( 'BRIDGE|ISLAND|FOREST_GROVE|SEA_LAKE_POOL|RIVER_STREAM|CANAL|DAM|TUNNEL'.split('|').indexOf(item.attributes.categories[0]) === -1 ) {
					if (state2L === 'PR') {
						bannButt.hnMissing.active = true;
						bannButt.hnMissing.severity = 0;
					} else {
						bannButt.hnMissing.active = true;
						if (currentWL.HNWL) {
							bannButt.hnMissing.WLactive = false;
						} else {
							lockOK = false;
						}
					}
				}
			} else if (item.attributes.houseNumber) {
				var hnOK = false, updateHNflag = false;
				var hnTemp = item.attributes.houseNumber.replace(/[^\d]/g, '');  // Digits only
				var hnTempDash = item.attributes.houseNumber.replace(/[^\d-]/g, '');  // Digits and dashes only
				if ( hnTemp < 1000000 && state2L === "NY" && addr.city.name === 'Queens' && hnTempDash.match(/^\d{1,4}-\d{1,4}$/g) !== null ) {
					updateHNflag = true;
					hnOK = true;
				}
				if (hnTemp === item.attributes.houseNumber && hnTemp < 1000000) {  //  general check that HN is 6 digits or less, & that it is only [0-9]
					hnOK = true;
				}
				if (state2L === "HI" && hnTempDash.match(/^\d{1,2}-\d{1,4}$/g) !== null) {
					if (hnTempDash === hnTempDash.match(/^\d{1,2}-\d{1,4}$/g)[0]) {
						hnOK = true;
					}
				}
				
				if (!hnOK) {
					bannButt.hnNonStandard.active = true;
					if (currentWL.hnNonStandard) {
						bannButt.hnNonStandard.WLactive = false;
					} else {
						lockOK = false;
					}
				}
				if ( updateHNflag ) {
					bannButt.hnDashRemoved.active = true;
					if (hpMode.harmFlag) {
						W.model.actionManager.add(new UpdateObject(item, { houseNumber: hnTemp }));
						fieldUpdateObject.address='#dfd';
					} else if (hpMode.hlFlag) {
						if (item.attributes.residential) {
							bannButt.hnDashRemoved.severity = 3;
						} else {
							bannButt.hnDashRemoved.severity = 1;
						}
					}
				}
			}

			if ((!addr.street || addr.street.isEmpty) && 'BRIDGE|ISLAND|FOREST_GROVE|SEA_LAKE_POOL|RIVER_STREAM|CANAL|DAM|TUNNEL'.split('|').indexOf(item.attributes.categories[0]) === -1 ) {
				bannButt.streetMissing.active = true;
				lockOK = false;
			}
			if ((!addr.city || addr.city.isEmpty) && 'BRIDGE|ISLAND|FOREST_GROVE|SEA_LAKE_POOL|RIVER_STREAM|CANAL|DAM|TUNNEL'.split('|').indexOf(item.attributes.categories[0]) === -1 ) {
				bannButt.cityMissing.active = true;
				if (item.attributes.residential && hpMode.hlFlag) {
					bannButt.cityMissing.severity = 1;
				}
				lockOK = false;
			}
			
			// CATEGORY vs. NAME checks
			var testName = newName.toLowerCase().replace(/[^a-z]/g,' ');
			var testNameWords = testName.split(' ');
			// Hopsital vs. Name filter
			if (newCategories.indexOf("HOSPITAL_MEDICAL_CARE") > -1 && hospitalPartMatch.length > 0) {
				var hpmMatch = false;
				if (containsAny(testNameWords,animalFullMatch)) {
					bannButt.changeHMC2PetVet.active = true;
					if (currentWL.changeHMC2PetVet) {
						bannButt.changeHMC2PetVet.WLactive = false;
					} else {
						lockOK = false;
					}
					bannButt.pnhCatMess.active = false;
				} else if (containsAny(testNameWords,hospitalFullMatch)) {
					bannButt.changeHMC2Office.active = true;
					if (currentWL.changeHMC2Office) {
						bannButt.changeHMC2Office.WLactive = false;
					} else {
						lockOK = false;
					}
					bannButt.pnhCatMess.active = false;
				} else {
					for (var apmix=0; apmix<animalPartMatch.length; apmix++) {
						if (testName.indexOf(animalPartMatch[apmix]) > -1) {
							bannButt.changeHMC2PetVet.active = true;
							if (currentWL.changeHMC2PetVet) {
								bannButt.changeHMC2PetVet.WLactive = false;
							} else {
								lockOK = false;
							}
							hpmMatch = true;  // don't run the human check if animal is found.
							bannButt.pnhCatMess.active = false;
							break;
						}
					}
					if (!hpmMatch) {  // don't run the human check if animal is found.
						for (var hpmix=0; hpmix<hospitalPartMatch.length; hpmix++) {
							if (testName.indexOf(hospitalPartMatch[hpmix]) > -1) {
								bannButt.changeHMC2Office.active = true;
								if (currentWL.changeHMC2Office) {
									bannButt.changeHMC2Office.WLactive = false;
								} else {
									lockOK = false;
								}
								bannButt.pnhCatMess.active = false;
								break;
							}
						}
					}
				}
			}  // END HOSPITAL/Name check
			
			// School vs. Name filter
			if (newCategories.indexOf("SCHOOL") > -1 && schoolPartMatch.length>0) {
				if (containsAny(testNameWords,schoolFullMatch)) {
					bannButt.changeSchool2Offices.active = true;
					if (currentWL.changeSchool2Offices) {
						bannButt.changeSchool2Offices.WLactive = false;
					} else {
						lockOK = false;
					}
					bannButt.pnhCatMess.active = false;
				} else {
					for (var schix=0; schix<schoolPartMatch.length; schix++) {
						if (testName.indexOf(schoolPartMatch[schix]) > -1) {
							bannButt.changeSchool2Offices.active = true;
							if (currentWL.changeSchool2Offices) {
								bannButt.changeSchool2Offices.WLactive = false;
							} else {
								lockOK = false;
							}
							bannButt.pnhCatMess.active = false;
							break;
						}
					}
				}
			}  // END SCHOOL/Name check
			
			// Some cats don't need PNH messages and url/phone severities
			if ( 'BRIDGE|FOREST_GROVE|DAM|TUNNEL|CEMETERY'.split('|').indexOf(item.attributes.categories[0]) > -1 ) {
				bannButt.NewPlaceSubmit.active = false;
				bannButt.phoneMissing.severity = 0;
				bannButt.phoneMissing.WLactive = false;
				bannButt.urlMissing.severity = 0;
				bannButt.urlMissing.WLactive = false;
			}
			// Some cats don't need PNH messages and url/phone messages
			if ( 'ISLAND|SEA_LAKE_POOL|RIVER_STREAM|CANAL'.split('|').indexOf(item.attributes.categories[0]) > -1 ) {
				bannButt.NewPlaceSubmit.active = false;
				bannButt.phoneMissing.active = false;
				bannButt.urlMissing.active = false;
			}
			
			
			// *** Rest Area parsing
			// check rest area name against standard formats or if has the right categories
			if ( (newName.toLowerCase().indexOf('rest area') > -1 || newName.toLowerCase().indexOf('rest stop') > -1 || newName.toLowerCase().indexOf('service plaza') > -1) ||
			( categories.indexOf('TRANSPORTATION') > -1 && categories.indexOf('SCENIC_LOOKOUT_VIEWPOINT') > -1 ) ) {
				if ( categories.indexOf('TRANSPORTATION') === 0 && categories.indexOf('SCENIC_LOOKOUT_VIEWPOINT') === 1) {
					if ( item.isPoint() ) {  // needs to be area point
						bannButt.areaNotPoint.active = true;
					}
					bannButt.pointNotArea.active = false;
					bannButt.unmappedRegion.active = false;
					
					if ( categories.indexOf('GAS_STATION') > -1 ) {
						bannButt.restAreaGas.active = true;				
					}
					if ( newName.match(/^Rest Area.* \- /) === null ) {
						bannButt.restAreaName.active = true;
						if (currentWL.restAreaName) {
							bannButt.restAreaName.WLactive = false;
						}
					} else {
						newName = newName.replace(/Mile/i, 'mile');
						if (newName !== item.attributes.name) {  // if they are not equal
							W.model.actionManager.add(new UpdateObject(item, { name: newName }));
							fieldUpdateObject.name='#dfd';
							phlogdev('Lower case "mile"');
						}
					}
					
					// switch to rest area wiki button
					bannButt2.restAreaWiki.active = true;
					bannButt2.placesWiki.active = false;
					
					// missing address ok 
					bannButt.streetMissing.active = false;
					bannButt.cityMissing.active = false;
					bannButt.hnMissing.active = false;
					bannButt.urlMissing.severity = 0;
					bannButt.phoneMissing.severity = 0;
					//assembleBanner();
					
					
				} else {
					bannButt.restAreaSpec.active = true;
					if (currentWL.restAreaName) {
						bannButt.restAreaSpec.WLactive = false;
					} else {
						bannButt.pointNotArea.active = false;
					}
				}
			}
			
			// update Severity for banner messages
			for (var bannKey in bannButt) {
				if (bannButt.hasOwnProperty(bannKey) && bannButt[bannKey].active) {
					severityButt = Math.max(bannButt[bannKey].severity, severityButt);
				}
			}
			
			if (hpMode.harmFlag) {
				phlogdev('Severity: '+severityButt+'; lockOK: '+lockOK);
			}
			// Place locking
			// final formatting of desired lock levels
			var hlLockFlag = false, levelToLock;
			if (PNHLockLevel !== -1 && hpMode.harmFlag) {
				phlogdev('PNHLockLevel: '+PNHLockLevel);
				levelToLock = PNHLockLevel;
			} else {
				levelToLock = defaultLockLevel;
			}
			if (region === "SER") {
				if (newCategories.indexOf("COLLEGE_UNIVERSITY") > -1 && newCategories.indexOf("PARKING_LOT") > -1) {
					levelToLock = lockLevel4;
				} else if ( item.isPoint() && newCategories.indexOf("COLLEGE_UNIVERSITY") > -1 && newCategories.indexOf("HOSPITAL_MEDICAL_CARE") === -1 ) {
					levelToLock = lockLevel4;
				}
			}
			
			if (levelToLock > (usrRank - 1)) {levelToLock = (usrRank - 1);}  // Only lock up to the user's level
			if ( lockOK && severityButt < 2) {
				// Campus project exceptions
				if ( item.attributes.lockRank < levelToLock) {
					if (hpMode.harmFlag) {
						phlogdev("Venue locked!");
						W.model.actionManager.add(new UpdateObject(item, { lockRank: levelToLock }));
						fieldUpdateObject.lockRank='#dfd';
					} else if (hpMode.hlFlag) {
						hlLockFlag = true;
					}
				}
				bannButt.placeLocked.active = true;
			}
			
			//IGN check
			if (!item.attributes.residential && item.attributes.updatedBy && W.model.users.get(item.attributes.updatedBy) && 
			W.model.users.get(item.attributes.updatedBy).userName && W.model.users.get(item.attributes.updatedBy).userName.match(/^ign_/i) !== null) {
				bannButt.ignEdited.active = true;
			}
			
			//waze_maint_bot check
			if (!item.attributes.residential && item.attributes.updatedBy && W.model.users.get(item.attributes.updatedBy) && 
			W.model.users.get(item.attributes.updatedBy).userName && W.model.users.get(item.attributes.updatedBy).userName.match(/^waze-maint-bot/i) !== null) {
				bannButt.wazeBot.active = true;
			}
			
			// RPP Locking option for R3+
			if (item.attributes.residential) {   
				if (devUser || betaUser || usrRank > 2) {  // Allow residential point locking by R3+
					RPPLockString = 'Lock at <select id="RPPLockLevel">';
					var ddlSelected = false;
					for (var llix=1; llix<6; llix++) {
						if (llix < usrRank+1) {
							if ( !ddlSelected && (defaultLockLevel === llix - 1 || llix === usrRank) ) {
								RPPLockString += '<option value="'+llix+'" selected="selected">'+llix+'</option>';
								ddlSelected = true;
							} else {
								RPPLockString += '<option value="'+llix+'">'+llix+'</option>';
							}
						}
					}
					RPPLockString += '</select>';
					bannButt.lockRPP.message = 'Current lock: '+ (parseInt(item.attributes.lockRank)+1) +'. '+RPPLockString+' ?';
					bannButt.lockRPP.active = true;
				}
			}
			
			// Turn off unnecessary buttons
			if (item.attributes.categories.indexOf('PHARMACY') > -1) {
				bannButt.addPharm.active = false;
			}
			if (item.attributes.categories.indexOf('SUPERMARKET_GROCERY') > -1) {
				bannButt.addSuper.active = false;
			}
			
			// Final alerts for non-severe locations
			if ( !item.attributes.residential && severityButt < 3) {
				var nameShortSpace = newName.toUpperCase().replace(/[^A-Z \']/g, '');
				if ( nameShortSpace.indexOf("'S HOUSE") > -1 || nameShortSpace.indexOf("'S HOME") > -1 || nameShortSpace.indexOf("'S WORK") > -1) {
					if ( !containsAny(newCategories,['RESTAURANT','DESSERT','BAR']) && !PNHNameRegMatch ) {
						bannButt.resiTypeNameSoft.active = true; 
					}
				}
				if ( ["HOME","MY HOME","HOUSE","MY HOUSE","PARENTS HOUSE","CASA","MI CASA","WORK","MY WORK","MY OFFICE","MOMS HOUSE","DADS HOUSE","MOM","DAD"].indexOf( nameShortSpace ) > -1 ) {
					bannButt.resiTypeName.active = true;
					if (currentWL.resiTypeName) {
						bannButt.resiTypeName.WLactive = false;
					}
					bannButt.resiTypeNameSoft.active = false;
				}
				if ( item.attributes.description.toLowerCase().indexOf('google') > -1 || item.attributes.description.toLowerCase().indexOf('yelp') > -1 ) {
					bannButt.suspectDesc.active = true;
					if (currentWL.suspectDesc) {
						bannButt.suspectDesc.WLactive = false;
					}
				}
				
				// ### Review the ones below here
				/*
				if (newName === "UPS") {
					sidebarMessageOld.push("If this is a 'UPS Store' location, please change the name to The UPS Store and run the script again.");
					severity = Math.max(1, severity);
				}
				if (newName === "FedEx") {
					sidebarMessageOld.push("If this is a FedEx Office location, please change the name to FedEx Office and run the script again.");
					severity = Math.max(1, severity);
				}
				*/
				
			}
			
			// Return severity for highlighter (no dupe run))
			if (hpMode.hlFlag) {
				// get severities from the banners
				severityButt = 0;
				for ( var tempKey in bannButt ) {  
					if ( bannButt.hasOwnProperty(tempKey) && bannButt[tempKey].hasOwnProperty('active') && bannButt[tempKey].active ) {  //  If the particular message is active
						if ( bannButt[tempKey].hasOwnProperty('WLactive') ) {
							if ( bannButt[tempKey].WLactive ) {  // If there's a WL option, enable it
								severityButt = Math.max(bannButt[tempKey].severity, severityButt);
//								if ( bannButt[tempKey].severity > 0) {
//									phlogdev('Issue with '+item.attributes.name+': '+tempKey);
//									phlogdev('Severity: '+bannButt[tempKey].severity);
//								}
							}
						} else {
							severityButt = Math.max(bannButt[tempKey].severity, severityButt);
//							if ( bannButt[tempKey].severity > 0) {
//								phlogdev('Issue with '+item.attributes.name+': '+tempKey);
//								phlogdev('Severity: '+bannButt[tempKey].severity);
//							}
						} 
					}
					
				}
				//phlogdev('calculated in harmGo: ' +severityButt + '; ' + item.attributes.name);
				
				// Special case flags
				if ( item.attributes.categories.indexOf("PARKING_LOT") > -1 && item.attributes.lockRank < levelToLock ) {
					severityButt = 4;
				}
				if ( item.isPoint() && item.attributes.lockRank < levelToLock && (item.attributes.categories.indexOf("HOSPITAL_MEDICAL_CARE") > -1 || item.attributes.categories.indexOf("GAS_STATION") > -1) ) {
					severityButt = 5;
				}
				
				if ( severityButt === 0 && hlLockFlag ) {
					severityButt = 'lock';
				}
				if ( severityButt === 1 && hlLockFlag ) {
					severityButt = 'lock1';
				}
				if ( item.attributes.adLocked ) {
					severityButt = 'adLock';
				}
				
				return severityButt;
			}
			
			// *** Below here is for harmonization only.  HL ends in previous step.
			
			// Run nearby duplicate place finder function
			var dupeBannMess = '', dupesFound = false;
			dupeHNRangeList = [];
			bannDupl = {};
			if (newName.replace(/[^A-Za-z0-9]/g,'').length > 0 && !item.attributes.residential) {
				if ( $("#WMEPH-DisableDFZoom" + devVersStr).prop('checked') ) {  // don't zoom and pan for results outside of FOV
					duplicateName = findNearbyDuplicate(newName, newAliases, item, false);
				} else {
					duplicateName = findNearbyDuplicate(newName, newAliases, item, true);
				}
				if (duplicateName[1]) {
					bannButt.overlapping.active = true;
				}
				duplicateName = duplicateName[0];
				if (duplicateName.length > 0) {
					if (duplicateName.length+1 !== dupeIDList.length && devUser) {  // If there's an issue with the data return, allow an error report
						if (confirm('WMEPH: Dupefinder Error!\nClick OK to report this') ) {  // if the category doesn't translate, then pop an alert that will make a forum post to the thread
							forumMsgInputs = {
								subject: 'Re: WMEPH Bug report',
								message: 'Script version: ' + WMEPHversion + devVersStr + '\nPermalink: ' + placePL + '\nPlace name: ' + item.attributes.name + '\nCountry: ' + addr.country.name + '\n--------\nDescribe the error:\nDupeID mismatch with dupeName list',
							};
							WMEPH_errorReport(forumMsgInputs);
						}
					} else { 
						dupesFound = true;
						dupeBannMess = 'Possible duplicate: ';
						if (duplicateName.length > 1) {
							dupeBannMess = 'Possible duplicates: ';
						}
						for (var ijx=1; ijx<duplicateName.length+1; ijx++) {
							bannDupl[dupeIDList[ijx]] = {
								active: true, severity: 2, message: "&nbsp-- " + duplicateName[ijx-1],
								WLactive: false, WLvalue: wlButtText, WLtitle: 'Whitelist Duplicate',
								WLaction: function(dID) {
									wlKeyName = 'dupeWL';
									if (!venueWhitelist.hasOwnProperty(itemID)) {  // If venue is NOT on WL, then add it.
										venueWhitelist[itemID] = { dupeWL: [] };
									}
									if (!venueWhitelist[itemID].hasOwnProperty(wlKeyName)) {  // If dupeWL key is not in venue WL, then initialize it.
										venueWhitelist[itemID][wlKeyName] = [];
									}
									venueWhitelist[itemID].dupeWL.push(dID);  // WL the id for the duplicate venue
									venueWhitelist[itemID].dupeWL = uniq(venueWhitelist[itemID].dupeWL);
									// Make an entry for the opposite item
									if (!venueWhitelist.hasOwnProperty(dID)) {  // If venue is NOT on WL, then add it.
										venueWhitelist[dID] = { dupeWL: [] };
									}
									if (!venueWhitelist[dID].hasOwnProperty(wlKeyName)) {  // If dupeWL key is not in venue WL, then initialize it.
										venueWhitelist[dID][wlKeyName] = [];
									}
									venueWhitelist[dID].dupeWL.push(itemID);  // WL the id for the duplicate venue
									venueWhitelist[dID].dupeWL = uniq(venueWhitelist[dID].dupeWL);
									saveWL_LS(compressedWLLS);  // Save the WL to local storage
									WMEPH_WLCounter();
									bannButt2.clearWL.active = true;
									bannDupl[dID].active = false;
									harmonizePlaceGo(item,'harmonize');
								}
							};
							if ( venueWhitelist.hasOwnProperty(itemID) && venueWhitelist[itemID].hasOwnProperty('dupeWL') && venueWhitelist[itemID].dupeWL.indexOf(dupeIDList[ijx]) > -1 ) {  // if the dupe is on the whitelist then remove it from the banner
								bannDupl[dupeIDList[ijx]].active = false;
							} else {  // Otherwise, activate the WL button
								bannDupl[dupeIDList[ijx]].WLactive = true;
							}
						}  // END loop for duplicate venues
					}
				}
			}
			
			// Check HN range (this depends on the returned dupefinder data, so has to run after it)
			if (dupeHNRangeList.length > 3) {
				var dhnix, dupeHNRangeListSorted = [];
				sortWithIndex(dupeHNRangeDistList);
				for (dhnix = 0; dhnix < dupeHNRangeList.length; dhnix++) {
					dupeHNRangeListSorted.push(dupeHNRangeList[ dupeHNRangeDistList.sortIndices[dhnix] ]);
				}
				// Calculate HN/distance ratio with other venues
				// var sumHNRatio = 0;
				var arrayHNRatio = [];
				for (dhnix = 0; dhnix < dupeHNRangeListSorted.length; dhnix++) {
					arrayHNRatio.push(Math.abs( (parseInt(item.attributes.houseNumber) - dupeHNRangeListSorted[dhnix]) / dupeHNRangeDistList[dhnix] ));
				}
				sortWithIndex(arrayHNRatio);
				// Examine either the median or the 8th index if length is >16
				var arrayHNRatioCheckIX = Math.min(Math.round(arrayHNRatio.length/2), 8);  
				if (arrayHNRatio[arrayHNRatioCheckIX] > 1.4) {
					bannButt.HNRange.active = true;
					if (currentWL.HNRange) {
						bannButt.HNRange.WLactive = false;
					}
					if (arrayHNRatio[arrayHNRatioCheckIX] > 5) {
						bannButt.HNRange.severity = 3;
					}
					// show stats if HN out of range
					phlogdev('HNs: ' + dupeHNRangeListSorted);
					phlogdev('Distances: ' + dupeHNRangeDistList);
					phlogdev('arrayHNRatio: ' + arrayHNRatio);
					phlogdev('HN Ratio Score: ' + arrayHNRatio[Math.round(arrayHNRatio.length/2)]);
				}
			}
			
			// Turn on website linking button if there is a url
			if (newURL !== null && newURL !== "") {
				bannButt.PlaceWebsite.active = true;
			}
			
			
			// Highlight the changes made
			higlightChangedFields(fieldUpdateObject,hpMode);
			
			// Assemble the banners
			assembleBanner();  // Make Messaging banners
				
			
			
		}  // END harmonizePlaceGo function
		
		// **** vvv Function definitions vvv ****
		
		// highlight changed fields
		function higlightChangedFields(fieldUpdateObject,hpMode) {
			
			if (hpMode.harmFlag) {
				//var panelFields = {};
				getPanelFields();
				var tab1HL = false;
				var tab2HL = false;
				//phlogdev(fieldUpdateObject);
				if (fieldUpdateObject.name) {
					$('.form-control')[panelFields.name].style="background-color:"+fieldUpdateObject.name;
					tab1HL = true;
				}
				if (fieldUpdateObject.aliases) {
					$('.alias-name')[0].style="background-color:"+fieldUpdateObject.aliases;
					tab1HL = true;
				}
				if (fieldUpdateObject.categories) {
					$('.select2-choices')[0].style="background-color:"+fieldUpdateObject.categories;
					tab1HL = true;
				}
				if (fieldUpdateObject.brand) {
					$('.form-control')[panelFields.brand].style="background-color:"+fieldUpdateObject.brand;
					tab1HL = true;
				}
				if (fieldUpdateObject.description) {
					$('.form-control')[panelFields.description].style="background-color:"+fieldUpdateObject.description;
					tab1HL = true;
				}
				if (fieldUpdateObject.lockRank) {
					$('.form-control')[panelFields.lockRank].style="background-color:"+fieldUpdateObject.lockRank;
					tab1HL = true;
				}
				if (fieldUpdateObject.address) {
					$('.address-edit')[0].style='background-color:'+fieldUpdateObject.address;
					tab1HL = true;
				}
				
				if (fieldUpdateObject.url) {
					$('.form-control')[panelFields.url].style="background-color:"+fieldUpdateObject.url;
					tab2HL = true;
				}
				if (fieldUpdateObject.phone) {
					$('.form-control')[panelFields.phone].style="background-color:"+fieldUpdateObject.phone;
					tab2HL = true;
				}
				if (fieldUpdateObject.openingHours) {
					$('.opening-hours')[0].style="background-color:#dfd";
					tab2HL = true;
				}
				if (fieldUpdateObject.services.VALLET_SERVICE) {
					$('.service-checkbox')[0].style="background-color:#dfd";
					tab2HL = true;
				}
				if (fieldUpdateObject.services.DRIVETHROUGH) {
					$('.service-checkbox')[1].style="background-color:#dfd";
					tab2HL = true;
				}
				if (fieldUpdateObject.services.WI_FI) {
					$('.service-checkbox')[2].style="background-color:#dfd";
					tab2HL = true;
				}
				if (fieldUpdateObject.services.RESTROOMS) {
					$('.service-checkbox')[3].style="background-color:#dfd";
					tab2HL = true;
				}
				if (fieldUpdateObject.services.CREDIT_CARDS) {
					$('.service-checkbox')[4].style="background-color:#dfd";
					tab2HL = true;
				}
				if (fieldUpdateObject.services.RESERVATIONS) {
					$('.service-checkbox')[5].style="background-color:#dfd";
					tab2HL = true;
				}
				if (fieldUpdateObject.services.OUTSIDE_SEATING) {
					$('.service-checkbox')[6].style="background-color:#dfd";
					tab2HL = true;
				}
				if (fieldUpdateObject.services.AIR_CONDITIONING) {
					$('.service-checkbox')[7].style="background-color:#dfd";
					tab2HL = true;
				}
				if (fieldUpdateObject.services.PARKING_FOR_CUSTOMERS) {
					$('.service-checkbox')[8].style="background-color:#dfd";
					tab2HL = true;
				}
				if (fieldUpdateObject.services.DELIVERIES) {
					$('.service-checkbox')[9].style="background-color:#dfd";
					tab2HL = true;
				}
				if (fieldUpdateObject.services.TAKE_AWAY) {
					$('.service-checkbox')[10].style="background-color:#dfd";
					tab2HL = true;
				}
				if (fieldUpdateObject.services.WHEELCHAIR_ACCESSIBLE) {
					$('.service-checkbox')[11].style="background-color:#dfd";
					tab2HL = true;
				}
				
				var placeNavTabs = $('.nav');
				for (pfix=0; pfix<placeNavTabs.length; pfix++) {
					pfa = placeNavTabs[pfix].innerHTML;
					if (pfa.indexOf('landmark-edit') > -1) {
						panelFieldsList = placeNavTabs[pfix].children;
						panelFields.navTabsIX = pfix;
						break;
					}
				}
				for (pfix=0; pfix<panelFieldsList.length; pfix++) {
					pfa = panelFieldsList[pfix].innerHTML;
					if (pfa.indexOf('landmark-edit-general') > -1) {
						panelFields.navTabGeneral = pfix;
					}
					if (pfa.indexOf('landmark-edit-more') > -1) {
						panelFields.navTabMore = pfix;
					}
				}
				
				if (tab1HL) {
					$('.nav')[panelFields.navTabsIX].children[panelFields.navTabGeneral].children[0].style='background-color:#dfd';
				}
				if (tab2HL) {
					$('.nav')[panelFields.navTabsIX].children[panelFields.navTabMore].children[0].style='background-color:#dfd';
				}
				
				
				
			}
		}
		
		
		// Set up banner messages
		function assembleBanner() {
			phlogdev('Building banners');
			// push together messages from active banner messages
			var sidebarMessage = [], sidebarTools = [];  // Initialize message array
			var tempKey, strButt1, dupesFound = false;
			severityButt = 0;
			
			// Setup duplicates banners
			strButt1 = 'Possible duplicates: ';
			for ( tempKey in bannDupl ) {
				if (bannDupl.hasOwnProperty(tempKey) && bannDupl[tempKey].hasOwnProperty('active') && bannDupl[tempKey].active) {
					dupesFound = true;
					strButt1 += '<br>' + bannDupl[tempKey].message;
					if (bannDupl[tempKey].hasOwnProperty('action')) {
						// Nothing happening here yet.
					} 
					if (bannDupl[tempKey].hasOwnProperty('WLactive') && bannDupl[tempKey].WLactive && bannDupl[tempKey].hasOwnProperty('WLaction') ) {  // If there's a WL option, enable it
						severityButt = Math.max(bannDupl[tempKey].severity, severityButt);
						strButt1 += ' <input class="btn btn-success btn-xs wmephwl-btn" id="WMEPH_WL' + tempKey + '" title="' + bannDupl[tempKey].WLtitle + '" type="button" value="' + bannDupl[tempKey].WLvalue + '">';
					}
				}
			}
			if (dupesFound) {  // if at least 1 dupe
				sidebarMessage.push(strButt1);
			}
			
			// Build banners above the Services 
			for ( tempKey in bannButt ) {  
				if ( bannButt.hasOwnProperty(tempKey) && bannButt[tempKey].hasOwnProperty('active') && bannButt[tempKey].active ) {  //  If the particular message is active
					strButt1 = bannButt[tempKey].message;
					if (bannButt[tempKey].hasOwnProperty('action')) {
						strButt1 += ' <input class="btn btn-default btn-xs wmeph-btn" id="WMEPH_' + tempKey + '" title="' + bannButt[tempKey].title + '" type="button" value="' + bannButt[tempKey].value + '"></input>';
						if (tempKey === 'noHours') {
							strButt1 += ' <input class="btn btn-default btn-xs wmeph-btn" id="WMEPH_' + tempKey + 'A2" title="' + bannButt[tempKey].title2 + '" type="button" value="' + bannButt[tempKey].value2 + '"></input>';
						}
					} 
					if ( bannButt[tempKey].hasOwnProperty('WLactive') ) {
						if ( bannButt[tempKey].WLactive && bannButt[tempKey].hasOwnProperty('WLaction') ) {  // If there's a WL option, enable it
							severityButt = Math.max(bannButt[tempKey].severity, severityButt);
							strButt1 += bannButt[tempKey].WLmessage + ' <input class="btn btn-success btn-xs wmephwl-btn" id="WMEPH_WL' + tempKey + '" title="' + bannButt[tempKey].WLtitle + '" type="button" value="WL">';
							//strButt1 += bannButt[tempKey].WLmessage + ' <input class="fa fa-check-square" id="WMEPH_WL' + tempKey + '" title="' + bannButt[tempKey].WLtitle + '" type="button" style="color:green;" >';
							//strButt1 += bannButt[tempKey].WLmessage + ' <button class="btn btn-default btn-xs wmephwl-btn" id="WMEPH_WL' + tempKey + '" title="' + bannButt[tempKey].WLtitle + '" type="button" ><i class="fa fa-check-square" style="color:green;></i></button>';
						}
					} else {
						severityButt = Math.max(bannButt[tempKey].severity, severityButt);
					} 
					sidebarMessage.push(strButt1);
				}
			}
			if ( $("#WMEPH-ColorHighlighting" + devVersStr).prop('checked') ) {
				item = W.selectionManager.selectedItems[0].model;
				item.attributes.wmephSeverity = severityButt;
			}
			
			// setup Add Service Buttons for suggested services
			var sidebarServButts = '', servButtHeight = '27', greyOption;
			for ( tempKey in bannServ ) {  
				if ( bannServ.hasOwnProperty(tempKey) && bannServ[tempKey].hasOwnProperty('active') && bannServ[tempKey].active ) {  //  If the particular service is active
					if ( bannServ[tempKey].checked ) {
						greyOption = '';
					} else {
						greyOption = '-webkit-filter: opacity(.25);filter: opacity(.25);';
						//greyOption = '-webkit-filter: brightness(3); filter: brightness(3);';
					}
					//strButt1 = '&nbsp<input class="servButton" id="WMEPH_' + tempKey + '" title="' + bannServ[tempKey].title + '" type="image" style="height:' + servButtHeight + 
					//	'px;background:none;border-color: none;border-style: none;" src="https://openmerchantaccount.com/img2/' + bannServ[tempKey].icon + greyOption + '.png">';
					strButt1 = '&nbsp<input class="'+bannServ[tempKey].icon+'" id="WMEPH_' + tempKey + '" type="button" title="' + bannServ[tempKey].title + 
						'" style="border:0;background-size: contain; height:' + servButtHeight + 'px;width: '+Math.ceil(servButtHeight*bannServ[tempKey].w2hratio).toString()+'px;'+greyOption+'">';
					sidebarServButts += strButt1;
				}
			}
			if (sidebarServButts.length>0) {
				sidebarTools.push('Add services:<br>' + sidebarServButts);
			}
			
			//  Build general banners (below the Services)
			for ( tempKey in bannButt2 ) {  
				if ( bannButt2.hasOwnProperty(tempKey) && bannButt2[tempKey].hasOwnProperty('active') && bannButt2[tempKey].active ) {  //  If the particular message is active
					strButt1 = bannButt2[tempKey].message;
					if (bannButt2[tempKey].hasOwnProperty('action')) {
						strButt1 += ' <input class="btn btn-info btn-xs wmeph-btn" id="WMEPH_' + tempKey + '" title="' + bannButt2[tempKey].title + '" style="" type="button" value="' + bannButt2[tempKey].value + '">';
					} 
					sidebarTools.push(strButt1);
					severityButt = Math.max(bannButt2[tempKey].severity, severityButt);
				}
			}
			
			// Add banner indicating that it's the beta version
			if (isDevVersion) {
				sidebarTools.push('WMEPH Beta');
			} 
			
			// Post the banners to the sidebar
			displayTools( sidebarTools.join("<li>") );
			displayBanners(sidebarMessage.join("<li>"), severityButt );
			
			// Set up Duplicate onclicks
			if ( dupesFound ) {
				setupButtons(bannDupl);
			}
			// Setup bannButt onclicks
			setupButtons(bannButt);
			// Setup bannServ onclicks
			setupButtons(bannServ);
			// Setup bannButt2 onclicks
			setupButtons(bannButt2);
			
			if (bannButt.noHours.active) {
				var button = document.getElementById('WMEPH_noHoursA2');
				button.onclick = function() {
					bannButt.noHours.action2();
					assembleBanner();
				};
			}
			
			// If pressing enter in the HN entry box, add the HN
			$("#WMEPH-HNAdd"+devVersStr).keyup(function(event){
				if( event.keyCode === 13 && $('#WMEPH-HNAdd'+devVersStr).val() !== '' ){
					$("#WMEPH_hnMissing").click();
				}
			});
			
			// If pressing enter in the phone entry box, add the HN
			$("#WMEPH-PhoneAdd"+devVersStr).keyup(function(event){
				if( event.keyCode === 13 && $('#WMEPH-PhoneAdd'+devVersStr).val() !== '' ){
					$("#WMEPH_phoneMissing").click();
				}
			});
			
			// If pressing enter in the hours entry box, parse the entry
			$("#WMEPH-HoursPaste"+devVersStr).keyup(function(event){
				if( event.keyCode === 13 && $('#WMEPH-HoursPaste'+devVersStr).val() !== '' ){
					$("#WMEPH_noHours").click();
				}
			});
			$("#WMEPH-HoursPaste"+devVersStr).click(function(){
				if (this.value === 'Paste Hours Here' || this.value === 'Can\'t parse, try again') {
					this.value = '';
				}
				this.style.color = 'black';
			}).blur(function(){
				if ( this.value === '') {
					this.value = 'Paste Hours Here';
					this.style.color = '#999';
				}
			});
		}  // END assemble Banner function
		
		// Button onclick event handler
		function setupButtons(b) {
			for ( var tempKey in b ) {  // Loop through the banner possibilities
				if ( b.hasOwnProperty(tempKey) && b[tempKey].active ) {  //  If the particular message is active
					if (b[tempKey].hasOwnProperty('action')) {  // If there is an action, set onclick 
						buttonAction(b, tempKey);
					}
					// If there's a WL option, set up onclick
					if ( b[tempKey].hasOwnProperty('WLactive') && b[tempKey].WLactive && b[tempKey].hasOwnProperty('WLaction') ) {  
						buttonWhitelist(b, tempKey);
					}
				}
			}
		}  // END setupButtons function
		
		function buttonAction(b,bKey) {
			var button = document.getElementById('WMEPH_'+bKey);
			button.onclick = function() {
				b[bKey].action();
				assembleBanner();
			};
			return button;
		}
		function buttonWhitelist(b,bKey) {
			var button = document.getElementById('WMEPH_WL'+bKey);
			button.onclick = function() {
				if ( bKey.match(/^\d{5,}/) !== null ) {
					b[bKey].WLaction(bKey);
				} else {
					b[bKey].WLaction();
				}
				b[bKey].WLactive = false;
				b[bKey].severity = 0;
				assembleBanner();
			};
			return button;
		}
		
		
		// Setup div for banner messages and color 
		function displayBanners(sbm,sev) {
			if ($('#WMEPH_banner').length === 0 ) {
				$('<div id="WMEPH_banner">').css({"width": "100%", "background-color": "#fff", "color": "white", "font-size": "15px", "font-weight": "bold", "padding": "3px", "margin-left": "auto", "margin-right": "auto"}).prependTo(".contents");
			} else {
				$('#WMEPH_banner').empty();
			}
			if (sev === 0) {
				$('#WMEPH_banner').css({"background-color": "rgb(36, 172, 36)"});
			}
			if (sev === 1) {
				$('#WMEPH_banner').css({"background-color": "rgb(50, 50, 230)"});
			}
			if (sev === 2) {
				$('#WMEPH_banner').css({"background-color": "rgb(217, 173, 42)"});
			}
			if (sev === 3) {
				$('#WMEPH_banner').css({"background-color": "rgb(211, 48, 48)"});
			}
			sbm = "<li>" + sbm;
			$("#WMEPH_banner").append(sbm);
			$('#select2-drop').css({display:'none'});
		}  // END displayBanners funtion
		
		// Setup div for banner messages and color 
		function displayTools(sbm) {
			if ($('#WMEPH_tools').length === 0 ) {
				$('<div id="WMEPH_tools">').css({"width": "100%", "background-color": "#eee", "color": "black", "font-size": "15px", "font-weight": "bold", "padding": "3px", "margin-left": "auto", "margin-right": "auto"}).prependTo(".contents");
			} else {
				$('#WMEPH_tools').empty();
			}
			sbm = "<li>" + sbm;
			$("#WMEPH_tools").append(sbm);
			$('#select2-drop').css({display:'none'});
		}  // END displayBanners funtion
		
		// CSS setups
		var cssCode = [
			".btn.wmeph-btn {padding: 0px 3px}",
			".btn.wmephwl-btn {padding: 0px 1px}"
			];
		for (var cssix=0; cssix<cssCode.length; cssix++) {
			insertCss(cssCode[cssix]);
		}
		
		// Display run button on place sidebar 
		function displayRunButton() {
			var betaDelay = 0;
			if (isDevVersion) { betaDelay = 30; }
			setTimeout(function() {
				if ($('#WMEPH_runButton').length === 0 ) {
					$('<div id="WMEPH_runButton">').css({"padding-bottom": "6px", "padding-top": "3px", "width": "290", "background-color": "#FFF", "color": "black", "font-size": "15px", "font-weight": "bold", "margin-left": "auto", "margin-right": "auto"}).prependTo(".contents");
				} 
				if ($('#runWMEPH'+devVersStr).length === 0 ) {
					var strButt1 = '<input class="btn btn-primary" id="runWMEPH'+devVersStr+'" title="Run WMEPH'+devVersStrSpace+' on Place" type="button" value="Run WMEPH'+devVersStrSpace+'">';
					$("#WMEPH_runButton").append(strButt1);
				}
				var btn = document.getElementById("runWMEPH"+devVersStr); 
				if (btn !== null) {
					btn.onclick = function() {
						harmonizePlace();
					};
				} else {
					setTimeout(bootstrapRunButton,100);
				}
				if ( W.selectionManager.selectedItems.length === 1 ) {
					item = W.selectionManager.selectedItems[0].model;
					if ( item.attributes.categories.length === 1 && item.attributes.categories[0] === 'SHOPPING_AND_SERVICES' ) {
						$('.suggested-categories').remove();
					}
				}
			}, betaDelay);
		}  // END displayRunButton funtion
		
		// WMEPH Clone Tool 
		function displayCloneButton() {
			var betaDelay = 80;
			if (isDevVersion) { betaDelay = 300; }
			setTimeout(function() {
				if ($('#WMEPH_runButton').length === 0 ) {
					$('<div id="WMEPH_runButton">').css({"padding-bottom": "6px", "padding-top": "3px", "width": "290", "background-color": "#FFF", "color": "black", "font-size": "15px", "font-weight": "bold", "margin-left": "auto", "margin-right": "auto"}).prependTo(".contents");
				} 
				var strButt1, btn;
				item = W.selectionManager.selectedItems[0].model;
				var openPlaceWebsiteURL = item.attributes.url;
							
				if (openPlaceWebsiteURL !== null && openPlaceWebsiteURL.replace(/[^A-Za-z0-9]/g,'').length > 2 && (thisUser.userName === 't0cableguy' || thisUser.userName === 'bmtg') ) {
					if ($('#WMEPHurl').length === 0 ) {
						strButt1 = '<br><input class="btn btn-success btn-xs" id="WMEPHurl" title="Open place URL" type="button" value="Open URL">';
						$("#WMEPH_runButton").append(strButt1);
					}
					btn = document.getElementById("WMEPHurl"); 
					if (btn !== null) {
						btn.onclick = function() {
							if (openPlaceWebsiteURL.match(/^http/i) === null) {
								openPlaceWebsiteURL = 'http:\/\/'+openPlaceWebsiteURL;
							}
							if ( $("#WMEPH-WebSearchNewTab" + devVersStr).prop('checked') ) {
									window.open(openPlaceWebsiteURL);
							} else {
									window.open(openPlaceWebsiteURL, searchResultsWindowName, searchResultsWindowSpecs);
							}
						};
					} else {
						setTimeout(bootstrapRunButton,100);
					}
				}
				if ($('#clonePlace').length === 0 ) {
					strButt1 = '<div style="margin-bottom: 3px;"></div><input class="btn btn-warning btn-xs wmeph-btn" id="clonePlace" title="Copy place info" type="button" value="Copy">'+
						' <input class="btn btn-warning btn-xs wmeph-btn" id="pasteClone" title="Apply the Place info. (Ctrl-Alt-O)" type="button" value="Paste (for checked boxes):"><br>';
					$("#WMEPH_runButton").append(strButt1);
					createCloneCheckbox('WMEPH_runButton', 'WMEPH_CPhn', 'HN');
					createCloneCheckbox('WMEPH_runButton', 'WMEPH_CPstr', 'Str');
					createCloneCheckbox('WMEPH_runButton', 'WMEPH_CPcity', 'City');
					createCloneCheckbox('WMEPH_runButton', 'WMEPH_CPurl', 'URL');
					createCloneCheckbox('WMEPH_runButton', 'WMEPH_CPph', 'Ph');
					$("#WMEPH_runButton").append('<br>');
					createCloneCheckbox('WMEPH_runButton', 'WMEPH_CPdesc', 'Desc');
					createCloneCheckbox('WMEPH_runButton', 'WMEPH_CPserv', 'Serv');
					createCloneCheckbox('WMEPH_runButton', 'WMEPH_CPhrs', 'Hrs');
					strButt1 = '<input class="btn btn-info btn-xs wmeph-btn" id="checkAllClone" title="Check all" type="button" value="All">'+
						' <input class="btn btn-info btn-xs wmeph-btn" id="checkAddrClone" title="Check Address" type="button" value="Addr">'+
						' <input class="btn btn-info btn-xs wmeph-btn" id="checkNoneClone" title="Check none" type="button" value="None"><br>';
					$("#WMEPH_runButton").append(strButt1);
				}
				btn = document.getElementById("clonePlace"); 
				if (btn !== null) {
					btn.onclick = function() {
						item = W.selectionManager.selectedItems[0].model;
						cloneMaster = {};
						cloneMaster.addr = item.getAddress();
						if ( cloneMaster.addr.hasOwnProperty('attributes') ) {
							cloneMaster.addr = cloneMaster.addr.attributes;
						}
						cloneMaster.houseNumber = item.attributes.houseNumber;
						cloneMaster.url = item.attributes.url;
						cloneMaster.phone = item.attributes.phone;
						cloneMaster.description = item.attributes.description;
						cloneMaster.services = item.attributes.services;
						cloneMaster.openingHours = item.attributes.openingHours;
						phlogdev('Place Cloned');
					};
				} else {
					setTimeout(bootstrapRunButton,100);
					return;
				}
				btn = document.getElementById("pasteClone"); 
				if (btn !== null) {
					btn.onclick = function() {
						clonePlace();
					};
				} else {
					setTimeout(bootstrapRunButton,100);
				}
				btn = document.getElementById("checkAllClone"); 
				if (btn !== null) {
					btn.onclick = function() {
						if ( !$("#WMEPH_CPhn").prop('checked') ) { $("#WMEPH_CPhn").trigger('click'); }
						if ( !$("#WMEPH_CPstr").prop('checked') ) { $("#WMEPH_CPstr").trigger('click'); }
						if ( !$("#WMEPH_CPcity").prop('checked') ) { $("#WMEPH_CPcity").trigger('click'); }
						if ( !$("#WMEPH_CPurl").prop('checked') ) { $("#WMEPH_CPurl").trigger('click'); }
						if ( !$("#WMEPH_CPph").prop('checked') ) { $("#WMEPH_CPph").trigger('click'); }
						if ( !$("#WMEPH_CPserv").prop('checked') ) { $("#WMEPH_CPserv").trigger('click'); }
						if ( !$("#WMEPH_CPdesc").prop('checked') ) { $("#WMEPH_CPdesc").trigger('click'); }
						if ( !$("#WMEPH_CPhrs").prop('checked') ) { $("#WMEPH_CPhrs").trigger('click'); }
					};
				} else {
					setTimeout(bootstrapRunButton,100);
				}
				btn = document.getElementById("checkAddrClone"); 
				if (btn !== null) {
					btn.onclick = function() {
						if ( !$("#WMEPH_CPhn").prop('checked') ) { $("#WMEPH_CPhn").trigger('click'); }
						if ( !$("#WMEPH_CPstr").prop('checked') ) { $("#WMEPH_CPstr").trigger('click'); }
						if ( !$("#WMEPH_CPcity").prop('checked') ) { $("#WMEPH_CPcity").trigger('click'); }
						if ( $("#WMEPH_CPurl").prop('checked') ) { $("#WMEPH_CPurl").trigger('click'); }
						if ( $("#WMEPH_CPph").prop('checked') ) { $("#WMEPH_CPph").trigger('click'); }
						if ( $("#WMEPH_CPserv").prop('checked') ) { $("#WMEPH_CPserv").trigger('click'); }
						if ( $("#WMEPH_CPdesc").prop('checked') ) { $("#WMEPH_CPdesc").trigger('click'); }
						if ( $("#WMEPH_CPhrs").prop('checked') ) { $("#WMEPH_CPhrs").trigger('click'); }
					};
				} else {
					setTimeout(bootstrapRunButton,100);
				}
				btn = document.getElementById("checkNoneClone"); 
				if (btn !== null) {
					btn.onclick = function() {
						if ( $("#WMEPH_CPhn").prop('checked') ) { $("#WMEPH_CPhn").trigger('click'); }
						if ( $("#WMEPH_CPstr").prop('checked') ) { $("#WMEPH_CPstr").trigger('click'); }
						if ( $("#WMEPH_CPcity").prop('checked') ) { $("#WMEPH_CPcity").trigger('click'); }
						if ( $("#WMEPH_CPurl").prop('checked') ) { $("#WMEPH_CPurl").trigger('click'); }
						if ( $("#WMEPH_CPph").prop('checked') ) { $("#WMEPH_CPph").trigger('click'); }
						if ( $("#WMEPH_CPserv").prop('checked') ) { $("#WMEPH_CPserv").trigger('click'); }
						if ( $("#WMEPH_CPdesc").prop('checked') ) { $("#WMEPH_CPdesc").trigger('click'); }
						if ( $("#WMEPH_CPhrs").prop('checked') ) { $("#WMEPH_CPhrs").trigger('click'); }
					};
				} else {
					setTimeout(bootstrapRunButton,100);
				}
			}, betaDelay);
		}  // END displayCloneButton funtion
		
		
		
		// Catch PLs and reloads that have a place selected already and limit attempts to about 10 seconds
		function bootstrapRunButton() {
			if (numAttempts < 10) {
				numAttempts++;
				if (W.selectionManager.selectedItems.length === 1) {
					if (W.selectionManager.selectedItems[0].model.type === "venue") {
						displayRunButton();
						getPanelFields();
						if (localStorage.getItem("WMEPH-EnableCloneMode" + devVersStr) === '1') {
							displayCloneButton();
						}
					}
					
					
				} else {
					setTimeout(bootstrapRunButton,1000);
				}
			}
		}
		
		// Find field divs
		function getPanelFields() {
			var panelFieldsList = $('.form-control'), pfa;
			for (var pfix=0; pfix<panelFieldsList.length; pfix++) {
				pfa = panelFieldsList[pfix].name;
				if (pfa === 'name') {
					panelFields.name = pfix;
				}
				if (pfa === 'lockRank') {
					panelFields.lockRank = pfix;
				}
				if (pfa === 'description') {
					panelFields.description = pfix;
				}
				if (pfa === 'url') {
					panelFields.url = pfix;
				}
				if (pfa === 'phone') {
					panelFields.phone = pfix;
				}
				if (pfa === 'brand') {
					panelFields.brand = pfix;
				}
			}
			var placeNavTabs = $('.nav');
			for (pfix=0; pfix<placeNavTabs.length; pfix++) {
				pfa = placeNavTabs[pfix].innerHTML;
				if (pfa.indexOf('landmark-edit') > -1) {
					panelFieldsList = placeNavTabs[pfix].children;
					panelFields.navTabsIX = pfix;
					break;
				}
			}
			for (pfix=0; pfix<panelFieldsList.length; pfix++) {
				pfa = panelFieldsList[pfix].innerHTML;
				if (pfa.indexOf('landmark-edit-general') > -1) {
					panelFields.navTabGeneral = pfix;
				}
				if (pfa.indexOf('landmark-edit-more') > -1) {
					panelFields.navTabMore = pfix;
				}
			}
			
			
		}
		
		// Catch PLs and reloads that have a place selected already and limit attempts to about 10 seconds
		numAttempts = 0;
		function bootstrapInferAddress() {
			if (numAttempts < 20) {
				numAttempts++;
				var inferredAddress = WMEPH_inferAddress(7);
				if (!inferredAddress) {
					setTimeout(bootstrapInferAddress,500);
				} else {
					return inferredAddress;
				}
			}
		}
		
		// Function to clone info from a place
		function clonePlace() {
			phlog('Cloning info...');
			var UpdateObject = require("Waze/Action/UpdateObject");
			if (cloneMaster !== null && cloneMaster.hasOwnProperty('url')) {
				item = W.selectionManager.selectedItems[0].model;
				var cloneItems = {};
				var updateItem = false;
				if ( $("#WMEPH_CPhn").prop('checked') ) {
					cloneItems.houseNumber = cloneMaster.houseNumber;
					updateItem = true;
				}
				if ( $("#WMEPH_CPurl").prop('checked') ) {
					cloneItems.url = cloneMaster.url;
					updateItem = true;
				}
				if ( $("#WMEPH_CPph").prop('checked') ) {
					cloneItems.phone = cloneMaster.phone;
					updateItem = true;
				}
				if ( $("#WMEPH_CPdesc").prop('checked') ) {
					cloneItems.description = cloneMaster.description;
					updateItem = true;
				}
				if ( $("#WMEPH_CPserv").prop('checked') ) {
					cloneItems.services = cloneMaster.services;
					updateItem = true;
				}
				if ( $("#WMEPH_CPhrs").prop('checked') ) {
					cloneItems.openingHours = cloneMaster.openingHours;
					updateItem = true;
				}
				if (updateItem) {
					W.model.actionManager.add(new UpdateObject(item, cloneItems) );
					phlogdev('Item details cloned');
				}
				if ( $("#WMEPH_CPstr").prop('checked') ) {
					var itemStreetRepl = item.getAddress();
					itemStreetRepl.street = cloneMaster.addr.street;
					updateAddress(item, itemStreetRepl);
					phlogdev('Item street cloned');
				}
				if ( $("#WMEPH_CPcity").prop('checked') ) {
					var itemCityRepl = item.getAddress();
					itemCityRepl.city = cloneMaster.addr.city;
					itemCityRepl.state = cloneMaster.addr.state;
					updateAddress(item, itemCityRepl);
					phlogdev('Item city & state cloned');
				}
				
			} else {
				phlog('Please copy a place');
			}
		}
		
		// Pull natural text from opening hours
		function getOpeningHours(venue) {
			var formatOpeningHour = require('Waze/ViewHelpers').formatOpeningHour;
			return venue && venue.getOpeningHours && venue.getOpeningHours().map(formatOpeningHour);
		}
		// Parse hours paste for hours object array
		function parseHours(inputHours) {
			var daysOfTheWeek = {
				SS: ['saturdays', 'saturday', 'satur', 'sat', 'sa'],
				UU: ['sundays', 'sunday', 'sun', 'su'],
				MM: ['mondays', 'monday', 'mondy', 'mon', 'mo'],
				TT: ['tuesdays', 'tuesday', 'tues', 'tue', 'tu'],
				WW: ['wednesdays', 'wednesday', 'weds', 'wed', 'we'],
				RR: ['thursdays', 'thursday', 'thurs', 'thur', 'thu', 'th'],
				FF: ['fridays', 'friday', 'fri', 'fr']
			};
			var monthsOfTheYear = {
				JAN: ['january', 'jan'],
				FEB: ['february', 'febr', 'feb'],
				MAR: ['march', 'mar'],
				APR: ['april', 'apr'],
				MAY: ['may', 'may'],
				JUN: ['june', 'jun'],
				JUL: ['july', 'jul'],
				AUG: ['august', 'aug'],
				SEP: ['september', 'sept', 'sep'],
				OCT: ['october', 'oct'],
				NOV: ['november', 'nov'],
				DEC: ['december', 'dec']
			};
			var dayCodeVec = ['MM','TT','WW','RR','FF','SS','UU','MM','TT','WW','RR','FF','SS','UU','MM','TT','WW','RR','FF'];
			var tfHourTemp, tfDaysTemp, newDayCodeVec = [];
			var tempRegex, twix, tsix;
			var inputHoursParse = inputHours.toLowerCase();
			inputHoursParse = inputHoursParse.replace(/paste hours here/i, "");  // make sure something is pasted
			phlogdev(inputHoursParse);
			inputHoursParse = inputHoursParse.replace(/can\'t parse\, try again/i, "");  // make sure something is pasted
			if (inputHoursParse === '' || inputHoursParse === ',') {
				phlogdev('No hours');
				return false;
			}
			inputHoursParse = inputHoursParse.replace(/\u2013|\u2014/g, "-");  // long dash replacing
			inputHoursParse = inputHoursParse.replace(/[^a-z0-9\:\-\. ~]/g, ' ');  // replace unnecessary characters with spaces
			inputHoursParse = inputHoursParse.replace(/\:{2,}/g, ':');  // remove extra colons
			inputHoursParse = inputHoursParse.replace(/closed/g, '99:99-99:99').replace(/not open/g, '99:99-99:99');  // parse 'closed'
			inputHoursParse = inputHoursParse.replace(/by appointment only/g, '99:99-99:99').replace(/by appointment/g, '99:99-99:99');  // parse 'appointment only'
			inputHoursParse = inputHoursParse.replace(/weekdays/g, 'mon-fri').replace(/weekends/g, 'sat-sun');  // convert weekdays and weekends to days
			inputHoursParse = inputHoursParse.replace(/12:00 noon/g, "12:00").replace(/12:00 midnight/g, "00:00");  // replace 'noon', 'midnight'
			inputHoursParse = inputHoursParse.replace(/12 noon/g, "12:00").replace(/12 midnight/g, "00:00");  // replace 'noon', 'midnight'
			inputHoursParse = inputHoursParse.replace(/noon/g, "12:00").replace(/midnight/g, "00:00");  // replace 'noon', 'midnight'
			inputHoursParse = inputHoursParse.replace(/every day/g, "mon-sun");  // replace 'seven days a week'
			inputHoursParse = inputHoursParse.replace(/seven days a week/g, "mon-sun");  // replace 'seven days a week'
			inputHoursParse = inputHoursParse.replace(/7 days a week/g, "mon-sun");  // replace 'seven days a week'
			inputHoursParse = inputHoursParse.replace(/daily/g, "mon-sun");  // replace 'open daily'
			inputHoursParse = inputHoursParse.replace(/open 24 ?ho?u?rs?/g, "00:00-00:00");  // replace 'open 24 hour or similar'
			inputHoursParse = inputHoursParse.replace(/open twenty\-? ?four ho?u?rs?/g, "00:00-00:00");  // replace 'open 24 hour or similar'
			inputHoursParse = inputHoursParse.replace(/24 ?ho?u?rs?/g, "00:00-00:00");  // replace 'open 24 hour or similar'
			inputHoursParse = inputHoursParse.replace(/twenty\-? ?four ho?u?rs?/g, "00:00-00:00");  // replace 'open 24 hour or similar'
			inputHoursParse = inputHoursParse.replace(/(\D:)([^ ])/g, "$1 $2");  // space after colons after words
			// replace thru type words with dashes
			var thruWords = 'through|thru|to|until|till|til|-|~'.split("|");
			for (twix=0; twix<thruWords.length; twix++) {
				tempRegex = new RegExp(thruWords[twix], "g");
				inputHoursParse = inputHoursParse.replace(tempRegex,'-');
			}
			inputHoursParse = inputHoursParse.replace(/\-{2,}/g, "-");  // replace any duplicate dashes
			phlogdev('Initial parse: ' + inputHoursParse);
			
			// kill extra words
			var killWords = 'paste|here|business|operation|times|time|walk-ins|walk ins|welcome|dinner|lunch|brunch|breakfast|regular|weekday|weekend|opening|open|now|from|hours|hour|our|are|EST|and|&'.split("|");
			for (twix=0; twix<killWords.length; twix++) {
				tempRegex = new RegExp('\\b'+killWords[twix]+'\\b', "g");
				inputHoursParse = inputHoursParse.replace(tempRegex,'');
			}
			phlogdev('After kill terms: ' + inputHoursParse);
			
			// replace day terms with double caps
			for (var dayKey in daysOfTheWeek) {
				if (daysOfTheWeek.hasOwnProperty(dayKey)) {
					var tempDayList = daysOfTheWeek[dayKey];
					for (var tdix=0; tdix<tempDayList.length; tdix++) {
						tempRegex = new RegExp(tempDayList[tdix]+'(?!a-z)', "g");
						inputHoursParse = inputHoursParse.replace(tempRegex,dayKey);
					}
				}
			}
			phlogdev('Replace day terms: ' + inputHoursParse);
			
			// Replace dates
			for (var monthKey in monthsOfTheYear) {
				if (monthsOfTheYear.hasOwnProperty(monthKey)) {
					var tempMonthList = monthsOfTheYear[monthKey];
					for (var tmix=0; tmix<tempMonthList.length; tmix++) {
						tempRegex = new RegExp(tempMonthList[tmix]+'\\.? ?\\d{1,2}\\,? ?201\\d{1}', "g");
						inputHoursParse = inputHoursParse.replace(tempRegex,' ');
						tempRegex = new RegExp(tempMonthList[tmix]+'\\.? ?\\d{1,2}', "g");
						inputHoursParse = inputHoursParse.replace(tempRegex,' ');
					}
				}
			}
			phlogdev('Replace month terms: ' + inputHoursParse);
			
			// replace any periods between hours with colons
			inputHoursParse = inputHoursParse.replace(/(\d{1,2})\.(\d{2})/g, '$1:$2');
			// remove remaining periods
			inputHoursParse = inputHoursParse.replace(/\./g, '');
			// remove any non-hour colons between letters and numbers and on string ends
			inputHoursParse = inputHoursParse.replace(/(\D+)\:(\D+)/g, '$1 $2').replace(/^ *\:/g, ' ').replace(/\: *$/g, ' ');
			// replace am/pm with AA/PP
			inputHoursParse = inputHoursParse.replace(/ *pm/g,'PP').replace(/ *am/g,'AA');
			inputHoursParse = inputHoursParse.replace(/ *p\.m\./g,'PP').replace(/ *a\.m\./g,'AA');
			inputHoursParse = inputHoursParse.replace(/ *p\.m/g,'PP').replace(/ *a\.m/g,'AA');
			inputHoursParse = inputHoursParse.replace(/ *p/g,'PP').replace(/ *a/g,'AA');
			// tighten up dashes
			inputHoursParse = inputHoursParse.replace(/\- {1,}/g,'-').replace(/ {1,}\-/g,'-');
			inputHoursParse = inputHoursParse.replace(/^(00:00-00:00)$/g,'MM-UU$1');
			phlogdev('AMPM parse: ' + inputHoursParse);
			
			//  Change all MTWRFSU to doubles, if any other letters return false
			if (inputHoursParse.match(/[bcdeghijklnoqvxyz]/g) !== null) {
				phlogdev('Extra words in the string');
				return false;
			} else {
				inputHoursParse = inputHoursParse.replace(/m/g,'MM').replace(/t/g,'TT').replace(/w/g,'WW').replace(/r/g,'RR');
				inputHoursParse = inputHoursParse.replace(/f/g,'FF').replace(/s/g,'SS').replace(/u/g,'UU');
			}
			phlogdev('MM/TT format: ' + inputHoursParse);
			
			// tighten up spaces
			inputHoursParse = inputHoursParse.replace(/ {2,}/g,' ');
			inputHoursParse = inputHoursParse.replace(/ {1,}AA/g,'AA');
			inputHoursParse = inputHoursParse.replace(/ {1,}PP/g,'PP');
			// Expand hours into XX:XX format
			for (var asdf=0; asdf<5; asdf++) {  // repeat a few times to catch any skipped regex matches
				inputHoursParse = inputHoursParse.replace(/([^0-9\:])(\d{1})([^0-9\:])/g, '$10$2:00$3');
				inputHoursParse = inputHoursParse.replace(/^(\d{1})([^0-9\:])/g, '0$1:00$2');
				inputHoursParse = inputHoursParse.replace(/([^0-9\:])(\d{1})$/g, '$10$2:00');
				
				inputHoursParse = inputHoursParse.replace(/([^0-9\:])(\d{2})([^0-9\:])/g, '$1$2:00$3');
				inputHoursParse = inputHoursParse.replace(/^(\d{2})([^0-9\:])/g, '$1:00$2');
				inputHoursParse = inputHoursParse.replace(/([^0-9\:])(\d{2})$/g, '$1$2:00');
				
				inputHoursParse = inputHoursParse.replace(/(\D)(\d{1})(\d{2}\D)/g, '$10$2:$3');
				inputHoursParse = inputHoursParse.replace(/^(\d{1})(\d{2}\D)/g, '0$1:$2');
				inputHoursParse = inputHoursParse.replace(/(\D)(\d{1})(\d{2})$/g, '$10$2:$3');
				
				inputHoursParse = inputHoursParse.replace(/(\D\d{2})(\d{2}\D)/g, '$1:$2');
				inputHoursParse = inputHoursParse.replace(/^(\d{2})(\d{2}\D)/g, '$1:$2');
				inputHoursParse = inputHoursParse.replace(/(\D\d{2})(\d{2})$/g, '$1:$2');
				
				inputHoursParse = inputHoursParse.replace(/(\D)(\d{1}\:)/g, '$10$2');
				inputHoursParse = inputHoursParse.replace(/^(\d{1}\:)/g, '0$1');
			}
			
			// replace 12AM range with 00
			inputHoursParse = inputHoursParse.replace( /12(\:\d{2}AA)/g, '00$1');
			// Change PM hours to 24hr time
			while (inputHoursParse.match(/\d{2}\:\d{2}PP/) !== null) {
				tfHourTemp = inputHoursParse.match(/(\d{2})\:\d{2}PP/)[1];
				tfHourTemp = parseInt(tfHourTemp) % 12 + 12;
				inputHoursParse = inputHoursParse.replace(/\d{2}(\:\d{2})PP/,tfHourTemp.toString()+'$1');
			}
			// kill the AA
			inputHoursParse = inputHoursParse.replace( /AA/g, '');
			phlogdev('XX:XX format: ' + inputHoursParse);
			
			// Side check for tabular input
			var inputHoursParseTab = inputHoursParse.replace( /[^A-Z0-9\:-]/g, ' ').replace( / {2,}/g, ' ');
			inputHoursParseTab = inputHoursParseTab.replace( /^ +/g, '').replace( / {1,}$/g, '');
			if (inputHoursParseTab.match(/[A-Z]{2}\:?\-? [A-Z]{2}\:?\-? [A-Z]{2}\:?\-? [A-Z]{2}\:?\-? [A-Z]{2}\:?\-?/g) !== null) {
				inputHoursParseTab = inputHoursParseTab.split(' ');
				var reorderThree = [0,7,14,1,8,15,2,9,16,3,10,17,4,11,18,5,12,19,6,13,20];
				var reorderTwo = [0,7,1,8,2,9,3,10,4,11,5,12,6,13];
				var inputHoursParseReorder = [], reix;
				if (inputHoursParseTab.length === 21) {
					for (reix=0; reix<21; reix++) {
						inputHoursParseReorder.push(inputHoursParseTab[reorderThree[reix]]);
					}
				} else if (inputHoursParseTab.length === 18) {
					for (reix=0; reix<18; reix++) {
						inputHoursParseReorder.push(inputHoursParseTab[reorderThree[reix]]);
					}
				} else if (inputHoursParseTab.length === 15) {
					for (reix=0; reix<15; reix++) {
						inputHoursParseReorder.push(inputHoursParseTab[reorderThree[reix]]);
					}
				} else if (inputHoursParseTab.length === 14) {
					for (reix=0; reix<14; reix++) {
						inputHoursParseReorder.push(inputHoursParseTab[reorderTwo[reix]]);
					}
				} else if (inputHoursParseTab.length === 12) {
					for (reix=0; reix<12; reix++) {
						inputHoursParseReorder.push(inputHoursParseTab[reorderTwo[reix]]);
					}
				} else if (inputHoursParseTab.length === 10) {
					for (reix=0; reix<10; reix++) {
						inputHoursParseReorder.push(inputHoursParseTab[reorderTwo[reix]]);
					}
				} 
				//phlogdev('inputHoursParseTab: ' + inputHoursParseTab);
				phlogdev('inputHoursParseReorder: ' + inputHoursParseReorder);
				if (inputHoursParseReorder.length > 9) {
					inputHoursParseReorder = inputHoursParseReorder.join(' ');
					inputHoursParseReorder = inputHoursParseReorder.replace(/(\:\d{2}) (\d{2}\:)/g, '$1-$2');
					inputHoursParse = inputHoursParseReorder;
				}
				
			}
			
			
			// remove colons after Days field
			inputHoursParse = inputHoursParse.replace(/(\D+)\:/g, '$1 ');
			
			// Find any double sets
			inputHoursParse = inputHoursParse.replace(/([A-Z \-]{2,}) *(\d{2}\:\d{2} *\-{1} *\d{2}\:\d{2}) *(\d{2}\:\d{2} *\-{1} *\d{2}\:\d{2})/g, '$1$2$1$3');
			inputHoursParse = inputHoursParse.replace(/(\d{2}\:\d{2}) *(\d{2}\:\d{2})/g, '$1-$2');
			phlogdev('Add dash: ' + inputHoursParse);
			
			// remove all spaces
			inputHoursParse = inputHoursParse.replace( / */g, '');
			
			// Remove any dashes acting as Day separators for 3+ days ("M-W-F")
			inputHoursParse = inputHoursParse.replace( /([A-Z]{2})-([A-Z]{2})-([A-Z]{2})-([A-Z]{2})-([A-Z]{2})-([A-Z]{2})-([A-Z]{2})/g, '$1$2$3$4$5$6$7');
			inputHoursParse = inputHoursParse.replace( /([A-Z]{2})-([A-Z]{2})-([A-Z]{2})-([A-Z]{2})-([A-Z]{2})-([A-Z]{2})/g, '$1$2$3$4$5$6');
			inputHoursParse = inputHoursParse.replace( /([A-Z]{2})-([A-Z]{2})-([A-Z]{2})-([A-Z]{2})-([A-Z]{2})/g, '$1$2$3$4$5');
			inputHoursParse = inputHoursParse.replace( /([A-Z]{2})-([A-Z]{2})-([A-Z]{2})-([A-Z]{2})/g, '$1$2$3$4');
			inputHoursParse = inputHoursParse.replace( /([A-Z]{2})-([A-Z]{2})-([A-Z]{2})/g, '$1$2$3');
			
			// parse any 'through' type terms on the day ranges (MM-RR --> MMTTWWRR)
			while (inputHoursParse.match(/[A-Z]{2}\-[A-Z]{2}/) !== null) {
				tfDaysTemp = inputHoursParse.match(/([A-Z]{2})\-([A-Z]{2})/);
				var startDayIX = dayCodeVec.indexOf(tfDaysTemp[1]);
				newDayCodeVec = [tfDaysTemp[1]];
				for (var dcvix=startDayIX+1; dcvix<startDayIX+7; dcvix++) {
					newDayCodeVec.push(dayCodeVec[dcvix]);
					if (tfDaysTemp[2] === dayCodeVec[dcvix]) {
						break;
					}
				}
				newDayCodeVec = newDayCodeVec.join('');
				inputHoursParse = inputHoursParse.replace(/[A-Z]{2}\-[A-Z]{2}/,newDayCodeVec);
			}
			
			// split the string between numerical and letter characters
			inputHoursParse = inputHoursParse.replace(/([A-Z])\-?\:?([0-9])/g,'$1|$2');
			inputHoursParse = inputHoursParse.replace(/([0-9])\-?\:?([A-Z])/g,'$1|$2');
			inputHoursParse = inputHoursParse.replace(/(\d{2}\:\d{2})\:00/g,'$1');  // remove seconds
			inputHoursParse = inputHoursParse.split("|");
			phlogdev('Split: ' + inputHoursParse);
			
			var daysVec = [], hoursVec = [];
			for (tsix=0; tsix<inputHoursParse.length; tsix++) {
				if (inputHoursParse[tsix][0].match(/[A-Z]/) !== null) {
					daysVec.push(inputHoursParse[tsix]);
				} else if (inputHoursParse[tsix][0].match(/[0-9]/) !== null) {
					hoursVec.push(inputHoursParse[tsix]);
				} else {
					phlogdev('Filtering error');
					return false;
				}
			}
			
			// check that the dayArray and hourArray lengths correspond
			if ( daysVec.length !== hoursVec.length ) {
				phlogdev('Hour and Day arrays are not matched');
				return false;
			}
			
			// Combine days with the same hours in the same vector
			var newDaysVec = [], newHoursVec = [], hrsIX;
			for (tsix=0; tsix<daysVec.length; tsix++) {
				if (hoursVec[tsix] !== '99:99-99:99') {  // Don't add the closed days
					hrsIX = newHoursVec.indexOf(hoursVec[tsix]);
					if (hrsIX > -1) {
						newDaysVec[hrsIX] = newDaysVec[hrsIX] + daysVec[tsix];
					} else {
						newDaysVec.push(daysVec[tsix]);
						newHoursVec.push(hoursVec[tsix]);
					}
				}
			}
			
			var hoursObjectArray = [], hoursObjectArrayMinDay = [], hoursObjectArraySorted = [], hoursObjectAdd, daysObjArray, toFromSplit;
			for (tsix=0; tsix<newDaysVec.length; tsix++) {
				hoursObjectAdd = {};
				daysObjArray = [];
				toFromSplit = newHoursVec[tsix].match(/(\d{2}\:\d{2})\-(\d{2}\:\d{2})/);
				if (toFromSplit === null) {
					phlogdev('Hours in wrong format');
					return false;
				} else {  // Check for hours outside of 0-23 and 0-59
					var hourCheck = toFromSplit[1].match(/(\d{2})\:/)[1];
					if (hourCheck>23 || hourCheck < 0) {
						phlogdev('Not a valid time');
						return false;
					}
					hourCheck = toFromSplit[2].match(/(\d{2})\:/)[1];
					if (hourCheck>23 || hourCheck < 0) {
						phlogdev('Not a valid time');
						return false;
					}
					hourCheck = toFromSplit[1].match(/\:(\d{2})/)[1];
					if (hourCheck>59 || hourCheck < 0) {
						phlogdev('Not a valid time');
						return false;
					}
					hourCheck = toFromSplit[2].match(/\:(\d{2})/)[1];
					if (hourCheck>59 || hourCheck < 0) {
						phlogdev('Not a valid time');
						return false;
					}
				}
				// Make the days object
				if ( newDaysVec[tsix].indexOf('MM') > -1 ) {
					daysObjArray.push(1);
				}
				if ( newDaysVec[tsix].indexOf('TT') > -1 ) {
					daysObjArray.push(2);
				} 
				if ( newDaysVec[tsix].indexOf('WW') > -1 ) {
					daysObjArray.push(3);
				} 
				if ( newDaysVec[tsix].indexOf('RR') > -1 ) {
					daysObjArray.push(4);
				} 
				if ( newDaysVec[tsix].indexOf('FF') > -1 ) {
					daysObjArray.push(5);
				} 
				if ( newDaysVec[tsix].indexOf('SS') > -1 ) {
					daysObjArray.push(6);
				} 
				if ( newDaysVec[tsix].indexOf('UU') > -1 ) {
					daysObjArray.push(0);
				}
				// build the hours object
				hoursObjectAdd.fromHour = toFromSplit[1];
				hoursObjectAdd.toHour = toFromSplit[2];
				hoursObjectAdd.days = daysObjArray.sort();
				hoursObjectArray.push(hoursObjectAdd);
				// track the order
				if (hoursObjectAdd.days.length > 1 && hoursObjectAdd.days[0] === 0) {
					hoursObjectArrayMinDay.push( hoursObjectAdd.days[1] * 100 + parseInt(toFromSplit[1][0])*10 + parseInt(toFromSplit[1][1]) );
				} else {
					hoursObjectArrayMinDay.push( (((hoursObjectAdd.days[0]+6)%7)+1) * 100 + parseInt(toFromSplit[1][0])*10 + parseInt(toFromSplit[1][1]) );
				}
			}
			sortWithIndex(hoursObjectArrayMinDay);
			for (var hoaix=0; hoaix < hoursObjectArrayMinDay.length; hoaix++) {
				hoursObjectArraySorted.push(hoursObjectArray[hoursObjectArrayMinDay.sortIndices[hoaix]]);
			}
			if ( !checkHours(hoursObjectArraySorted) ) {
				phlogdev('Overlapping hours');
				return false;
			} else {
				for ( var ohix=0; ohix<hoursObjectArraySorted.length; ohix++ ) {
					phlogdev(hoursObjectArraySorted[ohix]);
					if ( hoursObjectArraySorted[ohix].days.length === 2 && hoursObjectArraySorted[ohix].days[0] === 0 && hoursObjectArraySorted[ohix].days[1] === 1) {
						// separate hours
						phlogdev('Splitting M-S entry...');
						hoursObjectArraySorted.push({days: [0], fromHour: hoursObjectArraySorted[ohix].fromHour, toHour: hoursObjectArraySorted[ohix].toHour});
						hoursObjectArraySorted[ohix].days = [1];
					}
				}	
			}
			return hoursObjectArraySorted;
		}
		
		// function to check overlapping hours
		function checkHours(hoursObj) {
			if (hoursObj.length === 1) {
				return true;
			}
			var daysObj, fromHourTemp, toHourTemp;
			for (var day2Ch=0; day2Ch<7; day2Ch++) {  // Go thru each day of the week 
				daysObj = [];
				for ( var hourSet = 0; hourSet < hoursObj.length; hourSet++ ) {  // For each set of hours
					if (hoursObj[hourSet].days.indexOf(day2Ch) > -1) {  // pull out hours that are for the current day, add 2400 if it goes past midnight, and store
						fromHourTemp = hoursObj[hourSet].fromHour.replace(/\:/g,'');
						toHourTemp = hoursObj[hourSet].toHour.replace(/\:/g,'');
						if (toHourTemp < fromHourTemp) {
							toHourTemp = parseInt(toHourTemp) + 2400;
						}
						daysObj.push([fromHourTemp, toHourTemp]);
					}
				}
				if (daysObj.length > 1) {  // If there's multiple hours for the day, check them for overlap
					for ( var hourSetCheck2 = 1; hourSetCheck2 < daysObj.length; hourSetCheck2++ ) {
						for ( var hourSetCheck1 = 0; hourSetCheck1 < hourSetCheck2; hourSetCheck1++ ) {
							if ( daysObj[hourSetCheck2][0] > daysObj[hourSetCheck1][0] && daysObj[hourSetCheck2][0] < daysObj[hourSetCheck1][1] ) {
								return false;
							}
							if ( daysObj[hourSetCheck2][1] > daysObj[hourSetCheck1][0] && daysObj[hourSetCheck2][1] < daysObj[hourSetCheck1][1] ) {
								return false;
							}
						}
					}
				}
			}
			return true;
		}
		
		// Duplicate place finder  ###bmtg
		function findNearbyDuplicate(itemName, itemAliases, item, recenterOption) {
			dupeIDList = [item.attributes.id];
			dupeHNRangeList = [];
			dupeHNRangeIDList = [];
			dupeHNRangeDistList = [];
			var venueList = W.model.venues.objects, currNameList = [], testNameList = [], testVenueAtt, testName, testNameNoNum, itemNameRF, aliasNameRF, aliasNameNoNum;
			var t0, t1, wlDupeMatch = false, wlDupeList = [], nameMatch = false, altNameMatch = -1, aliix, cnlix, tnlix, randInt = 100;
			var outOfExtent = false, mapExtent = W.map.getExtent(), padFrac = 0.15;  // how much to pad the zoomed window
			// Initialize the cooridnate extents for duplicates
			var minLon = item.geometry.getCentroid().x, minLat = item.geometry.getCentroid().y;
			var maxLon = minLon, maxLat = minLat;
			// genericterms to skip if it's all that remains after stripping numbers
			var noNumSkip = 'BANK|ATM|HOTEL|MOTEL|STORE|MARKET|SUPERMARKET|GYM|GAS|GASOLINE|GASSTATION|CAFE|OFFICE|OFFICES|CARRENTAL|RENTALCAR|RENTAL|SALON|BAR|BUILDING|LOT';
			noNumSkip = noNumSkip + '|'+ collegeAbbreviations;
			noNumSkip = noNumSkip.split('|');
			// Make the padded extent
			mapExtent.left = mapExtent.left + padFrac * (mapExtent.right-mapExtent.left);
			mapExtent.right = mapExtent.right - padFrac * (mapExtent.right-mapExtent.left);
			mapExtent.bottom = mapExtent.bottom + padFrac * (mapExtent.top-mapExtent.bottom);
			mapExtent.top = mapExtent.top - padFrac * (mapExtent.top-mapExtent.bottom);
			
			var allowedTwoLetters = ['BP','DQ','BK','BW','LQ','QT','DB','PO'];
				
			var labelFeatures = [], dupeNames = [], labelText, labelTextReformat, pt, textFeature, labelColorIX = 0;
			var labelColorList = ['#3F3'];
			// Name formatting for the WME place name 
			itemNameRF = itemName.toUpperCase().replace(/ AND /g, '').replace(/^THE /g, '').replace(/[^A-Z0-9]/g, '');  // Format name
			if ( itemNameRF.length>2 || allowedTwoLetters.indexOf(itemNameRF) > -1 ) {
				currNameList.push(itemNameRF);
			} else {
				currNameList.push('PRIMNAMETOOSHORT_PJZWX');
			}
			var itemNameNoNum = itemNameRF.replace(/[^A-Z]/g, '');  // Clear non-letter characters for alternate match ( HOLLYIVYPUB23 --> HOLLYIVYPUB )
			if ( ((itemNameNoNum.length>2 && noNumSkip.indexOf(itemNameNoNum) === -1) || allowedTwoLetters.indexOf(itemNameNoNum) > -1) && item.attributes.categories.indexOf('PARKING_LOT') === -1 ) {  //  only add de-numbered name if anything remains
				currNameList.push(itemNameNoNum);
			}
			if (itemAliases.length > 0) {
				for (aliix=0; aliix<itemAliases.length; aliix++) {
					aliasNameRF = itemAliases[aliix].toUpperCase().replace(/ AND /g, '').replace(/^THE /g, '').replace(/[^A-Z0-9]/g, '');  // Format name
					if ( (aliasNameRF.length>2 && noNumSkip.indexOf(aliasNameRF) === -1) || allowedTwoLetters.indexOf(aliasNameRF) > -1 ) {  //  only add de-numbered name if anything remains
						currNameList.push(aliasNameRF);
					}
					aliasNameNoNum = aliasNameRF.replace(/[^A-Z]/g, '');  // Clear non-letter characters for alternate match ( HOLLYIVYPUB23 --> HOLLYIVYPUB ) 
					if ( ((aliasNameNoNum.length>2 && noNumSkip.indexOf(aliasNameNoNum) === -1) || allowedTwoLetters.indexOf(aliasNameNoNum) > -1) && item.attributes.categories.indexOf('PARKING_LOT') === -1 ) {  //  only add de-numbered name if anything remains
						currNameList.push(aliasNameNoNum);
					}
				}
			}
			currNameList = uniq(currNameList);  //  remove duplicates
			
			// Remove any previous search labels and move the layer above the places layer	
			WMEPH_NameLayer.destroyFeatures();
			var vecLyrPlaces = W.map.getLayersBy("uniqueName","landmarks")[0];
			WMEPH_NameLayer.setZIndex(parseInt(vecLyrPlaces.getZIndex())+3);  // Move layer to just on top of Places layer
			
			if ( venueWhitelist.hasOwnProperty(item.attributes.id) ) {
				if ( venueWhitelist[item.attributes.id].hasOwnProperty('dupeWL') ) {
					wlDupeList = venueWhitelist[item.attributes.id].dupeWL;
				}
			}
			
			if (devUser) {
				t0 = performance.now();  // Speed check start
			}
			var numVenues = 0, overlappingFlag = false;
			var addrItem = item.getAddress(), itemCompAddr = false;
			if ( addrItem.hasOwnProperty('attributes') ) {
				addrItem = addrItem.attributes;
			}
			if (addrItem.street !== null && addrItem.street.name !== null && item.attributes.houseNumber && item.attributes.houseNumber.match(/\d/g) !== null) {
				itemCompAddr = true;
			}
			
				
			for (var venix in venueList) {  // for each place on the map:
				if (venueList.hasOwnProperty(venix)) {  // hOP filter
					numVenues++;
					nameMatch = false;
					altNameMatch = -1;
					testVenueAtt = venueList[venix].attributes;
					var pt2ptDistance =  item.geometry.getCentroid().distanceTo(venueList[venix].geometry.getCentroid());
					if ( pt2ptDistance < 2 && item.attributes.id !== testVenueAtt.id ) {
						overlappingFlag = true;
					}
					wlDupeMatch = false;
					if (wlDupeList.length>0 && wlDupeList.indexOf(testVenueAtt.id) > -1) {
						wlDupeMatch = true;
					}
					
					// get HNs for places on same street
					var addrDupe = venueList[venix].getAddress();
					if ( addrDupe.hasOwnProperty('attributes') ) {
						addrDupe = addrDupe.attributes;
					}
					if (itemCompAddr && addrDupe.street !== null && addrDupe.street.name !== null && testVenueAtt.houseNumber && testVenueAtt.houseNumber !== '' && 
					venix !== item.attributes.id && addrItem.street.name === addrDupe.street.name && testVenueAtt.houseNumber < 1000000) {
						dupeHNRangeList.push(parseInt(testVenueAtt.houseNumber));
						dupeHNRangeIDList.push(testVenueAtt.id);
						dupeHNRangeDistList.push(pt2ptDistance);
					}
					
					
					// Check for duplicates
					if ( !wlDupeMatch && dupeIDList.length<6 && pt2ptDistance < 800 && !testVenueAtt.residential && venix !== item.attributes.id && 'string' === typeof testVenueAtt.id && testVenueAtt.name !== null && testVenueAtt.name.length>1 ) {  // don't do res, the point itself, new points or no name
						// If item has a complete address and test venue does, and they are different, then no dupe
						var suppressMatch = false;  
						if ( itemCompAddr && addrDupe.street !== null && addrDupe.street.name !== null && testVenueAtt.houseNumber && testVenueAtt.houseNumber.match(/\d/g) !== null ) {
							if ( item.attributes.lockRank > 0 && testVenueAtt.lockRank > 0 ) {
								if ( item.attributes.houseNumber !== testVenueAtt.houseNumber || addrItem.street.name !== addrDupe.street.name ) {
									suppressMatch = true;
								}
							} else { 
								if ( item.attributes.houseNumber !== testVenueAtt.houseNumber && addrItem.street.name !== addrDupe.street.name ) {
									suppressMatch = true;
								}
							}
						}
						
						
						if ( !suppressMatch ) {
							//Reformat the testPlace name
							testName = testVenueAtt.name.toUpperCase().replace(/ AND /g, '').replace(/^THE /g, '').replace(/[^A-Z0-9]/g, '');  // Format test name
							if (  (testName.length>2 && noNumSkip.indexOf(testName) === -1) || allowedTwoLetters.indexOf(testName) > -1  ) {
								testNameList = [testName];
							} else {
								testNameList = ['TESTNAMETOOSHORTQZJXS'+randInt];
								randInt++;
							}
							
							testNameNoNum = testName.replace(/[^A-Z]/g, '');  // Clear non-letter characters for alternate match
							if ( ((testNameNoNum.length>2 && noNumSkip.indexOf(testNameNoNum) === -1) || allowedTwoLetters.indexOf(testNameNoNum) > -1) && testVenueAtt.categories.indexOf('PARKING_LOT') === -1 ) {  //  only add de-numbered name if at least 2 chars remain
								testNameList.push(testNameNoNum);
							}
							// primary name matching loop
							
							for (tnlix=0; tnlix < testNameList.length; tnlix++) {
								for (cnlix=0; cnlix < currNameList.length; cnlix++) {
									if ( (testNameList[tnlix].indexOf(currNameList[cnlix]) > -1 || currNameList[cnlix].indexOf(testNameList[tnlix]) > -1) ) {
										nameMatch = true;
										break;
									}
								}
								if (nameMatch) {break;}  // break if a match found
							}
							if (!nameMatch && testVenueAtt.aliases.length > 0) {
								for (aliix=0; aliix<testVenueAtt.aliases.length; aliix++) {
									aliasNameRF = testVenueAtt.aliases[aliix].toUpperCase().replace(/ AND /g, '').replace(/^THE /g, '').replace(/[^A-Z0-9]/g, '');  // Format name
									if ( (aliasNameRF.length>2 && noNumSkip.indexOf(aliasNameRF) === -1) || allowedTwoLetters.indexOf(aliasNameRF) > -1  ) {
										testNameList = [aliasNameRF];
									} else {
										testNameList = ['ALIASNAMETOOSHORTQOFUH'+randInt];
										randInt++;
									}
									aliasNameNoNum = aliasNameRF.replace(/[^A-Z]/g, '');  // Clear non-letter characters for alternate match ( HOLLYIVYPUB23 --> HOLLYIVYPUB ) 
									if (((aliasNameNoNum.length>2 && noNumSkip.indexOf(aliasNameNoNum) === -1) || allowedTwoLetters.indexOf(aliasNameNoNum) > -1) && testVenueAtt.categories.indexOf('PARKING_LOT') === -1) {  //  only add de-numbered name if at least 2 characters remain
										testNameList.push(aliasNameNoNum);
									} else {
										testNameList.push('111231643239'+randInt);  //  just to keep track of the alias in question, always add something.
										randInt++;
									}
								}
								for (tnlix=0; tnlix < testNameList.length; tnlix++) {
									for (cnlix=0; cnlix < currNameList.length; cnlix++) {
										if ( (testNameList[tnlix].indexOf(currNameList[cnlix]) > -1 || currNameList[cnlix].indexOf(testNameList[tnlix]) > -1) ) {
											// get index of that match (half of the array index with floor)
											altNameMatch = Math.floor(tnlix/2);  
											break;
										}
									}
									if (altNameMatch > -1) {break;}  // break from the rest of the alts if a match found
								}
							}
							// If a match was found:
							if ( nameMatch || altNameMatch > -1 ) {
								dupeIDList.push(testVenueAtt.id);  // Add the item to the list of matches
								WMEPH_NameLayer.setVisibility(true);  // If anything found, make visible the dupe layer
								if (nameMatch) {
									labelText = testVenueAtt.name;  // Pull duplicate name
								} else {
									labelText = testVenueAtt.aliases[altNameMatch] + ' (Alt)';  // Pull duplicate alt name
								}
								phlogdev('Possible duplicate found. WME place: ' + itemName + ' / Nearby place: ' + labelText);
								
								// Reformat the name into multiple lines based on length
								var startIX=0, endIX=0, labelTextBuild = [], maxLettersPerLine = Math.round(2*Math.sqrt(labelText.replace(/ /g,'').length/2));
								maxLettersPerLine = Math.max(maxLettersPerLine,4);
								while (endIX !== -1) {
									endIX = labelText.indexOf(' ', endIX+1);
									if (endIX - startIX > maxLettersPerLine) {
										labelTextBuild.push( labelText.substr(startIX,endIX-startIX) );
										startIX = endIX+1;
									}
								}
								labelTextBuild.push( labelText.substr(startIX) );  // Add last line
								labelTextReformat = labelTextBuild.join('\n');
								// Add photo icons
								if (testVenueAtt.images.length > 0 ) {
									labelTextReformat = labelTextReformat + ' ';
									for (var phix=0; phix<testVenueAtt.images.length; phix++) {
										if (phix===3) {
											labelTextReformat = labelTextReformat + '+';
											break;
										}
										//labelTextReformat = labelTextReformat + '\u25A3';  // add photo icons
										labelTextReformat = labelTextReformat + '\u25A3';  // add photo icons
									}
								}
								
								pt = venueList[venix].geometry.getCentroid();
								if ( !mapExtent.containsLonLat(pt.toLonLat()) ) {
									outOfExtent = true;
								}
								minLat = Math.min(minLat, pt.y); minLon = Math.min(minLon, pt.x);
								maxLat = Math.max(maxLat, pt.y); maxLon = Math.max(maxLon, pt.x);
								
								textFeature = new OpenLayers.Feature.Vector( pt, {labelText: labelTextReformat, fontColor: '#fff', 
									strokeColor: labelColorList[labelColorIX%labelColorList.length], labelAlign: 'cm', pointRadius: 25 , dupeID: testVenueAtt.id } );
								labelFeatures.push(textFeature);
								//WMEPH_NameLayer.addFeatures(labelFeatures);
								dupeNames.push(labelText);
							}
							labelColorIX++;
						}
					}
				}
			}
			// Add a marker for the working place point if any dupes were found
			//phlogdev('dupeIDList: ' + dupeIDList);
			if (dupeIDList.length>1) {
				pt = item.geometry.getCentroid();
				if ( !mapExtent.containsLonLat(pt.toLonLat()) ) {
					outOfExtent = true;
				}
				minLat = Math.min(minLat, pt.y); minLon = Math.min(minLon, pt.x);
				maxLat = Math.max(maxLat, pt.y); maxLon = Math.max(maxLon, pt.x);
				// Add photo icons
				var currentLabel = 'Current';
				if (item.attributes.images.length > 0 ) {
					for (var ciix=0; ciix<item.attributes.images.length; ciix++) {
						currentLabel = currentLabel + ' ';
						if (ciix===3) {
							currentLabel = currentLabel + '+';
							break;
						}
						currentLabel = currentLabel + '\u25A3';  // add photo icons
					}
				}
				textFeature = new OpenLayers.Feature.Vector( pt, {labelText: currentLabel, fontColor: '#fff', strokeColor: '#fff', labelAlign: 'cm', pointRadius: 25 , dupeID: item.attributes.id} );
				labelFeatures.push(textFeature);
				WMEPH_NameLayer.addFeatures(labelFeatures);
			}
			if (devUser) {
				t1 = performance.now();  // log search time
				//phlogdev("Ran dupe search on " + numVenues + " nearby venues in " + (t1 - t0) + " milliseconds.");
			}
			if (recenterOption && dupeNames.length>0 && outOfExtent) {  // then rebuild the extent to include the duplicate
				var padMult = 1.0;
				mapExtent.left = minLon - (padFrac*padMult) * (maxLon-minLon);
				mapExtent.right = maxLon + (padFrac*padMult) * (maxLon-minLon);
				mapExtent.bottom = minLat - (padFrac*padMult) * (maxLat-minLat);
				mapExtent.top = maxLat + (padFrac*padMult) * (maxLat-minLat);
				W.map.zoomToExtent(mapExtent);
			}
			return [dupeNames, overlappingFlag];
		}  // END Dupefinder function
		
		// On selection of new item:
		function checkSelection() {
			if (W.selectionManager.selectedItems.length > 0) {
				var newItem = W.selectionManager.selectedItems[0].model;
				if (newItem.type === "venue") {
					displayRunButton();
					getPanelFields();
					if ( $("#WMEPH-EnableCloneMode" + devVersStr).prop('checked') ) {
						displayCloneButton();
					}
					if (localStorage.getItem("WMEPH-AutoRunOnSelect" + devVersStr) === '1') {
						setTimeout(harmonizePlace,200);
					}
					for (var dvtix=0; dvtix<dupeIDList.length; dvtix++) {
						if (newItem.attributes.id === dupeIDList[dvtix]) {  // If the user selects a place in the dupe list, don't clear the labels yet
							return;
						}
					}
				}
				// If the selection is anything else, clear the labels
				WMEPH_NameLayer.destroyFeatures();
				WMEPH_NameLayer.setVisibility(false);
			}
		}  // END checkSelection function
		
		// Functions to infer address from nearby segments
		function WMEPH_inferAddress(MAX_RECURSION_DEPTH) {
			'use strict';
			var distanceToSegment,
				foundAddresses = [],
				i,
				// Ignore pedestrian boardwalk, stairways, runways, and railroads
				IGNORE_ROAD_TYPES = [10, 16, 18, 19],
				inferredAddress = {
					country: null,
					city: null,
					state: null,
					street: null
				},
				//MAX_RECURSION_DEPTH = 8,
				n,
				orderedSegments = [],
				segments = W.model.segments.getObjectArray(),
				selectedItem,
				stopPoint,
				wmeSelectedItems = W.selectionManager.selectedItems;
		
			var findClosestNode = function () {
				var closestSegment = orderedSegments[0].segment,
					distanceA,
					distanceB,
					nodeA = W.model.nodes.get(closestSegment.attributes.fromNodeID),
					nodeB = W.model.nodes.get(closestSegment.attributes.toNodeID);
				if (nodeA && nodeB) {
					distanceA = stopPoint.distanceTo(nodeA.attributes.geometry);
					distanceB = stopPoint.distanceTo(nodeB.attributes.geometry);
					return distanceA < distanceB ?
						nodeA.attributes.id : nodeB.attributes.id;
				}
			};
		
			var findConnections = function (startingNodeID, recursionDepth) {
				var connectedSegments,
					k,
					newNode;
			
				// Limit search depth to avoid problems.
				if (recursionDepth > MAX_RECURSION_DEPTH) {
					//console.debug('Max recursion depth reached');
					return;
				}
			
				// Populate variable with segments connected to starting node.
				connectedSegments = _.where(orderedSegments, {
					fromNodeID: startingNodeID
				});
				connectedSegments = connectedSegments.concat(_.where(orderedSegments, {
					toNodeID: startingNodeID
				}));
			
				//console.debug('Looking for connections at node ' + startingNodeID);
			
				// Check connected segments for address info.
				for (k in connectedSegments) {
					if (connectedSegments.hasOwnProperty(k)) {
						if (hasStreetName(connectedSegments[k].segment)) {
							// Address found, push to array.
							/*
							console.debug('Address found on connnected segment ' +
							connectedSegments[k].segment.attributes.id +
							'. Recursion depth: ' + recursionDepth);
							*/
							foundAddresses.push({
								depth: recursionDepth,
								distance: connectedSegments[k].distance,
								segment: connectedSegments[k].segment
							});
							break;
						} else {
							// If not found, call function again starting from the other node on this segment.
							//console.debug('Address not found on connected segment ' + connectedSegments[k].segment.attributes.id);
							newNode = connectedSegments[k].segment.attributes.fromNodeID === startingNodeID ?
								connectedSegments[k].segment.attributes.toNodeID :
								connectedSegments[k].segment.attributes.fromNodeID;
							findConnections(newNode, recursionDepth + 1);
						}
					}
				}
			};
		
			var getFCRank = function (FC) {
				var typeToFCRank = {
					3: 0, // freeway
					6: 1, // major
					7: 2, // minor
					2: 3, // primary
					1: 4, // street
					20: 5, // PLR
					8: 6, // dirt
				};
				if (FC && !isNaN(FC)) {
					return typeToFCRank[FC] || 100;
				}
			};
		
			var hasStreetName = function (segment) {
				return segment && segment.type === 'segment' && segment.getAddressDetails().streetName !== 'No street';
			};
			
			// phlogdev("No address data, gathering ", 2);
		  
			// Make sure a place is selected and segments are loaded.
			if (wmeSelectedItems.length > 0 && segments.length > 0 &&
				wmeSelectedItems[0].model.type === 'venue') {
				selectedItem = W.selectionManager.selectedItems[0];
			} else {
				return;
			}
		
			stopPoint = selectedItem.model.isPoint() ? selectedItem.geometry :
				W.geometryEditing.editors.venue.navigationPoint.lonlat.toPoint();
		  
			// Go through segment array and calculate distances to segments.
			for (i = 0, n = segments.length; i < n; i++) {
				// Make sure the segment is not an ignored roadType.
				if (IGNORE_ROAD_TYPES.indexOf(segments[i].attributes.roadType) === -1) {
					distanceToSegment = stopPoint.distanceTo(segments[i].geometry);
					// Add segment object and its distanceTo to an array.
					orderedSegments.push({
						distance: distanceToSegment,
						fromNodeID: segments[i].attributes.fromNodeID,
						segment: segments[i],
						toNodeID: segments[i].attributes.toNodeID
					});
				}
			}
		
			// Sort the array with segments and distance.
			orderedSegments = _.sortBy(orderedSegments, 'distance');
		
			// Check closest segment for address first.
			if (hasStreetName(orderedSegments[0].segment)) {
				inferredAddress = orderedSegments[0].segment.getAddress();
			} else {
				// If address not found on closest segment, try to find address through branching method.
				findConnections(findClosestNode(), 1);
				if (foundAddresses.length > 0) {
					// If more than one address found at same recursion depth, look at FC of segments.
					if (foundAddresses.length > 1) {
						_.each(foundAddresses, function (element) {
							element.fcRank = getFCRank(
								element.segment.attributes.roadType);
						});
						foundAddresses = _.sortBy(foundAddresses, 'fcRank');
						foundAddresses = _.filter(foundAddresses, {
							fcRank: foundAddresses[0].fcRank
						});
					}
					
					// If multiple segments with same FC, Use address from segment with address that is closest by connectivity.
					if (foundAddresses.length > 1) {
						foundAddresses = _.sortBy(foundAddresses, 'depth');
						foundAddresses = _.filter(foundAddresses, {
							depth: foundAddresses[0].depth
						});
					}
					
					// If more than one of the closest segments by connectivity has the same FC, look for
					// closest segment geometrically.
					if (foundAddresses.length > 1) {
						foundAddresses = _.sortBy(foundAddresses, 'distance');
					}
					console.debug(foundAddresses[0].streetName, foundAddresses[0].depth);
					inferredAddress = foundAddresses[0].segment.getAddress();
				} else {
					// Default to closest if branching method fails.
					// Go through sorted segment array until a country, state, and city have been found.
					inferredAddress = _.find(orderedSegments, function (element) {
						return hasStreetName(element.segment);
					}).segment.getAddress() || inferredAddress;
				}
			}
			return inferredAddress;
		}  // END inferAddress function
		
		/**
		 * Updates the address for a place.
		 * @param feature {WME Venue Object} The place to update.
		 * @param address {Object} An object containing the country, state, city, and street
		 * objects.
		 */
		function updateAddress(feature, address) {
			'use strict';
			var newAttributes, 
				UpdateFeatureAddress = require('Waze/Action/UpdateFeatureAddress');
				feature = feature || item;
			if (feature && address && address.state && address.country) {
				newAttributes = {
					countryID: address.country.id,
					stateID: address.state.id,
					cityName: address.city.name,
					emptyCity: address.city.name ? null : true,
					streetName: address.street.name,
					emptyStreet: address.street.name ? null : true
				};
				W.model.actionManager.add(new UpdateFeatureAddress(feature, newAttributes));
				phlogdev('Address inferred and updated');
			}
		} // END updateAddress function

		// Build a Google search url based on place name and address
		function buildGLink(searchName,addr,HN) {
			var searchHN = "", searchStreet = "", searchCity = "";
			searchName = searchName.replace(/&/g, "%26");
			searchName = searchName.replace(/[ \/]/g, "%20");
			if ("string" === typeof addr.street.name && addr.street.name !== null && addr.street.name !== '') {
				searchStreet = addr.street.name + ",%20";
			}
			searchStreet = searchStreet.replace(/ /g, "%20");
			searchStreet = searchStreet.replace(/CR-/g, "County%20Rd%20");
			searchStreet = searchStreet.replace(/SR-/g, "State%20Hwy%20");
			searchStreet = searchStreet.replace(/US-/g, "US%20Hwy%20");
			searchStreet = searchStreet.replace(/ CR /g, "%20County%20Rd%20");
			searchStreet = searchStreet.replace(/ SR /g, "%20State%20Hwy%20");
			searchStreet = searchStreet.replace(/ US /g, "%20US%20Hwy%20");
			searchStreet = searchStreet.replace(/$CR /g, "County%20Rd%20");
			searchStreet = searchStreet.replace(/$SR /g, "State%20Hwy%20");
			searchStreet = searchStreet.replace(/$US /g, "US%20Hwy%20");
			if ("string" === typeof HN && searchStreet !== "") {
				searchHN = HN + "%20";
			}
			if ("string" === typeof addr.city.name && addr.city.name !== '') {
				searchCity = addr.city.name + ",%20";
			}
			searchCity = searchCity.replace(/ /g, "%20");
			
			return "http://www.google.com/search?q=" + searchName + ",%20" + searchHN + searchStreet + searchCity + addr.state.name;
		} // END buildGLink function
		
		// WME Category translation from Natural language to object language  (Bank / Financial --> BANK_FINANCIAL)
		function catTranslate(natCategories) {
			//console.log(natCategories);
			var natCategoriesRepl = natCategories.toUpperCase().replace(/ AND /g, "").replace(/[^A-Z]/g, "");
			if (natCategoriesRepl.indexOf('PETSTORE') > -1) {
				return "PET_STORE_VETERINARIAN_SERVICES";
			}
			for(var keyCat in catTransWaze2Lang){
				if ( natCategoriesRepl ===  catTransWaze2Lang[keyCat].toUpperCase().replace(/ AND /g, "").replace(/[^A-Z]/g, "")) {
					return keyCat;
				}
			}
			// if the category doesn't translate, then pop an alert that will make a forum post to the thread
			// Generally this means the category used in the PNH sheet is not close enough to the natural language categories used inside the WME translations
			if (confirm('WMEPH: Category Error!\nClick OK to report this error') ) {  
				forumMsgInputs = {
					subject: 'Re: WMEPH Bug report',
					message: 'Error report: Category "' + natCategories + '" is not translatable.',
				};
				WMEPH_errorReport(forumMsgInputs);
			}
			return "ERROR";
		}  // END catTranslate function
		
		// compares two arrays to see if equal, regardless of order
		function matchSets(array1, array2) {
			if (array1.length !== array2.length) {return false;}  // compare lengths
			for (var i = 0; i < array1.length; i++) {
				if (array2.indexOf(array1[i]) === -1) { 
					return false;   
				}           
			}       
			return true;
		}
		
		// function that checks if all elements of target are in array:source
		function containsAll(source,target) {
			if (typeof(target) === "string") { target = [target]; }  // if a single string, convert to an array
			for (var ixx = 0; ixx < target.length; ixx++) {
				if ( source.indexOf(target[ixx]) === -1 ) {
					return false; 
				}
			}
			return true;  
		}
		
		// function that checks if any element of target are in source
		function containsAny(source,target) {
			if (typeof(source) === "string") { source = [source]; }  // if a single string, convert to an array
			if (typeof(target) === "string") { target = [target]; }  // if a single string, convert to an array
			var result = source.filter(function(tt){ return target.indexOf(tt) > -1; });   
			return (result.length > 0);  
		}
		
		// Function that inserts a string or a string array into another string array at index ix and removes any duplicates
		function insertAtIX(array1, array2, ix) {  // array1 is original string, array2 is the inserted string, at index ix
			var arrayNew = array1.slice(0);  // slice the input array so it doesn't change
			if (typeof(array2) === "string") { array2 = [array2]; }  // if a single string, convert to an array
			if (typeof(array2) === "object") {  // only apply to inserted arrays
				var arrayTemp = arrayNew.splice(ix);  // split and hold the first part
				arrayNew.push.apply(arrayNew, array2);  // add the insert
				arrayNew.push.apply(arrayNew, arrayTemp);  // add the tail end of original
			}
			return uniq(arrayNew);  // remove any duplicates (so the function can be used to move the position of a string)
		}
		
		// Function to remove unnecessary aliases
		function removeSFAliases(nName, nAliases) {
			var newAliasesUpdate = [];
			nName = nName.toUpperCase().replace(/'/g,'').replace(/-/g,' ').replace(/\/ /g,' ').replace(/ \//g,' ').replace(/ {2,}/g,' ');
			for (var naix=0; naix<nAliases.length; naix++) {
				if ( !nName.startsWith( nAliases[naix].toUpperCase().replace(/'/g,'').replace(/-/g,' ').replace(/\/ /g,' ').replace(/ \//g,' ').replace(/ {2,}/g,' ') ) ) {
					newAliasesUpdate.push(nAliases[naix]);
				} else {
					//phlogdev('Unnecessary alias removed: ' + nAliases[naix]);
					bannButt.sfAliases.active = true;
				}
			}
			return newAliasesUpdate;
		}
		
		// settings tab
		function add_PlaceHarmonizationSettingsTab() {
			//Create Settings Tab
			var phTabHtml = '<li><a href="#sidepanel-ph' + devVersStr + '" data-toggle="tab" id="PlaceHarmonization' + devVersStr + '">WMEPH' + devVersStrSpace + '</a></li>';
			$("#user-tabs ul.nav-tabs:first").append(phTabHtml);
		
			//Create Settings Tab Content
			var phContentHtml = '<div class="tab-pane" id="sidepanel-ph' + devVersStr + '"><div id="PlaceHarmonizer' + devVersStr + '">WMEPH' + 
				devVersStrSpace + ' v. ' + WMEPHversion + '</div></div>';
			$("#user-info div.tab-content:first").append(phContentHtml);
			
			var c = '<div id="wmephtab" class="active" style="padding-top: 5px;">' + 
			'<ul class="nav nav-tabs"><li class="active"><a data-toggle="tab" href="#sidepanel-harmonizer' + devVersStr + '">Harmonize</a></li>' + 
			'<li><a data-toggle="tab" href="#sidepanel-highlighter' + devVersStr + '">HL \/ Scan</a></li>' +
			'<li><a data-toggle="tab" href="#sidepanel-wltools' + devVersStr + '">WL Tools</a></li></ul>' + 
			'<div class="tab-content"><div class="tab-pane active" id="sidepanel-harmonizer' + devVersStr + '"></div>' +
			'<div class="tab-pane" id="sidepanel-highlighter' + devVersStr + '"></div>' +
			'<div class="tab-pane" id="sidepanel-wltools' + devVersStr + '"></div></div></div>';
	
			//add the sub tabs to the scripts main tab
			$("#sidepanel-ph"+devVersStr).append(c);
			
			// Enable certain settings by default if not set by the user:
			if (localStorage.getItem('WMEPH-ColorHighlighting'+devVersStr) === null) {
				localStorage.setItem('WMEPH-ColorHighlighting'+devVersStr, '1');
			}
			
			//Create Settings Checkboxes and Load Data
			//example condition:  if ( $("#WMEPH-DisableDFZoom" + devVersStr).prop('checked') ) { }
			createSettingsCheckbox("sidepanel-harmonizer" + devVersStr, "WMEPH-WebSearchNewTab" + devVersStr,"Open URL & Search Results in new tab instead of new window");
			createSettingsCheckbox("sidepanel-harmonizer" + devVersStr, "WMEPH-DisableDFZoom" + devVersStr,"Disable zoom & center for duplicates");
			createSettingsCheckbox("sidepanel-harmonizer" + devVersStr, "WMEPH-EnableIAZoom" + devVersStr,"Enable zoom & center for places with no address");
			createSettingsCheckbox("sidepanel-harmonizer" + devVersStr, "WMEPH-HidePlacesWiki" + devVersStr,"Hide 'Places Wiki' button in results banner");
			if (devUser || betaUser || usrRank > 1) {
				createSettingsCheckbox("sidepanel-harmonizer" + devVersStr, "WMEPH-EnableServices" + devVersStr,"Enable automatic addition of common services");
			}
			if (devUser || betaUser || usrRank > 2) {
				createSettingsCheckbox("sidepanel-harmonizer" + devVersStr, "WMEPH-ConvenienceStoreToGasStations" + devVersStr,'Automatically add "Convenience Store" category to gas stations');
				createSettingsCheckbox("sidepanel-harmonizer" + devVersStr, "WMEPH-AddAddresses" + devVersStr,"Add detected address fields to places with no address");
				createSettingsCheckbox("sidepanel-harmonizer" + devVersStr, "WMEPH-EnableCloneMode" + devVersStr,"Enable place cloning tools");
				createSettingsCheckbox("sidepanel-harmonizer" + devVersStr, "WMEPH-AutoLockRPPs" + devVersStr,"Lock residential place points to region default");
				createSettingsCheckbox("sidepanel-harmonizer" + devVersStr, "WMEPH-AutoRunOnSelect" + devVersStr,'Automatically run the script when selecting a place');
			}
			
			// Highlighter settings
			var phDevContentHtml = '<p>Highlighter Settings:</p>';
			$("#sidepanel-highlighter" + devVersStr).append(phDevContentHtml);
			createSettingsCheckbox("sidepanel-highlighter" + devVersStr, "WMEPH-ColorHighlighting" + devVersStr,"Enable color highlighting of map to indicate places needing work");
			createSettingsCheckbox("sidepanel-highlighter" + devVersStr, "WMEPH-DisableHoursHL" + devVersStr,"Disable highlighting for missing hours");
			createSettingsCheckbox("sidepanel-highlighter" + devVersStr, "WMEPH-DisableWLHL" + devVersStr,"Disable Whitelist highlighting (shows all missing info regardless of WL)");
			if (devUser || betaUser || usrRank > 2) {
				//createSettingsCheckbox("sidepanel-highlighter" + devVersStr, "WMEPH-UnlockedRPPs" + devVersStr,"Highlight unlocked residential place points");
			}
			var phHRContentHtml = '<hr align="center" width="90%">';
			$("#sidepanel-highlighter" + devVersStr).append(phHRContentHtml);
			phHRContentHtml = '<p>Scanner Settings (coming soon)</p>';
			$("#sidepanel-highlighter" + devVersStr).append(phHRContentHtml);
			
			// Scanner settings
			//createSettingsCheckbox("sidepanel-highlighter" + devVersStr, "WMEPH-PlaceScanner" + devVersStr,"Placeholder, under development!");
			
			// Whitelist settings
			
			phHRContentHtml = '<hr align="center" width="90%">';
			$("#sidepanel-harmonizer" + devVersStr).append(phHRContentHtml);
			
			// User pref for KB Shortcut:
			// Set defaults
			if (isDevVersion) {
				if (thisUser.userName.toLowerCase() === 't0cableguy') {
					defaultKBShortcut = 'p';
				} else {
					defaultKBShortcut = 'S';
				}
			} else {
				defaultKBShortcut = 'A';
			}
			// Set local storage to default if none
			if (localStorage.getItem('WMEPH-KeyboardShortcut'+devVersStr) === null) {
				localStorage.setItem('WMEPH-KeyboardShortcut'+devVersStr, defaultKBShortcut);
			}
			
			// Add Letter input box
			var phKBContentHtml = $('<div id="PlaceHarmonizerKB' + devVersStr + 
				'"><div id="PlaceHarmonizerKBWarn' + devVersStr + '"></div>Shortcut Letter (a-Z): <input type="text" maxlength="1" id="WMEPH-KeyboardShortcut'+devVersStr+
				'" style="width: 30px;padding-left:8px"><div id="PlaceHarmonizerKBCurrent' + devVersStr + '"></div></div>');
        	$("#sidepanel-harmonizer" + devVersStr).append(phKBContentHtml);
			createSettingsCheckbox("PlaceHarmonizerKB" + devVersStr, "WMEPH-KBSModifierKey" + devVersStr, "Use Ctrl instead of Alt"); // Add Alt-->Ctrl checkbox
			if ( localStorage.getItem('WMEPH-KBSModifierKey'+devVersStr) === '1' ) {  // Change modifier key code if checked
				modifKey = 'Ctrl+';
			} 
			$('#WMEPH-KeyboardShortcut'+devVersStr).val(localStorage.getItem('WMEPH-KeyboardShortcut'+devVersStr));  // Load letter key value from local storage
			if ($('#WMEPH-KeyboardShortcut'+devVersStr).val().match(/^[a-z]{1}$/i) === null) { 
            	$('#WMEPH-KeyboardShortcut'+devVersStr).val(defaultKBShortcut);
				$(localStorage.setItem('WMEPH-KeyboardShortcut'+devVersStr, $('#WMEPH-KeyboardShortcut'+devVersStr).val()));
			}
			shortcutParse = parseKBSShift($('#WMEPH-KeyboardShortcut'+devVersStr).val());
			// Check for KBS conflict on Beta script load
			if (isDevVersion) {  
				if (checkWMEPH_KBSconflict(shortcutParse)) {
					alert('You have the same shortcut for the Beta version and the Production version of the script. The Beta version is disabled until you change the Beta shortcut');
				} else {
					shortcut.add(modifKey + shortcutParse, function() { harmonizePlace(); });
					phKBContentHtml = $('<span style="font-weight:bold">Current shortcut: '+modifKey+shortcutParse+'</span>');
        			$("#PlaceHarmonizerKBCurrent" + devVersStr).append(phKBContentHtml);
				}
			} else {  // Prod version always loads
				shortcut.add(modifKey + shortcutParse, function() { harmonizePlace(); });
				phKBContentHtml = $('<span style="font-weight:bold">Current shortcut: '+modifKey+shortcutParse+'</span>');
        		$("#PlaceHarmonizerKBCurrent" + devVersStr).append(phKBContentHtml);
			}
			
			// Modifier on-click changes
			var modifKeyNew;
			$("#WMEPH-KBSModifierKey" + devVersStr).click(function() {
				$("#PlaceHarmonizerKBWarn" + devVersStr).empty();  // remove any warning
				if ($("#WMEPH-KBSModifierKey" + devVersStr).prop('checked')) {
					modifKeyNew = 'Ctrl+';
				} else {
					modifKeyNew = 'Alt+';
				}
				shortcutParse = parseKBSShift($('#WMEPH-KeyboardShortcut'+devVersStr).val());
				
				if (checkWMEPH_KBSconflict(shortcutParse)) {
					$("#WMEPH-KBSModifierKey" + devVersStr).trigger('click');
					phKBContentHtml = '<p style="color:red">Shortcut conflict with other WMEPH version<p>';
					$("#PlaceHarmonizerKBWarn" + devVersStr).append(phKBContentHtml);
				} else {
					shortcut.remove(modifKey + shortcutParse);
					modifKey = modifKeyNew;
					shortcut.add(modifKey + shortcutParse, function() { harmonizePlace(); });
				}
				
				$("#PlaceHarmonizerKBCurrent" + devVersStr).empty();
				phKBContentHtml = $('<span style="font-weight:bold">Current shortcut: '+modifKey+shortcutParse+'</span>');
        		$("#PlaceHarmonizerKBCurrent" + devVersStr).append(phKBContentHtml);
			});
			
			// Upon change of the KB letter:
			var shortcutParseNew;
			$("#WMEPH-KeyboardShortcut"+devVersStr).change(function() {
				if ($('#WMEPH-KeyboardShortcut'+devVersStr).val().match(/^[a-z]{1}$/i) !== null) {  // If a single letter...
					$("#PlaceHarmonizerKBWarn" + devVersStr).empty();  // remove old warning
					// remove previous
					shortcutParse = parseKBSShift(localStorage.getItem('WMEPH-KeyboardShortcut'+devVersStr));
					shortcutParseNew = parseKBSShift($('#WMEPH-KeyboardShortcut'+devVersStr).val());
					
					if (checkWMEPH_KBSconflict(shortcutParseNew)) {
						$('#WMEPH-KeyboardShortcut'+devVersStr).val(localStorage.getItem('WMEPH-KeyboardShortcut'+devVersStr));
						//$("#PlaceHarmonizerKBWarn" + devVersStr).empty();
						phKBContentHtml = '<p style="color:red">Shortcut conflict with other WMEPH version<p>';
						$("#PlaceHarmonizerKBWarn" + devVersStr).append(phKBContentHtml);
					} else {
						shortcut.remove(modifKey + shortcutParse);
						shortcutParse = shortcutParseNew;
						shortcut.add(modifKey + shortcutParse, function() { harmonizePlace(); });
						$(localStorage.setItem('WMEPH-KeyboardShortcut'+devVersStr, $('#WMEPH-KeyboardShortcut'+devVersStr).val()) );
					}
					$("#PlaceHarmonizerKBCurrent" + devVersStr).empty();
					phKBContentHtml = $('<span style="font-weight:bold">Current shortcut: '+modifKey+shortcutParse+'</span>');
					$("#PlaceHarmonizerKBCurrent" + devVersStr).append(phKBContentHtml);
				} else {  // if not a letter then reset and flag
					$('#WMEPH-KeyboardShortcut'+devVersStr).val(localStorage.getItem('WMEPH-KeyboardShortcut'+devVersStr));
					$("#PlaceHarmonizerKBWarn" + devVersStr).empty();
					phKBContentHtml = '<p style="color:red">Only letters are allowed<p>';
					$("#PlaceHarmonizerKBWarn" + devVersStr).append(phKBContentHtml);
				}
			});
			
			
			if (devUser) {  // Override script regionality (devs only)
				phDevContentHtml = '<hr align="center" width="90%"><p>Dev Only Settings:</p>';
				$("#sidepanel-harmonizer" + devVersStr).append(phDevContentHtml);
				createSettingsCheckbox("sidepanel-harmonizer" + devVersStr, "WMEPH-RegionOverride" + devVersStr,"Disable Region Specificity");
			
			}
			
			// *** Whitelisting section
			if (localStorage.getItem('WMEPH_WLAddCount') === null) {
				localStorage.setItem('WMEPH_WLAddCount', 2);  // Counter to remind of WL backups
			}
			var phWLContentHtml = $('<div id="PlaceHarmonizerWLTools' + devVersStr + '">Whitelist string: <input onClick="this.select();" type="text" id="WMEPH-WLInput'+devVersStr+
				'" style="width: 200px;padding-left:1px"><br>'+
				'<input class="btn btn-success btn-xs" id="WMEPH-WLMerge'+ devVersStr +'" title="Merge the string into your existing Whitelist" type="button" value="Merge">'+
				'<br><input class="btn btn-success btn-xs" id="WMEPH-WLPull'+ devVersStr +'" title="Pull your existing Whitelist for backup or sharing" type="button" value="Pull">'+
				'<br><input class="btn btn-success btn-xs" id="WMEPH-WLShare'+ devVersStr +'" title="Share your Whitelist to a public Google sheet" type="button" value="Share your WL">'+
				'<br><input class="btn btn-info btn-xs" id="WMEPH-WLStats'+ devVersStr +'" title="Display WL stats" type="button" value="Stats">'+
				'<br><input class="btn btn-danger btn-xs" id="WMEPH-WLStateFilter'+ devVersStr +'" title="Remove all WL items for a state" type="button" value="Remove data for 1 State">'+
				'</div><div id="PlaceHarmonizerWLToolsMsg' + devVersStr + '"></div>');
        	$("#sidepanel-wltools" + devVersStr).append(phWLContentHtml);
			
			$("#WMEPH-WLMerge" + devVersStr).click(function() {
				$("#PlaceHarmonizerWLToolsMsg" + devVersStr).empty();
				if ($('#WMEPH-WLInput'+devVersStr).val() === 'resetWhitelist') {
					if (confirm('***Do you want to reset all Whitelist data?\nClick OK to erase.') ) {  // if the category doesn't translate, then pop an alert that will make a forum post to the thread
						venueWhitelist = { '1.1.1': { Placeholder: {  } } }; // Populate with a dummy place
						saveWL_LS(compressedWLLS);
					}
				} else {  // try to merge uncompressed WL data
					WLSToMerge = validateWLS($('#WMEPH-WLInput'+devVersStr).val());
					if (WLSToMerge) {
						phlog('Whitelists merged!');
						venueWhitelist = mergeWL(venueWhitelist,WLSToMerge);
						saveWL_LS(compressedWLLS);
						phWLContentHtml = '<p style="color:green">Whitelist data merged<p>';
						$("#PlaceHarmonizerWLToolsMsg" + devVersStr).append(phWLContentHtml);
						$('#WMEPH-WLInputBeta').val('');
					} else {  // try compressed WL
						WLSToMerge = validateWLS( LZString.decompressFromUTF16($('#WMEPH-WLInput'+devVersStr).val()) );
						if (WLSToMerge) {
							phlog('Whitelists merged!');
							venueWhitelist = mergeWL(venueWhitelist,WLSToMerge);
							saveWL_LS(compressedWLLS);
							phWLContentHtml = '<p style="color:green">Whitelist data merged<p>';
							$("#PlaceHarmonizerWLToolsMsg" + devVersStr).append(phWLContentHtml);
							$('#WMEPH-WLInputBeta').val('');
						} else {
							phWLContentHtml = '<p style="color:red">Invalid Whitelist data<p>';
							$("#PlaceHarmonizerWLToolsMsg" + devVersStr).append(phWLContentHtml);
						}
					}
				}
			});
			
			// Pull the data to the text field
			$("#WMEPH-WLPull" + devVersStr).click(function() {
				$("#PlaceHarmonizerWLToolsMsg" + devVersStr).empty();
				if (compressedWLLS) {
					//$('#WMEPH-WLInput'+devVersStr).val(localStorage.getItem(WLlocalStoreNameCompressed));
					$('#WMEPH-WLInput'+devVersStr).val( LZString.decompressFromUTF16(localStorage.getItem(WLlocalStoreNameCompressed)) );
				} else {
					$('#WMEPH-WLInput'+devVersStr).val(localStorage.getItem(WLlocalStoreName));
				}
				phWLContentHtml = '<p style="color:green">To backup the data, copy & paste the text in the box to a safe location.<p>';
				$("#PlaceHarmonizerWLToolsMsg" + devVersStr).append(phWLContentHtml);
				localStorage.setItem('WMEPH_WLAddCount', 1);
			});
			
			// WL Stats
			$("#WMEPH-WLStats" + devVersStr).click(function() {
				$("#PlaceHarmonizerWLToolsMsg" + devVersStr).empty();
				$('#WMEPH-WLInputBeta').val('');
				var currWLData;
				if (compressedWLLS) {
					//$('#WMEPH-WLInput'+devVersStr).val(localStorage.getItem(WLlocalStoreNameCompressed));
					currWLData = JSON.parse( LZString.decompressFromUTF16( localStorage.getItem(WLlocalStoreNameCompressed) ) );
				} else {
					currWLData = JSON.parse( localStorage.getItem(WLlocalStoreName) );
				}
				//var WLSize = _.size(currWLData);
				var countryWL = {};
				var stateWL = {};
				var itemCount = 0;
				for (var venueKey in currWLData) {
					if (currWLData.hasOwnProperty(venueKey)) {
						if (venueKey !== '1.1.1') {  // Don't count the place holder
							itemCount++;
							if ( currWLData[venueKey].hasOwnProperty('country') ) {
								if ( countryWL.hasOwnProperty(currWLData[venueKey].country) ) {
									countryWL[currWLData[venueKey].country]++;
								} else {
									countryWL[currWLData[venueKey].country] = 1;
								}
							} else {
								if ( countryWL.hasOwnProperty('None') ) {
									countryWL.None++;
								} else {
									countryWL.None = 1;
								}
							}
							if ( currWLData[venueKey].hasOwnProperty('state') ) {
								if ( stateWL.hasOwnProperty(currWLData[venueKey].state) ) {
									stateWL[currWLData[venueKey].state]++;
								} else {
									stateWL[currWLData[venueKey].state] = 1;
								}
							} else {
								if ( stateWL.hasOwnProperty('None') ) {
									stateWL.None++;
								} else {
									stateWL.None = 1;
								}
							}
						}
					}
				}
				
				var countryString = '';
				for (var countryKey in countryWL) {
					countryString = countryString + '<br>' + countryKey + ': ' + countryWL[countryKey];
				}
				var stateString = '';
				for (var stateKey in stateWL) {
					stateString = stateString + '<br>' + stateKey + ': ' + stateWL[stateKey];
				}
				
				phWLContentHtml = '<p style="color:black">Number of WL places: '+ itemCount +'</p><p>States:'+ stateString +'</p><p>Countries:'+ countryString + '<p>';
				$("#PlaceHarmonizerWLToolsMsg" + devVersStr).append(phWLContentHtml);
				//localStorage.setItem('WMEPH_WLAddCount', 1);
			});
			
			// WL State Filter
			$("#WMEPH-WLStateFilter" + devVersStr).click(function() {
				$("#PlaceHarmonizerWLToolsMsg" + devVersStr).empty();
				stateToRemove = $('#WMEPH-WLInput'+devVersStr).val();
				if ( stateToRemove.length < 2 ) {
					phWLContentHtml = '<p style="color:red">Invalid state<p>';
					$("#PlaceHarmonizerWLToolsMsg" + devVersStr).append(phWLContentHtml);
				} else {
					var currWLData, venueToRemove = [];
					if (compressedWLLS) {
						//$('#WMEPH-WLInput'+devVersStr).val(localStorage.getItem(WLlocalStoreNameCompressed));
						currWLData = JSON.parse( LZString.decompressFromUTF16( localStorage.getItem(WLlocalStoreNameCompressed) ) );
					} else {
						currWLData = JSON.parse( localStorage.getItem(WLlocalStoreName) );
					}
					//var WLSize = _.size(currWLData);
					
					for (var venueKey in currWLData) {
						if (currWLData.hasOwnProperty(venueKey)) {
							if (venueKey !== '1.1.1') {  // Don't examine the place holder
								if ( currWLData[venueKey].hasOwnProperty('state') ) {
									if ( currWLData[venueKey].state === stateToRemove ) {
										venueToRemove.push(venueKey);
									}
								} 
							}
						}
					}
					//phlogdev(venueToRemove.length);
					if (venueToRemove.length > 0) {
						if (localStorage.WMEPH_WLAddCount === '1') {
							if (confirm('Are you sure you want to clear all whitelist data for '+stateToRemove+'? This CANNOT be undone. Press OK to delete, cancel to preserve the data.') ) {  // misclick check
								backupWL_LS(compressedWLLS);
								for (var ixwl=0; ixwl<venueToRemove.length; ixwl++) {
									delete venueWhitelist[venueToRemove[ixwl]];
									//phlogdev(venueWhitelist[venueToRemove[ixwl]]);
								}
								saveWL_LS(compressedWLLS);
								phWLContentHtml = '<p style="color:green">'+venueToRemove.length+' items removed from WL<p>';
								$("#PlaceHarmonizerWLToolsMsg" + devVersStr).append(phWLContentHtml);
								$('#WMEPH-WLInputBeta').val('');
							} else {
								phWLContentHtml = '<p style="color:blue">No changes made<p>';
								$("#PlaceHarmonizerWLToolsMsg" + devVersStr).append(phWLContentHtml);
							}
						} else {
							phWLContentHtml = '<p style="color:red">Please backup your WL using the Pull button before removing state data<p>';
							$("#PlaceHarmonizerWLToolsMsg" + devVersStr).append(phWLContentHtml);
							//phlogdev('Please backup your WL using the Pull button before removing state data');
						}
					} else {
						phWLContentHtml = '<p style="color:red">No data for that state. Use the state name exactly as listed in the Stats<p>';
						$("#PlaceHarmonizerWLToolsMsg" + devVersStr).append(phWLContentHtml);
						//phlogdev('No data for that state. Use the state name exactly as listed in the Stats');
					}
				}
			});
			
			// Share the data to a Google Form post
			$("#WMEPH-WLShare" + devVersStr).click(function() {
				var submitWLURL = 'https://docs.google.com/forms/d/1k_5RyOq81Fv4IRHzltC34kW3IUbXnQqDVMogwJKFNbE/viewform?entry.1173700072='+thisUser.userName;
				window.open(submitWLURL);
			});
			
			var feedbackString = 'Submit script feedback & suggestions';
			var placesWikiStr = 'Open the WME Places Wiki page';
			var phContentHtml2 = '<hr align="center" width="95%"><p><a href="' + 
				placesWikiURL + '" target="_blank" title="'+placesWikiStr+'">'+placesWikiStr+'</a><p><a href="' + 
				WMEPHurl + '" target="_blank" title="'+feedbackString+'">'+feedbackString+'</a></p><hr align="center" width="95%">Major features for v. ' + 
				WMEPHversionMeta+':<ul><li>'+WMEPHWhatsNewMetaHList+'</ul>Recent updates:<ul><li>'+WMEPHWhatsNewHList+'</ul>';
			$("#sidepanel-harmonizer" + devVersStr).append(phContentHtml2);
			
			W.map.events.register("mousemove", W.map, function (e) {            
				WMEPHmousePosition = W.map.getLonLatFromPixel( W.map.events.getMousePosition(e) ); 
			});
			
			// Add zoom shortcut
			shortcut.add("Control+Alt+Z", function() {
				zoomPlace();
			});	
			
			if (thisUser.userName === 't0cableguy' || thisUser.userName === 'bmtg') {
				shortcut.add("Control+Alt+E", function() {
					clonePlace();
				});
			}	
			
			// Color highlighting
			$("#WMEPH-ColorHighlighting" + devVersStr).click( function() {
				bootstrapWMEPH_CH();
			});
			$("#WMEPH-DisableHoursHL" + devVersStr).click( function() {
				bootstrapWMEPH_CH();
			});
			$("#WMEPH-DisableWLHL" + devVersStr).click( function() {
				bootstrapWMEPH_CH();
			});
			if ( $("#WMEPH-ColorHighlighting" + devVersStr).prop('checked') ) {
				phlog('Starting Highlighter');
				bootstrapWMEPH_CH();
			}
			
			
			// Add Color Highlighting shortcut
			shortcut.add("Control+Alt+h", function() {
				$("#WMEPH-ColorHighlighting" + devVersStr).trigger('click');
			});	
			
			// Add Autorun shortcut
			if (thisUser.userName === 'bmtg') {
				shortcut.add("Control+Alt+u", function() {
					$("#WMEPH-AutoRunOnSelect" + devVersStr).trigger('click');
				});	
			}
			
			// $("#user-info div.tab-content:first").append(phContentHtml2);
			phlog('Ready...!');
		} // END Settings Tab
	
		// This routine will create a checkbox in the #PlaceHarmonizer tab and will load the setting
		//		settingID:  The #id of the checkbox being created.  
		//  textDescription:  The description of the checkbox that will be use
		function createSettingsCheckbox(divID, settingID, textDescription) {
			//Create settings checkbox and append HTML to settings tab
			var phTempHTML = '<input type="checkbox" id="' + settingID + '">'+ textDescription +'</input><br>';
			$("#" + divID).append(phTempHTML);
			//Associate click event of new checkbox to call saveSettingToLocalStorage with proper ID
			$("#" + settingID).click(function() {saveSettingToLocalStorage(settingID);});
			//Load Setting for Local Storage, if it doesn't exist set it to NOT checked.
			//If previously set to 1, then trigger "click" event.
			if (!localStorage.getItem(settingID))
			{
				//phlogdev(settingID + ' not found.');
			} else if (localStorage.getItem(settingID) === "1") {
				$("#" + settingID).trigger('click');
			}
		}
		
		function createCloneCheckbox(divID, settingID, textDescription) {
			//Create settings checkbox and append HTML to settings tab
			var phTempHTML = '<input type="checkbox" id="' + settingID + '">'+ textDescription +'</input>&nbsp&nbsp';
			$("#" + divID).append(phTempHTML);
			//Associate click event of new checkbox to call saveSettingToLocalStorage with proper ID
			$("#" + settingID).click(function() {saveSettingToLocalStorage(settingID);});
			//Load Setting for Local Storage, if it doesn't exist set it to NOT checked.
			//If previously set to 1, then trigger "click" event.
			if (!localStorage.getItem(settingID))
			{
				//phlogdev(settingID + ' not found.');
			} else if (localStorage.getItem(settingID) === "1") {
				$("#" + settingID).trigger('click');
			}
		}
		
		//Function to add Shift+ to upper case KBS
		function parseKBSShift(kbs) {
			if (kbs.match(/^[A-Z]{1}$/g) !== null) { // If upper case, then add a Shift+
				kbs = 'Shift+' + kbs;
			}
			return kbs;
		}
		
		// Function to check shortcut conflict
		function checkWMEPH_KBSconflict(KBS) {
			var LSString = '';
			if (!isDevVersion) {
				LSString = devVersStringMaster;
			} 
			if ( localStorage.getItem('WMEPH-KeyboardShortcut'+LSString) === null || localStorage.getItem('WMEPH-KBSModifierKey'+LSString) === null ) {
				return false;
			} else if ( parseKBSShift(localStorage.getItem('WMEPH-KeyboardShortcut'+LSString)) === KBS && localStorage.getItem('WMEPH-KBSModifierKey'+devVersStringMaster) === localStorage.getItem('WMEPH-KBSModifierKey') ) {
				return true;
			} else {
				return false;
			}
		}
		
		// Save settings prefs
		function saveSettingToLocalStorage(settingID) {
			if ($("#" + settingID).prop('checked')) {
				localStorage.setItem(settingID, '1');
			} else {
				localStorage.setItem(settingID, '0');
			}	
		}
		
		// This function validates that the inputted text is a JSON
		function validateWLS(jsonString) {
			"use strict";
			try {
				var objTry = JSON.parse(jsonString);
				if (objTry && typeof objTry === "object" && objTry !== null) {
					return objTry;
				}
			}
			catch (e) { }
			return false;
		}

		// This function merges and updates venues from object vWL_2 into vWL_1
		function mergeWL(vWL_1,vWL_2) {
			"use strict";
			var venueKey, WLKey, vWL_1_Venue, vWL_2_Venue;
			for (venueKey in vWL_2) {
				if (vWL_2.hasOwnProperty(venueKey)) {  // basic filter
					if (vWL_1.hasOwnProperty(venueKey)) {  // if the vWL_2 venue is in vWL_1, then update any keys
						vWL_1_Venue = vWL_1[venueKey];
						vWL_2_Venue = vWL_2[venueKey];
						for (WLKey in vWL_2_Venue) {  // loop thru the venue WL keys
							if (vWL_2_Venue.hasOwnProperty(WLKey) && vWL_2_Venue[WLKey].active) {  // Only update if the vWL_2 key is active
								if ( vWL_1_Venue.hasOwnProperty(WLKey) && vWL_1_Venue[WLKey].active ) {  // if the key is in the vWL_1 venue and it is active, then push any array data onto the key
									if (vWL_1_Venue[WLKey].hasOwnProperty('WLKeyArray')) {
										vWL_1[venueKey][WLKey].WLKeyArray = insertAtIX(vWL_1[venueKey][WLKey].WLKeyArray,vWL_2[venueKey][WLKey].WLKeyArray,100);
									}
								} else {  // if the key isn't in the vWL_1 venue, or if it's inactive, then copy the vWL_2 key across
									vWL_1[venueKey][WLKey] = vWL_2[venueKey][WLKey];
								}
							} 
						} // END subLoop for venue keys
					} else {  // if the venue doesn't exist in vWL_1, then add it
						vWL_1[venueKey] = vWL_2[venueKey];
					}
				}
			}
			return vWL_1;
		}
		
		// Get services checkbox status
		function getServicesChecks() {
			var servArrayCheck = [];
			for (var wsix=0; wsix<WMEServicesArray.length; wsix++) {
				if ($("#service-checkbox-" + WMEServicesArray[wsix]).prop('checked')) {
					servArrayCheck[wsix] = true;
				} else {
					servArrayCheck[wsix] = false;
				}
			}
			return servArrayCheck;
		}
		
		function updateServicesChecks(bannServ) {
			var servArrayCheck = getServicesChecks(), wsix=0;
			for (var keys in bannServ) {
				if (bannServ.hasOwnProperty(keys)) {
					bannServ[keys].checked = servArrayCheck[wsix];  // reset all icons to match any checked changes
					bannServ[keys].active = bannServ[keys].active || servArrayCheck[wsix];  // display any manually checked non-active icons
					wsix++;
				}
			}
		}
				
		// Focus away from the current cursor focus, to set text box changes
		function blurAll() {
			var tmp = document.createElement("input");
			document.body.appendChild(tmp);
			tmp.focus();
			document.body.removeChild(tmp);
		}
		
		// Pulls the item PL
		function getItemPL() {
			// Append a form div if it doesn't exist yet:
			if ( $('#WMEPH_formDiv').length ===0 ) {
				var tempDiv = document.createElement('div');
				tempDiv.id = 'WMEPH_formDiv';
				tempDiv.style.display = 'inline';
				$(".WazeControlPermalink").append(tempDiv);
			}
			// Return the current PL
			if ($(".WazeControlPermalink").length === 0) {
				phlog("Waiting for PL div");
				setTimeout(getItemPL, 500);
				return;
			}
			if ( $(".WazeControlPermalink").children(".icon-link").length > 0 ) {
				return $(".WazeControlPermalink").children(".icon-link")[0].href;
			} else if ( $(".WazeControlPermalink").children(".fa-link").length > 0 ) {
				return $(".WazeControlPermalink").children(".fa-link")[0].href;
			}
			return  '';
		}
		
		// Sets up error reporting
		function WMEPH_errorReport(data) {
			data.preview = 'Preview';
			data.attach_sig = 'on';
			if (PMUserList.hasOwnProperty('WMEPH') && PMUserList.WMEPH.approvalActive) {
				data['address_list[u]['+PMUserList.WMEPH.modID+']'] = 'to'; 
				WMEPH_newForumPost('https://www.waze.com/forum/ucp.php?i=pm&mode=compose', data);
			} else {
				data.addbbcode20 = 'to';
				data.notify = 'on';
				WMEPH_newForumPost(WMEPHurl + '#preview', data);
			}	
		}  // END WMEPH_errorReport function
		
		// Make a populated post on a forum thread
		function WMEPH_newForumPost(url, data) {
			var form = document.createElement('form');
			form.target = '_blank';
			form.action = url;
			form.method = 'post';
			form.style.display = 'none';
			for (var k in data) {
				if (data.hasOwnProperty(k)) {
					var input;
					if (k === 'message') {
						input = document.createElement('textarea');
					} else if (k === 'username') {
						input = document.createElement('username_list');
					} else {
						input = document.createElement('input');
					}
					input.name = k;
					input.value = data[k];
					input.type = 'hidden';
					form.appendChild(input);
				}
			}
			document.getElementById('WMEPH_formDiv').appendChild(form);
			form.submit();
			document.getElementById('WMEPH_formDiv').removeChild(form);
			return true;
		}  // END WMEPH_newForumPost function

		/**
		 * Updates the geometry of a place.
		 * @param place {Waze venue object} The place to update.
		 * @param newGeometry {OL.Geometry} The new geometry for the place.
		 */
		function updateFeatureGeometry(place, newGeometry) {
			var oldGeometry,
				model = W.model.venues,
				wmeUpdateFeatureGeometry = require('Waze/Action/UpdateFeatureGeometry');
			if (place && place.CLASS_NAME === 'Waze.Feature.Vector.Landmark' &&
				newGeometry && (newGeometry instanceof OL.Geometry.Point || 
				newGeometry instanceof OL.Geometry.Polygon)) {
				oldGeometry = place.attributes.geometry;
				W.model.actionManager.add(
					new wmeUpdateFeatureGeometry(place, model, oldGeometry, newGeometry));
				}
		}
		
		// Function that checks current place against the Harmonization Data.  Returns place data or "NoMatch"		
		function harmoList(itemName,state2L,region3L,country,itemCats) {
			var PNH_DATA_headers;
			var ixendPNH_NAMES;
			if (country === 'USA') {
				PNH_DATA_headers = USA_PNH_DATA[0].split("|");  // pull the data header names
				ixendPNH_NAMES = USA_PNH_NAMES.length;
			} else if (country === 'CAN') {
				PNH_DATA_headers = CAN_PNH_DATA[0].split("|");  // pull the data header names
				ixendPNH_NAMES = CAN_PNH_NAMES.length;
			} else {
					alert("No PNH data exists for this country.");
					return ["NoMatch"];
			}
			var ph_name_ix = PNH_DATA_headers.indexOf("ph_name");
			var ph_category1_ix = PNH_DATA_headers.indexOf("ph_category1");
			var ph_forcecat_ix = PNH_DATA_headers.indexOf("ph_forcecat");  // Force the category match
			var ph_region_ix = PNH_DATA_headers.indexOf("ph_region");  // Find the index for regions
			var ph_order_ix = PNH_DATA_headers.indexOf("ph_order");
			var ph_speccase_ix = PNH_DATA_headers.indexOf("ph_speccase");
			var ph_searchnameword_ix = PNH_DATA_headers.indexOf("ph_searchnameword");
			var nameComps;  // filled with search names to compare against place name
			var PNHPriCat;  // Primary category of PNH data
			var PNHForceCat;  // Primary category of PNH data
			var approvedRegions;  // filled with the regions that are approved for the place, when match is found
			var matchPNHData = [];  // array of matched data
			var matchPNHRegionData = [];  // array of matched data with regional approval
			var currMatchData, PNHMatchData, specCases, nmix, allowMultiMatch = false;
			var currMatchNum = 0;  // index for multiple matches, currently returns on first match
			var PNHOrderNum = [];
			var PNHNameTemp = [];
			var PNHNameMatch = false;  // tracks match status
			var PNHStringMatch = false;  // compares name string match 
			var PNHMatchProceed;  // tracks match status
			itemName = itemName.toUpperCase();  // UpperCase the current place name (The Holly And Ivy Pub #23 --> THE HOLLY AND IVY PUB #23 )
			itemName = itemName.replace(/ AND /g, ' ');  // Clear the word " AND " from the name (THE HOLLY AND IVY PUB #23 --> THE HOLLY IVY PUB #23 )
			itemName = itemName.replace(/^THE /g, '');  // Clear the word "THE " from the start of the name ( THE HOLLYIVY PUB #23 -- > HOLLY IVY PUB #23 )
			var itemNameSpace = itemName.replace(/[^A-Z0-9 ]/g, ' ');  // Clear all non-letter and non-number characters except spaces ( HOLLYIVY PUB #23 -- > HOLLY IVY PUB  23 )
			itemNameSpace = ' '+itemNameSpace.replace(/ {2,}/g, ' ')+' ';  // Make double spaces into singles ( HOLLY IVY PUB  23 -- > HOLLY IVY PUB 23 )
			itemName = itemName.replace(/[^A-Z0-9]/g, '');  // Clear all non-letter and non-number characters ( HOLLYIVY PUB #23 -- > HOLLYIVYPUB23 )
			var itemNameNoNum = itemName.replace(/[^A-Z]/g, '');  // Clear non-letter characters for alternate match ( HOLLYIVYPUB23 --> HOLLYIVYPUB ) 
			
			// Search performance stats
			var t0; var t1;
			if (devUser) {
				t0 = performance.now();  // Speed check start
			}
			
			// for each place on the PNH list (skipping headers at index 0)
			// phlogdev(ixendPNH_NAMES);
			for (var phnum=1; phnum<ixendPNH_NAMES; phnum++) { 
				PNHMatchProceed = false; 
				PNHStringMatch = false;
				if (country === 'USA') {
					nameComps = USA_PNH_NAMES[phnum].split("|");  // splits all possible search names for the current PNH entry
					PNHMatchData = USA_PNH_DATA[phnum];
				} else if (country === 'CAN') {
					nameComps = CAN_PNH_NAMES[phnum].split("|");  // splits all possible search names for the current PNH entry
					PNHMatchData = CAN_PNH_DATA[phnum];
				}
				currMatchData = PNHMatchData.split("|");  // Split the PNH place data into string array
				// Name Matching
				specCases = currMatchData[ph_speccase_ix];
				if (specCases.indexOf('strMatchAny') > -1 || currMatchData[ph_category1_ix] === 'Hotel') {  // Match any part of WME name with either the PNH name or any spaced names
					allowMultiMatch = true;
					var spaceMatchList = [];
					spaceMatchList.push( currMatchData[ph_name_ix].toUpperCase().replace(/ AND /g, ' ').replace(/^THE /g, '').replace(/[^A-Z0-9 ]/g, ' ').replace(/ {2,}/g, ' ') );
					if (currMatchData[ph_searchnameword_ix] !== '') {
						spaceMatchList.push.apply( spaceMatchList,currMatchData[ph_searchnameword_ix].toUpperCase().replace(/, /g,',').split(',') );
					}
					for (nmix=0; nmix<spaceMatchList.length; nmix++) {
						if ( itemNameSpace.includes(' '+spaceMatchList[nmix]+' ') ) {
							PNHStringMatch = true;
						}
					}
				} else if (specCases.indexOf('strMatchStart') > -1) {  //  Match the beginning part of WME name with any search term
					for (nmix=0; nmix<nameComps.length; nmix++) {
						if ( itemName.startsWith(nameComps[nmix]) || itemNameNoNum.startsWith(nameComps[nmix]) ) {
							PNHStringMatch = true;
						}
					}
				} else if (specCases.indexOf('strMatchEnd') > -1) {  //  Match the end part of WME name with any search term
					for (nmix=0; nmix<nameComps.length; nmix++) {
						if ( itemName.endsWith(nameComps[nmix]) || itemNameNoNum.endsWith(nameComps[nmix]) ) {
							PNHStringMatch = true;
						}
					}
				} else {  // full match of any term only
					if ( nameComps.indexOf(itemName) > -1 || nameComps.indexOf(itemNameNoNum) > -1 ) {
						PNHStringMatch = true;
					}
				}
				// if a match was found:
				if ( PNHStringMatch ) {  // Compare WME place name to PNH search name list
					console.log('Matched PNH Order No.: '+currMatchData[ph_order_ix]);
					
					PNHPriCat = catTranslate(currMatchData[ph_category1_ix]);
					PNHForceCat = currMatchData[ph_forcecat_ix];
					if (itemCats[0] === "GAS_STATION") {  // Gas stations only harmonized if the WME place category is already gas station (prevents Costco Gas becoming Costco Store) 
						PNHForceCat = "1";
					}
					if ( PNHForceCat === "1" && itemCats.indexOf(PNHPriCat) === 0 ) {  // Name and primary category match
						PNHMatchProceed = true; 
					} else if ( PNHForceCat === "2" && itemCats.indexOf(PNHPriCat) > -1 ) {  // Name and any category match
						PNHMatchProceed = true; 
					} else if ( PNHForceCat === "0" || PNHForceCat === "") {  // Name only match
						PNHMatchProceed = true; 
					}
					
					if (PNHMatchProceed) {
						approvedRegions = currMatchData[ph_region_ix].replace(/ /g, '').toUpperCase().split(",");  // remove spaces, upper case the approved regions, and split by commas
						if (approvedRegions.indexOf(state2L) > -1 || approvedRegions.indexOf(region3L) > -1 ||  // if the WME-selected item matches the state, region
						approvedRegions.indexOf(country) > -1 ||  //  OR if the country code is in the data then it is approved for all regions therein 
						$("#WMEPH-RegionOverride" + devVersStr).prop('checked')) {  // OR if region override is selected (dev setting
							if (devUser) {
								t1 = performance.now();  // log search time
								//phlogdev("Found place in " + (t1 - t0) + " milliseconds.");
							}
							matchPNHRegionData.push(PNHMatchData);
							bannButt.placeMatched.active = true;
							if (!allowMultiMatch) {
								return matchPNHRegionData;  // Return the PNH data string array to the main script
							} 
						} else {
							PNHNameMatch = true;  // PNH match found (once true, stays true)
							//matchPNHData.push(PNHMatchData);  // Pull the data line from the PNH data table.  (**Set in array for future multimatch features)
							PNHNameTemp.push(currMatchData[ph_name_ix]);  // temp name for approval return
							PNHOrderNum.push(currMatchData[ph_order_ix]);  // temp order number for approval return
						}
						
						currMatchNum++;  // *** Multiple matches for future work
					}
				} 
			}  // END loop through PNH places
			
			// If NO (name & region) match was found:
			if (bannButt.placeMatched.active) {
				return matchPNHRegionData;
			} else if (PNHNameMatch) {  // if a name match was found but not for region, prod the user to get it approved
				bannButt.ApprovalSubmit.active = true;
				//phlogdev("PNH data exists but not approved for this area.");	
				if (devUser) {
					t1 = performance.now();  // log search time
					//phlogdev("Searched all PNH entries in " + (t1 - t0) + " milliseconds.");
				}
				return ["ApprovalNeeded", PNHNameTemp, PNHOrderNum];
			} else {  // if no match was found, suggest adding the place to the sheet if it's a chain
				bannButt.NewPlaceSubmit.active = true;
				//phlogdev("Place not found in the " + country + " PNH list.");	
				if (devUser) {
					t1 = performance.now();  // log search time
					//phlogdev("Searched all PNH entries in " + (t1 - t0) + " milliseconds.");
				}
				return ["NoMatch"];
			}
		} // END harmoList function
		
		// KB Shortcut object
		var shortcut = {
			'all_shortcuts': {}, //All the shortcuts are stored in this array
			'add': function(shortcut_combination, callback, opt) {
				//Provide a set of default options
				var default_options = { 'type': 'keydown', 'propagate': false, 'disable_in_input': false, 'target': document, 'keycode': false };
				if (!opt) {opt = default_options;}
				else {
					for (var dfo in default_options) {
						if (typeof opt[dfo] === 'undefined') {opt[dfo] = default_options[dfo];}
					}
				}
				var ele = opt.target;
				if (typeof opt.target === 'string') {ele = document.getElementById(opt.target);}
				// var ths = this;
				shortcut_combination = shortcut_combination.toLowerCase();
				//The function to be called at keypress
				var func = function(e) {
					e = e || window.event;
					if (opt.disable_in_input) { //Don't enable shortcut keys in Input, Textarea fields
						var element;
						if (e.target) {element = e.target;}
						else if (e.srcElement) {element = e.srcElement;}
						if (element.nodeType === 3) {element = element.parentNode;}
						if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA') {return;}
					}
					//Find Which key is pressed
					var code;
					if (e.keyCode) {code = e.keyCode;}
					else if (e.which) {code = e.which;}
					var character = String.fromCharCode(code).toLowerCase();
					if (code === 188) {character = ",";} //If the user presses , when the type is onkeydown
					if (code === 190) {character = ".";} //If the user presses , when the type is onkeydown
					var keys = shortcut_combination.split("+");
					//Key Pressed - counts the number of valid keypresses - if it is same as the number of keys, the shortcut function is invoked
					var kp = 0;
					//Work around for stupid Shift key bug created by using lowercase - as a result the shift+num combination was broken
					var shift_nums = { "`": "~","1": "!","2": "@","3": "#","4": "$","5": "%","6": "^","7": "&",
							"8": "*","9": "(","0": ")","-": "_","=": "+",";": ":","'": "\"",",": "<",".": ">","/": "?","\\": "|" };
						//Special Keys - and their codes
					var special_keys = { 'esc': 27,'escape': 27,'tab': 9,'space': 32,'return': 13,'enter': 13,'backspace': 8,'scrolllock': 145,
						'scroll_lock': 145,'scroll': 145,'capslock': 20,'caps_lock': 20,'caps': 20,'numlock': 144,'num_lock': 144,'num': 144,
						'pause': 19,'break': 19,'insert': 45,'home': 36,'delete': 46,'end': 35,'pageup': 33,'page_up': 33,'pu': 33,'pagedown': 34,
						'page_down': 34,'pd': 34,'left': 37,'up': 38,'right': 39,'down': 40,'f1': 112,'f2': 113,'f3': 114,'f4': 115,'f5': 116,
						'f6': 117,'f7': 118,'f8': 119,'f9': 120,'f10': 121,'f11': 122,'f12': 123 };
					var modifiers = {
						shift: { wanted: false, pressed: false },
						ctrl: { wanted: false, pressed: false },
						alt: { wanted: false, pressed: false },
						meta: { wanted: false, pressed: false } //Meta is Mac specific
					};
					if (e.ctrlKey) {modifiers.ctrl.pressed = true;}
					if (e.shiftKey) {modifiers.shift.pressed = true;}
					if (e.altKey) {modifiers.alt.pressed = true;}
					if (e.metaKey) {modifiers.meta.pressed = true;}
					var k;
					for (var i = 0; k = keys[i], i < keys.length; i++) {
						//Modifiers
						if (k === 'ctrl' || k === 'control') {
							kp++;
							modifiers.ctrl.wanted = true;
						} else if (k === 'shift') {
							kp++;
							modifiers.shift.wanted = true;
						} else if (k === 'alt') {
							kp++;
							modifiers.alt.wanted = true;
						} else if (k === 'meta') {
							kp++;
							modifiers.meta.wanted = true;
						} else if (k.length > 1) { //If it is a special key
							if (special_keys[k] === code) {kp++;}
						} else if (opt.keycode) {
							if (opt.keycode === code) {kp++;}
						} else { //The special keys did not match
							if (character === k) {kp++;}
							else {
								if (shift_nums[character] && e.shiftKey) { //Stupid Shift key bug created by using lowercase
									character = shift_nums[character];
									if (character === k) {kp++;}
								}
							}
						}
					}
	
					if (kp === keys.length && modifiers.ctrl.pressed === modifiers.ctrl.wanted && modifiers.shift.pressed === modifiers.shift.wanted && 
						modifiers.alt.pressed === modifiers.alt.wanted && modifiers.meta.pressed === modifiers.meta.wanted) {
						callback(e);
						if (!opt.propagate) { //Stop the event
							//e.cancelBubble is supported by IE - this will kill the bubbling process.
							e.cancelBubble = true;
							e.returnValue = false;
							//e.stopPropagation works in Firefox.
							if (e.stopPropagation) {
								e.stopPropagation();
								e.preventDefault();
							}
							return false;
						}
					}
				};
				this.all_shortcuts[shortcut_combination] = { 'callback': func, 'target': ele, 'event': opt.type };
				//Attach the function with the event
				if (ele.addEventListener) {ele.addEventListener(opt.type, func, false);}
				else if (ele.attachEvent) {ele.attachEvent('on' + opt.type, func);}
				else {ele['on' + opt.type] = func;}
			},
			//Remove the shortcut - just specify the shortcut and I will remove the binding
			'remove': function(shortcut_combination) {
				shortcut_combination = shortcut_combination.toLowerCase();
				var binding = this.all_shortcuts[shortcut_combination];
				delete(this.all_shortcuts[shortcut_combination]);
				if (!binding) {return;}
				var type = binding.event;
				var ele = binding.target;
				var callback = binding.callback;
				if (ele.detachEvent) {ele.detachEvent('on' + type, callback);}
				else if (ele.removeEventListener) {ele.removeEventListener(type, callback, false);}
				else {ele['on' + type] = false;}
			}
		};  // END Shortcut function
		
		function phlogdev(m) {
			if ('object' === typeof m) {
				m = JSON.stringify(m);
			}
			if (devUser) {
				console.log('WMEPH' + devVersStrDash + ': ' + m);
			}
		}
	} // END runPH Function
		
	
	// This function runs at script load, and splits the category dataset into the searchable categories.
	function makeCatCheckList(CH_DATA) {  // Builds the list of search names to match to the WME place name
		var CH_CATS = [];
		var CH_DATA_headers = CH_DATA[0].split("|");  // split the data headers out
		var pc_wmecat_ix = CH_DATA_headers.indexOf("pc_wmecat");  // find the indices needed for the function
		var chEntryTemp;
		for (var chix=0; chix<CH_DATA.length; chix++) {  // loop through all PNH places
			chEntryTemp = CH_DATA[chix].split("|");  // split the current PNH data line 
			CH_CATS.push(chEntryTemp[pc_wmecat_ix]);
		}
		return CH_CATS;
	} // END makeCatCheckList function
	
	// This function runs at script load, and builds the search name dataset to compare the WME selected place name to.
	function makeNameCheckList(PNH_DATA) {  // Builds the list of search names to match to the WME place name
		var PNH_NAMES = [];
		var PNH_DATA_headers = PNH_DATA[0].split("|");  // split the data headers out
		var ph_name_ix = PNH_DATA_headers.indexOf("ph_name");  // find the indices needed for the function
		var ph_aliases_ix = PNH_DATA_headers.indexOf("ph_aliases");
		var ph_category1_ix = PNH_DATA_headers.indexOf("ph_category1");
		var ph_searchnamebase_ix = PNH_DATA_headers.indexOf("ph_searchnamebase");
		var ph_searchnamemid_ix = PNH_DATA_headers.indexOf("ph_searchnamemid");
		var ph_searchnameend_ix = PNH_DATA_headers.indexOf("ph_searchnameend");
		var ph_disable_ix = PNH_DATA_headers.indexOf("ph_disable");
		var ph_speccase_ix = PNH_DATA_headers.indexOf("ph_speccase");
			
		var t0 = performance.now(); // Speed check start
		var newNameListLength;  // static list length
		
		for (var pnhix=0; pnhix<PNH_DATA.length; pnhix++) {  // loop through all PNH places
			var pnhEntryTemp = PNH_DATA[pnhix].split("|");  // split the current PNH data line 
			if (pnhEntryTemp[ph_disable_ix] !== "1" || pnhEntryTemp[ph_speccase_ix].indexOf('betaEnable') > -1 ) {
				var newNameList = pnhEntryTemp[ph_name_ix].toUpperCase();  // pull out the primary PNH name & upper case it
				newNameList = newNameList.replace(/ AND /g, '');  // Clear the word "AND" from the name
				newNameList = newNameList.replace(/^THE /g, '');  // Clear the word "THE" from the start of the name
				newNameList = [newNameList.replace(/[^A-Z0-9]/g, '')];  // Clear non-letter and non-number characters, store in array
				
				if (pnhEntryTemp[ph_disable_ix] !== "altName") {
					// Add any aliases
					var tempAliases = pnhEntryTemp[ph_aliases_ix].toUpperCase();
					if ( tempAliases !== '' && tempAliases !== '0' && tempAliases !== '') {
						tempAliases = tempAliases.replace(/,[^A-za-z0-9]*/g, ",").split(",");  // tighten and split aliases
						for (var alix=0; alix<tempAliases.length; alix++) {
							newNameList.push( tempAliases[alix].replace(/ AND /g, '').replace(/^THE /g, '').replace(/[^A-Z0-9]/g, '') );
						}
					}
				}
				
				// The following code sets up alternate search names as outlined in the PNH dataset.  
				// Formula, with P = PNH primary; A1, A2 = PNH aliases; B1, B2 = base terms; M1, M2 = mid terms; E1, E2 = end terms
				// Search list will build: P, A, B, PM, AM, BM, PE, AE, BE, PME, AME, BME.  
				// Multiple M terms are applied singly and in pairs (B1M2M1E2).  Multiple B and E terms are applied singly (e.g B1B2M1 not used).
				// Any doubles like B1E2=P are purged at the end to eliminate redundancy.
				if (pnhEntryTemp[ph_searchnamebase_ix] !== "0" || pnhEntryTemp[ph_searchnamebase_ix] !== "") {   // If base terms exist, otherwise only the primary name is matched
					var pnhSearchNameBase = pnhEntryTemp[ph_searchnamebase_ix].replace(/[^A-Za-z0-9,]/g, '');  // clear non-letter and non-number characters (keep commas)
					pnhSearchNameBase = pnhSearchNameBase.toUpperCase().split(",");  // upper case and split the base-name  list
					newNameList.push.apply(newNameList,pnhSearchNameBase);   // add them to the search base list
					
					if (pnhEntryTemp[ph_searchnamemid_ix] !== "0" || pnhEntryTemp[ph_searchnamemid_ix] !== "") {  // if middle search term add-ons exist
						var pnhSearchNameMid = pnhEntryTemp[ph_searchnamemid_ix].replace(/[^A-Za-z0-9,]/g, '');  // clear non-letter and non-number characters
						pnhSearchNameMid = pnhSearchNameMid.toUpperCase().split(",");  // upper case and split
						if (pnhSearchNameMid.length > 1) {  // if there are more than one mid terms, it adds a permutation of the first 2
							pnhSearchNameMid.push.apply( pnhSearchNameMid,[ pnhSearchNameMid[0]+pnhSearchNameMid[1],pnhSearchNameMid[1]+pnhSearchNameMid[0] ] );
						}
						newNameListLength = newNameList.length;
						for (var extix=1; extix<newNameListLength; extix++) {  // extend the list by adding Mid terms onto the SearchNameBase names
							for (var altix=0; altix<pnhSearchNameMid.length; altix++) {
								newNameList.push(newNameList[extix]+pnhSearchNameMid[altix] );
							}
						}
					}
					
					if (pnhEntryTemp[ph_searchnameend_ix] !== "0" || pnhEntryTemp[ph_searchnameend_ix] !== "") {  // if end search term add-ons exist
						var pnhSearchNameEnd = pnhEntryTemp[ph_searchnameend_ix].replace(/[^A-Za-z0-9,]/g, '');  // clear non-letter and non-number characters
						pnhSearchNameEnd = pnhSearchNameEnd.toUpperCase().split(",");  // upper case and split
						newNameListLength = newNameList.length;
						for (var exetix=1; exetix<newNameListLength; exetix++) {  // extend the list by adding End terms onto all the SearchNameBase & Base+Mid names
							for (var aletix=0; aletix<pnhSearchNameEnd.length; aletix++) {
								newNameList.push(newNameList[exetix]+pnhSearchNameEnd[aletix] );
							}
						}
					}
				}
				// Clear out any empty entries
				var newNameListTemp = [];
				for ( catix=0; catix<newNameList.length; catix++) {  // extend the list by adding Hotel to all items
					if (newNameList[catix].length > 1) {
						newNameListTemp.push(newNameList[catix]);
					}
				}
				newNameList = newNameListTemp;
				// Next, add extensions to the search names based on the WME place category
				newNameListLength = newNameList.length;
				var catix;
				if (pnhEntryTemp[ph_category1_ix].toUpperCase().replace(/[^A-Za-z0-9]/g, '') === "HOTEL") {
					for ( catix=0; catix<newNameListLength; catix++) {  // extend the list by adding Hotel to all items
						newNameList.push(newNameList[catix]+"HOTEL");
					}
				} else if (pnhEntryTemp[ph_category1_ix].toUpperCase().replace(/[^A-Za-z0-9]/g, '') === "BANKFINANCIAL") {
					for ( catix=0; catix<newNameListLength; catix++) {  // extend the list by adding Bank and ATM to all items
						newNameList.push(newNameList[catix]+"BANK");
						newNameList.push(newNameList[catix]+"ATM");
					}
				} else if (pnhEntryTemp[ph_category1_ix].toUpperCase().replace(/[^A-Za-z0-9]/g, '') === "SUPERMARKETGROCERY") {
					for ( catix=0; catix<newNameListLength; catix++) {  // extend the list by adding Supermarket to all items
						newNameList.push(newNameList[catix]+"SUPERMARKET");
					}
				} else if (pnhEntryTemp[ph_category1_ix].toUpperCase().replace(/[^A-Za-z0-9]/g, '') === "GYMFITNESS") {
					for ( catix=0; catix<newNameListLength; catix++) {  // extend the list by adding Gym to all items
						newNameList.push(newNameList[catix]+"GYM");
					}
				} else if (pnhEntryTemp[ph_category1_ix].toUpperCase().replace(/[^A-Za-z0-9]/g, '') === "GASSTATION") {
					for ( catix=0; catix<newNameListLength; catix++) {  // extend the list by adding Gas terms to all items
						newNameList.push(newNameList[catix]+"GAS");
						newNameList.push(newNameList[catix]+"GASOLINE");
						newNameList.push(newNameList[catix]+"FUEL");
						newNameList.push(newNameList[catix]+"STATION");
						newNameList.push(newNameList[catix]+"GASSTATION");
					}
				} else if (pnhEntryTemp[ph_category1_ix].toUpperCase().replace(/[^A-Za-z0-9]/g, '') === "CARRENTAL") {
					for ( catix=0; catix<newNameListLength; catix++) {  // extend the list by adding Car Rental terms to all items
						newNameList.push(newNameList[catix]+"RENTAL");
						newNameList.push(newNameList[catix]+"RENTACAR");
						newNameList.push(newNameList[catix]+"CARRENTAL");
						newNameList.push(newNameList[catix]+"RENTALCAR");
					}
				} 
				newNameList = uniq(newNameList);  // remove any duplicate search names
				newNameList = newNameList.join("|");  // join the list with |
				newNameList = newNameList.replace(/\|{2,}/g, '|');
				newNameList = newNameList.replace(/\|+$/g, '');
				PNH_NAMES.push(newNameList);  // push the list to the master search list
			} else { // END if valid line
				PNH_NAMES.push('00');
			}
		}
		var t1 = performance.now();  // log search time
		//phlog("Built search list of " + PNH_DATA.length + " PNH places in " + (t1 - t0) + " milliseconds.");
		return PNH_NAMES;
	}  // END makeNameCheckList
	
	// Whitelist stringifying and parsing
	function saveWL_LS(compress) {
		venueWhitelistStr = JSON.stringify(venueWhitelist);
		if (compress) {
			if (venueWhitelistStr.length < 4800000 ) {  // Also save to regular storage as a back up
				localStorage.setItem(WLlocalStoreName, venueWhitelistStr);
			}
			venueWhitelistStr = LZString.compressToUTF16(venueWhitelistStr);
			localStorage.setItem(WLlocalStoreNameCompressed, venueWhitelistStr);
		} else {
			localStorage.setItem(WLlocalStoreName, venueWhitelistStr);
		}
 	}
	function loadWL_LS(decompress) {
		if (decompress) {
			venueWhitelistStr = localStorage.getItem(WLlocalStoreNameCompressed);
			venueWhitelistStr = LZString.decompressFromUTF16(venueWhitelistStr);
		} else {
			venueWhitelistStr = localStorage.getItem(WLlocalStoreName);
		}
		venueWhitelist = JSON.parse(venueWhitelistStr);
	}
	function backupWL_LS(compress) {
		venueWhitelistStr = JSON.stringify(venueWhitelist);
		if (compress) {
			venueWhitelistStr = LZString.compressToUTF16(venueWhitelistStr);
			localStorage.setItem(WLlocalStoreNameCompressed+Math.floor(Date.now() / 1000), venueWhitelistStr);
		} else {
			localStorage.setItem(WLlocalStoreName+Math.floor(Date.now() / 1000), venueWhitelistStr);
		}
 	}
	
	// Removes duplicate strings from string array
	function uniq(a) {
		"use strict";
		var seen = {};
		return a.filter(function(item) {
			return seen.hasOwnProperty(item) ? false : (seen[item] = true);
		});
	}  // END uniq function
	
	function phlog(m) {
		if ('object' === typeof m) {
			//m = JSON.stringify(m);
		}
        console.log('WMEPH' + devVersStrDash + ': ' + m);
    }
	
	function zoomPlace() {
		if (W.selectionManager.selectedItems.length === 1 && W.selectionManager.selectedItems[0].model.type === "venue") {
			W.map.moveTo(W.selectionManager.selectedItems[0].model.geometry.getCentroid().toLonLat(), 7);
		} else {
			W.map.moveTo(WMEPHmousePosition, 5);
		}
	}
	
	function sortWithIndex(toSort) {
		for (var i = 0; i < toSort.length; i++) {
			toSort[i] = [toSort[i], i];
		}
		toSort.sort(function(left, right) {
			return left[0] < right[0] ? -1 : 1;
		});
		toSort.sortIndices = [];
		for (var j = 0; j < toSort.length; j++) {
			toSort.sortIndices.push(toSort[j][1]);
			toSort[j] = toSort[j][0];
		}
		return toSort;
	}
	
	function destroyDupeLabels(){
		WMEPH_NameLayer.destroyFeatures();
		WMEPH_NameLayer.setVisibility(false);
	}
	
	// When a dupe is deleted, delete the dupe label
	function deleteDupeLabel(){
		//phlog('Clearing dupe label...');
		setTimeout(function() {
			var actionsList = W.model.actionManager.actions;
			var lastAction = actionsList[actionsList.length-1];
			if ( 'undefined' !== typeof lastAction && lastAction.hasOwnProperty('object') && lastAction.object.hasOwnProperty('state') && lastAction.object.state === 'Delete' ) {
				if ( dupeIDList.indexOf(lastAction.object.attributes.id) > -1 ) {
					if (dupeIDList.length === 2) {
						WMEPH_NameLayer.destroyFeatures();
						WMEPH_NameLayer.setVisibility(false);
					} else {
						var deletedDupe = WMEPH_NameLayer.getFeaturesByAttribute('dupeID', lastAction.object.attributes.id) ;
						WMEPH_NameLayer.removeFeatures(deletedDupe);
						dupeIDList.splice(dupeIDList.indexOf(lastAction.object.attributes.id),1);
					}
					phlog('Deleted a dupe');
				}
			} 
			/*
			else if ('undefined' !== typeof lastAction && lastAction.hasOwnProperty('feature') && lastAction.feature.hasOwnProperty('state') && lastAction.object.state === 'Update' &&
			lastAction.hasOwnProperty('newGeometry') ) {
				// update position of marker
			}
			*/
		},20);
	}
	
	//  Whitelist an item
	function whitelistAction(itemID, wlKeyName) {
		'use strict';
		var item = W.selectionManager.selectedItems[0].model;
		var addressTemp = item.getAddress();
		if ( addressTemp.hasOwnProperty('attributes') ) {
			addressTemp = addressTemp.attributes;
		}
		var itemGPS = OpenLayers.Layer.SphericalMercator.inverseMercator(item.attributes.geometry.getCentroid().x,item.attributes.geometry.getCentroid().y);
		if (!venueWhitelist.hasOwnProperty(itemID)) {  // If venue is NOT on WL, then add it.
			venueWhitelist[itemID] = { };
		}
		venueWhitelist[itemID][wlKeyName] = {active: true};  // WL the flag for the venue
		venueWhitelist[itemID].city = addressTemp.city.name;  // Store city for the venue
		venueWhitelist[itemID].state = addressTemp.state.name;  // Store state for the venue
		venueWhitelist[itemID].country = addressTemp.country.name;  // Store country for the venue
		venueWhitelist[itemID].gps = itemGPS;  // Store GPS coords for the venue
		saveWL_LS(compressedWLLS);  // Save the WL to local storage
		WMEPH_WLCounter();
		bannButt2.clearWL.active = true;
	}
	
	// Keep track of how many whitelists have been added since the last pull, alert if over a threshold (100?)
	function WMEPH_WLCounter() {
		localStorage.WMEPH_WLAddCount = parseInt(localStorage.WMEPH_WLAddCount)+1;
		if (localStorage.WMEPH_WLAddCount > 50) {
			alert('Don\'t forget to periodically back up your Whitelist data using the Pull option in the WMEPH settings tab.');
			localStorage.WMEPH_WLAddCount = 2;
		}
	}
	
	// Run the script...
	placeHarmonizer_bootstrap();
			
	
	function insertCss( code ) {
		var style = document.createElement('style');
		style.type = 'text/css';
		style.innerHTML = code;
		document.head.appendChild( style );
	}  // END insertCss funtion
	
	var cssServButts =[
		'.serv-247 { width: 73px; height: 50px; display: inline-block; background: transparent url(data:image/png;base64,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) top center no-repeat; }',
		'.serv-ac { width: 50px; height: 50px; display: inline-block; background: transparent url(data:image/png;base64,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) top center no-repeat; }',
		'.serv-credit { width: 73px; height: 50px; display: inline-block; background: transparent url(data:image/png;base64,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) top center no-repeat; }',
		'.serv-deliveries { width: 86px; height: 50px; display: inline-block; background: transparent url(data:image/png;base64,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) top center no-repeat; }',
		'.serv-drivethru { width: 78px; height: 50px; display: inline-block; background: transparent url(data:image/png;base64,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) top center no-repeat; }',
		'.serv-outdoor { width: 73px; height: 50px; display: inline-block; background: transparent url(data:image/png;base64,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) top center no-repeat; }',
		'.serv-parking { width: 46px; height: 50px; display: inline-block; background: transparent url(data:image/png;base64,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) top center no-repeat; }',
		'.serv-reservations { width: 55px; height: 50px; display: inline-block; background: transparent url(data:image/png;base64,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) top center no-repeat; }',
		'.serv-restrooms { width: 49px; height: 50px; display: inline-block; background: transparent url(data:image/png;base64,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) top center no-repeat; }',
		'.serv-takeaway { width: 34px; height: 50px; display: inline-block; background: transparent url(data:image/png;base64,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) top center no-repeat; }',
		'.serv-valet { width: 50px; height: 50px; display: inline-block; background: transparent url(data:image/png;base64,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) top center no-repeat; }',
		'.serv-wheelchair { width: 50px; height: 50px; display: inline-block; background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAD8GlDQ1BJQ0MgUHJvZmlsZQAAOI2NVd1v21QUP4lvXKQWP6Cxjg4Vi69VU1u5GxqtxgZJk6XpQhq5zdgqpMl1bhpT1za2021Vn/YCbwz4A4CyBx6QeEIaDMT2su0BtElTQRXVJKQ9dNpAaJP2gqpwrq9Tu13GuJGvfznndz7v0TVAx1ea45hJGWDe8l01n5GPn5iWO1YhCc9BJ/RAp6Z7TrpcLgIuxoVH1sNfIcHeNwfa6/9zdVappwMknkJsVz19HvFpgJSpO64PIN5G+fAp30Hc8TziHS4miFhheJbjLMMzHB8POFPqKGKWi6TXtSriJcT9MzH5bAzzHIK1I08t6hq6zHpRdu2aYdJYuk9Q/881bzZa8Xrx6fLmJo/iu4/VXnfH1BB/rmu5ScQvI77m+BkmfxXxvcZcJY14L0DymZp7pML5yTcW61PvIN6JuGr4halQvmjNlCa4bXJ5zj6qhpxrujeKPYMXEd+q00KR5yNAlWZzrF+Ie+uNsdC/MO4tTOZafhbroyXuR3Df08bLiHsQf+ja6gTPWVimZl7l/oUrjl8OcxDWLbNU5D6JRL2gxkDu16fGuC054OMhclsyXTOOFEL+kmMGs4i5kfNuQ62EnBuam8tzP+Q+tSqhz9SuqpZlvR1EfBiOJTSgYMMM7jpYsAEyqJCHDL4dcFFTAwNMlFDUUpQYiadhDmXteeWAw3HEmA2s15k1RmnP4RHuhBybdBOF7MfnICmSQ2SYjIBM3iRvkcMki9IRcnDTthyLz2Ld2fTzPjTQK+Mdg8y5nkZfFO+se9LQr3/09xZr+5GcaSufeAfAww60mAPx+q8u/bAr8rFCLrx7s+vqEkw8qb+p26n11Aruq6m1iJH6PbWGv1VIY25mkNE8PkaQhxfLIF7DZXx80HD/A3l2jLclYs061xNpWCfoB6WHJTjbH0mV35Q/lRXlC+W8cndbl9t2SfhU+Fb4UfhO+F74GWThknBZ+Em4InwjXIyd1ePnY/Psg3pb1TJNu15TMKWMtFt6ScpKL0ivSMXIn9QtDUlj0h7U7N48t3i8eC0GnMC91dX2sTivgloDTgUVeEGHLTizbf5Da9JLhkhh29QOs1luMcScmBXTIIt7xRFxSBxnuJWfuAd1I7jntkyd/pgKaIwVr3MgmDo2q8x6IdB5QH162mcX7ajtnHGN2bov71OU1+U0fqqoXLD0wX5ZM005UHmySz3qLtDqILDvIL+iH6jB9y2x83ok898GOPQX3lk3Itl0A+BrD6D7tUjWh3fis58BXDigN9yF8M5PJH4B8Gr79/F/XRm8m241mw/wvur4BGDj42bzn+Vmc+NL9L8GcMn8F1kAcXgSteGGAAAACXBIWXMAABcSAAAXEgFnn9JSAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAAOV0lEQVRoBc2aCXBV1RnH35aFJBAIe0AkrGGTRZRdCUwRkM1d9hERFIoWcXfGUrWWlhY6pThAUVqQQWGUgoFQXFiKSpCdEkAEWSSyhpAESEjyXn//k3ufL8/3kiBxhjNzc+895zvfvp374nT8OJw8+h566KGES5cu1SksLHRrKSIiwsl1Zc2aNUctUANnPd80NzGl4eLy9uzZs8uJEyc+ys/Pr+VyuTxORnFxcRFr7ho1aiw4dOjQUwK+GUcpQRo1arSkoKBgVKtWrS7C+OmioiKtRx85cqTx2bNnHQkJCb2++eabLczJWsU3k0AeixkjUHR09Mlr1645sEqNzMzMGK/X68Io3itXrjiioqKyES7LgvfdTEKIF7mUhld/2rdv/1a1atVewa02EyM7cauvEObbq1evOpg/NXny5OOCY9x0gpSwVfLXdjPz5vP5TLDPmjUroUmTJt+1bNly19q1a6NYFJwsqfUbuYTDViSPlTvE5E+QN2/efCeCZFQuKT+2n9Dzr1zHQykrBO4jDbtXrFhRPGnSpHpYIh0XS2zatOkbuNtx4iWOWLrmdrs9pOZIrOdj3Us8+UgQhdxdrLl1x0ULNM9rJHuLATMwJI+smJiY3Yxj0JUwxr0Debie53CCaN7Xu3fvWgR+KsHeBUYcxI4Dng1+mAtJR+vBa3q355HF4EFA3S+QQAbs37//a5DdkDB21gpmSkiLKYxDJQQxsqZ+/fpzCHonGjWugGDFXFdlDBjycndyeXTBrCxg5vUs5MC4rHWn9oKn/969e1+AxgSWJUhozWhzBUY4QcxWakquHmCg6Pz589cQJFLahQkNFczYQBq8G6aBD8WUsbLgESSfmlTF4/EIl0kqIhOI63qfwwli/JWYSMUFPqEIDoW4LrlNHsT9dGzmrQlbAGTxseQUvOLHPw/z0Vgpgi7BERcXd+HWW29ddOzYMT++n/tgEwi13/is0u+cOXN2wEx1Kv5g2peDCnB5ijYFMGlw2PN6QXADYxVUJxb2JSYmRmVkZPyJYH+4bdu2/davX/+JQLl+sU7BL2RSUtIu0u9BMVcZo1OnToMaNGiQP3jw4CQLn4m7G8FdLgJcxI2W5YI+sktkIDHWXKNGjWp27733th04cGC7ESNGNAlct55dt99+ewTPLrKgcWUso9ZH7hfOtUOgKXuqIogMRdwpZsmSJYn33HOPh5Q8PC8vr8ctt9xSHyHbSiCRgblCNL2Lu9LqV1zvbd68+bsdO3aYoNq4caMd2IYr4u+GAjxQtLCCTJ8+3cmliC3CrfLOnTvXbtmyZbspePEw7qhSpUoGQuwmeLdzMV2klBrFVQUGO1y8eHEAme51hP2ibt26v9++fXsahAtFHFjDA4XV3H/JP4oPEyN33333gIYNG16rWbOmr3HjxnsJ+PG9evXqVB7x7t27d2jduvU4BDmNID4y4JauXbt20T5wDARnPtZtZuEp18XLoxfKIkJqXIGg/A2pdzbvxymK74wfP37GxIkTjVanTJkSRQpNzM3NbYkFumA5N1aSdfY3a9bshwULFuxm327gln755ZdTTp8+PZM0u7Vbt26PEyNNKITuyrSIPzNZEuvd+C2Mz7p8+fLUyMjIlR07dhy7evVqUxzvYGRlZY0nRkaSXlUUo1Rf5G5W+1HAs4+zzQqK3pyvGcI9bNiwxrt27ZqN0MPYI0XlgveO1NTUwzz7lSfYnzMCBfEL0aJFi7/k5OQ8W7t27bn79u37tRCjyWTiZBbVfQB8FnE+WY5GVyPoJSyRgyUc7Imnl4yl1gxC0LESjLXl9erVe3Hr1q3HhAd3mweeiSSPHM4/3dLS0jKIRRfXj1VWgDcwTEYhVT5NX+Vr167dIhsXc09RyHwwlAsjL+Pb9e21cHdSbcPbbrvtz8SCjxjJJj4G27DJycnvKm4oiK9ac6Fc3Aav+F0tu6AJ4jtJnz58/DO0bgIQxqdpjqK4dciQIXUDsMqC2ie4wEtzfksPHTq0NUliq5SDYM+zZgZzH2kuJSXFJAAmDT1r+Wfd/ETJMOkQyEGwBsKEDxtLoMGPSJ8qahrSXkWI2sI5li9f7kY5K2VVrDtMSBQzeie1f6H3yhjGGsTwE0KMS6mtduA+KbIEQf+FLYRdma+HqL1nw4YNHpSUjktdws0aCweKmiaa0O6v9zZt2qhzED/25Vey1ssd8+fPj+E4u5/PQd8SdNHaQFe6Bf/Oxjr19G4zpOfrHfZeeqtkrC7XXS4cvMdAJ4u5zWXgrLgwPXr0aCMCxMNzQti5c+eh0lSHDh1esAiEC0YRkQvpHvhsbSt1M+5IbZpF0vBhFVNUscbrZEfRekaWgfYQXWTJQSggzsJQrjAGOe1EH1oLBwQ+10bS6GBqw2Uq8L8sRKFSo5Cr5mhN98DnsIRJ139T3YHmZPao/vyHuuL4/vvv/3rmzJk0CueqU6dOraJ4fkzRvF8wjLD4SpZLfNFRtWrVmSD08iHgZYpgLLXj7wi2kYr8LoDy12BBjBDsca5bt24gB6S3aGEew2UKYML+2hJMXII6YTgbhSVD58Fp06bNJGZyjh49+ohoJCUlTaeIvh8bG3syOzv7Tu67EW6T9nFpf/gxZsyYBnIjAi1VUPhsitwM846xdplkEIDBzyCu+I5SKAwUsK9QeCimC0LBBuIiUz1IIsnv169fkubZs5JEsMPeN3fu3DjiMweeXrLmjOfY66HuLiqxPgo4aCnOWwD1Zfr4+PizoTYwZ5BSE4ajtXEQXMh5JIkak0jbvpDT4BPUowesvX6hrXejVTzgCu9RWCVZ81j/PDwkjxs3rone9+zZ42ZOn5sC65aWwg4PyHBR5zXaiS2CQoAGtN95IN5n7Qo2qXkHXu5wdtu2bRPYb+ZoEF9ZtWrV2AsXLoxm7UOu4L0GJe1/ruICGq2YSKON8dBIxhA3MQag5I+PuePWe7BCAsBKHo12ZRGGeaZn0qZogtLOGCWQQX/RWD7MxM6ePdukay2jlAhwOWG0IAi81CswkeyXJcxHcXlA4KCH0zmIZW924HxZzy4CCry+SAToKkC0eYqGzgOSFtbGkNoAfjEwsYsXL56n2sMVmZ6e/gfmPNWrV19U1l5pn/VC6O4UHA1mEcJfIfDz9M66TqWiG5K2YIKHhy62SBrhXGH8EU0codV2kAbD+acymJPMtpagnQnc8wsXLnwYV4sEjwt8f9yyZcs6i1CobOcAv76HFRNTORZcPPv3zJs375jeEUze4WJOrxUaLg5APxDonxKkzaWF++67bw/azuTMYXoisIT0c2HnYPUC2h+CGy7jO+57pOEhBw4csDNNKG0awUgww6HlpShmqg/jvTNKsH97cZDKJYE32OVEs8xBmpukvqpv3753CJB6sIB0eokToW0VEz8hkIRiNpxLGBx9+vRpqpTN0Xee8NFEdlGrz9nkRRs/2asqqfwsbdNj1lzpILIBA+4GOVrdhEs5+JWqn9bQyBo+EFQjIz1pwYYTRNYSkcBLc6GsaIQmBp8mHhzEwzvCzUGtjz5G4GZL9a6BR4heKCWZ9bB/MG8k0u+iaTwxderUKgKkdd+kokVj10jvduOn5+sd9l59+5I1wG2K74QJEyKgeQrrb7BwGoWRxqthkXMUyvGat85LtqWD7352jNloHO+Xe1HontEKVbe7KjUVN13dseZshvRc0YHrmHMMWS0GptVh5+PCJiPSKP4Wy6iN7yt8Nn65Frycp9ebZNEpyzqlvMUAwvQm/PUCAV9TCBBqrAihwQ22MEzbB6uykGu7CJiuWUJwrvlM1pDCtKiDFcx6icfP9c4QPsOUBKEfO0OnnIq3xJEY3DoTBV9mV8mfEl7soy7HzvayCm72qdxNMBy0nhADmH97//79G5fs8/+1Y0MM2M+6+4W86667klDObiugn9VOZSqUtr5OnTqFOkJojiEcZp9cC0G+Ey8o8X/w8xVuto37Nu7pXOYdRX9I5lN3UGqIAf2yO1WMA/S+vYp7jBAjWMdL7Zjx6KOPJtpr4e7qvYB9XczgTpchONKGhZFlclvOHMOtOUObZyMIiq3NvuM6p8C8DxdTM2ouveuZrOdDET7gDgMf79ecjYS7AH9HQ/gagMvRzih9lCPoex4+fPgN2pDeZLir1J7ttBIf0HYfhWAkn4AKOT84qT8tKK4DKWY9cQnAov8Nvpdo9w/hYp6lS5e+z3nngVq1as3io/g06MkSduE0z7h2HY4QB+g6ErDceTqNI+DzKNtxL9Yd3BEnT57syKclfapqGigI+IxGTOqUMBB8DWSfYZ1HVq5ceUEAuMIAUmh/GB9GhW4kpCpcIFbvpO+6XvZkQnw1An7AR+zN2kdMNOUD3T8ofikI8QadwWuaZ4iHwHRt3tH8m1T4V1UWhNsAWs+a00Ampe35Bw8efDJYEK37NURWeY4fZGYyp6/rb/IdeOHbb79t+qFFixZFz5gxoy1WSKKiV6O6e3g+hQUOjh49OhPtq1V3jBw5strOnTsfgynhieCsMxFt22cWPy3BWsMvGPHRjY6jKYIUgv8SiqrKpZ//9ME8AoUdppPYqn2hBAmc13en9pzgZqPpFDR/Gqb/ScFM5TmdnwlKPqtbHATcXJi7K4I9jlUHoLn6uOHHsjK/UOkAZdMNtETAdvPoFyh4Iejd4LIRBq35EUljpnPj6/qDWOc5XKqLBZxJf5VBFc7joHQOrRWjvRp0rgnEUWtgGsglEGAdjeRb/IL7X2ufcEqAsoSwQB1uEo2L31f8sNQas0YcOq3fXQx/ZQliNig1848DCkb48rn5V6hmuEkKTA+C4V8xb84WmNtHvOgQUYzV1mH2NARdhxsdMYhwWXA59U8I1nul3soVJICaUmQpJlS4EK46/ZIBQ/NOTnlZMGviyNorGn7LWnOVfvs/TAuB+i4VlQIAAAAASUVORK5CYII=) top center no-repeat; }',
		'.serv-wifi { width: 67px; height: 50px; display: inline-block; background: transparent url(data:image/png;base64,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) top center no-repeat; }'
		];
	
	
	for (var cssix=0; cssix<cssServButts.length; cssix++) {
		insertCss(cssServButts[cssix]);
	}
	
	// LZ Compressor
	// Copyright (c) 2013 Pieroxy <[email protected]>
	// This work is free. You can redistribute it and/or modify it
	// under the terms of the WTFPL, Version 2
	// LZ-based compression algorithm, version 1.4.4
	var LZString = (function() {
		// private property
		var f = String.fromCharCode;
		var keyStrBase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
		var keyStrUriSafe = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$";
		var baseReverseDic = {};
	
		function getBaseValue(alphabet, character) {
			if (!baseReverseDic[alphabet]) {
				baseReverseDic[alphabet] = {};
				for (var i = 0; i < alphabet.length; i++) {
					baseReverseDic[alphabet][alphabet.charAt(i)] = i;
				}
			}
			return baseReverseDic[alphabet][character];
		}
		var LZString = {
			compressToBase64: function(input) {
				if (input === null) return "";
				var res = LZString._compress(input, 6, function(a) {
					return keyStrBase64.charAt(a);
				});
				switch (res.length % 4) { // To produce valid Base64
					default: // When could this happen ?
						case 0:
						return res;
					case 1:
							return res + "===";
					case 2:
							return res + "==";
					case 3:
							return res + "=";
				}
			},
			decompressFromBase64: function(input) {
				if (input === null) return "";
				if (input === "") return null;
				return LZString._decompress(input.length, 32, function(index) {
					return getBaseValue(keyStrBase64, input.charAt(index));
				});
			},
			compressToUTF16: function(input) {
				if (input === null) return "";
				return LZString._compress(input, 15, function(a) {
					return f(a + 32);
				}) + " ";
			},
			decompressFromUTF16: function(compressed) {
				if (compressed === null) return "";
				if (compressed === "") return null;
				return LZString._decompress(compressed.length, 16384, function(index) {
					return compressed.charCodeAt(index) - 32;
				});
			},
			
			compress: function(uncompressed) {
				return LZString._compress(uncompressed, 16, function(a) {
					return f(a);
				});
			},
			_compress: function(uncompressed, bitsPerChar, getCharFromInt) {
				if (uncompressed === null) return "";
				var i, value,
					context_dictionary = {},
					context_dictionaryToCreate = {},
					context_c = "",
					context_wc = "",
					context_w = "",
					context_enlargeIn = 2, // Compensate for the first entry which should not count
					context_dictSize = 3,
					context_numBits = 2,
					context_data = [],
					context_data_val = 0,
					context_data_position = 0,
					ii;
				for (ii = 0; ii < uncompressed.length; ii += 1) {
					context_c = uncompressed.charAt(ii);
					if (!Object.prototype.hasOwnProperty.call(context_dictionary, context_c)) {
						context_dictionary[context_c] = context_dictSize++;
						context_dictionaryToCreate[context_c] = true;
					}
					context_wc = context_w + context_c;
					if (Object.prototype.hasOwnProperty.call(context_dictionary, context_wc)) {
						context_w = context_wc;
					} else {
						if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate, context_w)) {
							if (context_w.charCodeAt(0) < 256) {
								for (i = 0; i < context_numBits; i++) {
									context_data_val = (context_data_val << 1);
									if (context_data_position === bitsPerChar - 1) {
										context_data_position = 0;
										context_data.push(getCharFromInt(context_data_val));
										context_data_val = 0;
									} else {
										context_data_position++;
									}
								}
								value = context_w.charCodeAt(0);
								for (i = 0; i < 8; i++) {
									context_data_val = (context_data_val << 1) | (value & 1);
									if (context_data_position === bitsPerChar - 1) {
										context_data_position = 0;
										context_data.push(getCharFromInt(context_data_val));
										context_data_val = 0;
									} else {
										context_data_position++;
									}
									value = value >> 1;
								}
							} else {
								value = 1;
								for (i = 0; i < context_numBits; i++) {
									context_data_val = (context_data_val << 1) | value;
									if (context_data_position === bitsPerChar - 1) {
										context_data_position = 0;
										context_data.push(getCharFromInt(context_data_val));
										context_data_val = 0;
									} else {
										context_data_position++;
									}
									value = 0;
								}
								value = context_w.charCodeAt(0);
								for (i = 0; i < 16; i++) {
									context_data_val = (context_data_val << 1) | (value & 1);
									if (context_data_position === bitsPerChar - 1) {
										context_data_position = 0;
										context_data.push(getCharFromInt(context_data_val));
										context_data_val = 0;
									} else {
										context_data_position++;
									}
									value = value >> 1;
								}
							}
							context_enlargeIn--;
							if (context_enlargeIn == 0) {
								context_enlargeIn = Math.pow(2, context_numBits);
								context_numBits++;
							}
							delete context_dictionaryToCreate[context_w];
						} else {
							value = context_dictionary[context_w];
							for (i = 0; i < context_numBits; i++) {
								context_data_val = (context_data_val << 1) | (value & 1);
								if (context_data_position === bitsPerChar - 1) {
									context_data_position = 0;
									context_data.push(getCharFromInt(context_data_val));
									context_data_val = 0;
								} else {
									context_data_position++;
								}
								value = value >> 1;
							}
						}
						context_enlargeIn--;
						if (context_enlargeIn === 0) {
							context_enlargeIn = Math.pow(2, context_numBits);
							context_numBits++;
						}
						// Add wc to the dictionary.
						context_dictionary[context_wc] = context_dictSize++;
						context_w = String(context_c);
					}
				}
				// Output the code for w.
				if (context_w !== "") {
					if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate, context_w)) {
						if (context_w.charCodeAt(0) < 256) {
							for (i = 0; i < context_numBits; i++) {
								context_data_val = (context_data_val << 1);
								if (context_data_position === bitsPerChar - 1) {
									context_data_position = 0;
									context_data.push(getCharFromInt(context_data_val));
									context_data_val = 0;
								} else {
									context_data_position++;
								}
							}
							value = context_w.charCodeAt(0);
							for (i = 0; i < 8; i++) {
								context_data_val = (context_data_val << 1) | (value & 1);
								if (context_data_position === bitsPerChar - 1) {
									context_data_position = 0;
									context_data.push(getCharFromInt(context_data_val));
									context_data_val = 0;
								} else {
									context_data_position++;
								}
								value = value >> 1;
							}
						} else {
							value = 1;
							for (i = 0; i < context_numBits; i++) {
								context_data_val = (context_data_val << 1) | value;
								if (context_data_position === bitsPerChar - 1) {
									context_data_position = 0;
									context_data.push(getCharFromInt(context_data_val));
									context_data_val = 0;
								} else {
									context_data_position++;
								}
								value = 0;
							}
							value = context_w.charCodeAt(0);
							for (i = 0; i < 16; i++) {
								context_data_val = (context_data_val << 1) | (value & 1);
								if (context_data_position === bitsPerChar - 1) {
									context_data_position = 0;
									context_data.push(getCharFromInt(context_data_val));
									context_data_val = 0;
								} else {
									context_data_position++;
								}
								value = value >> 1;
							}
						}
						context_enlargeIn--;
						if (context_enlargeIn === 0) {
							context_enlargeIn = Math.pow(2, context_numBits);
							context_numBits++;
						}
						delete context_dictionaryToCreate[context_w];
					} else {
						value = context_dictionary[context_w];
						for (i = 0; i < context_numBits; i++) {
							context_data_val = (context_data_val << 1) | (value & 1);
							if (context_data_position === bitsPerChar - 1) {
								context_data_position = 0;
								context_data.push(getCharFromInt(context_data_val));
								context_data_val = 0;
							} else {
								context_data_position++;
							}
							value = value >> 1;
						}
					}
					context_enlargeIn--;
					if (context_enlargeIn === 0) {
						context_enlargeIn = Math.pow(2, context_numBits);
						context_numBits++;
					}
				}
				// Mark the end of the stream
				value = 2;
				for (i = 0; i < context_numBits; i++) {
					context_data_val = (context_data_val << 1) | (value & 1);
					if (context_data_position === bitsPerChar - 1) {
						context_data_position = 0;
						context_data.push(getCharFromInt(context_data_val));
						context_data_val = 0;
					} else {
						context_data_position++;
					}
					value = value >> 1;
				}
				// Flush the last char
				while (true) {
					context_data_val = (context_data_val << 1);
					if (context_data_position === bitsPerChar - 1) {
						context_data.push(getCharFromInt(context_data_val));
						break;
					} else context_data_position++;
				}
				return context_data.join('');
			},
			decompress: function(compressed) {
				if (compressed === null) return "";
				if (compressed === "") return null;
				return LZString._decompress(compressed.length, 32768, function(index) {
					return compressed.charCodeAt(index);
				});
			},
			_decompress: function(length, resetValue, getNextValue) {
				var dictionary = [],
					next,
					enlargeIn = 4,
					dictSize = 4,
					numBits = 3,
					entry = "",
					result = [],
					i,
					w,
					bits, resb, maxpower, power,
					c,
					data = {
						val: getNextValue(0),
						position: resetValue,
						index: 1
					};
				for (i = 0; i < 3; i += 1) {
					dictionary[i] = i;
				}
				bits = 0;
				maxpower = Math.pow(2, 2);
				power = 1;
				while (power != maxpower) {
					resb = data.val & data.position;
					data.position >>= 1;
					if (data.position === 0) {
						data.position = resetValue;
						data.val = getNextValue(data.index++);
					}
					bits |= (resb > 0 ? 1 : 0) * power;
					power <<= 1;
				}
				switch (next = bits) {
					case 0:
						bits = 0;
						maxpower = Math.pow(2, 8);
						power = 1;
						while (power != maxpower) {
							resb = data.val & data.position;
							data.position >>= 1;
							if (data.position == 0) {
								data.position = resetValue;
								data.val = getNextValue(data.index++);
							}
							bits |= (resb > 0 ? 1 : 0) * power;
							power <<= 1;
						}
						c = f(bits);
						break;
					case 1:
						bits = 0;
						maxpower = Math.pow(2, 16);
						power = 1;
						while (power != maxpower) {
							resb = data.val & data.position;
							data.position >>= 1;
							if (data.position == 0) {
								data.position = resetValue;
								data.val = getNextValue(data.index++);
							}
							bits |= (resb > 0 ? 1 : 0) * power;
							power <<= 1;
						}
						c = f(bits);
						break;
					case 2:
						return "";
				}
				dictionary[3] = c;
				w = c;
				result.push(c);
				while (true) {
					if (data.index > length) {
						return "";
					}
					bits = 0;
					maxpower = Math.pow(2, numBits);
					power = 1;
					while (power != maxpower) {
						resb = data.val & data.position;
						data.position >>= 1;
						if (data.position == 0) {
							data.position = resetValue;
							data.val = getNextValue(data.index++);
						}
						bits |= (resb > 0 ? 1 : 0) * power;
						power <<= 1;
					}
					switch (c = bits) {
						case 0:
							bits = 0;
							maxpower = Math.pow(2, 8);
							power = 1;
							while (power != maxpower) {
								resb = data.val & data.position;
								data.position >>= 1;
								if (data.position == 0) {
									data.position = resetValue;
									data.val = getNextValue(data.index++);
								}
								bits |= (resb > 0 ? 1 : 0) * power;
								power <<= 1;
							}
							dictionary[dictSize++] = f(bits);
							c = dictSize - 1;
							enlargeIn--;
							break;
						case 1:
							bits = 0;
							maxpower = Math.pow(2, 16);
							power = 1;
							while (power != maxpower) {
								resb = data.val & data.position;
								data.position >>= 1;
								if (data.position == 0) {
									data.position = resetValue;
									data.val = getNextValue(data.index++);
								}
								bits |= (resb > 0 ? 1 : 0) * power;
								power <<= 1;
							}
							dictionary[dictSize++] = f(bits);
							c = dictSize - 1;
							enlargeIn--;
							break;
						case 2:
							return result.join('');
					}
					if (enlargeIn == 0) {
						enlargeIn = Math.pow(2, numBits);
						numBits++;
					}
					if (dictionary[c]) {
						entry = dictionary[c];
					} else {
						if (c === dictSize) {
							entry = w + w.charAt(0);
						} else {
							return null;
						}
					}
					result.push(entry);
					// Add w+entry[0] to the dictionary.
					dictionary[dictSize++] = w + entry.charAt(0);
					enlargeIn--;
					w = entry;
					if (enlargeIn == 0) {
						enlargeIn = Math.pow(2, numBits);
						numBits++;
					}
				}
			}
		};
		return LZString;
	})();
	if (typeof define === 'function' && define.amd) {
		define(function() {
			return LZString;
		});
	} else if (typeof module !== 'undefined' && module !== null) {
		module.exports = LZString
	}
	
})();

//$('#service-checkbox-CREDIT_CARDS').siblings('label')[0].style="background-color:#dfd"
//$('.form-control')[8].style="background-color:#dfd"