// JavaScript Document
// JavaScript Document// JavaScript Document
// This javascript file contains all the map initialization and interaction functions
// Created: August 2011
// Facilities Planning & Construction
// University of Florida

/* ---------------------------------------------------------------------------------- GLOBAL VARIABLE DECLARATIONS */
var map;
var searchstring = "";
var detailHTML = "";
var searchResults = "";
var bldgDataLayer = null;
var bldgPolyLayer = null;
var greenLayer = null;
var parkLayer = null;
var houseLayer = null;
var dinLayer = null;
var zipLayer = null;
var scootLayer = null;
var pMetersLayer = null;
var disParkLayer = null;
var carPoolLayer = null;
var pSafetyLayer = null;
var gisLayer = null;
var infowindow = null;
var markersArray = [];
var letter = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];/*----- Array used in marker icons(  */
var kmlOptions = {
	clickable: true,
	preserveViewport: true
};
var kmlOptionsNoClick = {
	clickable: false,
	preserveViewport: true
};
var sched_bldgs = new Array();

var MY_MAPTYPE_ID = 'ufmap';

//HELPER FUNCTION TO REMOVE GOOFY CHARACHTERS FROM SCHEDULE
function trim(str) {
   return str.replace(/^\s*|\s*$/g,"");
}

/*	MAP INITIALIZATION 
	The map is a Stylized Goole map centered on campus with a zoom of 16 by default.  Only the zoom control is turned on.
	
	In general KML files are used when there is nothing to display in the "Map Details" area (disabled parking, scooters, etc).
	JSON files are used when additional data needs to be displayed in the legend - with the major exception of the Parking layer
	
	KML Data
	The BUILDING layer comes from a KML file generated by kml/bldg.php 
	The GREEN SPACE layer comes from a KML file generated by kml/greenspace.php
	The PARKING layer comes froma  KML file generated by kml/parking.php
	The SCOOTER PARKING layer comes froma  KML file generated by kml/scooter.php
	The DISABLED PARKING layer comes froma  KML file generated by kml/dispark.php
	
	JSON Data
	Map SEARCH Functionality utilizes json/search.json which is generated by json/search.php - currently ONLY contains building data
	The DINING layer comes from a JSON file generated by json/dining.php
	The PERFORMING ARTS layer comes from a JSON file generated by json/perfarts.php
	
*/
function initialize() {
    var latlng = new google.maps.LatLng(29.644470,-82.351784);

	//Style the Google Map specifically for UF - color the buidings orange
	var ufMapStyle = [{ 
		featureType: "landscape.man_made", 
		elementType: "geometry", 
		stylers: [ { visibility: "on" }, { hue: "#ffcc99" }, { saturation: 100 }, { lightness: 0 }, { gamma: .7 } ] //Colors the buildings a peachy orange using this hue: ffcc99 gamma: .7
		},
		{ featureType: "poi.school", elementType: "labels", stylers: [ { visibility: "off" } ] },//Turns off labels for "school" things (like Startbucks in the middle of nowhere
		{ featureType: "poi.government", elementType: "all", stylers: [ { visibility: "off" } ] }//Turns off labels for "government" things (like UF Library in the middle of Ravine Woods
	];

    var myOptions = {
      zoom: 16,
      center: latlng,
  	  disableDefaultUI: true,
	  zoomControl: true,
	  streetViewControl: true,
      // mapTypeId: google.maps.MapTypeId.ROADMAP
	  mapTypeId: MY_MAPTYPE_ID
    };
	
	//For toggling back to UF MAP
    var ufmapOptions = {
	  mapTypeId: MY_MAPTYPE_ID
    };
	//For toggling to Satellite map
	var satOptions = {
		mapTypeId: google.maps.MapTypeId.SATELLITE
	};//end satOptions

	//Create my Map
    map = new google.maps.Map(document.getElementById("ufmap"), myOptions);

	var ufMapOptions  = {
      name: "ufmap"
	};


	var ufMapType = new google.maps.StyledMapType(ufMapStyle, ufMapOptions);
	
	//Set the registry to associate 'mymap' with the
	//custom map type we created, and set the map to
	//show that map type.
	map.mapTypes.set(MY_MAPTYPE_ID, ufMapType);
	map.setMapTypeId(MY_MAPTYPE_ID);
	
	//Initialize any KML layer that may need to be turned on/off later
	bldgDataLayer = new google.maps.KmlLayer('http://campusmap.ufl.edu/kml/bldgdata2.kml', kmlOptions);
	bldgPolyLayer = new google.maps.KmlLayer('http://campusmap.ufl.edu/kml/bldgpoly3.kml', kmlOptionsNoClick);
	gisLayer = new google.maps.KmlLayer('http://campusmap.ufl.edu/kml/bldgnew6.kml', kmlOptions);
	greenLayer = new google.maps.KmlLayer('http://campusmap.ufl.edu/kml/greenspace11.kml', kmlOptions);
	parkLayer = new google.maps.KmlLayer('http://campusmap.ufl.edu/kml/pk.kml', kmlOptionsNoClick);
	houseLayer = new google.maps.KmlLayer('http://campusmap.ufl.edu/kml/house3.kml', kmlOptions);
	scootLayer = new google.maps.KmlLayer('http://campusmap.ufl.edu/kml/scooter.kml', kmlOptionsNoClick);
	disParkLayer = new google.maps.KmlLayer('http://campusmap.ufl.edu/kml/dispark.kml', kmlOptionsNoClick);
	carPoolLayer = new google.maps.KmlLayer('http://campusmap.ufl.edu/kml/carpool.kml', kmlOptionsNoClick);
	pMetersLayer = new google.maps.KmlLayer('http://campusmap.ufl.edu/kml/meters.kml', kmlOptionsNoClick);
	zipLayer = new google.maps.KmlLayer('http://campusmap.ufl.edu/kml/zipcar.kml', kmlOptionsNoClick);
	pSafetyLayer = new google.maps.KmlLayer('http://campusmap.ufl.edu/kml/psafety2.kml', kmlOptionsNoClick);
	//Turn on the building and green space layers
	bldgDataLayer.setMap(map);
	bldgPolyLayer.setMap(map);
	greenLayer.setMap(map);
	
	//This section might not be needed if we don't need event listeners...might be able to handle this functionality with simple a href tags or mouse-click events...
	var ufmapDiv = document.getElementById('ufmap');
	var lmDiv = document.getElementById('mapcontrol');
	var mpDiv = document.getElementById('mapdetails');
	var parkDiv = document.getElementById('parkLayer');
	var dineDiv = document.getElementById('dineLayer');
	var scootDiv = document.getElementById('scooParkLayer');
	var disParkDiv = document.getElementById('disParkLayer');
	var cpParkDiv = document.getElementById('cpParkLayer');
	var meterParkDiv = document.getElementById('meterParkLayer');
	var zipDiv = document.getElementById('zipParkLayer');
	var zipDiv2 = document.getElementById('zipParkLayer2');
	var partsDiv = document.getElementById('partsLayer');
	var stdDiv = document.getElementById('stdLayer');	
	var clabDiv = document.getElementById('clabLayer');	
	var houseDiv = document.getElementById('houseLayer');	
	var libraryDiv = document.getElementById('libraryLayer');		
	var psafetyDiv = document.getElementById('pSafetyLayer');
	var recDiv = document.getElementById('recLayer');
	var gisDiv = document.getElementById('gisLayer');
	var susDiv = document.getElementById('susLayer');
	var leedDiv = document.getElementById('leedLayer');
	var searchDiv = document.getElementById('search');
	var clearDiv = document.getElementById('clearLayer');
	var ufmapctlDiv = document.getElementById('ufmapctl');
	var satctlDiv = document.getElementById('satctl');

	// event listeners to toggle map between UFMap and Satellite Map
	google.maps.event.addDomListener(ufmapctlDiv, 'click', function() {
		$("#ufmapctl").toggleClass("mapselect");
		$("#ufmapctl").toggleClass("mapnoselect");
		$("#satctl").toggleClass("mapselect");
		$("#satctl").toggleClass("mapnoselect");
		map.setOptions(ufmapOptions);
		bldgDataLayer.setMap(map);
		bldgPolyLayer.setMap(map);
		greenLayer.setMap(map);
	});
	google.maps.event.addDomListener(satctlDiv, 'click', function() {
		$("#ufmapctl").toggleClass("mapselect");
		$("#ufmapctl").toggleClass("mapnoselect");
		$("#satctl").toggleClass("mapselect");
		$("#satctl").toggleClass("mapnoselect");
		map.setOptions(satOptions);
		bldgPolyLayer.setMap();
		greenLayer.setMap();
	});
	
	// event listeners to toggle layers on and off
	google.maps.event.addDomListener(clabDiv, 'click', function() {
		toggleCLabs();
	});
	google.maps.event.addDomListener(houseDiv, 'click', function() {
		toggleHousing();
	});
	google.maps.event.addDomListener(libraryDiv, 'click', function() {
		toggleLibrary();
	});
	google.maps.event.addDomListener(parkDiv, 'click', function() {
		togglePark();
	});
	google.maps.event.addDomListener(dineDiv, 'click', function() {
		toggleDining();
	});
	google.maps.event.addDomListener(partsDiv, 'click', function() {
		togglePArts();
	});
	google.maps.event.addDomListener(scootDiv, 'click', function() {
		toggleScooter();
	});	
	google.maps.event.addDomListener(disParkDiv, 'click', function() {
		toggleDisPark();
	});	
	google.maps.event.addDomListener(cpParkDiv, 'click', function() {
		toggleCarpool();
	});
	google.maps.event.addDomListener(meterParkDiv, 'click', function() {
		toggleMeters();
	});	
	google.maps.event.addDomListener(zipDiv, 'click', function() {
		toggleZipCars();
	});
	google.maps.event.addDomListener(zipDiv2, 'click', function() {
		toggleZipCars2();
	});
	google.maps.event.addDomListener(psafetyDiv, 'click', function() {
		togglePSafety();
	});
	google.maps.event.addDomListener(recDiv, 'click', function() {
		toggleRec();
	});
	google.maps.event.addDomListener(stdDiv, 'click', function() {
		toggleStudents();
	});	
	google.maps.event.addDomListener(susDiv, 'click', function() {
		toggleSustain();
	});
	google.maps.event.addDomListener(leedDiv, 'click', function() {
		toggleLEED();
	});
	google.maps.event.addDomListener(gisDiv, 'click', function() {
		toggleBuildings();
	});
	google.maps.event.addDomListener(clearDiv, 'click', function() {
		clearMarkers();
	});
	
	if (location.search != "") {
		var bldg = "";
		var zoom = "";
		var x = location.search.substr(1).split("&")
		for (var i=0; i<x.length; i++){
			var y = x[i].split("=");
			//alert("Key '" + y[0] + "' has the content '" + y[1]+"'");
			//URL has location parameter, center and zoom to location
			if (y[0]=='loc'){
				searchMap(y[1]);
				//alert(zoom);
				
				//Trick to get the map to zoom, hopefully only one item will be passed on URL line, otherwise zoom may be off
				$(document).everyTime("500ms", function(){
					map.setZoom(zoom);
				}, 1);
				
			}//end if
			if (y[0]=='zoom'){
				if (y[1]!=null) zoom = y[1]*1;
				else zoom = 17;
				//map.setZoom(zoom);
			}//end if
			//URL has schedule parameter, parse the schedule, create markers and custom HTML and display it on the map
			if (y[0]=='sched'){
				parseSched(y[1]);
				displaySched();
			}//end if
		}//end for
	}//end if

}//end initialize

