
/* Date management */
var dateList = new Array();
var dateListId = 0;
var activeDates = false;
var monthNames = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
var aMonths = new Array("1:Jan","2:Feb","3:Mar","4:Apr","5:May","6:Jun","7:Jul","8:Aug","9:Sep","10:Oct","11:Nov","12:Dec");
var aCalenderSeasons = new Array("3:Autumn","6:Winter","9:Spring","12:Summer");
var aGrowingSeasons = new Array("5:Winter","11:Summer"); // Start one month earlier
var aYearly = new Array("1:Jan");
var aGrowingYear = new Array("4:Apr");
var aFinancialYear = new Array("7:Jul");
var currentMonthList = aMonths;

function disableDates(greyOut)
{
	//Enable the data fields
	document.layerParams.startMonth.disabled = greyOut;
	document.layerParams.startYear.disabled = greyOut;
	document.layerParams.dateback.disabled = greyOut;
	document.layerParams.datefwd.disabled = greyOut;
}

var dateSelectorListId = -1;

function populateDates(layer_id) 
{
	var j = "" // Layer id ;
	var sDate = '';
	var eDate = '';
	//var dates = '';
	var theDate = muiMap.document.mapserv.data_date.value;
	var theDateSplit = theDate.split("/");
	var sy = theDateSplit[0]; // current start year selected
	var sm = theDateSplit[1];	// current start month selected
	var y = document.getElementById('startYear'); // Year form object
	var m = document.getElementById('startMonth'); // Month form object
	var found = false;
	var i = 0;
	var dateChange = false;
	var monthTimeFrame = 12; // Number of months in a month array value
	var smMonthGap = 12; // Used to adjust month to nearest value in list
	var smFromList = 0;  // The actual list month to use
	var j = 0;
	var x = 0;

	for (x = 0; x < dateListId ; x++)
	{
		if (dateList[x]['id'] == layer_id)
		{
			sDate = dateList[x]['sDate'];
			eDate = dateList[x]['eDate'];
			dateType = dateList[x]['dateType'];
			dateSelectorListId = x;
			found = true;
			//j = x;
			break;
		}
	}
	if (found)
	{
		disableDates(false);
		
		// OK, now check if the default dates fit the current analysis date range
		// Fix year
		if (sy > eDate.getFullYear()) 
		{
			dateChange = true;
			sy = eDate.getFullYear();
			sm = eDate.getMonth() + 1;
		}
		if (sy < sDate.getFullYear()) 
		{
			dateChange = true;
			sy = sDate.getFullYear();
			sm = sDate.getMonth() + 1;
		}

		// Fix month
		if (sy == sDate.getFullYear() && sm < (sDate.getMonth() + 1)) 
		{
			dateChange = true;
			sm = sDate.getMonth() + 1;
		}
		if (sy == eDate.getFullYear() && sm > (eDate.getMonth() + 1)) 
		{
			dateChange = true;
			sm = eDate.getMonth() + 1;
		}
	
		// What types of dates are we dealing with?
		switch (dateType)
		{
			case 'CS': // Calender season (3 months)
				currentMonthList = aCalenderSeasons;
				break;
			case 'GS': // growing season (6 months )
				currentMonthList = aGrowingSeasons;
				break;
			case 'GY': // Growing year 
				currentMonthList = aGrowingYear;
				break;
			case 'FY': // Growing year 
				currentMonthList = aFinancialYear;
				break;
			case 'CY': // Calender year
				currentMonthList = aYearly;
				break;
			case 'MO': // Monthly
				currentMonthList = aMonths;
				break;
			default:   // Default to monthly
				currentMonthList = aMonths;
		}

		// populate year selects
		if (y) 
		{
			y.options.length = 0;
			for (i = sDate.getFullYear(); i <= eDate.getFullYear(); i++) 
			{
				y.options.length = y.options.length+1;
				y[y.options.length-1].text = i;
				y[y.options.length-1].value = i;
				if (sy==i) {y[y.options.length-1].selected=1;}
			}
		}
	
		// populate month selects
		if (m)
		{
			m.options.length = 0;
			if (currentMonthList.length > 1)
			{
				// Get number of months in each month list item
				i = currentMonthList[0].split(":");
				j = currentMonthList[1].split(":");
				monthTimeFrame = j[0] - i[0];
			}
			for(var i=0; i < currentMonthList.length; i++) 
			{
				j = currentMonthList[i].split(":");
				//alert("j is "+j);
				m.options.length++;
				m[m.options.length-1].text = j[1];
				m[m.options.length-1].value = j[0];
				// Set as selected
				//if (sm==j[0]) {s[s.options.length-1].selected=1;}
				// Work out proximity of sm to value and record for later.  If the dates
				// Needed changing then we need to ensure we stay within the applicable
				// date range
				if ((Math.abs(sm - j[0])) < smMonthGap)
				{
					smMonthGap = Math.abs(sm - j[0]);
					smFromList = j[0] * 1; // Found a closer match
					if (sm <= (smFromList+monthTimeFrame))
						smMonthGap = 0; // Stop looking as we hit a period within sm
				}
			}
		}
		// Double check the dates haven't slipped out of range due to the 
		// proximity shifting above.  Will only have shifted by 1
		if (sy <= sDate.getFullYear() && smFromList < (sDate.getMonth() + 1)) 
		{
			dateChange = true;
			i = currentMonthList[currentMonthList.length-1].split(":");
			if (smFromList == i[0]) 
			{
				// Then we are at the end of the list
				i = currentMonthList[0].split(":");
				smFromList = i[0] * 1;
				sy = sy + 1; // Next year	
			}
			else
				smFromList = smFromList + monthTimeFrame; // Next option
		}
		if (sy >= eDate.getFullYear() && smFromList > (eDate.getMonth() + 1)) 
		{
			dateChange = true;
			i = currentMonthList[0].split(":");
			if (smFromList == i[0]) 
			{
				// Then we are already at the start of the year
				i = currentMonthList[currentMonthList.length-1].split(":");
				smFromList = i[0];
				sy = sy - 1; // Previous year	
			}
			else
				smFromList = smFromList - monthTimeFrame; // Previous option
		}
		
		// Set the dates in the drop down.  I must set the month to a 
		// value that actually exists especially since IE sets it blank
		// otherwise. Unlike Firefox which sets it to the 1st value in the list
		if (smFromList > 0)
			sm = smFromList; // Matched to nearest within range
		else
			sm = document.layerParams.startMonth[0].value; // Match on first in list
		
		document.layerParams.startMonth.value = sm;
		document.layerParams.startYear.value = sy;
		//alert('Set the month ['+sm+'] to'+document.layerParams.startMonth.value);
		//alert('Set the year ['+sy+'] to'+document.layerParams.startYear.value);

		// Set the back forward buttons
		var cDate = new Date();
		cDate.setFullYear(sy, sm-1, 1);
		cDate.setHours(12);cDate.setMinutes(0);cDate.setSeconds(0);
		if (cDate == dateList[dateSelectorListId].sDate)
			document.layerParams.dateback.disabled = true;
		if (cDate == dateList[dateSelectorListId].eDate)
			document.layerParams.datefwd.disabled = true;
			
		// Move dates in map form if required
		if (dateChange)
			setMapDate(sy, sm);

		// If only one month or season then disable
		if (currentMonthList.length == 1)
			document.layerParams.startMonth.disabled = true;
		else
			document.layerParams.startMonth.disabled = false;

	}
	else
	{
		//Disable the data fields
		dateSelectorListId = -1;
		disableDates(true);
	}
}

