	OpenLayers.Bounds.prototype.union = function(olbIn){
		return new OpenLayers.Bounds(
			olbIn.left < this.left ? olbIn.left : this.left,
			olbIn.bottom < this.bottom ? olbIn.bottom : this.bottom,
			olbIn.right > this.right ? olbIn.right : this.right,
			olbIn.top > this.top ? olbIn.top : this.top
		);
	}

	var olbFWX = new OpenLayers.Bounds(-116, 40.5, -110, 46.5);

	var olbWFAS = new OpenLayers.Bounds(-131.5573655,  18.5155980, -62.3114030,  54.2704844);
	var olsWFAS = new OpenLayers.Size(2080, 1074);

//	var olbPIHifp = new OpenLayers.Bounds(-117.7075866, 40.1044458, -107.9853182,  47.3108213);
//	var olsPIHifp = new OpenLayers.Size(997,739);
//	var olbPIHifp = new OpenLayers.Bounds(-117.6615078,  39.9144105, -107.9609818,  47.1216286);
//	var olsPIHifp = new OpenLayers.Size(996,740);
	//var olbPIHifp = new OpenLayers.Bounds(-117.6832148,  40.1186204, -108.0020718,  47.1121625);
	//var olsPIHifp = new OpenLayers.Size(1005,726);
	var olbPIHifp = new OpenLayers.Bounds(-115.5,  41.5, -110.5,  46);
	var olsPIHifp = new OpenLayers.Size(623,519);

	var olsGIDB = new OpenLayers.Size(512,512);
	var olsUSGS = new OpenLayers.Size(256,256);
	
	function worldFileToBounds(strWF, intWidth, intHeight){
		var aryWF = strWF.split("\n");
		var i;
		if(!intWidth) intWidth = 600;
		if(!intHeight) intHeight = 550;
		for(i in aryWF) aryWF[i] = parseFloat(aryWF[i]);
//		alert(aryWF[0] + "\n" + aryWF[1] + "\n" + aryWF[2] + "\n" + aryWF[3] + "\n" + aryWF[4] + "\n" + aryWF[5] + "\n" + intWidth + "\n" + intHeight);
//		alert( ( aryWF[4] ) + ', ' + ( aryWF[5] + (aryWF[3] * intHeight) ) + ', ' + ( aryWF[4] + (aryWF[0] * intWidth) ) + ', ' + ( aryWF[5] ) )
		return new OpenLayers.Bounds(aryWF[4], aryWF[5] + (aryWF[3] * intHeight), aryWF[4] + (aryWF[0] * intWidth), aryWF[5]);
//		return new OpenLayers.Bounds(-115.635568778298, 45.8102787919478 + (-0.00985165682705964 * 550), -115.635568778298 + (0.00985165682705964 * 600), 45.8102787919478);
	}


	
	

//	var lyrBase = new OpenLayers.Layer.KaMap( "Base",
//		"http://www6.wrh.noaa.gov/ka-map/htdocs/tile.php", {map: "us", g: '__base__', i: 'jpeg'}, {tileSize: new OpenLayers.Size(200,200)});
//	objMap.addLayer(lyrBase);

