var map = null;
var markerManager;
var customIcons = new Object;
var groupInfo = new Object;
var groups = new Object;
var imageOverlays = new Object;
var markers = new Object;
var printMaps = new Object;
var imageMinZoom = 16;
var prevMapType = G_NORMAL_MAP;
var side_bar_html = "";
var side_bar_data = new Object;
var streetView = false;
var streetViewMarker;
var streetViewClient;
var streetViewPanorama = null;
var streetViewHtml;
var streetViewIcon;
var streetViewOverlay = null;
var streetViewLatLng = new GLatLng(43.127018, -77.627731);
var streetViewContentNode;
var lastStreetViewMarkerLocation;
var infoWindowMaxWidth = 500;
var lastMarkerID = -1;
var reOpenMarkerTimer = 100;
var focusMarkerTimer = 500;
var parentChildGroups = new Object;
var infowindowopen = false;
var defaultLat = 43.142737;
var defaultLng = -77.608968;
var defaultZoom = 13;
	
function createMarker(point,title,html,markerID,hasInfoWindow) {//max,
    var marker = new GMarker(point, {title:title,clickable:hasInfoWindow});
	marker.title = title;
	marker.type = 1;
	marker.myhtml = html;
	marker.clickable = hasInfoWindow;
    return marker;
}
    
function createMarker(point,title,html,icon,markerID,hasInfoWindow) {//max,
    var marker = new GMarker(point, {title:title,icon:icon,clickable:hasInfoWindow});
	marker.title = title;
	marker.type = 1;
	marker.myhtml = html;
	marker.clickable = hasInfoWindow;
    return marker;
}

function createCampusGroupMarker(point,title,icon,markerID,gId) {
    var marker = new GMarker(point, {title:title,icon:icon});
	marker.title = title;
	marker.type = 2;
	marker.gId = gId;
	marker.clickable = true;
    return marker;
}

function reopenLastMarker() {
	if((lastMarkerID != -1) && (markers[lastMarkerID][4]) && (!infowindowopen) &&
	   (map.getZoom() >= markers[lastMarkerID][1]) && (map.getZoom() <= markers[lastMarkerID][2]))
		GEvent.trigger(markers[lastMarkerID][0], "click");
}

function myclick(i, groupID) {
	if(!markers[i][3]) {
		markerManager.addMarker(markers[i][0], markers[i][1], markers[i][2]);
		markers[i][3] = true;
	}
	if(map.getZoom() < markers[i][1]) {
		goToMarker(i, markers[i][1]);
	}
	else {
		map.panTo(markers[i][0].getLatLng());
	}
	if(markers[i][4]) {
		setTimeout(function(){GEvent.trigger(markers[i][0], "click")}, 100);
	}
}
    
function goToMarker(markerID, zoom) {
	if(zoom) {
		map.setZoom(parseInt(zoom));
	}
	else {
		map.setZoom(markers[markerID][1]);
		map.zoomIn();
	}
	map.panTo(markers[markerID][0].getLatLng());
}

function goToPoint(lat, lng, zoom) {
	map.setZoom(zoom);
	map.panTo(new GLatLng(lat,lng));
}
 
function checkBoxChanged(checkbox) {
	var zoom;
	var lat;
	var lng;
	if(checkbox.checked) {
		addMarkers(groups[checkbox.value]);
		if((groupInfo[checkbox.value][1].lat() != 0) && (groupInfo[checkbox.value][1].lng() != 0) && groupInfo[checkbox.value][4]) {
			zoom = groupInfo[checkbox.value][4];
			lat = groupInfo[checkbox.value][1].lat();
			lng = groupInfo[checkbox.value][1].lng();
			if(map.getZoom() > zoom && checkbox.value != 14)
			{
				zoom = map.getZoom();
				lat = map.getCenter().lat();
				lng = map.getCenter().lng();
			}
			goToPoint(lat, lng, zoom);// groupInfo[checkbox.value][4]);
		}
	}
	else {
		lastMarkerID = -1;
		removeMarkers(groups[checkbox.value]);
	}
}
	
function collapseToggle(obj, target) {
    var link;
    var img = obj.getElementsByTagName('img')[0];
	
    if(img.src == "http://www.rochester.edu/maps/images/minus.gif") {
        link = document.getElementById(target);
        link.style.display = 'none';
        img.src = "images/plus.gif";
    }
    else {
        link = document.getElementById(target);
        link.style.display = '';
        img.src = "images/minus.gif";
    }
}

