/**
 * @author Sampson
 */

/****************************/
/****  Football Markers  ****/
/****************************/
var iconMarkers = new Array();

iconMarkers['red']    = new GIcon(G_DEFAULT_ICON, 'images/football_marker_red.png');
iconMarkers['orange'] = new GIcon(G_DEFAULT_ICON, 'images/football_marker_orange.png');
iconMarkers['yellow'] = new GIcon(G_DEFAULT_ICON, 'images/football_marker_yellow.png');
iconMarkers['green']  = new GIcon(G_DEFAULT_ICON, 'images/football_marker_green.png');
iconMarkers['blue']   = new GIcon(G_DEFAULT_ICON, 'images/football_marker_blue.png');
iconMarkers['purple'] = new GIcon(G_DEFAULT_ICON, 'images/football_marker_purple.png');
iconMarkers['brown']  = new GIcon(G_DEFAULT_ICON, 'images/football_marker_brown.png');

iconMarkers['red'].shadow    = 'images/football_marker_shadow.png';
iconMarkers['orange'].shadow = 'images/football_marker_shadow.png';
iconMarkers['yellow'].shadow = 'images/football_marker_shadow.png';
iconMarkers['green'].shadow  = 'images/football_marker_shadow.png';
iconMarkers['blue'].shadow   = 'images/football_marker_shadow.png';
iconMarkers['purple'].shadow = 'images/football_marker_shadow.png';
iconMarkers['brown'].shadow  = 'images/football_marker_shadow.png';

iconMarkers['red'].iconSize    = new GSize(22, 32);
iconMarkers['orange'].iconSize = new GSize(22, 32);
iconMarkers['yellow'].iconSize = new GSize(22, 32);
iconMarkers['green'].iconSize  = new GSize(22, 32);
iconMarkers['blue'].iconSize   = new GSize(22, 32);
iconMarkers['purple'].iconSize = new GSize(22, 32);
iconMarkers['brown'].iconSize  = new GSize(22, 32);

iconMarkers['red'].shadowSize    = new GSize(46, 28);
iconMarkers['orange'].shadowSize = new GSize(46, 28);
iconMarkers['yellow'].shadowSize = new GSize(46, 28);
iconMarkers['green'].shadowSize  = new GSize(46, 28);
iconMarkers['blue'].shadowSize   = new GSize(46, 28);
iconMarkers['purple'].shadowSize = new GSize(46, 28);
iconMarkers['brown'].shadowSize  = new GSize(46, 28);

iconMarkers['red'].iconAnchor    = new GPoint(11, 32);
iconMarkers['orange'].iconAnchor = new GPoint(11, 32);
iconMarkers['yellow'].iconAnchor = new GPoint(11, 32);
iconMarkers['green'].iconAnchor  = new GPoint(11, 32);
iconMarkers['blue'].iconAnchor   = new GPoint(11, 32);
iconMarkers['purple'].iconAnchor = new GPoint(11, 32);
iconMarkers['brown'].iconAnchor  = new GPoint(11, 32);

iconMarkers['red'].infoWindowAnchor    = new GPoint(11, 1);
iconMarkers['orange'].infoWindowAnchor = new GPoint(11, 1);
iconMarkers['yellow'].infoWindowAnchor = new GPoint(11, 1);
iconMarkers['green'].infoWindowAnchor  = new GPoint(11, 1);
iconMarkers['blue'].infoWindowAnchor   = new GPoint(11, 1);
iconMarkers['purple'].infoWindowAnchor = new GPoint(11, 1);
iconMarkers['brown'].infoWindowAnchor  = new GPoint(11, 1);

function getMarkerColor(strClassName) {
	switch(strClassName)
	{
		case 'AAAA':
			return 'red'
			break;
		case 'AAA':
			return 'blue'
			break;
		case 'AA':
			return 'green'
			break;
		case 'A':
			return 'yellow'
			break;
		case 'City':
			return 'orange'
			break;
		default:
			return 'yellow'
			break;
	}
}



function FootballLegendControl() {
}

FootballLegendControl.prototype = new GControl();

FootballLegendControl.prototype.initialize = function(map) {
  var container = document.createElement("div");
  container.style.border = "1px solid #666666";
  container.style.padding = "3px";

  var divLegend = document.createElement("div");
  divLegend.style.backgroundColor = "white";
  divLegend.style.border = "1px solid #666666";
  divLegend.style.fontSize = "80%";
  divLegend.style.padding = "5px";

  container.appendChild(divLegend);
  divLegend.innerHTML = '<b>Legend:</b><hr style=\"width:100px;\"/>' +
                        '&nbsp;&nbsp;&nbsp;&nbsp;<img src="images/football_marker_red.png" width="11" height="16" /> = AAAA <br/>' +
                        '&nbsp;&nbsp;&nbsp;&nbsp;<img src="images/football_marker_blue.png" width="11" height="16" /> = AAA <br/>' +
                        '&nbsp;&nbsp;&nbsp;&nbsp;<img src="images/football_marker_green.png" width="11" height="16" /> = AA <br/>' +
                        '&nbsp;&nbsp;&nbsp;&nbsp;<img src="images/football_marker_yellow.png" width="11" height="16" /> = A <br/>' +
                        '&nbsp;&nbsp;&nbsp;&nbsp;<img src="images/football_marker_orange.png" width="11" height="16" /> = City';

  map.getContainer().appendChild(container);
  return container;
}

