var markerCounter;

function init() {
	if (GBrowserIsCompatible()) {
		// ADD MAP INSTANCE
		map = new GMap2(document.getElementById('map'));
		
		// ADD GE MAP TYPE
		map.addMapType(G_SATELLITE_3D_MAP);
		// SET MAP TYPE
		map.setMapType(G_SATELLITE_3D_MAP);
		// REMOVE SINGLE MAP TYPE
		map.removeMapType(G_SATELLITE_MAP);

		var j = 0;
		while(!campus[j].lat) {
			j++;
		}
		
		// SET MAP CENTER
		var a=campus;
		// Get Max Min Lat
		var b=a[j].lat;
		var c=a[j].lat;
		for(d=0;d<a.length;d++){
			if(a[d].lat != null && a[d].categoryName == 'Campus Buildings'){
				b=Math.max(b,a[d].lat);
				c=Math.min(c,a[d].lat);
			}
		}
		// Get Max Min Lng
		var bb=a[j].lng;
		var cc=a[j].lng;
		for(d=0;d<a.length;d++){
			if(a[d].lng != null && a[d].categoryName == 'Campus Buildings'){
				bb=Math.max(bb,a[d].lng);
				cc=Math.min(cc,a[d].lng);
			}
		}
		// New Zoom Level
		var sw = new GLatLng(c,cc);
		var ne = new GLatLng(b,bb);
		var zoomLevel = new GLatLngBounds(sw,ne);
		// Set Center and Zoom Level
		map.setCenter(zoomLevel.getCenter(), map.getBoundsZoomLevel(zoomLevel));

		// ADD NAV CONTROLS
		var navControl = new GLargeMapControl3D();
		var topRight = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(5, 5));
		map.addControl(navControl, topRight);
		
		// map.addControl(new ChangeMapTypeControl());

		// ADD MAP TYPE CONTROLS
		var mapTypeControl = new GMapTypeControl();
		var topLeft = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(80, 5)); //0,445 for bottom-left corner
		map.addControl(mapTypeControl, topLeft);
		
		//ADD GOOGLE TRANSIT TO MAP
		//var gTileUrlTemplate = 'http://mt1.google.com/vt/lyrs=m@121,transit|vm:1&hl=en&opts=r&x={X}&y={Y}&z={Z}';
		//var tileLayerOverlay = new GTileLayerOverlay(
		//	new GTileLayer(null, null, null, {
		//	  tileUrlTemplate: gTileUrlTemplate,
		//	  isPng:true,
		//	  opacity:0.8
		//	})
		//);
		//map.addOverlay(tileLayerOverlay);
		
		// ADD LOGO SCREEN OVERLAY
		var mapWidth = document.getElementById("map").offsetWidth;
		var c3dOverlayLoc = (mapWidth/2)-80;
		
		var c3dOverlay = new GScreenOverlay('http://prep.campusbird.com/widget/cb-c3d-logo.png', 
						new GScreenPoint(c3dOverlayLoc,10,'pixels','pixels'), 
						new GScreenPoint(0,0,'pixels','pixels'), 
						new GScreenSize(159,20,'pixels','pixels'));
		map.addOverlay(c3dOverlay);

		
		// ADD DRIVING DIRECTIONS
		gdir = new GDirections(map, document.getElementById("directions"));
        GEvent.addListener(gdir, "addoverlay", onGDirectionsLoad);
        GEvent.addListener(gdir, "error", handleErrors);
		
		// ADD GE API
		map.getEarthInstance(function(object) {
			ge = object;
			
			if(ge) {
				ge.getNavigationControl().getScreenXY().setXUnits(ge.UNITS_INSET_PIXELS);
				ge.getNavigationControl().getScreenXY().setYUnits(ge.UNITS_INSET_PIXELS);
	
				// add some layers
				ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, false);
				ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, false);
				ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, true);
				ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS_LOW_RESOLUTION, true);
				ge.getLayerRoot().enableLayerById(ge.LAYER_TERRAIN, true);
	
				// set flyto speed
				ge.getOptions().setFlyToSpeed(.15);
				
				//TEMPORARY 3D
				/*
				function finished(object) {
				  if (!object) {
					// wrap alerts in API callbacks and event handlers
					// in a setTimeout to prevent deadlock in some browsers
					setTimeout(function() {
					  alert('Bad or null KML.');
					}, 0);
					return;
				  }
				  ge.getFeatures().appendChild(object);
						   
				}
				
				// fetch the KML
				var url = 'http://prep.campusbird.com/widget/schools/IPEDS/FILE.kmz';
				google.earth.fetchKml(ge, url, finished);
				*/
				
			} else {
				map.setMapType(G_NORMAL_MAP);
			}
		});
			