function groupClick(lat, lng, zoom, groupName){
	goToPoint(lat, lng, zoom);
	var obj = document.getElementById(groupName + 'CollapseToggle');
	if(document.getElementById(groupName + 'Links').style.display == 'none'){
		collapseToggle(obj, groupName + 'Links');
	}
}

function addMarkers(markerIDs) {
	if(markerIDs){
	    for(var i = 0; i < markerIDs.length; ++i) {
			if(!markers[markerIDs[i]][3]) {
				markerManager.addMarker(markers[markerIDs[i]][0], markers[markerIDs[i]][1], markers[markerIDs[i]][2]);
				markers[markerIDs[i]][3] = true;
			}
	    }
	}
}
	
function removeMarkers(markerIDs) {
	if(markerIDs){
	    for(var i = 0; i < markerIDs.length; ++i) {
			if(markers[markerIDs[i]][3]) {
		        markerManager.removeMarker(markers[markerIDs[i]][0]);
				markers[markerIDs[i]][3] = false;
			}
	    }
	}
}
	
function clearMarkers() {
	for(var markerInfo in markers) {
		if(markers[markerInfo][3])
			markerManager.removeMarker(markers[markerInfo][0]);
	}
}
	
function removeImages(images) {
	var image;
	for(image in images) {
		map.removeOverlay(imageOverlays[image]);
	}
}
	
function addImages(images) {
	var image;
	for(image in images) {
		map.addOverlay(imageOverlays[image]);
	}
}
	
function addChildGroups(groupID) {	
	if(side_bar_data[groupID] != undefined)
	{
		side_bar_html += side_bar_data[groupID][0];
		for(var cId in parentChildGroups[groupID]) {
			if(parentChildGroups[groupID][cId] != 0) {
				addChildGroups(parentChildGroups[groupID][cId]);
			}
		}
		side_bar_html += side_bar_data[groupID][1];
	}
}
	
function isRootGroup(groupID) {
	for(var id in parentChildGroups) {
		for(cId in parentChildGroups[id]) {
			if(parentChildGroups[id][cId] == groupID) {
				return false;
			}
		}
	}
	return true;
}

function setToDefault(){
	goToPoint(defaultLat, defaultLng, defaultZoom);	
}

