var fromSelect; 
var toSelect; 
var streetSelect;
var txtSearch;

var req;
var lb_gettingStreets = false;

function Initialize()
{
	fromSelect = document.getElementById('ddlFromSegment');   
	toSelect = document.getElementById('ddlToSegment');
	streetSelect = document.getElementById('ddlStreets');
	txtSearch = document.getElementById('txtSearchString');
	
	clearToSegments();
}

function selectFromSegments(streetName)
{	
	//var ddl = document.getElementById('ddlFromSegment');
	if (streetName != '0' && !lb_gettingStreets)
	{
		lb_gettingStreets = true;
		
		fromSelect.options.length = 0;
		
		fromSelect.options[0] = new Option("Loading From Segments...", "0");
		
		var paramString = streetName + '~0~0';
		
		updateGrid(paramString);
		
		SendAJAXRequest(FillFromSegments, 'fromsegment', streetName);
		
		clearToSegments();
	}
}
			
function updateGrid(paramString)
{
	document.PCC.RaiseEvent("urn:gov.coe.portal:locbooks", "DoAddressSearch", paramString);
}			
			
function clearToSegments()
{
	toSelect.options.length = 0;
	
	toSelect.options[0] = new Option("Select a From Segment from the list above.", "0");
}

function clearFromSegments()
{
	fromSelect.options.length = 0;
	
	fromSelect.options[0] = new Option("Select a Street from the list above.", "0");
}

function resetSearchScreen()
{
	clearToSegments();
	
	clearFromSegments();
	
	streetSelect.selectedIndex = 0;
}
			
function resetDBSearchScreen()
{
	txtSearch.value = '';
	txtSearch.focus();
}			
			
function selectToSegments(fromSegment)
{
	if (fromSegment!='0' && fromSegment.length > 0)
	{
		toSelect.options.length = 0;
		
		toSelect.options[0] = new Option("Loading To Segments...", "0");
		
		var paramString = streetSelect.value + '~' + fromSegment + '~0';
		
		updateGrid(paramString)
		
		SendAJAXRequest(FillToSegments, 'tosegment', paramString);
	}		
	else
	{
		selectFromSegments(streetSelect.value);
	}	
}

function selectedToSegment(toValue)
{
	if (toValue!='0' && toValue.length > 0)
	{
		var paramString = streetSelect.value + '~' + fromSelect.value + '~' + toValue;
	
		updateGrid(paramString);
	}
	else
	{
		selectToSegments(fromSelect.value);
	}
}

function dbSearchSubmit(searchString)
{
	if (searchString.length==0)
	{
		alert('Please enter a word or phrase to search for.');
		txtSearch.focus();
	}
	else
	{
		updateGrid(searchString);
	}
}

function txtSearchKeyDown(evt)
{
	var searchString = txtSearch.value;
	
	if (window.event)
	{
		if (event.keyCode==13)
		{
			dbSearchSubmit(searchString);
			
			return false;
		}
	}
	else
	{
		if (evt.keyCode==13)
		{
			dbSearchSubmit(searchString);
			
			return false;
		}
	}
	
	return true;
}

function FillFromSegments()
{
	// only if req shows "complete"
    if (req.readyState == 4) 
    {	
        // only if "OK"
        if (req.status == 200) 
        {		
			var itemList = req.responseXML.getElementsByTagName("item");
	        
	           	           
	        for (i=0; i<itemList.length; i++)
	        {
				try
				{
					fromSelect.options[i + 1] = new Option(itemList[i].firstChild.data, itemList[i].firstChild.data);
				}
				catch (ex)
				{}
	        }
	        
	        if (fromSelect.length == 1)
	        {
				fromSelect.options[0] = new Option('Could not find matching From Segments...', '0');
	        }
	        else
			{
				fromSelect.options[0] = new Option('', '0');
				fromSelect.selectedIndex = 0;
	        }
	        
	        lb_gettingStreets = false;
        } 
        else 
        {
            alert("There was a problem retrieving the XML data:\n" + req.statusText);
        }
    }	
}	

function FillToSegments()
{
	// only if req shows "complete"
    if (req.readyState == 4) 
    {	
        // only if "OK"
        if (req.status == 200) 
        {		
			var itemList = req.responseXML.getElementsByTagName("item");	        
	           	           
	        for (i=0; i<itemList.length; i++)
	        {
				try
				{
					toSelect.options[i + 1] = new Option(itemList[i].firstChild.data, itemList[i].firstChild.data);
				}
				catch (ex)
				{}
	        }
	        
	        if (toSelect.length == 1)
	        {
				toSelect.options[0] = new Option('Could not find matching To Segments...', '0');
	        }
	        else
			{
				toSelect.options[0] = new Option('', '0');
				toSelect.selectedIndex = 0;
	        }
        } 
        else 
        {
            alert("There was a problem retrieving the XML data:\n" + req.statusText);
        }
    }	
}	
	

function keysortDropDownList(evt, dropdownlist,caseSensitive)
 {
					// check the keypressBuffer attribute is defined on the dropdownlist 
					var undefined; 
				
					if (dropdownlist.keypressBuffer == undefined) { 
						dropdownlist.keypressBuffer = ''; 
					} 
				
					if (evt.which)
					{
						if (evt.which==13)
						{
							selectFromSegments(dropdownlist.value);
							return;
						}
					}
					else if (event.keyCode)
					{
						if (event.keyCode==13)
						{
							selectFromSegments(dropdownlist.value);
							return;
						}
					}
				
					// get the key that was pressed 
					if (window.event)
						var key = String.fromCharCode(window.event.keyCode); 
					else
						var key = String.fromCharCode(evt.keyCode);
					
					dropdownlist.keypressBuffer += key;
					
				
					if (!caseSensitive) {
						// convert buffer to lowercase
						dropdownlist.keypressBuffer = dropdownlist.keypressBuffer.toLowerCase();
					}
				
					// find if it is the start of any of the options 
					var optionsLength = dropdownlist.options.length; 
				
					for (var n=0; n < optionsLength; n++) 
					{ 
						var optionText = dropdownlist.options[n].text; 
						
						if (!caseSensitive) 
						{
							optionText = optionText.toLowerCase();
						}
						
						if (optionText.indexOf(dropdownlist.keypressBuffer,0) == 0) 
						{ 
							dropdownlist.selectedIndex = n; 
							return false; // cancel the default behavior since 
							// we have selected our own value 
						} 
					} 
				
					// reset initial key to be inline with default behavior 
					dropdownlist.keypressBuffer = key; 
					return true; // give default behavior 
} 	
	
function SendAJAXRequest(method, arg, param)
{
	var url = returnCallbackUrl() + '?arg=' + arg + '&param=' + param;

    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = method;
        req.open("GET", url, true);
                
        // IE 7 Did not add this to the XMLHttpRequest object so this fails 
        // without a check. Grrrr...
        if (req.overrideMimeType)
            req.overrideMimeType("text/xml"); 
        
        req.send(null);
    } 
    else if (window.ActiveXObject) 
    {
		req = new ActiveXObject("Microsoft.XMLHTTP");
                
        if (req) {
            req.onreadystatechange = method;

            req.open("GET", url, true);
            req.send();
        }
    }
    else
    {
		alert('Your browser does not support XMLHttpRequests. Please upgrade to a newer version of this browser.');
    }
}