function newDateList()
{
	dateList = new Array();
	dateListId = 0;
}

function addDateList(layerId, layerName, sYear, sMonth, eYear, eMonth, dateType)
{
	var sDate = new Date();
	var eDate = new Date();
	sDate.setFullYear(sYear, sMonth -1, 1);
	sDate.setHours(0);sDate.setMinutes(0);
	eDate.setFullYear(eYear, eMonth -1, 1);
	eDate.setHours(23);eDate.setMinutes(59);
	dateList[dateListId] = new Array(5);
	dateList[dateListId]['id'] = layerId;
	dateList[dateListId]['name'] = layerName;
	dateList[dateListId]['sDate'] = sDate;
	dateList[dateListId]['eDate'] = eDate;
	dateList[dateListId]['dateType'] = dateType;
	dateListId = dateListId + 1;
}

function isTemporalAvailable(listId, year, month)
{
	var cDate = new Date();
	var ok = false;

	cDate.setFullYear(year, month-1, 1);
	cDate.setHours(12);cDate.setMinutes(0);

	/*alert('Comparing cDate['+cDate+']\nsDate['+dateList[listId].sDate+
	      ']\neDate['+dateList[listId].eDate+
	      ']\n ListId ['+listId+
	      '] Total dates ['+dateListId+']');*/
	if (cDate >= dateList[listId].sDate && cDate <= dateList[listId].eDate)
		ok = true;
	//alert('Date found for layer id '+dateList[listId]['id']+' set to '+ok);
	
	return ok;
}

