var pageContext;
var mgr;
var toggleMapStatus = "off";
var columnSliderIsDraggable = false;
var expColumnSliderStartX;
var expColumnSliderStartMouseX;
var expMapObj;
var expMap;
var bounds;
var tileSize = 64;
var sectionsLibrary = new Object();
var markersLibrary = new Object();
var openConnections = 0;
var currentConnection;
var sendFindBoats1q;
var findBoats1Timeout;
var spreads = new Object();
var _spreadInstancesCurrentlyOpen;
var mapContainer;
var currentProjection;
var blankMarker;
var checkBoxes = new Object();
var onMoveendEventTimeout;
var spreadsOnMapBucket;
var onMovestartCenter;
var onMovestartZoom;
var dragRefreshBuffer = 100;
var loadAroundViewBuffer = 200;
var searchResultsTempLocationValue = "";
var pageLoadDate = new Date();

// ruler vars
var marker1;
var marker2;
var label1;
var label2;
var button = 0;
var dist = 0;
var line;
var poly;
var rulerPoint1;
var rulerPoint2;

function resizeFacebookIFrame() {
	return true;
	var iframe = document.getElementById( 'inneriframe' );
	var height = Math.max( document.body.offsetHeight, document.body.scrollHeight );
	//log("calling facebook domain page in inner iFrame with height "+ height);
	//alert("calling facebook domain page in inner iFrame with height "+ height);
	iframe.src = 'http://apps.facebook.com/boatdevfbml/?resizer=true&height='+ height;
}

function showMenu() {
	//document.getElementById("account-widget").style.visibility = "visible";
}

function hideMenu() {
	document.getElementById("account-widget").style.visibility = "hidden";
}

function findPosX(obj) {
	if (obj.style.position == "absolute") {
		return parseInt(obj.style.left.replace(/px/g,""));
	}
	var curleft = 0;
	if(obj.offsetParent)
		while(1) {
			curleft += obj.offsetLeft;
			if(!obj.offsetParent)
				break;
			obj = obj.offsetParent;
		} else if(obj.x)
			curleft += obj.x;
	return curleft;
}

function findPosY(obj) {
	if (obj.style.position == "absolute") {
		return parseInt(obj.style.top.replace(/px/g,""));
	}
	var curtop = 0;
	if(obj.offsetParent)
		while(1) {
			curtop += obj.offsetTop;
			if(!obj.offsetParent)
				break;
			obj = obj.offsetParent;
		} else if(obj.y)
			curtop += obj.y;
	return curtop;
}

function findHeight(obj) {
	return obj.offsetHeight;
}

function findWidth(obj) {
	return obj.offsetWidth;
}

function getWindowHeight() {
	if (window.self && self.innerHeight) {
		return self.innerHeight;
	}
	if (document.documentElement && document.documentElement.clientHeight) {
		return document.documentElement.clientHeight;
	}
	return 0;
}

function getWindowWidth() {
	if (window.self && self.innerWidth) {
		return self.innerWidth;
	}
	if (document.documentElement && document.documentElement.clientWidth) {
		return document.documentElement.clientWidth;
	}
	return 0;
}

function toggleDisplay(id, action, inline) {
	var o = document.getElementById(id);
	if (o) {
		if ((o.style.display == "none" && action == undefined) || action == "show") {
			if (inline != undefined) {
				o.style.display = "inline";
			} else {
				o.style.display = "block";
			}
		} else {
			o.style.display = "none";
		}
	}
}

function toggleValue(id, a, b) {
	var o = document.getElementById(id);
	if (o) {
		if (o.value == a) {
			o.value = b;
		} else if (o.value == b) {
			o.value = a;
		}
	}
}

function toggleVisibility(id) {
	var o = document.getElementById(id);
	if (o) {
		if (o.style.visibility != "visible") {
			o.style.visibility = "visible";
		} else {
			o.style.visibility = "hidden";
		}
	}
}

function toggleSize(id) {
	var o = document.getElementById(id);
	if (o) {
		if (o.style.width != "0px") {
			o.style.width = "0px";
			o.style.height = "0px";
		} else {
			o.style.width = "";
			o.style.height = "";
		}
	}
}

function toggleOffScreen(id) {
	var o = document.getElementById(id);
	if (o) {
		if (o.style.marginRight != "-4000px") {
			o.style.marginRight = "-4000px";
		} else {
			o.style.marginRight = "15px";
		}
	}
}

function toggleClassName(obj, className1, className2) {
	if (obj.className == className1) {
		obj.className = className2;
	} else {
		obj.className = className1;
	}
}

function toggleExpNavHeader(obj, id, force) { // force is optional: close or open
	if (obj.className == "header right-arrow" && force == "close") {
		// it's already closed!
		return false;
	}
	if (obj.className == "header" && force == "open") {
		// it's already open!
		return false;
	}
	toggleClassName(obj, "header", "header right-arrow");
	toggleDisplay(id);
	if (obj.className == "header") {
		createCookie(id, "open", 365);
	} else {
		createCookie(id, "closed", 365);
	}
}

function setViewOnTheBoaters() {
	var o = document.getElementById("view-on-theboaters");
	if (o) {
		var url = window.location.href;
		var objURL = new Object();
		window.location.search.replace(
		new RegExp( "([^?=&]+)(=([^&]*))?", "g" ),
			function( $0, $1, $2, $3 ){
				objURL[ $1 ] = $3;
			}
		);
		if (url.indexOf("?") > 0) {
			url = url.substring(0, url.indexOf("?"));
		}
		var queryString = "";
		for (var strKey in objURL){
			if (strKey.indexOf("fb_") != 0 && strKey.indexOf("fbiframe") != 0 && strKey.indexOf("oauth_") != 0 && strKey.indexOf("xoauth_") != 0 && strKey.indexOf("opensocial_") != 0) {
				if (queryString != "") {
					queryString += "&";
				}
				queryString += strKey +"="+ objURL[strKey];
			}
		}
		if (queryString != "") {
			url += "?"+ queryString;
		}
		url = url.replace(GLOBALS_domainRoot, GLOBALS_fullPageDomainRoot);
		o.href = url;
		o.style.display = "block";
	}
	var v = document.getElementById("facebook-invite");
	if (v) {
		var url = window.location.href;
		url = url.replace(GLOBALS_domainRoot, GLOBALS_facebookWebRoot +"?p=/");
		v.href += "&p="+ url;
		v.style.display = "block";
	}
}

