var request = null;
var area_markers_request = null;
var markers_request = null;
var map = null;
var manager = null;
var pins = [];

var baseIcon = new GIcon();

function createCustomPin(pinname,point,html,icon,url) {
	if (pinname == 'camping') {
		baseIcon.iconSize = new GSize(20, 11);
		baseIcon.iconAnchor = new GPoint(10, 11); // ICON ANCHOR POSITION
		baseIcon.infoWindowAnchor = new GPoint(0, 0); // INFO WINDOW PLACEMENT
	} else {
		baseIcon.iconSize = new GSize(20, 15);
		baseIcon.iconAnchor = new GPoint(10, 15); // ICON ANCHOR POSITION
		baseIcon.infoWindowAnchor = new GPoint(0, 0); // INFO WINDOW PLACEMENT
	}
	
	var pushpin = new GIcon(baseIcon, '/js_shared/google-maps/'+pinname+'.png', null, null);
	
	var pin = new GMarker(point, pushpin);
	GEvent.addListener(pin, 'mouseover', function() {
 		ew.openOnMarker(pin, html);
 		//pin.openInfoWindowHtml(html);
	});
	GEvent.addListener(pin, 'mouseout', function() {
 		ew.hide();
 		//pin.closeInfoWindow();
	});
	GEvent.addListener(pin, 'click', function() {
 		window.location.href = url;
	});
	return pin;
}

function createPin(point,html,icon,url) {
	baseIcon.iconSize = new GSize(20, 34);
	baseIcon.iconAnchor = new GPoint(10, 34); // ICON ANCHOR POSITION
	baseIcon.infoWindowAnchor = new GPoint(0, 0); // INFO WINDOW PLACEMENT
	
	// JG: changed pin icon
	//var pushpin = new GIcon(baseIcon, '/js_shared/google-maps/custom_pin2.png', null, null);
	var pushpin = new GIcon(G_DEFAULT_ICON);
	pushpin.image = '/js_shared/google-maps/custom_pin2.png';
	
	var pin = new GMarker(point, pushpin);
	GEvent.addListener(pin, 'mouseover', function() {
 		ew.openOnMarker(pin, html);
 		//pin.openInfoWindowHtml(html);
	});
	GEvent.addListener(pin, 'mouseout', function() {
 		ew.hide();
 		//pin.closeInfoWindow();
	});
	GEvent.addListener(pin, 'click', function() {
 		window.location.href = url;
	});
	return pin;
}

function show_area(thisarea) {
	request = GXmlHttp.create();
	request.open('GET', '/google-maps/areas.xml', true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			if (request.status == 404) {
				alert('Map interface not currently available');
			} else {
				var xmlDoc = GXml.parse(request.responseText);
				var areas = xmlDoc.documentElement.getElementsByTagName('area');
				for (var i = 0; i < areas.length; i++) {
					var label = GXml.value(areas[i].getElementsByTagName('label')[0]);
					var lat = parseFloat(GXml.value(areas[i].getElementsByTagName('lat')[0]));
					var lng = parseFloat(GXml.value(areas[i].getElementsByTagName('lng')[0]));
					var zoom = parseInt(GXml.value(areas[i].getElementsByTagName('zoom')[0]));
					if (thisarea == label) {
						map.setCenter(new GLatLng(lat, lng), zoom, G_NORMAL_MAP); // G_NORMAL_MAP, G_SATELLITE_MAP, G_HYBRID_MAP
					}
				}
			}
		}
	}
	request.send(null);
}

function show_pins(thisarea) {
	var pins = [];
	var area_markers_filename = '/google-maps/'+thisarea.toLowerCase()+'.xml';
	area_markers_request = GXmlHttp.create();
	area_markers_request.open('GET', area_markers_filename, true);
	area_markers_request.onreadystatechange = function() {
		if (area_markers_request.readyState == 4) {
			if (area_markers_request.status == 404) {
				alert('Map interface not currently available');
			} else {
				var xmlMarkersDoc = GXml.parse(area_markers_request.responseText);
				var markers = xmlMarkersDoc.documentElement.getElementsByTagName('marker');
				for (var i = 0; i < markers.length; i++) {
					var pin_name = GXml.value(markers[i].getElementsByTagName('name')[0]);
					var lat = parseFloat(GXml.value(markers[i].getElementsByTagName('lat')[0]));
					var lng = parseFloat(GXml.value(markers[i].getElementsByTagName('lng')[0]));
					var zoomstart = parseFloat(GXml.value(markers[i].getElementsByTagName('zoomstart')[0]));
					var zoomend = parseFloat(GXml.value(markers[i].getElementsByTagName('zoomend')[0]));
					var info = GXml.value(markers[i].getElementsByTagName('infowindow')[0]);
					//var html = '<strong>'+pin_name+'</strong><br />Please click the pin for all types of<br />accommodation in this area.';
					var html = pretty(pin_name, 'Please click the pin for all types of<br />accommodation in this area.');
					var url = GXml.value(markers[i].getElementsByTagName('url')[0]);
					var point = new GLatLng(lat, lng);
					var thispin = createPin(point,html,null,url);
					pins.push(thispin);
				}
				manager = new MarkerManager(map);
				manager.addMarkers(pins, 0, 17);
				manager.refresh();
			}
			//show_thumbs();
		}
	}
	area_markers_request.send(null);
}

