/*	
 * @author Zihao, Hrishi
 */
var shownLatLng = [];
var showcounter = null;
var inilook=1;
var spellSuggest="";
var lotArray = [];
var libArray = [];
var postArray = [];
var compArray = [];
var nl_center=null;
var NameLabelArray = [],NameLabelMarkerArray=[];
var StopLabelArray = [];
var StopLabelMarkerArray = [];
var icon = new GIcon(G_DEFAULT_ICON, "http://www.google.com/intl/en_ALL/mapfiles/markerTransparent.png");


var GIcons = []; // Customized icons
GIcons['lot'] = new GIcon(G_DEFAULT_ICON, 'images/access/pMarker.png');
GIcons['lot'].iconSize = new GSize(15, 40);
GIcons['lot'].shadow = '';
GIcons['comp'] = new GIcon(G_DEFAULT_ICON, 'images/access/cMarker.png');
GIcons['comp'].iconSize = new GSize(15, 40);
GIcons['comp'].shadow = '';

GIcons['library'] = new GIcon(G_DEFAULT_ICON, 'images/access/lMarker.png');
GIcons['library'].iconSize = new GSize(15, 40);
GIcons['library'].shadow = '';
GIcons['all'] = new GIcon(G_DEFAULT_ICON, 'images/GoogleMapsMarkers/tinyIcon.png');
GIcons['all'].iconSize = new GSize(15, 20);
GIcons['all'].shadow = '';

GIcons['post'] = new GIcon();
GIcons['post'].image = 'images/global/post/image.png';
GIcons['post'].printImage = 'images/global/post/printImage.gif';
GIcons['post'].mozPrintImage = 'images/global/post/mozPrintImage.gif';
GIcons['post'].iconSize = new GSize(40,43);
GIcons['post'].shadow = 'images/global/post/shadow.png';
GIcons['post'].transparent = 'images/global/post/transparent.png';
GIcons['post'].shadowSize = new GSize(62,43);
GIcons['post'].printShadow = 'images/global/post/printShadow.gif';
GIcons['post'].iconAnchor = new GPoint(20,43);
GIcons['post'].infoWindowAnchor = new GPoint(20,0);
GIcons['post'].imageMap = [37,0,38,1,38,2,38,3,39,4,39,5,39,6,39,7,39,8,39,9,39,10,39,11,39,12,39,13,39,14,39,15,39,15,39,17,39,18,39,19,39,20,36,21,33,22,30,23,29,24,27,25,27,26,27,27,27,28,27,29,27,30,27,31,27,32,27,33,27,34,27,35,27,36,27,37,27,38,27,39,27,40,27,41,27,42,23,42,22,41,22,40,22,39,22,38,22,37,22,36,22,35,15,34,13,33,13,32,11,31,9,30,8,29,6,28,5,27,2,26,1,25,0,24,0,23,0,22,0,21,0,20,0,19,0,18,0,17,0,15,0,15,0,14,0,13,0,12,0,11,0,10,0,9,0,8,0,7,0,6,0,5,1,4,3,3,3,2,4,1,3,0];

GIcons['stop'] = new GIcon(G_DEFAULT_ICON, 'images/GoogleMapsMarkers/busstop.gif');
GIcons['stop'].iconSize = new GSize(20, 20);
GIcons['stop'].shadow = '';

GIcons['bus'] = new GIcon(G_DEFAULT_ICON, 'images/GoogleMapsMarkers/bus.gif');
GIcons['bus'].iconSize = new GSize(25, 30);
GIcons['bus'].shadow = '';



function clearCheckboxes() {
	document.getElementById('streetView').checked = false;
	document.getElementById('traffic').checked = false;
	return;
}

function createZoomMarker(map, point,place,i) {
	var marker = new ELabel(point, '<div id=\"elabel'+i+'\" style="text-align:center;width:75px;background-color:#f4f4e2;padding:2px;'
											+'border-style:solid;border-width:2px;border-color:#006e8e;z-index:1"'
											+'>'
											+place+'<\/div>', null, new GSize(6,-30), 75);
	marker.name=place;
	var tabArray=null;
	var lat=point.lat();
	var lng=point.lng();
	return marker;
}


function createZoomMarkerForBus(map, point,place,i) {
	var marker = new ELabel(point, '<div id=\"elabel'+i+'\" style="text-align:center;width:30px;background-color:#f4f4e2;padding:2px;'
											+'border-style:solid;border-width:2px;border-color:#006e8e;z-index:1"'
											+'>'
											+place+'<\/div>', null, new GSize(6,-30), 75);
	marker.name=place;
	var tabArray=null;
	var lat=point.lat();
	var lng=point.lng();
	return marker;
}


function createGlobalMarker(map, point, id, place, addr, type, campus) {	
	var marker = new GMarker(point, {title: place, icon: GIcons[type]});
	marker.name = place;
	marker.type = type;
	marker.addr = addr;
	marker.campus = campus;
	var tabArray=null;
	GEvent.addListener(marker,'mouseover',function(){ this.tooltip.show(); });
	GEvent.addListener(marker,'mouseout',function(){ this.tooltip.hide(); });
	GEvent.addListener(marker, "click", function() { 
		tabArray=null;
		tabArray = new Array();
		$.blockUI({ message: '<img src=\"images/ajax-loader.gif\" align=\"center\" style="padding-right: 10;" /> Loading...' });
		var url = '/infoTab?id=' + id;
		GDownloadUrl(url, function(data, responseCode) {
			if(responseCode == 200) {
				var xmlTabs = GXml.parse(data);
				var rootTabs = xmlTabs.documentElement;
				var tabs = rootTabs.getElementsByTagName('tab');
				for (var i = 0; i < tabs.length; i++) {
					var title = GXml.value(tabs[i].getElementsByTagName('title')[0]);
					var content = GXml.value(tabs[i].getElementsByTagName('content')[0]);
					var tab = new GInfoWindowTab(title, content);
					tabArray.push(tab);	
				};
				marker.openInfoWindowTabsHtml(tabArray, {autoScroll: false, contentSize: new GSize(420, 200)});
				map.setCenter(new GLatLng(point.lat() + 0.001, point.lng()), 17); // put
				$.unblockUI();
			} else if(responseCode == -1) {
				alert("Data request timed out. Please try later.");$.unblockUI();
			} else {
				alert("Request resulted in error. Check XML file is retrievable.");$.unblockUI();
			}
		});
	});			
	return marker;
}

function toggleAll(type, box) {
	if(inilook==1){map.clearOverlays();inilook=0;}
	if (box!=null) 
		loadAll(type);
	else {
		if (type == 'parking')
			for (var i = 0; i < lotArray.length; i++) 
				lotArray[i].hide(); 
		else if (type == 'library')
			for (var i = 0; i < libArray.length; i++) 
				libArray[i].hide();
		else if (type == 'post')
			for (var i = 0; i < postArray.length; i++)
				postArray[i].hide(); 
		else if (type == 'comp')
			for (var i = 0; i < compArray.length; i++)
				compArray[i].hide();
	}
}


//********		STREET VIEW JAVASCRIPT		*********


var svOverlay = null;
var trafficOverlay = null;
var svMarker = null;
var svPanoClient = null;
var svPano = null;