// exp and oneByOne
function createCookie(name,value,days) {
	//return false;
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

function setOneByOneSearch(indexOnCurrentPage) {
	if (oneByOneClass != undefined && oneByOneClass != "") {
		createCookie("oneByOneClass", oneByOneClass, 365);
		createCookie("oneByOneResultsPerPage", oneByOneResultsPerPage, 365);
		createCookie("oneByOneConditions", oneByOneConditions, 365);
		createCookie("oneByOneQueryString", oneByOneQueryString, 365);
		createCookie("oneByOneSortBy", oneByOneSortBy, 365);
		createCookie("oneByOneSortOrder", oneByOneSortOrder, 365);
		createCookie("oneByOneIndex", indexOnCurrentPage + ((page - 1) * oneByOneResultsPerPage), 365);
	} else {
		clearOneByOneSearch();
	}
	return false;
}

function clearOneByOneSearch() {
	eraseCookie("oneByOneClass");
	eraseCookie("oneByOneResultsPerPage");
	eraseCookie("oneByOneConditions");
	eraseCookie("oneByOneQueryString");
	eraseCookie("oneByOneSortBy");
	eraseCookie("oneByOneSortOrder");
	eraseCookie("oneByOneIndex");
	document.getElementById("oneByOne").style.display = "none";
	return false;
}

function adjustOneByOneIndex(amount) {
	createCookie("oneByOneIndex", parseFloat(readCookie("oneByOneIndex")) + amount, 365);
	return false;
}

function toggleMapOn() {
	toggleMapStatus = "on";
	var accountNav = document.getElementById("account-nav");
	var nav = document.getElementById("nav");
	var content = document.getElementById("content");
	var contentContainer = document.getElementById("content-container");
	var expList = document.getElementById("exp-list");
	var expListBucket = document.getElementById("exp-list-bucket");
	var footerContainer = document.getElementById("footer-container");
	//var toggleMapButton = document.getElementById("toggle-map-button");
	var expFooter = document.getElementById("exp-footer");
	var expList = document.getElementById("exp-list");
	var pageLinks = document.getElementById("page-links");
	var site = document.getElementById("site");
	var expMapObj = document.getElementById("exp-map-obj");
	var expMapCover = document.getElementById("exp-map-cover");
	var expColumnSlider = document.getElementById("exp-column-slider");
	var expDisclaimer = document.getElementById("exp-disclaimer");
	var expMapToolbar = document.getElementById("exp-map-toolbar");
	var sitePadding = document.getElementById("site-padding");
	if (container != "") {
		expList.style.overflow = "visible";
	} else {
		accountNav.style.width = "auto";
		nav.style.width = "auto";
		if (BrowserDetect.browser == "Explorer" && BrowserDetect.version == "6") {
			content.style.width = "100%";
			sitePadding.style.height = "100%";
			sitePadding.style.overflow = "hidden";
			content.style.padding = "0px";
			content.style.margin = "0px";
			content.style.marginTop = "-1px";
			expListBucket.style.width = "100%";
			expList.style.overflow = "auto";
		} else if (BrowserDetect.browser == "Explorer" && BrowserDetect.version == "7") {
			expListBucket.style.width = "auto";
			content.style.width = "auto";
			expList.style.overflowY = "auto";
			expList.style.overflowX = "hidden";
		} else if (BrowserDetect.browser == "Firefox") {
			expListBucket.style.width = "auto";
			content.style.width = "auto";
			expList.style.overflowY = "auto";
			expList.style.overflowX = "hidden";
		} else {
			expListBucket.style.width = "auto";
			expList.style.overflow = "auto";
			content.style.width = "auto";
		}
		expList.style.width = "400px";
		expList.style.paddingRight = "30px";
		site.style.minWidth = "70em";
		expFooter.style.display = "block";
		if (BrowserDetect.browser == "Firefox") {
			content.style.marginLeft = "2px";
		}
		if (BrowserDetect.browser == "Explorer") {
			content.style.marginLeft = "6px";
			document.body.scroll = "no";
			document.documentElement.scroll = "no";
			document.body.style.overflow = "hidden";
			document.documentElement.style.overflow = "hidden";
		}
	}
	footerContainer.style.display = "none";
	if (pageLinks) {
		pageLinks.style.display = "none";
	}
	expMapObj.style.display = "block";
	expMapToolbar.style.display = "block";
	setExpHeights();
	showCheckBoxes();
	if (!columnSliderIsDraggable) {
		makeColumnSliderDraggable();
	}
	expColumnSlider.style.left = (findPosX(expList) + findWidth(expList) - 20) +"px";
	expDisclaimer.style.left = (findPosX(expList) + findWidth(expList) + 10) +"px";
	window.onresize = setExpHeights;
	if (!expMap) {
		window.setTimeout("expGLoad();", 100);
	}
	showZoomControl();
	createCookie("exploreMapOn", "true", 365);
	var oneByOne = document.getElementById("oneByOne");
	if (oneByOne) {
		oneByOne.className = "flexibleWidth";
	}
}

function toggleMapOff() {
	eraseCookie("exploreMapOn");
	toggleMapStatus = "off";
	var accountNav = document.getElementById("account-nav");
	var nav = document.getElementById("nav");
	var content = document.getElementById("content");
	var contentContainer = document.getElementById("content-container");
	var expList = document.getElementById("exp-list");
	var expListBucket = document.getElementById("exp-list-bucket");
	var footerContainer = document.getElementById("footer-container");
	//var toggleMapButton = document.getElementById("toggle-map-button");
	var expFooter = document.getElementById("exp-footer");
	var expList = document.getElementById("exp-list");
	var pageLinks = document.getElementById("page-links");
	var site = document.getElementById("site");
	var expMapObj = document.getElementById("exp-map-obj");
	var expMapCover = document.getElementById("exp-map-cover");
	var expMapToolbar = document.getElementById("exp-map-toolbar");
	var sitePadding = document.getElementById("site-padding");
	hideCheckBoxes();
	if (container != "") {
		
	} else {
		accountNav.style.width = "92em";
		nav.style.width = "924px";
		if (BrowserDetect.browser == "Explorer" && BrowserDetect.version == "6") {
			expList.style.width = "660px";
			sitePadding.style.height = "auto";
			sitePadding.style.overflow = "visible";
			content.style.padding = "0px";
			contentContainer.style.marginLeft = "0px";
			expListBucket.style.width = "100%";
			expList.style.overflow = "visible";
			content.style.width = "940px";
			content.style.height = "1500px";
		} else {
			expList.style.width = "640px";
			content.style.width = "92em";
			site.style.minWidth = "98em";
			content.style.height = "1500px";
		}
		expList.style.paddingRight = "0px";
		expListBucket.style.width = "101%";
		content.style.margin = "0px auto";
		if (BrowserDetect.browser == "Explorer") {
			content.style.marginTop = "-1px";
			document.body.scroll = "yes";
			document.documentElement.scroll = "yes";
			document.body.style.overflow = "auto";
			document.documentElement.style.overflow = "auto";
		}
	}
	footerContainer.style.display = "block";
	expFooter.style.display = "none";
	expList.style.overflow = "visible";
	expList.style.height = "auto";
	if (pageLinks) {
		pageLinks.style.display = "inline";
	}
	site.style.height = "auto";
	expMapObj.style.display = "none";
	expMapCover.style.display = "none";
	expMapToolbar.style.display = "none";
	window.onresize = null;
	hideZoomControl();
	hideCrosshairs();
	var oneByOne = document.getElementById("oneByOne");
	if (oneByOne) {
		oneByOne.className = "";
	}
}

function setExpHeights() {
	var expList = document.getElementById("exp-list");
	var windowHeight = getWindowHeight();
	var windowWidth = getWindowWidth();
	var site = document.getElementById("site");
	var expMapObj = document.getElementById("exp-map-obj");
	var expMapCover = document.getElementById("exp-map-cover");
	var content = document.getElementById("content");
	var contentContainer = document.getElementById("content-container");
	//var expColumnSliderRegion = document.getElementById("exp-column-slider-region");
	expList.style.height = (windowHeight - 195) +"px";
	site.style.height = (windowHeight - 20) +"px";
	content.style.height = (windowHeight - 116) +"px";
	contentContainer.style.paddingBottom = "0px";
	var expListWidth = findWidth(expList);
	if (container != "") {
		expMapObj.style.width = (containerExploreMapWidth) +"px";
		expMapObj.style.height = (400) +"px";
		expList.style.marginTop = (400) +"px";
	} else {
		if (expViewMode == "map") {
			expMapObj.style.width = (windowWidth - 31 - expListWidth) +"px";
		} else {
			expMapObj.style.width = (windowWidth - 31 - expListWidth) +"px";
		}
		expMapObj.style.height = (windowHeight - 175) +"px";
	}
	expMapCover.style.width = windowWidth +"px";
	expMapCover.style.height = expMapObj.style.height;
	//expColumnSliderRegion.style.width = (windowWidth - findPosX(expList) - expListWidth + 20) +"px";
	var expMapToolbar = document.getElementById("exp-map-toolbar");
	expMapToolbar.style.width = expMapObj.style.width;
	updateCrosshairs();
}

var crosshair1;
var crosshair2;
function updateCrosshairs() {
	var expMapObj = document.getElementById("exp-map-obj");
	var size = 11;
	if (!crosshair1 && !crosshair2) {
		crosshair1 = document.createElement('div');
		crosshair1.id = "crosshair1";
		crosshair1.style.position = "fixed";
		crosshair1.style.zIndex = "200";
		crosshair1.style.width = "1px";
		crosshair1.style.height = size +"px";
		crosshair1.style.background = "#000000";
		crosshair1.style.cursor = "url(http://maps.google.com/intl/en_us/mapfiles/openhand.cur), default"; 
		document.body.appendChild(crosshair1);
		crosshair2 = document.createElement('div');
		crosshair2.id = "crosshair2";
		crosshair2.style.position = "fixed";
		crosshair2.style.zIndex = "200";
		crosshair2.style.width = size +"px";
		crosshair2.style.height = "1px";
		crosshair2.style.background = "#000000";
		crosshair2.style.cursor = "url(http://maps.google.com/intl/en_us/mapfiles/openhand.cur), default"; 
		document.body.appendChild(crosshair2);
		YAHOO.util.Event.addListener(crosshair1, "mousedown", crosshairsPassThrough); 
		YAHOO.util.Event.addListener(crosshair2, "mousedown", crosshairsPassThrough); 
		YAHOO.util.Event.addListener(crosshair1, "click", crosshairsPassThrough); 
		YAHOO.util.Event.addListener(crosshair2, "click", crosshairsPassThrough); 
		YAHOO.util.Event.addListener(crosshair1, "mousemove", crosshairsPassThrough); 
		YAHOO.util.Event.addListener(crosshair2, "mousemove", crosshairsPassThrough); 
		YAHOO.util.Event.addListener(crosshair1, "mouseup", crosshairsPassThrough); 
		YAHOO.util.Event.addListener(crosshair2, "mouseup", crosshairsPassThrough); 
	}
	crosshair1.style.left = (findPosX(expMapObj) + Math.round(findWidth(expMapObj) / 2)) +"px";
	crosshair1.style.top = (findPosY(expMapObj) + Math.round(findHeight(expMapObj) / 2) - Math.floor(size / 2)) +"px";
	crosshair2.style.left = (findPosX(expMapObj) + Math.round(findWidth(expMapObj) / 2) - Math.floor(size / 2)) +"px";
	crosshair2.style.top = (findPosY(expMapObj) + Math.round(findHeight(expMapObj) / 2)) +"px";
}

function hideCrosshairs() {
	if (crosshair1 != undefined) {
		crosshair1.parentNode.removeChild(crosshair1);
		crosshair1 = undefined;
	}
	if (crosshair2 != undefined) {
		crosshair2.parentNode.removeChild(crosshair2);
		crosshair2 = undefined;
	}
}

function crosshairsPassThrough(e) {
	YAHOO.util.Event.preventDefault(e);
	var expMapObj = document.getElementById("exp-map-obj");
	expMapObj.dispatchEvent(e);
}

var labelsLibrary = new Object();

function setMapType(type, toggleOff) {
	var button = document.getElementById("exp-mapToolbar-mapType");
	if (type == 0) {
		expMap.setMapType(G_NORMAL_MAP);
		button.style.backgroundPosition = "left top";
	} else if (type == 1) {
		expMap.setMapType(G_SATELLITE_MAP);
		button.style.backgroundPosition = "left -50px";
	} else if (type == 2) {
		expMap.setMapType(G_HYBRID_MAP);
		button.style.backgroundPosition = "left -100px";
	} else if (type == 3) {
		expMap.setMapType(G_PHYSICAL_MAP);
		button.style.backgroundPosition = "left bottom";
	}
	if (toggleOff) {
		toggleMapTypeButton();
	}
}

var expViewMode = "list";

function updateViewModeButton() {
	var button = document.getElementById("exp-view-button");
	if (button) {
		if (expViewMode == "list") {
			button.style.backgroundPosition = "left top";
		} else if (expViewMode == "both") {
			button.style.backgroundPosition = "left bottom";
		} else if (expViewMode == "map") {
			button.style.backgroundPosition = "left -100px";
		}
	}
}

function setViewMode(type) {
	var expList = document.getElementById("exp-list");
	if (type == 0) {
		expViewMode = "list";
		if (toggleMapStatus != "off") {
			toggleMapOff();
		}
		expList.className = "mode-list";
		expList.style.display = "block";
		if (container != "") {
			expList.style.marginTop = "0px";
		}
		updateViewModeButton();
	} else if (type == 1) {
		expViewMode = "both";
		if (jumpToLocation == "") {
			jumpToLocation = "Current Map View";
			setLocationTextToCurrentMapView();
		}
		if (toggleMapStatus == "off") {
			toggleMapOn();
		}
		expList.className = "mode-both";
		expList.style.display = "block";
		setColumnSliderToDefault();
		if (container != "") {
			expList.style.marginTop = "400px";
		}
		updateViewModeButton();
	} else if (type == 2) {
		expViewMode = "map";
		if (toggleMapStatus == "off") {
			toggleMapOn();
		}
		expList.className = "mode-map";
		var expColumnSlider = document.getElementById("exp-column-slider");
		expColumnSlider.style.left = "205px";
		expList.style.display = "none";
		setExpMiddleColumnWidth();
		removeRestrictMapMarkers();
		updateViewModeButton();
	}
}

function setExpMiddleColumnWidth() { // relative to exp-column-slider
	var expList = document.getElementById("exp-list");
	var expColumnSlider = document.getElementById("exp-column-slider");
	var expDisclaimer = document.getElementById("exp-disclaimer");
	var expMapObj = document.getElementById("exp-map-obj");
	var expMapCover = document.getElementById("exp-map-cover");
	var windowWidth = getWindowWidth();
	var newExpListWidth = findPosX(expColumnSlider) - 40;
	if (newExpListWidth > 0) {
		expList.style.width = (newExpListWidth) +"px";
	}
	expDisclaimer.style.left = (findPosX(expColumnSlider) + 30) +"px";
	if (container != "") {
		expMapObj.style.width = (containerExploreMapWidth) +"px";
	} else {
		expMapObj.style.width = (windowWidth - 61 - newExpListWidth) +"px";
	}
	expMapCover.style.width = windowWidth +"px";
	var expMapToolbar = document.getElementById("exp-map-toolbar");
	expMapToolbar.style.width = expMapObj.style.width;
	updateCrosshairs();
}

function makeColumnSliderDraggable() {
	var expColumnSlider = document.getElementById("exp-column-slider");
	//expColumnSlider.onSelect = function () { return false; };
	YAHOO.util.Event.addListener("exp-column-slider", "mousedown", startColumnSliderDrag); 
	YAHOO.util.Event.addListener(window, "mouseup", stopColumnSliderDrag); 
	YAHOO.util.Event.addListener("exp-column-slider", "dblclick", setColumnSliderToDefault); 
	columnSliderIsDraggable = true;
}

function setColumnSliderToDefault() {
	var expColumnSlider = document.getElementById("exp-column-slider");
	expColumnSlider.style.left = "400px";
	setExpMiddleColumnWidth();
}

function startColumnSliderDrag(e) {
	YAHOO.util.Event.preventDefault(e);
	var expColumnSlider = document.getElementById("exp-column-slider");
	var expMapCover = document.getElementById("exp-map-cover");
	expMapCover.style.display = "block";
	expColumnSliderStartX = findPosX(expColumnSlider);
	expColumnSliderStartMouseX = YAHOO.util.Event.getPageX(e);
	YAHOO.util.Event.addListener(window, "mousemove", dragColumnSliderTo);
}

function stopColumnSliderDrag(e) {
	var expMapCover = document.getElementById("exp-map-cover");
	expMapCover.style.display = "none";
	YAHOO.util.Event.removeListener(window, "mousemove");
}

function dragColumnSliderTo(e) {
	var expColumnSlider = document.getElementById("exp-column-slider");
	var diff = YAHOO.util.Event.getPageX(e) - expColumnSliderStartMouseX;
	var newX = expColumnSliderStartX + diff;
	if (newX > getWindowWidth() - 400) {
		newX = getWindowWidth() - 400;
	}
	if (newX < 280) {
		newX = 280;
	}
	if (expViewMode == "map") {
		newX = 205;
	}
	expColumnSlider.style.left = newX +"px";
	setExpMiddleColumnWidth();
}

function toggleMap() {
	if (toggleMapStatus == "off") {
		toggleMapOn();
	} else {
		toggleMapOff();
	}
}

function expGLoad() {
	expMapObj = document.getElementById("exp-map-obj");
	if (GBrowserIsCompatible() && expMapObj) {
		expMap = new GMap2(expMapObj);
		expMap.addControl(new GScaleControl());
		expMap.addMapType(G_PHYSICAL_MAP);
		expMap.enableDoubleClickZoom();
		var defaultLat = readCookie("expLat");
		var defaultLng = readCookie("expLng");
		var defaultZoom = readCookie("expZoom");
		var defaultMapType = readCookie("expMapType");
		if (getQueryVariable("lat") != undefined) {
			defaultLat = getQueryVariable("lat");
		}
		if (getQueryVariable("lng") != undefined) {
			defaultLng = getQueryVariable("lng");
		}
		if (getQueryVariable("zoom") != undefined) {
			defaultZoom = getQueryVariable("zoom");
		}
		if (defaultLat == undefined) {
			defaultLat = 40.7119;
		}
		if (defaultLng == undefined) {
			defaultLng = -73.9627;
		}
		if (defaultZoom == undefined) {
			defaultZoom = 10;
		}
		expMap.setCenter(new GLatLng(parseFloat(defaultLat), parseFloat(defaultLng)), parseInt(defaultZoom));
		if (defaultMapType == undefined) {
			defaultMapType = 3;
		}
		if (getQueryVariable("mapType") != undefined) {
			defaultMapType = getQueryVariable("mapType");
		}
		setMapType(defaultMapType);
		geocoder = new GClientGeocoder();
		expMap.enableScrollWheelZoom();

		G_PHYSICAL_MAP.getMinimumResolution = function () { return 2 }; 
		G_NORMAL_MAP.getMinimumResolution = function () { return 2 }; 
		G_SATELLITE_MAP.getMinimumResolution = function () { return 2 }; 
		G_HYBRID_MAP.getMinimumResolution = function () { return 2 }; 
		G_PHYSICAL_MAP.getMaximumResolution = function () { return 15 }; 
		G_NORMAL_MAP.getMaximumResolution = function () { return 17 }; 
		G_SATELLITE_MAP.getMaximumResolution = function () { return 17 }; 
		G_HYBRID_MAP.getMaximumResolution = function () { return 17 };

		GEvent.addListener(expMap, "mousemove", moveDetectInPoly);
		GEvent.addListener(expMap, "mousemove", updateLatLngDisplay);
		GEvent.addListener(expMap, "mouseout", updateLatLngDisplayCenter);
		updateLatLngDisplayCenter();
		initRuler();
		expMap.addControl(new RulerControl());
		if (GLOBALS_isSignedIn == true) {
			initKPlaceCreator();
			expMap.addControl(new KPlaceCreatorControl());
		}
		mgr = new MarkerManager(expMap);
		mgr.addOverlayCallback = markerAdded;
		mgr.removeOverlayCallback = markerRemoved;
		bounds = new GLatLngBounds();
		mapContainer = expMap.getContainer();
		currentProjection = G_NORMAL_MAP.getProjection();

		initZoomControl();

		GEvent.addListener(expMap, "movestart", onMovestartEvent);
		GEvent.addListener(expMap, "moveend", onMoveendEvent);
		GEvent.addListener(expMap, "zoomend", onZoomendEvent);
		onMovestartEvent();

	    blankIcon = new GIcon();
	    blankIcon.shadow = webPagesRoot +"img/spreads/blank.gif";
	    blankIcon.iconSize = new GSize(1, 1);
	    blankIcon.shadowSize = new GSize(1, 1);
	    blankIcon.iconAnchor = new GPoint(0, 0);
	    blankIcon.infoWindowAnchor = new GPoint(0, 0);
	    blankIcon.infoShadowAnchor = new GPoint(0, 0);
	    blankIcon.image = webPagesRoot +"img/spreads/blank.gif";

		var kl1 = new YAHOO.util.KeyListener(document, 
			{ alt:true, shift:true, keys:(67) },
			{ fn:resetCache,
			scope:document,
			correctScope:true } );
		kl1.enable();

		infoWindowOptions = new Object();
		infoWindowOptions.maxWidth = 200;

		updateCheckedNauticalMarkers();
		updateCheckedPlaceMarkers();

		if (jumpToLocation != "") {
			askGoogleForLocation(jumpToLocation);
		}
	}
}

var nauticalMarkersTileLayer;
var nauticalMarkersTileLayerListener;
var placesTileLayer;
var placesTileLayerListener;

function addTileOverlay() {
	if (nauticalMarkersTileLayer != undefined) {
		expMap.removeOverlay(nauticalMarkersTileLayer);
		GEvent.removeListener(nauticalMarkersTileLayerListener);
	}

	if (checkedNauticalMarkers.length == 0) {
		return false;
	}

	var myCopyright = new GCopyrightCollection("© ");
	myCopyright.addCopyright(new GCopyright('Markers', new GLatLngBounds(new GLatLng(-90,-180), new GLatLng(90,180)), 0,'©2008 TheBoaters'));

	var tilelayer = new GTileLayer(myCopyright);
	tilelayer.getTileUrl = function (tile, zoom) {
		var str = "";
		for (i = 0; i < checkedNauticalMarkers.length; i++) {
			if (str != "") {
				str += ",";
			}
			str += checkedNauticalMarkers[i];
		}
		//loadHotPolygons(zoom, tile.x, tile.y, str);
		return webPagesRoot +"maps/tile.php?z="+ zoom +"&x="+ tile.x +"&y="+ tile.y +"&types="+ str;
	};
	tilelayer.isPng = function() { return true;};
	tilelayer.getOpacity = function() { return 1.0; }

	nauticalMarkersTileLayer = new GTileLayerOverlay(tilelayer);
	expMap.addOverlay(nauticalMarkersTileLayer);
	//nauticalMarkersTileLayerListener = GEvent.addListener(expMap, "click", processImageTileClick); // disabled until I convert EarthncMarkers into KPlaces
}

function addTileOverlayPlaces() {
	if (placesTileLayer != undefined) {
		expMap.removeOverlay(placesTileLayer);
		GEvent.removeListener(placesTileLayerListener);
	}

	if (checkedPlaceMarkers.length == 0) {
		return false;
	}

	var myCopyright = new GCopyrightCollection("© ");
	myCopyright.addCopyright(new GCopyright('Places', new GLatLngBounds(new GLatLng(-90,-180), new GLatLng(90,180)), 0,'©2008 TheBoaters'));

	var tilelayer = new GTileLayer(myCopyright);
	tilelayer.getTileUrl = function (tile, zoom) {
		var str = "";
		for (i = 0; i < checkedPlaceMarkers.length; i++) {
			if (str != "") {
				str += ",";
			}
			str += checkedPlaceMarkers[i];
		}
		//loadHotPolygons(zoom, tile.x, tile.y, str);
		return webPagesRoot +"maps/tile.php?z="+ zoom +"&x="+ tile.x +"&y="+ tile.y +"&types="+ str;
	};
	tilelayer.isPng = function() { return true;};
	tilelayer.getOpacity = function() { return 1.0; }

	placesTileLayer = new GTileLayerOverlay(tilelayer);
	expMap.addOverlay(placesTileLayer);
	placesTileLayerListener = GEvent.addListener(expMap, "click", processImageTileClick);
}

var hotPolygons = new Array();
var hotPolygonRequestCounts = new Object();
function loadHotPolygons(zoom, x, y, types) {
	return false; // Disabled for now
	if (types.indexOf("-") != 0) {
		types = "-"+ types.replace(/,/g, "-") +"-";
	}
	var url = GLOBALS_webVaultRoot +"tilesHotAreas/z"+ zoom +"_x"+ x +"_y"+ y +"_t"+ types +".txt";
	YAHOO.util.Connect.asyncRequest(
		"GET"
		, url
		, {
			success: function(o) {
				removeConnection();
				if(o.responseText != undefined) {
					var polygons = YAHOO.lang.JSON.parse(o.responseText);
					if (polygons != undefined) {
						hotPolygons = hotPolygons.concat(polygons);
					}
				}
			}
			, failure: function(o) {
				if (hotPolygonRequestCounts[url] == undefined) {
					hotPolygonRequestCounts[url] = 0;
				} else {
					hotPolygonRequestCounts[url]++;
				}
				if (hotPolygonRequestCounts[url] < 1) {
					window.setTimeout(function () { loadHotPolygons(zoom, x, y, types); }, 1000);
				}
			}
		}
	);
}

function moveDetectInPoly(latlng) {
	var xy = expMap.getCurrentMapType().getProjection().fromLatLngToPixel(latlng, expMap.getZoom());
	var x = xy.x;
	var y = xy.y;
	for (i = 0; i < hotPolygons.length; i++) {
		if (inPoly(hotPolygons[i], x, y)) {
			expMapObj.firstChild.firstChild.style.cursor = "pointer"; 
			return true;
		}
	}
	expMapObj.firstChild.firstChild.style.cursor = "url(http://maps.google.com/intl/en_us/mapfiles/openhand.cur), default"; 
}

/* this is only for testing... it draws GPolygons on the map
window.setTimeout(function () {
	for (var i = 0; i < hotPolygons.length; i++) {
		console.log(hotPolygons[i]);
		var points = new Array();
		for (var k = 0; k < hotPolygons[i].length; k++) {
			if (k % 2 > 0) {
				var x = hotPolygons[i][k - 1];
				var y = hotPolygons[i][k];
				var latlng = expMap.getCurrentMapType().getProjection().fromPixelToLatLng(new GPoint(x, y), expMap.getZoom());
				points.push(new GLatLng(latlng.lat(), latlng.lng()));
				x = null;
				y = null;
			}
		}
		if (latlng) {
			console.log("drawing polygon at latlng = "+ latlng.lat() +", "+ latlng.lng());
		}
		var polygon = new GPolygon(points, '#FF0000', 3, 1,'#0000FF', 0.2);
		expMap.addOverlay(polygon);
	}
}, 10000);
*/

/* inPoly()
Finds if a given point is within a polygon.

Based on Bob Stein's inpoly() function for C.
http://home.earthlink.net/~bobstein/inpoly/

Modified for JavaScript by Scott Andrew LePera.

Parameters:
poly: array containing x/y coordinate pairs that
  describe the vertices of the polygon. Format is
  indentical to that of HTML image maps, i.e. [x1,y1,x2,y2,...]
  
px: the x-coordinate of the target point.

py: the y-coordinate of the target point.

Return value:
true if the point is within the polygon, false if not.
*/
function inPoly(poly,px,py) {
     var npoints = poly.length; // number of points in polygon
     var xnew,ynew,xold,yold,x1,y1,x2,y2,i;
     var inside=false;

     if (npoints/2 < 3) { // points don't describe a polygon
          return false;
     }
     xold=poly[npoints-2];
     yold=poly[npoints-1];
     
     for (i=0 ; i < npoints ; i=i+2) {
          xnew=poly[i];
          ynew=poly[i+1];
          if (xnew > xold) {
               x1=xold;
               x2=xnew;
               y1=yold;
               y2=ynew;
          }
          else {
               x1=xnew;
               x2=xold;
               y1=ynew;
               y2=yold;
          }
          if ((xnew < px) == (px <= xold) && ((py-y1)*(x2-x1) < (y2-y1)*(px-x1))) {
               inside=!inside;
          }
          xold=xnew;
          yold=ynew;
     }
     return inside;
}

var infoWindowOptions;
var kPlaceViewerAnchor;
var kPlaceViewerLatitude;
var kPlaceViewerLongitude;

function processImageTileClick(overlay, point) {
	if (point != undefined) {
		var marker = createMarker(point, blankIcon, null, null);
		mgr.addMarker(marker, expMap.getZoom(), expMap.getZoom());
		//marker.openInfoWindowHtml("Searching...", infoWindowOptions);
		lastImageTileMarker = marker;
		var combinedVisibleLayers = checkedNauticalMarkers.concat(checkedPlaceMarkers); // added May 2008 to include Places
		getInfoWindowHtml(point, combinedVisibleLayers, lastImageTileMarker);
	}
}

function processSatelliteClick(baseX, baseY, satelliteX, satelliteY, type, i) {
	var basePixel = new GPoint(parseInt(baseX), parseInt(baseY));
	var baseLatlng = expMap.fromDivPixelToLatLng(basePixel, expMap.getZoom());
	var satellitePixel = new GPoint(parseInt(satelliteX), parseInt(satelliteY));
	var satelliteLatlng = expMap.fromDivPixelToLatLng(satellitePixel, expMap.getZoom());
	var marker = createMarker(expMap.getCenter(), blankIcon, null, null);
	mgr.addMarker(marker, expMap.getZoom(), expMap.getZoom());
	marker.openInfoWindowHtml("Searching...", infoWindowOptions);
	lastMarker = marker;
	getInfoWindowHtml(baseLatlng, Array(type), lastMarker);
}

function getQueryVariable(variable) {
	var query = window.location.search.substring(1);
	var vars = query.split("&");
	for (var i=0;i<vars.length;i++) {
		var pair = vars[i].split("=");
		if (pair[0] == variable) {
			return pair[1];
		}
	}
}

function onMovestartEvent() {
	onMovestartCenter = expMap.fromLatLngToDivPixel(expMap.getCenter());
	onMovestartZoom = expMap.getZoom();
	mapViewWillChange();
}

function onZoomendEvent(oldLevel, newLevel) {
	window.setTimeout("onMovestartZoom = "+ newLevel +";", 200);
}

function onMoveendEvent() {
	var center = expMap.getCenter();
	if (center) {
		createCookie("expLat", center.lat(), 365);
		createCookie("expLng", center.lng(), 365);
		createCookie("expZoom", expMap.getZoom(), 365);
	}
	var onMoveendCenter = expMap.fromLatLngToDivPixel(expMap.getCenter());
	var onMoveendZoom = expMap.getZoom();
	mapViewDidChange();
}

function setLocationTextToCurrentMapView() {
	var o = document.getElementById("location");
	if (o) {
		o.value = "Current Map View";
	}
}

function askGoogleForLocation(address) {
	if (kPlaceCreatorMarker != undefined) {
		saveKPlaceCreatorInnerHtml();
		closeKPlaceCreatorBubble();
		expMap.removeOverlay(kPlaceCreatorMarker);
	}
	if (geocoder) {
		if (jumpToLocation != "Current Map View" || address != "Current Map View") {
			geocoder.getLocations(address, jumpMapToLocation);
		} else {
			mapViewDidChange();
		}
	}
	return false;
}

function jumpMapToLocation(response) {
	if (!response || response.Status.code != 200) {
		alert("Sorry, location not found.");
	} else {
		var place = response.Placemark[0];
		var point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
		var accuracy = response.Placemark[0].AddressDetails.Accuracy;
		var zoom = (accuracy * 2) + 2;
		if (zoom < 2) {
			zoom = 2;
		}
		if (zoom > 15) {
			zoom = 15;
		}
		expMap.setCenter(point, zoom);
		mgr.refresh();
		var jumpToSearchField = document.getElementById("jump-to-search-field");
		if (jumpToSearchField) {
			jumpToSearchField.value = "";
			jumpToSearchField.blur();
		}
		if (kPlaceCreatorControlDiv) {
			if (kPlaceCreatorControlDiv.className == "on") {
				addKPlaceCreatorMarker();
				kPlaceCreatorLatitude = place.Point.coordinates[1];
				kPlaceCreatorLongitude = place.Point.coordinates[0];
				window.setTimeout(function () {
					loadKPlaceCreatorStep1("kPlaceAnchor");
					//openKPlaceCreatorBubble(kPlaceCreatorMarker);
					//loadKPlaceCreatorInnerHtmlAfterDrag = true;
				}, 500);
			}
		}
		if (addPlace_updateDraggableMarker) {
			addPlace_updateDraggableMarker();
		}
	}
}

function initExplore() {
	initCheckBoxes();
	if (container != "") {
		if (BrowserDetect.browser == "Firefox") {
			var content = document.getElementById("content");
			content.style.marginLeft = "11px";
		}
		if (BrowserDetect.browser != "Safari") {
			var searchBox = document.getElementById("searchbox");
			searchBox.style.width = "115px";
		}
	}
	//if (readCookie("exploreMapOn") == "true" || getQueryVariable("map") == "true") {
		//toggleMap();
	//}
	eraseCookie("sort");
	eraseCookie("withPhoto");
	eraseCookie("restrictResultsToMap");
	if (jumpToLocation != "" && listRestrictCurrentPage < 2) {
		setViewMode(1);
	} else if (jumpToLocation == "" && listRestrictCurrentPage < 2) {
		setViewMode(0);
	}
}

function markerRemoved(marker) {
	//log("removing "+ marker.myKey);
}

function makeSectionsLibraryKey(key) {
	var pieces1 = key.split("r");
	var pieces2 = pieces1[0].split("c");
	var z = pieces2[0].replace(/z/, "");
	return z +","+ pieces2[1] +","+ pieces1[1];
}

function updateLatLngDisplay(e) {
	var o = document.getElementById("exp-lat-lng-display");
	var pixel = currentProjection.fromLatLngToPixel(e, expMap.getZoom());
	var x = Math.floor(pixel.x / tileSize);
	var y = Math.ceil(pixel.y / tileSize);
	//o.innerHTML = "lng "+ e.lng() +", lat "+ e.lat() +"<br>section: z"+ expMap.getZoom() +"c"+ x +"r"+ y;
	o.innerHTML = "lat "+ Math.round(e.lat() * 10000)/10000 +", lng "+ Math.round(e.lng() * 10000)/10000;
}

function updateLatLngDisplayCenter(e) {
	var o = document.getElementById("exp-lat-lng-display");
	var center = expMap.getCenter();
	//o.innerHTML = "lng "+ center.lng() +", lat "+ center.lat();
	o.innerHTML = "lat "+ Math.round(center.lat() * 10000)/10000 +", lng "+ Math.round(center.lng() * 10000)/10000;
}

function fullViewSections() {
	var zoom = expMap.getZoom();
	var myTileSize = tileSize;
	var totalHeight = Math.pow(2, zoom) * 256;
	var rows = Math.ceil(totalHeight / myTileSize);
	var cols = rows;
	var myTileCountTotal = rows * cols;
	var bounds = expMap.getBounds();
	var southWest = bounds.getSouthWest();
	var northEast = bounds.getNorthEast();
	var currentProjection = G_NORMAL_MAP.getProjection();
	var southWestPixels = currentProjection.fromLatLngToPixel(southWest, expMap.getZoom());
	var northEastPixels = currentProjection.fromLatLngToPixel(northEast, expMap.getZoom());
	var xStart = southWestPixels.x - loadAroundViewBuffer;
	var xEnd = northEastPixels.x + loadAroundViewBuffer;
	var yStart = northEastPixels.y - loadAroundViewBuffer;
	var yEnd = southWestPixels.y + loadAroundViewBuffer;
	var firstCol = Math.floor(xStart / myTileSize);
	var lastCol = Math.floor(xEnd / myTileSize);
	var firstRow = Math.ceil(yStart / myTileSize);
	var lastRow = Math.ceil(yEnd / myTileSize);
	var sections = Array();
	for (col = firstCol; col < lastCol; col++) {
		for (row = firstRow; row < lastRow; row++) {
			sections.push(col +","+ row);
		}
	}
	return sections;
}

function fullViewSectionsQuery() {
	var sections = fullViewSections();
	var zoom = expMap.getZoom();
	var sectionsStr = "";
	for (i = 0; i < sections.length; i++) {
		sectionsStr += sections[i] +";";
	}
	var q = "zooms[]="+ zoom +"&sections[]="+ sectionsStr;
	//document.getElementById("exp-list-bucket").innerHTML = html;
	return q;
}

function clickLeftNavItem(o) {
	var search = document.getElementById("searchbox");
	if (!search) {
		search = document.getElementById("searchbox-safari");
	}
	if (search.value == "Search") {
		window.location = o.href;
	} else {
		if (window.location.toString().indexOf("q=") > 0) {
			window.location = o.href +"&q="+ search.value;
		} else {
			window.location = o.href;
		}
	}
	return false;
}

function hideCheckBoxes() {
	for (var k in checkBoxes) {
		checkBoxes[k].style.display = "none";
	}
	var a = document.getElementById("checkBox-markersBuoys");
	if (a) { a.style.display = "none"; }
	//var b = document.getElementById("checkBox-lights");
	//if (b) { b.style.display = "none"; }
}

function showCheckBoxes() {
	for (var k in checkBoxes) {
		if (k != "checkBox-people-2") {
			checkBoxes[k].style.display = "inline";
		}
	}
	var a = document.getElementById("checkBox-markersBuoys");
	if (a) { a.style.display = "inline"; }
	//var b = document.getElementById("checkBox-lights");
	//if (b) { b.style.display = "inline"; }
}

function updateCheckBoxes(button) {
	/*
	var obj = document.getElementById("checkBoxesControl-list");
	var checkBoxes = obj.getElementsByTagName("input");
	for (var i = 0; i < checkBoxes.length; i++) {
		clickCheckBox(checkBoxes[i], true);
	}
	*/
	if (button) {
		button.value = "Updating...";
		button.disabled = true;
	}
	window.setTimeout(function () {
		updateCheckedNauticalMarkers();
		updateCheckedPlaceMarkers();
		window.setTimeout(function () {
			toggleCheckBoxesControlButton("off");
			var button = document.getElementById("updateMapCheckBoxesButton");
			button.value = "Update Map";
			button.disabled = false;
		}, 300);
	}, 50);
}

function clickCheckBox(o, blockUpdate) {
	if (o.id.indexOf("-display") != -1) {
		var box = document.getElementById(o.id.replace(/-display/, ""));
		if (o.checked == true) {
			box.checked = true;
		} else {
			box.checked = false;
		}
		return clickCheckBox(box, blockUpdate);
	}
	if (o.id == "checkBox-boats") {
		if (o.checked) {
			checkBoxes["checkBox-powerboats-29"].checked = true;
			checkBoxes["checkBox-sailboats-30"].checked = true;
			checkBoxes["checkBox-pwcs-31"].checked = true;
			checkBoxes["checkBox-canoesKayaks-32"].checked = true;
		} else {
			checkBoxes["checkBox-powerboats-29"].checked = false;
			checkBoxes["checkBox-sailboats-30"].checked = false;
			checkBoxes["checkBox-pwcs-31"].checked = false;
			checkBoxes["checkBox-canoesKayaks-32"].checked = false;
		}
	}
	if (o.id == "checkBox-places") {
		if (o.checked) {
			checkBoxes["checkBox-marinas-36"].checked = true;
			checkBoxes["checkBox-diveSites-37"].checked = true;
			checkBoxes["checkBox-fishingSpots-38"].checked = true;
			checkBoxes["checkBox-raftUps-39"].checked = true;
			checkBoxes["checkBox-anchorages-40"].checked = true;
			checkBoxes["checkBox-other-41"].checked = true;
		} else {
			checkBoxes["checkBox-marinas-36"].checked = false;
			checkBoxes["checkBox-diveSites-37"].checked = false;
			checkBoxes["checkBox-fishingSpots-38"].checked = false;
			checkBoxes["checkBox-raftUps-39"].checked = false;
			checkBoxes["checkBox-anchorages-40"].checked = false;
			checkBoxes["checkBox-other-41"].checked = false;
		}
	}
	if (o.id == "checkBox-markers") {
		if (o.checked) {
			checkBoxes["checkBox-markersBuoys"].checked = true;
			checkBoxes["checkBox-shipWrecks-42"].checked = true;
			checkBoxes["checkBox-obstructions-43"].checked = true;
			checkBoxes["checkBox-offshorePlatforms-44"].checked = true;
		} else {
			checkBoxes["checkBox-markersBuoys"].checked = false;
			checkBoxes["checkBox-shipWrecks-42"].checked = false;
			checkBoxes["checkBox-obstructions-43"].checked = false;
			checkBoxes["checkBox-offshorePlatforms-44"].checked = false;
		}
	}
	if (o.id == "checkBox-markersBuoys" || o.id == "checkBox-markers") {
		if (o.checked) {
			checkBoxes["checkBox-markersBuoys-4"].checked = true;
			checkBoxes["checkBox-markersBuoys-5"].checked = true;
			checkBoxes["checkBox-markersBuoys-6"].checked = true;
			checkBoxes["checkBox-markersBuoys-7"].checked = true;
			checkBoxes["checkBox-markersBuoys-8"].checked = true;
			checkBoxes["checkBox-markersBuoys-9"].checked = true;
			checkBoxes["checkBox-markersBuoys-10"].checked = true;
			checkBoxes["checkBox-markersBuoys-11"].checked = true;
			checkBoxes["checkBox-markersBuoys-12"].checked = true;
			checkBoxes["checkBox-markersBuoys-13"].checked = true;
			checkBoxes["checkBox-markersBuoys-14"].checked = true;
			checkBoxes["checkBox-markersBuoys-15"].checked = true;
			checkBoxes["checkBox-markersBuoys-16"].checked = true;
			checkBoxes["checkBox-markersBuoys-17"].checked = true;
			checkBoxes["checkBox-markersBuoys-18"].checked = true;
			checkBoxes["checkBox-markersBuoys-19"].checked = true;
			checkBoxes["checkBox-markersBuoys-20"].checked = true;
			checkBoxes["checkBox-markersBuoys-21"].checked = true;
			checkBoxes["checkBox-markersBuoys-22"].checked = true;
			checkBoxes["checkBox-markersBuoys-23"].checked = true;
			checkBoxes["checkBox-markersBuoys-24"].checked = true;
			checkBoxes["checkBox-markersBuoys-25"].checked = true;
			checkBoxes["checkBox-markersBuoys-26"].checked = true;
			checkBoxes["checkBox-markersBuoys-27"].checked = true;
			checkBoxes["checkBox-markersBuoys-28"].checked = true;
		} else {
			checkBoxes["checkBox-markersBuoys-4"].checked = false;
			checkBoxes["checkBox-markersBuoys-5"].checked = false;
			checkBoxes["checkBox-markersBuoys-6"].checked = false;
			checkBoxes["checkBox-markersBuoys-7"].checked = false;
			checkBoxes["checkBox-markersBuoys-8"].checked = false;
			checkBoxes["checkBox-markersBuoys-9"].checked = false;
			checkBoxes["checkBox-markersBuoys-10"].checked = false;
			checkBoxes["checkBox-markersBuoys-11"].checked = false;
			checkBoxes["checkBox-markersBuoys-12"].checked = false;
			checkBoxes["checkBox-markersBuoys-13"].checked = false;
			checkBoxes["checkBox-markersBuoys-14"].checked = false;
			checkBoxes["checkBox-markersBuoys-15"].checked = false;
			checkBoxes["checkBox-markersBuoys-16"].checked = false;
			checkBoxes["checkBox-markersBuoys-17"].checked = false;
			checkBoxes["checkBox-markersBuoys-18"].checked = false;
			checkBoxes["checkBox-markersBuoys-19"].checked = false;
			checkBoxes["checkBox-markersBuoys-20"].checked = false;
			checkBoxes["checkBox-markersBuoys-21"].checked = false;
			checkBoxes["checkBox-markersBuoys-22"].checked = false;
			checkBoxes["checkBox-markersBuoys-23"].checked = false;
			checkBoxes["checkBox-markersBuoys-24"].checked = false;
			checkBoxes["checkBox-markersBuoys-25"].checked = false;
			checkBoxes["checkBox-markersBuoys-26"].checked = false;
			checkBoxes["checkBox-markersBuoys-27"].checked = false;
			checkBoxes["checkBox-markersBuoys-28"].checked = false;
		}
	}
	if (o.id == "checkBox-lights") {
		if (o.checked) {
			checkBoxes["checkBox-lights-22"].checked = true;
			checkBoxes["checkBox-lights-23"].checked = true;
			checkBoxes["checkBox-lights-24"].checked = true;
			checkBoxes["checkBox-lights-25"].checked = true;
			checkBoxes["checkBox-lights-26"].checked = true;
			checkBoxes["checkBox-lights-27"].checked = true;
			checkBoxes["checkBox-lights-28"].checked = true;
		} else {
			checkBoxes["checkBox-lights-22"].checked = false;
			checkBoxes["checkBox-lights-23"].checked = false;
			checkBoxes["checkBox-lights-24"].checked = false;
			checkBoxes["checkBox-lights-25"].checked = false;
			checkBoxes["checkBox-lights-26"].checked = false;
			checkBoxes["checkBox-lights-27"].checked = false;
			checkBoxes["checkBox-lights-28"].checked = false;
		}
	}
	if (blockUpdate == undefined) {
		updateCheckedNauticalMarkers();
		updateCheckedPlaceMarkers();
	}
}


function updateCheckedNauticalMarkers() {
	checkedNauticalMarkers = Array();
	for (var box in checkBoxes) {
		var type = parseTypeIdFromCheckboxId(box);
		if (checkBoxes[box].checked == true) {
			if ((type >= 5 && type <= 21) || (type >= 23 && type <= 28)) {
				checkedNauticalMarkers.push(type);
			}
		}
	}
	if (expMap != undefined) {
		addTileOverlay();
	}
}

function updateCheckedPlaceMarkers() {
	checkedPlaceMarkers = Array();
	for (var box in checkBoxes) {
		var type = parseTypeIdFromCheckboxId(box);
		if (checkBoxes[box].checked == true) {
			if (/* KPlaces */(type >= 36 && type <= 41) || /* Boats */(type >= 29 && type <= 32) || /* Wrecks */(type >= 42 && type <= 44)) {
				checkedPlaceMarkers.push(type);
			}
		}
	}
	if (expMap != undefined) {
		addTileOverlayPlaces();
	}
}

var checkedNauticalMarkers = Array();
var checkedPlacesMarkers = Array();

function initCheckBoxes() {
	checkBoxes["checkBox-boats"] = document.getElementById("checkBox-boats");
	checkBoxes["checkBox-powerboats-29"] = document.getElementById("checkBox-powerboats");
	checkBoxes["checkBox-sailboats-30"] = document.getElementById("checkBox-sailboats");
	checkBoxes["checkBox-pwcs-31"] = document.getElementById("checkBox-pwcs");
	checkBoxes["checkBox-canoesKayaks-32"] = document.getElementById("checkBox-canoesKayaks");
	//checkBoxes["checkBox-people-2"] = document.getElementById("checkBox-people");
	//checkBoxes["checkBox-groups-33"] = document.getElementById("checkBox-groups");
	//checkBoxes["checkBox-photos-3"] = document.getElementById("checkBox-photos");
	//checkBoxes["checkBox-activity-34"] = document.getElementById("checkBox-activity");
	checkBoxes["checkBox-places"] = document.getElementById("checkBox-places");
	checkBoxes["checkBox-marinas-36"] = document.getElementById("checkBox-marinas");
	//checkBoxes["checkBox-userPlaces-35"] = document.getElementById("checkBox-userPlaces");
	checkBoxes["checkBox-diveSites-37"] = document.getElementById("checkBox-diveSites");
	checkBoxes["checkBox-fishingSpots-38"] = document.getElementById("checkBox-fishingSpots");
	checkBoxes["checkBox-raftUps-39"] = document.getElementById("checkBox-raftUps");
	checkBoxes["checkBox-anchorages-40"] = document.getElementById("checkBox-anchorages");
	checkBoxes["checkBox-other-41"] = document.getElementById("checkBox-other");
	checkBoxes["checkBox-markersBuoys"] = document.getElementById("checkBox-markersBuoys");
	checkBoxes["checkBox-markersBuoys-4"] = document.getElementById("checkBox-markersBuoys-4");
	checkBoxes["checkBox-markersBuoys-5"] = document.getElementById("checkBox-markersBuoys-5");
	checkBoxes["checkBox-markersBuoys-6"] = document.getElementById("checkBox-markersBuoys-6");
	checkBoxes["checkBox-markersBuoys-7"] = document.getElementById("checkBox-markersBuoys-7");
	checkBoxes["checkBox-markersBuoys-8"] = document.getElementById("checkBox-markersBuoys-8");
	checkBoxes["checkBox-markersBuoys-9"] = document.getElementById("checkBox-markersBuoys-9");
	checkBoxes["checkBox-markersBuoys-10"] = document.getElementById("checkBox-markersBuoys-10");
	checkBoxes["checkBox-markersBuoys-11"] = document.getElementById("checkBox-markersBuoys-11");
	checkBoxes["checkBox-markersBuoys-12"] = document.getElementById("checkBox-markersBuoys-12");
	checkBoxes["checkBox-markersBuoys-13"] = document.getElementById("checkBox-markersBuoys-13");
	checkBoxes["checkBox-markersBuoys-14"] = document.getElementById("checkBox-markersBuoys-14");
	checkBoxes["checkBox-markersBuoys-15"] = document.getElementById("checkBox-markersBuoys-15");
	checkBoxes["checkBox-markersBuoys-16"] = document.getElementById("checkBox-markersBuoys-16");
	checkBoxes["checkBox-markersBuoys-17"] = document.getElementById("checkBox-markersBuoys-17");
	checkBoxes["checkBox-markersBuoys-18"] = document.getElementById("checkBox-markersBuoys-18");
	checkBoxes["checkBox-markersBuoys-19"] = document.getElementById("checkBox-markersBuoys-19");
	checkBoxes["checkBox-markersBuoys-20"] = document.getElementById("checkBox-markersBuoys-20");
	checkBoxes["checkBox-markersBuoys-21"] = document.getElementById("checkBox-markersBuoys-21");
	checkBoxes["checkBox-markersBuoys-22"] = document.getElementById("checkBox-markersBuoys-22");
	checkBoxes["checkBox-markersBuoys-23"] = document.getElementById("checkBox-markersBuoys-23");
	checkBoxes["checkBox-markersBuoys-24"] = document.getElementById("checkBox-markersBuoys-24");
	checkBoxes["checkBox-markersBuoys-25"] = document.getElementById("checkBox-markersBuoys-25");
	checkBoxes["checkBox-markersBuoys-26"] = document.getElementById("checkBox-markersBuoys-26");
	checkBoxes["checkBox-markersBuoys-27"] = document.getElementById("checkBox-markersBuoys-27");
	checkBoxes["checkBox-markersBuoys-28"] = document.getElementById("checkBox-markersBuoys-28");
	//checkBoxes["checkBox-lights-22"] = document.getElementById("checkBox-lights-22");
	//checkBoxes["checkBox-lights-23"] = document.getElementById("checkBox-lights-23");
	//checkBoxes["checkBox-lights-24"] = document.getElementById("checkBox-lights-24");
	//checkBoxes["checkBox-lights-25"] = document.getElementById("checkBox-lights-25");
	//checkBoxes["checkBox-lights-26"] = document.getElementById("checkBox-lights-26");
	//checkBoxes["checkBox-lights-27"] = document.getElementById("checkBox-lights-27");
	//checkBoxes["checkBox-lights-28"] = document.getElementById("checkBox-lights-28");
	checkBoxes["checkBox-markers"] = document.getElementById("checkBox-markers");
	checkBoxes["checkBox-shipWrecks-42"] = document.getElementById("checkBox-shipWrecks");
	checkBoxes["checkBox-obstructions-43"] = document.getElementById("checkBox-obstructions");
	checkBoxes["checkBox-offshorePlatforms-44"] = document.getElementById("checkBox-offshorePlatforms");
}

var lastMarker;
var lastImageTileMarker;

function createMarker(point, icon, html, types) {
	var marker = new GMarker(point, { icon:icon });
	if (html != undefined && html != "") {
		GEvent.addListener(marker, "click", function() {
			html = "Searching...";
			marker.openInfoWindowHtml(html, infoWindowOptions);
			lastMarker = marker;
			getInfoWindowHtml(point, types, lastMarker);
		});
	}
	return marker;
}

function createMarkerWithBubble(point, icon, type, id) {
	var marker = new GMarker(point, { icon:icon });

	// adjust anchor point of bubble so it doesn't cover the marker
	var pixel = currentProjection.fromLatLngToPixel(point, expMap.getZoom());
	var pixelAdjusted = new GPoint(pixel.x, pixel.y - 25);
	point = currentProjection.fromPixelToLatLng(pixelAdjusted, expMap.getZoom());

	GEvent.addListener(marker, "click", function() {
		lastMarker = marker;
		if (type == "boat") {
			createAnchorAndOpenBoatViewerBubbleWithLatLng(point, id);
		} else if (type == "kPlace") {
			createAnchorAndOpenKPlaceViewerBubbleWithLatLng(point, id);
		}
	});
	return marker;
}

function openBubble(lat, lng, type, id) {
	var point = new GLatLng(lat, lng);
	
	// adjust anchor point of bubble so it doesn't cover the marker
	var pixel = currentProjection.fromLatLngToPixel(point, expMap.getZoom());
	var pixelAdjusted = new GPoint(pixel.x, pixel.y - 25);
	point = currentProjection.fromPixelToLatLng(pixelAdjusted, expMap.getZoom());

	if (type == "kPlace") {
		createAnchorAndOpenKPlaceViewerBubbleWithLatLng(point, id);
	} else if (type == "boat") {
		createAnchorAndOpenBoatViewerBubbleWithLatLng(point, id);
	}
}

function getInfoWindowHtml(point, types, markerForInfoWindow) {
	if (types instanceof Array) {
		var typesStr = "";
		for (i = 0; i < types.length; i++) {
			typesStr += "&types[]="+ types[i];
		}
		var padding = 4;
		for (i = 0; i <= types.length; i++) {
			if (types[i] <= 3 || types[i] >= 29) {
				padding = 32;
			}
			if (types[i] >= 36 && types[i] <= 41) {
				padding = 7
			}
		}
		var pixel = currentProjection.fromLatLngToPixel(point, expMap.getZoom());
		var pixelNorthWest = new GPoint(pixel.x - padding, pixel.y - padding);
		var pixelSouthEast = new GPoint(pixel.x + padding, pixel.y + padding);
		var northWest = currentProjection.fromPixelToLatLng(pixelNorthWest, expMap.getZoom());
		var southEast = currentProjection.fromPixelToLatLng(pixelSouthEast, expMap.getZoom());
		var latlng = currentProjection.fromPixelToLatLng(pixel, expMap.getZoom());

		GDownloadUrl(webPagesRoot +"maps/infoWindowHtml?z="+ expMap.getZoom() +"&northLat="+ northWest.lat() +"&westLng="+ northWest.lng() +"&southLat="+ southEast.lat() +"&eastLng="+ southEast.lng() + typesStr, function(data) {
			if (point) {
				destroyKPlaceViewerBubble();
				var latlng = point;
				var xy = fromLatLngToContainerPixel(expMap, expMapObj, latlng);
				var expMapX = findPosX(expMapObj);
				var expMapY = findPosY(expMapObj);
				var x = expMapX + xy.x;
				var y = expMapY + xy.y;
				kPlaceViewerAnchor = document.createElement('div');
				kPlaceViewerAnchor.id = "kPlaceViewerAnchor";
				kPlaceViewerAnchor.style.position = "absolute";
				kPlaceViewerAnchor.style.left = x +"px";
				kPlaceViewerAnchor.style.top = y +"px";
				kPlaceViewerAnchor.style.width = "1px";
				kPlaceViewerAnchor.style.height = "1px";
				document.body.appendChild(kPlaceViewerAnchor);
				kPlaceViewerLatitude = latlng.lat();
				kPlaceViewerLongitude = latlng.lng();
				var parts = data.split("|");
				if (parts[0] == "kPlaceId") {
					window.setTimeout(function () { doKPlaceViewer("kPlaceViewerAnchor", parts[1]); }, 200);
				} else if (parts[0] == "boatId") {
					window.setTimeout(function () { doBoatViewer("kPlaceViewerAnchor", parts[1]); }, 200);
				} else {
					// no dot found
				}
			}
		});
	}
}

function createAnchorAndOpenKPlaceViewerBubbleWithLatLng(point, data) {
	destroyKPlaceViewerBubble();
	var latlng = point;
	var xy = fromLatLngToContainerPixel(expMap, expMapObj, latlng);
	var expMapX = findPosX(expMapObj);
	var expMapY = findPosY(expMapObj);
	var x = expMapX + xy.x;
	var y = expMapY + xy.y;
	kPlaceViewerAnchor = document.createElement('div');
	kPlaceViewerAnchor.id = "kPlaceViewerAnchor";
	kPlaceViewerAnchor.style.position = "absolute";
	kPlaceViewerAnchor.style.left = x +"px";
	kPlaceViewerAnchor.style.top = y +"px";
	kPlaceViewerAnchor.style.width = "1px";
	kPlaceViewerAnchor.style.height = "1px";
	//kPlaceViewerAnchor.style.background = "#00FF00";
	document.body.appendChild(kPlaceViewerAnchor);
	kPlaceViewerLatitude = latlng.lat();
	kPlaceViewerLongitude = latlng.lng();
	window.setTimeout(function () { doKPlaceViewer("kPlaceViewerAnchor", data); }, 300);
}

function createAnchorAndOpenBoatViewerBubbleWithLatLng(point, data) {
	destroyBoatViewerBubble();
	var latlng = point;
	var xy = fromLatLngToContainerPixel(expMap, expMapObj, latlng);
	var expMapX = findPosX(expMapObj);
	var expMapY = findPosY(expMapObj);
	var x = expMapX + xy.x;
	var y = expMapY + xy.y;
	kPlaceViewerAnchor = document.createElement('div');
	kPlaceViewerAnchor.id = "kPlaceViewerAnchor";
	kPlaceViewerAnchor.style.position = "absolute";
	kPlaceViewerAnchor.style.left = x +"px";
	kPlaceViewerAnchor.style.top = y +"px";
	kPlaceViewerAnchor.style.width = "1px";
	kPlaceViewerAnchor.style.height = "1px";
	//kPlaceViewerAnchor.style.background = "#00FF00";
	document.body.appendChild(kPlaceViewerAnchor);
	kPlaceViewerLatitude = latlng.lat();
	kPlaceViewerLongitude = latlng.lng();
	window.setTimeout(function () { doBoatViewer("kPlaceViewerAnchor", data); }, 300);
}

function makeIcon(type) {
	//log("type = "+ type);
	var icon = new GIcon();
	icon.image = webPagesRoot +"img/markers/marker-"+ type +".png";
	icon.shadow = webPagesRoot +"img/markers/marker-shadow.png";
	icon.iconSize = new GSize(23, 36);
	icon.shadowSize = new GSize(39, 36);
	icon.iconAnchor = new GPoint(11, 36);
	icon.infoWindowAnchor = new GPoint(12, 2);
	icon.infoShadowAnchor = new GPoint(24, 25);
	//icon.transparent = \"". $GLOBALS["webPagesRoot"] ."img/markers/marker-transparent.png\";
	//icon.printImage = \"fingerie.gif\";
	//icon.mozPrintImage = \"fingerff.gif\";
	return icon;
}

function addConnection() {
	openConnections++;
	//document.getElementById("open-connections-display").style.display = "block"; // disabling this because it's interfering visually with other buttons and this will be deprecated after we get rid of all the Spreads functionality anyway
	updateConnectionDisplay();
}

function removeConnection() {
	openConnections--;
	document.getElementById("open-connections-display").style.display = "none";
	updateConnectionDisplay();
}

function updateConnectionDisplay() {
	//document.getElementById("open-connections-display").innerHTML = openConnections;
}

var slider;

function hideZoomControl() {
	document.getElementById("slider-bg").style.display = "none";
	document.getElementById("slider-in").style.display = "none";
	document.getElementById("slider-out").style.display = "none";
}

function showZoomControl() {
	document.getElementById("slider-bg").style.display = "block";
	document.getElementById("slider-in").style.display = "block";
	document.getElementById("slider-out").style.display = "block";
}

function initZoomControl(useCurrentMapZoom) {
	var Event = YAHOO.util.Event,
		Dom	  = YAHOO.util.Dom,
		bg="slider-bg"
	var thumb = "slider-thumb";
	var topConstraint = -3;
	var bottomConstraint = 170;
	var scaleFactor = 1;
	var keyIncrement = 11;
	var defaultValue = 154;
	var defaultZoom = readCookie("expZoom");
	if (getQueryVariable("zoom") != undefined) {
		defaultZoom = getQueryVariable("zoom");
	}
	if (useCurrentMapZoom == true) {
		defaultZoom = expMap.getZoom();
	}
	if (defaultZoom != undefined) {
		defaultValue = 165 - ((defaultZoom - 2) * 11);
	}
	slider = YAHOO.widget.Slider.getVertSlider(bg, thumb, topConstraint, bottomConstraint, keyIncrement);
	slider.setValue(defaultValue, true);
	slider.updateToZoom = function () {
		slider.setValue(165 - ((expMap.getZoom() - 2) * 11), true);
	};
	slider.subscribe("slideEnd", function(offsetFromStart) {
		if (expMap.getZoom() != 17 - (this.getValue() / 11)) {
			expMap.setZoom(17 - (this.getValue() / 11));
		}
	});
	YAHOO.util.Event.addListener("slider-in", "mouseup", function () {
		slider.setValue(slider.getValue() - 11, true);
	});
	YAHOO.util.Event.addListener("slider-out", "mouseup", function () {
		slider.setValue(slider.getValue() + 11, true);
	});
	GEvent.addListener(expMap, "zoomend", slider.updateToZoom);
}

function parseTypeIdFromCheckboxId(checkboxId) {
	var pieces = checkboxId.split("-");
	if (pieces[2] != undefined) {
		return parseInt(pieces[2]);
	}
	return false;
}

function isCheckBoxCheckedWithTypeId(typeId) {
	for (var box in checkBoxes) {
		var boxType = parseTypeIdFromCheckboxId(box);
		if (boxType == typeId) {
			if (checkBoxes[box].checked == true) {
				return true;
			}
		}
	}
	return false;
}

function markerAdded(marker) {
}

function resetCache() {
	sectionsLibrary = undefined;
	sectionsLibrary = new Object;
	mgr.clearMarkers();
	alert("Map points cache has been reset.");
}




function toggleMoreMenu(menuId, buttonId) {
	if (menuId == undefined) {
		menuId = "more-menu";
	}
	if (buttonId == undefined) {
		buttonId = "more-menu-button";
	}
	var menu = document.getElementById(menuId);
	if (menu.style.display == "block") {
		closeMoreMenu();
	} else {
		var button = document.getElementById(buttonId);
		var xPos = findPosX(button);
		var yPos = findPosY(button);
		menu.style.top = (yPos + 27) +"px";
		menu.style.left = (xPos - 8) +"px";
		menu.style.display = "block";
		window.setTimeout(function () { YAHOO.util.Event.addListener(window, "mouseup", closeMoreMenu); }, 500);
	}
	return false;
}

function closeMoreMenu() {
	window.setTimeout(function () {
		var menu = document.getElementById("more-menu");
		if (menu) {
			menu.style.display = "none";
		}
		var menu2 = document.getElementById("more-menu2");
		if (menu2) {
			menu2.style.display = "none";
		}
		YAHOO.util.Event.removeListener(window, "mouseup", closeMoreMenu);
	}, 50);
	return false;
}


function rand(low, high) {
	return low + Math.floor(Math.random() * ((high + 1) - low));
}


function radiansToDegrees(radians) {
	return radians * 180.0 / Math.PI;
}

// ruler code

//	Written by Jonathan Snook, http://www.snook.ca/jonathan
//	Add-ons by Robert Nyman, http://www.robertnyman.com
function getElementsByClassName(className, tag, elm) {
	var testClass = new RegExp("(^|\\\\s)" + className + "(\\\\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}
	}
	return returnElements;
}

function ruler() {
	function measure(){
		if(marker1&&marker2)
			line = [marker1.getPoint(),marker2.getPoint()];
		dist=marker1.getPoint().distanceFrom(marker2.getPoint());
		dist = (dist.toFixed(0) / 1852).toFixed(2) +"&nbsp;nmi";
		labelPoint = new GLatLng(marker1.getPoint().lat() + ((marker2.getPoint().lat() - marker1.getPoint().lat()) * .45), marker1.getPoint().lng() + ((marker2.getPoint().lng() - marker1.getPoint().lng()) * .45));
		label1.setContents("&nbsp;&nbsp;&nbsp;"+ dist);
		labelObjects = getElementsByClassName("labelstyle", "div", document.getElementById("expMap"));
		for (i = 0; i < labelObjects.length; i++) {
			labelObject = labelObjects[i];
			if (labelObject) {
				if (marker1.getPoint().lat() >= marker2.getPoint().lat()) {
					if (labelObject.style.marginTop != "-45px") {
						labelObject.style.marginTop = "-45px";
					}
				}
			}
		}
		label1.setPoint(labelPoint);
		//label2.setPoint(marker2.getPoint());
		if (poly) {
			expMap.removeOverlay(poly);
		}
		poly = new GPolyline(line,'#FFFF00', 3, 1)
		expMap.addOverlay(poly);
		rulerPoint1 = marker1.getPoint();
		rulerPoint2 = marker2.getPoint();
	}

	if (!rulerPoint1 && !rulerPoint2) {
		mapBounds = expMap.getBounds();
		bottomLeft = mapBounds.getSouthWest();
		topRight = mapBounds.getNorthEast();
		rulerPoint1 = new GLatLng(bottomLeft.lat() + ((topRight.lat() - bottomLeft.lat()) * .5), bottomLeft.lng() + ((topRight.lng() - bottomLeft.lng()) * .25));
		rulerPoint2 = new GLatLng(bottomLeft.lat() + ((topRight.lat() - bottomLeft.lat()) * .5), bottomLeft.lng() + ((topRight.lng() - bottomLeft.lng()) * .75));
	}
	marker1 = new GMarker(rulerPoint1, {icon: makeRulerIcon(), draggable: true});
	expMap.addOverlay(marker1);
	marker1.enableDragging();
	label1=new ELabel(rulerPoint1, dist, "labelstyle", new GSize(2,20), 100, false, "ruler-label");
	expMap.addOverlay(label1);
	marker2 = new GMarker(rulerPoint2, {icon: makeRulerIcon(), draggable: true});
	expMap.addOverlay(marker2);
	marker2.enableDragging();
	GEvent.addListener(marker1,"drag",function(){measure();});
	GEvent.addListener(marker2,"drag",function(){measure();});
	measure(); /* error message goes away when measure is not called */

	function clr(){
		//map.clearOverlays();
		expMap.removeOverlay(poly);
		expMap.removeOverlay(marker1);
		expMap.removeOverlay(marker2);
		expMap.removeOverlay(label1);
	}
}

function makeRulerIcon() {
	var icon = new GIcon();
	icon.image = webPagesRoot +"img/markers/marker-ruler.png";
	icon.shadow = webPagesRoot +"img/markers/marker-shadow.png";
	icon.iconSize = new GSize(33, 45);
	icon.shadowSize = new GSize(55, 45);
	icon.iconAnchor = new GPoint(16, 42);
	icon.infoWindowAnchor = new GPoint(12, 2);
	icon.infoShadowAnchor = new GPoint(24, 25);
	//icon.transparent = webPagesRoot +"img/markers/marker-transparent.png";
	//icon.printImage = "fingerie.gif";
	//icon.mozPrintImage = "fingerff.gif";
	return icon;
}

function RulerControl() { };

function initRuler() {
	RulerControl.prototype = new GControl();
	RulerControl.prototype.initialize = function(map) {
		//var container = document.createElement("div");
		var rulerDiv = document.createElement("div");
		//container.appendChild(rulerDiv);
		rulerDiv.id = "map-ruler";
		GEvent.addDomListener(rulerDiv, "click", function() {
			if (rulerDiv.className == "on") {
				expMap.removeOverlay(poly);
				expMap.removeOverlay(marker1);
				expMap.removeOverlay(marker2);
				expMap.removeOverlay(label1);
				rulerDiv.className = "";
			} else {
				ruler();
				rulerDiv.className = "on";
			}
		});
		//expMap.getContainer().appendChild(container);
		var expMapToolbar = document.getElementById("exp-map-toolbar");
		expMapToolbar.appendChild(rulerDiv);
		return rulerDiv;
	}
	RulerControl.prototype.getDefaultPosition = function() {
		return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(143, 8));
	}
}



