//<![CDATA[
jQuery.preloadImages = function(){for(var i = 0; i<arguments.length; i++){jQuery("<img>").attr("src", arguments[i]);}}			  
			  
//onerror=handleErr;  // comment this out on live site!

$("#GoogleMap").empty();

var map, mapContainer, mgr, bldMM, geoMainCampus, geoBuildings, geocallboxes, geoHousing, geoPolice, groundMap, boundaries, mapZoom, trackZoom, callboxIcon, policeIcon, policeSubIcon, targetMarker, targetMarkerCheck, targetMarkerDelay = 0;
// DEFINE CUSTOM MARKERS
var markers = [];
var gmarkers = [];
var gicons = [];

var labels = ["ACC","ATC","ATHS","BTC","BWD","CAL","CC","ERC","ETC","FH","GSW","GYM","LEC","LIB","LJC","MAC","MOD","MTC","PAC","PDC","POL","SASC","VH","CVA","CWA","RSA","VPA"]
for (var i in labels) {
	label = labels[i];
	gicons[label] = new GIcon();
	gicons[label].image = "images/gmap/label" + label + ".png";
	gicons[label].iconSize = new GSize(32,32);
	gicons[label].iconAnchor = new GPoint(16, 16);
	gicons[label].infoWindowAnchor = new GPoint(24,12);
	$.preloadImages("/visit/campus/images/campus/" + label + ".jpg");
}

gicons["maincampus"] = new GIcon();
gicons["maincampus"].image = "images/gmap/labelMainCampus.png";
gicons["maincampus"].iconSize = new GSize(32,25);
gicons["maincampus"].iconAnchor = new GPoint(16, 12);
gicons["maincampus"].infoWindowAnchor = new GPoint(24,10);

gicons["campus"] = new GIcon();
gicons["campus"].image = "images/gmap/labelCampus.png";
gicons["campus"].iconSize = new GSize(24,19);
gicons["campus"].iconAnchor = new GPoint(12, 9);
gicons["campus"].infoWindowAnchor = new GPoint(16,8);

gicons["callbox"] = new GIcon();
gicons["callbox"].image = "images/gmap/labelcallbox.png";
gicons["callbox"].iconSize = new GSize(16,16);
gicons["callbox"].iconAnchor = new GPoint(8, 8);
gicons["callbox"].infoWindowAnchor = new GPoint(8,8);

gicons["police"] = new GIcon(gicons["callbox"],"images/gmap/labelPolice.png");
gicons["policeSub"] = new GIcon(gicons["callbox"],"images/gmap/labelPoliceSub.png");

var newHtml;
newHtml = '<div id="MapContainer">';

newHtml += '<ul id="MapCampuses">';
newHtml += '	<li id="Tab0" class="activeTab"><a id="MainMapLink" href="index.htm">Main Campus</a></li>';
newHtml += '	<li id="Tab1" class="inactiveTab"><a id="AATCMapLink" href="aatc.htm">AATC</a></li>';
newHtml += '	<li id="Tab2" class="inactiveTab"><a id="AVCMapLink" href="avc.htm">Aviation Center</a></li>';
newHtml += '	<li id="Tab3" class="inactiveTab"><a id="ESCMapLink" href="esc.htm">Earth Science Center</a></li>';
newHtml += '	<li id="Tab4" class="inactiveTab"><a id="GSMapLink" href="gs.htm">General Services</a></li>';
newHtml += '	<li id="Tab5" class="inactiveTab"><a id="NorthMapLink" href="north.htm">North Campus</a></li>';
newHtml += '	<li id="Tab6" class="inactiveTab"><a id="RegionMapLink" href="index.htm">Region</a></li>';
newHtml += '</ul>';
newHtml += '<div id="Map"></div>';
newHtml += '<div id="MapLegend">';

newHtml += '	<div id="MapOptions" class="f33">';
newHtml += '		<form id="MapForm" method="post" action="">';
newHtml += '			<label>Display Markers:</label>'
newHtml += '			<ul class="plain">';
newHtml += '				<li><label for="OptBuildings"><input type="checkbox" name="mapOpts" value="buildings" id="OptBuildings" /> Buildings</label></li>';
newHtml += '				<li><label for="OptHousing"><input type="checkbox" name="mapOpts" value="housing" id="OptHousing" /> Housing</label></li>';
newHtml += '				<li><label for="OptPolice"><input type="checkbox" name="mapOpts" value="police" id="OptPolice" /> Police</label></li>';
newHtml += '				<li><label for="OptCallboxes"><input type="checkbox" name="mapOpts" value="callboxes" id="OptCallboxes" /> Emergency Call Boxes</label></li>';
newHtml += '			</ul>';
newHtml += '			<div id="QuickFind">';
newHtml += '				<label for="QuickSel">Quick Find:<br />';
newHtml += '				<select id="QuickSel">';
newHtml += '					<option value="">- Select -</option>';
newHtml += '				</select></label>';
newHtml += '			</div>';
newHtml += '		</form>';
newHtml += '	</div>';

