var objMap;
var g_strXML;
var browserName = navigator.appName;
var blnAggregateMode = false;
var strXSL;
var intAggregationMode = 0;
var g_strURL;
var g_strQS;
var g_CenterX;
var g_CenterY;
var g_InitialZoom;
var g_strListingCountHolder;
var strLastSearch;
var g_strAction = '';
var elImage;
var elImageHolder;
var elInfoWindowHolder;
var g_blnPreload;
var g_blnZoomingOut = false;
var g_LoadingImageID;
var g_LoadingImageHolderID;
var g_MapHolderID;
var g_blnEnableAJAX;
var g_InfoWindowHolderID;
var g_blnDisableInfoDetail;
var g_intNewAggregationMode;
var g_TipHolderID;
var g_MoveEndListener, g_MoveStartListener, g_ZoomEndListener, g_ClickListener;
var g_MapTypeHolderID;
var g_blnTrackMapLoaded;
var g_intTempOffset;
var g_arrMarkersOn = [];
var g_arrMarkersOff = [];
var g_arrHTML = [];
var g_arrMarkersHighlighted = [];
var g_blnEnableIconSwapping;
var g_blnFitAll;
var x, y;
var g_blnInfoWindowOpen = false;
var intTopLeft;
var intTopTop;
var intBottomLeft;
var intBottomTop;
var g_InfoWindowLeftPos;
var g_InfoWindowTopPos;
var g_intAggInfoWindowHeight = 130;
var g_intAggInfoWindowWidth = 200;
var g_intListingInfoWindowHeight = 175;
var g_intListingWindowWidth = 350;
var g_blnKeepInfoWindowOpen;
var g_blnEnableIconHighlighting;
var objStreetView;
var g_intMapMode = 1;

window.onunload = function() {DisposeMap();}

function DisposeMap() {
	GUnload();
	CloseStreetView();
}

if (typeof window.AppendToWindowOnloadEvent != "undefined") {
	AppendToWindowOnloadEvent(LoadMap);
	AppendToWindowOnloadEvent(GotoScroll);
	AppendToWindowOnloadEvent(HandleMouseMove);
} else {
	if (window.onload) {
		try {
			var strOnload = window.onload + '';
			strOnload = strOnload.substring(strOnload.indexOf("{") + 1, strOnload.lastIndexOf("}"));
			strOnload = strOnload + "LoadMap();GotoScroll();HandleMouseMove();"
			window.onload = function () {eval(strOnload);}
		}
		catch(err) {
			window.onload = function() {LoadMap();GotoScroll();HandleMouseMove();}
		} 
	} else {
		window.onload = function() {LoadMap();GotoScroll();HandleMouseMove();}
	}
}

window.onscroll = function() {GetScroll();}
window.onclick = function() {GetScroll();}
window.onkepress = function() {GetScroll();}

function LoadMap() {
	if (g_intMapMode == 3) {return false;}
	var CenterX = g_CenterX;
	var CenterY = g_CenterY;
	var InitialZoom = g_InitialZoom;
	var blnResetMap;
	if (g_blnPreload || ShouldMaintainStateOnReturn()) {
		if (g_intMapMode != 2) {
			ShowLoadingImage();
			LoadMapByPointAndZoom(CenterX, CenterY, InitialZoom);
		} else {
			LoadStreetView();
		}
	} else {
		if (g_CenterX != 0 && g_CenterY != 0) {
			blnResetMap = false;
		} else {
			blnResetMap = true;
		}
		GetData(null, null, null, blnResetMap);
	}
}

function LoadMapByPointAndZoom(CenterX, CenterY, InitialZoom){
	if (ShouldMaintainStateOnReturn()) {
		CenterX = parseFloat(document.getElementById('MapCenterLatHolder').value);
		CenterY = parseFloat(document.getElementById('MapCenterLongHolder').value);
		InitialZoom = parseInt(document.getElementById('MapZoomHolder').value);
	}

	objMap = new GMap2(document.getElementById(g_MapHolderID));
	objMap.setCenter(new GLatLng(CenterX, CenterY), parseInt(InitialZoom), GetMapType());
	objMap.enableDoubleClickZoom();
	
	var intZoomLevel = objMap.getZoom();
	document.getElementById('MapZoomHolder').value = intZoomLevel;

	var objLatLng = objMap.getCenter();
	document.getElementById('MapCenterLatHolder').value = objLatLng.lat();
	document.getElementById('MapCenterLongHolder').value = objLatLng.lng();

	var objBounds = objMap.getBounds();
	var objNELatLng = objBounds.getNorthEast();
	var objSWLatLng = objBounds.getSouthWest();
	
	document.getElementById('NWLatHolder').value = objNELatLng.lat();
	document.getElementById('NWLongHolder').value = objNELatLng.lng();
	document.getElementById('SELatHolder').value = objSWLatLng.lat();
	document.getElementById('SELongHolder').value = objSWLatLng.lng();

	var mt = objMap.getMapTypes(); 
    for (var i=0; i<mt.length; i++) { 
        mt[i].getMinimumResolution = function() {return 5;} 
        mt[i].getMaximumResolution = function() {return 18;} 
    } 

	AddMapControls();

	var strURL = document.getElementById('URLHolder').value;
	
	if (ShouldMaintainStateOnReturn() && strURL != '') {
		CallURL(strURL, false);
	} else {
		if (g_blnPreload) {
			ProcessXMLData(GXml.parse(g_strXML));
		} 
	}

	AddMapListeners();
	MaintainStateOnReturn(false);
	
	if (g_blnTrackMapLoaded) {
		setTimeout("isComplete()", 5000); 
	}
}