function initialize() {
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map_canvas"));
        map.setCenter(new GLatLng(defaultLat,defaultLng), defaultZoom);
	    map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.addControl(new StreetViewControl());
        markerManager = new MarkerManager(map, {maxZoom:19});
		streetViewClient = new GStreetviewClient();
			
		var browserType = navigator.appName;

		GDownloadUrl("maps_phptoxml.php", function(data) {
			var xml = GXml.parse(data);
			var icons = xml.documentElement.getElementsByTagName("icon");
			for(var i = 0; i < icons.length; i++) {
				var icon = new GIcon(G_DEFAULT_ICON);
				var id = icons[i].getAttribute("id");
				icon.image = icons[i].getAttribute("image");
			    icon.shadow = icons[i].getAttribute("shadow");
			    icon.iconSize = new GSize(parseInt(icons[i].getAttribute("iconSizeX")), 
										  parseInt(icons[i].getAttribute("iconSizeY")));
			    icon.shadowSize = new GSize(parseInt(icons[i].getAttribute("shadowSizeX")), 
										    parseInt(icons[i].getAttribute("shadowSizeY")));
			    icon.iconAnchor = new GPoint(parseInt(icons[i].getAttribute("iconAnchorX")), 
										     parseInt(icons[i].getAttribute("iconAnchorY")));
			    icon.infoWindowAnchor = new GPoint(parseInt(icons[i].getAttribute("infoWindowAnchorX")), 
												   parseInt(icons[i].getAttribute("infoWindowAnchorY")));
				var strImageMap = icons[i].getAttribute("imageMap");
				if(strImageMap != ""){
					icon.imageMap = strImageMap.split(',');
				}
				customIcons[id] = icon;
			}
			
			var groupIDs = [];
			var xmlGroups = xml.documentElement.getElementsByTagName("group");
			for (var i = 0; i < xmlGroups.length; i++) {
				var id = xmlGroups[i].getAttribute("id");
				var name = xmlGroups[i].getAttribute("name");
				var panPoint = new GLatLng(parseFloat(xmlGroups[i].getAttribute("panLat")),
										   parseFloat(xmlGroups[i].getAttribute("panLng")));
				var hasSideBarLinks = xmlGroups[i].getAttribute("hasSideBarLinks");
				var parentGroupID = xmlGroups[i].getAttribute("parentGroupID");
				var hasGroupLink = xmlGroups[i].getAttribute("hasGroupLink");
				var panZoom = parseInt(xmlGroups[i].getAttribute("panZoom"));
				var temp = new Array(name, panPoint, hasSideBarLinks, hasGroupLink, panZoom);
				groupInfo[id] = temp;
				groupIDs.push(id);
				if(!parentChildGroups[id]) {
					parentChildGroups[id] = new Array();
				}
				
				if(parentGroupID) {
					if(parentChildGroups[parentGroupID]) {
						parentChildGroups[parentGroupID].push(id);
					}
					else{
						parentChildGroups[parentGroupID] = new Array();
						parentChildGroups[parentGroupID].push(id);
					}
				}
				side_bar_data[id] = new Array("", "");
				var tempGroupName = name;
				tempGroupName = tempGroupName.replace(" ", "");
				tempGroupName += id;
				if(hasSideBarLinks == 1) {
					var top = '<div class="sidebarGroups">';
					var linkdiv;
					if(parentGroupID != ""){
						top += '<a id="' + tempGroupName + 'CollapseToggle" href="#" onclick="collapseToggle(this,\'' + tempGroupName + 'Links\');" class="sidebarGroup"><img src="images/plus.gif" class="sidebarImage"></a>';
						linkdiv = '<div id="' + tempGroupName + 'Links" class="sidebarLinks" style="display:none;">';
					}
					else{
						//top += '<a id="' + tempGroupName + 'CollapseToggle" href="#" onclick="collapseToggle(this,\'' + tempGroupName + 'Links\');" class="sidebarGroup"><img src="images/minus.gif" class="sidebarImage"></a>';
						linkdiv = '<div id="' + tempGroupName + 'Links" class="sidebarLinks">';
					}
					if(id == 14){
						top += '<input type="checkbox" id="' + id + 'Checkbox" value="' + id + '" onClick="checkBoxChanged(this)" checked="true">';
					}
					else{
						top += '<input type="checkbox" id="' + id + 'Checkbox" value="' + id + '" onClick="checkBoxChanged(this)">';
					}
					if(hasGroupLink == 1){
						top += '<a id="'+ tempGroupName +'Link" href="javascript:groupClick('+panPoint.lat()+','+panPoint.lng()+','+panZoom+',\''+tempGroupName+'\');">'+name+'</a><br>';
					}
					else{
						top += '<label for="' + id + 'Checkbox">' + name + '</label><br>';
					}
					top += linkdiv;
					side_bar_data[id][0] = top;
				}
				else {
					var top =  '<div>';
					var marginleft;
					
					if(browserType == "Microsoft Internet Explorer")
						marginleft = 11;
					else
						marginleft = 15;
					
					top += '<input type="checkbox" id="' + id + 'Checkbox" value="' + id + '" onClick="checkBoxChanged(this)" style="margin-left:' + marginleft + 'px">';
					top += '<label for="' + id + 'Checkbox">' + name + '</label><br>';
					var bottom = '</div>';
					side_bar_data[id][0] = top;
					side_bar_data[id][1] = bottom;
				}
			}
								
			var xmlMarkers = xml.documentElement.getElementsByTagName("marker");
			for (var i = 0; i < xmlMarkers.length; i++) {
				var id = xmlMarkers[i].getAttribute("id");
				var name = xmlMarkers[i].getAttribute("name");
	            var point = new GLatLng(parseFloat(xmlMarkers[i].getAttribute("lat")),
	                                    parseFloat(xmlMarkers[i].getAttribute("lng")));
				var minZoom = parseInt(xmlMarkers[i].getAttribute("minZoom"));
				var maxZoom = parseInt(xmlMarkers[i].getAttribute("maxZoom"));
				var isGrouped = parseInt(xmlMarkers[i].getAttribute("isGrouped"));
				var iconID = xmlMarkers[i].getAttribute("icon_id");
				var tempIcon = customIcons[iconID];
				var hasInfoWindow = parseInt(xmlMarkers[i].getAttribute("hasInfoWindow"));
				var isCampusGroupMarker = parseInt(xmlMarkers[i].getAttribute("isCampusGroupMarker"));
				var campusGroupID = xmlMarkers[i].getAttribute("campusGroupID");
				
				//Grab description from description childnode of marker
				var description = "";
				if(browserType == "Microsoft Internet Explorer") {
					description = '<div class="infoWindow">' + xmlMarkers[i].text + '</div>';
				}
				else {
					description = '<div class="infoWindow">' + xmlMarkers[i].textContent + '</div>';
				}
				
				//Change the link to make it open in new window
				/*if(description.indexOf("href") != -1){
					var startInd = description.indexOf("href");
					var endInd = description.indexOf("'", startInd + 6);
					var tmpLink = description.substring(startInd, endInd + 1);
					var tmpStr = tmpLink + " target='_blank'";
					description = description.replace(tmpLink, tmpStr);
				}*/
					
	            if(isCampusGroupMarker == 1){
					var marker = createCampusGroupMarker(point, name, tempIcon, id, campusGroupID);
				}
				else{
					var marker = createMarker(point, name, description, tempIcon, id, hasInfoWindow);
				}
				var isOnMap = false;
				var temp = new Array(marker, minZoom, maxZoom, isOnMap, hasInfoWindow);
				markers[id] = temp;
					
				if(isGrouped == 0) { 
					markerManager.addMarker(marker, minZoom, maxZoom);
				}
			}
				
			var xmlImageOverlays = xml.documentElement.getElementsByTagName("imageOverlay");
			for(var i = 0; i < xmlImageOverlays.length; i++) {
				var id = xmlImageOverlays[i].getAttribute("id");
				var swBoundLat = parseFloat(xmlImageOverlays[i].getAttribute("swBoundLat"));
				var swBoundLng = parseFloat(xmlImageOverlays[i].getAttribute("swBoundLng"));
				var neBoundLat = parseFloat(xmlImageOverlays[i].getAttribute("neBoundLat"));
				var neBoundLng = parseFloat(xmlImageOverlays[i].getAttribute("neBoundLng"));
				var image = xmlImageOverlays[i].getAttribute("image");
				var bounds = new GLatLngBounds(new GLatLng(swBoundLat,swBoundLng), new GLatLng(neBoundLat,neBoundLng));
				var imageOverlay = new GGroundOverlay(image, bounds);
				imageOverlays[id] = imageOverlay;
			}
				
			var groupMarkers = xml.documentElement.getElementsByTagName("groupmarker");
			for (var i = 0; i < groupMarkers.length; i++) {
				var group_id = groupMarkers[i].getAttribute("group_id");
				var marker_id = groupMarkers[i].getAttribute("marker_id");
				
				if(groups[group_id]) {
					groups[group_id].push(marker_id);
				}
				else {
					groups[group_id] = new Array();
					groups[group_id].push(marker_id);
				}
				if(groupInfo[group_id][2] == 1 && group_id != 14) {
					side_bar_data[group_id][1] += '<a class="sidebarEntry" href="javascript:myclick(' + marker_id + ',' + group_id + ')">' + markers[marker_id][0].getTitle() + '</a><br>';
				}
			}
			
			for(var id in side_bar_data) {
				if(groupInfo[id][2] == 1) {
					side_bar_data[id][1] += "</div></div>";
					if(side_bar_data[id][1] == "</div></div>" && id != 14) {
						side_bar_data[id][0] = side_bar_data[id][0].replace('<input type="checkbox" id="' + id + 'Checkbox" value="' + id + '" onClick="checkBoxChanged(this)">', "&nbsp;");
					}
				}				
			}
			
			//*******Group hierarchy functionality*******
			for(var id in parentChildGroups) {
				if(isRootGroup(id)) {
					side_bar_html += side_bar_data[id][0];
					for(var cId in parentChildGroups[id]) {
						if(parentChildGroups[id][cId] != 0)	{
							addChildGroups(parentChildGroups[id][cId]);
						}
					}
					side_bar_html += side_bar_data[id][1];
				}
			}
			
			//Add Print Maps to Sidebar
			var printMapsSideBar = '<div style="margin-left:5px;">Printable Maps</div>';
			printMapsSideBar += '<div id="PrintMapsLinks" class="sidebarLinks">';
				
			//Load Print Maps
			var xmlPrintMaps = xml.documentElement.getElementsByTagName("printmap");
			for(var i = 0; i < xmlPrintMaps.length; i++) {
				var name = xmlPrintMaps[i].getAttribute("name");
				var path = xmlPrintMaps[i].getAttribute("path");
				var printMap = new Array(name, path);
				printMaps[id] = printMap;
				
				printMapsSideBar += '<a id="'+name+'MapLink" href="'+path+'">'+name+'</a><br />';
			}
			printMapsSideBar += '</div>';
			side_bar_html += printMapsSideBar;
			
			document.getElementById("ur_leftsidebar").innerHTML += side_bar_html;
			
			//Add Campus Markers to map
			addMarkers(groups[14]);
        });
			
        //Add Street View
		loadStreetView();
		
		//Add map click event and functionality to open marker info window
		GEvent.addListener(map, "click", function(overlay, point){
			if (overlay) {
				if(overlay.clickable)
				{
					// we now need a check here in case the overlay is the info window
					// only our markers will have a .myhtml property
					if (overlay.type == 1) { //Regular InfoWindow Marker
						overlay.openInfoWindowHtml(overlay.myhtml,{maxWidth:infoWindowMaxWidth});
					}
					else if (overlay.type == 2) { //Campus Group Marker
						var g = groupInfo[overlay.gId];
						var tName = g[0].replace(" ", "");
						tName += overlay.gId;
						groupClick(g[1].lat(), g[1].lng(), g[4], tName);
					}
				}
			} else if (point) {
				//whatever you want to happen if you don't click on an overlay.
			}
		});
		
		//Adds or Removes the Image Overlays depending on the MapType selected
		GEvent.addListener(map, "maptypechanged", function()	{
			var mapType = map.getCurrentMapType();
			if((mapType == G_NORMAL_MAP) || (mapType == G_HYBRID_MAP)) {
				if((prevMapType != G_NORMAL_MAP) && (prevMapType != G_HYBRID_MAP)) {
					if(map.getZoom() >= imageMinZoom)
					{
						addImages(imageOverlays);
					}
				}
			}
			else {
				removeImages(imageOverlays);
			}
			prevMapType = mapType;
		});
			
		GEvent.addListener(map, "zoomend", function(oldzoom, newzoom) {
			var mapType = map.getCurrentMapType();
			if((mapType == G_NORMAL_MAP) || (mapType == G_HYBRID_MAP)) {
				if((oldzoom < imageMinZoom) && (newzoom >= imageMinZoom)) {
					addImages(imageOverlays);
				}
				else if((oldzoom >= imageMinZoom) && (newzoom < imageMinZoom)) {
					removeImages(imageOverlays);
				}
			}
		});
        
		GEvent.addListener(map, 'infowindowclose', function() {
			infowindowopen = false;
			setTimeout(reopenLastMarker, reOpenMarkerTimer);
		});
		
		var infowin = map.getInfoWindow();
		GEvent.addListener(infowin, 'closeclick', function() { 
			lastMarkerID = -1;
			infowindowopen = false;
		}); 
				
		setTimeout(readCookies, 1000);
		
		//Read in any get values and focus on that point, used for calendar events when wanting to focus on a building
		var focus = getURLVar("marker");
		var found = false;
		if(focus != '')	{
			setTimeout("focusOnMarker(" + focus + ");", focusMarkerTimer);
		}
    }
	else {
		alert("I'm sorry but this browser does not support Google Maps.");
	}
}