function KPlaceCreatorControl() { };
var kPlaceCreatorMarker;
var kPlaceAnchor;
var kPlaceCreatorLatitude;
var kPlaceCreatorLongitude;
var kPlaceCreatorControlDiv;

function initKPlaceCreator() {
	KPlaceCreatorControl.prototype = new GControl();
	KPlaceCreatorControl.prototype.initialize = function(map) {
		kPlaceCreatorControlDiv = document.createElement("div");
		kPlaceCreatorControlDiv.id = "kPlaceCreator-controller";
		GEvent.addDomListener(kPlaceCreatorControlDiv, "click", clickKPlaceCreatorControlDiv);
		var expMapToolbar = document.getElementById("exp-map-toolbar");
		if (expMapToolbar) {
			expMapToolbar.appendChild(kPlaceCreatorControlDiv);
			KPlaceCreatorControl.prototype.getDefaultPosition = function() {
				return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(186, 8));
			}
		} else {
			var mapUserPlaces = document.getElementById("map-user-places");
			if (mapUserPlaces) {
				mapUserPlaces.appendChild(kPlaceCreatorControlDiv);
				KPlaceCreatorControl.prototype.getDefaultPosition = function() {
					return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(325, 7));
				}
			}
		}
		return kPlaceCreatorControlDiv;
	}
}