newHtml += '	<div id="ParkingLegend" class="f66">';
newHtml += '<div class="f33"><div class="legendParking" id="LegendParkingVisitor"><strong>Visitor/Special Events</strong></div></div>';
newHtml += '<div class="f33"><div class="legendParking" id="LegendParkingStudent"><strong>Student Parking</strong><br /><span class="smaller">Marked with yellow lines</span></div></div>';
newHtml += '<div class="f33"><div class="legendParking" id="LegendParkingResident"><strong>Resident Parking</strong><br /><span class="smaller">For on-campus housing</span></div></div>';
newHtml += '<div class="f0"></div>';
newHtml += '<div class="f33"><div class="legendParking" id="LegendParkingHandicapped"><strong>Handicapped Parking</strong><br /><span class="smaller">Marked with blue lines, located near buildings</span></div></div>';
newHtml += '<div class="f33"><div class="legendParking" id="LegendParkingStaff"><strong>Faculty, Staff Parking</strong><br /><span class="smaller">Marked with white lines</span></div></div>';
newHtml += '<div class="f33"><div class="legendParking" id="LegendParkingReserved"><strong>Reserved Parking</strong><br /><span class="smaller">Numbered spaces reserved 24 hours a day</span></div></div>';
newHtml += '</div>';

newHtml += '<div class="f0"></div>';
newHtml += '</div></div>';

$(function(){
	if (!($.browser.msie && $.browser.version < 7)) {
		$("#GoogleMap").html(newHtml);
		setupMap();
		$(window).load(function(){$(window).trigger("resize");});
		$(window).unload(function(){GUnload();});
		$("#QuickSel").change(function(){changeSel(this);});
		$("#MapCampuses a").click(function(){return(false);});
		$("#MapCampuses a#RegionMapLink").click(function(){loadMap("region");return false;});
		var targetMarkerCheck = setInterval("checkTargetMarker()",50);
	};
});


/*** FUNCTIONS ***********************************************************************************************/
function handleErr(msg,url,l) {
	txt="There was an error on this page.\n\n";
	txt+="Error: " + msg + "\n";
	txt+="URL: " + url + "\n";
	txt+="Line: " + l + "\n\n";
	txt+="Click OK to continue.\n\n";
	alert(txt);
	window.stop();
	document.execCommand('Stop')
	return false;
}