/*	MAP SEARCH */ 
function searchMap(url){
	clearMarkers();
	hideFeatureDivs();
	$("#clearLayer").show();
	$("#detailbox").show();
	//var searchstring = document.searchForm.searchmap.value;
	if (url==null) var searchstring = document.searchForm.searchmap.value;
	else var searchstring = url;
	searchstring = searchstring.toUpperCase();
	var lt = 0;
	infowindow = new google.maps.InfoWindow({
		content: "Loading..."
	});
	for (var i=0; i<bldgcentroid.length; i++){
		var obj = bldgcentroid[i];
		if (((obj.cname.toUpperCase()).search(searchstring)!=-1||(obj.abbrev.toUpperCase()).search(searchstring)!=-1||(obj.add1.toUpperCase()).search(searchstring)!=-1||(obj.oname.toUpperCase()).search(searchstring)!=-1||(obj.bldg).search(searchstring)!=-1)&&lt<26){
			var latLng = new google.maps.LatLng(obj.lat,obj.lng);
			if (obj.url!='NONE') var url = "<br><a href=\""+obj.url+"\" target=\"_blank\">More Info</a>";
			else url = '';
			var marker = new google.maps.Marker({
				position: latLng,
				clickable: true,
				icon: "http://campusmap.ufl.edu/library/images/markers/blue_Marker"+letter[lt]+".png",
				//html: "<strong>"+obj.bldg+" - "+obj.cname+"</strong><p>"+obj.descrip+"</p><br><a href=\""+obj.url+"\" target=\"_blank\">"+obj.url+"</a>",
				html: '<div style="float: left; padding-right: 10px;"><p>'+obj.add1.toUpperCase()+'<br /><br />Bldg #: '+obj.bldg+'<span style="padding-left:20px">Abbreviation: '+obj.abbrev+'</span><br />'+url+'</p></div><div style="float: left;"><img src="http://campusmap.ufl.edu/library/images/bldg_150/'+obj.bldg+'.jpg"></div><div style="clear: both;"></div>Link to this Building:  <a href="http://campusmap.ufl.edu/?loc='+obj.bldg+'">http://campusmap.ufl.edu/?loc='+obj.bldg+'</a>',
				map: map
			});
			google.maps.event.addListener(marker, 'click', function() {
				infowindow.setContent(this.html);
				infowindow.open(map, this);			
			});
			markersArray.push(marker);
			detailHTML += "<div class=\"markers\"><a href=\"javascript: centerZoom('"+lt+"');\"><img src=\"http://campusmap.ufl.edu/library/images/markers/blue_Marker"+letter[lt]+".png\" border=\"0\"></a></div> ";
			detailHTML += "<div class=\"mapdetailtext\"><a href=\"javascript: centerZoom('"+lt+"');\"><strong>"+obj.cname+" ("+obj.abbrev+")</strong></a><p>Building # "+obj.bldg+"<br>"+obj.descrip+url+"<br><br></p></div>";
			detailHTML += "<div style=\"clear: both;\"></div>";
			lt++;
		}//end if
		else if (lt==26) searchResults = "Your search for <strong>"+document.searchForm.searchmap.value+"</strong> returned too many locations. Twenty-six results are displayed below.<br><br>";
	} // end of loop that reads the JSON file
	//
	if (lt==0) detailHTML = "No Results Found.<br><br>Please change your search criteria and try again.";
	else autoCenter();

	document.getElementById("customdetails").innerHTML=searchResults+detailHTML;
}//end searchMap