function isComplete() {
	var elMapHolder = document.getElementById(g_MapHolderID); 
    var imgNodes = elMapHolder.getElementsByTagName('IMG');
    var blnComplete = false; 
    for (var i = 0; i < imgNodes.length; i++) { 
		var srcc = imgNodes[i].src; 
		if (imgNodes[i].readyState == 'complete') {
			blnComplete = true;
		} else {
			blncomplete = false;
			break;
		}
    }
	document.getElementById('MapLoadedHolder').value = blnComplete + '';   
}

function ClearMapListeners() {
	if (g_MoveEndListener) {
		GEvent.removeListener(g_MoveEndListener);
		GEvent.removeListener(g_MoveStartListener);
		GEvent.removeListener(g_ZoomEndListener);
		GEvent.removeListener(g_ClickListener);
	}
}

function AddMapListeners() {
	if (g_blnEnableAJAX) {
		g_MoveEndListener = GEvent.addListener(objMap, 'moveend', function(){HandleMoveEnd();});
		g_MoveStartListener = GEvent.addListener(objMap, 'movestart', function(){HandleMoveStart();});
		g_ZoomEndListener = GEvent.addListener(objMap, 'zoomend', function(oldLevel, newLevel){HandleZoomEnd(oldLevel, newLevel);});
		g_ClickListener = GEvent.addListener(objMap, 'click', function(overlay, point){HandleMapClick(overlay, point);});
	}
}

function HandleMapClick(overlay, point) {
	if (!overlay) {
		CloseInfoWindow();
	}
}

function HandleZoomEnd(oldLevel, newLevel) {
	if (newLevel < oldLevel) {
		g_blnZoomingOut = true;
		g_strAction = 'zoomout';
	} else {
		g_strAction = 'zoomin';
	}
	CloseInfoWindow();
	if (blnAggregateMode || g_blnZoomingOut) {
		if (!g_blnZoomingOut) {
			SetSuppressGet(false);
		}
		if (g_blnZoomingOut && g_intNewAggregationMode == 2) {
			SetSuppressGet(false);
		}
		GetData(objMap.getBounds(), objMap.getZoom());
		g_blnZoomingOut = false;
	}
	var intZoomLevel = objMap.getZoom();
	document.getElementById('MapZoomHolder').value = intZoomLevel;

	var objLatLng = objMap.getCenter();
	document.getElementById('MapCenterLatHolder').value = objLatLng.lat();
	document.getElementById('MapCenterLongHolder').value = objLatLng.lng();

	var objBounds = objMap.getBounds();
	var objNELatLng = objBounds.getNorthEast();
	var objSWLatLng = objBounds.getSouthWest();
	document.getElementById('NWLatHolder').value = objNELatLng.lat();
	document.getElementById('NWLongHolder').value = objNELatLng.lng();
	document.getElementById('SELatHolder').value = objSWLatLng.lat();
	document.getElementById('SELongHolder').value = objSWLatLng.lng();
	
	ShowTip(3);
}

function HandleMoveEnd() {
	if (g_strAction.indexOf("zoom") < 0)  {
		g_strAction = 'moveend';
		if (!blnAggregateMode) {
			GetData(objMap.getBounds(), objMap.getZoom());
		}
		var intZoomLevel = objMap.getZoom();
		document.getElementById('MapZoomHolder').value = intZoomLevel;

		var objLatLng = objMap.getCenter();
		document.getElementById('MapCenterLatHolder').value = objLatLng.lat();
		document.getElementById('MapCenterLongHolder').value = objLatLng.lng();

		var objBounds = objMap.getBounds();
		var objNELatLng = objBounds.getNorthEast();
		var objSWLatLng = objBounds.getSouthWest();
		document.getElementById('NWLatHolder').value = objNELatLng.lat();
		document.getElementById('NWLongHolder').value = objNELatLng.lng();
		document.getElementById('SELatHolder').value = objSWLatLng.lat();
		document.getElementById('SELongHolder').value = objSWLatLng.lng();
		document.getElementById('CenterModeHolder').value = '2';
	}
}

function HandleMoveStart() {
	g_strAction = 'movestart'
	CloseInfoWindow();
}

function ProcessXMLData(objXML, blnResetMap) {
   ShowLoadingImage();
   if (objXML) {
	    AddOverlaysFromXML(objXML, blnResetMap);
   }
   HideLoadingImage();
}

function FitAllMarkers(objPoint) {
	var objBounds = objMap.getBounds();
	objBounds.extend(objPoint);
	if (objMap.getZoom() > objMap.getBoundsZoomLevel(objBounds)) {
		ClearMapListeners();
		objMap.setZoom(objMap.getBoundsZoomLevel(objBounds));
		AddMapListeners()
	}
}