function activateFields()
{
	muiForm = document.getElementById('layerParams');

	if (activeDates)
	{
		if(document.getElementById('startMonth'))
			muiForm.startMonth.disabled = false;
		if(document.getElementById('startYear'))
			muiForm.startYear.disabled = false;		
		if(document.getElementById('dateback'))
			muiForm.dateback.disabled = false;
		if(document.getElementById('datefwd'))
			muiForm.datefwd.disabled = false;
	}
	if(document.getElementById('submit'))
		muiForm.submit.disabled = false;
	if(document.getElementById('scalebar'))
		muiForm.scalebar.disabled = false;

	// Simon added Aug 10 2007	
	muiForm = document.getElementById('selectedRegion')
	if(document.getElementById('activeState'))
		muiForm.activeState.disabled = false;
	if(document.getElementById('activeRegionType'))
		muiForm.activeRegionType.disabled = false;
	if(document.getElementById('activeRegionId'))
		muiForm.activeRegionId.disabled = false;
	// -----			
				
	deactivateMUIControls(false);
	deactivateLayerControls(false);
}

function deactivateFields()
{
	var muiForm = document.getElementById('layerParams');

	if(document.getElementById('startMonth'))
		muiForm.startMonth.disabled = true;
	if(document.getElementById('startYear'))
		muiForm.startYear.disabled = true;
	if(document.getElementById('dateback'))
		muiForm.dateback.disabled = true;
	if(document.getElementById('datefwd'))
		muiForm.datefwd.disabled = true;
	if(document.getElementById('submit'))
		muiForm.submit.disabled = true;
	if(document.getElementById('scalebar'))
		muiForm.scalebar.disabled = true;
		
	deactivateMUIControls(true);
	deactivateLayerControls(true);
		
}

function isExclusiveLayer(layer_id)
{
	var y = 0;
	var	found = false;

	//alert('Comparing ['+exclusiveLayerList+'] to layer_id ['+layer_id+']');
	for (y = 0; y < exclusiveLayerList.length; y++)
	{
		//alert('Comparing ['+exclusiveLayerList[y]+'] to layer_id ['+layer_id+']');
		if (exclusiveLayerList[y] == layer_id)
		{
			//alert('found exclusive layer '+layer_id);
			found = true;
			break;
		}
	}
	
	return found;
}

// Copy the date to the muimap form then go through any dated fields which aren't
// in the exclusive list and disable them
// Changed to not disable as it prevents the layer being used unless another
// layer is selected with data within the date range.  It also keeps the 
// deactivateLayerControls function simplier.
function setMapDate(year, month)
{
	var x = 0;
	var y = 0;
	var	inExclusive = false;
	
	// Set in the map form
	muiMap.document.mapserv.data_date.value = year+"/"+month;
	
	// Now activate any checkboxes within the date range of available data
	for (x = 0; x < dateListId ; x++)
	{
		inExclusive = isExclusiveLayer(dateList[x]['id']);
		
		if (inExclusive == false)
		{
			layer = document.getElementById('layer_id_'+dateList[x]['id']);
			if (layer)
				layer.disabled = false;
		}
		else
		{
			//alert('Examining date list id '+x+' for a total of '+dateListId+' records');
			if (isTemporalAvailable(x, year, month))
			{
				layer = document.getElementById('layer_id_'+dateList[x]['id']);
				if (layer)
				{
					//alert('Enabling layer');
					layer.disabled = false;
				}
			}
			else
			{
				layer = document.getElementById('layer_id_'+dateList[x]['id']);
				if (layer)
				{
					layer.checked = false;
					//setLayerList(dateList[x]['id'], layer);
					//layer.disabled = true;
				}
			}
		}
	}
}