function loadStreetView() {
	svPanoClient = new GStreetviewClient();
	var svStart = map.getBounds().getCenter();/* Initiate svIcon */
	//var svIcon = new GIcon();
	 var svIcon = new GIcon(G_DEFAULT_ICON, "images/svIcon/man-0.png");
	    svIcon.iconSize = new GSize(49, 52);
	    svIcon.infoWindowAnchor = new GPoint(24,4);
	    svIcon.iconAnchor = new GPoint(24,32);
	    svIcon.shadow = null;
	    svIcon.transparent = "images/svIcon/man-pick.png";
	    svIcon.imageMap = [16,4, 31,4, 31,36, 16,36];
	svMarker = new GMarker(svStart, {icon:svIcon,draggable: true, bouncy:true});
	map.addOverlay(svMarker);
	var svInstruction = "<p>Drop the yellow guy on blue roads.<br />You will enter Street View.<br />Tip: You may zoom in to see streets more clearly.</p>";
	svMarker.openInfoWindowHtml(svInstruction);
	/* Drag the svIcon */
	GEvent.addListener(svMarker, "dragstart", function() {
		map.closeInfoWindow();
	});
	GEvent.addListener(svMarker, "dragend", function() {
		GEvent.trigger(svMarker, "click");
	});
	GEvent.addListener(svMarker, "click", function() {
		map.panTo(svMarker.getLatLng());
		svPanoClient.getNearestPanorama(svMarker.getLatLng(), showStreetView);
	});
	return;
}

function showStreetView(svData) {
		svMarker.setLatLng(svData.location.latlng);	
		svMarker.openInfoWindowHtml("<div id=\"streetName\"><h3>" + svData.location.description + "<\/h3><\/div><div name=\"svDiv\" id=\"svDiv\" style=\"width: 500px; height: 300px\"><\/div>", {noCloseOnClick: true, onCloseFn: closePanoWindow});
		if (document.getElementById("svDiv") !== null) {
			if (svPano !== null) {
				GEvent.clearInstanceListeners(svPano);
				svPano.remove();
				svPano = null;
			}
			svPano = new GStreetviewPanorama(document.getElementById("svDiv"), {latlng: svData.location.latlng});
			GEvent.addListener(svPano, "initialized", function(newData) {
				document.getElementById("streetName").innerHTML = '<h3>' + newData.description + '</h3>';
				svMarker.setLatLng(newData.latlng);
				map.getInfoWindow().reset(newData.latlng, null, new GSize(500,335));
			});
		}
}

function closePanoWindow () {
	if (svPano) {
		GEvent.clearInstanceListeners(svPano);
		svPano.remove();
		svPano = null;
	}
}

function toggleStreetView() {
	if (document.getElementById('streetView').checked) {
		if (!svOverlay) {
			svOverlay = new GStreetviewOverlay();
			map.addOverlay(svOverlay);
			loadStreetView();
		}
	} else {
		if (svOverlay) {
			map.removeOverlay(svOverlay);
			map.removeOverlay(svMarker);
			if (svPano)
				svPano.remove();
			svOverlay = null;
			svMarker = null;
		}
	}
	return;
}

function toggleTraffic() {
	if (document.getElementById('traffic').checked) {
		if (!trafficOverlay) {
			map.closeInfoWindow();
			trafficOverlay = new GTrafficOverlay();
			map.addOverlay(trafficOverlay);
		}
	} else {
		if (trafficOverlay) {
			map.removeOverlay(trafficOverlay);
			trafficOverlay = null;
		}
	}
}

function handleNoFlash(errorCode) {
	if (errorCode == FLASH_UNAVAILABLE) {
		alert("Error: Flash doesn't appear to be supported by your browser");
		return;
	}
} 


// *****	PAGING JAVASCRIPT	*****


function Pager(tableName, itemsPerPage) {
	this.tableName = tableName;
	this.itemsPerPage = itemsPerPage;
	this.currentPage = 1;
	this.pages = 0;
	this.inited = false;
	this.from = null;
	this.to = null;

	this.showRecords = function(from, to) {		
		var rows = document.getElementById(tableName).rows;
		for (var i = 0; i < rows.length; i++) {
			rows[i].style.display = 'none';
			markerArray[shownLatLng[i]].hide();

			if(i >= from)
				if(i <= to) {
					rows[i].style.display = '';
					markerArray[shownLatLng[i]].show(); 
				}			
		}
		var iTo = (to < rows.length) ? to : rows.length;
		//Starting rectangle bound region
		currentBound = new GLatLngBounds(markerArray[shownLatLng[from]].getLatLng(), markerArray[shownLatLng[from]].getLatLng()); 
		for (var i = from; i < iTo; i++)
			if (!currentBound.containsLatLng(markerArray[shownLatLng[i]].getLatLng())) 
				currentBound.extend(markerArray[shownLatLng[i]].getLatLng());
		var currentBoundCenter = currentBound.getCenter();	
		var zoomLevel = map.getBoundsZoomLevel(currentBound) - 1;
		map.setCenter(currentBoundCenter, zoomLevel);
		return;
	}

	this.showPage = function(pageNumber) {
		if (! this.inited) {
			alert("not inited");
			return;
		}
		map.closeInfoWindow();
		var oldPageAnchor = document.getElementById('pg' + this.currentPage);
		oldPageAnchor.className = 'pg-normal';
		this.currentPage = pageNumber;
		var newPageAnchor = document.getElementById('pg' + this.currentPage);
		newPageAnchor.className = 'pg-selected'; 
		var from = (pageNumber - 1) * itemsPerPage;
		var to = from + itemsPerPage - 1;
		this.showRecords(from, to);
	}
	this.prev = function() {
		if (this.currentPage > 1)
			this.showPage(this.currentPage - 1);
	}
	this.next = function() {
		if (this.currentPage < this.pages) {
			this.showPage(this.currentPage + 1);
		}
	}                        
	this.init = function() {
		var rows = document.getElementById(tableName).rows;
		var records = rows.length; 
		this.pages = Math.ceil(records / itemsPerPage);
		this.inited = true;
	}
	this.showPageNav = function(pagerName, positionId) {
		if (! this.inited) {
			alert("not inited");
			return;
		}
		var pagerHtml = '';
		if (this.pages > 1)
			pagerHtml += '<a  style=\"cursor:pointer\" onclick=\"' + pagerName + '.prev();\" class=\"pg-normal\">Prev<\/a> ';
		for (var page = 1; page <= this.pages; page++)
			pagerHtml += '<a style=\"cursor:pointer\" id=\"pg' + page + '" class=\"pg-normal\" onclick=\"' + pagerName + '.showPage(' + page + ');\"><b>' + page + '<\/b><\/a> ';
		if (this.pages > 1)
			pagerHtml += '<a  style=\"cursor:pointer\" onclick=\"'+pagerName+'.next();\" class=\"pg-normal\">Next<\/a>';            
		document.getElementById(positionId).innerHTML = pagerHtml;
	}
}


//	*****	INITIALIZE JS	***** 


