$(document).ready(function() {
	//browser detection
	//Redirect IE versions below 7
	if ((($.browser.msie)&&($.browser.version.substr(0,1)<7))) {
		window.location='http://www.iupui.edu/about/maps/campusmap_low.html';
	}

	isChrome=/chrome/.test(navigator.userAgent.toLowerCase());

	setElementHeights();

	if (typeof zoom=="undefined") zoom="";
	if (typeof center=="undefined") center="";
	initialize(zoom,center);

	$('#map_canvas').data('selected','');
	$('#map_canvas').data('thisParking','');

	$(window).bind('resize', function () {
		setElementHeights();
	});
	screenResStyle();
	$('.error').hide();

	showRouteMarkers("points-of-interest");

	noAnim=0;
	if ((($.browser.msie)&&($.browser.version.substr(0,1)<7))) noAnim=1;

	if (isChrome) {
		// chrome only css mods
		$("head").append("<style>.infoWindowClose { top:20px; } </style>");
	}

	$('.recenter').click(function(e) {
		e.preventDefault();
		map.setCenter(new google.maps.LatLng(39.77323162,-86.1741077));
	});

	$('.reset').click(function(e) {
		e.preventDefault();
		clearMenus();
		initialize();
	});

	// POSITION MAPINFO
	var newh=parseInt($('#mn').height())+parseInt($('#mn').css("padding-top"));
	$('#mapInfo').css("top", newh+"px");
	$('#mapInfo').css("display","block");

	$('.about').click(function(e) {
		e.preventDefault();
		clearMenus();
		$("#about").css("left",$("#mn").outerWidth()+"px");
		$("#about").css("opacity","0");
		$("#about").css("display","block");
		$('#about').animate({ opacity:1 },1000);
	});
	$('.feedback').click(function(e) {
		e.preventDefault();
		clearMenus();
		$("#feedback").css("left",$("#mn").outerWidth()+"px");
		$("#feedback").css("opacity","0");
		$("#feedback").css("display","block");
		$('#feedback').animate({ opacity:1 },1000);
	});

	$('a.subM').click(function(e) {
		e.preventDefault();
		clearMenus();
		if ($('#map_canvas').data('selected')!==$(this).attr('name')){
			$(this).addClass('selected');
			showOptionBox($(this).attr('name'));
		} else {
			$('#map_canvas').data('selected','');
		}

	});
	$('.shuttleRoute').each(function() {
		routeName=$(this).attr('name');
		$('#map_canvas').data(routeName,'');

	});
	$('.collection').each(function() {
		routeName=$(this).attr('id');
		$('#map_canvas').data(routeName,'');
		$('#map_canvas').data(routeName+"Loaded",0);
	});
	$('.sortBldgCode').live('click',function(e) {
		e.preventDefault();
		$('#obBuildings ul').css('opacity','0');
		sortBuildings('code');
		$(".sortBldgCode").addClass("sortBldgName");
		$(".sortBldgCode").removeClass("sortBldgCode");
		$(".sortBldgName").html("Sort list by building name");
		$('#obBuildings ul').animate({ opacity:1 },500);

	});
	$('.sortBldgName').live('click',function(e) {
		e.preventDefault();
		$('#obBuildings ul').css('opacity','0');
		sortBuildings('name');
		$(".sortBldgName").addClass("sortBldgCode");
		$(".sortBldgName").removeClass("sortBldgName");
		$(".sortBldgCode").html("Sort list by building code");
		$('#obBuildings ul').animate({ opacity:1 },500);
	});

	$('.shuttleRoute').click(function(e) {
		e.preventDefault();
		routeName=$(this).attr('id');
		if ($('#map_canvas').data(routeName)!=='s') {
			showRoute(routeName,e);
			showRouteMarkers(routeName);
			$(this).removeClass("selected");
			$(this).addClass("selected");

		} else {
			//$('#map_canvas').data(routeName,'');
			hideRouteMarkers(routeName);
			hideRoute(routeName,e);
			$(this).removeClass("selected");
		}



	});

	$('.collection').live("click",function(e) {
		e.preventDefault();
		collectionName=$(this).attr('id');

		if(!$('#map_canvas').data(collectionName+"Loaded")) {
			$(this).addClass("loading");
			$.getScript("js/"+collectionName+".js",function() {
				$('#map_canvas').data(collectionName+"Loaded",1);
				toggleCollection(e,collectionName);
				$(".loading").each(function() {
					$(this).removeClass("loading");
				});
			});
		} else {
			toggleCollection(e,collectionName);
		}


	});

	function toggleCollection(e,collectionName){
		if ($('#map_canvas').data(collectionName)!=='s') {
			$('#map_canvas').data(collectionName,'s');
			showRouteMarkers(collectionName);
		} else {
			$('#map_canvas').data(collectionName,'');
			hideRouteMarkers(collectionName);
		}
	}

	$('#studentParking').click(function(e) {
		e.preventDefault();
		$('.parkingLot').each(function(){ $(this).removeClass("selected"); });
		if ($('#map_canvas').data('thisParking')!=='s') {
			$('#studentParking').addClass("selected");
			toggleParking("E");
			$('#map_canvas').data('thisParking','s');
		} else {
			$('#map_canvas').data('thisParking','');
			toggleParking();
		}
	});
	$('#guestParking').click(function(e) {
		e.preventDefault();
		$('.parkingLot').each(function(){ $(this).removeClass("selected"); });
		if ($('#map_canvas').data('thisParking')!=='g') {
			$('#guestParking').addClass("selected");
			toggleParking("V M");
			$('#map_canvas').data('thisParking','g');
		} else {
			$('#map_canvas').data('thisParking','');
			toggleParking();
		}
	});
	$('#aParking').click(function(e) {
		e.preventDefault();
		$('.parkingLot').each(function(){ $(this).removeClass("selected"); });
		if ($('#map_canvas').data('thisParking')!=='a') {
			$('#aParking').addClass("selected");
			toggleParking("A");
			$('#map_canvas').data('thisParking','a');
		} else {
			$('#map_canvas').data('thisParking','');
			toggleParking();
		}
	});
	$('#bParking').click(function(e) {
		e.preventDefault();
		$('.parkingLot').each(function(){ $(this).removeClass("selected"); });
		if ($('#map_canvas').data('thisParking')!=='b') {
			$('#bParking').addClass("selected");
			toggleParking("B");
			$('#map_canvas').data('thisParking','b');
		} else {
			$('#map_canvas').data('thisParking','');
			toggleParking();
		}
	});
	$('#housingParking').click(function(e) {
		e.preventDefault();
		$('.parkingLot').each(function(){ $(this).removeClass("selected"); });
		if ($('#map_canvas').data('thisParking')!=='h') {
			$('#housingParking').addClass("selected");
			toggleParking("H");
			map.setCenter(new google.maps.LatLng(39.77419227607918,-86.18405342102051));
	//		map.setZoom(16);
			$('#map_canvas').data('thisParking','h');
		} else {
			toggleParking();
			$('#map_canvas').data('thisParking','');
		}
	});
	$('#indianaParking').click(function(e) {
		e.preventDefault();
		$('.parkingLot').each(function(){ $(this).removeClass("selected"); });
		if ($('#map_canvas').data('thisParking')!=='i') {
			$('#indianaParking').addClass("selected");
			toggleParking("I");
			map.setCenter(new google.maps.LatLng(39.78309725092312,-86.17883920669556));
			$('#map_canvas').data('thisParking','i');
		} else {
			toggleParking();
			$('#map_canvas').data('thisParking','');
		}
	});


	$("#about .mMin").click(function(e) {
		e.preventDefault();
		$("#about").css("opacity","1");
		$('#about').animate({ opacity:0 },250,function() {
			$('#about').css('display','none');
		});
	});
	$("#feedback .mMin").click(function(e) {
		e.preventDefault();
		$("#feedback").css("opacity","1");
		$('#feedback').animate({ opacity:0 },250,function() {
			$('#feedback').css('display','none');
		});

	});

	$('.routeStop a').live ('click',function(e) {
		e.preventDefault();
		window.location=$(this).attr('href');
	});
	$('.infoWindow .gi a').live ('click',function(e) {
		e.preventDefault();
		window.location=$(this).attr('href');
	});

	$('#dirButton').live('click',function(e) {
		e.preventDefault();
		address=$("#dirAddress").val();
		if (address.length>0) {
			calcRoute($('.gic').attr('name'));
			showDirectionsBox();
		}
	});

	$('.obMin').click(function(e) {
		clearMenus();
		$('#map_canvas').data('selected','');
	});

	$('.dirMin').click(function(e) {
		e.preventDefault();
		$('#obDirections').animate({ opacity:0 },250,function() {
			directionsDisplay.setMap();
			$(this).css('display','none');
			$("#map_canvas").css('width',$("body").width()+"px");
		});
	});

	$('.giNav a').live('click',function(e) {
		e.preventDefault();
		$('.gi').each(function(){
			$(this).css('display','none');
		});
		target=$(this).attr('name');
		$(".gi"+target).css('opacity','0');
		$(".gi"+target).css('display','block');
		$(".gi"+target).animate({opacity:1},500);

		if (target=="c") {
			out='<p>Enter your starting address to get directions to this location:</p> <input type="text" id="dirAddress"/><input type="button" id="dirButton" value="Get Directions"/>';
			$(".gic").html(out);
		}

		if (target=="b") {
			$(".gib").load('units.php?id='+$("#giWrap").attr("name"));
		}

		if (target=="d") {
			$(".gid").load('eventXML.php?bc='+$("#giWrap").attr("name"));
		}
	});
	$('.obSB ul a').live ('click',function(e) {
		e.preventDefault();
		exTrig($(this).attr('name'));
	});

	$('#obAttractions a').click(function(e) {
		e.preventDefault();
		attractionTrig($(this).attr('name'));
	});

	$('#feedback form').submit(function() {
		$('.error').hide(); 
		$("#browser").val(navigator.userAgent);
		var name = $("#comments").val(); 
		if (name == "") { 
			$("label#comments_error").show(); 
			$("textarea#comments").focus(); 
			return false; 
		} 

	//SUBMIT FORM 
		$.ajax({
	 		type: "POST",
			url: "fb.php",
			data: $("#feedback #form form").serialize(),
			success: function() {
 				$('#feedback #form').html("<div id='message'></div>");
 				 $('#message').html("<h3>Feedback Submitted!</h3><p>Thanks for helping us improve this service.</p>")
 				.append("")
 				.hide()
 				.fadeIn(1500, function() {
 				 $('#message').append("<img id='checkmark' src='images/check.png' />");
				});
				$('#feedback #form input').each(function() {
					this.val("");
				});
				$('#feedback #form textarea').each(function() {
					this.val("");
				});
 			}
		});
		return false;
	});


	function hideOptionBoxes() {
		$('.optionBox').each(function(){
		if (!$(this).hasClass("noclose")) {
			if (!noAnim&&($(this).css('left').substring(0,$(this).css("left").indexOf("px")) >0)) {
				$(this).css('z-index','700');
				$(this).animate({ left:-30 },250,function() {
					$(this).css('display','none');
				});
			} else {
				$(this).css('left','-16px');
				$(this).css('display','none');
			}
		}
		});
		$('#mn .subM').each(function(d){
			$(this).removeClass('selected');			
		});

	}

	function showOptionBox(target) {
		$('#map_canvas').data('selected',target);
		//display optionbox
		$('#'+target).css('left','-16px');
		$('#'+target).css('z-index','800');
		$('#'+target).css('display','block');

		if (!noAnim) {
			$('#'+target).animate({ left:185 },500);
		} else {
			$('#'+target).css('left','185');
		}
	}

	function showDirectionsBox() {
		//display optionbox
		clearMenus();
		$('#obDirections').css('right','0');
		var mcw=$(document).width()-$('#obDirections').outerWidth()-40;
		$('#map_canvas').css('width',mcw+"px");
		$('#obDirections').css('display','block');
		$('#obDirections').animate({ opacity:1 },500);
	}
	google.maps.event.addListener(map,'zoom_changed',function () {
		zoomManager(map.getZoom());
 });	

	function clearMenus() {
		hideOptionBoxes();
		$("#about").css("display","none");		
		$("#feedback").css("display","none");		
	}

	//preload relevant images
	preloadImages(
'http://www.iupui.edu/map/iw.png',
'http://www.iupui.edu/map/closeiw.png',
'http://www.iupui.edu/map/library_bg.png',
'http://www.iupui.edu/map/trans_bg.png',
'http://www.iupui.edu/map/fitness_bg.png',
'http://www.iupui.edu/map/healthcare_bg.png',
'http://www.iupui.edu/map/plus.png',
'http://www.iupui.edu/map/ajax-loader.gif',
'http://www.iupui.edu/map/minus.png' );

}); 

	// optionbox sorting
	function sortCode(a,b){
		if ((a.childNodes[0].childNodes.length>0)&&(b.childNodes[0].childNodes.length>0)) {
			return a.childNodes[0].childNodes[0].innerHTML > b.childNodes[0].childNodes[0].innerHTML ? 1 : -1;
		} else {
			return -1;
		}
	}

	function sortName(a,b){
		if ((a.childNodes[0].childNodes.length>0)&&(b.childNodes[0].childNodes.length>0)) {
			return a.childNodes[0].childNodes[1].innerHTML > b.childNodes[0].childNodes[1].innerHTML ? 1 : -1;
		} else {
			return -1;
		}
	}

	function sortBuildings(command) {
		// remove pagination
		$('#obBuildings .pag').remove();

		// sort the list
		switch(command) {
		case 'code':
			$('#obBuildings ul li').sort(sortCode).appendTo('#obBuildings ul');
			$('#obBuildings').addClass('byCode');
			break;
		case 'name':
			$('#obBuildings ul li').sort(sortName).appendTo('#obBuildings ul');
			$('#obBuildings').removeClass('byCode');
			break;
		}

		// add pagination
		prev='';
		$('#obBuildings li').each(function() {
			switch(command) {
			case 'code':
				thisIndex=this.childNodes[0].childNodes[0].innerHTML.substring(0,1);
				break;
			case 'name':		
				thisIndex=this.childNodes[0].childNodes[1].innerHTML.substring(0,1);
				break;
			}
			if (thisIndex!==prev) {
				$('<li class="pag">'+thisIndex+'</li>').insertBefore(this);
				prev=thisIndex;
			}
		});
	}