var elDiv = document.createElement('div');
var arrEl;
var strAction;
function createMarker(point, strHTML, objIcon) {
	var marker;
	var strAction;
	if (objIcon) {
		marker = new GMarker(point, objIcon);
	} else {
		marker = new GMarker(point);
	}

	if (!g_blnDisableInfoDetail) {
		GEvent.addListener(marker, 'mouseover', function() {
			MarkerMouseOver(strHTML, marker);
		});
		GEvent.addListener(marker, 'click', function() {
			KeepInfoWindowOpen(strHTML, marker);
		});
		
		if (strHTML.indexOf('DoubleClickAction') >= 0) {
			elDiv.innerHTML = strHTML;
			arrEl = elDiv.getElementsByTagName('a');
			for (var i = 0; i < arrEl.length; i++) {
				if (arrEl[i].id == 'DoubleClickAction') {
					strAction = arrEl[i].href;
					strAction = strAction.replace(/JavaScript:/i, '');
					strAction = unescape(strAction)
				}
			}
			GEvent.addListener(marker, 'dblclick', function() {
				eval(strAction);
			});
		}
	}

	if (g_blnFitAll) {
		FitAllMarkers(point);
	}
	
	return marker;
}

function MarkerMouseOver(strHTML, marker) {
	if (!g_blnKeepInfoWindowOpen) {
		ShowInfoWindow(strHTML, marker);
	}
}

function ToggleMarker(strTextToFind) {
	if (g_blnEnableIconSwapping) {
		for (var i = 0; i < g_arrHTML.length; i++) {
			if (g_arrHTML[i].indexOf(strTextToFind) >= 0) {
				if (g_arrMarkersOn[i][1]) {
					objMap.removeOverlay(g_arrMarkersOn[i][0]);
					objMap.addOverlay(g_arrMarkersOff[i][0]);
					g_arrMarkersOff[i][1] = true;
					g_arrMarkersOn[i][1] = false;
				} else {
					objMap.removeOverlay(g_arrMarkersOff[i][0]);
					objMap.addOverlay(g_arrMarkersOn[i][0]);
					g_arrMarkersOff[i][1] = false;
					g_arrMarkersOn[i][1] = true;			
				}
				return true;
			}
		}
	}
}

function HighlightMarker(strTextToFind, blnHighlight) {
	if (g_blnEnableIconHighlighting) {
		for (var i = 0; i < g_arrHTML.length; i++) {
			if (g_arrHTML[i].indexOf(strTextToFind) >= 0) {
				if (g_arrMarkersOn[i][1]) {
					//objMap.removeOverlay(g_arrMarkersOn[i][0]);
					//objMap.addOverlay(g_arrMarkersHighlighted[i][0]);
					//g_arrMarkersHighlighted[i][1] = true;
					//g_arrMarkersOn[i][1] = false;
					if (blnHighlight) {
						KeepInfoWindowOpen(g_arrHTML[i], g_arrMarkersOn[i][0]);
						PageToDetail(strTextToFind);
					} else {
						CloseInfoWindow();
						PageToDetail(strTextToFind);
					}
				} else if (g_arrMarkersOff[i][1]) {
					//objMap.removeOverlay(g_arrMarkersOff[i][0]);
					//objMap.addOverlay(g_arrMarkersHighlighted[i][0]);
					//g_arrMarkersHighlighted[i][1] = true;
					//g_arrMarkersOff[i][1] = false;
					if (blnHighlight) {
						KeepInfoWindowOpen(g_arrHTML[i], g_arrMarkersOn[i][0]);
					} else {
						CloseInfoWindow();
					}
				} else {
					objMap.removeOverlay(g_arrMarkersHighlighted[i][0]);
					objMap.addOverlay(g_arrMarkersOn[i][0]);
					g_arrMarkersHighlighted[i][1] = false;
					g_arrMarkersOn[i][1] = true;			
				}	
				return true;
			} 
		}
	}
}

