/** \class TeWMSLayer
  * \brief Models a GetCapabilities response from a WMS.
  *
  *
  * This class can be used to parse a Capabilities document from
  * a WMS server. An instance of this class is created when
  * you call GetCapabilities method from an instance of TeWMS (see GetCapabilities method of
  * TeWMS class).
  *
  * \sa TeWMS
  *
  */
function TeWMSLayer()
{
	var name_ = null;
	var title_ = null;
	var bbox_ = null;
	var layers_ = null;
	
	TeWMSLayer.prototype.getName = getName;
	TeWMSLayer.prototype.setName = setName;
	TeWMSLayer.prototype.getTitle = getTitle;
	TeWMSLayer.prototype.setTitle = setTitle;	
	//TeWMSLayer.prototype.getSRS = getSRS;
	//TeWMSLayer.prototype.setSRS = setSRS;
	TeWMSLayer.prototype.getBBox = getBBox;
	TeWMSLayer.prototype.setBBox = setBBox;
	TeWMSLayer.prototype.getLayers = getLayers;
	TeWMSLayer.prototype.setLayers = setLayers;
	TeWMSLayer.prototype.toString = toString;
	TeWMSLayer.prototype.toStringHTML = toStringHTML;
	TeWMSLayer.prototype.show = show;
	TeWMSLayer.prototype.readFromXML = readFromXML;

	function getName()
	{
		return this.name_;
	}

	function setName(name)
	{
		this.name_ = name;
		//alert(this.name_);
	}

	function getTitle()
	{
		return this.title_;
	}

	function setTitle(title)
	{
		//alert(title);
		this.title_ = title;
	}
	
	function getBBox()
	{
		return this.bbox_;
	}

	function setBBox(llx, lly, urx, ury)
	{		
		this.bbox_ = llx + "," + lly + ", " + urx + ", " + ury;
		//alert(this.bbox_);
	}
	
	function getLayers()
	{
		return this.layers_;
	}
	
	function setLayers(layers)
	{
		this.layers_ = layers;
	}

	function toString()
	{
		var message  = "Layer Name: ";
		    message += this.getName();
			message += "\n";
			message += "Layer Title: ";
			message += this.getTitle();
			message += "\n";
			message += "Layer BBOX: ";
			message += this.getBBox();
			message += "\n";			
			if(this.getLayers())
			{
				message += "Sub Layers: ";
				
				for(var i = 0; i < this.getLayers().length; ++i)
				{
					message += "\tSUB " + i + "\n\t";
					message += this.getLayers()[i].toString();					
				}
			}
			
		return message;
	}
	
	function toStringHTML(i)
	{
		var message  = "<table><tr><td>";
			//titulo = (titulo).replace(/\)/, "");
			//alert("|"+this.getTitle()+"|"+titulo+"|");
			message += "<input type='checkbox' onClick=setLayerForPlot('"+i+"');><font size='-4'>";
			//message += "Layer Name: ";
		    //message += this.getName();
			//message += "<br />";
			//message += "Layer Title: ";
			message += this.getTitle();
			message += "</td></tr></table>";
			//message += "Layer BBOX: ";
			//message += this.getBBox();
			//message += "<br />";
			if(this.getLayers())
			{
				//message += "Sub Layers: ";
				
				for(var i = 0; i < this.getLayers().length; ++i)
				{
					message += "SUB " + (i+1) + "<br />";
					message += this.getLayers()[i].toStringHTML(i+1);					
				}
			}
			
		return message;
	}
	
	function show()
	{
		alert(this.toString());
	}
	
	function readFromXML(xmlNode)
	{
		var numElements = xmlNode.childNodes.length;
		//alert(numElements+"|"+xmlNode.nodeName);
		for(var i = 0; i < numElements; ++i)
		{
			var item = xmlNode.childNodes[i];
			
			if(item.nodeName == "Name")
			{
				this.setName(item.firstChild.nodeValue);
			}
			else if(item.nodeName == "Title")
			{
				this.setTitle(item.firstChild.nodeValue);
			}
			else if(item.nodeName == "LatLonBoundingBox")
			{
				var llx = item.attributes.getNamedItem("minx").value;
				var lly = item.attributes.getNamedItem("miny").value;
				var urx = item.attributes.getNamedItem("maxx").value;
				var ury = item.attributes.getNamedItem("maxy").value;
					
				this.setBBox(llx, lly, urx, ury);
			}
			else if(!this.bbox_ && item.nodeName ==  "BoundingBox")
			{
				if(item.attributes.getNamedItem("SRS"))
				{
					if(item.attributes.getNamedItem("SRS").value == "EPSG:4326")
					{
						var llx = item.attributes.getNamedItem("minx").value;
						var lly = item.attributes.getNamedItem("miny").value;
						var urx = item.attributes.getNamedItem("maxx").value;
						var ury = item.attributes.getNamedItem("maxy").value;
							
						this.setBBox(llx, lly, urx, ury);
					}
				}
			}
			
			else if(item.nodeName == "Layer")
			{
				if(!this.layers_)
				{
					this.layers_ = new Array();
					var newlayer = new TeWMSLayer();
					newlayer.readFromXML(item);
					this.layers_[0] = newlayer;					
				}
				else
				{
					var newlayer = new TeWMSLayer();
					newlayer.readFromXML(item);
					
					this.layers_[this.layers_.length] = newlayer;					
				}
					
			}
		}
	}
}