FootballLegendControl.prototype.getDefaultPosition = function() {
  return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(7, 30));
}

// Sets the proper CSS for the given button element.
FootballLegendControl.prototype.setLegendStyle_ = function(legend) {
  legend.style.textDecoration = "underline";
  legend.style.color = "#0000cc";
  legend.style.backgroundColor = "white";
  legend.style.font = "small Arial";
  legend.style.border = "1px solid black";
  legend.style.padding = "2px";
  legend.style.marginBottom = "3px";
  legend.style.textAlign = "center";
  legend.style.width = "6em";
  legend.style.cursor = "pointer";
}

/********************************/
/****  End Football Markers  ****/
/********************************/

// A function to create the marker and set up the event window
function createGamesMarker(point, objGame, strLabelMode, customMarker) {
	var marker = new GMarker(point, customMarker);
	var arrInfoTabs = new Array();

	for(i=0;i<objGame.length;i++)
	{
		var html = "", strLabel = "";
		if(objGame.length > 1)
			html = html + "<div class=\"bubble\">";

		html = html + "<b>" + objGame[i].game_date + "<br/>" + objGame[i].game_time + "</b><hr/>" +
		              "<b>" + objGame[i].away_name + " (" + objGame[i].away_class + ")</b> at <b>"+ objGame[i].home_name + " (" + objGame[i].home_class + ")</b><br/>" +
		              "<b>Stadium: </b>" + objGame[i].stadium_name +
		              "<br> <a href='http://maps.google.com/maps?saddr=&daddr=" + point.toUrlValue() + "+("+objGame[i].stadium_name+")' target ='_blank'>Get Directions</a>";

		if(objGame.length > 1)
			html = html + "</div>";

		if(strLabelMode == "date")
			strLabel = objGame[i].game_date;
		if(strLabelMode == "time")
			strLabel = objGame[i].game_time;

		arrInfoTabs[arrInfoTabs.length] = new GInfoWindowTab(strLabel, html)
	}
	GEvent.addListener(marker, 'click', function() {
		marker.openInfoWindowTabsHtml(arrInfoTabs);
	});
	return marker;
}


// A function to create the marker and set up the event window
function createStadiumsMarker(point, objStadium, customMarker) {
	var marker = new GMarker(point, customMarker);
	var arrInfoTabs = new Array();

	for(i=0;i<objStadium.length;i++)
	{
		var html = "";
		if(objStadium.length > 1)
			html = html + "<div class=\"bubble\">";

		html = html + "<b>" + objStadium[i].hs_name + " (" + objStadium[i].hs_class + ") " + objStadium[i].hs_nickname + "</b><br/>" +
		              "<b>Stadium: </b>" + objStadium[i].name + "<br/>" + objStadium[i].address +
		              "<br> <a href='http://maps.google.com/maps?saddr=&daddr=" + point.toUrlValue() + "+("+objStadium[i].name+")' target ='_blank'>Get Directions</a>";

		if(objStadium.length > 1)
			html = html + "</div>";

		arrInfoTabs[arrInfoTabs.length] = new GInfoWindowTab(objStadium[i].hs_name, html)
	}
	GEvent.addListener(marker, 'click', function() {
		marker.openInfoWindowTabsHtml(arrInfoTabs);
	});
	return marker;
}