var kPlaceCreatorListenerMovestart;
var kPlaceCreatorListenerMoveend;
var kPlaceCreatorListenerZoomend;

function clickKPlaceCreatorControlDiv() {
	if (kPlaceCreatorControlDiv.className == "on") {
		closeKPlaceCreatorBubble();
		expMap.removeOverlay(kPlaceCreatorMarker);
		kPlaceCreatorControlDiv.className = "";
		GEvent.removeListener(kPlaceCreatorListenerMovestart);
		GEvent.removeListener(kPlaceCreatorListenerMoveend);
		GEvent.removeListener(kPlaceCreatorListenerZoomend);
	} else {
		kPlaceCreatorControlDiv.className = "on";
		addKPlaceCreatorMarker();
		kPlaceCreatorListenerMovestart = GEvent.addListener(expMap, "movestart", function() {
			saveKPlaceCreatorInnerHtml();
			closeKPlaceCreatorBubble();
	    });
		kPlaceCreatorListenerMoveend = GEvent.addListener(expMap, "moveend", function() {
			openKPlaceCreatorBubble(kPlaceCreatorMarker);
			loadKPlaceCreatorInnerHtmlAfterDrag = true;
	    });
		kPlaceCreatorListenerZoomend = GEvent.addListener(expMap, "zoomend", function() {
			saveKPlaceCreatorInnerHtml();
			closeKPlaceCreatorBubble();
	    });
	}
}

