function Feature()
{
	var self = this;
	
	this.XmlReqDetails; // XMLHttpRequest object
	this.XmlReqIdentify; // XMLHttpRequest object
	
	// methods
	this.getIdentify = getIdentify;
	this.getFeatureDetails = getFeatureDetails;
	
	function getIdentify(x, y, dist)
	{
		var layerId;
		var spatialFilter;
		
		for( var i = 0; i < layerArray.length; i++ )
		{
			if( layerArray[i].LayerPosition == map.ActiveLayer )
			{
				layerId = layerArray[i].Name;
				break;
			}	
		}
		
		spatialFilter = new SpatialFilter();
		spatialFilter.Points = "";
		spatialFilter.Points += convertMapPoints(x, y);
		
		buffer = new Buffer();
		buffer.BufferUnits = map.Units;
		buffer.BufferDistance = dist;
		spatialFilter.Buffer = buffer;
		
		var str = spatialFilter.Points.split(",");
		var x = str[0];
		var y = str[1];
		
		url = server + "FeatureService.asmx/GetFeatureIdentify?x=" + x + "&y=" + y + "&distance=" + buffer.BufferDistance + "&layerId=" + layerId + "&userGroupName=" + user.userGroupName;
		self.XmlReqIdentify = new TXmlHttp();
		
		if(self.XmlReqIdentify)
		{
			self.XmlReqIdentify.onreadystatechange = processIdentify;
			self.XmlReqIdentify.open("GET", url, true); //async call
			self.XmlReqIdentify.send(null);
		}
	}

	function getFeatureDetails(layerId, objectIdValue)
	{
		url = server + "FeatureService.asmx/GetFeatureDetails?layerId=" + layerId + "&objectIdValue=" + objectIdValue + "&userGroupName=" + user.userGroupName;
		
		feature.XmlReqDetails = new TXmlHttp();
		
		if(feature.XmlReqDetails)
		{
			feature.XmlReqDetails.onreadystatechange = processFeatureDetail;
			feature.XmlReqDetails.open("GET", url, true); //async call
			feature.XmlReqDetails.send(null);
		}
	}
}