var map;
var markers = new Array();

var updateMap = true;
var aryIcon = new Array();

var hotelStar = '0';
	
for (x = 0; x < 6; x++) {
		
	hotelStar = x;
		
	if (x == 0){
		hotelStar = 'u';
	}
	
	var icon = new GIcon();
	icon.image = "/images/icons/" + hotelStar + "-star-icon.png";
	icon.shadow = "/images/icons/icon-shadow.png";
	icon.iconSize = new GSize(20, 34);
	icon.shadowSize = new GSize(37, 34);
	icon.iconAnchor = new GPoint(10, 34);
	icon.infoWindowAnchor = new GPoint(5, 1);
		
	aryIcon[x] = icon;
}

function init_map()
{
	if (!GBrowserIsCompatible())
		return;
	
	map = new GMap2(document.getElementById("map"));	
		
	var url = '/scripts/get-loc-details.htm?locId=' + locId;
		
	var request = GXmlHttp.create();

	request.open("GET", url, true);	
	
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			var xmlContent = request.responseXML;
			var rootElement = xmlContent.documentElement;
			lat = parseFloat(rootElement.getAttribute("lat"));
			lng = parseFloat(rootElement.getAttribute("lng"));
			zoom = parseFloat(rootElement.getAttribute("zoom"));
			
			map.setCenter(new GLatLng(lat, lng), zoom);
		
			map.setUIToDefault();
			
			//map.addControl(new GLargeMapControl());
	//		map.addControl(new GSmallMapControl());
	//		map.addControl(new GMapTypeControl());
			//map.addControl(new GOverviewMapControl());
			//GEvent.addListener(map, "dragend", update_map);
			//GEvent.addListener(map, "zoomend", update_map);
			//GEvent.addListener(map, "click", function (overlay, point) {show_click_pos(overlay, point)});
			GEvent.addListener(map, "moveend", update_map);
			
			update_map();
		}
	}

	request.send(null);	
}

function update_map()
{
	if (!updateMap)
		return;
	
	var zoomLevel = map.getZoom();
	var bounds = map.getBounds();
	var ne = bounds.getNorthEast();
	var sw = bounds.getSouthWest();
	var neLat = ne.lat();
	var neLng = ne.lng();
	var swLat = sw.lat();
	var swLng = sw.lng();

	var minLat = swLat;
	var maxLat = neLat;
	var minLng = swLng;
	var maxLng = neLng;

	var mapInfo = document.getElementById("mapinfo");
	mapInfo.innerHTML = '<span class="redbgtext">Updating hotels</span>';

	var url = '/scripts/get-hotels.htm?zoom=' + zoomLevel + '&locid=' + locId + '&minLat=' + minLat + '&maxLat=' + maxLat + '&minLng=' + minLng + '&maxLng=' + maxLng;

	var request = GXmlHttp.create();

	request.open("GET", url, true);	
	
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			mapInfo.innerHTML = '<span class="redbgtext">Processing hotels</span>';
			
			var xmlContent = request.responseXML;
			var hotels = new Array();
			
			var availHotels = xmlContent.documentElement.getAttribute("avail");			
			hotels = xmlContent.documentElement.getElementsByTagName("hotel");
			var msg = '';
			
			map.clearOverlays();
			
			for (x=0; x < hotels.length; x++) {
				add_marker(hotels[x]);
			}
	
			if (availHotels > hotels.length) {
				//msg = url + '<br>Avail: ' + availHotels + ' Showing: ' + hotels.length;
				msg += '<div>More hotels available - zoom in to see them.</div>';
			}
	
			mapInfo.innerHTML = msg;	
		}
	}

	request.send(null);	
}

function add_marker(hotel)
{
	var hotelId = hotel.getAttribute("hid");
	var hotelName = hotel.getElementsByTagName("hotelname")[0].childNodes[0].nodeValue;
	var hotelURL = hotel.getElementsByTagName("hotelURL")[0].childNodes[0].nodeValue;
	var text = hotel.getElementsByTagName("text")[0].childNodes[0].nodeValue;
	var hotelStar = hotel.getElementsByTagName("star")[0].childNodes[0].nodeValue;
	var starImage = hotel.getElementsByTagName("starimage")[0].childNodes[0].nodeValue;
	var hotelImage = hotel.getElementsByTagName("image")[0].childNodes[0].nodeValue;
	var hotelLat = parseFloat(hotel.getElementsByTagName("lat")[0].childNodes[0].nodeValue);
	var hotelLng = parseFloat(hotel.getElementsByTagName("lng")[0].childNodes[0].nodeValue);

	if (hotelStar == 0) {
		hotelStar = 'u';
	}
		
	var point = new GLatLng(hotelLat, hotelLng);
	var marker = new GMarker(point, aryIcon[hotelStar]);

	var infoWindowHtml = '<div class="item" style="width: 200px; background-image: url(\'' + hotelImage + '\'); background-position: top left; background-repeat: no-repeat; padding: 5px 5px 5px 75px"><div><span style="font-weight: bold">' + hotelName + '</span></div><div>' + starImage + '</div><div>' + text + ' <a href="' + hotelURL + '">More</a></div>';
	
	GEvent.addListener(marker, "click", function(){marker.openInfoWindowHtml(infoWindowHtml);});
	//GEvent.addListener(marker, "mouseover", function(){marker.openInfoWindow(hotelName)});
	//GEvent.addListener(marker, "mouseout", function(){marker.openInfoWindow(hotelName)});
	
	map.addOverlay(marker);
}

function show_hotel(hotelId)
{
	updateMap = false;
	map.clearOverlays();
	
	var url = '/scripts/get-hotel-details.htm?hotelId=' + hotelId;
	var request = GXmlHttp.create();
	request.open("GET", url, true);	
	
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			
			var xmlContent = request.responseXML;
			var rootElement = xmlContent.documentElement;
			var hotelName = rootElement.getElementsByTagName('name')[0].firstChild.nodeValue;
			var hotelURL = rootElement.getElementsByTagName('url')[0].firstChild.nodeValue;
			var text = rootElement.getElementsByTagName("text")[0].childNodes[0].nodeValue;
			var starRating = rootElement.getElementsByTagName('star')[0].firstChild.nodeValue;
			var starImage = rootElement.getElementsByTagName('starimage')[0].firstChild.nodeValue;
			var image = rootElement.getElementsByTagName('image')[0].firstChild.nodeValue;
			var lat = parseFloat(rootElement.getElementsByTagName('lat')[0].firstChild.nodeValue);
			var lng = parseFloat(rootElement.getElementsByTagName('lng')[0].firstChild.nodeValue);
			var zoom = parseFloat(rootElement.getElementsByTagName('zoom')[0].firstChild.nodeValue);
			
			map.setCenter(new GLatLng(lat, lng), zoom);
						
			var point = new GLatLng(lat, lng);
			var marker = new GMarker(point);
			map.addOverlay(marker);
			
			var infoWindowHtml = '<div class="item" style="width: 200px; background-image: url(\'' + image + '\'); background-position: top left; background-repeat: no-repeat; padding: 5px 5px 5px 75px"><div><span style="font-weight: bold">' + hotelName + '</span></div><div>' + starImage + '</div><div>' + text + ' <a href="' + hotelURL + '">More</a></div></div>';
			marker.openInfoWindowHtml(infoWindowHtml);
		}
	}
	
	request.send(null);
	
	var mapInfo = document.getElementById("mapinfo");
	mapInfo.innerHTML = '<span style="text-decoration: underline; cursor: pointer;" onclick="updateMap=true; update_map();">Show all hotels</span>';
}