// -----------------------------------------------------------------------------------------------------------------------------------------------------------------
			
		// load school marker if no custom campus content
		if(!campus.length){
			createSchoolMarker(data.lat, data.lng, data.name);
		}

		// campus directory
		var routeIndex = 0;
		var kmlObject = 0;
		
		var campusHolder = {};
		campusHolder['Campus Buildings'] = { 'Academic & Administrative': [], 'Academic & Housing':[], 'Housing': [], 'The Arts': [], 'Athletics': [], 'Under Construction': [], 'unsorted': [] };
		campusHolder['Around Campus'] = { 'Geographic Features': [], 'Landmarks': [], 'Points of Interest': [], 'unsorted': [] };
		campusHolder['Co-op & Abroad'] = { 'North America':[], 'Caribbean':[], 'Central America':[], 'South America':[], 'Europe':[], 'Africa':[], 'Middle East':[], 'Asia':[], 'Oceania':[], 'unsorted':[] };

		for(var i=0; i<campus.length; i++) {
			if(campus[i].categoryName == 'Parking') {
				if(campus[i].subCategoryName == 'Public Parking') {
					parkingData.push({'type': 'Public Parking', 'data': campus[i], 'marker': null});
				} else if(campus[i].subCategoryName == 'Private Parking') {
					parkingData.push({'type': 'Private Parking', 'data': campus[i], 'marker': null});
				} else if(campus[i].subCategoryName == 'Bike Parking') {
					parkingData.push({'type': 'Bike Parking', 'data': campus[i], 'marker': null});
				}
			} else if(campus[i].categoryName == 'Accessibility') {
				if(campus[i].subCategoryName == 'Parking') {
					accessData.push({'type': 'Parking', 'data': campus[i], 'marker': null});
				} else if(campus[i].subCategoryName == 'Entrances') {
					accessData.push({'type': 'Entrances', 'data': campus[i], 'marker': null});
				} else if(campus[i].subCategoryName == 'Steep Grades') {
					accessData.push({'type': 'Steep Grades', 'data': campus[i], 'marker': null});
				}
			} else if(campus[i].categoryName == 'Transportation') {
				if(campus[i].subCategoryName == 'Airport') {
					routeData.push({'type': 'Airport', 'data': campus[i], 'marker': null});
				} else if(campus[i].subCategoryName == 'Bus') {
					if(campus[i].subSubCategoryName == 'Stops')
						routeData.push({'type': 'Bus Stops', 'data': campus[i], 'marker': null});
					else if(campus[i].subSubCategoryName == 'Routes') {
						routeData.push({'type': 'Bus Routes', 'data': campus[i], 'index': routeIndex, 'kmlObject': kmlObject});
						routeIndex++;
					}
				} else if(campus[i].subCategoryName == 'Metro') {
					if(campus[i].subSubCategoryName == 'Stops')
						routeData.push({'type': 'Metro Stops', 'data': campus[i], 'marker': null});
					else if(campus[i].subSubCategoryName == 'Routes') {
						routeData.push({'type': 'Metro Routes', 'data': campus[i], 'index': routeIndex, 'kmlObject': kmlObject});
						routeIndex++;
					}
				} else if(campus[i].subCategoryName == 'Train') {
					if(campus[i].subSubCategoryName == 'Stops')
						routeData.push({'type': 'Train Stops', 'data': campus[i], 'marker': null});
					else if(campus[i].subSubCategoryName == 'Routes') {
						routeData.push({'type': 'Train Routes', 'data': campus[i], 'index': routeIndex, 'kmlObject': kmlObject});
						routeIndex++;
					}
				}
			} else if(campus[i].categoryName == 'Emergency Phones') {
				ephoneData.push({'type': 'Emergency Phones', 'data': campus[i], 'marker': null});
			}

			switch(campus[i].categoryName) {
				case 'Campus Buildings':
					if(campus[i].subCategoryName == 'Academic & Administrative') {
						campusHolder['Campus Buildings']['Academic & Administrative'].push(campus[i]);
					}
					else if(campus[i].subCategoryName == 'Academic & Housing') {
						campusHolder['Campus Buildings']['Academic & Housing'].push(campus[i]);
					}
					else if(campus[i].subCategoryName == 'Housing') {
						campusHolder['Campus Buildings']['Housing'].push(campus[i]);
					}
					else if(campus[i].subCategoryName == 'The Arts') {
						campusHolder['Campus Buildings']['The Arts'].push(campus[i]);
					}
					else if(campus[i].subCategoryName == 'Athletics') {
						campusHolder['Campus Buildings']['Athletics'].push(campus[i]);
					}
					else if(campus[i].subCategoryName == 'Under Construction') {
						campusHolder['Campus Buildings']['Under Construction'].push(campus[i]);
					}
					else {
						campusHolder['Campus Buildings'].unsorted.push(campus[i]);
					}
					break;
					
				case 'Around Campus':
					if(campus[i].subCategoryName == 'Geographic Features') {
						campusHolder['Around Campus']['Geographic Features'].push(campus[i]);
					}
					else if(campus[i].subCategoryName == 'Landmarks') {
						campusHolder['Around Campus']['Landmarks'].push(campus[i]);
					}
					else if(campus[i].subCategoryName == 'Points of Interest') {
						campusHolder['Around Campus']['Points of Interest'].push(campus[i]);
					}
					//else if(campus[i].subCategoryName == 'Organizations') {
					//	campusHolder['Around Campus']['Organizations'].push(campus[i]);
					//}
					else {
						campusHolder['Around Campus'].unsorted.push(campus[i]);
					}
					break;
				case 'Co-op & Abroad':
					if(campus[i].subCategoryName == 'North America') {
						campusHolder['Co-op & Abroad']['North America'].push(campus[i]);
					}
					else if(campus[i].subCategoryName == 'Caribbean') {
						campusHolder['Co-op & Abroad']['Caribbean'].push(campus[i]);
					}
					else if(campus[i].subCategoryName == 'Central America') {
						campusHolder['Co-op & Abroad']['Central America'].push(campus[i]);
					}
					else if(campus[i].subCategoryName == 'South America') {
						campusHolder['Co-op & Abroad']['South America'].push(campus[i]);
					}
					else if(campus[i].subCategoryName == 'Europe') {
						campusHolder['Co-op & Abroad']['Europe'].push(campus[i]);
					}
					else if(campus[i].subCategoryName == 'Africa') {
						campusHolder['Co-op & Abroad']['Africa'].push(campus[i]);
					}
					else if(campus[i].subCategoryName == 'Middle East') {
						campusHolder['Co-op & Abroad']['Middle East'].push(campus[i]);
					}
					else if(campus[i].subCategoryName == 'Asia') {
						campusHolder['Co-op & Abroad']['Asia'].push(campus[i]);
					}
					else if(campus[i].subCategoryName == 'Oceania') {
						campusHolder['Co-op & Abroad']['Oceania'].push(campus[i]);
					}
					else {
						campusHolder['Co-op & Abroad'].unsorted.push(campus[i]);
					}
					break;
			}
		}
		
		var campusListIconGf = "<img title=\"Geographic Features\" src=\"../assets/img/icons/maps/map_geo.png\" />";
		var campusListIconL = "<img title=\"Landmarks\" src=\"../assets/img/icons/maps/map_landmark.png\" />";
		var campusListIconPoi = "<img title=\"Points of Interest\" src=\"../assets/img/icons/maps/map_poi.png\" />";
		var campusListIconC = "<img title=\"Co-op & Abroad\" src =\"..assets/img/icons/maps/map_coop.png\" />";
		var campusListIcon = "<img width=\"22\" height=\"22\" src=\"../assets_schools/" +campus[0].ipeds+ "/icon.png\" />";
		
		markerCounter = 0;
		
		var campusList = '<h3>Campus Buildings</h3>';
		campusList += '<ul>';
		
		for(var i in campusHolder['Campus Buildings']) {
			switch(i) {
				case 'Academic & Administrative':
					if(campusHolder['Campus Buildings']['Academic & Administrative'].length) {
						campusList += '<h3>' + campusListIcon + '<div>Academic & Administrative</div></h3>';
						campusList += '<ul>';
						campusList = listItems(campusHolder['Campus Buildings']['Academic & Administrative'], campusList);
						campusList += '</ul>';
					}
					break;
				case 'Academic & Housing':
					if(campusHolder['Campus Buildings']['Academic & Housing'].length) {
						campusList += '<h3>' + campusListIcon +  '<div>Academic & Housing</div></h3>';
						campusList += '<ul>';
						campusList = listItems(campusHolder['Campus Buildings']['Academic & Housing'], campusList);
						campusList += '</ul>';
					}
					break;
				case 'Housing':
					if(campusHolder['Campus Buildings']['Housing'].length) {
						campusList += '<h3>' + campusListIcon +  '<div>Housing</div></h3>';
						campusList += '<ul>';
						campusList = listItems(campusHolder['Campus Buildings']['Housing'], campusList);
						campusList += '</ul>';
					}
					break;
				case 'The Arts':
					if(campusHolder['Campus Buildings']['The Arts'].length) {
						campusList += '<h3>' + campusListIcon + '<div>The Arts</div></h3>';
						campusList += '<ul>';
						campusList = listItems(campusHolder['Campus Buildings']['The Arts'], campusList);
						campusList += '</ul>';
					}
					break;
				case 'Athletics':
					if(campusHolder['Campus Buildings']['Athletics'].length) {
						campusList += '<h3>' + campusListIcon + '<div>Athletics</div></h3>';
						campusList += '<ul>';
						campusList = listItems(campusHolder['Campus Buildings']['Athletics'], campusList);
						campusList += '</ul>';
					}
					break;
				case 'Under Construction':
					if(campusHolder['Campus Buildings']['Under Construction'].length) {
						campusList += '<h3>' + campusListIcon + '<div>Under Construction</div></h3>';
						campusList += '<ul>';
						campusList = listItems(campusHolder['Campus Buildings']['Under Construction'], campusList);
						campusList += '</ul>';
					}
					break;
				case 'unsorted':
					if(campusHolder['Campus Buildings']['unsorted'].length) {
						campusList = listItems(campusHolder['Campus Buildings']['unsorted'], campusList);
					}
					break;
			}
		}
		campusList += '</ul>';
		
		if(campusHolder['Around Campus']['Geographic Features'].length || 
				campusHolder['Around Campus']['Landmarks'].length ||
				campusHolder['Around Campus']['Points of Interest'].length ||
				//campusHolder['Around Campus']['Organizations'].length ||
				campusHolder['Around Campus']['unsorted'].length) {
			campusList += '<h3>Around Campus</h3>';
			campusList += '<ul>';
			for(var i in campusHolder['Around Campus']) {
				switch(i) {
				case 'Geographic Features':
					if(campusHolder['Around Campus']['Geographic Features'].length) {
						campusList += '<h3>' + campusListIconGf + '<div>Geographic Features</div></h3>';
						campusList += '<ul>';
						campusList = listItems(campusHolder['Around Campus']['Geographic Features'], campusList);
						campusList += '</ul>';
					}
					break;
				case 'Landmarks':
					if(campusHolder['Around Campus']['Landmarks'].length) {
						campusList += '<h3>' + campusListIconL + '<div>Landmarks</div></h3>';
						campusList += '<ul>';
						campusList = listItems(campusHolder['Around Campus']['Landmarks'], campusList);
						campusList += '</ul>';
					}
					break;
				case 'Points of Interest':
					if(campusHolder['Around Campus']['Points of Interest'].length) {
						campusList += '<h3>' + campusListIconPoi + '<div>Points of Interest</div></h3>';
						campusList += '<ul>';
						campusList = listItems(campusHolder['Around Campus']['Points of Interest'], campusList);
						campusList += '</ul>';
					}
					break;
				//case 'Organizations':
				//	if(campusHolder['Around Campus']['Organizations'].length) {
				//		campusList += '<h3>Organizations</h3>';
				//		campusList += '<ul>';
				//		campusList = listItems(campusHolder['Around Campus']['Organizations'], campusList);
				//		campusList += '</ul>';
				//	}
				//	break;
				case 'unsorted':
					if(campusHolder['Around Campus']['unsorted'].length) {
						campusList = listItems(campusHolder['Around Campus']['unsorted'], campusList);
					}
					break;
				}
			}
			campusList += '</ul>';
		}
		
		if(campusHolder['Co-op & Abroad']['North America'].length || 
				campusHolder['Co-op & Abroad']['Caribbean'].length ||
				campusHolder['Co-op & Abroad']['Central America'].length ||
				campusHolder['Co-op & Abroad']['South America'].length ||
				campusHolder['Co-op & Abroad']['Europe'].length ||
				campusHolder['Co-op & Abroad']['Africa'].length ||
				campusHolder['Co-op & Abroad']['Middle East'].length ||
				campusHolder['Co-op & Abroad']['Asia'].length ||
				campusHolder['Co-op & Abroad']['Oceania'].length ||
				campusHolder['Co-op & Abroad']['unsorted'].length) {
			campusList += '<h3>Co-op & Abroad</h3>';
			campusList += '<ul>';
			for(var i in campusHolder['Co-op & Abroad']) {
				switch(i) {
				case 'North America':
					if(campusHolder['Co-op & Abroad']['North America'].length) {
						campusList += '<h3><div>North America</div></h3>';
						campusList += '<ul>';
						campusList = listItems(campusHolder['Co-op & Abroad']['North America'], campusList);
						campusList += '</ul>';
					}
					break;
				case 'Caribbean':
					if(campusHolder['Co-op & Abroad']['Caribbean'].length) {
						campusList += '<h3><div>Caribbean</div></h3>';
						campusList += '<ul>';
						campusList = listItems(campusHolder['Co-op & Abroad']['Caribbean'], campusList);
						campusList += '</ul>';
					}
					break;
				case 'Central America':
					if(campusHolder['Co-op & Abroad']['Central America'].length) {
						campusList += '<h3><div>Central America</div></h3>';
						campusList += '<ul>';
						campusList = listItems(campusHolder['Co-op & Abroad']['Central America'], campusList);
						campusList += '</ul>';
					}
					break;
				case 'South America':
					if(campusHolder['Co-op & Abroad']['South America'].length) {
						campusList += '<h3><div>South America</div></h3>';
						campusList += '<ul>';
						campusList = listItems(campusHolder['Co-op & Abroad']['South America'], campusList);
						campusList += '</ul>';
					}
					break;
				case 'Europe':
					if(campusHolder['Co-op & Abroad']['Europe'].length) {
						campusList += '<h3>Europe</h3>';
						campusList += '<ul>';
						campusList = listItems(campusHolder['Co-op & Abroad']['Europe'], campusList);
						campusList += '</ul>';
					}
					break;
				case 'Africa':
					if(campusHolder['Co-op & Abroad']['Africa'].length) {
						campusList += '<h3>Africa</h3>';
						campusList += '<ul>';
						campusList = listItems(campusHolder['Co-op & Abroad']['Africa'], campusList);
						campusList += '</ul>';
					}
					break;
				case 'Middle East':
					if(campusHolder['Co-op & Abroad']['Middle East'].length) {
						campusList += '<h3>Middle East</h3>';
						campusList += '<ul>';
						campusList = listItems(campusHolder['Co-op & Abroad']['Middle East'], campusList);
						campusList += '</ul>';
					}
					break;
				case 'Asia':
					if(campusHolder['Co-op & Abroad']['Asia'].length) {
						campusList += '<h3>Asia</h3>';
						campusList += '<ul>';
						campusList = listItems(campusHolder['Co-op & Abroad']['Asia'], campusList);
						campusList += '</ul>';
					}
					break;
				case 'Oceania':
					if(campusHolder['Co-op & Abroad']['Oceania'].length) {
						campusList += '<h3>Oceania</h3>';
						campusList += '<ul>';
						campusList = listItems(campusHolder['Co-op & Abroad']['Oceania'], campusList);
						campusList += '</ul>';
					}
					break;
				case 'unsorted':
					if(campusHolder['Co-op & Abroad']['unsorted'].length) {
						campusList = listItems(campusHolder['Co-op & Abroad']['unsorted'], campusList);
					}
					break;
				}
			}
			campusList += '</ul>';
		}
		
		