function dateShift(forward)
{
	var month = document.layerParams.startMonth.value * 1;
	var year = document.layerParams.startYear.value * 1;
	var mmax = 0
	var mmin = 0
	var newMonth = 0;
	var newYear = 0;
	var periodLen = 1;
	
	//alert('I want to move the dates forward = '+forward);
	if (dateSelectorListId > -1)
	{

		if (currentMonthList.length > 1)
			periodLen = currentMonthList[1].split(":")[0] - currentMonthList[0].split(":")[0];

		if (forward)
		{
			// Go forwards in time
			if (currentMonthList.length == 1)
			{
				// Year only increase
				newYear = year + 1;
				newMonth = currentMonthList[0].split(":")[0];
			}
			else
			{
				mmax = currentMonthList[currentMonthList.length-1].split(":");
				if (month < mmax[0])
				{
					// Move forward to next period in same year
					newYear = year;
					newMonth = month + periodLen;
				}
				else
				{
					// Next year
					newYear = year + 1;
					newMonth = currentMonthList[0].split(":")[0];
				}
			}
		}
		else
		{
			// Go back in time
			if (currentMonthList.length == 1)
			{
				// Year only decrease
				newYear = year - 1;
				newMonth = currentMonthList[0].split(":")[0];
			}
			else
			{
				mmin = currentMonthList[0].split(":");
				if (month > mmin[0])
				{
					// Move back to next period in same year
					newYear = year;
					newMonth = month - periodLen;
				}
				else
				{
					// Previous year
					newYear = year - 1;
					newMonth = currentMonthList[currentMonthList.length-1].split(":")[0];
				}
			}
		}

			
		if (isTemporalAvailable(dateSelectorListId, newYear, newMonth))
		{
			// All good
			document.layerParams.startMonth.value = newMonth;
			document.layerParams.startYear.value = newYear;
			setMapDate(newYear, newMonth);
			submitMUIMap();
		}	
		else
			alert('Please select a date within the available date range');

	}
}

// And the reverse
function setMUIDate()
{
	var theDate = muiMap.document.mapserv.data_date.value;
	var theDateSplit = theDate.split("/");
	
	document.layerParams.startMonth.value = theDateSplit[1];
	document.layerParams.startYear.value = theDateSplit[0];
	// And set back again to fire off layer activation
	setMapDate(theDateSplit[0],theDateSplit[1]);
}

// Set the date display for the layer if applicable then adjust the date range in the drop
// down boxed to suite if required
function setTheDate(layer_id)
{
	var found = false;
	var x = 0;
	var lName = "";
	var sDate = "";
	var eDate = "";
	var sDateStr = "";
	var eDateStr = "";
	
	for (x = 0; x < dateListId ; x++)
	{
		if (dateList[x]['id'] == layer_id)
		{
			found = true;
			lName = dateList[x]['name'];
			sDate = dateList[x]['sDate'];
			eDate = dateList[x]['eDate'];
			sDateStr = monthNames[sDate.getMonth()]+'/'+sDate.getFullYear();
			eDateStr = monthNames[eDate.getMonth()]+'/'+eDate.getFullYear();
			break;
		}
	}
	if (found)
		writeXLayer('dateRange', '<strong>'+lName+'</strong> data from <strong>'+sDateStr+'</strong> to <strong>'+eDateStr+'</strong>');
	else
		writeXLayer('dateRange', '&nbsp;<br/>&nbsp;');
	//populateDates(layer_id);
}

function checkDate()
{
	var month = document.layerParams.startMonth.value;
	var year = document.layerParams.startYear.value;

	if (dateSelectorListId > -1)
	{
		if (isTemporalAvailable(dateSelectorListId, year, month))
			return true
		else
		{
			alert('Please select a date within the available date range');
			return false;
		}
	}
	else
		return true;
}

resetCount = 0;