function setupMap() {
	if (GBrowserIsCompatible()) {
		map = new GMap2($("#Map")[0],{size: new GSize($("#MapLegend").width()-2,480)});
		mapContainer = $("#MapContainer")[0];
		var copyrightCollection = new GCopyrightCollection();
		var copyright1 = new GCopyright(1, new GLatLngBounds(new GLatLng(-90, -180), new GLatLng(90, 180)), 13, "TeleAtlas;");
		var copyright2 = new GCopyright(2, new GLatLngBounds(new GLatLng(41.234119,-77.032028),new GLatLng(41.237339,-77.028984)), 15, "PCT");
		copyrightCollection.addCopyright(copyright1);
		copyrightCollection.addCopyright(copyright2);
		
		CustomGetTileUrl = function(a,b){
			if ((b==15 && a.x>=9372 && a.x<=9373 && a.y>=12256 && a.y<=12257) || (b==16 && a.x>=18744 && a.x<=18747 && a.y>=24513 && a.y<=24515) || (b==17 && a.x>=37489 && a.x<=37494 && a.y>=49026 && a.y<=49030)) {return "images/tiles/"+a.x+"_"+a.y+"_"+(b)+".png";}
			else return G_NORMAL_MAP.getTileLayers()[0].getTileUrl(a,b);
		};

		var tilelayers = [new GTileLayer(copyrightCollection, 15, 17)];
		tilelayers[0].getTileUrl = CustomGetTileUrl;
		var myTileLayer = new GTileLayerOverlay(tilelayers[0]);
		
		map.setCenter(new GLatLng(41.23585,-77.025859), 16);
		map.addOverlay(myTileLayer);
		map.enableDoubleClickZoom();		
		map.enableContinuousZoom();
		map.addControl(new GScaleControl());
		map.addControl(new GLargeMapControl());
		map._lastCenter=map.getCenter(); 
		
		G_NORMAL_MAP.getMaximumResolution = function () { return 17 }; 
		G_NORMAL_MAP.getMinimumResolution = function () { return 4 }; 

		//=== START INITIALIZE MARKER MANAGER ======= 
		mgr = new MarkerManager(map, {borderPadding:20});
		mgr = new MarkerManager(map);
		var request = GXmlHttp.create();
		var rndm = Math.round(Math.random()*1000000);
		request.open("GET", "xml/markers.xml?"+rndm, true);
		request.onreadystatechange = function() {
			if (request.readyState == 4) {
				var xmlDoc = request.responseXML;
				var xmlmarkers = xmlDoc.documentElement.getElementsByTagName("marker");
				for (var i = 0; i < xmlmarkers.length; i++) {
					var fullname=null, href=null, image=null, desc=null, vtour=null
					var group = xmlmarkers[i].getAttribute("group")
					var lat = parseFloat(xmlmarkers[i].getAttribute("lat"));
					var lng = parseFloat(xmlmarkers[i].getAttribute("lng"));
					var point = new GLatLng(lat,lng);
					var label = xmlmarkers[i].getAttribute("label")
					var icon = xmlmarkers[i].getAttribute("icon")
					var zoom = parseInt(xmlmarkers[i].getAttribute("zoom"));
					var htmID = xmlmarkers[i].getAttribute("htmID");
					var zoomInit = parseInt(xmlmarkers[i].getAttribute("zoomInit"));
					
					var linkArr = xmlmarkers[i].getElementsByTagName("link");
					var vtourArr = xmlmarkers[i].getElementsByTagName("vtour");
					var imageArr = xmlmarkers[i].getElementsByTagName("image");
					var descArr = xmlmarkers[i].getElementsByTagName("description");
					var nameArr = xmlmarkers[i].getElementsByTagName("name");
					
					if (linkArr.length > 0) {
						href = linkArr[0].textContent; // standards compliant;
						if (href == null) {href = linkArr[0].text;} // IE
					}
					if (vtourArr.length > 0) {
						vtour = vtourArr[0].textContent; // standards compliant;
						if (vtour == null) {vtour = vtourArr[0].text;} // IE
					}
					if (imageArr.length > 0) {
						image = imageArr[0].textContent; // standards compliant;
						if (image == null) {image = imageArr[0].text;} // IE
					}
					if (descArr.length > 0) {
						desc = descArr[0].textContent; // standards compliant;
						if (desc == null) {desc = descArr[0].text;} // IE
					}
					if (nameArr.length > 0) {
						fullname = nameArr[0].textContent; // standards compliant;
						if (fullname == null) {fullname = nameArr[0].text;} // IE
					}
					if (!fullname) {fullname = label;};
					
					var htmlDesc = '<div class="infoWindow">';
					if (image) {htmlDesc += '<img src="images/campus/'+image+'" alt="'+fullname+'" height="100" width="133" \/><br \/>';};
					htmlDesc += '<h4>' + fullname + '<\/h4><p>';
					if (href) {htmlDesc += '<a href="'+href+'">More info</a><br \/>';};
					if (lat && lng) {htmlDesc += '<a href="http://maps.google.com/maps?q=to%3A+'+lat+','+lng+'" target="_blank">Get driving directions</a><br \/>';};
					if (vtour) {htmlDesc += '<a href="'+vtour+'">Virtual tour<\/a>';};
					htmlDesc += '</p></div>';
		
					if (!gmarkers[group]) {gmarkers[group] = new Array();};
					var cnt = gmarkers[group].length;
					
					gmarkers[group][cnt] = createMarker(group, label, point, htmlDesc, htmID, zoomInit, gicons[xmlmarkers[i].getAttribute("icon")]);
					gmarkers[group][cnt].title = label;
					selVal = group + "|" + cnt;
					selTxt = "("+icon+") "+label;
					if ((group=="buildings") || (group=="housing")) {appendOption("QuickSel",selVal,selTxt)};
					
					//if (htmID) {setMapLink(htmID, map, gmarkers[group][cnt], zoomInit);};
						
				}
				$("option").each(function(){$(this).attr("title",$(this).text());});
				$("option:even").css("backgroundColor","#f7f7ff");
				loadMarkers();
			}
		};
		request.send(null);
		mgr.refresh();
		//=== END INITIALIZE MARKER MANAGER =========
		
		resetOptions();
		$("input[name=mapOpts]").click(function(){loadMarkers();});
	}																   

	//=== Check for preselected marker in Query String: ?mrk[id]&z[zoom] for building; campus|[0,1,2,3,4,5] for campus {Main,AATC,AVC,ESC,North,Region} 
	var mrk = getQueryVariable("mrk")
	switch(mrk)	{
		case "main":
		  mrk="campus|0";
		  break;
		case "aatc":
		  mrk="campus|1";
		  break;
		case "avc":
		  mrk="campus|2";
		  break;
		case "esc":
		  mrk="campus|3";
		  break;
		case "gs":
		  mrk="campus|4";
		  break;
		case "north":
		  mrk="campus|5";
		  break;
		case "region":
		  loadMap(mrk);
		  mrk=null;
		  break;
		default:
		  mrk = mrk;
	}
	if (mrk) mrk = mrk.toLowerCase();
	var z = parseInt(getQueryVariable("z"));
	if (isNaN(z)) {z=16}; // default zoom
	if (mrk) {
		if (mrk.indexOf("|") > 0 ) {
			setTimeout("getTargetMarker('"+ mrk +"')",351);
		} else {
			setTimeout("getMarker('"+ mrk +"'," + z + ")",351);
		};
	};
	
	//=== Add listeners for repositioned/resized maps ========
	GEvent.addListener(map, 'moveend', function(){
		setTabs();
		map._lastCenter=map.getCenter(); 
	});
	GEvent.addListener(map, "resize", function(){
		map.setCenter(map._lastCenter);
	});
	$(window).resize(function(){
		resizeMap();
	}); 
	GEvent.addListener(map, "zoomend", setOptions);
}