/* 	CLEAR MARKERS FROM MAP */ 
function clearMarkers(){
	for (var i=0; i<markersArray.length; i++){
		markersArray[i].setMap(null);
	}//end for
	markersArray.length = 0;
	detailHTML = "";
	document.getElementById("customdetails").innerHTML=detailHTML;
	$("#detailbox").hide();
	showFeatureDivs();
}//end clearMarkers

/* 	CENTER AND ZOOM BASED ON MARKER PASSED INTO FUNCTION */ 
function centerZoom(i){
	map.setCenter(markersArray[i].getPosition());
	map.setZoom(18);
}//end centerZoom

/*	CENTER AND ZOOM BASED ON MARKER ARRAY BOUNDARIES */ 
function autoCenter() {
	//  Create a new viewpoint bound
	var z = map.getZoom();
	var bounds = new google.maps.LatLngBounds();
	var i = 0;
	//  Go through each...
	$.each(markersArray, function (index, marker) {
		bounds.extend(marker.position);
		i++;
	});
	//  Fit these bounds to the map
	var nebound = bounds.getNorthEast();
	var swbound = bounds.getSouthWest();
	//alert(bounds);
	map.fitBounds(bounds);
	if (nebound.lat()-swbound.lat()<.05 && nebound.lng()-swbound.lng()<.05) map.setZoom(17);
	//map.setZoom(17);
	//z = map.getZoom();
	//alert(z);
}//end autoCenter

/* 	HIDE ALL FEATURE LAYER DIVS */ 
function hideFeatureDivs(){
	$("#clabLayer").hide();
	$("#dineLayer").hide();
	$("#houseLayer").hide();
	$("#libraryLayer").hide();
	$("#clabLayer").hide();
	$("#parkLayer").hide();
	$("#partsLayer").hide();
	$("#pSafetyLayer").hide();
	$("#recLayer").hide();
	$("#stdLayer").hide();
	$("#clearLayer").hide();
	$("#parkother").hide();
	$("#susLayer").hide();
	$("#susother").hide();
	$("#leedlegend").hide();
	$("#mapdetails").show();
}//end hideFeatureDivs

/* 	SHOW ALL FEATURE LAYER DIVS */ 
function showFeatureDivs(){
	$("#clabLayer").show();
	$("#dineLayer").show();
	$("#houseLayer").show();
	$("#libraryLayer").show();
	$("#clabLayer").show();
	$("#parkLayer").show();
	$("#partsLayer").show();
	$("#pSafetyLayer").show();
	$("#recLayer").show();
	$("#stdLayer").show();
	$("#susLayer").show();
	$("#clearLayer").hide();
	$("#mapdetails").hide();
}//end showFeatureDivs

/*	TOGGLE BUILDINGS -- Temporary for figuring out which buildings are missing from Google's Map */ 
function toggleBuildings(){
	if(gisLayer.getMap()) {//Layer Showing, need to hide parking
		gisLayer.setMap(); 
	}//end if
	else {//Layer not displayed, need to show parking
		gisLayer = new google.maps.KmlLayer('http://campusmap.ufl.edu/kml/bldgnew6.kml', kmlOptions);
		gisLayer.setMap(map);
	}//end else
}//end toggleBuildings

