/**
 * aimsLayers.js
 * 
 * Functions and variables for manipulating the map layers.
 */

var layerList;				// Array of Layer Objects
var ActiveLayerIndex = 0;	// Gives the index number of the active Layer.
var ActiveLayer="";			// The id of the active layer.
var ActiveLayerType="";		// The Layer type of the active layer.
var activeLayerObj;  		// Points to the currently active Layer object.

var LayerListOpen=false;	// If the Layer List is visible in the viewer.
var queryOpen = false;		// If the Query window is visible on the viewer.


/* Adds the given layer object to the layerList */
function addLayerObj(inLayer){
	if (!layerList){
		layerList = new Array();
	}
	
	inLayer.index = layerList.length
	layerList.push(inLayer);
	inLayer.init();
}

function setActiveLayer(lyrIndex){
	ActiveLayerIndex = lyrIndex;
	ActiveLayer = layerList[lyrIndex].id;
	ActiveLayerType = layerList[lyrIndex].type;
	activeLayerObj = layerList[lyrIndex];
	//clearIdRequest();
}

function setDefaultActiveLayer(){
	var lyr = getLayerById(defaultActiveLayer);
	if (lyr) setActiveLayer(lyr.index);
	else setActiveLayer(0);
}

function getActiveLayer(){
	return layerList[ActiveLayerIndex];
}

function getLayerById(inID){
	for(var i=0; i<layerList.length; i++){
		if (layerList[i].id == inID)
			return layerList[i];
	}
	return null;
}

function getLayerByName(inName){
	for(var i=0; i<layerList.length; i++){
		if (layerList[i].name == inName)
			return layerList[i];
	}
	return null;
}

function getLayerByIndex(inIndex){
	if (0 <= inIndex && inIndex < layerList.length)
		return layerList[inIndex];
	
	return null;
}

/** Processes layer information from a GET_SERVICE_INFO response **/
function getLayersXML(xmlDoc){
	var currLayer;

	var fieldCount = 0;
	layerCount = 0;
	
	var layerNodes;
	var layerMinX=0;
	var layerMinY=0;
	var layerMaxX=0;
	var layerMaxY=0;
	
	if(debug=='layer') alert("Processing LayerInfo");
	layerNodes = xmlDoc.getElementsByTagName("LAYERINFO");
			
	for (var i=0; i<layerNodes.length; i++) 
	{
		currLayer = new Layer();
		currLayer.name = layerNodes[i].getAttribute("name");
		currLayer.id = layerNodes[i].getAttribute("id");
		if (currLayer.id == null) currLayer.id = currLayer.name;
				
		currLayer.type = layerNodes[i].getAttribute("type");
		if (currLayer.type == "featureclass") currLayer.isFeature = true;
		else currLayer.isFeature = false;
		
		var isVisible = layerNodes[i].getAttribute("visible");
		if (isVisible == "true") currLayer.isVisible = true;
		else currLayer.isVisible = false;
		if (userLocation.layerStartsOn(currLayer.id)) { currLayer.isVisible = true; }
		
		currLayer.minScale = layerNodes[i].getAttribute("minscale");
		if(currLayer.minScale == null) currLayer.minScale = 0;
		
		currLayer.maxScale = layerNodes[i].getAttribute("maxscale");
		if (currLayer.maxScale == null) currLayer.maxScale = 1.7976931348623157E308;
		
		if (currLayer.isFeature) {
			var fclassNode = layerNodes[i].getElementsByTagName("FCLASS")[0];
			currLayer.type = fclassNode.getAttribute("type");
		}
			
		currLayer.extent = getEnvelopeFromXML(layerNodes[i]);
		
		/** If field names are included in the response **/
		var fieldNodes = layerNodes[i].getElementsByTagName("FIELD");
		var currField;
		for (var j=0; j<fieldNodes.length; j++){
			currField = new Field();
			currField.name = fieldNodes[j].getAttribute("name");
			currField.type = fieldNodes[j].getAttribute("type");
			if (currField.type == "-99") currField.isId = true;
			if (currField.type == "-98") currField.isShape = true;
			currField.size = fieldNodes[j].getAttribute("size");
			currField.precision = fieldNodes[j].getAttribute("precision");
			currLayer.addField(currField);
		}
		addLayerObj(currLayer)
	}
	
	setDefaultActiveLayer();
	
	if (debug) debugMsg("Processed " + layerList.length + " Layers");
		
	return false;
}