function submitMUIMap()
{
	//try
	//{
		if (checkDate())
		{
			deactivateFields();
			changeFunction('redraw');		
		}
	//}
	//catch (e)
	//{
	//	resetCount = resetCount + 1;
	//	//alert("Error occured counter set to "+resetCount);
	//	if (resetCount > 1)
	//		document.location = 'index.cfm?fa=mui.run&reset=true';
	//	else if (resetCount > 0)
	//		muiMap.document.location = 'index.cfm?fa=mui.redrawMap&stage=init&cmd=reset';
	//}
}

// Toggle the scalebar on and off
function switchScalebar()
{
	if (document.layerParams.scalebar.checked == true)
		muiMap.document.mapserv.scalebar.value = "true";
	else
		muiMap.document.mapserv.scalebar.value = "false";
		
	return true;
}

// Turn on a list of layers checkbox values.  Make sure all the rest are turned off
function switchLayersOn(layerList, invisibleLayerList)
{
	var i = 0;
	var x = 0;
	var splitLayerList = layerList.split(",");
	var splitInvLayerList = invisibleLayerList.split(",");
	var dateLayer = -1;
	var element = "";

	for(i=0; i<document.layerParams.elements.length; i++)
	{
		//alert('The field name is: ' + document.layerParams.elements[i].name + ' and its value is: ' + document.layerParams.elements[i].value);
		if (document.layerParams.elements[i].name == 'layer_id_radio' 
		    ||document.layerParams.elements[i].name == 'layer_id_checkbox')
		{
			document.layerParams.elements[i].checked = false;
			element = "li_"+document.layerParams.elements[i].id;
			document.getElementById(element).style.display = 'block';
			for (x = 0; x < splitLayerList.length; x++)
			{
				if (splitLayerList[x] == document.layerParams.elements[i].value)
				{
					document.layerParams.elements[i].checked = true;
					//setTheDate(splitLayerList[x]);
					//alert ('Checking layer' + splitLayerList[x]);
					if (isExclusiveLayer(splitLayerList[x]))
					{
						dateLayer = splitLayerList[x];
						//alert('set layer to ' + dateLayer);
					}
				}
			}
			// Hide the layers that are outside of the current scale 
			// How do I deal with grouped layers. In the muiengine
			for (x = 0; x < splitInvLayerList.length; x++)
			{
				if (splitInvLayerList[x] == document.layerParams.elements[i].value)
				{
					element = "li_layer_id_"+splitInvLayerList[x];
					document.getElementById(element).style.display = 'none';
					// Turn off layer as it can't be seen and don't want to confuse the end user
					// No use just doing this.  Will have to work out something smarter
					//document.layerParams.elements[i].checked = false;
				}
			}
		}
	}
	//alert('Switch dates on for layer' + dateLayer);
	if (dateLayer >= 0)
	{
		setTheDate(dateLayer);
		populateDates(dateLayer);
	}
}

// Generic array processing function
function deleteFromArray(oldArray , item)
{
	var x = 0;
	var newArray = new Array();
	
	for (x = 0; x < oldArray.length; x++)
	{
		if (oldArray[x] != item)
			newArray[newArray.length] = oldArray[x];
	}
	
	return newArray;
	
}

var exclusiveLayerList = new Array(1);
	
// Set the list of exclusive layers
function setExclusiveList(layerList)
{
	exclusiveLayerList = layerList.split(",");
}