/*	TOGGLE HOUSING */ 
function toggleHousing(){
	if(houseLayer.getMap()) {//Layer Showing, need to hide parking
		houseLayer.setMap(); 
		$("#detailbox").hide();
		clearMarkers();
		document.mapform.housing.checked=false;
	}//end if
	else {//Layer not displayed, need to show parking
		houseLayer = new google.maps.KmlLayer('http://campusmap.ufl.edu/kml/house3.kml', kmlOptions);
		houseLayer.setMap(map);
		var j = 0;
		var k = 0;
		var l = 0;
		for(var i=0; i<housecentroid.length; i++){//read the json dining file
			var obj = housecentroid[i];
			var latLng = new google.maps.LatLng(obj.lat,obj.lng);
			if (obj.type=='single') {var myicon = "http://campusmap.ufl.edu/library/images/markers/blue_Marker"+letter[i]+".png";}
			else if (obj.type=='gradfamily') {var myicon = "http://campusmap.ufl.edu/library/images/markers/green_Marker"+letter[j]+".png"; j++; }
			else if (obj.type=='frat') {var myicon = "http://campusmap.ufl.edu/library/images/markers/purple_Marker"+letter[k]+".png"; k++; }
			else if (obj.type=='sor') {var myicon = "http://campusmap.ufl.edu/library/images/markers/pink_Marker"+letter[l]+".png"; l++; }
			var marker = new google.maps.Marker({
				position: latLng,
				clickable: false,
				icon: myicon,
				html: "<strong>"+obj.bldg+"</strong><p>"+obj.descrip+"</p><br><a href=\""+obj.url+"\" target=\"_blank\">"+obj.url+"</a>",
				map: map
			});
			markersArray.push(marker);
			var url = "<a href=\""+obj.url+"\" target=\"_blank\">More Info</a>";
			detailHTML += "<div class=\"markers\"><a href=\"javascript: centerZoom('"+i+"');\"><img src=\""+myicon+"\" border=\"0\"></a></div> ";
			detailHTML += "<div class=\"mapdetailtext\"><a href=\"javascript: centerZoom('"+i+"');\"><strong>"+obj.bldg+"</strong></a><br />"+url+"<br /><br /></div>";
			detailHTML += "<div style=\"clear: both;\"></div>";
		} // end of loop that reads the JSON file
		document.getElementById("customdetails").innerHTML=detailHTML;
		document.mapform.housing.checked=true;
		hideFeatureDivs();
		$("#houseLayer").show();	
		$("#detailbox").show();		
	}//end else
}//end toggleHousing

/*	TOGGLE SUSTAINABILITY */ 
function toggleSustain(){
	if(markersArray.length!=0) {//Layer Showing, need to hide sustainability features
		document.mapform.sustain.checked=false;
		$("#detailbox").hide();
		$("#suslegend").hide();
		$("#susother").hide();
		clearMarkers();
	}//end if
	else {//Layer not displayed, need to show sustainability features
		document.mapform.sustain.checked=true;
		hideFeatureDivs();
		$("#susLayer").show();
		$("#detailbox").show();
		$("#suslegend").show();
		$("#susother").show();

		for (var i=0; i<bldgcentroid.length; i++){
			var obj = bldgcentroid[i];
			if (obj.bldg=='0026') var latLng = new google.maps.LatLng(obj.lat,obj.lng);
		} // end of loop that reads the JSON file
		var marker = new google.maps.Marker({
			position: latLng,
			clickable: false,
			icon: "http://campusmap.ufl.edu/library/images/markers/redstar.png",
			map: map
		});
		markersArray.push(marker);
	}//end else
}//end toggleSustain

/*	TOGGLE GREEN BUILDINGS */ 
function toggleLEED(){
	if(markersArray.length!=0&&markersArray.length!=1) {//Markers is not empty so hide dining
		for (var i=0; i<markersArray.length; i++){
			markersArray[i].setMap(null);
		}//end for
		markersArray.length = 0;
		detailHTML = "";
		document.getElementById("customdetails").innerHTML=detailHTML;
		document.mapform.leed.checked=false;
		$("#leedlegend").hide();
	}//end if
	else {//Markers not displayed, need to show dining	
		for (var i=0; i<markersArray.length; i++){
			markersArray[i].setMap(null);
		}//end for
		markersArray.length = 0;
		$("#detailbox").show();
		hideFeatureDivs();
		$("#susLayer").show();
		$("#susother").show();
		$("#leedlegend").show();
		$("#suslegend").hide();
		infowindow = new google.maps.InfoWindow({//create an infowindow which we will set later
			content: "Loading..."
		});
		for(var i=0; i<leedcentroid.length; i++){//read the json leed file
			var obj = leedcentroid[i];
			var latLng = new google.maps.LatLng(obj.lat,obj.lng);
			if (obj.cat=='CERT') var myicon = "http://campusmap.ufl.edu/library/images/leed/cert2.png";
			if (obj.cat=='SILVER') var myicon = "http://campusmap.ufl.edu/library/images/leed/silver2.png";
			if (obj.cat=='GOLD') var myicon = "http://campusmap.ufl.edu/library/images/leed/gold2.png";
			if (obj.cat=='PLATINUM') var myicon = "http://campusmap.ufl.edu/library/images/leed/plat.png";
			var marker = new google.maps.Marker({
				position: latLng,
				clickable: true,
				icon: myicon,
				html: "<strong>"+obj.bldg+"</strong><p>"+obj.cat+"</p>",
				map: map
			});
			google.maps.event.addListener(marker, 'click', function() {
				infowindow.setContent(this.html);
				infowindow.open(map, this);			
			});
			markersArray.push(marker);
		} // end of loop that reads the JSON file
		document.mapform.leed.checked=true;
	}//end else
}//end toggleLEED

/*	TOGGLE ZIP CARS2 - SUSTAINABLE LAYER */ 
function toggleZipCars2(){
	if(zipLayer.getMap()) {//Layer Showing, need to hide parking
		zipLayer.setMap(); 
		document.mapform.zip2.checked=false;
	}//end if
	else {//Layer not displayed, need to show parking
		zipLayer = new google.maps.KmlLayer('http://campusmap.ufl.edu/kml/zipcar.kml', kmlOptionsNoClick);
		zipLayer.setMap(map);
		document.mapform.zip2.checked=true;
	}//end else
}//end toggleZipCars