// http://map.ngdc.noaa.gov/wmsconnector/com.esri.wms.Esrimap?BBOX=-130,25,-60,50&WIDTH=1024&HEIGHT=512&SRS=EPSG:4326&Layers=Shaded%20Relief&version=1.1.1&service=WMS&FORMAT=PNG&TRANSPARENT=TRUE&request=getmap&ServiceName=nosa
// http://wms.jpl.nasa.gov/wms.cgi?request=GetMap&layers=global_mosaic&srs=EPSG:4326&format=image/jpeg&styles=visual&width=512&height=512&bbox=-180,-166,76,90

	var lyrStdBase = new OpenLayers.Layer.WMS( "Base Map (USGS)",
		"http://igskmncngs056.cr.usgs.gov/wmsconnector/com.esri.wms.Esrimap/USGS_EDC_National_Atlas?",
		{layers: 'ATLAS_PARKWAYS_RIVERS,ATLAS_STREAMS_075,ATLAS_WATERBODIES_075,ATLAS_STREAMS_WATERBODIES_P,ATLAS_STREAMS_WATERBODIES_L,ATLAS_DAMS,ATLAS_RAILROAD,ATLAS_ROADS_INTERSTATE,ATLAS_ROADS_INTERSTATE_LABELS,ATLAS_STATES,ATLAS_COUNTIES_2001,ATLAS_CITIES,ATLAS_CITIES_LABELS', SRS: 'EPSG:4326', format: 'image/gif', transparent: 'TRUE', buffer: '1'},
		{isBaseLayer: true, opacity: 1.0, tileSize: olsUSGS}
	);
	
	var lyrRelief = new OpenLayers.Layer.WMS( "Shaded Relief",
		"http://igskmncngs056.cr.usgs.gov/wmsconnector/com.esri.wms.Esrimap/USGS_EDC_Elev_NED_3?",
		{layers: 'HR-NED.IMAGE', SRS: 'EPSG:4326', format: 'image/jpeg', buffer: '1'},
		{isBaseLayer: true, opacity: 0.8, tileSize: olsUSGS}
	);
	
	var lyrBaseNASA = new OpenLayers.Layer.WMS( "NASA Global Mosaic",
		"http://wms.jpl.nasa.gov/wms.cgi?",
		{layers: 'global_mosaic', SRS: 'EPSG:4326', format: 'image/jpeg', styles: '', buffer: 1},
		{tileSize: new OpenLayers.Size(512,512), displayOutsideMaxExtent: true}
	);
	
	var lyrBaseClear = new OpenLayers.Layer.Image(
		"None",
		'/pih/images/clear.gif',
		new OpenLayers.Bounds(-180,-90,180,90),
		new OpenLayers.Size(8, 8),
		{isBaseLayer: true}
	);

	var lyrBaseNWSPIH = new OpenLayers.Layer.Image(
		"PIH CWA Static Topo",
		'/images/mesowest/pih.png',
		new OpenLayers.Bounds(-115.293794, 41.302013, -111.045895, 45.547829),
		new OpenLayers.Size(1000, 1000),
		{isBaseLayer: true, maxResolution: 0.5, minResolution: 0.000001}
	);

	var lyrBaseNWS = new OpenLayers.Layer.TileCache("TileCache Layer",
		"/images/pih/maps/tiles/",
		"nwsbase",
		{
			'format': 'image/jpeg',
			maxResolution: 180/256,
			'numZoomLevels': 10
		}
	);


	var lyrBaseNC = new OpenLayers.Layer.WMS( "Base Map (nowCoast)",
		"http://www.wrh.noaa.gov/pih/arc2wms.php?",
		{service: 'nowcoast.noaa.gov/nowcoast', layers: 'fcst_pg_hsz,world_countries,us_canada_back,us_states_gen,world_rivers,rivers,world_lakes,lakes,us_interstates,major_roads,us_cities,urban_areas', SRS: 'EPSG:4326', format: 'image/gif', buffer: '1'},
		{isBaseLayer: true, tileSize: olsUSGS }
	);

/*
	var lyrBaseGM = new OpenLayers.Layer.WMS( "Base Map (GeoMAC)",
		"http://dev.wrh.noaa.gov/pih/arc2wms.php?",
		{service: 'www.geomac.gov/geomac', layers: '0,1,40,riv25mil,riv2mil,wb25mil,wb2mil,nhdlakeMed,nhdlakeHigh,8,st15mil,10,11,12,14,16,13,15,cit25mil,cit2mil', SRS: 'EPSG:4326', format: 'image/jpg', buffer: '1'},
		{isBaseLayer: true, tileSize: olsUSGS }
	);
*/
	var lyrBaseGM = new OpenLayers.Layer.WMS( "Base Map (GeoMAC)",
		"http://www.geomac.gov/wmsconnector/com.esri.wms.Esrimap?",
		{service: 'WMS', layers: 'shd_rel_gr,shd_rel_col,riv25mil,riv2mil,wb25mil,wb2mil,nhdlakeMed,nhdlakeHigh,8,st15mil,10,11,12,14,16,13,15,cit25mil,cit2mil', SRS: 'EPSG:4326', format: 'JPEG', buffer: '1'},
		{isBaseLayer: true, tileSize: olsUSGS, gutter: 1 }
	);