// A function to read the data and creates markers in the Games Context
function readGamesMap(url, strCurrViewText, strLabelMode) {
	$('loading').show();
	$('currentView').update("Viewing: Loading...");

	var request = GXmlHttp.create();
	request.open("GET", url, true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			var xmlDoc = GXml.parse(request.responseText);
			// obtain the array of markers and loop through it
			var markers = xmlDoc.documentElement.getElementsByTagName("stadium");

			// hide the info window, otherwise it still stays open where the removed marker used to be
			map.getInfoWindow().hide();

			map.clearOverlays();

			var last_point = new GLatLng(0,0);
			var objGame = new Array();

			for (var i = 0; i < markers.length; i++)
			{
				// obtain the attribues of each marker
				var lat = parseFloat(markers[i].getAttribute("lat"));
				var lng = parseFloat(markers[i].getAttribute("lng"));
				var point = new GLatLng(lat,lng);
				objGame[objGame.length] = {
					game_date: markers[i].getAttribute("game_date"),
					game_time: markers[i].getAttribute("game_time"),
					away_name: markers[i].getAttribute("away_name"),
					away_nickname: markers[i].getAttribute("away_nickname"),
					away_conference: markers[i].getAttribute("away_conference"),
					away_class: markers[i].getAttribute("away_class"),
					home_name: markers[i].getAttribute("home_name"),
					home_nickname: markers[i].getAttribute("home_nickname"),
					home_conference: markers[i].getAttribute("home_conference"),
					home_class: markers[i].getAttribute("home_class"),
					stadium_name: markers[i].getAttribute("stadium_name")
				};
				try
				{
					var color = getMarkerColor(markers[i].getAttribute("home_class"));
					nextPoint = new GLatLng(parseFloat(markers[i + 1].getAttribute("lat")),parseFloat(markers[i + 1].getAttribute("lng")))
					if(!point.equals(nextPoint))
					{
						var newMarker = createGamesMarker(point, objGame, strLabelMode, iconMarkers[color]);
						map.addOverlay(newMarker);
						objGame.clear();
					}
				}
				catch (error)
				{
					var color = getMarkerColor(markers[i].getAttribute("home_class"));
					var newMarker = createGamesMarker(point, objGame, strLabelMode, iconMarkers[color]);
					map.addOverlay(newMarker);
					objGame.clear();
				}
				last_point = point;
			}
			$('loading').hide();
			$('currentView').update(strCurrViewText);
		}
	}
	request.send(null);
}



// A function to read the data and creates markers in the Games Context
function readStadiumsMap(url, strCurrViewText) {
	$('loading').show();
	$('currentView').update("Viewing: Loading...");

	var request = GXmlHttp.create();
	request.open("GET", url, true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			var xmlDoc = GXml.parse(request.responseText);
			// obtain the array of markers and loop through it
			var markers = xmlDoc.documentElement.getElementsByTagName("stadium");

			// hide the info window, otherwise it still stays open where the removed marker used to be
			map.getInfoWindow().hide();

			map.clearOverlays();

			var last_point = new GLatLng(0,0);
			var objStadium = new Array();

			for (var i = 0; i < markers.length; i++)
			{
				// obtain the attribues of each marker
				var lat = parseFloat(markers[i].getAttribute("lat"));
				var lng = parseFloat(markers[i].getAttribute("lng"));
				var point = new GLatLng(lat,lng);
				objStadium[objStadium.length] = {
					name: markers[i].getAttribute("name"),
					address: markers[i].getAttribute("address"),
					hs_name: markers[i].getAttribute("hsname"),
					hs_nickname: markers[i].getAttribute("hsnickname"),
					hs_class: markers[i].getAttribute("hsclass")
				};
				try
				{
					var color = getMarkerColor(markers[i].getAttribute("hsclass"));
					nextPoint = new GLatLng(parseFloat(markers[i + 1].getAttribute("lat")),parseFloat(markers[i + 1].getAttribute("lng")))
					if(!point.equals(nextPoint))
					{
						var newMarker = createStadiumsMarker(point, objStadium, iconMarkers[color]);
						map.addOverlay(newMarker);
						objGame.clear();
					}
				}
				catch (error)
				{
					var color = getMarkerColor(markers[i].getAttribute("hsclass"));
					var newMarker = createStadiumsMarker(point, objStadium, iconMarkers[color]);
					map.addOverlay(newMarker);
					objStadium.clear();
				}
				last_point = point;
			}
			$('loading').hide();
			$('currentView').update(strCurrViewText);
		}
	}
	request.send(null);
}


if (GBrowserIsCompatible()) {
	var i = 0;

	//create the map
	var map = new GMap2(document.getElementById("map"));
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
	map.addControl(new FootballLegendControl());
	map.setCenter(new GLatLng(40.440676262682395, -80.00930786132812), 8);
	map.enableScrollWheelZoom();


	//----- Stop page scrolling if wheel over map ----
	function wheelevent(e)
	{
		if (!e) e = window.event;
		if (e.preventDefault) e.preventDefault();
		e.returnValue = false;
	}

	GEvent.addDomListener(document.getElementById("map"), "DOMMouseScroll", wheelevent);
	document.getElementById("map").onmousewheel = wheelevent;

	//var loadingContainerDiv = document.createElement("div");
	//loadingContainerDiv.setAttribute("id","loadingContainer");

	var loadingDiv = document.createElement("div");
	loadingDiv.setAttribute("id","loading");
	loadingDiv.innerHTML = "<img src=\"/images/ajax-loader.gif\" /><br />Loading...";
	$(loadingDiv).hide();

	//loadingContainerDiv.appendChild(loadingDiv);
	//document.getElementById("map").appendChild(loadingContainerDiv);
	document.getElementById("map").appendChild(loadingDiv);


}
else
{
  alert("Sorry, the Google Maps API is not compatible with this browser");
}
// This Javascript is based on code provided by the
// Blackpool Community Church Javascript Team
// http://www.commchurch.freeserve.co.uk/
// http://www.econym.demon.co.uk/googlemaps/