// 
// setElementHeights adjusts the height of the Google Map and the Notices div
// depending on the height of the window.
//

function setElementHeights() {
	h=$(window).height()-$('#notices').outerHeight();
	$('#notices').css("top",h+"px");
	$('#map_canvas').css("height",h+"px");
}

// 
// screenResStyle adjusts the stylesheet based on the user's screen resolution
//
function screenResStyle() {
//if (screen.width> 1600) 
//alert (screen.width+"x"+screen.height);

}

function exTrig(i) {
	var n=i+bt[i];
	google.maps.event.trigger(buildingOverlays[n],"click");
	map.setCenter(bl[i]);
}
function attractionTrig(i) {
//	var n=i+bt[i];
	google.maps.event.trigger(routeMarkers['points-of-interest'][i],"click");
//	map.setCenter(bl[i]);
}

function calcRoute(end) {
 var start = document.getElementById("dirAddress").value;
 var request = {
	origin:start, destination:end, travelMode: google.maps.DirectionsTravelMode.DRIVING, unitSystem: google.maps.DirectionsUnitSystem.IMPERIAL
 };
 directionsService.route(request, function(response, status) {
 if (status == google.maps.DirectionsStatus.OK) {
 directionsDisplay.setDirections(response);
 }
 });
}


function hideRoute(e,d){
	route[e].setMap();
	$('#map_canvas').data(e,'');
	removePoly(route[e]);
//sjh
}
function showRoute(e,d){
	route[e].setMap(map);
	polyManager.push(route[e]);
	$('#map_canvas').data(e,'s');

	if (routeOptions[routeName]!==undefined) {
		if (routeOptions[routeName][0].length>0) {
			l=routeOptions[routeName][0].split(',');
			map.setCenter(new google.maps.LatLng(l[0],l[1]));
		}
		if (routeOptions[routeName][1].length>0) {
			map.setZoom(parseInt(routeOptions[routeName][1]));
		}
	}
}