function resizeMap() {
	$("#Map").css("width",$("#MapContainer ").width()-2+"px"); 
}

function centerMap() {
	map.setCenter(map._lastCenter);
}

function getMarker(mrk,mrkZoom){
	for (x in gmarkers) {
		for (y in gmarkers[x]) {
			marker = gmarkers[x][y];
			if (marker.getIcon().image.toLowerCase().indexOf("label" + mrk + ".png") > 0) {
				loadMarkers();
				mgr.addMarker(marker,15,17);
				mgr.refresh();
				if ((mrkZoom > 15) && (mrkZoom < 20)) {map.setZoom(mrkZoom)};
				if (map.getZoom() < 15) {map.setZoom(16);};
				map.setCenter(marker.getLatLng());
				targetMarker = marker;
				return;
			}
		}
	}
}

function getTargetMarker(mrk){
	var mrkVal = mrk.split("|");
	marker = gmarkers[mrkVal[0]][mrkVal[1]];
	loadMarkers();
	mgr.addMarker(marker,15,17);
	mgr.refresh();
	if (map.getZoom() < 15) {map.setZoom(16);};
	if (!testBounds(marker)) {map.setCenter(marker.getLatLng());};
	targetMarker = marker;
}

function appendOption(fld,optVal,optTxt) {
	var insertBefore;
	var sel = $("#" + fld + " option");
	for (i=1;i<sel.length;i++) { // Use i=1 since the first option is preset to blank
		if (optTxt < sel.eq(i).text()) {insertBefore = sel.eq(i);}
	};
	if (insertBefore) {insertBefore.before('<option value="' + optVal + '">"' + optTxt + '</option>');} 
	else {$("#" + fld).append('<option value="' + optVal + '">' + optTxt + '</option>')};
}

function changeSel(sel) {
	if (sel.selectedIndex > 0) {
	var selVal = sel.value.split("|");
		marker = gmarkers[selVal[0]][selVal[1]]
		loadMarkers();
		mgr.addMarker(marker,15,17)
		mgr.refresh();
		if (map.getZoom() < 15) {map.setZoom(16);};
		if (!testBounds(marker)) {
			map.setCenter(marker.getLatLng());
		}
		targetMarker = marker;
	}
}

function checkTargetMarker() {
	if (targetMarker) {
		if (targetMarkerDelay > 0) {
			GEvent.trigger(targetMarker,"click");
			targetMarkerDelay = 0;
			targetMarker = null;
		}
		targetMarkerDelay +=1;
	} else {
		targetMarkerDelay = 0;
	}
}