/*
	var lyrBaseWMS = new OpenLayers.Layer.WMS( "NOSA Shaded Relief",
		"http://map.ngdc.noaa.gov/wmsconnector/com.esri.wms.Esrimap?",
		{layers: 'Shaded Relief', SRS: 'EPSG:4326', ServiceName: 'nosa', format: 'PNG'}
	);
	objMap.addLayer(lyrBaseWMS);
*/


//	var lyrSat = new OpenLayers.Layer.KaMap( "Satellite",
//		"http://www6.wrh.noaa.gov/ka-map/htdocs/tile.php", {g: "Satellite", map: "us", i: "jpeg"}, {isBaseLayer: false, opacity: 0.7});
//	objMap.addLayer(lyrSat);

//	var lyrRad = new OpenLayers.Layer.KaMap( "Radar",
//		"http://www6.wrh.noaa.gov/ka-map/htdocs/tile.php", {g: "Radar", map: "us", i: "ALPHA"}, {isBaseLayer: false, opacity: 0.7});
//	objMap.addLayer(lyrRad);


//	var lyrSatImg = new OpenLayers.Layer.Image(
//		"Satellite Simple",
//		'http://www.ssd.noaa.gov/goes/west/weus/vis.jpg',
//		new OpenLayers.Bounds(-158.5, 23.6, -93.5, 53.2),
//		new OpenLayers.Size(720, 480),
//		{isBaseLayer: false, opacity: 0.5, visibility: false}
//	);
//	objMap.addLayer(lyrSatImg);


// *** PIH FWX Layers ***

	var fwxMinRes = (900/6)/1000000;
	var lyrBaseImg = new OpenLayers.Layer.Image( "Base Map (Image)",
		'/pih/maps/base.jpg',
		olbFWX,
		new OpenLayers.Size(900, 900),
		{isBaseLayer: true, opacity: 1.0, scales: [12500000, 6250000, 3125000, 1562500, 781250], units: 'degrees'}
	);

	var lyrNatlOverviewImg = new OpenLayers.Layer.Image( "Base Map (Image)",
		'/pih/maps/overview.jpg',
		new OpenLayers.Bounds(-126, 25, -65, 49),
		new OpenLayers.Size(488, 192),
		{isBaseLayer: true, opacity: 1.0, scales: [50000000, 25000000, 12500000, 6250000], units: 'degrees'}
	);

	var lyrFWXzones = new OpenLayers.Layer.Image( "FWX Zones",
		'/pih/maps/zones.png',
		olbFWX,
		new OpenLayers.Size(900, 900),
		{isBaseLayer: false, opacity: 0.6, maxResolution: 0.5, minResolution: 0.000001}
	);

	var lyrForests = new OpenLayers.Layer.Image( "National Forests",
		'/pih/maps/forest.png',
		olbFWX,
		new OpenLayers.Size(900, 900),
		{isBaseLayer: false, opacity: 0.6}
	);

	var lyrParks = new OpenLayers.Layer.Image( "National Parks",
		'/pih/maps/nps.png',
		olbFWX,
		new OpenLayers.Size(900, 900),
		{isBaseLayer: false, opacity: 0.6}
	);

	var lyrFWS = new OpenLayers.Layer.Image( "Fish and Wildlife Services",
		'/pih/maps/fws.png',
		olbFWX,
		new OpenLayers.Size(900, 900),
		{isBaseLayer: false, opacity: 0.6}
	);

	var lyrRAWS = new OpenLayers.Layer.Image( "RAWS Sites",
		'/pih/maps/raws.png',
		olbFWX,
		new OpenLayers.Size(900, 900),
		{isBaseLayer: false, opacity: 0.6}
	);