function AddOverlaysFromXML(objXmlDoc, blnResetMap) {
   var marker;
   var Lat;
   var Long;
   var CenterLat;
   var CenterLong;
   var NewZoomLevel;
   var NELat, NELong, SWLat, SWLong;
   var intCountOutOfBounds = 0;
   var intFinalCount = 0;
   var intNewAggregationMode;
   var strResultText;
   var point;
   var elChildren;
   var strHTML;
   var objXML;
   var intCount;
   var blnZoomIn = true;
   var objXSL = GXml.parse(strXSL + '');
   var objXSLProcessor;
   var objHTMLDoc;
   var objSer, strXML;
   var strAllHTML = '';
   var ListingID, Zip, City, State;
   var objIcon, objAlternateIcon, objHighlightedIcon;
   var intArrIndex;
   var lastPoint, lastIcon, lastAltIcon, lastHighIcon;
   
   if (browserName.indexOf('Microsoft') != 0) {
	    objXSLProcessor = new XSLTProcessor();
	    objXSLProcessor.importStylesheet(objXSL);
		objSer = new XMLSerializer();
   }
   
   if (blnResetMap) {
       if (objMap) {
           objMap.clearOverlays();
       }
   }
     
   if (objXmlDoc.documentElement.childNodes.length == 0) {
		if (!objMap) {
			document.getElementById(g_MapHolderID).innerHTML = "<BR><B><Div align='center' valing='middle'>No properties matched your search</div></B><BR>";
		} else {
			UpdateResultCount("0 matches for your search");
		}
   } else {
		if (blnResetMap) {
			CenterLat = objXmlDoc.documentElement.getAttribute("CenterPointLat");
			CenterLong = objXmlDoc.documentElement.getAttribute("CenterPointLong");
			NewZoomLevel = objXmlDoc.documentElement.getAttribute("ZoomLevel");
		} else {
			CenterLat = g_CenterX;
			CenterLong = g_CenterY;
			NewZoomLevel = g_InitialZoom;
		}
	       
		if (!objMap) {
			LoadMapByPointAndZoom(CenterLat, CenterLong, NewZoomLevel);
		} 
       
		if (blnResetMap) {
			ClearMapListeners();
			intCount = NewZoomLevel - objMap.getZoom();
				if (intCount < 0) {
					intCount = intCount * -1;
					blnZoomIn = false;
				}
		       
				for (var i = 0; i < intCount; i++) {
					if (blnZoomIn) {
					objMap.zoomIn();
					} else {
					objMap.zoomOut();
					}
				}
		       
				objMap.panTo(new GLatLng(CenterLat, CenterLong));
		       
				var intZoomLevel = objMap.getZoom();
				document.getElementById('MapZoomHolder').value = intZoomLevel;

				var objLatLng = objMap.getCenter();
				document.getElementById('MapCenterLatHolder').value = objLatLng.lat();
				document.getElementById('MapCenterLongHolder').value = objLatLng.lng();

				var objBounds = objMap.getBounds();
				var objNELatLng = objBounds.getNorthEast();
				var objSWLatLng = objBounds.getSouthWest();
				document.getElementById('NWLatHolder').value = objNELatLng.lat();
				document.getElementById('NWLongHolder').value = objNELatLng.lng();
				document.getElementById('SELatHolder').value = objSWLatLng.lat();
				document.getElementById('SELongHolder').value = objSWLatLng.lng();

				AddMapListeners();
		}
   
		NELat = GetNELat();
		NELong = GetNELong();
		SWLat = GetSWLat();
		SWLong = GetSWLong();
		
		elChildren = objXmlDoc.documentElement.childNodes;
       
		if (elChildren.length > 0) {
			if (elChildren[0].getElementsByTagName("ListingID").length > 0){
				intNewAggregationMode = 1;
				blnAggregateMode = false;
			} else {
				if (elChildren[0].getElementsByTagName("Zip").length > 0) {
					intNewAggregationMode = 2;
				} else {
					intNewAggregationMode = 3;
				}
				blnAggregateMode = true;
				SetSuppressGet(true);
			}

		}
	    g_intNewAggregationMode = intNewAggregationMode;
		if (intNewAggregationMode != intAggregationMode) {
			objMap.clearOverlays();
		}
       
		intAggregationMode = intNewAggregationMode;
		for (var i = 0; i < elChildren.length; i++) {
			Lat = parseFloat(elChildren[i].getElementsByTagName("Lat")[0].firstChild.nodeValue);
			Long = parseFloat(elChildren[i].getElementsByTagName("Long")[0].firstChild.nodeValue);
			if (Lat >= NELat || Lat <= SWLat || Long >= NELong || Long <= SWLong ) {
				intCountOutOfBounds++;
			}
			point = new GLatLng(Lat, Long);
			if (elChildren[i].xml) {
				objXML = GXml.parse(elChildren[i].xml);
				strHTML = objXML.transformNode(objXSL);
			} else {
				strXML = objSer.serializeToString(elChildren[i]);
				objXML = GXml.parse(strXML);
				objHTMLDoc = objXSLProcessor.transformToDocument(objXML);
				strHTML = objSer.serializeToString(objHTMLDoc.childNodes[0]);
			}
			strHTML = strHTML.replace(/&lt;img/gi, "<img");
			strHTML = strHTML.replace(/&gt;&lt;\/img&gt;/gi, "></img>");
			
			objIcon = GetIcon(elChildren[i]);
			
			if (g_blnEnableIconSwapping) {
				objAlternateIcon = GetIcon(elChildren[i], true);
			}
			
			if (g_blnEnableIconHighlighting) {
				objHighlightedIcon = GetIcon(elChildren[i], false, true);
			}
			
			if (intNewAggregationMode == 1) {
				ListingID = elChildren[i].getElementsByTagName("ListingID")[0].firstChild.nodeValue;
			} else if (intNewAggregationMode == 2) {
				Zip = elChildren[i].getElementsByTagName("Zip")[0].firstChild.nodeValue;
			} else {
				City = elChildren[i].getElementsByTagName("City")[0].firstChild.nodeValue;
				State = elChildren[i].getElementsByTagName("State")[0].firstChild.nodeValue;
			}
			
			if (lastPoint) {
				if (lastPoint.lat() != point.lat() || lastPoint.lng() != point.lng()) {
					marker = createMarker(lastPoint, strAllHTML, lastIcon);
					objMap.addOverlay(marker);		
					CreateAltIcons(marker, lastPoint, strAllHTML, lastAltIcon, lastHighIcon);
					strAllHTML = '';
				}
			}
			
			strAllHTML = strAllHTML + strHTML;
			lastPoint = point;
			lastIcon = objIcon;
			lastAltIcon = objAlternateIcon;
			lastHighIcon = objHighlightedIcon;
			
			if (i == (elChildren.length - 1)) {
				marker = createMarker(point, strAllHTML, objIcon);
				objMap.addOverlay(marker);
				CreateAltIcons(marker, point, strAllHTML, objAlternateIcon, objHighlightedIcon);
				strAllHTML = '';
			}
       }
   if (intNewAggregationMode == 3) {
       strResultText = 'cities with properties';
       intFinalCount = elChildren.length - intCountOutOfBounds;
   } else if (intNewAggregationMode == 2) {
       strResultText = 'zip codes with properties';
       intFinalCount = elChildren.length - intCountOutOfBounds;
   } else {
       strResultText = 'properties match your search';
       intFinalCount = elChildren.length;
   }
   UpdateResultCount(elChildren.length + ' ' + strResultText);
   HideLoadingImage();
   }
}

