function StructureAddress(address, city, zip, x, y){
	//alert("StructureAddress: " + address + "," + city + "," +   zip + "," +  x + "," +  y);
	this.address = address;
	this.city = city;
	this.zip = zip; 
	this.x = x;
	this.y = y;
	this.point = new esri.geometry.Point(x,y, new esri.SpatialReference({ wkid: 2248 }));
}

function structAddrDialogInit(functionName) { 
	//alert("got to structAddrDialogInit" + functionName);
	YAHOO.namespace("structAddr.container");
	// Define various event handlers for Dialog
	var structAddrSubmit = function() {
		var data = this.getData();
		if (data.structAddr == "") {
			alert("Please enter a valid address.");
		} 
		else {
			functionName().apply;
		}
	}
	var structAddrCancel = function() {
		document.getElementById('structAddrMessage').innerHTML = "Enter an Address below and click \"Submit\".";
		document.getElementById('structAddr').value = ""
		this.cancel();
	};
	
	var structAddrSuccess = function(o) {
		document.getElementById('structAddr').value = "";
		document.getElementById('addr').value = "";
		document.getElementById('city').value = "";	
		document.getElementById('zip').value = "";
		document.getElementById('x').value = "";
		document.getElementById('y').value = "";
	};
	
	var structAddrFailure = function(o) {
		alert("Submission failed: " + o.status);
	};

	// Instantiate the Dialog
	document.getElementById("structAddrDialog").style.display="block";
	YAHOO.structAddr.container.structAddrDialog = new YAHOO.widget.Dialog("structAddrDialog", 
							{ width : "30em",
							  fixedcenter : true,
							  visible : false, 
							  zindex: 100,
							  close: true,
							  modal:true,
							  effect:{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.15},
							  constraintoviewport : true,
							  buttons : [ { text:"Submit", handler:structAddrSubmit },
									  { text:"Cancel", handler:structAddrCancel } ]
							});
		

	// Wire up the success and failure handlers
	YAHOO.structAddr.container.structAddrDialog.callback = { success: structAddrSuccess,
							 failure: structAddrFailure };
	
	// Render the Dialog
	YAHOO.structAddr.container.structAddrDialog.render();

	//Structure Address Results Dialog
	YAHOO.namespace("structAddrResults.container");

	// Instantiate the Dialog
	document.getElementById("structAddrResultsDialog").style.display="block";
	YAHOO.structAddrResults.container.structAddrResultsDialog = new YAHOO.widget.Dialog("structAddrResultsDialog", 
							{ width : "30em",
							  fixedcenter : true,
							  visible : false, 
							  zindex: 100,
							  modal:true,
							  close: true,
							  effect:{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.15},
							  constraintoviewport : true
							});
			
	
	// Render the Dialog
	YAHOO.structAddrResults.container.structAddrResultsDialog.render();
}

function structAddrQuery(functionName, functionNameText) {
	//alert("got to structAddrQuery" + document.getElementById('addr').value + ":" + functionName);
	YAHOO.structAddr.container.structAddrDialog.hide();
	saQuery = new Query("http://gis-world.aacounty.org/ArcGIS/rest/services/MyAA/MapServer/0", ["ADDRESS","POST_CITY","ZIP_CODE","X_COORD","Y_COORD"]);
	saQuery.query.where =   "ADDRESS = '" + document.getElementById('addr').value + "' and ZIP_CODE = '" + document.getElementById('zip').value + "'";
	dojo.connect(saQuery.queryTask, "onComplete", function(results){
		getStructAddrResults(results,functionName,functionNameText);
	});
	saQuery.executeQuery();
}

