google.load("maps", "2.x");

var ArchGM =
{
    markers: new Array(),
    
    Load: function(latitude, longitude, zoomLevel) {
        this.map = new google.maps.Map2(document.getElementById("map"));
        this.geocoder = new google.maps.ClientGeocoder();
        this.map.setCenter(new google.maps.LatLng(latitude, longitude), zoomLevel);
        this.RenderMarkers();
        this.ManageControls();
    },
    
    MarkerMouseClick: function(markerId){
        if (this.markers.length >= markerId + 1) {
            this.markers[markerId].marker.openInfoWindowHtml(this.markers[markerId].msg);
        }
    },
    
    EntryMouseOver: function(markerId){
        if (this.markers.length >= markerId + 1) {
            var marker = this.markers[markerId];
            // This is the hover-state marker colour
            marker.marker.setImage("/Directory/Assets/Images/marker/yellowmarker_" + (marker.markerPosition + 1) + ".gif");
        }
    },
    
    EntryMouseOut: function(markerId){
        if (this.markers.length >= markerId + 1) {
            var marker = this.markers[markerId];
            // These are the original marker colours 
            if (marker.entryType == '1') markerColour = 'basic'
            else markerColour = 'red'
            marker.marker.setImage("/Directory/Assets/Images/marker/" + markerColour + "marker_" + (marker.markerPosition + 1) + ".gif");
        }
    },
    
    ClearMarkers: function() {
        this.markers = new Array();
        this.map.clearOverlays();
    },
    
    AddMarker: function(lat, lng, resultContainer, msg, withEvents, entryType, position) {
        var marker = new objMarker();
        marker.longitude = lng;
        marker.latitude = lat;
        marker.msg = msg;
        marker.resultContainer = resultContainer;
        marker.markerNumber = this.markers.length;
        marker.point = new google.maps.LatLng(lat, lng);
        marker.markerPosition = position;
        marker.entryType = entryType;
       
        if (marker.entryType == '1') markerColour = 'basic'
        else markerColour = 'red'
        
        var thisIcon = new google.maps.Icon(G_DEFAULT_ICON);
        thisIcon.image = "/Directory/Assets/Images/marker/" + markerColour + "marker_" + (marker.markerPosition + 1) + ".gif"
	thisIcon.printImage = thisIcon.image;
      	thisIcon.mozPrintImage = thisIcon.image;
        markerOptions = { icon:thisIcon };
        marker.marker = new google.maps.Marker(marker.point, markerOptions);
        
        if (withEvents == true) {
            google.maps.Event.addListener(marker.marker, "click", function(){ArchGM.MarkerMouseClick(marker.markerNumber);});    
        }
        this.markers.push(marker);
    },
    
    RenderMarkers: function() {
	for (var i=0; i < this.markers.length; i++) {
        	this.map.addOverlay(this.markers[i].marker);
        }
    },
    
    ManageControls: function() {
        this.map.addControl(new GLargeMapControl());
        this.map.addControl(new GMapTypeControl());
        this.map.addControl(new GScaleControl(300));
        this.map.enableContinuousZoom();
        this.map.enableDoubleClickZoom();
    }
};

function objMarker(){
    longitude:          null;
    latitude:           null;
    msg:                null;
    marker:             null;
    infoWindowText:     null;
    resultContainer:    null;
    marker:             null;
    point:              null;
    markerNumber:       null;
    markerPosition:     null;
    entryType:          null;
}