function focusOnMarker(focus) {
	for(keyVal in markers) {
		if(keyVal == focus) {
			if(!markers[keyVal][3])	{
				markerManager.addMarker(markers[keyVal][0], markers[keyVal][1], markers[keyVal][2]);
			}
			goToMarker(keyVal);
			if(markers[keyVal][4]) {
				//GEvent.trigger(markers[keyVal][0], "click");
				setTimeout('GEvent.trigger(markers[' +keyVal+ '][0], "click");', reOpenMarkerTimer);
			}
			//map.setZoom(markers[keyVal][2]);
			//map.panTo(markers[keyVal][0].getLatLng());//alert(markers[keyVal][0].getLatLng());
			//setTimeout('GEvent.trigger(markers[' +keyVal+ '][0], "click");', 5000);//reOpenMarkerTimer);
			found = true;
			break;
		}
	}
}
	
function getURLVar(urlVarName) {
	//divide the URL in half at the '?'
	var urlHalves = window.location.href.split('?');
	var urlVarValue = '';
	if(urlHalves[1]) {
		//Remove any trailing # sign and values
		var urlVarHalves = urlHalves[1].split('#');
		//load all the name/value pairs into an array
		var urlVars = urlVarHalves[0].split('&');
		//loop over the list, and find the specified url variable
		for(i=0; i<=(urlVars.length); i++) {
			if(urlVars[i]) {
				//load the name/value pair into an array
				var urlVarPair = urlVars[i].split('=');
				if (urlVarPair[0] && urlVarPair[0] == urlVarName) {
					//I found a variable that matches, load it's value into the return variable
					urlVarValue = urlVarPair[1];
					//urlVarValue = urlVarValue.replace(new RegExp("_", "g"), " ");
					//urlVarValue = urlVarValue.toLowerCase();
				}
			}
		}
	}
	return urlVarValue;   
}
    
