﻿// JScript File
var gMap = null;
var cLatLong = new GLatLng(53.462, -1.186);
var cZoom = 4;

var marker = null;
var myPano = null;

/*** Start: Map load/unload functions ***/
var points = [];
function loadMap() {
    if (GBrowserIsCompatible()) {
        gMap = new GMap2(document.getElementById("regionMap"));

        /* Configure map controls */
        gMap.addControl(new GLargeMapControl3D());
        gMap.addControl(new GMenuMapTypeControl());

        /* Set map defaults */
        gMap.setCenter(cLatLong, cZoom);

        /* Initialize geocoder         */
        geocoder = new GClientGeocoder();
        /* plot apartments on map */
        if (searches != undefined && searches && searches.length > 0) {
            /* set point count for bounding */
            points.count = searches.length;
            for (var idx = 0; idx < searches.length; idx++) {
                mapSearchAddress(searches[idx].term, searches[idx].id);
            }
        }
        /* /plot apartment on map */
    }
}

function unloadMap() {
    try {
        GUnload();
    }
    catch (err) {
        //Handle errors here
    }
}
var mapper = {
    adj: 0.00001
    , lats: {}
    , lngs: {}
    , lls: {}
};
function GetNextCoord(used, val) {
    var result = null;
    if (used[val]) {
        result =  GetNextCoord(used, val += mapper.adj);
    }
    else {
        result = val;
    }
    return result;
}
function GetAdjustedGLatLng(lat, lng) {

    if (mapper.lls[lat + "_" + lng] != undefined) {

        if (mapper.lats[lat]) {
            lng = GetNextCoord(mapper.lngs, lng);
            mapper.lngs[lng] = 1;
        }

        if (mapper.lngs[lng]) {
            lat = GetNextCoord(mapper.lats, lat);
            mapper.lats[lat] = 1;
        }

    }
    else {
        mapper.lats[lat] = 1;
    }

    mapper.lls[lat + "_" + lng] = 1;

    // lat
    var rn = Math.floor(Math.random() * 4) - 2; // between -2 and 2
    lat += (rn * mapper.adj);
    // lng
    rn = Math.floor(Math.random() * 4) - 2; // between -2 and 2
    lng += (rn * mapper.adj);
    
    return new GLatLng(lat, lng);
}

/// Do google search for string
var callBack_Count = 0; // Call back count
function mapSearchAddress(term, id) {
    geocoder.getLocations(
        term,
        function(results) {
            if (results.Status.code == 200) {
                if (results.Placemark.length > 0) {
                    // plot each result
                    var latlon = GetAdjustedGLatLng(results.Placemark[0].Point.coordinates[1], results.Placemark[0].Point.coordinates[0]);

                    var marker = new GMarker(latlon, { title: results.Placemark[0].address });

                    /*GEvent.addListener(marker, "click", function() {
                    location.href = "/property_searching/property_information_page.aspx?ReturnUrl=" + location.pathname + location.search + "&propertyId=" + id;
                    });*/
                    gMap.addOverlay(marker);
                    //gMap.setCenter(latlon, cZoom);
                    points.push(latlon);
                }
            }
            callBack_Count++;
            if (callBack_Count == points.count) {
                // all markers added so set bounds:
                var bounds = new GLatLngBounds();
                for (var idx = 0; idx < points.length; idx++) {
                    bounds.extend(points[idx]);
                }
                var zl = gMap.getBoundsZoomLevel(bounds);
                if (zl > 14) { zl = 14 } else { zl-- };
                gMap.setZoom(zl);
                gMap.setCenter(bounds.getCenter());
            }
        }
    );
}

/*** End: Map load/unload functions ***/

/* vars */
var maxComp = 4;

$(function() {
    $(window).unload(unloadMap);
    loadMap();
});