function initialize() {
	if(!$('#all').attr("checked")){
		$('#all').attr("checked",true);$('#all').click();$('#all').attr("checked",true);
	}
	$('.legend').hide();
	inilook==1;
	resize();
	if (GBrowserIsCompatible()) {			
								map = new GMap2(document.getElementById('map_rutgers'));
								map.setCenter(new GLatLng(40.495918,-74.446278), 9);
								map.setUIToDefault();
								map.setMapType(G_HYBRID_MAP); // satellite view with labels
								var legendDiv='<div class="htmlControl" style="width:128px; background-color:transparent">';
								legendDiv += '<div class="htmlControl htmlButton" id="menuButton" style="margin:1px"><span style="font-weight:bold">';
								legendDiv += 'Show</span> Menu</div><div id="menuPanel" style="display:block">';
								legendDiv += '<div class="htmlControl htmlButton" id="streetviewButton">';
								legendDiv += '<span style="font-weight:bold">Show</span> Street View</div>';
								legendDiv += '<div class="htmlControl htmlButton" id="trafficButton"><span style="font-weight:bold">Show</span> Traffic</div>';
								legendDiv += '<div class="htmlControl htmlButton" id="boundButton"><span style="font-weight:bold">Show</span> Nearby Buildings</div></div></div>';
								legendHtml=new HtmlControl(legendDiv);
								map.addControl(legendHtml, new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(350, 5)));
								document.getElementById('menuPanel').style.display = 'none'; // Hide menu at first
								GEvent.addDomListener(document.getElementById('menuButton'), 'click', function() {
										var menuPanel=document.getElementById('menuPanel');
										menuPanel.style.display=(menuPanel.style.display=='block')?'none':'block';
										var button=document.getElementById('menuButton');
										var html=(menuPanel.style.display=='block')?'Hide':'Show';
										html='<span style="font-weight:bold">'+html+'</span> Menu';
										button.innerHTML=html;
								});
								GEvent.addDomListener(document.getElementById('streetviewButton'), 'click', function() {
									// Street View
										if (!document.getElementById('streetView').checked)
											document.getElementById('streetView').checked = true;
										else {
											document.getElementById('streetView').checked = false; }
										toggleStreetView();
										var button=document.getElementById('streetviewButton');
										var html=(document.getElementById('streetView').checked)?'Hide':'Show';
										html='<span style="font-weight:bold">'+html+'</span> Street View';
										button.innerHTML=html;
								});
								GEvent.addDomListener(document.getElementById('trafficButton'), 'click', function() {
										// Traffic Condition
										if (!document.getElementById('traffic').checked)
											document.getElementById('traffic').checked = true;
										else {
											document.getElementById('traffic').checked = false; }
										toggleTraffic();
										var button=document.getElementById('trafficButton');
										var html=(document.getElementById('traffic').checked)?'Hide':'Show';
										html='<span style="font-weight:bold">'+html+'</span> Traffic';
										button.innerHTML=html;
								});
								GEvent.addDomListener(document.getElementById('boundButton'), 'click', function() {
										// All in Bound
										if (!WhatsAroundFlag)
											WhatsAroundFlag = true;
										else {
											WhatsAroundFlag = false;
											ClearNameLabels();
										} 
										if (map.getZoom() >= 16)
											ShowNameLabels();
										else
										{
											WhatsAroundFlag = false;
											alert("Please zoom in near location for using this option!")
										}
										var button=document.getElementById('boundButton');
										var html=(WhatsAroundFlag)?'Hide':'Show';
										html='<span style="font-weight:bold">'+html+'</span> Nearby Buildings';
										button.innerHTML=html;
								});
								// New Brunswick/Piscataway Campus
								var point1 = new GLatLng(40.502728,-74.451768);
								marker = new GMarker(point1,nbIcon); 
								map.addOverlay(marker);
								GEvent.addListener(marker, "click", function() {
											map.clearOverlays();
											map.setCenter(point1, 13); // put current point at center if clicked on, zoom level 18
			
											var polygonBusch = new GPolygon([
											                                 new GLatLng(40.526970,-74.473099),new GLatLng(40.528511,-74.472794),new GLatLng(40.531349,-74.462921),new GLatLng(40.530819,-74.462112),new GLatLng(40.528770,-74.465279),new GLatLng(40.528118,-74.464340),new GLatLng(40.528080,-74.462318),new GLatLng(40.528229,-74.458900),
											                                 new GLatLng(40.527142,-74.456139),new GLatLng(40.525280,-74.456917),new GLatLng(40.523609,-74.451378),new GLatLng(40.522541,-74.450783),new GLatLng(40.521488,-74.451080),new GLatLng(40.520420,-74.451248),new GLatLng(40.519409,-74.452148),new GLatLng(40.518200,-74.453529),
											                                 new GLatLng(40.517971,-74.454773),new GLatLng(40.517250,-74.457428),new GLatLng(40.515259,-74.458633),new GLatLng(40.512230,-74.459747),new GLatLng(40.512100,-74.463829),new GLatLng(40.512131,-74.465462),new GLatLng(40.512489,-74.468117),new GLatLng(40.512909,-74.470306),
											                                 new GLatLng(40.515690,-74.468369),new GLatLng(40.516338,-74.468719),new GLatLng(40.518002,-74.467644),new GLatLng(40.518749,-74.469658),new GLatLng(40.518101,-74.470261),new GLatLng(40.519341,-74.474983),new GLatLng(40.518002,-74.475883),new GLatLng(40.519081,-74.478333),
											                                 new GLatLng(40.520161,-74.477768),new GLatLng(40.522541,-74.481117),new GLatLng(40.520519,-74.486610),new GLatLng(40.521229,-74.487473),new GLatLng(40.521709,-74.487930),new GLatLng(40.522240,-74.488068),new GLatLng(40.524330,-74.481163),new GLatLng(40.526970,-74.473099)],
											                                 '#8e83f6', 2, 0.8, '#b7b0f8', 0.5); 			
											map.addOverlay(polygonBusch);	
											var buschLabel = new ELabel(new GLatLng(40.518889,-74.47134), "<img src=\"images/global/buschLabel.png\" />");
											map.addOverlay(buschLabel);
											var polygonCollegeAve = new GPolygon([
											                                      new GLatLng(40.505970,-74.451874),new GLatLng(40.505611,-74.450661),new GLatLng(40.505161,-74.449699),new GLatLng(40.503811,-74.447517),new GLatLng(40.502831,-74.446404),new GLatLng(40.499760,-74.445160),new GLatLng(40.498360,-74.444687),new GLatLng(40.497540,-74.447304),
											                                      new GLatLng(40.498371,-74.447701),new GLatLng(40.498871,-74.448059),new GLatLng(40.498692,-74.448792),new GLatLng(40.499020,-74.449074),new GLatLng(40.499802,-74.451172),new GLatLng(40.500641,-74.450668),new GLatLng(40.501129,-74.449783),new GLatLng(40.502251,-74.450989),
											                                      new GLatLng(40.501308,-74.452652),new GLatLng(40.503559,-74.454872),new GLatLng(40.504089,-74.454041),new GLatLng(40.505180,-74.455147),new GLatLng(40.505661,-74.454407),new GLatLng(40.506100,-74.454803),new GLatLng(40.506287,-74.454514),new GLatLng(40.506329,-74.454063),
											                                      new GLatLng(40.506317,-74.453690),new GLatLng(40.506271,-74.453331),new GLatLng(40.506199,-74.452591),new GLatLng(40.505970,-74.451874)],
											                                      '#8e83f6', 2, 0.8, '#b7b0f8', 0.5);
											map.addOverlay(polygonCollegeAve);
											var caLabel = new ELabel(new GLatLng(40.498137,-74.456749), "<img src=\"images/global/caLabel.png\" />");
											map.addOverlay(caLabel);
											var polygonCookDouglass1 = new GPolygon([
											                                         new GLatLng(40.488968,-74.436859),new GLatLng(40.486370,-74.439148),new GLatLng(40.486141,-74.438660),new GLatLng(40.484638,-74.440178),new GLatLng(40.483639,-74.438629),new GLatLng(40.479679,-74.442802),new GLatLng(40.480640,-74.444382),new GLatLng(40.479561,-74.445480),
											                                         new GLatLng(40.477501,-74.442108),new GLatLng(40.478661,-74.440910),new GLatLng(40.478970,-74.441490),new GLatLng(40.480980,-74.439713),new GLatLng(40.480282,-74.438629),new GLatLng(40.479172,-74.439659),new GLatLng(40.478298,-74.438248),new GLatLng(40.477589,-74.439056),
											                                         new GLatLng(40.478371,-74.440292),new GLatLng(40.477459,-74.441322),new GLatLng(40.477360,-74.441116),new GLatLng(40.475479,-74.443077),new GLatLng(40.469379,-74.435013),
											                                         new GLatLng(40.470112,-74.434303),new GLatLng(40.470440,-74.433098),new GLatLng(40.473721,-74.429153),new GLatLng(40.474209,-74.429092),new GLatLng(40.475090,-74.429283),new GLatLng(40.476040,-74.428230),new GLatLng(40.476349,-74.428009),new GLatLng(40.476719,-74.427910),
											                                         new GLatLng(40.477699,-74.427841),new GLatLng(40.476799,-74.427330),new GLatLng(40.476429,-74.426826),new GLatLng(40.476280,-74.426193),new GLatLng(40.476559,-74.425613),new GLatLng(40.478569,-74.423012),new GLatLng(40.479630,-74.424492),new GLatLng(40.480671,-74.426231),
											                                         new GLatLng(40.481468,-74.426102),new GLatLng(40.481499,-74.426643),new GLatLng(40.481979,-74.426826),new GLatLng(40.483040,-74.427452),new GLatLng(40.484520,-74.427032),new GLatLng(40.484718,-74.427780),new GLatLng(40.485909,-74.427521),new GLatLng(40.486271,-74.429062),
											                                         new GLatLng(40.486385,-74.429886),new GLatLng(40.486679,-74.432281),new GLatLng(40.487621,-74.434769),new GLatLng(40.488232,-74.435890),new GLatLng(40.488968,-74.436859)],
											                                         '#8e83f6', 2, 0.8, '#b7b0f8', 0.5);	
											map.addOverlay(polygonCookDouglass1);
											var polygonCookDouglass2 = new GPolygon([
											                                         new GLatLng(40.467289,-74.437973),new GLatLng(40.466339,-74.436768),new GLatLng(40.465382,-74.436043),new GLatLng(40.464661,-74.434113),new GLatLng(40.465199,-74.433479),new GLatLng(40.463921,-74.431702),new GLatLng(40.465721,-74.429840),new GLatLng(40.467220,-74.426964),
											                                         new GLatLng(40.467220,-74.424881),new GLatLng(40.467480,-74.423866),new GLatLng(40.467419,-74.422859),new GLatLng(40.467918,-74.422371),new GLatLng(40.468121,-74.421638),new GLatLng(40.468040,-74.420403),new GLatLng(40.468670,-74.419037),new GLatLng(40.469158,-74.418716),
											                                         new GLatLng(40.469669,-74.418808),new GLatLng(40.470139,-74.419151),new GLatLng(40.470650,-74.419861),new GLatLng(40.471600,-74.420090),new GLatLng(40.472221,-74.420479),new GLatLng(40.472851,-74.420311),new GLatLng(40.473209,-74.419991),new GLatLng(40.474129,-74.419319),
											                                         new GLatLng(40.474880,-74.418312),new GLatLng(40.475769,-74.417351),new GLatLng(40.476311,-74.416603),new GLatLng(40.476608,-74.415871),new GLatLng(40.477749,-74.414902),new GLatLng(40.478291,-74.415184),new GLatLng(40.478840,-74.415222),new GLatLng(40.479401,-74.414841),
											                                         new GLatLng(40.479950,-74.414902),new GLatLng(40.480610,-74.414597),new GLatLng(40.481098,-74.413963),new GLatLng(40.481651,-74.413681),new GLatLng(40.482140,-74.413551),new GLatLng(40.482529,-74.416656),new GLatLng(40.482243,-74.417244),new GLatLng(40.481800,-74.417786),
											                                         new GLatLng(40.481834,-74.418381),new GLatLng(40.481770,-74.418983),new GLatLng(40.481441,-74.419586),new GLatLng(40.480904,-74.420097),new GLatLng(40.479500,-74.421471),new GLatLng(40.478046,-74.423256),new GLatLng(40.475632,-74.426216),new GLatLng(40.475121,-74.426079),
											                                         new GLatLng(40.474850,-74.425827),new GLatLng(40.474377,-74.425896),new GLatLng(40.473492,-74.426941),new GLatLng(40.472439,-74.427223),new GLatLng(40.472740,-74.428207),new GLatLng(40.472950,-74.429207),new GLatLng(40.472618,-74.429916),new GLatLng(40.469181,-74.434174),
											                                         new GLatLng(40.468021,-74.435822),new GLatLng(40.467289,-74.437973)],
											                                         '#8e83f6', 2, 0.8, '#b7b0f8', 0.5);			
											map.addOverlay(polygonCookDouglass2);
											var cdLabel = new ELabel(new GLatLng(40.47444,-74.437437), "<img src=\"images/global/cdLabel.png\" />");
											map.addOverlay(cdLabel);
								
											var polygonLivingston = new GPolygon([
											                                      new GLatLng(40.521790,-74.429520),new GLatLng(40.519150,-74.430138),new GLatLng(40.517910,-74.429489),new GLatLng(40.513371,-74.426529),new GLatLng(40.510559,-74.430222),new GLatLng(40.509460,-74.431938),new GLatLng(40.508640,-74.430870),new GLatLng(40.507889,-74.432632),
											                                      new GLatLng(40.509319,-74.432541),new GLatLng(40.510208,-74.432411),new GLatLng(40.510731,-74.433060),new GLatLng(40.507919,-74.435928),new GLatLng(40.505798,-74.440567),new GLatLng(40.507198,-74.441849),new GLatLng(40.509621,-74.445763),new GLatLng(40.510139,-74.448082),
											                                      new GLatLng(40.515652,-74.444206),new GLatLng(40.516472,-74.446487),new GLatLng(40.511021,-74.450310),new GLatLng(40.511181,-74.450821),new GLatLng(40.512329,-74.450180),new GLatLng(40.512691,-74.451172),new GLatLng(40.513828,-74.450478),new GLatLng(40.514740,-74.453484),
											                                      new GLatLng(40.514809,-74.455406),new GLatLng(40.513439,-74.457390),new GLatLng(40.513988,-74.457733),new GLatLng(40.514580,-74.457687),new GLatLng(40.515301,-74.456963),new GLatLng(40.515751,-74.456100),new GLatLng(40.516338,-74.455406),new GLatLng(40.516731,-74.454597),
											                                      new GLatLng(40.515919,-74.454002),new GLatLng(40.515980,-74.452538),new GLatLng(40.517021,-74.452148),new GLatLng(40.518002,-74.452454),new GLatLng(40.520679,-74.450439),new GLatLng(40.522308,-74.450089),new GLatLng(40.524849,-74.448380),new GLatLng(40.525055,-74.448425),
											                                      new GLatLng(40.531902,-74.442589),new GLatLng(40.527100,-74.432747),new GLatLng(40.523811,-74.428162),new GLatLng(40.522831,-74.429359),new GLatLng(40.522308,-74.429581),new GLatLng(40.521790,-74.429520)],
											                                      '#8e83f6', 2, 0.8, '#b7b0f8', 0.5);
											map.addOverlay(polygonLivingston);	
											var livLabel = new ELabel(new GLatLng(40.524891,-74.445848), "<img src=\"images/global/livLabel.png\" />");
											map.addOverlay(livLabel);
						
											GEvent.addListener(map, "zoomend", function() {
													if (map.getZoom()<12||map.getZoom()>14) {
														buschLabel.hide();
														polygonBusch.hide();
														caLabel.hide();
														polygonCollegeAve.hide();
														cdLabel.hide();
														polygonCookDouglass1.hide();
														polygonCookDouglass2.hide();
														livLabel.hide();
														polygonLivingston.hide();
													}else{
														buschLabel.show();
														caLabel.show();
														cdLabel.show();	
														livLabel.show(); 
														polygonBusch.show();
														polygonLivingston.show();
														polygonCollegeAve.show();
														polygonCookDouglass1.show();
														polygonCookDouglass2.show();
													}
											});
								});
								// For Camden
								var point2 = new GLatLng(39.948061,-75.120491);
								marker = new GMarker(point2,cmdIcon); 
								map.addOverlay(marker);
								GEvent.addListener(marker, "click", function() {
						/*			if(!$('#all').attr("checked")){
										$('#all').click();		
									}
									$('#all').click();$('#all').click();
									$('#camden').attr("checked",true);
									$('#camden').click();
									$('#camden').attr("checked",true);*/
									// marker.openInfoWindow(iframe);
									map.clearOverlays();
									// put current point at center if clicked on, zoom level 18
									map.setCenter(point2, 15); 
									var polygonCamden = new GPolygon([
									                                  new GLatLng(39.952206,-75.130844),new GLatLng(39.950748,-75.122849),	new GLatLng(39.950050,-75.121140),new GLatLng(39.949299,-75.120018),
									                                  new GLatLng(39.948700,-75.119492),new GLatLng(39.948219,-75.119186),	new GLatLng(39.947868,-75.118561),new GLatLng(39.947639,-75.118027),
									                                  new GLatLng(39.946411,-75.118523),new GLatLng(39.949078,-75.131699),	new GLatLng(39.952206,-75.130844)],
									                                  '#35ce3e', 2, 0.8, '#b5d6b7', 0.5);			
									map.addOverlay(polygonCamden);
									var camdenLabel = new ELabel(new GLatLng(40.47444,-74.437437), "<img src=\"images/global/cmdLabel.png\" />");
									map.addOverlay(camdenLabel);
									GEvent.addListener(map, "zoomend", function() {
										if (map.getZoom()<12||map.getZoom()>14)
											polygonCamden.hide();
										else 
											polygonCamden.show();
									});
								});
								// For Newark
								var point3 = new GLatLng(40.7419,-74.176716);
								marker = new GMarker(point3,nwkIcon); 
								map.addOverlay(marker);
								GEvent.addListener(marker, "click", function() {
									if (map.getZoom() > 17) {
										nl_center=map.getCenter();
										ClearNameLabels();
										ShowNameLabels();
									} else {
										ClearNameLabels(); 
									}
							/*		if(!$('#all').attr("checked")){
										$('#all').click();
									}
									$('#all').click();$('#all').click();
									$('#newark').attr("checked",true);
									$('#newark').click();
									$('#newark').attr("checked",true);
									map.clearOverlays();*/
									map.setCenter(point3, 15); // put current point at center if clicked on, zoom level 18
									var polygonNewark = new GPolygon([
									                                  new GLatLng(40.743431,-74.175858),new GLatLng(40.746620,-74.174316),new GLatLng(40.746849,-74.174149),new GLatLng(40.746929,-74.173889),
									                                  new GLatLng(40.746632,-74.172668),new GLatLng(40.745449,-74.170242),new GLatLng(40.741714,-74.169151),new GLatLng(40.740593,-74.168655),
									                                  new GLatLng(40.739719,-74.167953),new GLatLng(40.737411,-74.170853),new GLatLng(40.738392,-74.174370),new GLatLng(40.739552,-74.178040)],
									                                  '#35ce3e', 2, 0.8, '#b5d6b7', 0.5);			
									map.addOverlay(polygonNewark);
									GEvent.addListener(map, "zoomend", function() {
										if (map.getZoom()<12||map.getZoom()>14)
											polygonNewark.hide();
										else 
											polygonNewark.show();
									});
								});
								
								GEvent.addListener(map, "zoomend", function() {
									if (map.getZoom() > 17) {//this is where you change code for re-populating name labels upon zooming.
										nl_center=map.getCenter();
										ClearNameLabels();
										ShowNameLabels();
									} else {
										ClearNameLabels(); 
									}
								});
				
								GEvent.addListener(map,"dragend",function(){
									if(map.getZoom()>17){
										var cur_center = map.getCenter();
										if(cur_center.distanceFrom(nl_center)>100){//this is where you change code for re-populating name labels upon dragging. Lesser the number, lesser the re-population drag required.
											nl_center = map.getCenter();
											ClearNameLabels();
											ShowNameLabels();
										}
									}
								});
								// starting	rectangle bound	region
								var currentBound = new GLatLngBounds(point1, point1); 
								if (!currentBound.containsLatLng(point2)) 
									currentBound.extend(point2);
								if (!currentBound.containsLatLng(point3)) 
									currentBound.extend(point3);
								var currentBoundCenter = currentBound.getCenter();	
								var zoomLevel = map.getBoundsZoomLevel(currentBound) -1; //one zoom	level less
								map.setCenter(currentBoundCenter, zoomLevel);
								document.getElementById("resultsDiv").innerHTML = '<br><br>Start typing in the search box for suggestions. Your search results will appear here.<br><br>';
								document.getElementById("pageNavPosition").innerHTML = '';
								document.getElementById('q').value = '';
	}
	var param = gup("q");
	if(param!=""){
		ajaxFunction(param,0);
	}
	else{
		param = gup("id");
		if(param!=""){
			ajaxFunction("id:"+param,0);
		}
	}
	
	$.unblockUI(); 
}