function showRouteMarkers(routeName) { 
	if (routeMarkers[routeName]!==undefined) {
		for(var i=0,len=routeMarkers[routeName].length; i<len; i++) {
			routeMarkers[routeName][i].setVisible(true);
			markerManager.push(routeMarkers[routeName][i]);
		}
		if (collectionOptions[routeName]!==undefined) {
			if (collectionOptions[routeName][0].length>0) {
				l=collectionOptions[routeName][0].split(',');
				map.setCenter(new google.maps.LatLng(l[0],l[1]));
			}
			if (collectionOptions[routeName][1].length>0) {
				map.setZoom(parseInt(collectionOptions[routeName][1]));
			}
		}
		$("."+routeName).removeClass("selected"); 
		$("."+routeName).addClass("selected"); 
	}
}

function hideRouteMarkers(routeName) { 
	if (routeMarkers[routeName]!==undefined) {
		for(var i=0,len=routeMarkers[routeName].length; i<len; i++) {
			routeMarkers[routeName][i].setVisible(false);
			removeMarker(routeMarkers[routeName][i]);
		}
		$("."+routeName).removeClass("selected"); 
	}
}


function showParking(pType){
	for(var i in parkingLotNames) {
		var val=String(parkingLotNames[i]);
		if (parkingLotTypes[i].indexOf(pType)>-1) {
			pk[val].setMap(map);
			polyManager.push(pk[val]);
			if (pkm[val]!==undefined) {
				pkm[val].setVisible(true);
				markerManager.push(pkm[val]);
			}
		}
	}
}