function addKPlaceCreatorMarker() {
	var icon = makeIcon(35);
	kPlaceCreatorMarker = new GMarker(expMap.getCenter(), {draggable: true, icon: icon});
    GEvent.addListener(kPlaceCreatorMarker, "dragstart", function() {
		saveKPlaceCreatorInnerHtml();
		closeKPlaceCreatorBubble();
    });
    GEvent.addListener(kPlaceCreatorMarker, "dragend", function() {
		openKPlaceCreatorBubble(kPlaceCreatorMarker);
		loadKPlaceCreatorInnerHtmlAfterDrag = true;
    });
	GEvent.addDomListener(kPlaceCreatorMarker, "click", function() {
		if (isActive == true) {
			closeKPlaceCreatorBubble();
		} else {
			openKPlaceCreatorBubble(kPlaceCreatorMarker);
		}
	});
    expMap.addOverlay(kPlaceCreatorMarker);
	openKPlaceCreatorBubble(kPlaceCreatorMarker);
}

var kPlaceCreatorInnerHtml = null;
var loadKPlaceCreatorInnerHtmlAfterDrag = false;
var allowSaveKPlaceCreatorInnerHtml = true;
function saveKPlaceCreatorInnerHtml() {
	if (allowSaveKPlaceCreatorInnerHtml == true) {
		var o = document.getElementById("bubble-tab-bucket");
		if (o) {
			kPlaceCreatorInnerHtml = o; // use the dom object, so it saves the values of the fields
		}
	}
}
function restoreKPlaceCreatorInnerHtml() {
	if (kPlaceCreatorInnerHtml != null) {
		var o = document.getElementById("bubble-tab-bucket");
		if (o) {
			o.appendChild(kPlaceCreatorInnerHtml);
			kPlaceCreatorInnerHtml.id = kPlaceCreatorInnerHtml.id +"_"+ Math.floor(Math.random() * 10000); // so we don't get duplicate ids
		}
	}
}