function ShowNameLabels(){
			var currentBounds = map.getBounds();
			var currentSouthWest = currentBounds.getSouthWest();
			var currentNorthEast = currentBounds.getNorthEast();
			var currentCenter = currentBounds.getCenter();
			var url = '/namelabels?SWLAT=' + currentSouthWest.lat() + '&NELAT=' + currentNorthEast.lat();
			StopLabelMarkerArray = [];
			StopLabelArray = [];
			NameLabelMarkerArray = [];
			NameLabelArray = [];
			GDownloadUrl(url, function(data, responseCode) {
				if(responseCode == 200) {            
					var xml = GXml.parse(data);    
					var root = xml.documentElement;
					var markers = root.getElementsByTagName('result');
					var i = 0;
					for (i = 0; i < markers.length; i++) {
						var id = GXml.value(markers[i].getElementsByTagName('id')[0]);
						var place = GXml.value(markers[i].getElementsByTagName('place')[0]);
						var addr = GXml.value(markers[i].getElementsByTagName('addr')[0]);
						var lat = parseFloat(GXml.value(markers[i].getElementsByTagName('lat')[0]));
						var lng = parseFloat(GXml.value(markers[i].getElementsByTagName('lng')[0]));
						var campus = GXml.value(markers[i].getElementsByTagName('campus')[0]);
						var type = GXml.value(markers[i].getElementsByTagName('type')[0]);
						var point = new GLatLng(lat,lng);
						var marker = createZoomMarker(map, point,place,i);
						var marker2 = createMarker(map, point, id, place, addr, type, campus,1);
						NameLabelArray.push(marker); 
						
						NameLabelMarkerArray.push(marker2);
						map.addOverlay(marker);
						map.addOverlay(marker2);
					}
					
					var stopmarkers = root.getElementsByTagName('stops');
					for (var f = 0; f < stopmarkers.length; f++) {
						var id = GXml.value(stopmarkers[f].getElementsByTagName('id')[0]);
						var place = GXml.value(stopmarkers[f].getElementsByTagName('place')[0]);
						var addr = GXml.value(stopmarkers[f].getElementsByTagName('route')[0]);
						var lat = parseFloat(GXml.value(stopmarkers[f].getElementsByTagName('lat')[0]));
						var lng = parseFloat(GXml.value(stopmarkers[f].getElementsByTagName('lng')[0]));
						var type = GXml.value(stopmarkers[f].getElementsByTagName('type')[0]);
						var point = new GLatLng(lat,lng);
						var marker = createZoomMarker(map, point,place,f);
						var marker2 = createMarker(map, point, id, place, addr, type, "",f);
						StopLabelArray.push(marker);
						StopLabelMarkerArray.push(marker2);
						map.addOverlay(marker);
						map.addOverlay(marker2);
					}
					
				} else if(responseCode == -1) {
					alert("Data request timed out. Please try later.");
				} else { 
					alert("Request resulted in error. Check XML file is retrievable.");
				}
			});

}

