//alert(document.body.clientWidth);
/*
-- To Do list --
resize map or remove global nav - minor touchups still necessary
search and replace ' and "
add filter options
*/
var map;
var MapListContent = '<p>Click name to find on map.</p>';
var MarkerArray = new Array();
var InfoContent = new Array();
var Restaurants = new Array();

// Create a base icon for all of our markers that specifies the shadow, icon, dimensions, etc.
var baseIcon = new GIcon();
baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);
baseIcon.infoShadowAnchor = new GPoint(18, 25);

// Alphabetically sort a two dimensional array
function CompareNames (a, b) {
	return a.name < b.name ? -1 : a.name == b.name ? 0 : 1;
}

if (GBrowserIsCompatible()) {
	function onLoad() {

		ResizeMap()
	
		// Monitor the window resize event and let the map know when it occurs
		if (window.attachEvent) {
			window.attachEvent("onresize", function() {ResizeMap()} );
		} else {
			window.addEventListener("resize", function() {ResizeMap()}, false);
		}

		map = new GMap2(document.getElementById("MapWindow"));
		map.addControl(new GLargeMapControl());
		map.setCenter(new GLatLng(33.4363, -111.9506), 11);
		map.enableDoubleClickZoom();
		map.enableContinuousZoom();

		var request = GXmlHttp.create();
		request.open("GET", "FoodMap.xml", true);
		request.onreadystatechange = function() {
			if (request.readyState == 4) {
				var xmlDoc = request.responseXML;
				var locations = xmlDoc.getElementsByTagName('location');
				var points = xmlDoc.documentElement.getElementsByTagName("marker");
				var info = xmlDoc.documentElement.getElementsByTagName("info");	
	
				Restaurants[locations.length - 1] = '';
	
				for (var i = 0; i < locations.length; i++) {
					Restaurants[i] = new Array(9)
				}
	
				for (var i = 0; i < locations.length; i++) {
					Restaurants[i]["lat"] = parseFloat(points[i].getAttribute("lat"))
					Restaurants[i]["lng"] = parseFloat(points[i].getAttribute("lng"))
					Restaurants[i]["info"] = info[i]
					Restaurants[i]["locationtype"] = info[i].getElementsByTagName("type")[0].firstChild.nodeValue
					Restaurants[i]["cuisine"] = info[i].getElementsByTagName("cuisine")[0].firstChild.nodeValue
					Restaurants[i]["name"] = info[i].getElementsByTagName("name")[0].firstChild.nodeValue
					Restaurants[i]["city"] = info[i].getElementsByTagName("city")[0].firstChild.nodeValue
					Restaurants[i]["state"] = info[i].getElementsByTagName("state")[0].firstChild.nodeValue
					Restaurants[i]["good"] = info[i].getElementsByTagName("good")[0].firstChild.nodeValue
				}

				Restaurants.sort(CompareNames);
				for (var i = 0; i < Restaurants.length; i++) {
					var point = new GLatLng(Restaurants[i]["lat"], Restaurants[i]["lng"]);
					var marker = createMarker(point, i, Restaurants[i]["locationtype"], Restaurants[i]["name"], Restaurants[i]["info"]);
					map.addOverlay(marker);
					MarkerArray[i] = marker;
					//InfoContent[i] = Restaurants[i]["info"];
					MapListContent += '<a href="javascript:ShowRestaurant(' + i + ')">' + Restaurants[i]["name"] + '</a> (' +  Restaurants[i]["city"] + ', ' + Restaurants[i]["state"] + ')<br>Cuisine: ' + Restaurants[i]["cuisine"] + '<p>';
				}
			
				document.getElementById("MapList").innerHTML = MapListContent;
			}
		}
	
		request.send(null);
	}
} else {
	alert('Unfortunately this map will not work on your browser');
}

function createMarker(point, i, locationtype, ToolTip, RestaurantInfo) {
	var icon = new GIcon(baseIcon);
	if (locationtype.indexOf("Restaurant") > -1) {
		icon.image = "/images/markerA.png";
	} else {
		icon.image = "/images/markerB.png";
	}

	var Options = {title:ToolTip, icon:icon}
	//var marker = new GMarker(point, icon);
	var marker = new GMarker(point, Options);
	
	// Our info window content
	var infoTabs = [
		new GInfoWindowTab('Restaurant', RestaurantHTML(RestaurantInfo)),
		new GInfoWindowTab('Recs', RecommendationsHTML(RestaurantInfo))
		//new GInfoWindowTab('Recommendations', RecommendationsHTML(RestaurantInfo))
	];
	InfoContent[i] = infoTabs;
	
	GEvent.addListener(marker, "click", function() {
		ShowRestaurant(i);
		//marker.openInfoWindowXslt(info, "FoodMap.xsl");
		marker.openInfoWindowTabsHtml(infoTabs, {maxWidth:300});
	});
	return marker;
}