// http://columbo.nrlssc.navy.mil/ogcwms/servlet/WMSServlet/NOAA_nowCOAST_Maps.wms?BBOX=-130,30,-100,50&WIDTH=1024&HEIGHT=512&SRS=EPSG:4326&Layers=1:25&version=1.1.1&service=WMS&FORMAT=image/jpeg&request=getmap

	lyrMaxT = new OpenLayers.Layer.WMS( "High Temps",
		"http://columbo.nrlssc.navy.mil/ogcwms/servlet/WMSServlet/NOAA_nowCOAST_Maps.wms?",
		{layers: '3:55', SRS: 'EPSG:4326', format: 'image/png', transparent: 'TRUE', buffer: '1'},
		{visibility: false, isBaseLayer: false, opacity: 0.9, tileSize: olsGIDB }
	);

	lyrMinT = new OpenLayers.Layer.WMS( "Low Temps",
		"http://columbo.nrlssc.navy.mil/ogcwms/servlet/WMSServlet/NOAA_nowCOAST_Maps.wms?",
		{layers: '3:47', SRS: 'EPSG:4326', format: 'image/png', transparent: 'TRUE', buffer: '1'},
		{visibility: false, isBaseLayer: false, opacity: 0.9, tileSize: olsGIDB }
	);

	lyrWindBarb = new OpenLayers.Layer.WMS( "Winds",
		"http://columbo.nrlssc.navy.mil/ogcwms/servlet/WMSServlet/NOAA_nowCOAST_Maps.wms?",
		{layers: '3:141', SRS: 'EPSG:4326', format: 'image/png', transparent: 'TRUE', buffer: '1'},
		{visibility: false, isBaseLayer: false, opacity: 1.0, tileSize: olsGIDB}
	);

	lyrWindBarb = new OpenLayers.Layer.WMS( "Winds",
		"http://www.wrh.noaa.gov/pih/arc2wms.php?",
		{service: 'nowcoast.noaa.gov/ndfd', layers: 'NDFD_R#0_WIND_0_12_G01,NDFD_R#0_WIND_0_12_G05,NDFD_R#0_WIND_0_12_G10,NDFD_R#0_WIND_0_12_G15', SRS: 'EPSG:4326', format: 'image/png', transparent: 'TRUE', buffer: '1'},
		{visibility: false, isBaseLayer: false, opacity: 1.0, tileSize: olsUSGS }
	);

	lyrSatWMSGIDB = new OpenLayers.Layer.WMS( "Satellite",
		"http://columbo.nrlssc.navy.mil/ogcwms/servlet/WMSServlet/NOAA_nowCOAST_Maps.wms?",
		{layers: '4:25', SRS: 'EPSG:4326', buffer: '1'},
		{visibility: false, isBaseLayer: false, opacity: 0.9, tileSize: olsGIDB }
	);
	
	lyrSatWMS = new OpenLayers.Layer.WMS( "Satellite",
		"http://www.wrh.noaa.gov/pih/arc2wms.php?",
		{service: 'nowcoast.noaa.gov/nowcoast', layers: 'RAS_GOES', SRS: 'EPSG:4326', format: 'image/jpg', buffer: '1'},
		{visibility: false, isBaseLayer: false, opacity: 0.9, tileSize: olsUSGS, gutter: 1 }
	);

	lyrFirePerim = new OpenLayers.Layer.WMS( "Active Fire Perimiters",
		"http://www.wrh.noaa.gov/pih/arc2wms.php?",
		{service: 'www.geomac.gov/geomac', layers: 'actfire,actperim', SRS: 'EPSG:4326', format: 'image/png', transparent: 'TRUE', buffer: '1'},
		{visibility: false, isBaseLayer: false, opacity: 1.0, tileSize: olsUSGS }
	);

	lyrWWA = new OpenLayers.Layer.WMS( "WWA",
		"http://www.wrh.noaa.gov/pih/arc2wms.php?",
		{service: 'nhss.cr.usgs.gov/nat_haz', layers: 'weather_warnings', SRS: 'EPSG:4326', format: 'image/gif', transparent: 'TRUE', buffer: '1'},
		{visibility: false, isBaseLayer: false, opacity: 0.7, tileSize: olsUSGS }
	);

	lyrWWAImg = new OpenLayers.Layer.Image(
		"WWA",
		'http://forecast.weather.gov/wwamap/png/pih.png',
		new OpenLayers.Bounds(-116.65,40.66,-110.4,45.65),
		new OpenLayers.Size(354, 283),
		{isBaseLayer: false, opacity: 0.9, visibility: false, maxResolution: 0.5, minResolution: 0.000001}
	);

	lyrLIE = new OpenLayers.Layer.Image(
		"Lightning Ignition Efficiency",
		'http://www.wrh.noaa.gov/images/pih/maps/wfas/ltng_pi.gif.jpg',
		olbWFAS,
		olsWFAS,
		{isBaseLayer: false, opacity: 0.8, visibility: false, maxResolution: 0.5, minResolution: 0.000001}
	);

	lyrFM10 = new OpenLayers.Layer.Image(
        "Fuel Moisture (10hr)",
        'http://www.wrh.noaa.gov/images/pih/maps/wfas/fm_10.gif.jpg',
        olbWFAS,
        olsWFAS,
        {isBaseLayer: false, opacity: 0.8, visibility: false, maxResolution: 0.5, minResolution: 0.000001}
	);

	lyrFM1000 = new OpenLayers.Layer.Image(
        "Fuel Moisture (1000hr)",
        'http://www.wrh.noaa.gov/images/pih/maps/wfas/fm_1000.gif.jpg',
        olbWFAS,
        olsWFAS,
        {isBaseLayer: false, opacity: 0.8, visibility: false, maxResolution: 0.5, minResolution: 0.000001}
	);

	lyrGFE = new OpenLayers.Layer.Image(
		"Gridded Forecasts",
		'http://www.wrh.noaa.gov/images/pih/images/clear.gif',
		olbPIHifp,
		olsPIHifp,
		{isBaseLayer: false, opacity: 0.9, visibility: false, maxResolution: 0.5, minResolution: 0.000001}
	);

	var lyrRadWMSGIDB = new OpenLayers.Layer.WMS( "Radar (WMS)",
		"http://columbo.nrlssc.navy.mil/ogcwms/servlet/WMSServlet/NOAA_nowCOAST_Maps.wms?",
		{layers: '4:27', SRS: 'EPSG:4326', format: 'image/png', transparent: 'TRUE', buffer: '1'},
		{visibility: false, isBaseLayer: false, opacity: 0.7, tileSize: olsGIDB }
	);