function CreateAltIcons(marker, point, strAllHTML, objAlternateIcon, objHighlightedIcon) {
	if (g_blnEnableIconSwapping || g_blnEnableIconHighlighting) {
		intArrIndex = g_arrMarkersOn.length
		g_arrMarkersOn[intArrIndex] = new Array(2);
		g_arrMarkersOn[intArrIndex][0] = marker;
		g_arrMarkersOn[intArrIndex][1] = true;
		g_arrHTML[intArrIndex] = strAllHTML
	}
	
	if (g_blnEnableIconSwapping) {
		var markerAlt;
		markerAlt = createMarker(point, strAllHTML, objAlternateIcon);
		g_arrMarkersOff[intArrIndex] = new Array(2);
		g_arrMarkersOff[intArrIndex][0] = markerAlt;
		g_arrMarkersOff[intArrIndex][1] = false;
	}
	
	if (g_blnEnableIconHighlighting) {
		var markerHigh;
		markerHigh = createMarker(point, strAllHTML, objHighlightedIcon);
		g_arrMarkersHighlighted[intArrIndex] = new Array(2);
		g_arrMarkersHighlighted[intArrIndex][0] = markerHigh;
		g_arrMarkersHighlighted[intArrIndex][1] = false;
	}
}

function UpdateResultCount(intCount) {
   if (g_strListingCountHolder > '') {
       document.getElementById(g_strListingCountHolder).innerHTML = intCount + '';
   }
}

function GetData(objLatLngBounds, ZoomLevel, strAdditionalParams, blnResetMap) {
	var blnIsHidden = true;
	if (objMap) {
			if (!objMap.getInfoWindow().isHidden()) {
				blnIsHidden = false;
			}
	}
	if (!objMap || (!ShouldSuppress() && blnIsHidden)) {
		ShowLoadingImage();
		var strQS = g_strQS;
		var strCoords;
		var strZoomLevel;
		var strURL;
		if (strAdditionalParams) {
			strQS = strQS + '&' + strAdditionalParams;
			strLastSearch = strAdditionalParams;
		} else if (strLastSearch) {
			strQS = strQS + '&' + strLastSearch;
		}
		strURL = g_strURL + strQS;
		if (objLatLngBounds) {
			strCoords = 'NELat=' + objLatLngBounds.getNorthEast().lat() + '&NELong=' + objLatLngBounds.getNorthEast().lng() + '&SWLat=' + objLatLngBounds.getSouthWest().lat() + '&SWLong=' + objLatLngBounds.getSouthWest().lng();
			strURL = strURL + '&' + strCoords;
		}
		if (ZoomLevel) {           strZoomLevel = 'ZoomLevel=' + ZoomLevel + '';
			strURL = strURL + '&' + strZoomLevel;
		}
		strURL = strURL + '&AggregationMode=' + intAggregationMode + '&action=' + g_strAction;
		CallURL(strURL, blnResetMap);
		document.getElementById('URLHolder').value = strURL;
   } else {
		if (ShouldSuppress() && g_strAction == 'moveend' && g_intNewAggregationMode == 1) {
			ShowTip(2);
		}
   }
}

function CallURL(strURL, blnResetMap) {
   var request = GXmlHttp.create();
	request.open('GET', strURL, true);
	request.onreadystatechange = getCallbackFunction(request, ProcessXMLData, blnResetMap);
	request.send(null);
}

function getCallbackFunction(req, processDataFunction, blnResetMap) {
   return function () {
		if (req.readyState == 4) {
	    	if (req.status == 200) {
				processDataFunction(req.responseXML, blnResetMap);
			} else {
				//alert('HTTP error: ' + req.status);
			}
		}
	}
}

function ShowLoadingImage() {
	elImage = document.getElementById(g_LoadingImageID);
	elImageHolder = document.getElementById(g_LoadingImageHolderID);
	var elMapHolder = document.getElementById(g_MapHolderID);
	var intCenterTop = Math.ceil(elMapHolder.style.height.replace(/px/, '')/2);
	var intCenterLeft = Math.ceil(elMapHolder.style.width.replace(/px/, '')/2);
	var objImage = new Image();
	objImage.src = '/images/systemimages/MapLoading.gif';
	var intHalfWidth = Math.ceil(objImage.width/2);
	var intHalfHeight = Math.ceil(objImage.height/2);
	var elMapHolder = document.getElementById(g_MapHolderID);
	var point = FindPos(elMapHolder, 'PageWrapper');
	var mapX, mapY;
	mapX = point[0];
	mapY = point[1];
	elImage.src = objImage.src;
	elImageHolder.style.left = (mapX + intCenterLeft - intHalfWidth) + 'px';
	elImageHolder.style.top = (mapY + intCenterTop - intHalfHeight) + 'px';
	elImageHolder.style.visibility = 'visible';
	elImageHolder.style.display = 'inline';
}