function RestaurantHTML(RestaurantInfo) {
	var name = RestaurantInfo.getElementsByTagName("name")[0].firstChild.nodeValue;
	
	var RestaurantHTML = '<div style="padding-top: 10px;"><span style="font-size: 12pt; font-weight:bold;">' + name + '</span>';
	RestaurantHTML += ' (<a href="javascript:SearchLink(\'' + name.replace(/\'/g, '~') + '\')">Related posts</a>)'
	
	var cuisine = RestaurantInfo.getElementsByTagName("cuisine")[0].firstChild.nodeValue
	if (cuisine != 'n/a') {
		RestaurantHTML += '<br />Cuisine: ' + cuisine
	}

	var url = RestaurantInfo.getElementsByTagName("url")[0].firstChild.nodeValue
	RestaurantHTML += '<p style="font-size:10pt;">'
	if (url != 'n/a') {
		RestaurantHTML += '<a href="' + url + '" target="_blank">' + url + '</a><br />'
	}
	RestaurantHTML += RestaurantInfo.getElementsByTagName("address")[0].firstChild.nodeValue + '<br />'
	RestaurantHTML += RestaurantInfo.getElementsByTagName("city")[0].firstChild.nodeValue + ', ' + RestaurantInfo.getElementsByTagName("state")[0].firstChild.nodeValue + '<br />'
	RestaurantHTML += RestaurantInfo.getElementsByTagName("phone")[0].firstChild.nodeValue
	RestaurantHTML += '</p></div>'

	return RestaurantHTML
}

function RecommendationsHTML(RestaurantInfo) {
	var RecommendationsHTML = '';
	var good, bad;
	good = RestaurantInfo.getElementsByTagName("good")[0].firstChild.nodeValue;
	bad = RestaurantInfo.getElementsByTagName("bad")[0].firstChild.nodeValue;

	if (good != 'n/a') {
		RecommendationsHTML += '<div style="padding-top: 10px;"><strong>Recommended Items</strong>: ' + good + '</div>'
	}

	if (bad != 'n/a') {
		RecommendationsHTML += '<p><strong>Terrible Items</strong>: ' + bad + '</p>'
	}

	return RecommendationsHTML;
}

function ShowRestaurant(i) {
	//MarkerArray[i].openInfoWindowXslt(InfoContent[i], 'FoodMap.xsl');
	MarkerArray[i].openInfoWindowTabsHtml(InfoContent[i], {maxWidth:300});
}

function HideNav() {

	// hide the navigation
	document.getElementById("SideBar").style.visibility = 'hidden';
	var x = document.getElementsByTagName('span');
	for (var i=0; i < x.length; i++)
	{
		if (x[i].className == 'GlobalNav') {
			x[i].className = 'HiddenStuff';
		}
	}
}

function ShowNav() {

	// make the navigation visible
	document.getElementById("SideBar").style.visibility = 'visible';
	var x = document.getElementsByTagName('span');
	for (var i=0; i < x.length; i++)
	{
		if (x[i].className == 'HiddenStuff') {
			x[i].className = 'GlobalNav';
		}
	}
}

function ResizeMap() {
	var MapWindow = document.getElementById("MapWindow");
	var MapList = document.getElementById("MapList");

	if (parseFloat(document.body.clientWidth) > 859) {
		ShowNav()

		// make things smaller/bigger
		MapList.style.width = parseFloat(300) + 'px';
		MapWindow.style.width = parseFloat(document.body.clientWidth - 640) + 'px';
	} else {
		HideNav()
		
		// make things smaller/bigger
		//document.getElementById("CommentaryStuff").style.width = parseFloat(document.body.clientWidth - 50) + 'px';
		MapList.style.width = parseFloat(200) + 'px';

		if (parseFloat(document.body.clientWidth - 250) > 350) {
			MapWindow.style.width = parseFloat(document.body.clientWidth - 250) + 'px';
		} else {
			MapWindow.style.width = parseFloat(350) + 'px';
		}
	}
}

function SearchLink(RestaurantName) {
	window.open('http://search.atomz.com/search/?sp-a=sp100320d7&sp-p=all&sp-f=ISO-8859-1&x=0&y=0&sp-q=' + RestaurantName.replace(/ /, '%20'))
}

function SearchList() {

	var SearchTerm = document.getElementById('SearchText').value;
	document.getElementById('SearchText').value = '';

	map.clearOverlays();
	var MapListContent = '<p>Click name to find on map.</p>';
	document.getElementById("MapList").innerHTML = MapListContent;

	if (SearchTerm != '') {
		for (var i = 0; i < Restaurants.length; i++) {
			if (Restaurants[i]["good"].indexOf(SearchTerm) > -1) {
				map.addOverlay(MarkerArray[i]);
				MapListContent += '<a href="javascript:ShowRestaurant(' + i + ')">' + Restaurants[i]["name"] + '</a> (' +  Restaurants[i]["city"] + ', ' + Restaurants[i]["state"] + ')<br>Cuisine: ' + Restaurants[i]["cuisine"] + '<p>';
			}
		}
	} else {
		for (var i = 0; i < Restaurants.length; i++) {
			map.addOverlay(MarkerArray[i]);
			MapListContent += '<a href="javascript:ShowRestaurant(' + i + ')">' + Restaurants[i]["name"] + '</a> (' +  Restaurants[i]["city"] + ', ' + Restaurants[i]["state"] + ')<br>Cuisine: ' + Restaurants[i]["cuisine"] + '<p>';
		}
	}

	document.getElementById("MapList").innerHTML = MapListContent;
}

function CaptureKeystrokes(field, event) {

	var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;

	// capture enter
	if (keyCode == 13) {
		SearchList();
		return false;
	} else if (keyCode == 32) {
		// capture space
		alert("This search is so simple it's only accurate for one word.");
		return false;
	} else {
		return true;
	}
}
