/**
 * Creator: khastie
 * Date: Aug 7, 2009
 * Time: 2:33:53 PM
 * Contents are property of Cappex.com LLC, and strictly confidential.
 */

/* these vars must be initialized in the enclosing page:

   var collegeAddress = "${collegeProfile.addr}, ${collegeProfile.city}, ${collegeProfile.stabbr}, ${collegeProfile.zip}";
   var collegeAddressNoStreet = "${collegeProfile.city}, ${collegeProfile.stabbr}, ${collegeProfile.zip}";
   var collegeAddressZip = "${collegeProfile.zip}";
   var studentAddress = "${student.address1}, ${student.city}, ${student.state}, ${student.zipcode}";
   var studentAddressNoStreet = "${student.city}, ${student.state}, ${student.zipcode}";
   var studentAddressZip = "${student.zipcode}";
*/

var map;
var directions;
var numPreviousDirectionsErrors = 0;
var geocoder;
var point;
var latLng;
var svOverlay;

function initializeMap() {

	if (typeof(GBrowserIsCompatible) != 'undefined' && GBrowserIsCompatible()) {
		map = new GMap2($("map_canvas"));
		map.setUIToDefault();
		// map.addControl(new GSmallMapControl());
		// map.addControl(new GMapTypeControl());
		// map.removeMapType(G_HYBRID_MAP);

		geocoder = new GClientGeocoder();
		latLng = geocoder.getLatLng(collegeAddress, function(thePoint) {
			if (!thePoint) {
				$('mapMsg').innerHTML = "<b>Sorry, no map available.</b>";
			} else {
				map.setCenter(thePoint, 6, G_PHYSICAL_MAP);
				var marker = new GMarker(thePoint);
				map.addOverlay(marker);
				directions = new GDirections(map);
				svOverlay = new GStreetviewOverlay();
				point = thePoint;

				GEvent.addListener(directions, "load", function() {

					map.setMapType(G_NORMAL_MAP);

					if (numPreviousDirectionsErrors == 0) {
						global.debug('directions loaded with no errors');
						$("mapMsg").innerHTML = '<b>' + directions.getDistance().html + '</b>';
					} else if (numPreviousDirectionsErrors == 1) {
						global.debug('directions loaded after 1 error');
						$('mapMsg').innerHTML = '<b>Approximately</b> ' +
												' <b>' + directions.getDistance().html + '</b>';
					} else {
						global.debug('directions loaded after 2 errors');
						$('mapMsg').innerHTML = '<b>Approximately</b> ' +
												' <b>' + directions.getDistance().html + '</b>';
					}

					global.debug('directions.getNumRoutes() = ' + directions.getNumRoutes());
					global.debug('directions.getStatus().code = ' + directions.getStatus().code);
					global.debug('directions.getNumGeocodes() = ' + directions.getNumGeocodes());
					global.debug('directions.getDistance().html = ' + directions.getDistance().html);
					global.debug('directions.getDuration().html = ' + directions.getDuration().html);

					$('map_canvas').removeClass('jsHide');
					$('street_view_canvas').addClass('jsHide');

					numPreviousDirectionsErrors = 0; // reset

				});

				GEvent.addListener(directions, "error", function() {

					if (numPreviousDirectionsErrors == 0) {
						global.debug("First error, trying from: " + collegeAddressNoStreet + " to: " + studentAddressNoStreet)
						directions.load("from: " + collegeAddressNoStreet + " to: " + studentAddressNoStreet);
						numPreviousDirectionsErrors++;
					} else if (numPreviousDirectionsErrors == 1) {
						global.debug("Second error, trying from: " + collegeAddressZip + " to: " + studentAddressZip);
						directions.load("from: " + collegeAddressZip + " to: " + studentAddressZip);
						numPreviousDirectionsErrors++;
					} else {
						global.debug("Third error");
						$('mapMsg').innerHTML = "<b>Sorry, not enough address data to map.</b>";
					}
				});

			}
		});
	}

}

function switchMapDirections() {

	directions.load("from: " + collegeAddress + " to: " + studentAddress);
}

function switchMapArea() {

	directions.clear();

	if (!point) {
		$('mapMsg').innerHTML = "<b>Sorry, no map available.</b>";
	} else {
		$('mapMsg').innerHTML = '';
		map.setCenter(point, 6, G_PHYSICAL_MAP);
		$('map_canvas').removeClass('jsHide');
		$('street_view_canvas').addClass('jsHide');
	}
}

function switchMapCampus() {

	directions.clear();

	if (!point) {
		$('mapMsg').innerHTML = "<b>Sorry, no map available.</b>";
	} else {
		map.setCenter(point, 16, G_SATELLITE_MAP);
		$('mapMsg').innerHTML = '';
		$('map_canvas').removeClass('jsHide');
		$('street_view_canvas').addClass('jsHide');
	}

}

function switchStreetView() {

	$('mapMsg').innerHTML = '';
	$('map_canvas').addClass('jsHide');
	$('street_view_canvas').removeClass('jsHide');

	var panoramaOptions = { latlng: map.getCenter() };
	var myPano = new GStreetviewPanorama($("street_view_canvas"), panoramaOptions);
	GEvent.addListener(myPano, "error", handleNoFlash);

}

function handleNoFlash(errorCode) {
	if (errorCode == 603) {
		$('mapMsg').innerHTML = "<b>This feature requires Flash to work properly.</b>";
	} else if (errorCode == 600) {
		$('mapMsg').innerHTML = "<b>Sorry, this area has not yet been photographed by Google.</b>";
	}
}

window.addEvent('domready', initializeMap);