function HideLoadingImage() {
   elImageHolder.style.display = 'none';
   elImageHolder.style.visibility = 'hidden';
}

function CloseInfoWindow() {
   HideInfoWindow();
}

function MaintainStateOnReturn(blnMaintain) {
   document.getElementById('MaintainStateOnReturn').value = blnMaintain;
}

function ShouldMaintainStateOnReturn() {
	if (document.getElementById('MaintainStateOnReturn').value == 'true') {
		return true;
	} else {
		return false;
	}
}

var scrollX = 0;
var scrollY = 0;
function GetScroll() {
	if (document.all) {
		if (!document.documentElement.scrollLeft) {
			scrollX = document.body.scrollLeft;
		} else {
			scrollX = document.documentElement.scrollLeft;
		}
		if (!document.documentElement.scrollTop) {
			scrollY = document.body.scrollTop;
		} else {
			scrollY = document.documentElement.scrollTop;
		}
	} else {
		scrollX = window.pageXOffset;
		scrollY = window.pageYOffset;
	}
	document.getElementById('ScrollLeftHolder').value = scrollX;
	document.getElementById('ScrollTopHolder').value = scrollY;
}

function GotoScroll() {
   var x = parseInt(document.getElementById('ScrollLeftHolder').value);
   var y = parseInt(document.getElementById('ScrollTopHolder').value);
   window.scrollTo(x, y);
}

function SetSuppressGet (blnSuppressGet) {
   document.getElementById('SuppressGetHolder').value = (blnSuppressGet + '').toLowerCase();
}

function ShouldSuppress() {
   var blnSuppressGet = false;
   if (document.getElementById('SuppressGetHolder').value) {
       if (document.getElementById('SuppressGetHolder').value.toLowerCase() == 'true') {
           blnSuppressGet = true;
       }
   }
   return blnSuppressGet;
}

function GetNELat() {
   return objMap.getBounds().getNorthEast().lat();
}

function GetNELong() {
   return objMap.getBounds().getNorthEast().lng();
}

function GetSWLat() {
   return objMap.getBounds().getSouthWest().lat();
}

function GetSWLong() {
   return objMap.getBounds().getSouthWest().lng();
}

function ShowInfoWindow(strHTML, objMarker) {
	elImageHolder = document.getElementById(g_LoadingImageHolderID);
	if (elImageHolder.style.visibility != 'visible') {
		var strID;
		elInfoWindowHolder = document.getElementById(g_InfoWindowHolderID);
		elInfoWindowHolder.innerHTML = strHTML;
		var intHolderHeight = elInfoWindowHolder.firstChild.style.height.replace(/px/, '');
		for (var i=0; i < elInfoWindowHolder.childNodes.length; i++) {
			if (elInfoWindowHolder.childNodes[i]) {
					if (i != 0) {
						elInfoWindowHolder.childNodes[i].style.position = 'absolute';
						elInfoWindowHolder.childNodes[i].style.display = 'none';
					}
					strID = i + '_' + objMarker.getPoint().lat() + '_'  + objMarker.getPoint().lng();
				elInfoWindowHolder.childNodes[i].id = strID;
				elInfoWindowHolder.childNodes[i].innerHTML = elInfoWindowHolder.childNodes[i].innerHTML.replace(/divID/g, "'" + strID + "'");
				if (elInfoWindowHolder.childNodes.length > 1) {
					elInfoWindowHolder.childNodes[i].innerHTML = elInfoWindowHolder.childNodes[i].innerHTML.replace(/MapDetailHidden/g, "MapDetailVisible");
					GetChildElement(elInfoWindowHolder.childNodes[i], 'span', 'ListingCount').innerHTML = elInfoWindowHolder.childNodes.length + '&nbsp;';
				} else {
					//elInfoWindowHolder.childNodes[i].innerHTML = elInfoWindowHolder.childNodes[i].innerHTML.replace(/MapInfoNextBar/g, "");
				}
			}
			if (IsIE() && GetBrowserVersion() <= 6) {
				if (blnAggregateMode) {
					elInfoWindowHolder.childNodes[i].innerHTML = elInfoWindowHolder.childNodes[i].innerHTML.replace(/MapOuterTableSmall/g, "MapOuterTableSmallIE6");
				} else {	
					elInfoWindowHolder.childNodes[i].innerHTML = elInfoWindowHolder.childNodes[i].innerHTML.replace(/MapOuterTable/g, "MapOuterTableIE6");
				}
			}
		}	
		if (typeof window.InfoWindow_Show != "undefined") {
			InfoWindow_Show(elInfoWindowHolder);
		}
		var objIcon = objMarker.getIcon();
		var objPoint = objMap.fromLatLngToDivPixel(objMarker.getPoint());
		var objCenterPixel = objMap.fromLatLngToDivPixel(objMap.getCenter());
		var intX = objPoint.x - objIcon.iconAnchor.x + objIcon.infoWindowAnchor.x;
		var intY = objPoint.y - objIcon.iconAnchor.y + objIcon.infoWindowAnchor.y;
		var intWidth = objMap.getSize().width;
		var intHeight = objMap.getSize().height;
		var intOffsetX = Math.ceil(intWidth/2) - objCenterPixel.x - 36;
		var intOffsetY = Math.ceil(intHeight/2) - objCenterPixel.y - intHolderHeight;
		var elMapHolder = document.getElementById(g_MapHolderID);
		var point = FindPos(elMapHolder, 'PageWrapper');
		var mapX, mapY;
		mapX = point[0];
		mapY = point[1];
		elInfoWindowHolder.style.left = mapX + intX + intOffsetX;
		elInfoWindowHolder.style.top = mapY + intY + intOffsetY;
		elInfoWindowHolder.style.visibility = 'visible';
		elInfoWindowHolder.style.display = 'inline';
		g_blnInfoWindowOpen = true;
		var intAreaHeight, intAreaWidth;
		var intIconHeight = objMarker.getIcon().iconSize.height;
		if (blnAggregateMode) {
			intAreaHeight = g_intAggInfoWindowHeight + intIconHeight;
			intAreaWidth = g_intAggInfoWindowWidth;
		} else {
			intAreaHeight = g_intListingInfoWindowHeight + intIconHeight;
			intAreaWidth = g_intListingWindowWidth;
		}	
		var arrPos = FindPos(elInfoWindowHolder);
		g_InfoWindowLeftPos = arrPos[0];
		g_InfoWindowTopPos = arrPos[1];
		intTopLeft = g_InfoWindowLeftPos - scrollX;
		intTopTop = g_InfoWindowTopPos - scrollY;
		intBottomLeft = g_InfoWindowLeftPos - scrollX + intAreaWidth;
		intBottomTop = g_InfoWindowTopPos - scrollY + intAreaHeight;
	}
}

