// Declare namespace
function MelroseHealth() { }

MelroseHealth.preloadImages = function() {
	var doc = document;
	if (doc.images) {
		if (!doc.imgArray) {
			doc.imgArray=new Array();
		}
		var i;
		var j = doc.imgArray.length;
		var argsArray = arguments;
		for(i=0; i<argsArray.length; i++) {
			if (argsArray[i].indexOf("#") != 0) { 
				doc.imgArray[j] = new Image;
				doc.imgArray[j++].src = argsArray[i];
			}
		}
	}
}

var map;
var geocoder;

function load() {
    if (GBrowserIsCompatible()) {
        geocoder = new GClientGeocoder();
        map = new GMap2(document.getElementById('map'));
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        map.setCenter(new GLatLng(-24, 133), 4);
    }
}

function searchLocations() {
    var address = document.getElementById('addressInput').value + document.getElementById('stateSelect').value;

    geocoder.getLatLng(address, function(latlng) {
        if (!latlng) {
            alert(address + ' not found');
        } else {
            searchLocationsNear(latlng);
        }
    });
}

function searchLocationsNear(center) {
    var radius = 5;
    var searchUrl = '/default.aspx?f=_callback&func=GoogleMapLocationDistance&radius=' + radius + '&latitude=' + center.lat() + '&longtitude=' + center.lng();
//    var searchUrl = 'genxml.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius;

    GDownloadUrl(searchUrl, function(data) {
        var xml = GXml.parse(data);
        var markers = xml.documentElement.getElementsByTagName('marker');
        map.clearOverlays();
        var sidebar = document.getElementById('sidebar');
        sidebar.innerHTML = '';

        if (markers.length == 0) {
            sidebar.innerHTML = 'No results found.';
            map.setCenter(new GLatLng(-24, 133), 4);
            return;
        }

        var bounds = new GLatLngBounds();

        for (var i = 0; i < markers.length; i++) {
            var name = markers[i].getAttribute('name');
            var address = markers[i].getAttribute('address');
            var address2 = markers[i].getAttribute('address2');
            var postcode = markers[i].getAttribute('postcode');
            var phone = markers[i].getAttribute('phone');
            var distance = parseFloat(markers[i].getAttribute('distance'));
            var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
            parseFloat(markers[i].getAttribute('lng')));
            var marker = createMarker(point, name, address, address2, postcode, phone);
            map.addOverlay(marker);
            var sidebarEntry = createSidebarEntry(marker, name, address, distance, address2, postcode, phone);
            sidebar.appendChild(sidebarEntry);
            bounds.extend(point);
        }

        map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
    });
}

function createMarker(point, name, address, address2, postcode, phone) {
    var marker = new GMarker(point);
    var html = '<b>' + name + '</b> <br/>' + address + ', ' + postcode + '<br>' + address2 + '<br>Ph:' + phone;

    GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
    });
    return marker;
}

function createSidebarEntry(marker, name, address, distance, address2, postcode, phone) {
    var div = document.createElement('div');
    var html = '<b>' + name + '</b> (' + distance.toFixed(1) + 'km)<br/>' + address + ', ' + postcode + '<br>' + address2 + '<br>Ph:' + phone;
    div.innerHTML = html;
    div.style.cursor = 'pointer';
    div.style.marginBottom = '5px';

    GEvent.addDomListener(div, 'click', function() {
        GEvent.trigger(marker, 'click');
    });

    GEvent.addDomListener(div, 'mouseover', function() {
        div.style.backgroundColor = '#eee';
    });

    GEvent.addDomListener(div, 'mouseout', function() {
        div.style.backgroundColor = '#fff';
    });

    return div;
}