// This function just makes a pretty table for the EWindow contents
// With a close icon
function pretty(a,b) {
	return '<table id="EWTitle"><tr><td nowrap>' + a + '<\/td><\/tr><\/tr><\/table>';
	// <div style="float: right"><a href="javascript:ew.hide()"><img width="14" height="13" title="Close the EWindow" src="/google-maps/eclose.gif" border=0 style="right: 4px; top: 2px"><\/a></div>
	// <tr><td nowrap><div style="padding: 5px">' + b + '<\/div><\/td><\/tr>
}

function load_map(size, thisarea) {
	if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById('google-map'));
		if (size == 'normal') {
			map.addControl(new GLargeMapControl());
			map.addControl(new GMapTypeControl());
		}

    // Create an EWindow
		ew = new EWindow(map, E_STYLE_7);
		map.addOverlay(ew);

    // ========== Close the EWindow if theres a map click ==========
    GEvent.addListener(map, "click", function(overlay,point) {
			if (!overlay) {
				ew.hide();
			}
		});

		// Other Settings
		map.enableDoubleClickZoom();
		show_area(thisarea);
		show_pins(thisarea);
		$('#loadingmapdiv').html('Click pins on Google Map for accommodation in a town or village.');
	} else
		alert('Sorry, the Google Maps API is not compatible with this browser');
}

function show_custom_pins(mapname) {
	var pins = [];
	var markers_filename = '/google-maps/'+mapname.toLowerCase()+'.xml';
	markers_request = GXmlHttp.create();
	markers_request.open('GET', markers_filename, true);
	markers_request.onreadystatechange = function() {
		if (markers_request.readyState == 4) {
			if (markers_request.status == 404) {
				alert('Map interface not currently available');
			} else {
				var xmlMarkersDoc = GXml.parse(markers_request.responseText);
				var markers = xmlMarkersDoc.documentElement.getElementsByTagName('marker');
				for (var i = 0; i < markers.length; i++) {
					var pin_name = GXml.value(markers[i].getElementsByTagName('name')[0]);
					var lat = parseFloat(GXml.value(markers[i].getElementsByTagName('lat')[0]));
					var lng = parseFloat(GXml.value(markers[i].getElementsByTagName('lng')[0]));
					var zoomstart = parseFloat(GXml.value(markers[i].getElementsByTagName('zoomstart')[0]));
					var zoomend = parseFloat(GXml.value(markers[i].getElementsByTagName('zoomend')[0]));
					var info = GXml.value(markers[i].getElementsByTagName('infowindow')[0]);
					//var html = '<strong>'+pin_name+'</strong><br />Please click the pin for all types of<br />accommodation in this area.';
					var html = pretty(pin_name, 'Please click the pin for all types of<br />accommodation in this area.');
					var url = GXml.value(markers[i].getElementsByTagName('url')[0]);
					var point = new GLatLng(lat, lng);
					var thispin = createCustomPin(mapname,point,html,null,url);
					pins.push(thispin);
				}
				manager = new MarkerManager(map);
				manager.addMarkers(pins, 0, 17);
				manager.refresh();
			}
		}
	}
	markers_request.send(null);
}

function load_custom_map(mapname, size, siteid) {
	if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById('google-map'));
		if (size == 'normal') {
			map.addControl(new GLargeMapControl());
			map.addControl(new GMapTypeControl());
		}

    // Create an EWindow
		ew = new EWindow(map, E_STYLE_7);
		map.addOverlay(ew);

    // ========== Close the EWindow if theres a map click ==========
    GEvent.addListener(map, "click", function(overlay,point) {
			if (!overlay) {
				ew.hide();
			}
		});

		// Other Settings
		map.enableDoubleClickZoom();
		if (siteid == 2) {
			map.setCenter(new GLatLng(50.800000, -3.500000), 9, G_NORMAL_MAP); // G_NORMAL_MAP, G_SATELLITE_MAP, G_HYBRID_MAP
		} else {
			map.setCenter(new GLatLng(50.380502, -4.935608), 9, G_NORMAL_MAP); // G_NORMAL_MAP, G_SATELLITE_MAP, G_HYBRID_MAP
		}
		show_custom_pins(mapname);
		$('#loadingmapdiv').html('Click pins on Google Map for accommodation in a town or village.');
	} else
		alert('Sorry, the Google Maps API is not compatible with this browser');
}