function HideInfoWindow() {
   if (elInfoWindowHolder) {
       elInfoWindowHolder.style.display = 'none';
       elInfoWindowHolder.style.visibility = 'hidden';
       g_blnInfoWindowOpen = false;
       g_blnKeepInfoWindowOpen = false;
   }
}

function HandleMouseMove() {
	if (window.Event) {
		if (typeof document.captureEvents != "undefined") {
			document.captureEvents(Event.MOUSEMOVE);
		}
	}
	document.onmousemove = GetXY;
}

function GetXY(e) {
  if (event) {
    x = event.clientX;
    y = event.clientY;
  } else if (e) {
    x = e.pageX;
    y = e.pageY;
  }
  if (!IsIE()) {
	x = x - scrollX;
	y = y - scrollY;
  }
  
  if (g_blnInfoWindowOpen) {
	if (x >= intTopLeft && x <= intBottomLeft && y >= intTopTop && y <= intBottomTop) {
	} else {
		if (!g_blnKeepInfoWindowOpen) {
			HideInfoWindow();
		}	
	}
  }
}


function SetMapTypeByInt(intMapType) {
	var objMapType;
	if (intMapType == 0) {objMapType = NOT_SET}
	if (intMapType == 1) {objMapType = G_NORMAL_MAP}
	if (intMapType == 2) {objMapType = G_SATELLITE_MAP}
	if (intMapType == 3) {objMapType = G_HYBRID_MAP}
	SetMapType(objMapType);
	SetMapTypeHolderByInt(intMapType);
}

function SetMapType(MapType) {
	objMap.setMapType(MapType);
	SetMapTypeHolder(MapType);
}

function GetMapType() {
	var intMapType = document.getElementById(g_MapTypeHolderID).value;
	var objMapType = G_NORMAL_MAP;
	if (intMapType) {
		intMapType = parseInt(intMapType);
		if (intMapType == 0) {objMapType = NOT_SET}
		if (intMapType == 1) {objMapType = G_NORMAL_MAP}
		if (intMapType == 2) {objMapType = G_SATELLITE_MAP}
		if (intMapType == 3) {objMapType = G_HYBRID_MAP}
	} 
	return objMapType;
}

function SetMapTypeHolder(objMapType) {
	var elMapTypeHolder = document.getElementById(g_MapTypeHolderID);
	var intMapType = 0;
	if (objMapType == G_NORMAL_MAP) {intMapType = 1} 
	if (objMapType == G_SATELLITE_MAP) {intMapType = 2}
	if (objMapType == G_HYBRID_MAP) {intMapType = 3}
	SetMapTypeHolderByInt(intMapType);
}

function SetMapTypeHolderByInt(intMapType) {
	var elMapTypeHolder = document.getElementById(g_MapTypeHolderID);
	elMapTypeHolder.value = intMapType;
}

function RefreshData() {	
	GetData(objMap.getBounds(), objMap.getZoom());
}