function toggleParking(show){
	// hide all parking
 for(var i in parkingLotNames) {
 var val=parkingLotNames[i];
		pk[val].setMap(null);
		removePoly(pk[val]);
		if (pkm[val]!==undefined) {
			pkm[val].setVisible(false);
			removeMarker(pkm[val]);
		}

 }
	// display specified parking
	if (show) {
		pTypes=show.split(' ');
		for (var i in pTypes) {
			showParking(pTypes[i]);
		}
	}

}

function ibBTmplte(code,address,city,name,image,offices,btype) {

out='<div id="giWrap" name="'+code+'"><div class="giNav"><a href="" name="a">Info</a>';
if (offices) out+=' <a href="" name="b">Offices</a>';
out+='<a href="" name="c">Directions</a><a href="" name="d">Events</a></div><div class="gi gia">';
if (image.length>0) out+='<img src="'+image+'" width="260" height="210"/><br/>';
out+='<span>'+name;
if (btype!=='OC') out+=' ('+code+') ';
out+='<br/><em>'+address+'</em></span></div><div class="gib gi"></div><div class="gid gi"></div><div class="gic gi" name="'+address+', '+city+'"></div></span></div>';

return buildIW(out);

}


function buildIW (content) {
out='<a onclick="closeInfowindow()" class="infoWindowClose"></a><table><tr><td class="topl"><i></i></td><td class="topm"><i></i></td><td class="topr"><i></i></td></tr>';
out+='<tr><td class="midl"><i></i></td><td class="center" onMouseOver="map.setOptions({ draggable:false });" onMouseOut="map.setOptions({ draggable:true });">';
out+=content;
out+='</td><td class="midr"><i></i></td></tr>';
out+='<tr><td class="botl"><i></i></td><td class="botm"><i></i></td><td class="botr"><i></i></td></tr>';
return out;
}


