google.load("maps","2");
var baseIcon;
var wtIcon;
var parkingIcon;
var wtMarkerOptions; 
var map;
var gdir;
var allmarkers = new Array();
var defaultmsg = null;

function gmapsinit()
{
	wtIconInit();
	wtControlsInit();
	map = new google.maps.Map2(document.getElementById("map"));
	gdir = new google.maps.Directions(map, document.getElementById("directiontext"));
	google.maps.Event.addListener(gdir,"error",handleErrors);
	map.setCenter(new google.maps.LatLng(47.62123575134853,-122.35392093658447),15);
	map.addControl(new google.maps.SmallMapControl());
	map.addControl(new WTMarkerControls);
	var wtPoint = new google.maps.LatLng(47.61845876515143, -122.35722541809082);
	$("input#getdirections").attr("disabled","");
	map.addOverlay(createMarker(wtPoint, "1"));
}

function wtIconInit()
{
	baseIcon = new google.maps.Icon();
	baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
	baseIcon.iconSize = new google.maps.Size(30, 41);
	baseIcon.shadowSize = new google.maps.Size(60, 41);
	baseIcon.iconAnchor = new google.maps.Point(9, 34);
	baseIcon.infoWindowAnchor = new google.maps.Point(9, 2);
	baseIcon.infoShadowAnchor = new google.maps.Point(20, 35);
	wtIcon = new google.maps.Icon(baseIcon);
	wtIcon.image = "/interface/images/wticon.png";
	wtMarkerOptions = {icon:wtIcon};
	parkingIcon = new google.maps.Icon(baseIcon);
	parkingIcon.image = "/interface/images/parkingicon.png";
	parkingMarkerOptions = {icon:parkingIcon};
	
}

function WTMarkerControls(){}

function wtControlsInit()
{
	WTMarkerControls.prototype = new google.maps.Control();

	WTMarkerControls.prototype.initialize = function(map)
	{
		var container = document.createElement("div");
		var trafficDiv = document.createElement("div");
		trafficDiv.className = "mapbutton";
		container.appendChild(trafficDiv);
		trafficDiv.id = "trafficbutton";		
		trafficImg = document.createElement("img");
		trafficImg.src = "/interface/images/trafficiconsmall.png";
		trafficDiv.appendChild(trafficImg);
		trafficDiv.appendChild(document.createTextNode("Traffic"));
		google.maps.Event.addDomListener(trafficDiv,"click",function(){markerSwap("traffic")});

		var parkingDiv = document.createElement("div");
		parkingDiv.className = "mapbutton";
		parkingDiv.id = "parkingbutton";
		container.appendChild(parkingDiv);
		parkingImg = document.createElement("img");
		parkingImg.src = "/interface/images/parkingiconsmall.png";
		parkingDiv.appendChild(parkingImg);
		parkingDiv.appendChild(document.createTextNode("Parking"));
		google.maps.Event.addDomListener(parkingDiv,"click", function(){markerSwap("parking")});

		var officeDiv = document.createElement("div");
		officeDiv.className = "mapbutton selected";
		container.appendChild(officeDiv);
		officeDiv.id = "officebutton";
		officeImg = document.createElement("img");
		officeImg.src = "/interface/images/wticonsmall.png";
		officeDiv.appendChild(officeImg);
		officeDiv.appendChild(document.createTextNode("Office"));
		google.maps.Event.addDomListener(officeDiv,"click",function(){markerSwap("office")});

		map.getContainer().appendChild(container);
		return container;

	}
}

function markerSwap(swap)
{
	$("div.mapbutton").removeClass("selected");
	removeParking();
	switch(swap)
	{
		case "office":
			map.setCenter(new google.maps.LatLng(47.62123575134853,-122.35392093658447),15);
			$("div#officebutton").addClass("selected");
			break
		case "parking":
			map.setCenter(new google.maps.LatLng(47.62123575134853,-122.35392093658447),15);
			$("div#parkingbutton").addClass("selected");
			addParking();
			break
		case "traffic":
			map.setCenter(new google.maps.LatLng(47.62421506209665, -122.30049133300781),12);
			map.addOverlay(new google.maps.TrafficOverlay(),"traffic");
			$("div#trafficbutton").addClass("selected");
			break
		default:
	}
}

function addMarker(lat,lng,title,content,type)
{
	var point = new google.maps.LatLng(lat,lng);
	var marker = new google.maps.Marker(point,type);
	var overlay = map.addOverlay(marker);
	allmarkers.push(marker);
	var html = "<h4>" + title + "</h4><p>" + content + "</p";
	GEvent.addListener(marker,"click",function() {
		marker.openInfoWindowHtml(html);
	});
}

function createMarker(point,index)
{	
	var wtMarker = new google.maps.Marker(point, wtMarkerOptions);
	return wtMarker;
}


function addParking()
{
	map.setCenter(new google.maps.LatLng(47.619948520878076,-122.35514402389526), 16);
	var themarkers = wtMarkers.parking;
	for (var i=0;i<themarkers.length;i++)
	{
		addMarker(themarkers[i].lat,themarkers[i].lng,themarkers[i].title,themarkers[i].description,parkingMarkerOptions);

	}	
}

function removeParking()
{
	for(i=0;i<allmarkers.length;i++)
	{
		map.removeOverlay(allmarkers[i]);
	}
}

function getDirections()
{
	var from = $("input#fromaddr").val();
	gdir.load("from: " + from + " to: " +  "3131 Western Ave, Seattle, WA 98121","en_US");
	
	if (defaultmsg != null)
	{
		$("form#directionform p").text(defaultmsg);		
	}

}

function handleErrors()
{
	var msg = "Sorry, we could not recognize that address. Please re-enter.";
	var errorcode = gdir.getStatus().code;
	switch(errorcode)
	{
		case G_GEO_UNKNOWN_ADDRESS:
			msg = "Could not find that address.";
			break
		case G_GEO_SERVER_ERROR:
			msg = "Sorry, there was a server error. Please try again.";
			break
		case G_GEO_BAD_REQUEST:
			msg = "Could not recognize that address, please re-enter"
			break			
	}

	if (defaultmsg == null)
	{
		defaultmsg = $("form#directionform p").text();
	}
	$("form#directionform p").text(msg);
	
}

google.setOnLoadCallback(gmapsinit);
$(document).ready(function(){
	$("form#directionform").bind("submit",function(){
		getDirections();
		return false;
s	});
});