function handleNoFlash(errorCode) {
    if (errorCode == 603) {
        alert("Error: Flash is not supported by your browser");
        return;
    }
}

//Onunload event handler
function leave(){
	//Set up cookies for current status of page.
	setCookies();
	
	GUnload();
}

function setCookies(){
	//Set Map position and zoom cookies
	var latitude = map.getCenter().lat();
	var longitude = map.getCenter().lng();
	var zoom = map.getZoom();
	
	if(latitude != defaultLat || longitude != defaultLng){
		createCookie("lat", latitude, null);
		createCookie("lng", longitude, null);
	}
	createCookie("zoom", zoom, null);
	
	//Read sidebar data to set sidebar cookies
	var gExpand = new Array();
	var gChecked = new Array();
	for(id in groupInfo){
		//Set group expanded cookie
		var gName = groupInfo[id][0];
		gName = gName.replace(" ", "");
		gName += id;
		gName += "CollapseToggle";//alert("id: " + id + ", gN: " + gName);
		
		var link = document.getElementById(gName);
		if(link != null){
			var img = link.getElementsByTagName('img')[0];
			if(img != null){
				 if(img.src == "http://www.rochester.edu/maps/images/minus.gif") {
			        gExpand.push(id);
			    }
			}
		}
		
		//Set group checked cookie
		var gCheckbox = document.getElementById(id + "Checkbox");//alert("C: " + gCheckbox.checked + ", id: " + id);
		if(gCheckbox != null){
			if(gCheckbox.checked && id != 14){
				gChecked.push(id);
			}
		}
	}
	if(gExpand != null){
		createCookie("gExpanded", gExpand.toString(), null);
	}
	if(gChecked != null){
		createCookie("gChecked", gChecked.toString(), null);
	}
	
	//Set special default root checkbox (Univeristy Campuses) cookie
	var ucChecked = document.getElementById(14 + "Checkbox");
	if(ucChecked.checked){
		createCookie("ucChecked", 1, null);
	}
	else{
		createCookie("ucChecked", 0, null);
	}
	
	//Set single markers added cookie
}