//	objMap.addLayer(lyrRadWMS);
//	lyrRadWMS.setVisibility(false);

	lyrRadWMS = new OpenLayers.Layer.WMS( "Radar",
		"http://www.wrh.noaa.gov/pih/arc2wms.php?",
		{service: 'nowcoast.noaa.gov/nowcoast', layers: 'RAS_RIDGE_NEXRAD', SRS: 'EPSG:4326', format: 'image/png', transparent: 'TRUE', buffer: '1'},
		{visibility: false, isBaseLayer: false, opacity: 0.7, tileSize: olsUSGS }
	);

	lyrRadImgSFX = new OpenLayers.Layer.Image(
		"Radar (SFX)",
		'http://www.srh.weather.gov/ridge/RadarImg/N0R/SFX_N0R_0.gif',
		worldFileToBounds("0.00985165682705964\n0.000000\n0.000000\n-0.00985165682705964\n-115.635568778298\n45.8102787919478"),
		new OpenLayers.Size(600, 550),
		{isBaseLayer: false, opacity: 0.7, visibility: false, maxResolution: 0.5, minResolution: 0.000001}
	);

	lyrRadImgCBX = new OpenLayers.Layer.Image(
		"Radar (CBX)",
		'http://www.srh.weather.gov/ridge/RadarImg/N0R/CBX_N0R_0.gif',
		worldFileToBounds("0.0099141346324574\n0.000000\n0.000000\n-0.0099141346324574\n-119.203284482089\n46.2124310857599"),
		new OpenLayers.Size(600, 550),
		{isBaseLayer: false, opacity: 0.7, visibility: false, maxResolution: 0.5, minResolution: 0.000001}
	);

	lyrRadImgMTX = new OpenLayers.Layer.Image(
		"Radar (MTX)",
		'http://www.srh.weather.gov/ridge/RadarImg/N0R/MTX_N0R_0.gif',
		worldFileToBounds("0.00956895308061078\n0.000000\n0.000000\n-0.00956895308061078\n-115.312900043834\n43.8896781089089"),
		new OpenLayers.Size(600, 550),
		{isBaseLayer: false, opacity: 0.7, visibility: false, maxResolution: 0.5, minResolution: 0.000001}
	);

	lyrRadImgRIW = new OpenLayers.Layer.Image(
		"Radar (RIW)",
		'http://www.srh.weather.gov/ridge/RadarImg/N0R/RIW_N0R_0.gif',
		worldFileToBounds("0.00984522039240057\n0.000000\n0.000000\n-0.00984522039240057\n-111.425640883012\n45.7685148898038"),
		new OpenLayers.Size(600, 550),
		{isBaseLayer: false, opacity: 0.7, visibility: false, maxResolution: 0.5, minResolution: 0.000001}
	);


	var lyrRadImgMos = new OpenLayers.Layer.Image(
		"Radar (Mosaic)",
		'http://www6.wrh.noaa.gov/mapserver/data/radar/radar_animation.gif',
		worldFileToBounds("0.017971305190311\n0.000000000000000\n0.000000000000000\n-0.017971305190311\n-127.620375523875420\n50.406626367301044", 3400, 1600),
		new OpenLayers.Size(3400, 1600),
		{isBaseLayer: false, opacity: 0.7}
	);