function showLiveBusLocations(route)	{
	var url = "/getBusLocations?r="+route;
	var zoomLevel = map.getBoundsZoomLevel(currentBound) -1;
	GDownloadUrl(url, function(data, responseCode) {
		if(responseCode == 200) {            
			var xml = GXml.parse(data);    
			var root = xml.documentElement;
			var markers = root.getElementsByTagName('location');
			var i = 0;
			var lat;
			var lng;
			for (i = 0; i < markers.length; i++) {
				lat = GXml.value(markers[i].getElementsByTagName('lat')[0]);
				lng = GXml.value(markers[i].getElementsByTagName('lon')[0]);
				var point = new GLatLng(lat,lng);
				var marker = createZoomMarkerForBus(map,point,route,i);
				var marker2 = createMarker(map, point, "", route, "", "bus", "",1);
				map.addOverlay(marker);
				map.addOverlay(marker2);
			}
			alert(map.getZoom());
			if(map.getZoom()<14)
				map.setCenter(new GLatLng(lat,lng), 14);
			else
				map.setCenter(new GLatLng(lat,lng), map.getZoom());
		} else if(responseCode == -1) {
			alert("Data request timed out. Please try later.");
		} else { 
			alert("Request resulted in error. Check XML file is retrievable.");
		}
	});
	
}