function readCookies(){
	//Read sidebar expanded group cookies and expand groups where necessary
	var tmp = readCookie("gExpanded");
	var gExpanded = new Array();
	if(tmp != null){
		gExpanded = tmp.split(',');
	}
	for(i = 0; i < gExpanded.length; i++){
		var id = gExpanded[i];
		if(id != ""){
			var gName = groupInfo[id][0];
			gName = gName.replace(" ", "");
			gName += id;
			gLink = gName + "CollapseToggle";
			gTarget = gName + "Links";
			
			var link = document.getElementById(gLink);
			collapseToggle(link, gTarget);
		}
	}
	
	//Read sidebar groups checked
	tmp = readCookie("gChecked");
	var gChecked = new Array();
	if(tmp != null){
		gChecked = tmp.split(',');
	}
	for(j = 0; j < gChecked.length; j++){
		var id = gChecked[j];
		var gCheckbox = document.getElementById(id + "Checkbox");
		if(gCheckbox != null){
			gCheckbox.checked = true;
			addMarkers(groups[gCheckbox.value]);
			//checkBoxChanged(gCheckbox);
		}
	}
	//Read special case of default root checkbox (University Campuses)
	var ucChecked = readCookie("ucChecked");
	if(ucChecked != null){
		if(ucChecked == "0"){
			var cb = document.getElementById(14 + "Checkbox");
			if(cb != null){
				cb.checked = false;
				checkBoxChanged(cb);
			}
		}
	}
	
	//Read special single markers added
	
	//Read map position and zoom cookies and update map
	var lat = readCookie("lat");
	var lng = readCookie("lng");
	var zoom = readCookie("zoom");
	
	if(zoom == null){
		zoom = defaultZoom;
	}
	if(lat == null){
		lat = defaultLat;
	}
	if(lng == null){
		lng = defaultLng;
	}
	var center = new GLatLng(lat, lng);
	map.setCenter(center, zoom);
}

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}