// Put the layer ticked into the list of layers in the muimap form
function setLayerList(layer_id, layerField)
{
	var found = false;
	var isExclusive = false;
	var isChecked = layerField.checked;
	var x = 0;
	var layerList = muiMap.document.mapserv.layer_ids;
	var splitLayerList = layerList.value.split(",");
	
	//alert('Clicked on layer id '+layer_id+'\nComparing to '+splitLayerList);
	// Look to see if it exists in list of layers
	for (x = 0; x < splitLayerList.length; x++)
	{
		if (splitLayerList[x] == layer_id)
		{
			found = true;
			break;
		}
	}
	//alert('Found = '+found+' Checked = '+isChecked+' for ID '+layer_id);

	//alert('Looking for '+layer_id+' in list ['+exclusiveLayerList.toString()+']');
	isExclusive = isExclusiveLayer(layer_id);
	
	// To handle radio button being clicked when already on to turn back off
	if (found && isExclusive)
	{
		isChecked = false;
		layerField.checked = isChecked;
	}
	
	// Add or remove if required
	if (!found && isChecked)
		splitLayerList[splitLayerList.length] = layer_id;
	else if (found && !isChecked)
		splitLayerList = deleteFromArray(splitLayerList , layer_id);
		
	// Remove others that are in exclusive list
	if (isExclusive)
	{
		//alert('Looking for exclusive layers to strip out');
		for (x = 0; x < exclusiveLayerList.length; x++)
		{
			if (exclusiveLayerList[x] != layer_id)
				splitLayerList = deleteFromArray(splitLayerList , exclusiveLayerList[x]);
		}
	}
	
	if (splitLayerList.length == 1)
		layerList.value = splitLayerList[0];
	else
		layerList.value = splitLayerList.toString();
	
	// Now that we have adjusted the layer list we fix the date to match the available data
	// and the date range in the date selector
	//if (isExclusive)
	//{
		setTheDate(layer_id);
		populateDates(layer_id);
	//}
}

function muiShowHide(element, action)
{
	if (action == 'hide')
		document.getElementById(element).style.display = 'none';
	else if (action == 'show')
		document.getElementById(element).style.display = 'block';
	else
	{
		if (document.getElementById(element).style.display == 'none')
			document.getElementById(element).style.display = 'block';
		else
			document.getElementById(element).style.display = 'none';
	}
}

function muiLoadParams(layerId)
{
	//alert('Display label controls for layer ' + layerId);
	muiShowHide('rhBoxLegend','hide');
	muiShowHide('rhBoxParams','show');
	
	muiParams.document.muiLayerParams.paramAction.value = 'init';
	muiParams.document.muiLayerParams.layerId.value = layerId;
	muiParams.document.muiLayerParams.submit();
}

function muiLayerEnable(layerId)
{
	//alert('Turn layer on for layer id ' + layerId);
	document.getElementById('layer_id_' + layerId).disabled = false;
	//muiShowHide('rhBoxLegend','show');
	//muiShowHide('rhBoxParams','hide');
}

function muiHideBorder(funcName)
{
	elementId = document.getElementById(funcName);
	if (elementId != null)
		elementId.style.border = '0px';
}

function muiShowBorder(funcName)
{
	var elementId = null;
	elementId = document.getElementById(funcName);
	if (elementId != null)
		elementId.style.border = '1px solid Teal';
}

function deactivateMUIControls(switchOff)
{
	var elementId = null;
	//alert('Set all MUI controls to disabled = '+switchOff);
	elementId = document.getElementById('mui_zoom_rect');
	if (elementId != null) elementId.disable = switchOff;
	elementId = document.getElementById('mui_zoom_out');
	if (elementId != null) elementId.disable = switchOff;
	elementId = document.getElementById('mui_move');
	if (elementId != null) elementId.disable = switchOff;
	elementId = document.getElementById('mui_max_extent');
	if (elementId != null) elementId.disable = switchOff;
	elementId = document.getElementById('mui_orig_extent');
	if (elementId != null) elementId.disable = switchOff;
	elementId = document.getElementById('mui_redraw');
	if (elementId != null) elementId.disable = switchOff;
	elementId = document.getElementById('mui_region_selection');
	if (elementId != null) elementId.disable = switchOff;
	elementId = document.getElementById('mui_region_search');
	if (elementId != null) elementId.disable = switchOff;
	elementId = document.getElementById('mui_region_select');
	if (elementId != null) elementId.disable = switchOff;
	elementId = document.getElementById('mui_print');
	if (elementId != null) elementId.disable = switchOff;
	elementId = document.getElementById('mui_query_point');
	if (elementId != null) elementId.disable = switchOff;

	//if (switchOff)
	//{
	//	//alert("Setting to 170 x 30");
	//	document.getElementById("mapToolsLock").style.width = 170;
	//	document.getElementById("mapToolsLock").style.height = 30;
	//}
	//else
	//{
	//	//alert("Setting to 1 x 1");
	//	document.getElementById("mapToolsLock").style.width = 1;
	//	document.getElementById("mapToolsLock").style.height = 1;
	//}

}