function gmSqBox(lat,lon) {
offset=.0005;
pc=[
new google.maps.LatLng(lat-offset,lon-offset),
new google.maps.LatLng(lat-offset,lon+offset),
new google.maps.LatLng(lat+offset,lon+offset),
new google.maps.LatLng(lat+offset,lon-offset),
new google.maps.LatLng(lat-offset,lon-offset)
];
return pc;
}

function mkPkgPoly(pc) {
//	return new google.maps.Polyline({ path: pc, strokeColor: '#333333', strokeOpacity: 1.0, strokeWeight: 2 });
return mkPkgPolygon(pc);
}
function mkPkgPolygon(pc) {
	return new google.maps.Polygon({ paths: pc, strokeColor: '#666666', strokeOpacity: 1.0, strokeWeight: 2, fillColor:'#AA0000', fillOpacity:0.8 });
}

function mkPkgMkr(pc,marker) {
	return new google.maps.Marker({ position: pc, map:map,title:'Parking', icon:marker, visible:false });
}

function showIW(content) {
	$('#iw').hide();
	$('#iw').html(content);
	$('#iw').css('left',$('#map_canvas').data('mouseX'));
	top=$('#map_canvas').data('mouseY')-$('#iw').outerHeight();
	$('#iw').css('top',top);
	$('#iw').show();
}