function openKPlaceCreatorBubble(marker) {
	if (marker) {
		var oldAnchor = document.getElementById("kPlaceAnchor");
		if (oldAnchor) {
			oldAnchor.parentNode.removeChild(oldAnchor);
		}
		var latlng = marker.getLatLng();
		var xy = fromLatLngToContainerPixel(expMap, expMapObj, latlng);
		var expMapX = findPosX(expMapObj);
		var expMapY = findPosY(expMapObj);
		var x = expMapX + xy.x;
		var y = expMapY + xy.y - 18;
		kPlaceAnchor = document.createElement('div');
		kPlaceAnchor.id = "kPlaceAnchor";
		kPlaceAnchor.style.position = "absolute";
		kPlaceAnchor.style.left = x +"px";
		kPlaceAnchor.style.top = y +"px";
		kPlaceAnchor.style.width = "1px";
		kPlaceAnchor.style.height = "1px";
		//kPlaceAnchor.style.background = "#00FF00";
		document.body.appendChild(kPlaceAnchor);
		kPlaceCreatorLatitude = latlng.lat();
		kPlaceCreatorLongitude = latlng.lng();
		window.setTimeout(function () { doKPlaceCreator("kPlaceAnchor", 0); }, 300);
	}
}

function closeKPlaceCreatorBubble() {
	destroyKPlaceCreatorBubble();
}