function GotoNextDetail(divID, blnNext) {
	var intIndexToShow;
	var intIndexToHide;
	for (var i = 0; i < elInfoWindowHolder.childNodes.length; i++) {
		if (elInfoWindowHolder.childNodes[i].id == divID) {
			intIndexToHide = i;
			if (blnNext) {
				if (elInfoWindowHolder.childNodes[i + 1]) {
					intIndexToShow = i + 1;
				} else {
					intIndexToShow = 0;
				}
			} else {
				if (i == 0) {
					if (elInfoWindowHolder.childNodes[elInfoWindowHolder.childNodes.length - 1]) {
						intIndexToShow = elInfoWindowHolder.childNodes.length - 1;
					} else {
						//sometimes there's a blank element
						intIndexToShow = elInfoWindowHolder.childNodes.length - 2;
					}
				} else {
					intIndexToShow = i - 1;
				}
			}
			GetChildElement(elInfoWindowHolder.childNodes[intIndexToShow], 'span', 'ListingIndex').innerHTML = intIndexToShow + 1 + '';
			elInfoWindowHolder.childNodes[intIndexToShow].style.display = 'inline';
			elInfoWindowHolder.childNodes[intIndexToShow].style.visibility = 'visible';			
			elInfoWindowHolder.childNodes[intIndexToHide].style.display = 'none';
			elInfoWindowHolder.childNodes[intIndexToHide].style.visibility = 'hidden';			
		}
	}
}

function PageToDetail(strTextToFind) {
	var intIndexToShow;
	var intIndexToHide;
	for (var i = 0; i < elInfoWindowHolder.childNodes.length; i++) {
		if (elInfoWindowHolder.childNodes[i].innerHTML.indexOf(strTextToFind) >= 0) {
			intIndexToShow = i;
		} else {
			if (elInfoWindowHolder.childNodes[i].style.display != 'none') {
				intIndexToHide = i;
			}
		}			
	}
	GetChildElement(elInfoWindowHolder.childNodes[intIndexToShow], 'span', 'ListingIndex').innerHTML = intIndexToShow + 1 + '';
	elInfoWindowHolder.childNodes[intIndexToShow].style.display = 'inline';
	elInfoWindowHolder.childNodes[intIndexToShow].style.visibility = 'visible';		
	if (intIndexToHide >= 0) {
		elInfoWindowHolder.childNodes[intIndexToHide].style.display = 'none';
		elInfoWindowHolder.childNodes[intIndexToHide].style.visibility = 'hidden';
	}	
}

function GetChildElement(objElement, strTagName, strID) {
	var arrElements = objElement.getElementsByTagName(strTagName);
	var objTarget;
	for (var i = 0; i < arrElements.length; i++) {
		if (arrElements[i].id == strID) {
			objTarget = arrElements[i];
		}
	}
	return objTarget
}

function ShowTip(TipNumber) {
	var strTip;
	var elTipHolder = document.getElementById(g_TipHolderID);
	
	if (elTipHolder) {
		if (TipNumber == 2) {
			strTip = "<span class='MapAlert'>NOTE: You are moving outside your search results, <a href='JavaScript:ClearSearch();'>click to clear</a></span>"
		} else if (TipNumber == 3) {
			var intRnd = Math.floor(Math.random()*100)
			if (intRnd >= 50) {
				strTip = "TIP: Double left-click to zoom in";
			} else {
				strTip = "TIP: Double right-click to zoom out";
			}
		} else {
			strTip = "TIP: Use the mouse to drag the map";
		}
		elTipHolder.innerHTML = strTip;
	}
}

function ClearSearch() {
	SetSuppressGet(false);
	SetCity('');
	SetZip('');
	GetData(objMap.getBounds(), objMap.getZoom(), "City=&State=&Zip=");
	ShowTip(1);
}

function ResetSearch() {
	SetCity('');
	SetZip('');
	GetData(null, null, null, true);
}

function FindPos(obj, ExcludeClassesAndIDs) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;
		while (obj = obj.offsetParent) {
			if (obj.className.indexOf(ExcludeClassesAndIDs) < 0 && obj.id.indexOf(ExcludeClassesAndIDs) < 0) { 
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
			}
		}
	}
	return [curleft,curtop];
}

function KeepInfoWindowOpen(strHTML, marker) {
	ShowInfoWindow(strHTML, marker);
	g_blnKeepInfoWindowOpen = true;
}	

function IsIE() {
	var blnIsIE = false;
	if (browserName.indexOf('Microsoft') >= 0) {
		blnIsIE = true;
	}
	return blnIsIE;
}

function GetBrowserVersion() {
	var version=0
	if (navigator.appVersion.indexOf("MSIE")!=-1){
	temp=navigator.appVersion.split("MSIE")
	version=parseFloat(temp[1])
	}
	return version;
}

function OpenStreetView(latitude, longitude) {
	var PropertyPoint = new GLatLng(latitude,longitude);
	panoramaOptions = { latlng:PropertyPoint };
	objStreetView = new GStreetviewPanorama(document.getElementById(g_MapHolderID), panoramaOptions);
	//GEvent.addListener(objStreetView, "error", HandleNoFlash);
}

function HandleNoFlash(errorCode) {  
	if (errorCode == FLASH_UNAVAILABLE) {    
		alert("Error: Flash doesn't appear to be supported by your browser");    
		return;  
	}
}  

function CloseStreetView() {
	if (objStreetView) {
		objStreetView.remove();
	}
}

function LoadStreetView() {
	var objXmlDoc;
	var latitude,longitude;
	if (g_strXML != "") {
		objXmlDoc = GXml.parse(g_strXML);
		latitude = parseFloat(objXmlDoc.documentElement.childNodes[0].getElementsByTagName("Lat")[0].firstChild.nodeValue);
		longitude = parseFloat(objXmlDoc.documentElement.childNodes[0].getElementsByTagName("Long")[0].firstChild.nodeValue);
		OpenStreetView(latitude, longitude);
	}
}