function IMS2_TaskGaz(id){
	var self = this;
	
	this.id = id;
	this.type = "gaz";
    this.currentIndex = 1;
    this.isActive = false;
    this.xmlReq;
    this.suggest = null;
    this.fields = new Array();
    
    function Render(){
					
		var html = "";
		
		html += "<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">";
		html += "<tr class=\"task\" onmousedown=\"IMS2_Tasks.ActivateTask('" + self.id + "');\" onmouseover=\"this.className='taskOver';\" onmouseout=\"this.className='task';\"><td>Quick Find</td>";
		html += "<td style=\"font-size:xx-small;\" align=\"right\" width=\"35\" onmouseover=\"event.cancelBubble='true';\" onmouseout=\"event.cancelBubble='true';\"><img src=\"images/tasks/close.gif\" onmousedown=\"IMS2_Tasks.Remove(" + self.id + ");event.cancelBubble='true';\" onmouseover=\"this.src='images/tasks/close-over.gif';event.cancelBubble='true';\" onmouseout=\"this.src='images/tasks/close.gif';event.cancelBubble='true';\"/></td></tr>";
		html += "</table>";						
		
		html += "<div id=\"_task_" + self.id + "_pages\" style=\"display:none;\">"
		html += "<div id=\"_task_" + self.id + "_page_1\" class=\"taskPage\">";
		html += "<table width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">";
		html += "<tr><td class=\"wizLarge\">Step 1:  Select a Layer to Search</td></tr>";
		html += "<tr><td class=\"wizSmall\">&nbsp;</td></tr>";
		html += "<tr><td class=\"wizSmall\"><select onchange=\"IMS2_Tasks.Get('" + self.id + "').ShowSearchFields(this.value,'" + self.id + "');\" style=\"width:100%;border:solid 1px #cccccc;\" id=\"" + self.id + "_page_1_select\" size=\"1\"/>";
		html += "<option value=\"\"></option>";
		
		//add layers for gaz
		var maps = IMS2_MapManager.maps;
		var layers = maps[0].layers.layers;
		for(var i = 0; i < layers.length; i++){
			if(layers[i].type == "FeatureClass" && layers[i].useGaz == "True")
				html += "<option value=\"" + layers[i].id + "\">" + layers[i].name + "</option>";
		}
		html += "</select></td></tr>";
		
		html += "<table width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">";
		html += "<tr><td class=\"wizSmall\"></td>";
		html += "<td class=\"wizSmall\"><input class=\"textButton\" onmouseover=\"this.className='textButtonOver';\" onmouseout=\"this.className='textButton';\" type=\"button\" value=\"Next &#187;\" onclick=\"IMS2_Tasks.Get('" + self.id + "').GetNextPage();\"></td></tr>";
		html += "</table>";
		html += "</table>";
		html += "</div>";
		
		html += "<div id=\"_task_" + self.id + "_page_2\" class=\"taskPage\">";
		html += "<table width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">";
		html += "<tr><td class=\"wizLarge\">Step 2:  Fill in Search Criteria</td></tr>";
		html += "<tr><td class=\"wizSmall\"><div id=\"_task_" + self.id + "_fields\"></div>";
		html += "</td></tr>";
		html += "<tr><td class=\"wizSmall\">";
		html += "<table width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">";
		html += "<tr><td class=\"wizSmall\"><input type=\"button\" class=\"textButton\" onmouseover=\"this.className='textButtonOver';\" onmouseout=\"this.className='textButton';\" value=\"&#171; Prev\" onclick=\"IMS2_Tasks.Get('" + self.id + "').GetPreviousPage();\"></td>";
		html += "<td class=\"wizSmall\"><input type=\"button\" value=\"Clear Form\" class=\"textButton\" onmouseover=\"this.className='textButtonOver';\" onmouseout=\"this.className='textButton';\" onclick=\"IMS2_Tasks.Get('" + self.id + "').ClearForm();document.getElementById('suggestDiv').style.display='none';\"></td>";
		html += "<td class=\"wizSmall\"><input type=\"button\" value=\"Finish\" class=\"textButton\" onmouseover=\"this.className='textButtonOver';\" onmouseout=\"this.className='textButton';\" onclick=\"IMS2_Tasks.Get('" + self.id + "').ExecuteGaz('" + self.id + "');document.getElementById('suggestDiv').style.display='none';\"></td></tr>";
		html += "</table>";
		html += "</table>";
		html += "</div>";
		html += "</div>";
		
		return(html);
	}
	this.Render = Render;
	
    function GetNextPage(){
        var curpage = document.getElementById("_task_" + self.id + "_page_" + self.currentIndex);
        var nextpage = document.getElementById("_task_" + self.id + "_page_" + ( parseInt(self.currentIndex) + 1 ) );
        if(curpage && nextpage){
			curpage.style.display = "none";
			nextpage.style.display = "block";
			self.currentIndex ++;
        }        
    }    
    this.GetNextPage = GetNextPage;
    
    function GetPreviousPage(){
        var curpage = document.getElementById("_task_" + self.id + "_page_" + self.currentIndex);
        var prevpage = document.getElementById("_task_" + self.id + "_page_" + ( parseInt(self.currentIndex) - 1 ) );
        if(curpage && prevpage){
			curpage.style.display = "none";
			prevpage.style.display = "block";
			self.currentIndex = self.currentIndex - 1;
        }        
    }
    this.GetPreviousPage = GetPreviousPage;
    
    function ClearForm(){
		var div = document.getElementById("_task_" + self.id + "_page_2");
		for (var i = 0; i < div.getElementsByTagName("input").length; i++)
		{
			var el = div.getElementsByTagName("input")[i];
			if(el.getAttribute("type") == "text")
			{
				el.value = "";
			}
		}
    }
    this.ClearForm = ClearForm;    
    
    //query layer with user criteria from gaz
    function ExecuteGaz(id){
		var mapctl = ((IMS2_MapManager)?(IMS2_MapManager.GetMap("MapControl1")):(null));
		if(null == mapctl){
			return;
		}

		var layerid = document.getElementById(id + "_page_1_select").value;
		var elem = document.getElementById("_task_" + id + "_fields");
		var q = "";
		var layer = mapctl.layers.Get(layerid);
		//for(var i = 0; i < layer.fieldsCollection.fields.length; i++){
		for(var i = 0; i < self.fields.length; i++){
			var val = document.getElementById("_task_" + id + "_fields_" + i).value;
			if(val && val != ""){
				var f = layer.fieldsCollection.Get(self.fields[i]);
				
				if(f.type == 1 || f.type == 12 || f.type == 14){
					//val = "'" + val + "'"
					q += "UPPER(" + f.name + ") like UPPER('" + val + "') AND ";
				}
				else
				{
					q += f.name + " = " + val + " AND ";
				}
			}
		}
		
		//Remove last " AND "
		q = q.substr(0,q.length - 5);
			
		mapctl.DataQueryLayer(q,layerid,false);
		mapctl.RequestSelectedFeaturesDrill2(layerid);
		
		//close the gaz task
		//IMS2_Tasks.Remove(self.id);						
	}
	this.ExecuteGaz = ExecuteGaz;
	
	
	//get fields to use in gaz
	function ShowSearchFields(layer,id){
		
		self.fields.length = 0;				
		elem = document.getElementById("_task_" + id + "_fields");
		
		IMS2_Status.ShowStatus(parseInt(findPos(document.getElementById("_task_" + self.id + "_pages"))[1]),parseInt(findPos(document.getElementById("_task_" + self.id + "_pages"))[0]),"Retrieving Fields...");
		
		var html = "<table>";
		var maps = IMS2_MapManager.maps;
		var layer = maps[0].layers.Get(layer);
		layer.GetFields();
		var j = 0;
		for(var i = 0; i < layer.fieldsCollection.fields.length; i++){
			if(layer.fieldsCollection.fields[i].useGaz == "True"){
				html += "<tr><td class=\"wizSmall\" align=\"left\">" + layer.fieldsCollection.fields[i].alias + ": </td><td class=\"wizSmall\">";
				html += "<input id=\"_task_" + id + "_fields_" + j + "\" type=\"text\" size=\"14\"";
				html += " onchange=\"document.getElementById('suggestDiv').style.display='none';\" onfocus=\"IMS2_Suggest.boxfocus=1;\"";
				html += " onblur=\"IMS2_Suggest.boxfocus=0; IMS2_Suggest.HideSuggest();\"";
				html += " onkeyup=\"IMS2_Suggest.getSuggest=true;IMS2_Suggest.preVal=this.value;IMS2_Suggest.layerid='" + layer.id + "';";
				html += "IMS2_Suggest.fieldName='" + layer.fieldsCollection.fields[i].name + "';setInterval('IMS2_Suggest.Check()',500);";
				html += "IMS2_Suggest.inputElem=this;//IMS2_Suggest.GetSuggestions('" + layer.id + "','" + layer.fieldsCollection.fields[i].name + "',this.value);";
				html += "IMS2_Suggest.MoveFocus(IMS2_isMSIE()?(event):(event));\">";
				html += "</td></tr>";
				self.fields[self.fields.length] = layer.fieldsCollection.fields[i].name;
				j++;
			}
		}
		html += "</table>";
		//alert(html);
		elem.innerHTML = html;
		IMS2_Status.HideStatus();
	}
	this.ShowSearchFields = ShowSearchFields;
	
//	function ShowSearchFields_old(layer,id){
//		
//		self.fields.length = 0;				
//		elem = document.getElementById("_task_" + id + "_fields");
//		
//		IMS2_Status.ShowStatus(parseInt(findPos(document.getElementById("_task_" + self.id + "_pages"))[1]),parseInt(findPos(document.getElementById("_task_" + self.id + "_pages"))[0]),"Retrieving Fields...");
//		
//		var html = "<table>";
//		var maps = IMS2_MapManager.maps;
//		var layer = maps[0].layers.Get(layer);
//		layer.GetFields();
//		var j = 0;
//		for(var i = 0; i < layer.fieldsCollection.fields.length; i++){
//			if(layer.fieldsCollection.fields[i].useGaz == "True"){
//				html += "<tr><td class=\"wizSmall\" align=\"left\">" + layer.fieldsCollection.fields[i].alias + ": </td><td class=\"wizSmall\">";
//				html += "<input id=\"_task_" + id + "_fields_" + j + "\" onchange=\"IMS2_Tasks.Get('" + id + "').GetSuggestions(this,'" + layer.id + "','" + layer.fieldsCollection.fields[i].name + "',this.value);\" onkeyup=\"IMS2_Tasks.Get('" + id + "').GetSuggestions(this,'" + layer.id + "','" + layer.fieldsCollection.fields[i].name + "',this.value);\" type=\"text\"></td></tr>";
//				self.fields[self.fields.length] = layer.fieldsCollection.fields[i].name;
//				j++;
//			}
//		}
//		html += "</table>";
//		//alert(html);
//		elem.innerHTML = html;
//		IMS2_Status.HideStatus();
//	}
//	this.ShowSearchFields_old = ShowSearchFields_old;
	
	function ToggleInfoDisplay(){
        var element = document.getElementById("_task_" + self.id + "_pages");
        if(element){  
            element.style.display == "none"  ? element.style.display = "block" : element.style.display = "none";
            element.childNodes[self.currentIndex - 1].style.display = element.style.display;
            element.style.display == "none"  ? self.isActive = "false" : self.isActive = "true";
        }
    }    
    this.ToggleInfoDisplay = ToggleInfoDisplay;
    
    //get search suggestions from server - ims2_suggest
    function GetSuggestions(elem,layerid,fieldname,sug){		
		
		var mapctl = ((IMS2_MapManager)?(IMS2_MapManager.GetMap("MapControl1")):(null));
		if(!mapctl){
			return;
		}
		if(elem.value == "" || mapctl.layers.Get(layerid).dynamic || elem.value.length < 3)
			return;
		var requestMade = false;
	        
		self.xmlReq = IMS2_createXMLHTTPRequest();
		self.suggest = elem;
		
		if(self.xmlReq){
			var url = "webservice.asmx/GetSuggest";
			self.xmlReq.onreadystatechange = ProcessGetSuggestions;
			self.xmlReq.open("POST", url, false);//synchronous call
			self.xmlReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
			self.xmlReq.send("servicename=" + mapctl.mapdatasource + "&layerid=" + layerid + "&fieldname=" + fieldname + "&sug=" + sug);
			requestMade = true;
		}
		return(requestMade);
	}
	this.GetSuggestions = GetSuggestions;

	function ProcessGetSuggestions(){
        if(self.xmlReq){
            if( self.xmlReq.readyState == 4 )
		    {
			    if( self.xmlReq.status == 200 )
			    {
			        if(self.xmlReq.responseXML.normalize){
			            self.xmlReq.responseXML.normalize();
			        }
			        var root = self.xmlReq.responseXML.documentElement;   
			        
			        if(!root.childNodes[0]){
			            //self.featureResultSet = null;
			        }else{
						var data = null;
						var html = "<table width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">";
						var div = document.getElementById("suggestDiv");
			            try{
		                    eval("data = " + root.childNodes[0].nodeValue + ";");
		                    for(var i = 0; i < data.length; i++){
								html += "<tr onmouseover=\"this.style.backgroundColor='#cccccc';\" onmouseout=\"this.style.backgroundColor='#ffffff';\"><td onmousedown=\"document.getElementById('" + self.suggest.id + "').value='" + data[i] + "';document.getElementById('suggestDiv').style.display='none';\">" + data[i] + "</td></tr>";
		                    }
		                    html += "</table>";
		                    
		                    div.innerHTML = html;
		                    div.style.left = findPos(self.suggest)[0];
		                    div.style.top = parseInt(findPos(self.suggest)[1]) + 22 + "px";
		                    div.style.display = "block";
		            
		                }catch(e){
		                    ;
		                }
			        }
			    }else{
			        alert("Connection error: " + self.xmlReq.status + "\n" + self.xmlReq.statusText + "\n" + self.xmlReq.responseText);
			    }
			    try{
			        self.xmlReq.abort();
			    }catch(e){;}
			    self.xmlReq = null;
			    //self.UpdateLoadingFeedback();
			}
        }
    }
    this.ProcessGetSuggestions = ProcessGetSuggestions;
}		