function fromLatLngToContainerPixel(gMap, gMapDiv, gLatLng) { 
    // first we translate into "DivPixel" 
    var gPoint = gMap.fromLatLngToDivPixel(gLatLng); 
    // locate the sliding "Div" div 
    var div = gMapDiv.firstChild.firstChild; 
    // adjust by the offset of "Div" and voila! 
    gPoint.x += div.offsetLeft; 
    gPoint.y += div.offsetTop; 
    return gPoint;
}

function log(s) {
	/*
	if (console) {
		console.log(s);
	} else if (window.console) {
		window.console.log(s);
	}
	*/
}

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

function insertNavAidsVideoTo(id) {
	var bucket = document.getElementById(id);
	if (bucket) {
		if (bucket.innerHTML == "") {
			bucket.style.display = "block";
			bucket.innerHTML = "<object width=\"211\" height=\"176\" style=\"margin: 1px;\"><param name=\"movie\" value=\"http://www.youtube.com/v/G1m09KD3GFw&rel=0&color1=0x3a3a3a&color2=0x999999&hl=en&autoplay=1\"></param><param name=\"wmode\" value=\"transparent\"></param><embed src=\"http://www.youtube.com/v/G1m09KD3GFw&rel=0&color1=0x3a3a3a&color2=0x999999&hl=en&autoplay=1\" type=\"application/x-shockwave-flash\" wmode=\"transparent\" width=\"211\" height=\"176\" style=\"margin: 1px;\"></embed></object>";
		} else {
			bucket.style.display = "block";
			bucket.innerHTML = "";
		}
	}
}

function addToAllLinks(str) {
	var elements = document.getElementsByTagName("a");
	for (var i = 0; i < elements.length; i++){
		var u = elements[i].href;
		if (u.indexOf('?') < 0) {
			u += "?";
		}
		u += str;
		elements[i].href = u;
	}
}

function iveBeenHere(kPlaceId, checkbox) {
	if (kPlaceId) {
		var isChecked = false;
		if (checkbox.checked) {
			isChecked = true;
		}
		var url = GLOBALS_webPagesRoot +"placesBubbleViewer/iveBeenHere";
		YAHOO.util.Connect.asyncRequest(
			"POST"
			, url
			, {
				success: function(o) {
					if(o.responseText != undefined) {
					}
				}
				, failure: function(o) {
				}
			}
			, "kPlaceId="+ kPlaceId +"&check="+ isChecked + GLOBALS_containerGetParams
		);
	}
	return true;
}

function homepagePosterSetPhoto(id) {
	var img = document.getElementById("homepagePoster-img");
	var h2 = document.getElementById("homepagePoster-h2");
	var p = document.getElementById("homepagePoster-p");
	var a = document.getElementById("homepagePoster-a");
	img.src = homepagePosters[id][0];
	h2.innerHTML = homepagePosters[id][1];
	p.innerHTML = homepagePosters[id][2];
	a.href = homepagePosters[id][3];
}

function homepagePosterThumbsChangePage(offset) {
	homepagePosterCurrentPage += offset;
	if (homepagePosterCurrentPage < 0) {
		homepagePosterCurrentPage = homepagePosterTotalPages - 1;
	}
	if (homepagePosterCurrentPage > homepagePosterTotalPages - 1) {
		homepagePosterCurrentPage = 0;
	}
	homepagePosterThumbsSetPage(homepagePosterCurrentPage);
}

function homepagePosterThumbsSetPage(page) {
	var thumbs = document.getElementById("homepagePoster-thumbs");
	thumbs.style.left = Math.floor(page * homepagePosterPageWidth * -1) +"px";
	for (var i = 0; i < pageDots.length; i++) {
		var pageDot = document.getElementById(pageDots[i]);
		if (page == i) {
			pageDot.className = "page-dot on";
			homepagePosterCurrentPage = i;
		} else {
			pageDot.className = "page-dot";
		}
	}
}

function respondToPoll(form, containerParams) {
	var pollOptionId = getRadioValue(form.elements["pollOptionId"]);
	var other = "";
	if (form.elements["other"]) {
		other = encodeURIComponent(form.elements["other"].value);
	}
	var request = YAHOO.util.Connect.asyncRequest("POST", webPagesRoot +"poll/poll?return=results", {
		success: 
			function (o) {
				var bucket = document.getElementById("poll-bucket");
				bucket.innerHTML = o.responseText;
			}
		, failure: 
			function (o) {
				log("Error retrieving poll.");
			}
		}, "pollOptionId="+ pollOptionId +"&other="+ other + containerParams);
	form.elements["submit"].value = "Loading...";
	form.elements["submit"].disabled = true;
}

function getRadioValue(radiosElement) {
	var val = "";
	for (i = 0; i < radiosElement.length; i++ ) {
		if (radiosElement[i].checked == true) {
			val = radiosElement[i].value;
		}
	}
	return val;
}

function swapPoll(returnKey, containerParams) {
	var request = YAHOO.util.Connect.asyncRequest("GET", GLOBALS_webPagesRoot +"poll/poll?return="+ returnKey + containerParams, {
		success: 
			function (o) {
				var bucket = document.getElementById("poll-bucket");
				bucket.innerHTML = o.responseText;
			}
		, failure: 
			function (o) {
				alert("Error retrieving poll.");
			}
		});
}

function addPollOption() {
	var bucket = document.getElementById("poll-option-editor");
	var html = "<li><input type=\"text\" class=\"text medium\" name=\"options[]\" value=\"\" /><a href=\"javascript:void(0);\" class=\"x\" onClick=\"deletePollOption(this);\"></a></li>";
	var div = document.createElement("div");
	div.innerHTML = html;
	bucket.appendChild(div);
}

function deletePollOption(o) {
	if (confirm("Are you sure you want to delete?")) {
		var li = o.parentNode;
		li.parentNode.removeChild(li);
	}
	return false;
}

function confirmDelete(form) {
	if (confirm("Are you sure you want to delete?")) {
		form.submit();
		return false;
	}
	return false;
}

function deleteKPlaceOnPhoto(id, seoKey) {
	if (confirm("Are you sure you want to remove this photo from this place?")) {
		var url = GLOBALS_webPagesRoot +"places/"+ seoKey +"/photos-grid?deleteKPlaceOnPhotoId="+ id + GLOBALS_containerGetParams;
		var request = YAHOO.util.Connect.asyncRequest("GET", url, {
			success: 
				function (o) {
					var bucket = document.getElementById("photo-grid");
					bucket.innerHTML = o.responseText;
				}
			, failure: 
				function (o) {
					log("Error retrieving photos.");
				}
			});
	}
}

function deleteEventOnPhoto(id, seoKey) {
	if (confirm("Are you sure you want to remove this photo from this event?")) {
		var url = GLOBALS_webPagesRoot +"events/"+ seoKey +"/photos-grid?deleteEventPhotoId="+ id + GLOBALS_containerGetParams;
		var request = YAHOO.util.Connect.asyncRequest("GET", url, {
			success: 
				function (o) {
					var bucket = document.getElementById("photo-grid");
					bucket.innerHTML = o.responseText;
				}
			, failure: 
				function (o) {
					log("Error retrieving photos.");
				}
			});
	}
}

function setDefaultEventOnPhoto(id, seoKey) {
	if (confirm("Are you sure you want to set this as the primary photo of the event?")) {
		var url = GLOBALS_webPagesRoot +"events/"+ seoKey +"/photos-grid?setPrimaryEventPhotoId="+ id + GLOBALS_containerGetParams;
		var request = YAHOO.util.Connect.asyncRequest("GET", url, {
			success: 
				function (o) {
					var bucket = document.getElementById("photo-grid");
					bucket.innerHTML = o.responseText;
					window.location = GLOBALS_webPagesRoot +"events/"+ seoKey;
				}
			, failure: 
				function (o) {
					log("Error setting primary photo.");
				}
			});
	}
}

function deletePostPhoto(id, username) {
        if (confirm("Are you sure you want to remove this photo from this post?")) {
                var url = GLOBALS_webPagesRoot +"users/"+ username +"/blog?deletePostPhotoId="+ id + GLOBALS_containerGetParams;
                var request = YAHOO.util.Connect.asyncRequest("GET", url, {
                        success:
                                function (o) {
                                        var bucket = document.getElementById("postPhoto-"+id);
                                        bucket.style.display = 'none';
                                }
                        , failure:
                                function (o) {
                                        log("Error retrieving photos.");
                                }
                        });
        }
}


var restrictResultsToHasPhoto = false;
function setWithPhoto(trueFalse, listModeRedirectURL) {
	if (trueFalse == true) {
		restrictResultsToHasPhoto = true;
		//createCookie("withPhoto", "1", 365);
	} else {
		restrictResultsToHasPhoto = false;
		eraseCookie("withPhoto");
	}
	if (expViewMode == "list") {
		window.location = listModeRedirectURL;
	} else {
		dimList();
		refreshListResults();
	}
	return true;
}

function setSortBy(value) {
	var sort = getQueryStringVariable("sort", value);
	createCookie("sort", sort, 365);
	if (expViewMode == "list") {
		//window.location = listModeRedirectURL;
	} else {
		dimList();
		refreshListResults();
	}
	return true;
}

function mapViewWillChange() {
	dimList();
}

