	//global variable for progress window
	var progressWindow = null;
	//Global variable that can be used by the context handling functions 
	var clickedPixel; 
	var contextmenu = null;
	var map = null;
	var g_qqGridFlag;
	var g_100kGridFlag
	
function mainFcn()
{
  if (GBrowserIsCompatible()) 
  {

	//global variable for progress window
	progressWindow = new OverlayMessage(document.getElementById('container'));
	//global variable for shift key press detection
	shiftOn = false; 
	//Global variable that can be used by the context handling functions 
	clickedPixel; 
	
	document.checkboxform.qqgrid.checked = true;
	document.checkboxform.hundredkgrid.checked = true;
	g_qqGridFlag = true;
	g_100kGridFlag = true;
	
	map = new GMap2(document.getElementById("map"));
		
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
	map.setCenter(new GLatLng(30.5,-90.5), 7);
	
	map.getMapTypes().length = 0;

	updateMapOverlay("NC2008");
			
	// === create the context menu div ===
    contextmenu = document.createElement("div");
    contextmenu.style.visibility="hidden";
    contextmenu.style.background="#ffffff";
    contextmenu.style.border="1px solid #8888FF";

    var pagecontents = '<style type="text/css">'
							+ 'A:link {color:#0000FF}'
							+ 'A:visited {color:#0000FF}'
							+ 'A:active {color:#0000FF}'
							+ 'A:hover {color:#0000FF}'
							+ '</style>'  
							+ '<a href="javascript:saveDOQ()"><div>&nbsp;&nbsp;Save MrSid 1:24k Quad&nbsp;&nbsp;</div></a>'
							+ '<a href="javascript:saveGrid()"><div>&nbsp;&nbsp;Save MrSid 1:100k Group&nbsp;&nbsp;</div></a>';
						  
	contextmenu.innerHTML = pagecontents;
	   
    map.getContainer().appendChild(contextmenu);
	
	// add listener for panning the map
	GEvent.addListener(map,"movestart",function() 
	{
		// hide the context menu now that it has been used
		contextmenu.style.visibility="hidden";
	});
			
	// add listener for map type changed
	GEvent.addListener(map,"maptypechanged",function() 
	{
		// hide the context menu now that it has been used
		contextmenu.style.visibility="hidden";
	});
			
    // === listen for singlerightclick ===
    GEvent.addListener(map,"singlerightclick",function(pixel,tile) 
	{
		// store the "pixel" info in case we need it later
		// adjust the context menu location if near an egde
		// create a GControlPosition
		// apply it to the context menu, and make the context menu visible
		clickedPixel = pixel;
		var x=pixel.x;
		var y=pixel.y;
						  
		if (x > map.getSize().width - 120) { x = map.getSize().width - 120 }
		if (y > map.getSize().height - 100) { y = map.getSize().height - 100 }
		var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(x,y));  
		pos.apply(contextmenu);
		contextmenu.style.visibility = "visible";
    });
	GEvent.addListener(map, "mouseout", function(latlngpos) 
	{ 
		contextmenu.style.visibility = "hidden";
	});	
	  
	
    // === If the user clicks on the map, close the context menu ===
    GEvent.addListener(map, "click", function(overlay, latlngpos,latlngoverlay) 
	{	
		contextmenu.style.visibility="hidden";		
    });
}
}
	
	function goToADM()
	{
		alert("You will be prompted to accept a security certificate to use\n the advanced download manager."
				+ "You MUST accept\n this certificate in order for the manager to work.");
		window.location = encodeURI("2008doqqS.html");
	}
	
	function customWmsUrl(a,b,c) 
	{
		var lULP = new GPoint(a.x*256,(a.y+1)*256);
		var lLRP = new GPoint((a.x+1)*256,a.y*256);
		var lUL = G_NORMAL_MAP.getProjection().fromPixelToLatLng(lULP,b,c);
		var lLR = G_NORMAL_MAP.getProjection().fromPixelToLatLng(lLRP,b,c);
		var lBbox=lUL.x+","+lUL.y+","+lLR.x+","+lLR.y;
					
		var lURL=this.myBaseURL;
		lURL+="&REQUEST=GetMap";
		lURL+="&SERVICE=WMS";
		lURL+="&VERSION=1.1.1";
		lURL+="&LAYERS="+this.myLayers;
		lURL+="&STYLES=";
		lURL+="&FORMAT=image/png";
		lURL+="&SRS=EPSG:4326";
		lURL+="&BBOX="+lBbox;
		lURL+="&BGCOLOR=0xFFFFFF";
		lURL+="&TRANSPARENT=TRUE";
		lURL+="&WIDTH=256";
		lURL+="&HEIGHT=256";
		lURL+="&reaspect=false";;
		return lURL;
	}

	function changeGrids(isEnabled, gridName)
	{
		if (gridName == "qqgrid")
		{
			g_qqGridFlag = isEnabled;
		}
		if (gridName == "hundredkgrid")
		{
			g_100kGridFlag = isEnabled;
		}
		
		var index = document.selectform.Maps.selectedIndex;
		updateMapOverlay(document.selectform.Maps[index].value);
	}
	
	function addGridsToMap()
	{		
		var myCopyright2 = new GCopyrightCollection("");
		myCopyright2.addCopyright(new GCopyright(1,
		new GLatLngBounds(new GLatLng(-90,-180), new GLatLng(90,180)),
		0,'Data Provided by USGS'));
	
		//make QQ layer
		var grid6k= new GTileLayer(myCopyright2,1,17);
		grid6k.myBaseURL='http://nwrcmap.cr.usgs.gov/cgi-bin/mapserv.exe?map=maps/la2008doqq.map';
		grid6k.myLayers='qq_grid';
		grid6k.getTileUrl=customWmsUrl;
		grid6k.isPng = function(){return true;};
		
		//make usgs 100k grid layer
		var grid100k= new GTileLayer(myCopyright2,1,17);
		grid100k.myBaseURL='http://nwrcmap.cr.usgs.gov/cgi-bin/mapserv.exe?map=maps/la2008doqq.map';
		grid100k.myLayers='hundredk_grid';
		grid100k.getTileUrl=customWmsUrl;
		grid100k.isPng = function(){return true;};
		
		if (g_qqGridFlag)
			map.addOverlay(new GTileLayerOverlay(grid6k));
		if (g_100kGridFlag)
			map.addOverlay(new GTileLayerOverlay(grid100k));
	}
		
	function updateOverlayFromForm(mySelection)
	{
		//get selected name
		var myIndex = mySelection.selectedIndex;
		var mapName = mySelection.options[myIndex].value;
		updateMapOverlay(mapName);
	}
	  
	function updateMapOverlay(mapType)
	{	
		//define overlays
		
		var myCopyright = new GCopyrightCollection("");
		myCopyright.addCopyright(new GCopyright(2,
		new GLatLngBounds(new GLatLng(-90,-180), new GLatLng(90,180)),
		0,'Data Provided by USGS'));

		//load 2008 NC
		var NC2008Layer= new GTileLayer(myCopyright,1,17);
		NC2008Layer.myBaseURL='http://nwrcgis.cr.usgs.gov/ArcGIS/services/LA_DOQQS/MapServer/WMSServer?';
		NC2008Layer.getTileUrl=customWmsUrl;
		NC2008Layer.myLayers='2';
		NC2008Layer.isPng = function(){return true;};
		
		//load 2008 CIR
		var CIR2008Layer= new GTileLayer(myCopyright,1,17);
		CIR2008Layer.myBaseURL='http://nwrcgis.cr.usgs.gov/ArcGIS/services/LA_DOQQS/MapServer/WMSServer?';
		CIR2008Layer.getTileUrl=customWmsUrl;
		CIR2008Layer.myLayers='3';
		CIR2008Layer.isPng = function(){return true;};
		
		//clear overlays
		map.clearOverlays();
		
		var index = document.selectform.Maps.selectedIndex;
		if (document.selectform.Maps[index].value == "CIR2008")
		{
			map.addOverlay(new GTileLayerOverlay(CIR2008Layer));
			addGridsToMap();
			return;
		}
		if (document.selectform.Maps[index].value == "NC2008")
		{	
			map.addOverlay(new GTileLayerOverlay(NC2008Layer));
			addGridsToMap();
			return;
		}
		if (document.selectform.Maps[index].value == "NONE")
		{	
			addGridsToMap();
			return;
		}
	}
	  
	function saveDOQ() 
	{
		// hide the context menu now that it has been used
		contextmenu.style.visibility="hidden";
		progressWindow.Set('Looking up File Name...');
		var BBOX = getQueryBoundingBox(clickedPixel);
		var myUrl = getUrlFromWMS(BBOX, clickedPixel, "qq_grid");
		GDownloadUrl(myUrl, function(data){
			var xmlDoc = GXml.parse(data);
			var nameArray = xmlDoc.documentElement.getElementsByTagName("LA12KNUM");
			var filename = GXml.value(nameArray[0]);
			if (filename.length > 1)
			{
				var index = document.selectform.Maps.selectedIndex;
				if (document.selectform.Maps[index].value == "CIR2008")
					window.location = encodeURI("mrsid_quad/CIR/"+filename+".zip");
				if (document.selectform.Maps[index].value == "NC2008")
					window.location = encodeURI("mrsid_quad/NC/"+filename+".zip");
				if (document.selectform.Maps[index].value == "NONE")
				{
				}
			}
			
			progressWindow.Clear();
		});
	}
	function saveGrid() 
	{
		// hide the context menu now that it has been used
		contextmenu.style.visibility="hidden";
		progressWindow.Set('Looking up File Name...');
		var BBOX = getQueryBoundingBox(clickedPixel);
		var myUrl = getUrlFromWMS(BBOX, clickedPixel, "hundredk_grid");
		GDownloadUrl(myUrl, function(data){
			var xmlDoc = GXml.parse(data);
			var nameArray = xmlDoc.documentElement.getElementsByTagName("QUADNAME");
			var filename = GXml.value(nameArray[0]);
			filename = filename.toUpperCase();
			
			if (filename.length > 1)
			{
				var index = document.selectform.Maps.selectedIndex;
				if (document.selectform.Maps[index].value == "CIR2008")
					window.location = encodeURI("mrsid_100k/CIR/"+filename+".zip");

				if (document.selectform.Maps[index].value == "NC2008")
					window.location = encodeURI("mrsid_100k/NC/"+filename+".zip");
				if (document.selectform.Maps[index].value == "NONE")
				{
				}
			}
			
			progressWindow.Clear();
		});
    }
	function getQueryBoundingBox(_pixel)
	{
		var ULPixel = new GPoint(0,0);
		var LRPixel = new GPoint(map.getSize().width-1,map.getSize().height-1);
		var ULPoint = map.fromContainerPixelToLatLng(ULPixel);
		var LRPoint = map.fromContainerPixelToLatLng(LRPixel);

		var lBbox=ULPoint.lng()+","+LRPoint.lat()+","+LRPoint.lng()+","+ULPoint.lat();		
		
		return lBbox;
	}
	function getUrlFromWMS(bbox, _pixel, layer)
	{
		var url = "queryims.aspx?QUERY_LAYERS="+layer+"&LAYERS="+layer+"&X="
					+_pixel.x+"&Y="+_pixel.y+"&WIDTH="+document.getElementById("map").offsetWidth
					+"&HEIGHT="+document.getElementById("map").offsetHeight+"&SRS=EPSG:4326&BBOX="+bbox;			
		return url;
	}