// --------------------------------------------------------------------------------------------------------------------------------------------------------------

		// Get height of checkbox panel
		var counter = 1;
		
		if(ephoneData.length){
			counter = counter + 1;
			addEphoneCheckboxes(ephoneData);
			}
		if(routeData.length){
			counter = counter + 1;
			addTransCheckboxes(routeData);
			}
		if(accessData.length){
			counter = counter + 1;
			addAccessCheckboxes(accessData);
			}
		if(parkingData.length){
			counter = counter + 1;
			addParkingCheckboxes(parkingData);
			}
		checkPanelHeight = counter * 31;
		$(".checkbox-panel").css('height', checkPanelHeight);
		
		// Use checkbox panel height to determine other heights
		var widgetHeightPx = $(".widget-wrapper").css('height');
		var widgetHeight = widgetHeightPx.split("px");
		var sidebarHeight = widgetHeight[0] - 7;
		
		var browser=navigator.appName;
		if (browser == "Microsoft Internet Explorer"){
			var accordionHeight = widgetHeight[0] - checkPanelHeight - 6;
			var accordionWrapHeight = widgetHeight[0] - checkPanelHeight - 25 - 6;
		}else{
			var accordionHeight = widgetHeight[0] - checkPanelHeight;
			var accordionWrapHeight = widgetHeight[0] - checkPanelHeight - 25;
		}
				
		$(".sidebar").css('height', sidebarHeight);
		$("#accordion").css('height', accordionHeight);
		$(".accordion-panel-wrap").css('height', accordionWrapHeight);
		$(".accordion-panel").css('height', accordionWrapHeight);
		
		// Populate directory list
		$("#campus-places").html(campusList);
		
		// jQuery qtip
		$('.checkbox-panel img').qtip({
			content: {
				text: false // Use each elements title attribute
			},

			position:{
				corner:{
					target: 'topMiddle',
					tooltip: 'bottomMiddle'
				}
			},
			style: {
				name: 'light', 
				border:{
					radius: 3,
					color: '#CC0000'
				},
				tip: true 
			} 
		});
	}
}

function listItems(array, list) {
	for(var i in array) {
		createCampusMarker(array[i], markerCounter);
		list += '<li><a href="#" onclick="moveCamera(' + array[i].lat + ', ' + array[i].lng + ', ' + markerCounter + ');">' + array[i].name + '</a></li>';
		markerCounter++;
	}
	return list;
}
