// LayerPreferences.js

// Sticky user preferences facility

// This file contains a single global, the lp_LayerPreferred array, and various
// access functions.
// Thw lp_LayerPreferred [associative] array stores the selection/deselection
// history of classes and layers.
//
//   key: layer id
//   value: Object {boolean preferred; int index)

var lp_LayerPreferred = new Array();

function lp_clear()
{
	if (lp_LayerPreferred.length != 0)
	{
		lp_LayerPreferred.length = 0;
		setDefaultLayers();
		return true;
	}
	return false;
}

function lp_setLayerPref(layerId, preferred)
{
	var selectionObj = new Object;
	selectionObj.preferred = preferred;
	// other properties may be added to this object in the future
	// selectionObj.index = LayerPreferred.length;
	lp_LayerPreferred[layerId] = selectionObj;
}

function lp_setLayerPrefIfNull(layerId, preferred)
{
	if (lp_LayerPreferred[layerId] == null) {
		lp_setLayerPref(layerId, preferred);
	}
}

// setSoftLayerPref() is reserved for possible future use.
// Sets the preference only if it doesn't contradict a pre-existing preference.
// Otherwise, the pre-existing preference is nullified by the new preference.

function lp_setSoftLayerPref(index, preferred)
{
	var id = WmsLayerId[index];
		
	if ((lp_LayerPreferred[id] != null) &&
		(lp_LayerPreferred[id].preferred != preferred))
	{
		// If this is simply an inversion of a previous selection, chances
		// are the user doesn't intend this to be a strong preference.
		lp_LayerPreferred[id] = null;
	}
	else
	{
		setLayerPref(index, preferred);
	}
}			

function lp_initLayerPref(index, preferred)
{
	var id = WmsLayerId[index];
	if (lp_LayerPreferred[id] == null) 
	{	
		lp_setLayerPref(id, preferred);
	}
}			

// various settings can be overridden by LayerPreferred.

function lp_layerPrefOverride(layerId, defaultVal)
{
	if (lp_LayerPreferred[layerId] != null)
	{
		return lp_LayerPreferred[layerId].preferred;
	}
	else
	{
		return defaultVal;
	}
}

// appends layer ids onto two arrays; one for visible layers and one for hidden layers.

function lp_pushLayerPreferences(visLayers, hideLayers)
{
	for (var i in lp_LayerPreferred)
	{
		if (lp_LayerPreferred[i] != null)
		{
			if (lp_LayerPreferred[i].preferred)
			{
				visLayers.push(i);
			}
			else
			{
				hideLayers.push(i);
			}
		}
	}
}

// builds a comma-delimited list of layer ids for either visible (pref==true) or
// hidden (pref==false) layers.

function lp_getLayerListForPref(pref)
{
	var list = '';

	for (var i in lp_LayerPreferred)
	{
		if ((lp_LayerPreferred[i] != null) && (lp_LayerPreferred[i].preferred == pref))
		{
			list += i + ',';			
		}
	}
	
	return list;
}