function getStructAddrResults(results, functionName, functionNameText){
	//alert("Results:" + results.features.length + ":" + functionName);
	if (results.features.length == 1){
		var resultSet = processStructAddr(results);
		structureAddressMapped = new StructureAddress(document.getElementById('addr').value,document.getElementById('city').value,document.getElementById('zip').value, resultSet.x, resultSet.y);
		functionName().apply;
	}
	else if (results.features.length > 1){
			formattedResults = formatStructAddr(results);
			 var formatUrl = function(elCell, oRecord, oColumn, sData) {  
					elCell.innerHTML = "<a href='javascript:structureAddressMapped = new StructureAddress(\"" + oRecord.getData('address') + "\",\"" + oRecord.getData('city') + "\"," + oRecord.getData('zip') + "," +  oRecord.getData('x') + "," + oRecord.getData('y') + "); " + functionNameText + "(); '>" + sData + "</a>";
			};  

			 var myColumnDefs = [   
					 {key:"address", label:"Address",sortable:true, resizeable:false,width:225,formatter:formatUrl}, 
					 {key:"city", label:"City",sortable:true, resizeable:false,width:75},
					 {key:"zip", label:"Zip Code",sortable:true, resizeable:false,width:50},
					 {key:"x", hidden:true},
					 {key:"y", hidden:true}
				 ];   
		   
				var myDataSource = new YAHOO.util.DataSource(formattedResults);   
				myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;   
				myDataSource.responseSchema = {    fields: ["address","city","zip","x","y"]   };    
				var myDataTable = new YAHOO.widget.ScrollingDataTable("structAddrResults",   myColumnDefs, myDataSource, {height:"13em"});   
				document.getElementById('structAddrResultsMessage').innerHTML = "\"" + document.getElementById('addr').value +  "\" could not be uniquely identified.<br> Please select from the results listed below:";
				YAHOO.structAddrResults.container.structAddrResultsDialog.show();
				document.getElementById('structAddr').value = "";
				document.getElementById('addr').value = "";
				document.getElementById('city').value = "";
				document.getElementById('zip').value = "";
				 return {  oDS: myDataSource,   oDT: myDataTable  };
	}
	else {
		document.getElementById('structAddrMessage').innerHTML = "Address Not Found!";
		YAHOO.structAddr.container.structAddrDialog.show();
		return false;
	}
}


function processStructAddr(results) {
	var featureAttributes = results.features[0].attributes;
	var x, y, address, city, zip;
	var structAddr = [];
	
 	for (att in featureAttributes) {
		if (att == "ADDRESS"){
			address = featureAttributes[att];
		} 	
		else if (att == "POST_CITY"){
			city = featureAttributes[att];
		} 	
		else if (att == "ZIP_CODE"){
			zip = featureAttributes[att];
		} 	
 		else if (att == "X_COORD"){
			x = featureAttributes[att];
		}
		else if (att == "Y_COORD"){
			y = featureAttributes[att];
		}
 	}
 	var structAddr = {address:address, city:city, zip:zip, x:x, y:y};
 	return structAddr;
} 	
		
function formatStructAddr(results) {
	var structAddr = [];

	function dataSort(a,b) {
		//alert("datasort:" + a.from  + ":" + b.from );
		return (a.zip  - b.zip);
	}

	for (var i=0, il=results.features.length; i<il; i++) {
	    var x = 0;
		var y = 0;
		var city = "";
		var  zip = 0;
		  
		var featureAttributes = results.features[i].attributes;
			
			for (att in featureAttributes) {
				if (att == "ADDRESS"){
					address = featureAttributes[att];
				} 	
				else if (att == "POST_CITY"){
					city = featureAttributes[att];
				} 	
				else if (att == "ZIP_CODE"){
					zip = featureAttributes[att];
				} 	
				else if (att == "X_COORD"){
					x = featureAttributes[att];
				}
				else if (att == "Y_COORD"){
					y = featureAttributes[att];
				}

				if (x > 0 && y > 0 && city != "" && zip > 0){ 	
 					var structAddrData= {address:address, city:city, zip:zip, x:x, y:y};
					structAddr.push(structAddrData);
				}
			}
	}
    if (structAddr.length == 0){
    	return "none";
    }
    else{
    	structAddr.sort(dataSort); 
    	return structAddr;
    }
}

//Auto-Complete
LookupByStructure = function (form, searchInput, searchCont) {
		var options_loadAutoComplete = {
			server:'http://aacoprod.aacounty.org/AACOUtils/getStructureAddress.do',
			param:"name",
			animVert:true,
			animHoriz:false,
			animSpeed:.5,
			autoHighlight:true,
			forceSelection:true,
			minQueryLength:4,
			useIFrame:true,
			input:searchInput,
			container:searchCont
		};
		
		var schema_loadAutoComplete = ['item', 'name', 'address', 'city', 'zip', 'x', 'y'];
		var obj = new LoadAutoComplete(options_loadAutoComplete,schema_loadAutoComplete);
		
		obj.itemSelectHandler = function(sType, aArgs)
		{
			var oMyAcInstance = aArgs[0]; // your AutoComplete instance   
			var elListItem = aArgs[1]; //the <li> element selected in the suggestion container   
			var aData = aArgs[2]; //array of the data for the item as returned by the DataSource   
//			alert(aData[1]);
//			alert(aData[2]);		
//			alert(aData[3]);	
//			alert(aData[4]);			
//			alert(aData[5]);
			document.getElementById('addr').value = aData[1];	
			document.getElementById('city').value = aData[2];
			document.getElementById('zip').value = aData[3];
			document.getElementById('x').value = aData[4];
			document.getElementById('y').value = aData[5];

		};
		
		obj.itemSelectEvent.subscribe(obj.itemSelectHandler);  	
	}