/*	TOGGLE PARKING */ 
function togglePark(){
	if(parkLayer.getMap()) {//Layer Showing, need to hide parking
		parkLayer.setMap(); 
		document.mapform.park.checked=false;
		$("#detailbox").hide();
		$("#parklegend").hide();
		$("#parkother").hide();
		clearMarkers();
	}//end if
	else {//Layer not displayed, need to show parking
		parkLayer = new google.maps.KmlLayer('http://campusmap.ufl.edu/kml/pk.kml', kmlOptionsNoClick);
		parkLayer.setMap(map);
		document.mapform.park.checked=true;
		hideFeatureDivs();
		$("#parkLayer").show();
		$("#detailbox").show();
		$("#parklegend").show();
		$("#parkother").show();
	}//end else
}//end toggleParking

/*	TOGGLE DISABLED PARKING */ 
function toggleDisPark(){
	if(disParkLayer.getMap()) {//Layer Showing, need to hide parking
		disParkLayer.setMap(); 
		document.mapform.dispark.checked=false;
	}//end if
	else {//Layer not displayed, need to show parking
		disParkLayer = new google.maps.KmlLayer('http://campusmap.ufl.edu/kml/dispark.kml', kmlOptionsNoClick);
		disParkLayer.setMap(map);
		document.mapform.dispark.checked=true;
	}//end else
}//end toggleDsPark

/*	TOGGLE CARPOOL */ 
function toggleCarpool(){
	if(carPoolLayer.getMap()) {//Layer Showing, need to hide parking
		carPoolLayer.setMap(); 
		document.mapform.cpPark.checked=false;
	}//end if
	else {//Layer not displayed, need to show parking
		carPoolLayer = new google.maps.KmlLayer('http://campusmap.ufl.edu/kml/carpool.kml', kmlOptionsNoClick);
		carPoolLayer.setMap(map);
		document.mapform.cpPark.checked=true;
	}//end else
}//end toggleCarpool

/*	TOGGLE METERS */ 
function toggleMeters(){
	if(pMetersLayer.getMap()) {//Layer Showing, need to hide parking
		pMetersLayer.setMap(); 
		document.mapform.meters.checked=false;
	}//end if
	else {//Layer not displayed, need to show parking
		pMetersLayer = new google.maps.KmlLayer('http://campusmap.ufl.edu/kml/meters.kml', kmlOptionsNoClick);
		pMetersLayer.setMap(map);
		document.mapform.meters.checked=true;
	}//end else
}//end toggleMeters

/*	TOGGLE SCOOTER */ 
function toggleScooter(){
	if(scootLayer.getMap()) {//Layer Showing, need to hide parking
		scootLayer.setMap(); 
		document.mapform.scooter.checked=false;
	}//end if
	else {//Layer not displayed, need to show parking
		scootLayer = new google.maps.KmlLayer('http://campusmap.ufl.edu/kml/scooter.kml', kmlOptionsNoClick);
		scootLayer.setMap(map);
		document.mapform.scooter.checked=true;
	}//end else
}//end toggleScooter

/*	TOGGLE ZIP CARS */ 
function toggleZipCars(){
	if(zipLayer.getMap()) {//Layer Showing, need to hide parking
		zipLayer.setMap(); 
		document.mapform.zip.checked=false;
	}//end if
	else {//Layer not displayed, need to show parking
		zipLayer = new google.maps.KmlLayer('http://campusmap.ufl.edu/kml/zipcar.kml', kmlOptionsNoClick);
		zipLayer.setMap(map);
		document.mapform.zip.checked=true;
	}//end else
}//end toggleZipCars

/*	TOGGLE PUBLIC SAFETY */ 
function togglePSafety(){
	if(pSafetyLayer.getMap()) {//Layer Showing, need to hide parking
		pSafetyLayer.setMap(); 
		document.mapform.psafety.checked=false;
		$("#psafetyText").hide();
		$("#detailbox").hide();
		clearMarkers();
	}//end if
	else {//Layer not displayed, need to show parking
		pSafetyLayer = new google.maps.KmlLayer('http://campusmap.ufl.edu/kml/psafety2.kml', kmlOptionsNoClick);
		pSafetyLayer.setMap(map);

		for(var i=0; i<snapcentroid.length; i++){//read the json snap file
			var obj = snapcentroid[i];
			var latLng = new google.maps.LatLng(obj.lat,obj.lon);
			var marker = new google.maps.Marker({
				position: latLng,
				clickable: false,
				icon: "http://campusmap.ufl.edu/library/images/markers/redstar.png",
				map: map
			});
			markersArray.push(marker);
		} // end of loop that reads the JSON file
		
		hideFeatureDivs();
		$("#pSafetyLayer").show();
		$("#psafetyText").show();
		$("#detailbox").show();
		document.mapform.psafety.checked=true;
	}//end else
}//end togglePSafety

/*	TOGGLE COMPUTER LABS */ 
function toggleCLabs(){
	if(markersArray.length!=0) {//Markers is not empty so hide dining
		clearMarkers();
		document.mapform.clab.checked=false;
	}//end if
	else {//Markers not displayed, need to show dining	
		$("#detailbox").show();
		hideFeatureDivs();
		$("#clabLayer").show();
		infowindow = new google.maps.InfoWindow({//create an infowindow which we will set later
			content: "Loading..."
		});
		var j = 0;
		for(var i=0; i<clabcentroid.length; i++){//read the json dining file
			var obj = clabcentroid[i];
			var latLng = new google.maps.LatLng(obj.lat,obj.lng);
			if (obj.clabID=='HD') {var myicon = "http://campusmap.ufl.edu/library/images/markers/redstar.png";}
			else {var myicon = "http://campusmap.ufl.edu/library/images/markers/blue_Marker"+letter[j]+".png"; j++; }
			var marker = new google.maps.Marker({
				position: latLng,
				clickable: true,
				icon: myicon,
				html: "<strong>"+obj.bldg+"</strong><p>"+obj.descrip+"</p><br><a href=\""+obj.url+"\" target=\"_blank\">"+obj.url+"</a>",
				map: map
			});
			google.maps.event.addListener(marker, 'click', function() {
				infowindow.setContent(this.html);
				infowindow.open(map, this);			
			});
			markersArray.push(marker);
			if (obj.url!='NA') var url = "<a href=\""+obj.url+"\" target=\"_blank\">More Info</a>";
			else url = '';
			detailHTML += "<div class=\"markers\"><a href=\"javascript: centerZoom('"+i+"');\"><img src=\""+myicon+"\" border=\"0\"></a></div> ";
			detailHTML += "<div class=\"mapdetailtext\"><a href=\"javascript: centerZoom('"+i+"');\"><strong>"+obj.bldg+"</strong></a><br />"+obj.descrip+url+"<br /><br /></div>";
			detailHTML += "<div style=\"clear: both;\"></div>";
		} // end of loop that reads the JSON file
		document.getElementById("customdetails").innerHTML=detailHTML;
		document.mapform.clab.checked=true;
	}//end else
}//end toggleCLabs