function createMarker(group,label,point,html,htmID,zoomInit,icon) {
	var marker = new GMarker(point, {icon:icon,title:label});
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(html);
	});
	if (htmID) {
		GEvent.addDomListener(document.getElementById(htmID), 'click',	function() {
			map.setCenter(marker.getPoint(), zoomInit);
			if (htmID != "MainMapLink") {targetMarker = marker;};
		});
	}
	return marker;
}

function getQueryVariable(variable) {
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) {
      return pair[1];
    }
  }
} 

function loadMap(campus){
	if (campus="region") {
		map.setCenter(new GLatLng(41.44,-77.036133),9);
	}
}

function loadMarkers() {
	mgr.clearMarkers();
	showLabels("campus",4,19);
	$("#OptCallboxes:checked").each(function(){showLabels("callboxes",15,17);});
	$("#OptPolice:checked").each(function(){showLabels("police",15,17);});
	$("#OptBuildings:checked").each(function(){showLabels("buildings",15,17);});
	$("#OptHousing:checked").each(function(){showLabels("housing",15,17);});
	mgr.refresh();
}

function myclick(g,i) {
	GEvent.trigger(gmarkers[g][i],"click");
	map.setCenter(gmarkers[g][i].getLatLng());
}

function setTabs() {
	var mapCtrLat = map.getCenter().lat();
	var mapCtrLng = map.getCenter().lng();
	var mapBndN = map.getBounds().getNorthEast().lat();
	var mapBndS = map.getBounds().getSouthWest().lat();
	var mapBndE = map.getBounds().getNorthEast().lng();
	var mapBndW = map.getBounds().getSouthWest().lng();
	var campusCnt = 0
	var lastCampus = ""
	for (i=0;i<gmarkers["campus"].length;i++) {
		var mrkLat = gmarkers["campus"][i].getLatLng().lat();
		var mrkLng = gmarkers["campus"][i].getLatLng().lng();
		if ((mrkLng > mapBndW ) && (mrkLng < mapBndE) && (mrkLat > mapBndS) && (mrkLat < mapBndN)) {
			campusCnt += 1;
			lastCampus = i;
		}
	}
	// set all tabs to be inactive
	for (i=0;i<=gmarkers["campus"].length;i++) {
		$("#Tab"+i).attr("class", "inactiveTab");
	}
	// if 1 campus visible, set campus tab active
	if (campusCnt == 1) {
		$("#Tab"+lastCampus).attr("class", "activeTab");
	}
	// if >1 campus visible, set regional tab active
	if (campusCnt > 1) {
		$("#Tab"+gmarkers["campus"].length).attr("class", "activeTab");		
	}
	// If main campus detail is visible show legend and selectors
	if ((map.getZoom() >= 15 ) && ($("#Tab0").eq(0).attr("class") == "activeTab")) {
		$("#MapLegend").slideDown(200);
		setTimeout(resizeMap,200);
	} else {
		$("#MapLegend").slideUp(200);
		setTimeout(resizeMap,200);
	};
}

function showLabels(e,minZoom,maxZoom) {
	for (i=0;i<gmarkers[e].length;i++) {
		var thisMaxZoom = maxZoom;
		thisTitle = gmarkers[e][i].getTitle();
		if (thisTitle=="Main Campus") {thisMaxZoom = 14;}
		mgr.addMarker(gmarkers[e][i], minZoom, thisMaxZoom);
	}
}

function testBounds(e) {
	var mrkLat = e.getLatLng().lat();
	var mrkLng = e.getLatLng().lng();
	var mapBndN = map.getBounds().getNorthEast().lat();
	var mapBndS = map.getBounds().getSouthWest().lat();
	var mapBndE = map.getBounds().getNorthEast().lng();
	var mapBndW = map.getBounds().getSouthWest().lng();
	if ((mrkLng <= mapBndW ) || (mrkLng >= mapBndE) || (mrkLat <= mapBndS) || (mrkLat >= mapBndN)) {
		return false;
	}
	return true;
}

function resetOptions() {
	$("#OptBuildings").attr("checked","checked"); 
	$("#OptHousing").attr("checked","checked"); 
	$("#OptPolice").removeAttr("checked"); 
	$("#OptCallboxes").removeAttr("checked"); 
}

function setOptions(oldLevel,newLevel) {
	var mapOpts = $("input[name=mapOpts]");
	if (newLevel < 15 ) {mapOpts.attr("readonly","readonly").attr("disabled","disabled");} 
	else {mapOpts.removeAttr("readonly").removeAttr("disabled");};
}
//]]>