function ClearNameLabels(){
	for (var i = 0; i < NameLabelArray.length; i++) {
		map.removeOverlay(NameLabelArray[i]);
		map.removeOverlay(NameLabelMarkerArray[i]);
	}
	for (var f = 0; f < StopLabelArray.length; f++) {
		map.removeOverlay(StopLabelArray[f]);
		map.removeOverlay(StopLabelMarkerArray[f]);
	}
}

function gup( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\#?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

	 
Shadowbox.init({
    language: 'en',
    players:  ['iframe']
});	
$().ready(function() {
		$.history({'historyType':'start', 'historySearch':'none', 'historyOpenID':'0'});
		$('#q').autocomplete('/searchSuggest', {
				width: 500,
				selectFirst: false,
				max: 7
		});
//				$("select#campusdd").dropdownchecklist({ firstItemChecksAll: true , width : 200 });
		initialize();
		document.searchForm.q.focus();
		document.searchForm.q.select();
});
		$('#hover-demo2 .hover').hover(function() {
 			 $(this).addClass('pretty-hover');
	    	}, function() {
			$(this).removeClass('pretty-hover');
});
var historyCurrentSearch = null;
var legendHtml;
var WhatsAroundFlag = false;
var alllocs = null;
var query = null;
var currentBound = null;
var pager = new Pager('results', 7); //used for pagination
var map = null;
var markerArray = [];
var tabArray = [];
var campusName = null;

var nwkIcon = new GIcon();
nwkIcon.image = 'markers/newark.png';
nwkIcon.iconSize = new GSize(100,54);
nwkIcon.iconAnchor = new GPoint(50,54);
nwkIcon.infoWindowAnchor = new GPoint(50,0);

var nbIcon = new GIcon();
nbIcon.image = 'markers/nb.png';
nbIcon.iconSize = new GSize(100,54);
nbIcon.iconAnchor = new GPoint(50,54);
nbIcon.infoWindowAnchor = new GPoint(50,0);

var cmdIcon = new GIcon();
cmdIcon.image = 'markers/camden.png';
cmdIcon.iconSize = new GSize(100,54);
cmdIcon.iconAnchor = new GPoint(50,54);
cmdIcon.infoWindowAnchor = new GPoint(50,0);
	
function ajaxFunction(qString, back) {
			//Normally back=0, if back button pressed -> back = 1 
			backToMap();
			inilook=0;
			spellSuggest="";
			if (qString == null) {
						// makes auto-complete disappear after submit
						document.searchForm.submit.focus(); 
						query = document.getElementById('q').value;
						if (query == '') {return;}
						else{
							$.blockUI({ message: '<img src=\"images/ajax-loader.gif\" />' });
							map.clearOverlays();
							var queryString = '?q=' + query; 
						}
			} 
			else {
						$.blockUI({ message: '<img src=\"images/ajax-loader.gif\" />' });
						query = qString;
						document.getElementById('q').value = qString;
						map.clearOverlays();
						var queryString = '?q=' + escape(qString);
			}
			if (back == 0) {
					$.history({'historyType':'search', 'historySearch':query, 'historyOpenID':0});			
					historyCurrentSearch = query;
			}
			var tmarks=0;
			var url = '/search' + queryString;					
			GDownloadUrl(url, function(data, responseCode) {
				if(responseCode == 200) {			
					markerArray = [];
					var xml = GXml.parse(data);				
					var root = xml.documentElement;
					var markers = root.getElementsByTagName('result');
					var spellCheck = root.getElementsByTagName('spellcheck');
					var correction =GXml.value(spellCheck[0]) 
					//alert(correction);
					if(spellCheck.length==1){
						spellSuggest = '<div id=\"spell\"><br\/>Did you mean <a onclick="ajaxFunction(\''+correction+'\',1)">'+correction+'</a>';
						spellSuggest += ' ?</div>';
						//alert(spellSuggest);
					}	
					if (!markers.length) {
						
						if(spellSuggest==""){
							document.getElementById('resultsDiv').innerHTML = 
							'<p>Your search did not match any record.<\/p>'+
							'<ul><li>Make sure all words are correct.<\/li>'+
							'<li>Try more general keywords.<\/li><li>Call RU-info at 732-445-4636.<\/li><\/ul>';
						}
						else{
							$('#resultsDiv').html(spellSuggest+"<br\/><br\/>No results found.");
						}
						document.getElementById('pageNavPosition').innerHTML = '';
						clearCheckboxes();
						$.unblockUI();
						return;
					}
					for (var i = 0; i < markers.length; i++) {
						var id = GXml.value(markers[i].getElementsByTagName('id')[0]);
						var place = GXml.value(markers[i].getElementsByTagName('place')[0]);
						var addr = GXml.value(markers[i].getElementsByTagName('addr')[0]);
						var lat = parseFloat(GXml.value(markers[i].getElementsByTagName('lat')[0]));
						var lng = parseFloat(GXml.value(markers[i].getElementsByTagName('lng')[0]));
						var campus = GXml.value(markers[i].getElementsByTagName('campus')[0]);
						var point = new GLatLng(lat,lng);
						var type="place";
						var marker = createMarker(map, point, id, place, addr, type, campus,0);
						markerArray.push(marker);					
					}
					$.unblockUI();
					showMarkers();
					if (map.getZoom() > 17) {
						nl_center=map.getCenter();
					}
					if(back>10){
						GEvent.trigger(markerArray[back-10], "click");
					}
				} else if(responseCode == -1) {
						alert("Data request timed out. Please try later.");
						$.unblockUI();
						return;
				} else { 
						alert("Request resulted in error. Check XML file is retrievable.");
						$.unblockUI();
						return;
				}
	});
}

function makeSidebar() {	
	clearCheckboxes();						
	var html = null;
	document.getElementById("resultsDiv").innerHTML = spellSuggest;
	document.getElementById("pageNavPosition").innerHTML = '';
	html = '<b>&nbsp;Results for \"' + query + '\"<\/b><br><br>';
	html += '<table width=\"100%\" border=\"0\" align=\"left\" id=\"results\" cellspacing=\"10\">';	
	var visibleIndex = 0;
	showcounter = 0;
	for (var i = 0; i < markerArray.length; i++) {	
		if (!markerArray[i].isHidden()) {
			var iconPath = '/images/GoogleMapsMarkers/red_';
			switch (visibleIndex % 7) {		// This switch is to generate index A-G marker icons - 2nd part: index				
			case 0:iconPath += 'MarkerA.png';break;
			case 1:iconPath += 'MarkerB.png';break;
			case 2:iconPath += 'MarkerC.png';break;
			case 3:iconPath += 'MarkerD.png';break;
			case 4:iconPath += 'MarkerE.png';break;
			case 5:iconPath += 'MarkerF.png';break;
			case 6:iconPath += 'MarkerG.png';break;
			}
			switch (markerArray[i].campus) {
				case 'busch':campusName = 'Busch Campus';break;
				case 'liv':campusName = 'Livingston Campus';break;
				case 'cd':campusName = 'Cook/Douglass Campus';break;
				case 'college':campusName = 'College Avenue Campus';break;
				case 'camden':campusName = 'Camden Campus';break;
				case 'offcampus':campusName = 'Outside Rutgers Campus';break;
				case 'newark':campusName = 'Newark Campus';break;
			}
			shownLatLng[showcounter] = i;
			showcounter++;
			markerArray[i].getIcon().image = iconPath;
			map.addOverlay(markerArray[i]); // Add all to map, then hide part of them
			visibleIndex++;
			html += '<tr><td width=\"20px\"><img src=\"' + 
					iconPath + '\" class=\"floatLeftClear\" /></td><td><a onclick=\"javascript:view(' + i + ')\">' + 
					markerArray[i].name + '</a><br />' + markerArray[i].addr + '<br /><div class=\"' + markerArray[i].campus + 
					'\"><i>' + campusName + '</i></div></tr>';
		}
	}
	html += '<\/table>';
	document.getElementById("resultsDiv").innerHTML = html;								
	pager.init();
	pager.showPageNav('pager', 'pageNavPosition'); 
	pager.showPage(1);
	return;				
}

function zhigh(marker,b) {return 5;}
function zlow(marker,b) {return 1;}

function getRouteId(route)	{
	var routeId = '';
	switch (route.trim())
	{
	case 'A':
		routeId = 'a';
		break;
	case 'B':
		routeId = 'b';
		break;
	case 'C':
		routeId = 'c';
		break;
	case 'EE':
		routeId = 'ee';
		break;
	case 'F':
		routeId = 'f';
		break;
	case 'H':
		routeId = 'h';
		break;
	case 'LX':
		routeId = 'lx';
		break;
	case 'LXc':
		routeId = 'lxc';
		break;
	case 'REXL':
		routeId = 'rexl';
		break;
	case 'REXB':
		routeId = 'rexb';
		break;
	case 'REXB after 9pm':
		routeId = 'rexb9';
		break;
	case 'REXL after 9pm':
		routeId = 'rexl9';
		break;
	case 'All Campus':
		routeId = 's';
		break;
	case 'Weekend 1':
		routeId = 'wknd1';
		break;
	case 'Weekend 2':
		routeId = 'wknd2';
		break;
	case 'Ward Shuttle':
		routeId = 'ws';
		break;
	}
	return routeId;
}

function createMarker(map, point, id, place, addr, type, campus,zoom) {	
	if(zoom==0)
			var marker = new GMarker(point,{title: place,zIndexProcess:zhigh});
		else
			var marker = new GMarker(point,{icon: GIcons['all'],zIndexProcess:zlow});
		if(type=='busstop')
			var marker = new GMarker(point,{icon: GIcons['stop'],zIndexProcess:zlow});
		else if(type=='bus')
			var marker = new GMarker(point,{icon: GIcons['bus'],zIndexProcess:zlow});
		
		marker.name = place;
		marker.type = type;
		marker.addr = addr;
		marker.id = id;
		marker.campus = campus;
		if(type=='busstop')	{
			GEvent.addListener(marker, "click", function() {
			//	zoom = zoom - 1;	
				tabArray = [];
					var url = '/infoTabTransport?id='+id+"&r="+addr;
					GDownloadUrl(url, function(data, responseCode) {
						if(responseCode == 200) {
							var xmlTabs = GXml.parse(data);				
							var rootTabs = xmlTabs.documentElement;
							var tabs = rootTabs.getElementsByTagName('tab');
							for (var i = 0; i < tabs.length; i++) {
								var title = GXml.value(tabs[i].getElementsByTagName('title')[0]);
								var content = GXml.value(tabs[i].getElementsByTagName('content')[0]);
								content = content + "<!--<input type=\"button\" value=\"refresh\" onclick=\"GEvent.trigger(StopLabelMarkerArray["+zoom+"], \'click\');\"/>--></div></div>";
								var tab = new GInfoWindowTab(title, content);
								tabArray.push(tab);							
							};
							marker.openInfoWindowTabsHtml(tabArray, {autoScroll: true, contentSize: new GSize(420, 200)});
							//map.setCenter(new GLatLng(point.lat() + 0.001, point.lng()), 18); 
						} else if(responseCode == -1) {
							alert("Data request timed out. Please try later.");	 
						} else {
							alert("Request resulted in error. Check XML file is retrievable.");
 
						}
					});
				});
		} else{
		GEvent.addListener(marker, "click", function() { 
			tabArray = [];
			var url = '/infoTab?id=' + id;
			GDownloadUrl(url, function(data, responseCode) {
				if(responseCode == 200) {
					var xmlTabs = GXml.parse(data);				
					var rootTabs = xmlTabs.documentElement;
					var tabs = rootTabs.getElementsByTagName('tab');
					for (var i = 0; i < tabs.length; i++) {
						var title = GXml.value(tabs[i].getElementsByTagName('title')[0]);
						var content = GXml.value(tabs[i].getElementsByTagName('content')[0]);
						var tab = new GInfoWindowTab(title, content);
						tabArray.push(tab);							
					};
					marker.openInfoWindowTabsHtml(tabArray, {autoScroll: true, contentSize: new GSize(420, 200)});
					map.setCenter(new GLatLng(point.lat() + 0.001, point.lng()), 18); 
				} else if(responseCode == -1) {
					alert("Data request timed out. Please try later.");
				} else {
					alert("Request resulted in error. Check XML file is retrievable."); 
				}
			});
		});	
		}
		return marker;
}

$.history.callback = function ( reinstate, cursor ) {
	if(reinstate.historyType == 'start'){
		manuallyClear();
	}
	else if (reinstate.historyType == 'open') {
		if (reinstate.historySearch == historyCurrentSearch)
				GEvent.trigger(markerArray[reinstate.historyOpenID], "click");
		else
			ajaxFunction(reinstate.historySearch, reinstate.historyOpenID+10);	
	}
	else
		ajaxFunction(reinstate.historySearch, 1);
};

function view(i) {
	GEvent.trigger(markerArray[i], "click");
	$.history({'historyType':'open', 'historySearch':query, 'historyOpenID':i});
}


// == shows all markers of a particular category, and ensures the checkbox is checked ==
function showMarkers() {				
	if($("#q").val()!=""){
			map.clearOverlays();				
			for (var i = 0; i < markerArray.length; i++) {
				markerArray[i].show();
			}
		makeSidebar();
		if(markerArray.length==1){
			view(0);
			document.title = "Rutgers Maps - " +markerArray[0].name;
		}
		else{
			document.title = "Rutgers Maps - Search : "+ query;
		}
		$.unblockUI(); 			
		return;
	}
}

$(window).resize(function(){
	resize();
});


function resize(){
	//Resize function adjusts map size according to screen resolution and browser size.
	var myWidth = 0, myHeight = 0;
	if (typeof( window.innerWidth ) == 'number') {	//Non-IE
		myWidth = window.innerWidth;
		myHeight = window.innerHeight;
	} else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) { //IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth+3;
		myHeight = document.documentElement.clientHeight+3;
	} else if (document.body && (document.body.clientWidth || document.body.clientHeight)) { //IE 4 compatible
		myWidth = document.body.clientWidth+3;
		myHeight = document.body.clientHeight+3;
	}
	if (myWidth < 950)
		myWidth = 950;
	if (myHeight < 580)
		myHeight = 580;
	var mapwidth = myWidth - 325;
	var mapheight = myHeight - 180;
	$("div#main").css({'width':mapwidth,'height':mapheight});
	$("div#header").css({'width':myWidth -12});
	$("div#toparea").css({'width':myWidth -72});
	$("div#left").css({'height':mapheight});
	$("div#container").css({'height':myHeight-2,'width':myWidth - 20});
	$("div#container").show();
}
	
