
/**
 * Provides suggestions for state names (USA).
 * @class
 * @scope public
 */

 
 var aMatchSuggestion = [];
 var aSuggestions = [];
 var prevAJAXTextBoxValue ="";
 var reqStatus = 204;
 
 
function StateSuggestions() {
  this.airport = [];
}
/**
 * Request suggestions for the given autosuggest control. 
 * @scope protected
 * @param oAutoSuggestControl The autosuggest control to provide suggestions for.
 */
 
StateSuggestions.prototype.requestSuggestions = function (oAutoSuggestControl /*:AutoSuggestControl*/,
                                                          bTypeAhead /*:boolean*/)
   {
	    var sTextboxValue = oAutoSuggestControl.textbox.value;

	    if (sTextboxValue.length > 2)
		{
		    var temp = new String();
		    temp = sTextboxValue;
		    typeAhead_AutoComplete(temp, oAutoSuggestControl, bTypeAhead, temp);
		} else if (sTextboxValue.length <= 2 && sTextboxValue.length > 0){
			populateDataInField("", oAutoSuggestControl, bTypeAhead, sTextboxValue);
		}
	    prevAJAXTextBoxValue = sTextboxValue;
	}


	function populateDataInField(AJAXAirportList,  oAutoSuggestControl, bTypeAhead, sTextboxValue)
	{	
    var aSuggestions = [];
	var airportName;
	var prevAirportName;
    	airport = AJAXAirportList.split("||");
		var listLength = airport.length;
		
    	for (var i=0; i < listLength; i++) 
        {
			airportName =  airport[i];			
			if(oAutoSuggestControl.textbox.name=='City' || oAutoSuggestControl.textbox.name =='innerCity')
			{
				
				//push is user search is based on city name
				if(airportName.toLowerCase().indexOf(sTextboxValue.toLowerCase()) == 0)
				{
	            	aSuggestions.push(airportName);
				}
				else if (airportName.indexOf('(')!=-1)
				{				
					if(airportName.substr(0,3).toLowerCase().indexOf(sTextboxValue.toLowerCase()) == 0 ){
							aSuggestions.push(airportName);		
					}
					else if (airportName.substring(airportName.indexOf(") - ")+4).toLowerCase().indexOf(sTextboxValue.toLowerCase()) == 0){
						aSuggestions.push(airportName);		
					}						            	
				}
			}
			else
			{
				if (airportName.indexOf('(')!=-1)
				{
					if(airportName.substr(0,3).toLowerCase().indexOf(sTextboxValue.toLowerCase()) == 0 )
					{
						aSuggestions.push(airportName);		
						//push city to which airport belongs
						if(prevAirportName.indexOf('(')==-1)
						{
							aSuggestions.push(prevAirportName);						
					}
					}
					else if (airportName.substring(airportName.indexOf(") - ")+4).toLowerCase().indexOf(sTextboxValue.toLowerCase()) == 0)
					{
						aSuggestions.push(airportName);		
						//push city to which airport belongs
						if(prevAirportName.indexOf('(')==-1)
							aSuggestions.push(prevAirportName);
					}						            	
				}					            									            	
			}	         
			
			prevAirportName = airportName;
			
        }		
		//provide suggestions to the control
    oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead);
	    
	};

	function typeAhead_AutoComplete(lookValue, cb1, cb2, sTextboxValue) 
	{   	
		 var url = "/autocomplete?action=complete&lookValue=" + lookValue;
		 var req = createXmlHttpReqObject();
		 
		 req.onreadystatechange = function() 
		 {
		     if (req.readyState == 4) 
			 {
		         if (req.status == 200) 
			     {         	
					reqStatus = 200;
		            populateDataInField(req.responseText, cb1, cb2, sTextboxValue);
		         } else if (req.status == 204)
			     {	// no content
		             return null;
    }
		     }
		 };

		 req.open("GET", url, true);
		 req.send(null);       
};
	
	function createXmlHttpReqObject(){ 
		var xmlHttpObj = null;
		if(window.XMLHttpRequest){
			xmlHttpObj = new XMLHttpRequest();
		}
		else if(window.ActiveXObject){
			xmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP");
		}
		return xmlHttpObj;
	};

		
