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() {
    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[g_MapHolderID] = new GMap2(document.getElementById(g_MapHolderID));
    objMap[g_MapHolderID].setCenter(new GLatLng(CenterX, CenterY), parseInt(InitialZoom), GetMapType());
    objMap[g_MapHolderID].enableDoubleClickZoom();

    var intZoomLevel = objMap[g_MapHolderID].getZoom();
    document.getElementById('MapZoomHolder').value = intZoomLevel;

    var objLatLng = objMap[g_MapHolderID].getCenter();
    document.getElementById('MapCenterLatHolder').value = objLatLng.lat();
    document.getElementById('MapCenterLongHolder').value = objLatLng.lng();

    var objBounds = objMap[g_MapHolderID].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[g_MapHolderID].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[g_MapHolderID], 'moveend', function () { HandleMoveEnd(); });
        g_MoveStartListener = GEvent.addListener(objMap[g_MapHolderID], 'movestart', function () { HandleMoveStart(); });
        g_ZoomEndListener = GEvent.addListener(objMap[g_MapHolderID], 'zoomend', function (oldLevel, newLevel) { HandleZoomEnd(oldLevel, newLevel); });
        g_ClickListener = GEvent.addListener(objMap[g_MapHolderID], '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[g_MapHolderID].getBounds(), objMap[g_MapHolderID].getZoom());
        g_blnZoomingOut = false;
    }
    var intZoomLevel = objMap[g_MapHolderID].getZoom();
    document.getElementById('MapZoomHolder').value = intZoomLevel;

    var objLatLng = objMap[g_MapHolderID].getCenter();
    document.getElementById('MapCenterLatHolder').value = objLatLng.lat();
    document.getElementById('MapCenterLongHolder').value = objLatLng.lng();

    var objBounds = objMap[g_MapHolderID].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[g_MapHolderID].getBounds(), objMap[g_MapHolderID].getZoom());
        }
        var intZoomLevel = objMap[g_MapHolderID].getZoom();
        document.getElementById('MapZoomHolder').value = intZoomLevel;

        var objLatLng = objMap[g_MapHolderID].getCenter();
        document.getElementById('MapCenterLatHolder').value = objLatLng.lat();
        document.getElementById('MapCenterLongHolder').value = objLatLng.lng();

        var objBounds = objMap[g_MapHolderID].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[g_MapHolderID].getBounds();
    objBounds.extend(objPoint);
    if (objMap[g_MapHolderID].getZoom() > objMap[g_MapHolderID].getBoundsZoomLevel(objBounds)) {
        ClearMapListeners();
        objMap[g_MapHolderID].setZoom(objMap[g_MapHolderID].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[g_MapHolderID].removeOverlay(g_arrMarkersOn[i][0]);
                    objMap[g_MapHolderID].addOverlay(g_arrMarkersOff[i][0]);
                    g_arrMarkersOff[i][1] = true;
                    g_arrMarkersOn[i][1] = false;
                } else {
                    objMap[g_MapHolderID].removeOverlay(g_arrMarkersOff[i][0]);
                    objMap[g_MapHolderID].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[g_MapHolderID].removeOverlay(g_arrMarkersOn[i][0]);
                    //objMap[g_MapHolderID].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[g_MapHolderID].removeOverlay(g_arrMarkersOff[i][0]);
                    //objMap[g_MapHolderID].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[g_MapHolderID].removeOverlay(g_arrMarkersHighlighted[i][0]);
                    objMap[g_MapHolderID].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[g_MapHolderID]) {
            objMap[g_MapHolderID].clearOverlays();
        }
    }

    if (objXmlDoc.documentElement.childNodes.length == 0) {
        if (!objMap[g_MapHolderID]) {
            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[g_MapHolderID]) {
            LoadMapByPointAndZoom(CenterLat, CenterLong, NewZoomLevel);
        }

        if (blnResetMap) {
            ClearMapListeners();
            intCount = NewZoomLevel - objMap[g_MapHolderID].getZoom();
            if (intCount < 0) {
                intCount = intCount * -1;
                blnZoomIn = false;
            }

            for (var i = 0; i < intCount; i++) {
                if (blnZoomIn) {
                    objMap[g_MapHolderID].zoomIn();
                } else {
                    objMap[g_MapHolderID].zoomOut();
                }
            }

            objMap[g_MapHolderID].panTo(new GLatLng(CenterLat, CenterLong));

            var intZoomLevel = objMap[g_MapHolderID].getZoom();
            document.getElementById('MapZoomHolder').value = intZoomLevel;

            var objLatLng = objMap[g_MapHolderID].getCenter();
            document.getElementById('MapCenterLatHolder').value = objLatLng.lat();
            document.getElementById('MapCenterLongHolder').value = objLatLng.lng();

            var objBounds = objMap[g_MapHolderID].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[g_MapHolderID].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[g_MapHolderID].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[g_MapHolderID].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[g_MapHolderID]) {
        if (!objMap[g_MapHolderID].getInfoWindow().isHidden()) {
            blnIsHidden = false;
        }
    }
    if (!objMap[g_MapHolderID] || (!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[g_MapHolderID].getBounds().getNorthEast().lat();
}

function GetNELong() {
    return objMap[g_MapHolderID].getBounds().getNorthEast().lng();
}

function GetSWLat() {
    return objMap[g_MapHolderID].getBounds().getSouthWest().lat();
}

function GetSWLong() {
    return objMap[g_MapHolderID].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[g_MapHolderID].fromLatLngToDivPixel(objMarker.getPoint());
        var objCenterPixel = objMap[g_MapHolderID].fromLatLngToDivPixel(objMap[g_MapHolderID].getCenter());
        var intX = objPoint.x - objIcon.iconAnchor.x + objIcon.infoWindowAnchor.x;
        var intY = objPoint.y - objIcon.iconAnchor.y + objIcon.infoWindowAnchor.y;
        var intWidth = objMap[g_MapHolderID].getSize().width;
        var intHeight = objMap[g_MapHolderID].getSize().height;
        var quadrantOffX = 36;
        var intOffsetX = Math.ceil(intWidth / 2) - objCenterPixel.x - quadrantOffX;
        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) {
        document.captureEvents(Event.MOUSEMOVE);
    }
    document.onmousemove = GetXY;
}

function GetXY(e) {
    x = (window.Event) ? e.pageX : event.clientX;
    y = (window.Event) ? e.pageY : event.clientY;

    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[g_MapHolderID].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[g_MapHolderID].getBounds(), objMap[g_MapHolderID].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[g_MapHolderID].getBounds(), objMap[g_MapHolderID].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);
    }
}
