﻿/****************************************
*                                       *
*   Global variables                    *
*                                       *
*****************************************/

var mgr;
var countyMarkers;
var areaMarkers;
var officeMarkers;
var listingMarkers;

/****************************************
*                                       *
*   Utility functions                   *
*                                       *
*****************************************/

function refreshListings() {
    if (listingMarkers != null) {
        for (var i in listingMarkers) {
            mgr.removeMarker(listingMarkers[i]);
        }
    }

    var bounds = map.getBounds();
    var sw = bounds.getSouthWest();
    var ne = bounds.getNorthEast();
    getListings(sw.lat(), ne.lat(), sw.lng(), ne.lng());
    mgr.addMarkers(listingMarkers, zoomLevels["Listings"][0], zoomLevels["Listings"][1]);
    mgr.refresh();
}

/****************************************
*                                       *
*   Ajax calls                          *
*                                       *
*****************************************/

function getCounties() {
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "../Services/GoogleMaps.asmx/GetCounties",
        data: "{}",
        dataType: "json",
        async: false,
        success: function(msg) {
            var marks = msg.d;
            countyMarkers = [];
            for (var i = 0; i < marks.length; i++) {
                var point = new GLatLng(marks[i].Latitude, marks[i].Longitude);
                var marker = new GMarker(point, { title: marks[i].MarkerDisplay, icon: icons[marks[i].LocationType] })
                GEvent.addListener(marker, "click", function(clickpoint) {
                    map.setCenter(clickpoint, zoomLevels["Areas"][0]);
                });
                countyMarkers.push(marker);
            }
        }
    });
}

function getAreas() {
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "../Services/GoogleMaps.asmx/GetAreas",
        data: "{}",
        dataType: "json",
        async: false,
        success: function(msg) {
            var marks = msg.d;
            areaMarkers = [];
            for (var i = 0; i < marks.length; i++) {
                var point = new GLatLng(marks[i].Latitude, marks[i].Longitude);
                var marker = new GMarker(point, { title: marks[i].MarkerDisplay, icon: icons[marks[i].LocationType] })
                GEvent.addListener(marker, "click", function(clickpoint) {
                    map.setCenter(clickpoint, zoomLevels["Listings"][0]);
                });
                areaMarkers.push(marker);
            }
        }
    });
}

function getOffices() {
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "../Services/GoogleMaps.asmx/GetOffices",
        data: "{}",
        dataType: "json",
        async: false,
        success: function(msg) {
            var marks = msg.d;
            officeMarkers = [];
            for (var i = 0; i < marks.length; i++) {
                var point = new GLatLng(marks[i].Latitude, marks[i].Longitude);
                var marker = new GMarker(point, { title: marks[i].MarkerDisplay, icon: icons[marks[i].LocationType] })
                var tabs = [];
                for (var j = 0; j < marks[i].Tabs.length; j++) {
                    tabs.push(new GInfoWindowTab(marks[i].Tabs[j].Title, marks[i].Tabs[j].Content));
                }
                marker.bindInfoWindowTabsHtml(tabs);
                officeMarkers.push(marker);
            }
        }
    });
}

function getListings(latMin, latMax, lonMin, lonMax) {
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "../Services/GoogleMaps.asmx/GetListings",
        data: "{'latMin':'" + latMin + "','latMax':'" + latMax + "','lonMin':'" + lonMin + "','lonMax':'" + lonMax + "'}",
        dataType: "json",
        async: false,
        success: function(msg) {
            var marks = msg.d;
            listingMarkers = [];
            for (var i = 0; i < marks.length; i++) {
                var point = new GLatLng(marks[i].Latitude, marks[i].Longitude);
                var marker = new GMarker(point, { title: marks[i].MarkerDisplay, icon: icons[marks[i].LocationType] })
                var tabs = [];
                for (var j = 0; j < marks[i].Tabs.length; j++) {
                    tabs.push(new GInfoWindowTab(marks[i].Tabs[j].Title, marks[i].Tabs[j].Content));
                }
                marker.bindInfoWindowTabsHtml(tabs);
                listingMarkers.push(marker);
            }
        }
    });
}
