function ClusterMarker(_1, _2) {
    this._map = _1;
    this._mapMarkers = [];
    this._iconBounds = [];
    this._clusterMarkers = [];
    this._eventListeners = [];
    if (typeof (_2) === "undefined") {
        _2 = {};
    }
    this.borderPadding = (_2.borderPadding) ? _2.borderPadding : 256;
    this.clusteringEnabled = (_2.clusteringEnabled === false) ? false : true;
    if (_2.clusterMarkerClick) {
        this.clusterMarkerClick = _2.clusterMarkerClick;
    }
    if (_2.clusterMarkerIcon) {
        this.clusterMarkerIcon = _2.clusterMarkerIcon;
    } else {
        this.clusterMarkerIcon = new GIcon();
        this.clusterMarkerIcon.image = "/images/map/pinCluster.png";
        this.clusterMarkerIcon.iconSize = new GSize(30, 32);
        this.clusterMarkerIcon.iconAnchor = new GPoint(9, 34);
        this.clusterMarkerIcon.infoWindowAnchor = new GPoint(9, 12);
        this.clusterMarkerIcon.shadow = "/images/map/pinShadow.png";
        this.clusterMarkerIcon.shadowSize = new GSize(36, 34);
    }
    this.clusterMarkerTitle = (_2.clusterMarkerTitle) ? _2.clusterMarkerTitle : "Click to zoom in and see %count markers";
    if (_2.fitMapMaxZoom) {
        this.fitMapMaxZoom = _2.fitMapMaxZoom;
    }
    this.intersectPadding = (_2.intersectPadding) ? _2.intersectPadding : 0;
    if (_2.markers) {
        this.addMarkers(_2.markers);
    }
    GEvent.bind(this._map, "moveend", this, this._moveEnd);
    GEvent.bind(this._map, "zoomend", this, this._zoomEnd);
    GEvent.bind(this._map, "maptypechanged", this, this._mapTypeChanged);
}
ClusterMarker.prototype.addMarkers = function(_3) {
    var i;
    if (!_3[0]) {
        var _5 = [];
        for (i in _3) {
            _5.push(_3[i]);
        }
        _3 = _5;
    }
    for (i = _3.length - 1; i >= 0; i--) {
        _3[i]._isVisible = false;
        _3[i]._isActive = false;
        _3[i]._makeVisible = false;
    }
    this._mapMarkers = this._mapMarkers.concat(_3);
};
ClusterMarker.prototype._clusterMarker = function(_6) {
    function $newClusterMarker(_7, _8, _9) {
        return new GMarker(_7, { icon: _8, title: _9 });
    }
    var _a = new GLatLngBounds(), i, _c, _d = [], _e, _f = this, _10 = this._mapMarkers;
    for (i = _6.length - 1; i >= 0; i--) {
        _e = _10[_6[i]];
        _e.index = _6[i];
        _a.extend(_e.getLatLng());
        _d.push(_e);
    }
    _c = $newClusterMarker(_a.getCenter(), this.clusterMarkerIcon, this.clusterMarkerTitle.replace(/%count/gi, _6.length));
    _c.clusterGroupBounds = _a;
    this._eventListeners.push(GEvent.addListener(_c, "click", function() {
        _f.clusterMarkerClick({ clusterMarker: _c, clusteredMarkers: _d });
    }));
    _c._childIndexes = _6;
    for (i = _6.length - 1; i >= 0; i--) {
        _10[_6[i]]._parentCluster = _c;
    }
    return _c;
};
ClusterMarker.prototype.clusterMarkerClick = function(_11) {
    this._map.setCenter(_11.clusterMarker.getLatLng(), this._map.getBoundsZoomLevel(_11.clusterMarker.clusterGroupBounds));
};
ClusterMarker.prototype._filterActiveMapMarkers = function() {
    var _12 = this.borderPadding, _13 = this._map.getZoom(), _14 = this._map.getCurrentMapType().getProjection(), _15, _16, _17, _18, _19, _1a, _1b = this._map.getBounds(), i, _1d, _1e = [], _1f, _20 = this._mapMarkers, _21 = this._iconBounds;
    if (_12) {
        _15 = _14.fromLatLngToPixel(_1b.getSouthWest(), _13);
        _16 = new GPoint(_15.x - _12, _15.y + _12);
        _17 = _14.fromPixelToLatLng(_16, _13);
        _18 = _14.fromLatLngToPixel(_1b.getNorthEast(), _13);
        _19 = new GPoint(_18.x + _12, _18.y - _12);
        _1a = _14.fromPixelToLatLng(_19, _13);
        _1b.extend(_17);
        _1b.extend(_1a);
    }
    this._activeMarkersChanged = false;
    if (typeof (_21[_13]) === "undefined") {
        this._iconBounds[_13] = [];
        this._activeMarkersChanged = true;
        for (i = _20.length - 1; i >= 0; i--) {
            _1d = _20[i];
            _1d._isActive = _1b.containsLatLng(_1d.getLatLng()) ? true : false;
            _1d._makeVisible = _1d._isActive;
            if (_1d._isActive) {
                _1e.push(i);
            }
        }
    } else {
        for (i = _20.length - 1; i >= 0; i--) {
            _1d = _20[i];
            _1f = _1d._isActive;
            _1d._isActive = _1b.containsLatLng(_1d.getLatLng()) ? true : false;
            _1d._makeVisible = _1d._isActive;
            if (!this._activeMarkersChanged && _1f !== _1d._isActive) {
                this._activeMarkersChanged = true;
            }
            if (_1d._isActive && typeof (_21[_13][i]) === "undefined") {
                _1e.push(i);
            }
        }
    }
    return _1e;
};
ClusterMarker.prototype._filterIntersectingMapMarkers = function() {
    var _22, i, j, _25 = this._map.getZoom(), _26 = this._mapMarkers, _27 = this._iconBounds;
    for (i = _26.length - 1; i > 0; i--) {
        if (_26[i]._makeVisible) {
            _22 = [];
            for (j = i - 1; j >= 0; j--) {
                if (_26[j]._makeVisible && _27[_25][i].intersects(_27[_25][j])) {
                    _22.push(j);
                }
            }
            if (_22.length !== 0) {
                _22.push(i);
                for (j = _22.length - 1; j >= 0; j--) {
                    _26[_22[j]]._makeVisible = false;
                }
                this._clusterMarkers.push(this._clusterMarker(_22));
            }
        }
    }
};
ClusterMarker.prototype.fitMapToMarkers = function() {
    var _28 = this._mapMarkers, _29 = new GLatLngBounds(), i;
    for (i = _28.length - 1; i >= 0; i--) {
        _29.extend(_28[i].getLatLng());
    }
    var _2b = this._map.getBoundsZoomLevel(_29);
    if (this.fitMapMaxZoom && _2b > this.fitMapMaxZoom) {
        _2b = this.fitMapMaxZoom;
    }
    this._map.setCenter(_29.getCenter(), _2b);
    this.refresh();
};
ClusterMarker.prototype._mapTypeChanged = function() {
    this.refresh(true);
};
ClusterMarker.prototype._moveEnd = function() {
    if (!this._cancelMoveEnd) {
        this.refresh();
    } else {
        this._cancelMoveEnd = false;
    }
};
ClusterMarker.prototype._preCacheIconBounds = function(_2c, _2d) {
    var _2e = this._map.getCurrentMapType().getProjection(), i, _30, _31, _32, _33, _34, _35, _36, _37, _38 = this.intersectPadding, _39 = this._mapMarkers;
    for (i = _2c.length - 1; i >= 0; i--) {
        _30 = _39[_2c[i]];
        _31 = _30.getIcon().iconSize;
        _32 = _2e.fromLatLngToPixel(_30.getLatLng(), _2d);
        _33 = _30.getIcon().iconAnchor;
        _34 = new GPoint(_32.x - _33.x - _38, _32.y - _33.y + _31.height + _38);
        _35 = new GPoint(_32.x - _33.x + _31.width + _38, _32.y - _33.y - _38);
        _36 = _2e.fromPixelToLatLng(_34, _2d);
        _37 = _2e.fromPixelToLatLng(_35, _2d);
        this._iconBounds[_2d][_2c[i]] = new GLatLngBounds(_36, _37);
    }
};
ClusterMarker.prototype.refresh = function(_3a) {
    var i, _3c, _3d = this._map.getZoom(), _3e = this._filterActiveMapMarkers();
    if (this._activeMarkersChanged || _3a) {
        this._removeClusterMarkers();
        if (this.clusteringEnabled && _3d < this._map.getCurrentMapType().getMaximumResolution()) {
            if (_3e.length > 0) {
                this._preCacheIconBounds(_3e, _3d);
            }
            this._filterIntersectingMapMarkers();
        }
        for (i = this._clusterMarkers.length - 1; i >= 0; i--) {
            this._map.addOverlay(this._clusterMarkers[i]);
        }
        for (i = this._mapMarkers.length - 1; i >= 0; i--) {
            _3c = this._mapMarkers[i];
            if (!_3c._isVisible && _3c._makeVisible) {
                this._map.addOverlay(_3c);
                _3c._isVisible = true;
            }
            if (_3c._isVisible && !_3c._makeVisible) {
                this._map.removeOverlay(_3c);
                _3c._isVisible = false;
            }
        }
    }
};
ClusterMarker.prototype._removeClusterMarkers = function() {
    var i, j, _41 = this._map, _42 = this._eventListeners, _43 = this._clusterMarkers, _44, _45 = this._mapMarkers;
    for (i = _43.length - 1; i >= 0; i--) {
        _44 = _43[i]._childIndexes;
        for (j = _44.length - 1; j >= 0; j--) {
            delete _45[_44[j]]._parentCluster;
        }
        _41.removeOverlay(_43[i]);
    }
    for (i = _42.length - 1; i >= 0; i--) {
        GEvent.removeListener(_42[i]);
    }
    this._clusterMarkers = [];
    this._eventListeners = [];
};
ClusterMarker.prototype.removeMarkers = function() {
    var i, _47 = this._mapMarkers, _48 = this._map;
    for (i = _47.length - 1; i >= 0; i--) {
        if (_47[i]._isVisible) {
            _48.removeOverlay(_47[i]);
        }
        delete _47[i]._isVisible;
        delete _47[i]._isActive;
        delete _47[i]._makeVisible;
    }
    this._removeClusterMarkers();
    this._mapMarkers = [];
    this._iconBounds = [];
};
ClusterMarker.prototype.triggerClick = function(_49) {
    var _4a = this._mapMarkers[_49];
    if (_4a._isVisible) {
        GEvent.trigger(_4a, "click");
    } else {
        if (_4a._isActive) {
            var _4b = _4a._parentCluster._childIndexes, _4c = true, _4d, i, _4f = this._map.getZoom(), _50, _51 = this._iconBounds, _52 = this._map.getCurrentMapType().getMaximumResolution();
            while (_4c && _4f < _52) {
                _4c = false;
                _4f++;
                if (typeof (_51[_4f]) === "undefined") {
                    _51[_4f] = [];
                    this._preCacheIconBounds(_4b, _4f);
                } else {
                    _4d = [];
                    for (i = _4b.length - 1; i >= 0; i--) {
                        if (typeof (_51[_4f][_4b[i]]) === "undefined") {
                            _4d.push(_4b[i]);
                        }
                    }
                    if (_4d.length >= 1) {
                        this._preCacheIconBounds(_4d, _4f);
                    }
                }
                for (i = _4b.length - 1; i >= 0; i--) {
                    _50 = _4b[i];
                    if (_50 !== _49 && _51[_4f][_50].intersects(_51[_4f][_49])) {
                        _4c = true;
                        break;
                    }
                }
            }
            this._map.setCenter(_4a.getLatLng(), _4f);
            this.triggerClick(_49);
        } else {
            this._map.setCenter(_4a.getLatLng());
            this.triggerClick(_49);
        }
    }
};
ClusterMarker.prototype._zoomEnd = function() {
    this._cancelMoveEnd = true;
    this.refresh(true);
};
var gmap, cluster, mapcontrol;
var icSale, icCluster;
function loadGmap() {
    if (GBrowserIsCompatible()) {
        gmap = new GMap2(document.getElementById("map"));
        gmap.addControl(new GLargeMapControl3D(), new GControlPosition(G_ANCHOR_BOTTOM_RIGHT));
        gmap.setCenter(new GLatLng(52.02, 0.244), 14);
        fetchPinData(criteriaid);
        var _53 = 10;
        var _54 = 16;
        var _55 = gmap.getMapTypes();
        for (var i = 0; i < _55.length; i++) {
            _55[i].getMinimumResolution = function() {
                return _53;
            };
            _55[i].getMaximumResolution = function() {
                return _54;
            };
        }
        window.onunload = GUnload;
        icSale = new GIcon();
        icSale.image = "/images/map/pinBuy.png";
        icSale.shadow = "/images/map/pinShadow.png";
        icSale.iconSize = new GSize(18, 34);
        icSale.shadowSize = new GSize(36, 34);
        icSale.iconAnchor = new GPoint(9, 34);
        icSale.infoWindowAnchor = new GPoint(9, 12);
        icCluster = new GIcon();
        icCluster.image = "/images/map/pinCluster.png";
        icCluster.shadow = "/images/map/pinShadow.png";
        icCluster.iconSize = new GSize(30, 32);
        icCluster.shadowSize = new GSize(36, 34);
        icCluster.iconAnchor = new GPoint(9, 34);
        icCluster.infoWindowAnchor = new GPoint(9, 12);
    }
}
function fetchPinData(_57) {
    var _58 = false;
    if (!_58 && typeof XMLHttpRequest != "undefined") {
        _58 = new XMLHttpRequest();
    }
    if ((!_58) || (navigator.userAgent.indexOf("Opera") >= 0)) {
    } else {
        _58.open("GET", "/Modules/GetPinData.aspx?criteria=" + _57, true);
        _58.onreadystatechange = function() {
            if (_58.readyState == 4) {
                var _59 = _58.responseText;
                if (_59.length > 0) {
                    var _5a = _59.split("\n");
                    var mk, _5c = [];
                    for (var i = 0; i < _5a.length - 1; i++) {
                        eval(_5a[i]);
                        _5c.push(mk);
                    }
                    cluster = new ClusterMarker(gmap, { markers: _5c, clusterMarkerIcon: icCluster });
                    cluster.clusterMarkerTitle = "Click to zoom in on %count properties";
                    cluster.intersectPadding = -4;
                    if (_57 != "") {
                        cluster.fitMapToMarkers();
                    }
                    cluster.refresh();
                }
            }
        };
        _58.send(null);
    }
}
function newM(lat, lng, _60, _61, _62, _63, _64) {
    var _65 = new GIcon();
    _65.image = "/images/map/pinBuy.png";
    _65.shadow = "/images/map/pinShadow.png";
    _65.iconSize = new GSize(18, 34);
    _65.shadowSize = new GSize(36, 34);
    _65.iconAnchor = new GPoint(9, 34);
    _65.infoWindowAnchor = new GPoint(9, 12);
    var _66 = new GMarker(new GLatLng(lat, lng), { icon: _65, title: _61 });
    GEvent.addListener(_66, "click", function() {
        cluster.clusteringEnabled = false;
        gmap.setCenter(_66.getLatLng());
        gmap.setZoom(14);
        _66.openInfoWindowHtml(_62);
    });
    return _66;
}
function loadProp(id) {
    if (!id) {
        return;
    }
    location.href = "/Property/" + id;
}

