﻿var map = null;
var gmarkers = null;

function initTownMap(lat, lng, n, s, e, w) {
    map = returnFullMap();
    if (GBrowserIsCompatible()) {

        var point = new GLatLng(lat, lng);

        var bounds = new GLatLngBounds(
            new GLatLng(s, w), 
            new GLatLng(n, e)
        );

        var zoom = map.getBoundsZoomLevel(bounds);
        map.setCenter(point, zoom);
        
    } else {
        alert("Sorry, the Google Maps API is not compatible with this browser");
    } 
}

function initialize(xmlpath) {

    map = returnSimpleMap();
    gmarkers = [];
    
    if (GBrowserIsCompatible()) {

        var request = GXmlHttp.create();
        request.open("GET", xmlpath, true);
        request.onreadystatechange = function() { buildMarkers(request); }
        request.send(null);
        
    } else {
        alert("Sorry, the Google Maps API is not compatible with this browser");
    }
}

function returnSimpleMap() {
    // Create the map
    var map = new GMap2(document.getElementById("map"));
    map.addControl(new GSmallMapControl());
    return map;
}

function returnFullMap() {
    // Create the map
    var map = new GMap2(document.getElementById("map"));
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GScaleControl());
    map.addControl(new GOverviewMapControl());
    //map.enableScrollWheelZoom();
    return map;
}

function createMarker(point, label, name, html, premiumlisting) {
    //build marker icon
    var iconOptions = {};
    iconOptions.primaryColor = "#DA7187";
    iconOptions.strokeColor = "#333333";
    iconOptions.label = label;
    iconOptions.labelColor = "#000000";
    iconOptions.starPrimaryColor = "#FFFF00";
    iconOptions.starStrokeColor = "#000000";
    iconOptions.addStar = false;
    if (premiumlisting == 'true') {
        iconOptions.addStar = true;
        iconOptions.primaryColor = "#45CAAF";
    }
    var customicon = MapIconMaker.createLabeledMarkerIcon(iconOptions);
    
    //set up and add marker to gmarkers
    var marker = new GMarker(point, { icon: customicon, title: name });
    marker.label = label;
    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(html);
    });
    gmarkers.push(marker);
    return marker;
}

function setZoomCenter() {
    //loops all markers and adjusts centre and zoom to fit
    var bounds = new GLatLngBounds();
    for (var k = 0; k < gmarkers.length; k++) {
        bounds.extend(gmarkers[k].getPoint());
    }
    map.setCenter(bounds.getCenter());
    map.setZoom(map.getBoundsZoomLevel(bounds));
}

function mapitClick(label) {
    //triggers click event handler of marker when called from external button
    for (var i = 0; i < gmarkers.length; i++) {
        if (gmarkers[i].label == label) {
            GEvent.trigger(gmarkers[i], "click");
        }
    }
}

function buildMarkers(request) {
    if (request.readyState == 4) {
        var xmlDoc = request.responseXML;
        var businesses = xmlDoc.documentElement.getElementsByTagName("business");
        var labelindex = 0;

        for (var i = 0; i < businesses.length; i++) {
            // Obtain the attribues of each marker
            var businessid = GXml.value(businesses[i].getElementsByTagName("businessid")[0]);
            var latitude = GXml.value(businesses[i].getElementsByTagName("latitude")[0]);
            var longitude = GXml.value(businesses[i].getElementsByTagName("longitude")[0]);
            var name = GXml.value(businesses[i].getElementsByTagName("name")[0]);
            var html = GXml.value(businesses[i].getElementsByTagName("balloon")[0]);
            var premiumlisting = GXml.value(businesses[i].getElementsByTagName("premiumlisting")[0]);
            var label = GXml.value(businesses[i].getElementsByTagName("gLabel")[0]);

            // Create the marker if there is a latitude, longitude and it doesn't already exist
            if (latitude != '' && longitude != '' && markerExists(label) == false) {
                var point = new GLatLng(latitude, longitude);
                var marker = createMarker(point, label, name, html, premiumlisting.toLowerCase());
                map.addOverlay(marker);
            }

        }
        setZoomCenter();
    }
}

function markerExists(label) {
    for (var i = 0; i < gmarkers.length; i++) {
        if (gmarkers[i].label == label) {
            return true;
        }
    }
    return false;
}