// Same as for MUI controls.  Deactivate while MUI is doing something
function deactivateLayerControls(switchOff)
{
	var i = 0;

	if (document.layerParams) // Normal
	{
		for(i=0; i<document.layerParams.elements.length; i++)
		{
			if (document.layerParams.elements[i].name == 'layer_id_radio' 
			    ||document.layerParams.elements[i].name == 'layer_id_checkbox')
				document.layerParams.elements[i].disabled = switchOff;
		}
	}
}

var muiSearchLocation='';

function changeFunction(funcName, fixMap)
{
	var scale = 0;
	var minscale = 0;
	
	if (arguments.length == 1) fixMap = true; // If 2nd param not provided then set default
	
	//alert("muiControls: Changing function to " + funcName + " with fixMap as "+fixMap);

	// Clear all the borders
	if (funcName == 'search')
	{
		if (muiSearchLocation == '')
			muiSearchLocation=dhtmlmodal.open("muiSearch", "iframe", "index.cfm?fa=mui.gs", "Search", "width=500px,height=350px,resize=0,scrolling=0,center=1");
		else
			muiSearchLocation.show();
		//Run custom code when window is being closed (return false to cancel action):
		//muiSearchLocation.onclose=function(){ return window.confirm("Close search ?")	}
		return;
	}
	else
	{
		muiHideBorder('mui_zoom_rect');
		muiHideBorder('mui_zoom_out');
		muiHideBorder('mui_move');
		muiHideBorder('mui_max_extent');
		muiHideBorder('mui_orig_extent');
		muiHideBorder('mui_redraw');
		muiHideBorder('mui_region_selection');
		muiHideBorder('mui_region_search');
		muiHideBorder('mui_region_select');
		muiHideBorder('mui_print');
		muiHideBorder('mui_query_point');
		muiHideBorder('mui_search');

		// Removed as it fires at wrong time
		/*
		if (funcName == 'zoom_rect' && muiMap.document.mapserv)
		{
			scale = muiMap.document.mapserv.scale.value;
			minscale = muiMap.document.mapserv.minscale.value;
			if (Math.round(scale) < minscale)
			{
				alert('You are already zoomed in as far as allowed');
				funcName = 'zoom_out'; // Change to zoom out
			}
		}
		*/
		
		// Set the selected one on
		muiShowBorder('mui_'+funcName);

		if (fixMap)
			top.muiMap.ChangeFunctionality(funcName);
	}
	// Move the focus away
	if (top.muiOVMap)
		top.muiOVMap.focus();
	
}

function metaDataWindow(url)
{
	var width = 500;
	var height = 500;
	var leftPos = (screen.width / 2) - (width / 2)
	var topPos = (screen.height / 2) - (height / 2)
	
	windowURL = 'index.cfm?fa=metadata.load&page='+url;
	windowName = 'MetaData';
	windowFeatures = 'top='+topPos+',left='+leftPos+',width='+width+',height='+height+',toolbar=0,location=0,directories=0,status=0,menuBar=0,scrollBars=1,resizable=0';
	MetaData = window.top.open( windowURL, windowName, windowFeatures, 0 );
	MetaData.focus();
	return false;
}

//Display the lat and long to the user
function writeLatLong(latitude, longitude)
{
	writeXLayer('latlonginfobar',
	            'Lat:'+top.muiMap.formatFloat(latitude,3)+
	            ' ,Long:'+top.muiMap.formatFloat(longitude,3));	
}

function writeLegend(html)
{
	writeXLayer('legendHighlight',html);
}

// writes html to a div
function writeXLayer(layerID,txt) 
{
	if (document.getElementById) 
	{
		if (document.getElementById(layerID))
			document.getElementById(layerID).innerHTML=txt;
	} 
	else if (document.all) 
	{
		if (document.all[layerID])
			document.all[layerID].innerHTML=txt;
	} 
	else if (document.layers || 1) 
	{
		if (document.layers[layerID])
		{
			with (document.layers[layerID].document) 
			{
		  	open();
		    write(txt);
		    close();
			}
		}
	}
}

function goRegionSelector(action)
{
	top.muiMap.loadmap();
	document.selectedRegion.regionSelectorEvent.value = action;
	//alert(action);
	document.selectedRegion.submit();
}