// http://igskmncngs056.cr.usgs.gov/wmsconnector/com.esri.wms.Esrimap/USGS_EDC_National_Atlas?LAYERS=ATLAS_ROADS_INTERSTATE&FORMAT=image%2Fgif&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=-168.98985%2C-70.629932%2C-80.670448%2C17.68947&WIDTH=256&HEIGHT=256

	var lyrForestType = new OpenLayers.Layer.WMS( "Forest Cover Types",
		"http://igskmncngs056.cr.usgs.gov/wmsconnector/com.esri.wms.Esrimap/USGS_EDC_National_Atlas?",
		{layers: 'ATLAS_FOREST_COVER_TYPES', SRS: 'EPSG:4326', format: 'image/gif', transparent: 'TRUE', buffer: '1'},
		{isBaseLayer: false, opacity: 1.0, tileSize: olsUSGS}
	);

	var lyrFPI1 = new OpenLayers.Layer.WMS( "Fire Potential Index 1",
		"http://igskmncngs056.cr.usgs.gov/wmsconnector/com.esri.wms.Esrimap/USGS_IVMLite?",
		{layers: 'GREENNESS.GREENNESS_FPI_1.IMAGE', SRS: 'EPSG:4326', format: 'image/gif', transparent: 'TRUE', buffer: '1'},
		{isBaseLayer: false, opacity: 1.0, tileSize: olsUSGS}
	);

	var lyrPolit = new OpenLayers.Layer.WMS( "Political Boundaries",
		"http://igskmncngs056.cr.usgs.gov/wmsconnector/com.esri.wms.Esrimap/USGS_EDC_National_Atlas?",
		{layers: 'ATLAS_STATES,ATLAS_COUNTIES_2001,ATLAS_CITIES,ATLAS_CITIES_LABELS', SRS: 'EPSG:4326', format: 'image/gif', transparent: 'TRUE', buffer: '1'},
		{isBaseLayer: false, opacity: 1.0, tileSize: olsUSGS}
	);
	

	var lyrRoads = new OpenLayers.Layer.WMS( "Roads",
		"http://igskmncngs056.cr.usgs.gov/wmsconnector/com.esri.wms.Esrimap/USGS_EDC_National_Atlas?",
		{layers: 'ATLAS_ROADS_INTERSTATE,ATLAS_ROADS_PRIN_HIGHWAY,ATLAS_ROADS_INTERSTATE_LABELS', SRS: 'EPSG:4326', format: 'image/gif', transparent: 'TRUE', buffer: '1'},
		{isBaseLayer: false, opacity: 1.0, tileSize: olsUSGS}
	);
	
if(OpenLayers.blnLoadFWXLayers){ // loads automatically, so don't include where not needed.
	var lyrSTQs = new OpenLayers.Layer.Text( "Recent Spot Forecasts",
		{location: '/pih/maps/stq2OpenLayersCSV.php'}
	);

	var lyrStrikes = new OpenLayers.Layer.Text( "Lightning Strikes",
		{location: '/pih/maps/lightning.php?BBOX=-116,40.5,-110,46.5'}
	);
}
	lyrMWObs = new OpenLayers.Layer.Text( "MesoWest Observations",
		{location: '/pih/maps/mwOpenLayersList.php?extents=40.5,-110,46.5,-116'}
	);

	var lyrVector = new OpenLayers.Layer.Vector("Simple Geometry");