function mapViewDidChange() {
	var d = new Date();
	if (d.getTime() - pageLoadDate.getTime() > 2500) {
		setLocationTextToCurrentMapView();
	}
	if (jumpToLocation) {
		dimList();
		listRestrictCurrentPage = 1;
		refreshListResults();
		if (expMap) {
			var mapBounds = expMap.getBounds();
			bottomLeft = mapBounds.getSouthWest();
			topRight = mapBounds.getNorthEast();
			createCookie("restrictLngLeft", bottomLeft.lng());
			createCookie("restrictLngRight", topRight.lng());
			createCookie("restrictLatBottom", bottomLeft.lat());
			createCookie("restrictLatTop", topRight.lat());
		}
	}
}

function dimList() {
	if (jumpToLocation) {
		var bucket = document.getElementById("exp-list-bucket");
		bucket.className = "half-opacity";
	}
}

function refreshListResults() {
	if (expViewMode == "map" || expViewMode == "list") {
		var bucket = document.getElementById("exp-list-bucket");
		bucket.className = "";
		return false;
	}
	var url = getCurrentListURLRoot();
	if (jumpToLocation && expMap) {
		var mapBounds = expMap.getBounds();
		bottomLeft = mapBounds.getSouthWest();
		topRight = mapBounds.getNorthEast();
		url += "&restrictLngLeft="+ bottomLeft.lng();
		url += "&restrictLngRight="+ topRight.lng();
		url += "&restrictLatBottom="+ bottomLeft.lat();
		url += "&restrictLatTop="+ topRight.lat();
	}
	var form = document.getElementById("advanced-search-form");
	if (form) {
		for (var i = 0; i < form.elements.length; i++) {
			if (form.elements[i].type == "checkbox") {
				if (form.elements[i].checked == true) {
					url += "&"+ form.elements[i].name +"="+ form.elements[i].value;
				}
			} else {
				url += "&"+ form.elements[i].name +"="+ form.elements[i].value;
			}
		}
	}

	url += "&page="+ listRestrictCurrentPage;
	url += GLOBALS_containerGetParams;

	var request = YAHOO.util.Connect.asyncRequest("GET", url, {
		success: 
			function (o) {
				var bucket = document.getElementById("exp-list");
				bucket.innerHTML = o.responseText;
				refreshRestrictMapMarkers();
				var expList = document.getElementById("exp-list");
				expList.scrollTop = 0;

				// process the new oneByOne variables
				var js = expList.getElementsByTagName("script");
				for (var i = 0; i < js.length; i++) {
					eval(js[i].innerHTML);
				}

				// set the vars to be root level, since they were just set with "var ..." in the eval above
				oneByOneClass = oneByOneClass;
				oneByOneResultsPerPage = oneByOneResultsPerPage;
				oneByOneConditions = oneByOneConditions;
				oneByOneQueryString = oneByOneQueryString;
				oneByOneSortBy = oneByOneSortBy;
				oneByOneSortOrder = oneByOneSortOrder;
				page = page;

				updateViewModeButton();
				processOneByOneTransporter();
			}
		, failure: 
			function (o) {
				log("Error retrieving list.");
			}
		});
}

function toggleHideAllMapLayers() {
	var o = document.getElementById("hideAllMapLayers");
	if (o) {
		if (o.value == "0") {
			o.value = "1";
		} else {
			o.value = "0";
		}
	}
}

function listRestrictLoadPage(page) {
	if (expViewMode == "map" || expViewMode == "list") {
		return true;
	}
	dimList();
	listRestrictCurrentPage = page;
	refreshListResults();
	return false;
}

var listRestrictMarkers = new Array();
function refreshRestrictMapMarkers() {
	if (expMap) {
		removeRestrictMapMarkers();
		listRestrictMarkers = new Array();
		var expList = document.getElementById("exp-list");
		var markers = getElementsByClassName("marker", "div", expList);
		var letters = getElementsByClassName("letter", "div", expList);
		var lats = getElementsByClassName("lat", "div", expList);
		var lngs = getElementsByClassName("lng", "div", expList);
		var kPlaceIds = getElementsByClassName("kPlaceId", "div", expList);
		var boatIds = getElementsByClassName("boatId", "div", expList);
		if (markers) {
			for (var i = 0; i < markers.length; i++) {
				if (kPlaceIds[i]) {
					var point = new GLatLng(lats[i].innerHTML, lngs[i].innerHTML);
					var m = createMarkerWithBubble(point, makeIcon(letters[i].innerHTML), "kPlace", kPlaceIds[i].innerHTML);
				} else if (boatIds[i]) {
					var point = new GLatLng(lats[i].innerHTML, lngs[i].innerHTML);
					var m = createMarkerWithBubble(point, makeIcon(letters[i].innerHTML), "boat", boatIds[i].innerHTML);
				} else {
					var m = createMarker(new GLatLng(lats[i].innerHTML, lngs[i].innerHTML), makeIcon(letters[i].innerHTML), "", "");
				}
				listRestrictMarkers.push(m);
				expMap.addOverlay(m);
			}
		}
	}
}

function removeRestrictMapMarkers() {
	if (expMap && listRestrictMarkers) {
		for (var i = 0; i < listRestrictMarkers.length; i++) {
			expMap.removeOverlay(listRestrictMarkers[i]);
		}
	}
}

function getCurrentListURLRoot() {
	var selectedNavItemId = getSelectedNavItemId();
	var listURLRoots = new Object();
	listURLRoots["nav-boats"] 			= GLOBALS_webPagesRoot +"maps/exploreContentBoat.php?t=boats";
	listURLRoots["nav-powerboats"] 		= GLOBALS_webPagesRoot +"maps/exploreContentBoat.php?t=powerboats";
	listURLRoots["nav-sailboats"] 		= GLOBALS_webPagesRoot +"maps/exploreContentBoat.php?t=sailboats";
	listURLRoots["nav-pwcs"] 			= GLOBALS_webPagesRoot +"maps/exploreContentBoat.php?t=pwcs";
	listURLRoots["nav-canoesKayaks"] 	= GLOBALS_webPagesRoot +"maps/exploreContentBoat.php?t=canoesKayaks";
	listURLRoots["nav-boatSearch"] 		= GLOBALS_webPagesRoot +"maps/exploreContentBoat.php?t=boatSearch";
	listURLRoots["nav-markers"] 		= GLOBALS_webPagesRoot +"maps/exploreContentKPlaces.php?t=markers";
	listURLRoots["nav-markersBuoys"] 	= GLOBALS_webPagesRoot +"maps/exploreContentKPlaces.php?t=markersBuoys";
	listURLRoots["nav-places"] 			= GLOBALS_webPagesRoot +"maps/exploreContentKPlaces.php?t=places";
	listURLRoots["nav-marinas"] 		= GLOBALS_webPagesRoot +"maps/exploreContentKPlaces.php?t=marinas";
	listURLRoots["nav-diveSites"] 		= GLOBALS_webPagesRoot +"maps/exploreContentKPlaces.php?t=diveSites";
	listURLRoots["nav-fishingSpots"] 	= GLOBALS_webPagesRoot +"maps/exploreContentKPlaces.php?t=fishingSpots";
	listURLRoots["nav-raftUps"] 		= GLOBALS_webPagesRoot +"maps/exploreContentKPlaces.php?t=raftUps";
	listURLRoots["nav-anchorages"] 		= GLOBALS_webPagesRoot +"maps/exploreContentKPlaces.php?t=anchorages";
	listURLRoots["nav-other"] 			= GLOBALS_webPagesRoot +"maps/exploreContentKPlaces.php?t=other";
	listURLRoots["nav-shipWrecks"] 		= GLOBALS_webPagesRoot +"maps/exploreContentKPlaces.php?t=shipWrecks";
	listURLRoots["nav-obstructions"] 	= GLOBALS_webPagesRoot +"maps/exploreContentKPlaces.php?t=obstructions";
	listURLRoots["nav-shipWrecks"] 		= GLOBALS_webPagesRoot +"maps/exploreContentKPlaces.php?t=shipWrecks";
	listURLRoots["nav-offshorePlatforms"] = GLOBALS_webPagesRoot +"maps/exploreContentKPlaces.php?t=offshorePlatforms";
	listURLRoots["nav-people"] 			= GLOBALS_webPagesRoot +"maps/exploreContentUser.php?t=people";
	listURLRoots["nav-photos"] 			= GLOBALS_webPagesRoot +"maps/exploreContentPhoto.php?t=photos";
	listURLRoots["nav-groups"] 			= GLOBALS_webPagesRoot +"maps/exploreContentGroup.php?t=groups";
	listURLRoots["nav-manufacturers"] 	= GLOBALS_webPagesRoot +"maps/exploreContentManufacturers.php?t=manufacturers";
	listURLRoots["nav-activity"] 		= GLOBALS_webPagesRoot +"maps/exploreContentActivity.php?t=activity";
	if (listURLRoots[selectedNavItemId]) {
		return listURLRoots[selectedNavItemId];
	}
	return GLOBALS_webPagesRoot +"maps/exploreContent.php?t="+ getQueryStringVariable("t") +"&q="+ getQueryStringVariable("q");
}

function getQueryStringVariable(v, qs) {
	var str;
	if (qs == undefined) {
		str = window.location.search.substring(1);
	} else {
		str = qs;
	}
	var vars = str.split("&"); 
	for (var i = 0; i < vars.length; i++) { 
		var pair = vars[i].split("="); 
		if (pair[0] == v) { 
			return pair[1]; 
		}
	}
	return "";
}

function getSelectedNavItemId() {
	return null;
}

function hasClassNameInString(needle, haystack) {
	var parts = haystack.split(" ");
	for (var i = 0; i < parts.length; i++) {
		if (parts[i] == needle) {
			return true;
		}
	}
	return false;
}

function limitCharacters(limit, str) {
	if (str.length > limit) {
		str = str.substr(0, limit);
	}
	return str;
}

function limitStatusTextarea(o, e, remaining) {
	if (remaining != undefined) {
		remaining = document.getElementById(remaining);
	} else {
		remaining = document.getElementById("status-remaining");
	}
	if (o.value.length > 140) {
		o.value = limitCharacters(140, o.value);
	}
	remaining.innerHTML = 140 - o.value.length;
}

function toggleMapTypeButton(force) {
	var obj = document.getElementById("exp-mapToolbar-mapType");
	if (obj) {
		if (obj.style.display == "block" || force == "off") {
			obj.style.display = "none";
		} else {
			obj.style.display = "block";
		}
	}
	var button = document.getElementById("exp-mapToolbar-mapType-button");
	if (button) {
		if (button.className == "on" || force == "off") {
			button.className = "";
		} else {
			button.className = "on";
		}
	}
}

function toggleCheckBoxesControlButton(force) {
	var obj = document.getElementById("checkBoxesControl-list");
	if (obj) {
		if (obj.style.display == "block" || force == "off") {
			obj.style.display = "none";
		} else {
			obj.style.display = "block";
		}
	}
	var button = document.getElementById("checkBoxesControl-button");
	if (button) {
		if (button.className == "on" || force == "off") {
			button.className = "";
		} else {
			button.className = "on";
		}
	}
}

function isDefined(variable) {
	return eval("(typeof("+ variable +") != 'undefined');");
}

function eventStep2SetPlace(primaryOrPre, kPlaceId, seoKey, name) {
	var target;
	var targetField;
	if (primaryOrPre == "pre") {
		target = document.getElementById("eventLocationLinkPre");
		targetField = document.getElementById("edit-form-0_2_fields").firstChild;
	} else {
		target = document.getElementById("eventLocationLinkPrimary");
		targetField = document.getElementById("edit-form-0_1_fields").firstChild;
	}
	if (target && targetField) {
		targetField.value = name;
		target.innerHTML = "<a href=\""+ GLOBALS_webPagesRoot +"places/"+ seoKey +"\" target=\"_blank\" class=\"arrow-button\" style=\"width: 40px; float: left;\">Link<div class=\"right-arrow\"></div></a> &nbsp;(<a href=\"javascript:void(0);\" onClick=\"eventStep2ClearPlace('"+ primaryOrPre +"');\">remove link</a>)<input type=\"hidden\" name=\""+ primaryOrPre +"KPlaceId\" value=\""+ kPlaceId +"\" />";
		destroyKPlaceViewerBubble();
	}
}

function eventStep2ClearPlace(primaryOrPre) {
	var target;
	var html;
	if (primaryOrPre == "pre") {
		target = document.getElementById("eventLocationLinkPre");
	} else {
		target = document.getElementById("eventLocationLinkPrimary");
	}
	if (target) {
		target.innerHTML = "(or choose on map below)";
	}
}

function processOneByOneTransporter() {
	var i = 1;
	if (readCookie("oneByOneResultsPerPage") > 0 && readCookie("page") > 0) {
		var z = ((readCookie("oneByOneResultsPerPage") - 1) * readCookie("page")) + 1;
		if (z > 0) {
			i = z;
		}
	}
	setOneByOneSearch(0);
	var oneByOne = document.getElementById("oneByOneInner");
	var transporter = document.getElementById("oneByOne-transporter");
	if (oneByOne && transporter) {
		oneByOne.innerHTML = transporter.innerHTML;
	}
}

