var queryhash = window.location.hash;
var loc;
var dir;
var map;
var mylist;
var shouldZoom = 1;
var rtcIcon;
var markerIcon;
var addressMarker;
var markerOptions;
var dcMark;
var nyMark;
var chMark;
var dcLoc;
var nyLoc;
var chLoc;
var dcInfo = "<p><strong>RTCRM Headquarters</strong><br/>"
           + "1055 Thomas Jefferson Street NW<br/>"
           + "Suite 200<br/>"
           + "Washington, DC 20007</p>";
var nyInfo = "<p><strong>RTCRM New York Office</strong><br/>"
           + "285 Madison Avenue<br/>"
           + "17<sup>th</sup> Floor<br/>"
           + "New York, NY 10017</p>";
var chInfo = "<p><strong>RTCRM Chicago Office</strong><br/>"
           + "233 N Michigan Avenue<br/>"
           + "17<sup>th</sup> Floor<br/>"
           + "Chicago, IL 60601</p>";
           
var locInfo = {
	address: {
		dc: "1055 Thomas Jefferson St. NW, Washington, DC 20007",
		ny: "285 Madison Ave., New York, NY 10017"
		//ch: "233 N Michigan Ave., Chicago, IL 60601"
	},
	example: {
		dc: "48 N Rotary Rd, Arlington, VA 22202",
		ny: "27 W 33rd St, New York, NY 10001"
		//ch: "233 S Wacker Dr, Chicago, IL 60606"
	}
}

function directions() {
	switch (queryhash) {
		case "#washington":
			loc = "dc";
			break;
		case "#new-york":
			loc = "ny";
			break;
		/*case "#chicago":
			loc = "ch";
			break;*/
		default:
			shouldZoom = 0;
			loc = "dc";
			break;
	}
	google.load("maps", "2", {"callback" : initialize});
	$("#contentNav a").bind("click", handleClick);
}

function handleClick(e){
	$("#contentNav a.sel").removeClass("sel");
	$(this).addClass("sel");
	loc = $(this).attr("id");
	if ($('.header h3').length >= 1) {
		$(".header h3").text($(this).attr("title")).removeClass("sIFR-replaced");
	} else {
		$('.header').append("<h3>"+$(this).attr("title")+"</h3>");
	}
	$("#directions span#example").text("ENTER YOUR ADDRESS (e.g., "+eval("locInfo.example."+loc)+")").removeClass("sIFR-replaced");
	$("#list:visible").empty();
	
	replaceH3();
	replaceExample();
	$("#list.list, #map.list").removeClass("list");
	map.checkResize();
	centerCity(loc,13);
	$("input#toAddress").attr("value", eval("locInfo.address."+loc));
}

function initialize() {
	if (google.maps.BrowserIsCompatible()) {
		map = new google.maps.Map2($("#map")[0]);
		mylist = $("#list")[0];
		dir = new google.maps.Directions(map, mylist);
		dcLoc = new google.maps.LatLng(38.903762, -77.059765);
		nyLoc = new google.maps.LatLng(40.7521678, -73.9797565);
		//chLoc = new google.maps.LatLng(41.8862141, -87.6244561);
		
		map.addControl(new google.maps.MapTypeControl());
		map.addControl(new google.maps.SmallMapControl());
		
		map.setCenter(new google.maps.LatLng(39.926588, -75.344238), 6);
		
		switch (queryhash) {
			case "":
				map.setCenter(new google.maps.LatLng(39.926588, -75.344238), 6);
				break;
			default:
				map.setCenter(eval(loc+"Loc"), 13);
				break;
		}
		
		
		google.maps.Event.addListener(dir, "addoverlay", onDirectionsLoad);
		google.maps.Event.addListener(dir, "error", handleErrors);
		


		overlays();
	}
}
function overlays() {
	// Create a base icon for all of our markers that specifies the
	// shadow, icon dimensions, etc.
	rtcIcon = new google.maps.Icon(G_DEFAULT_ICON);
	rtcIcon.image = "/img/mapMarker2.png";
	rtcIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
	rtcIcon.iconSize = new google.maps.Size(25, 43);
	rtcIcon.shadowSize = new google.maps.Size(47, 43);
	rtcIcon.iconAnchor = new google.maps.Point(12, 43);
	rtcIcon.infoWindowAnchor = new google.maps.Point(12, 2);
	addressMarker = new google.maps.Icon(rtcIcon);
	markerOptions = { icon:addressMarker };
	
	dcMark = new google.maps.Marker(dcLoc, markerOptions);
	nyMark = new google.maps.Marker(nyLoc, markerOptions);
	//chMark = new google.maps.Marker(chLoc, markerOptions);	
	
	map.addOverlay(dcMark);
	map.addOverlay(nyMark);
	//map.addOverlay(chMark);
	
	google.maps.Event.addListener(dcMark,"click",function(){
		$("#contentNav a#dc").click()
	});
	google.maps.Event.addListener(nyMark,"click",function(){
		$("#contentNav a#ny").click()
	});
	/*google.maps.Event.addListener(chMark,"click",function(){
		$("#contentNav a#ch").click()
	});*/
	
	if (shouldZoom==1) {
		$("#contentNav a#"+loc).click();
	}
}

var center = function() {
	centerCity(loc,13);
};

function centerCity(city, zoom) {
	dir.clear();
	if (city == "ny") {
		nyMark.show();
		map.setCenter(nyLoc, zoom);
		nyMark.openInfoWindowHtml(nyInfo);
	}
	/*if (city == "ch") {
		chMark.show();
		map.setCenter(chLoc, zoom);
		chMark.openInfoWindowHtml(chInfo);
	}*/
	if (city == "dc") {
		dcMark.show();
		map.setCenter(dcLoc, zoom);
		dcMark.openInfoWindowHtml(dcInfo);
	}
}

function setDirections(fromAddress, toAddress, locale, city) {
	$("#list, #map").addClass("list");
	dir.load("from: " + fromAddress + " to: " + toAddress, {
		"locale": locale
	});
	map.checkResize();
}
function handleErrors() {
	if (dir.getStatus().code == G_GEO_UNKNOWN_ADDRESS) alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + dir.getStatus().code);
	else if (dir.getStatus().code == G_GEO_SERVER_ERROR) alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + dir.getStatus().code);
	else if (dir.getStatus().code == G_GEO_MISSING_QUERY) alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + dir.getStatus().code);
	else if (dir.getStatus().code == G_GEO_BAD_KEY) alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + dir.getStatus().code);
	else if (dir.getStatus().code == G_GEO_BAD_REQUEST) alert("A directions request could not be successfully parsed.\n Error code: " + dir.getStatus().code);
	else alert("An unknown error occurred.");
	$("#list, #map").removeClass("list");
	dcMark.show();
	nyMark.show();
	//chMark.show();
	map.checkResize();
}
function onDirectionsLoad() {
	map.closeInfoWindow();
	dcMark.hide();
	nyMark.hide();
	//chMark.hide();
}