/*	TOGGLE DINING */ 
function toggleDining(){	
	if(markersArray.length!=0) {//Markers is not empty so hide dining
		clearMarkers();
		document.mapform.dining.checked=false;
	}//end if
	else {//Markers not displayed, need to show dining
		$("#detailbox").show();
		hideFeatureDivs();
		$("#dineLayer").show();
		infowindow = new google.maps.InfoWindow({//create an infowindow which we will set later
			content: "Loading..."
		});
		for(var i=0; i<centroid.length; i++){//read the json dining file
			var obj = centroid[i];
			var latLng = new google.maps.LatLng(obj.lat,obj.lng);
			var marker = new google.maps.Marker({
				position: latLng,
				clickable: true,
				icon: "http://campusmap.ufl.edu/library/images/markers/blue_Marker"+letter[i]+".png",
				html: "<strong>"+obj.bldg+"</strong><p>"+obj.descrip+"</p><br><a href=\""+obj.url+"\" target=\"_blank\">"+obj.url+"</a>",
				map: map
			});
			google.maps.event.addListener(marker, 'click', function() {
				infowindow.setContent(this.html);
				infowindow.open(map, this);			
			});
			markersArray.push(marker);
			if (obj.url!='NA') var url = "<br><a href=\""+obj.url+"\" target=\"_blank\">More Info</a>";
			else url = '';
			detailHTML += "<div class=\"markers\"><a href=\"javascript: centerZoom('"+i+"');\"><img src=\"http://campusmap.ufl.edu/library/images/markers/blue_Marker"+letter[i]+".png\" border=\"0\"></a></div> ";
			detailHTML += "<div class=\"mapdetailtext\"><a href=\"javascript: centerZoom('"+i+"');\"><strong>"+obj.bldg+"</strong></a><br />"+obj.descrip+url+"<br /><br /></div>";
			detailHTML += "<div style=\"clear: both;\"></div>";
		} // end of loop that reads the JSON file
		document.getElementById("customdetails").innerHTML=detailHTML;
		document.mapform.dining.checked=true;
	}//end else
}//end toggleDining

/*	TOGGLE LIBRARIES */ 
function toggleLibrary(){
	if(markersArray.length!=0) {//Markers is not empty so hide dining
		clearMarkers();
		document.mapform.library.checked=false;
	}//end if
	else {//Markers not displayed, need to show dining	
		$("#detailbox").show();
		hideFeatureDivs();
		$("#libraryLayer").show();
		infowindow = new google.maps.InfoWindow({//create an infowindow which we will set later
			content: "Loading..."
		});
		for(var i=0; i<libcentroid.length; i++){//read the json dining file
			var obj = libcentroid[i];
			var latLng = new google.maps.LatLng(obj.lat,obj.lng);
			var marker = new google.maps.Marker({
				position: latLng,
				clickable: true,
				icon: "http://campusmap.ufl.edu/library/images/markers/blue_Marker"+letter[i]+".png",
				html: "<strong>"+obj.bldg+"</strong><p>"+obj.descrip+"</p><br><a href=\""+obj.url+"\" target=\"_blank\">"+obj.url+"</a>",
				map: map
			});
			google.maps.event.addListener(marker, 'click', function() {
				infowindow.setContent(this.html);
				infowindow.open(map, this);			
			});
			markersArray.push(marker);
			if (obj.url!='NA') var url = "<a href=\""+obj.url+"\" target=\"_blank\">More Info</a>";
			else url = '';
			detailHTML += "<div class=\"markers\"><a href=\"javascript: centerZoom('"+i+"');\"><img src=\"http://campusmap.ufl.edu/library/images/markers/blue_Marker"+letter[i]+".png\" border=\"0\"></a></div> ";
			detailHTML += "<div class=\"mapdetailtext\"><a href=\"javascript: centerZoom('"+i+"');\"><strong>"+obj.bldg+"</strong></a><br />"+obj.descrip+url+"<br /><br /></div>";
			detailHTML += "<div style=\"clear: both;\"></div>";
		} // end of loop that reads the JSON file
		document.getElementById("customdetails").innerHTML=detailHTML;
		document.mapform.library.checked=true;
	}//end else
}//end toggleLibrary

/*	TOGGLE MEDICAL & HEALTH SERVICES */ 
function toggleMedical(){
	if(markersArray.length!=0) {//Markers is not empty so hide dining
		clearMarkers();
		document.mapform.medical.checked=false;
	}//end if
	else {//Markers not displayed, need to show dining	
		$("#detailbox").show();
		hideFeatureDivs();
		$("#medLayer").show();	
		infowindow = new google.maps.InfoWindow({//create an infowindow which we will set later
			content: "Loading..."
		});
		for(var i=0; i<medcentroid.length; i++){//read the json dining file
			var obj = medcentroid[i];
			var latLng = new google.maps.LatLng(obj.lat,obj.lng);
			var marker = new google.maps.Marker({
				position: latLng,
				clickable: true,
				icon: "http://campusmap.ufl.edu/library/images/markers/blue_Marker"+letter[i]+".png",
				html: "<strong>"+obj.bldg+"</strong><p>"+obj.descrip+"</p><br><a href=\""+obj.url+"\" target=\"_blank\">"+obj.url+"</a>",
				map: map
			});
			google.maps.event.addListener(marker, 'click', function() {
				infowindow.setContent(this.html);
				infowindow.open(map, this);			
			});
			markersArray.push(marker);
			if (obj.url!='NA') var url = "<a href=\""+obj.url+"\" target=\"_blank\">More Info</a>";
			else url = '';
			detailHTML += "<div class=\"markers\"><a href=\"javascript: centerZoom('"+i+"');\"><img src=\"http://campusmap.ufl.edu/library/images/markers/blue_Marker"+letter[i]+".png\" border=\"0\"></a></div> ";
			detailHTML += "<div class=\"mapdetailtext\"><a href=\"javascript: centerZoom('"+i+"');\"><strong>"+obj.bldg+"</strong></a><br />"+obj.descrip+url+"<br /><br /></div>";
			detailHTML += "<div style=\"clear: both;\"></div>";
		} // end of loop that reads the JSON file
		document.getElementById("customdetails").innerHTML=detailHTML;
		document.mapform.medical.checked=true;
	}//end else
}//end toggleLibrary