function closeInfowindow() {
 overlay.setMap();
 resetOverlaySelection();
}



function resetOverlaySelection() {
 for (i in buildingOverlays) {
 buildingOverlays[i].setOptions({ fillOpacity:.4, strokeColor:'#666666' });
 }
}

function showInfowindow(latlon,content) {
 if (overlay!==null) overlay.setMap();
 overlay = new iwOverlay(latlon,content,map);
 resetOverlaySelection();
}


function iwOverlay(latlon,content,map) {
 // Now initialize all properties.
 this.latlng_ = latlon;
 this.html_ = content;
 this.map_ = map;
 this.div_ = null;
 // Explicitly call setMap on this overlay
 this.setMap(map);
}


iwOverlay.prototype = new google.maps.OverlayView();
overlay=null;
iwOverlay.prototype.draw = function() {
//In the draw() method, you should position the elements created in the onAdd method
//
//Implement this method to draw or update the overlay. This method is called after onAdd() and when the 
//position from projection.fromLatLngToPixel() would return a new value for a given LatLng. This can 
//happen on change of zoom, center, or map type. It is not necessarily called on drag or resize.
//alert("drawing");
	var op = this.getProjection();
	var point = op.fromLatLngToDivPixel(this.latlng_);
	var absPoint=op.fromLatLngToContainerPixel(this.latlng_);

	// Now position our DIV based on the supplied latlon
	newX=point.x-($(this.div_).width()/2);
	absX=absPoint.x-($(this.div_).width()/2);
	absY=absPoint.y-($(this.div_).height());

	// if too far left (under the page nav)
	if (absX<300) map.panBy(-(300-absX),0);
	// if too far right (off the page)
	if (absX>($(document).width()-$(this.div_).width())) map.panBy(($(this.div_).width()/2)+100,0);

	if (absY<10) map.panBy(0,(absY))
	$(this.div_).css("left",newX);
	$(this.div_).css("top", point.y-$(this.div_).height());
//	this.div_.style.top=point.y-$(this.div_).height();
//	this.div_.style.position="absolute";
//	this.div_.style.display="block";

};


iwOverlay.prototype.onAdd = function() {
//this is triggered by the "setMap(map)" call above
//
//In the add() method, you should create DOM objects and append them as children of the panes.
//
//Implement this method to initialize the overlay DOM elements. This method is called once after setMap() 
//is called with a valid map. At this point, panes and projection will have been initialized.
	if (this.div_) {
		this.setMap();
	}

 div = document.createElement('DIV');
 
 div.css=({
	position : 'absolute',
	width : 234,
	background:'white'
	});
 if (!$(div).hasClass("infoWindow")) $(div).addClass("infoWindow");
 $(div).addClass("infoWindow");
 div.innerHTML = this.html_;
 this.div_=div;
 var panes = this.getPanes();
 panes.floatPane.appendChild(this.div_);
};

iwOverlay.prototype.onRemove = function() {
 this.div_.parentNode.removeChild(this.div_);
};


 // Note that the visibility property must be a string enclosed in quotes
 iwOverlay.prototype.hide = function() {
 if (this.div_) {
 this.div_.style.visibility = "hidden";
 }
 };

 iwOverlay.prototype.show = function() {
 if (this.div_) {
 this.div_.style.visibility = "visible";
 }
 };

 iwOverlay.prototype.toggle = function() {
 if (this.div_) {
 if (this.div_.style.visibility == "hidden") {
 this.show();
 } else {
 this.hide();
 }
 }
 };

 iwOverlay.prototype.toggleDOM = function() {
 if (this.getMap()) {
 this.setMap(null);
 } else {
 this.setMap(this.map_);
 }
 map.draggable=true;
 };

	function showCampusesCollection() {
		if(!$('#map_canvas').data("campusesLoaded")) {
			$.getScript("js/campuses.js",function() {
				$('#map_canvas').data("campusesLoaded",1);
				showRouteMarkers("campuses");
			});
		} else {
			showRouteMarkers("campuses");
		}
	}