function manuallyClear() { // search for nothing, which clears all overLays.
	backToMap();
	initialize();
	inilook=1;
}

function WhatsAround(){
	if (WhatsAroundFlag){
		ShowNameLabels();
	}
}

function backToMap() {
	$("div#map_rutgers").show();
	$("div#allBuildingsDiv").hide();
}

function toggleTypes(type){
	var box = document.getElementById(type);
	if(box.checked){
		ShowNameLabelsTypes(type);
	}
	else{
		ClearNameLabels();
	}
}
function ShowNameLabelsTypes(type){
	var currentBounds = map.getBounds();
	var currentSouthWest = currentBounds.getSouthWest();
	var currentNorthEast = currentBounds.getNorthEast();
	var currentCenter = currentBounds.getCenter();
	var url = '/searchTypes?SWLAT=' + currentSouthWest.lat() + '&SWLNG=' + currentSouthWest.lng() + '&NELAT=' + currentNorthEast.lat() + '&NELNG=' + currentNorthEast.lng() + '&type=' + type;
	if (map.getZoom() >= 16)	{
		$.blockUI({ message: '<img src=\"../../images/ajax-loader.gif\" align=\"center\" style="padding-right: 10;" /> Loading...' });
	GDownloadUrl(url, function(data, responseCode) {
		if(responseCode == 200) {            
			var xml = GXml.parse(data);    
			var root = xml.documentElement;
			var markers = root.getElementsByTagName('result');
			// if (!markers.length) {}
			for (var i = 0; i < markers.length; i++) {
				var id = GXml.value(markers[i].getElementsByTagName('id')[0]);
				var place = GXml.value(markers[i].getElementsByTagName('place')[0]);
				var addr = GXml.value(markers[i].getElementsByTagName('addr')[0]);
				var lat = parseFloat(GXml.value(markers[i].getElementsByTagName('lat')[0]));
				var lng = parseFloat(GXml.value(markers[i].getElementsByTagName('lng')[0]));
				var campus = GXml.value(markers[i].getElementsByTagName('campus')[0]);
				var type = GXml.value(markers[i].getElementsByTagName('type')[0]);
				var point = new GLatLng(lat,lng);
				var marker = createZoomMarker(map, point,place,i);
				var marker2 = createMarker(map, point, id, place, addr, type, campus,1);
				NameLabelArray.push(marker); 
				
				NameLabelMarkerArray.push(marker2);
				map.addOverlay(marker);
				map.addOverlay(marker2);
			}
			$.unblockUI();
		} else if(responseCode == -1) {
			alert("Data request timed out. Please try later.");
		} else { 
			alert("Request resulted in error. Check XML file is retrievable.");
		}
	});
	
	}
	else{
		document.getElementById(type).checked=false;
		alert('Please zoom in near location for using this option!');
	}
}
