function StreetCenterline(streetName, streetNumber, from, to, zip, x,y){
	//alert("StreetCenterline: " + streetName + "," + streetNumber + "," +  from + "," +  to + "," +  zip + "," +  x +  "," + "y");
	this.streetName = streetName;
	this.streetNumber = streetNumber;
	this.from = from; 
	this.to = to;
	this.zip = zip;
	this.x = x;
	this.y = y;
}

function streetDialogInit(functionName) {
		//alert("got to streetDialogInit");
		YAHOO.namespace("street.container");
	
		// Define various event handlers for Dialog
		var streetSubmit = function() {
			var data = this.getData();
			if (data.streetNum == "" && data.streetName == "") {
				alert("Please enter a valid Street Number and Name.");
				return false;
			} 
			else if (data.streetNum == "") {
				alert("Please enter a valid Street Number");
				return false;
			}
			else if (data.streetName == "") {
				alert("Please enter a valid Street Name");
				return false;
			}
			else {
				functionName().apply;
			}
		};
		var streetCancel = function() {
			document.getElementById('addressMessage').innerHTML = "Street Segment Locator";
			document.getElementById('streetNum').value = "";
			document.getElementById('streetName').value = "";
			this.cancel();
		};
		var streetSuccess = function(o) {
			document.getElementById('streetNum').value = "";
			document.getElementById('streetName').value = "";
		};
		var streetFailure = function(o) {
			alert("Submission failed: " + o.status);
		};
	
		// Instantiate the Dialog
		document.getElementById("streetDialog").style.display="block";
		YAHOO.street.container.streetDialog = new YAHOO.widget.Dialog("streetDialog", 
								{ width : "30em",
								  fixedcenter : true,
								  visible : false, 
								  zindex: 100,
								  modal:true,
								  close: true,
								  effect:{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.15},
								  constraintoviewport : true,
								  buttons : [ { text:"Submit", handler:streetSubmit },
						      			  { text:"Cancel", handler:streetCancel } ]
								});
				
		
	
		// Wire up the success and failure handlers
		YAHOO.street.container.streetDialog.callback = { success: streetSuccess,
							     failure: streetFailure };
		
		// Render the Dialog
		YAHOO.street.container.streetDialog.render();
	
		//YAHOO.util.Event.addListener("showStreet", "click", YAHOO.street.container.streetDialog.show, YAHOO.street.container.streetDialog, true);
	
		//Street Results Dialog:
		YAHOO.namespace("streetResults.container");
	
		// Instantiate the Dialog
		document.getElementById("streetResultsDialog").style.display="block";
		YAHOO.streetResults.container.streetResultsDialog = new YAHOO.widget.Dialog("streetResultsDialog", 
								{ width : "32em",
								  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.streetResults.container.streetResultsDialog.render();
	
	}

function streetCenterlineQuery(functionName, functionNameText) {
	//alert("got to streetCenterLineQuery" + document.getElementById('streetName').value);
	YAHOO.street.container.streetDialog.hide();
	streetQuery = new Query("http://gis-world.aacounty.org/ArcGIS/rest/services/MyAA/MapServer/3",["FROMLEFT","TOLEFT","FROMRIGHT","TORIGHT","L_ZIP"]);
	streetQuery.query.where =  "NAMEFULL = '" + document.getElementById('streetName').value + "'";
	dojo.connect(streetQuery.queryTask, "onComplete", function(results){
		getStreetResults(results, functionName, functionNameText);
	});
	streetQuery.executeQuery();
}
	
function getStreetResults(results, functionName, functionNameText){
	//alert("Results:" + results.features.length);
	if (results.features.length > 0){
		//alert("Results:" + results.features.length + ":" + document.getElementById('streetNum').value);
		var resultSet = matchStreet(results,document.getElementById('streetNum').value);
		if (resultSet.length == 1){
			if(resultSet[0].match){
				streetCenterlineMapped = new StreetCenterline(document.getElementById('streetName').value, document.getElementById('streetNum').value, resultSet[0].from, resultSet[0].to,resultSet[0].zip,resultSet[0].x,resultSet[0].y);
				functionName.apply();
			}
			else{	
				 var formatUrl = function(elCell, oRecord, oColumn, sData) {  
						elCell.innerHTML = "<a href='javascript:streetCenterlineMapped = new StreetCenterline(\"" + document.getElementById('streetName').value + "\"," +  document.getElementById('streetNum').value + "," + oRecord.getData('from') + "," +  oRecord.getData('to') + ","  + oRecord.getData('zip') + ","  + oRecord.getData('x') + ","  +  oRecord.getData('y')  + ");" + functionNameText + "(); '>Select this segment</a>";	
				};  

				 var myColumnDefs = [   
						 {key:"from", label:"From  #",sortable:true, resizeable:true,width:50},   
						 {key:"to", label:"To #",sortable:true, resizeable:true,width:50}, 
						 {key:"zip", label:"Zip Code",sortable:true, resizeable:true,width:50}, 
						 {key:"geo",label:"Link", sortable:false, resizeable:true,width:100,formatter:formatUrl},
						 {key:"x",  hidden:true}, 
						 {key:"y", hidden:true} 
					 ];   
			   
					var myDataSource = new YAHOO.util.DataSource(resultSet);   
					myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;   
					myDataSource.responseSchema = {    fields: ["from","to","zip","geo","x","y"]   };    
					var myDataTable = new YAHOO.widget.ScrollingDataTable("streetResults",   myColumnDefs, myDataSource, {height:"13em"});   
					document.getElementById('streetResultsMessage').innerHTML = "Street Segment Not Found! ";
					document.getElementById('streetResultsTxt').innerHTML = "A valid street segment could not be uniquely identified based on the street number and street name entered.  The available segments based on the street name entered are listed in the table below.  Please select the appropriate segment.";
					YAHOO.streetResults.container.streetResultsDialog.show();
					return {  oDS: myDataSource,   oDT: myDataTable  }; 
			}
		}
		else {
			 var formatUrl = function(elCell, oRecord, oColumn, sData) {  
					elCell.innerHTML = "<a href='javascript:streetCenterlineMapped = new StreetCenterline(\"" + document.getElementById('streetName').value + "\"," +  document.getElementById('streetNum').value + "," + oRecord.getData('from') + "," +  oRecord.getData('to') + ","  + oRecord.getData('zip') + ","  + oRecord.getData('x') + ","  +  oRecord.getData('y')  + ");" + functionNameText + "(); '>Select this segment</a>";	
			};  

			 var myColumnDefs = [   
					 {key:"from", label:"From  #",sortable:true, resizeable:true,width:50},   
					 {key:"to", label:"To #",sortable:true, resizeable:true,width:50}, 
					 {key:"zip", label:"Zip Code",sortable:true, resizeable:true,width:50}, 
					 {key:"geo",label:"Link", sortable:false, resizeable:true,width:150,formatter:formatUrl},
					 {key:"x",  hidden:true}, 
					 {key:"y", hidden:true} 
				 ];   
		   
				var myDataSource = new YAHOO.util.DataSource(resultSet);   
				myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;   
				myDataSource.responseSchema = {    fields: ["from","to","zip","geo","x","y"]   };    
				var myDataTable = new YAHOO.widget.ScrollingDataTable("streetResults",   myColumnDefs, myDataSource, {height:"13em"});   
				document.getElementById('streetResultsMessage').innerHTML = "Street Segment Not Found! ";
				document.getElementById('streetResultsTxt').innerHTML = "A valid street segment could not be uniquely identified based on the street number and street name entered.  The available segments based on the street name entered are listed in the table below.  Please select the appropriate segment.";
				YAHOO.streetResults.container.streetResultsDialog.show();
				return {  oDS: myDataSource,   oDT: myDataTable  };   
		}
	}
	else{
		document.getElementById('addressMessage').innerHTML = "Address Not Found!";
		YAHOO.street.container.streetDialog.show();
	}	
}

function matchStreet(results,streetNumber) {
	  	//alert("Got to matchStreet");
		var even = false;

		var remainder = streetNumber % 2;
		if (remainder == 0){
			even = true;						
		}
			
	    matchedStreets = [];
		nonMatchedStreets = [];
			
	function dataSort(a,b) {
		//alert("datasort:" + a.from  + ":" + b.from );
		return (a.from  - b.from);
	}
	
	function getApproxPoint(streetArray,streetNumber, valid){
		//alert(valid + ": "  + streetArray.geo.paths[0].length  + ":" +  streetArray.from + ":" + streetArray.to + ":" + streetNumber );
		if (valid ){
			var rangeDiff = streetArray.to - streetArray.from;
			var addrDiff = streetNumber - streetArray.from;
			var percent = addrDiff / rangeDiff;			
		}
		else{
			var percent = .5;
		}
		var percentAddr = Math.round(streetArray.geo.paths[0].length * percent) ;
		if (percentAddr != 0){
			percentAddr = percentAddr - 1;
		}
		//alert("%addr:" + percentAddr);
		var streetPoint = streetArray.geo.getPoint(0,percentAddr);
		streetArray.x = Math.round(streetPoint.x);
		streetArray.y = Math.round(streetPoint.y);
	}
	
		for (var i=0, il=results.features.length; i<il; i++) {
		  //alert("in first loop:" + i + ":" + results.features.length);
	      fromLeft = "";
		  toLeft = "";
		  fromRight = "";
		  toRight = "";
		  lZip = "";
				
	         var featureAttributes = results.features[i].attributes;
			 var streetMatches = "";
			 var streetNonMatches = "";

	         for (att in featureAttributes) {
	         	//alert("in 2nd loop:"  + att + ":" + featureAttributes[att] + "fromLeft:" + fromLeft + " toLeft:" + toLeft + " fromRight:" + fromRight + " toRight: " + toRight + "zip" + lZip);	
	
				if (att == "FROMLEFT"){
					fromLeft = featureAttributes[att];
				}
				else if (att == "TOLEFT"){
					toLeft = featureAttributes[att];
				}
		        else if (att == "FROMRIGHT"){
					fromRight = featureAttributes[att];
				}
				else if (att == "TORIGHT"){
					toRight = featureAttributes[att];
				}		
				else if (att == "L_ZIP"){
					lZip = featureAttributes[att];
					var leftRemainder = 0;
					var rightRemainder = 0;
					var leftEven = false;
					var rightEven = false;

					if (fromLeft != 0){
						var leftRemainder = fromLeft % 2;
						if (leftRemainder == 0){
							leftEven = true;						
						}
						else{
							leftEven = false;	
						}
						
						if (even && leftEven && streetNumber >= fromLeft && streetNumber <= toLeft){
							//alert("Left Even" + streetNumber + ":" + fromLeft + ":" + toLeft);
							streetMatches = {match:true, from:fromLeft, to:toLeft, zip:lZip, geo:results.features[i].geometry};
						}
						else if (! even &&  ! leftEven && streetNumber >= fromLeft && streetNumber <= toLeft){
							//alert("Left Odd" + streetNumber + ":" + fromLeft + ":" + toLeft);
							streetMatches = {match:true, from:fromLeft, to:toLeft, zip:lZip, geo:results.features[i].geometry};
						}
					}
					
					if (streetMatches == ""){
						if (fromRight != 0){
							var rightRemainder = fromRight % 2;
							if (rightRemainder == 0){
								rightEven = true;						
							}
							else{
								rightEven = false;	
							}
							
							if (even && rightEven && streetNumber >= fromRight && streetNumber <= toRight){
								//alert("Right Even" + streetNumber + ":" + fromRight + ":" + toRight);
								streetMatches = {match:true, from:fromRight, to:toRight, zip:lZip, geo:results.features[i].geometry};
							}
							else if (! even &&  ! rightEven && streetNumber >= fromRight && streetNumber <= toRight){
								//alert("Right Odd" + streetNumber + ":" + fromRight + ":" + toRight);
								streetMatches = {match:true, from:fromRight, to:toRight, zip:lZip, geo:results.features[i].geometry};
							}
						}
					}
					if (streetMatches != ""){
						//alert("got here:" + streetMatches.from + ":" + streetMatches.to);
						getApproxPoint(streetMatches, streetNumber,true);
						//alert(streetMatches.x + ":" + streetMatches.y);
						matchedStreets.push(streetMatches);
						streetMatches = "";
						fromLeft = "";
						toLeft = "";
						fromRight = "";
						toRight = "";
						lZip = "";
					}
					else{
							//alert("ranges:" + fromLeft + ":" + toLeft + ":" + fromRight + ":" + toRight + ":" + even + ":" + leftEven + ":" + rightEven);
							if (fromLeft != 0 && even && leftEven){
								streetNonMatches = {match:false,from:fromLeft, to:toLeft, zip:lZip, geo:results.features[i].geometry};
								getApproxPoint(streetNonMatches, streetNumber,false);
								nonMatchedStreets.push(streetNonMatches);
							}
							else if (fromLeft != 0 &&  !even &&  ! leftEven){							
								streetNonMatches = {match:false,from:fromLeft, to:toLeft, zip:lZip, geo:results.features[i].geometry};
								getApproxPoint(streetNonMatches, streetNumber,false);
								nonMatchedStreets.push(streetNonMatches);
							}
							else if (fromRight != 0 && even && rightEven){
								streetNonMatches = {match:false,from:fromRight, to:toRight, zip:lZip, geo:results.features[i].geometry};
								getApproxPoint(streetNonMatches, streetNumber,false);
								nonMatchedStreets.push(streetNonMatches);
							}
							else if (fromRight != 0 &&  !even &&  ! rightEven){
								streetNonMatches = {match:false,from:fromRight, to:toRight, zip:lZip, geo:results.features[i].geometry};
								getApproxPoint(streetNonMatches, streetNumber,false);
								nonMatchedStreets.push(streetNonMatches);
							}
							//alert("xy values:" + streetNonMatches.x + ":" +  streetNonMatches.y);
					}
				}
	         }
	    }	
	    if (matchedStreets.length > 0){
		   	matchedStreets.sort(dataSort); 
		   	return matchedStreets;
		} 
	    else if (nonMatchedStreets.length > 0){
			nonMatchedStreets.sort(dataSort); 
		   	return nonMatchedStreets; 
	    }
		else{
	    	return "none";
	    
	    }
}  

//Auto-Complete
LookupByCenterline = function (form, searchInput, searchCont) {
		var options_loadAutoComplete = {
			server:"http://aacoprod.aacounty.org/AACOUtils/getStreets.do",
			param:"name",
			animVert:true,
			animHoriz:false,
			animSpeed:.5,
			autoHighlight:true,
			forceSelection:true,
			minQueryLength:2,
			useIFrame:true,
			input:searchInput,
			container:searchCont
		};
		
		var schema_loadAutoComplete = ['item', 'name'];
		var obj = new LoadAutoComplete(options_loadAutoComplete,schema_loadAutoComplete);
	}