function myGUnload() {
 // deletes overlays, which deletes their listeners.
 // prevents massive memory leaks in IE6, since IE6 has bad memory mgmt
 if (buildingOverlays) {
 for (i in buildingOverlays) {
 buildingOverlays[i].setMap(null);
 }
 buildingOverlays.length = 0;
 }

 if (pk) {
 for (i in pk) {
 pk[i].setMap(null);
 }
 pk.length = 0;
 }

 if (routeMarkers) {
 for (i in routeMarkers) {
	 for (j in routeMarkers[i]) {
		routeMarkers[i][j].setMap(null);
	 }
	 routeMarkers[i].length=0;
 }
 routeMarkers.length = 0;
 }

 // Remove jQuery Listeners 
	$('#mn').css("display","none");
	$('.infoWindow').css("display","none");
	$('.optionBox').css("display","none");
	$('#mn a.subM').remove();
	$('.shuttleRoute').remove();
	$('.dirMin').remove();
	$('.obMin').remove();
	$('.obSB a').remove();
	$('.giNav a').remove();
	$("#mapInfo").css("display","none");
	$("#about").css("display","none");
	$("#feedback").css("display","none");
}

function zoomManager(zoom) {
// iterates through currently visible markers/polygons
//
// if zoomed out to a certain point, hide all overlays
// if zoomed in to a certain level, show all overlays
	if (zoom>13) {
		// show all buildings, polys
		for (i in polyManager) {
			if (polyManager[i]!==null) polyManager[i].setMap(map);
		}
		for (i in markerManager) {
			if (markerManager[i]!==null) markerManager[i].setVisible(true);
		}
		// HIDE IUPUI MARKER
		hideRouteMarkers('campuses');
	} else if (zoom>5) {
		hideAll();
		showRouteMarkers("campuses");		
	} else {
		hideAll();
		routeMarkers['campuses'][0].setVisible(true);
	}
}

function hideAll() {
//Hide all markers/overlays
	for (i in polyManager) {
		if (polyManager[i]!==null) polyManager[i].setMap(null);
	}
	for (i in markerManager) {
		if (markerManager[i]!==null) markerManager[i].setVisible(false);
	}
}

function removeMarker(input) {
	for (i in markerManager) {
		if (markerManager[i]==input) {
			markerManager[i]=null;
			break;
		}
	}
}
function removePoly(input) {
	for (i in polyManager) {
		if (polyManager[i]==input) {
			polyManager[i]=null;
			break;
		}
	}
}


 // image preloader
 // Arguments are image paths relative to the current page.
function preloadImages () {
 var args_len = arguments.length;
 imageCache=[];
 for (var i = args_len; i--;) {
 var cacheImage = document.createElement('img');
 cacheImage.src = arguments[i];
 imageCache.push(cacheImage);
 }
 }



//
// Google Maps function for generating overlays (masks) over inaccurate Google Maps features
//
function IUPUIOverlay(bounds, image, map) {

 // Now initialize all properties.
 this.bounds_ = bounds;
 this.image_ = image;
 this.map_ = map;
 this.div_ = null;
 this.setMap(map);
}
IUPUIOverlay.prototype = new google.maps.OverlayView();

IUPUIOverlay.prototype.onAdd = function() {

 var div = document.createElement('DIV');
 div.style.border = "none";
 div.style.borderWidth = "0px";
 div.style.position = "absolute";
 var img = document.createElement("img");
 img.src = this.image_;
 img.style.width = "100%";
 img.style.height = "100%";
 div.appendChild(img);

 this.div_ = div;

 var panes = this.getPanes();
 panes.overlayLayer.appendChild(div);
}

IUPUIOverlay.prototype.draw = function() {

 var overlayProjection	= this.getProjection();

 var sw = overlayProjection.fromLatLngToDivPixel(this.bounds_.getSouthWest());
 var ne = overlayProjection.fromLatLngToDivPixel(this.bounds_.getNorthEast());

 var div = this.div_;
 div.style.left = sw.x	+ 'px';
 div.style.top	= ne.y + 'px';
 div.style.width = (ne.x - sw.x) + 'px';
 div.style.height = (sw.y - ne.y) + 'px';
}