/*	TOGGLE PERFORMING ARTS */ 
function togglePArts(){
	if(markersArray.length!=0) {//Markers is not empty so hide dining
		clearMarkers();
		document.mapform.parts.checked=false;
	}//end if
	else {//Markers not displayed, need to show dining	
		$("#detailbox").show();
		hideFeatureDivs();
		$("#partsLayer").show();
		infowindow = new google.maps.InfoWindow({//create an infowindow which we will set later
			content: "Loading..."
		});
		for(var i=0; i<pacentroid.length; i++){//read the json dining file
			var obj = pacentroid[i];
			//Possibly want to put different color icons for the different categories?  For now, everything will be purple
			if (obj.cat=='Cultural') var iconColor = "blue";
			else if (obj.cat=='Museum') var iconColor = "purple";
			else if (obj.cat=='Theater') var iconColor = "pink";
			var latLng = new google.maps.LatLng(obj.lat,obj.lng);
			var marker = new google.maps.Marker({
				position: latLng,
				clickable: true,
				icon: "http://campusmap.ufl.edu/library/images/markers/blue_Marker"+letter[i]+".png",
				html: "<strong>"+obj.bldg+"</strong><p>"+obj.descrip+"</p><br><a href=\""+obj.url+"\" target=\"_blank\">"+obj.url+"</a>",
				map: map
			});
			google.maps.event.addListener(marker, 'click', function() {
				infowindow.setContent(this.html);
				infowindow.open(map, this);			
			});
			markersArray.push(marker);
			if (obj.url!='NA') var url = "<a href=\""+obj.url+"\" target=\"_blank\">More Info</a>";
			else url = '';
			detailHTML += "<div class=\"markers\"><a href=\"javascript: centerZoom('"+i+"');\"><img src=\"http://campusmap.ufl.edu/library/images/markers/blue_Marker"+letter[i]+".png\" border=\"0\"></a></div> ";
			detailHTML += "<div class=\"mapdetailtext\"><a href=\"javascript: centerZoom('"+i+"');\"><strong>"+obj.bldg+"</strong></a><br />"+obj.descrip+url+"<br /><br /></div>";
			detailHTML += "<div style=\"clear: both;\"></div>";
		} // end of loop that reads the JSON file
		document.getElementById("customdetails").innerHTML=detailHTML;
		document.mapform.parts.checked=true;
	}//end else
}//end togglePArts

/*	TOGGLE RECREATION & FITNESS */ 
function toggleRec(){
	if(markersArray.length!=0) {//Markers is not empty so hide dining
		clearMarkers();
		document.mapform.rec.checked=false;
	}//end if
	else {//Markers not displayed, need to show dining	
		$("#detailbox").show();
		hideFeatureDivs();
		$("#recLayer").show();	
		infowindow = new google.maps.InfoWindow({//create an infowindow which we will set later
			content: "Loading..."
		});
		for(var i=0; i<reccentroid.length; i++){//read the json dining file
			var obj = reccentroid[i];
			var latLng = new google.maps.LatLng(obj.lat,obj.lng);
			var marker = new google.maps.Marker({
				position: latLng,
				clickable: true,
				icon: "http://campusmap.ufl.edu/library/images/markers/blue_Marker"+letter[i]+".png",
				html: "<strong>"+obj.name+"</strong><br><a href=\""+obj.url+"\" target=\"_blank\">"+obj.url+"</a>",
				map: map
			});
			google.maps.event.addListener(marker, 'click', function() {
				infowindow.setContent(this.html);
				infowindow.open(map, this);			
			});
			markersArray.push(marker);
			if (obj.url!='NA') var url = "<a href=\""+obj.url+"\" target=\"_blank\">More Info</a>";
			else url = '';
			detailHTML += "<div class=\"markers\"><a href=\"javascript: centerZoom('"+i+"');\"><img src=\"http://campusmap.ufl.edu/library/images/markers/blue_Marker"+letter[i]+".png\" border=\"0\"></a></div> ";
			detailHTML += "<div class=\"mapdetailtext\"><a href=\"javascript: centerZoom('"+i+"');\"><strong>"+obj.name+"</strong></a><br />"+url+"<br /><br /></div>";
			detailHTML += "<div style=\"clear: both;\"></div>";
		} // end of loop that reads the JSON file
		document.getElementById("customdetails").innerHTML=detailHTML;
		document.mapform.rec.checked=true;
	}//end else
}//end toggleRec

/*	TOGGLE STUDENT SERVICES */ 
function toggleStudents(){
	if(markersArray.length!=0) {//Markers is not empty so hide dining
		clearMarkers();
		document.mapform.students.checked=false;
	}//end if
	else {//Markers not displayed, need to show dining	
		$("#detailbox").show();
		hideFeatureDivs();
		$("#stdLayer").show();	
		infowindow = new google.maps.InfoWindow({//create an infowindow which we will set later
			content: "Loading..."
		});
		for(var i=0; i<stdcentroid.length; i++){//read the json dining file
			var obj = stdcentroid[i];
			var latLng = new google.maps.LatLng(obj.lat,obj.lng);
			var marker = new google.maps.Marker({
				position: latLng,
				clickable: true,
				icon: "http://campusmap.ufl.edu/library/images/markers/blue_Marker"+letter[i]+".png",
				html: "<strong>"+obj.bldg+"</strong><p>"+obj.descrip+"</p><br><a href=\""+obj.url+"\" target=\"_blank\">"+obj.url+"</a>",
				map: map
			});
			google.maps.event.addListener(marker, 'click', function() {
				infowindow.setContent(this.html);
				infowindow.open(map, this);			
			});
			markersArray.push(marker);
			if (obj.url!='NA') var url = "<a href=\""+obj.url+"\" target=\"_blank\">More Info</a>";
			else url = '';
			detailHTML += "<div class=\"markers\"><a href=\"javascript: centerZoom('"+i+"');\"><img src=\"http://campusmap.ufl.edu/library/images/markers/blue_Marker"+letter[i]+".png\" border=\"0\"></a></div> ";
			detailHTML += "<div class=\"mapdetailtext\"><a href=\"javascript: centerZoom('"+i+"');\"><strong>"+obj.bldg+"</strong></a><br />"+obj.descrip+url+"<br /><br /></div>";
			detailHTML += "<div style=\"clear: both;\"></div>";
		} // end of loop that reads the JSON file
		document.getElementById("customdetails").innerHTML=detailHTML;
		document.mapform.students.checked=true;
	}//end else
}//end toggleStudents

/*	
	ISIS CLASS SCHEDULE SECTION
	
	The following sets of functions will evaluate the URL passed in 
	Example : CHM1025,TR,4,CLB,C130;HAI1130,MTWRF,5,MAT,13;MAC1140,MW,9,CAR,AUD,R,8,LIT,201;ENC1101,MWF,3,TUR,B310;SLS1102,T,3,PEA,P202A;
	and build an array (sched_bldgs) with the distinct buildings found in the schedule
	
	Once this is done it will locate the buildings on the map, place markers for each building and display the schedule in the map details box.

	SYSTEM ASSUMPTION: A class will never meet in more than 3 locations
	
	i = 0;	Will always be section, section will never repeat, but could meet in multiple locations, hence need for i 5 thru 12
	i = 1 or 5 or 9;	Will always be the day of week
	i = 2 or 6 or 10;  Will always be the period
	i = 3 or 7 or 11;  Will always be the building
	i = 4 or 8 or 12;  Will always be the room, when we find a building we need to check to see if it's in the sched_bldgs array, if not push it
	
 */ 
function parseSched(sched){
	var section = "";
	var dow = "";
	var prd = "";
	var bldg = "";
	var room = "";
	
	var myClass = sched.split(";");
	for (c = 0; c < myClass.length; c++) {
		var myTokens = myClass[c].split(",");//I don't know if this will work...
		for (i = 0; i < myTokens.length; i++) {
			if (i == 0) section = trim(myTokens[i]);
			else if ( i == 1 || i == 5 || i == 9 ){
				dow = trim(myTokens[i]);
				if (dow=='M') dow = "MONDAY";
				else if (dow=='T') dow = "TUESDAY";
				else if (dow=='W') dow = "WEDNESDAY";
				else if (dow=='R') dow = 'THURSDAY';
				else if (dow=='F') dow = 'FRIDAY';
			} else if ( i == 2 || i == 6 || i == 10 ){
				prd = trim(myTokens[i]);
			} else if ( i == 3 || i == 7 || i == 11 ){
				bldg = trim(myTokens[i]);
			} else if ( i == 4 || i == 8 || i == 12 ){
				room = trim(myTokens[i]);
				findSchedBldg(bldg, section, dow, prd, room);
			}
		}//end for myTokens.length which is split on ,
	}//end for myClass.length which is split on ;
}//end mapSched

function findSchedBldg(bldg, section, dow, prd, room){
	var foundit = false;
	var found_index = 0;
	for (j = 0; j < sched_bldgs.length; j++) {
		if (sched_bldgs[j][0] == bldg){
			foundit = true;
			found_index = j;
			break;
		}//end if
	}//end for

	if (foundit) sched_bldgs[found_index][3] += ","+section+","+dow+","+prd+","+room;
	else sched_bldgs.push([bldg, 0, 0, section+","+dow+","+prd+","+room, " "]);
}//end findSchedBldg

function displaySched() {
	var lt = 0;
	$("#mapdetails").show();
	$("#detailbox").show();
	$("#customdetails").show();

	infowindow = new google.maps.InfoWindow({
		content: "Loading..."
	});
	
	for (x = 0; x < sched_bldgs.length; x++){
		for (var i=0; i<bldgcentroid.length; i++){
			var obj = bldgcentroid[i];
			if (obj.abbrev==sched_bldgs[x][0]){
				var latLng = new google.maps.LatLng(obj.lat,obj.lng);

				sched_bldgs[x][3] = getSchedHTML( sched_bldgs[x][0], sched_bldgs[x][3],  sched_bldgs[x][4], letter, sched_bldgs[x][2], sched_bldgs[x][1]);
				detailHTML += " <a href=\"javascript: centerZoom('"+lt+"');\"><strong>"+letter[lt]+" - "+obj.cname+" ("+obj.abbrev+")</strong></a><br>"+sched_bldgs[x][3]+"<br>";

				var marker = new google.maps.Marker({
					position: latLng,
					clickable: true,
					icon: "http://campusmap.ufl.edu/library/images/markers/blue_Marker"+letter[lt]+".png",
					html: "<strong>"+obj.cname+" ("+obj.abbrev+")</strong></a><br>"+sched_bldgs[x][3],
					map: map
				});
				google.maps.event.addListener(marker, 'click', function() {
					infowindow.setContent(this.html);
					infowindow.open(map, this);			
				});
				markersArray.push(marker);
				lt++;
			}//end if
		} // end of loop that reads the JSON file
	}//end for
	autoCenter();
	if (lt==1) {
		$(document).everyTime("500ms", function(){
			map.setZoom(17);
		}, 1);
	}//end if

	document.getElementById("customdetails").innerHTML=searchResults+detailHTML;	
}//end displaySched

function getSchedHTML ( theBldg, z, name, letter, x, y ){
	var theHTML = "";
	var stuff = z.split(",");
	
	for (q = 0; q < stuff.length; q+=4){
		if (q>3)
			theHTML += "<br>";
		theHTML += stuff[q]+"<br>"+stuff[q+1]+" - "+stuff[q+2]+"<br>Room "+stuff[q+3]+"<br>";
	}
	
	return theHTML;
	
}// JavaScript Document
