var srchsection = "Search";	

function update_q(el)
	{
		if(el.value == "")
		{
			el.value = searchSection;
		}
	}
	
	function blank_q(el)
	{
		if(el.value == searchSection)
		{
			el.value = "";
		}
	}
	
	// Search area functions
	var suggestionsTable = null;
	var selectedSuggestion = null;
	var originalValue = null;
	
	var firstSuggestion = null; // point to the first suggestion in the list.
	var lastSuggestion = null; // point to the last inserted suggestion.
	
	window.addEvent('domready', function() {
		suggestionsTable = $('searchSuggestionListTable');
		suggestionsTable.shouldHide = true;
		
		suggestionsTable.addEvent('mouseover', function() {
			suggestionsTable.shouldHide = false;
		});
		
		suggestionsTable.addEvent('mouseout', function() {
			suggestionsTable.shouldHide = true;
		});
		
		
		$('q').addEvent('keyup', function(event){
			event = new Event(event);
			
			if(event.key == 'up')
			{
				selectPrevSuggestion();
			}
			else if(event.key == 'down')
			{
				selectNextSuggestion();
			}
			else if(event.key != 'enter')
			{
				displaySuggestions($('q'), $('searchnearby'));
			}
		});
		
		$('headerSearchForm').addEvent('submit', function(event) {
			$('searchWorking').setStyle('display', 'block');
		});
	});
	
	function displaySuggestions(field, nearby_box)
	{
		var nearby = 0;				
		if(field.value != "")
		{
			if(nearby_box && nearby_box.checked)
			{
				nearby = 1;
			}
			
			suggestionsTable.setStyle('visibility', 'hidden');
			
			clearSuggestions();
			
			// Get the open search suggestions... no point reinventing the wheel.
			var suggestionRequest = new Json.Remote("/main/api/search/OpenSearch.cfc?method=getSuggestions&id=" + SearchBoxDirectoryID + "&q=" + field.value + '&n=' + nearby, {
				onComplete: function(openSuggestionsJSON) {
					// The first element is the original string.
					if(openSuggestionsJSON[0] == field.value) {
						clearSuggestions();
						originalValue =  new Element('td')
						originalValue.setHTML(field.value);
						originalValue.value = field.value;
						var suggestions = openSuggestionsJSON[1];
						var descriptions = openSuggestionsJSON[2];
						var urls = openSuggestionsJSON[3];
						
						var lastLabel = null;
						for(i = 0; i < suggestions.length; i++)
						{
							if(descriptions[i] != lastLabel)
							{
								lastLabel = descriptions[i];
								insertLabel(lastLabel);
							}
							
							insertSuggestion(suggestions[i], urls[i]);
						}
						
						if(suggestions.length > 0)
						{
							suggestionsTable.setStyle('visibility', 'visible');
						}
					}
				}
			});
			
			suggestionRequest.send(); 
		}
		else
		{
			suggestionsTable.setStyle('visibility', 'hidden');
		}
	}
	
	function hideSuggestions()
	{
		if(suggestionsTable.shouldHide) {
			suggestionsTable.setStyle('visibility', 'hidden');
		}
	}
	
	function clearSuggestions()
	{
		if(originalValue != null)
		{
			originalValue.nextSuggestion = null;
			originalValue.prevSuggestion = null;
			originalValue = null;
		}
		
		if(selectedSuggestion != null)
		{
			selectedSuggestion.nextSuggestion = null;
			selectedSuggestion.prevSuggestion = null;
			selectedSuggestion = null;
		}
		
		// Break the cyclical link so the object can be cleaned up.
		if(firstSuggestion != null)
		{
			firstSuggestion.nextSuggestion = null;
			firstSuggestion.prevSuggestion = null;
			
			firstSuggestion = null;
		}
		
		if(lastSuggestion != null)
		{
			lastSuggestion.nextSuggestion = null;
			lastSuggestion.prevSuggestion = null;
			
			lastSuggestion = null;
		}
		
		while(suggestionsTable.rows.length > 0)
		{
			suggestionsTable.deleteRow(0);
		}
	}
	
	function insertSuggestion(title, url)
	{
		/*newRow = new Element('tr', {
			'class': 'searchSuggestion'
		});
		
		newCell = new Element('td');
		newCell.setHTML(title);
		
		newRow.adopt(newCell);
		suggestionsTable.adopt(newRow);*/
		newRow = suggestionsTable.insertRow(-1);
		//newRow.class = "searchSuggestion";
		
		newCell = newRow.insertCell(0);
		
		newText = document.createTextNode(title);
		
		newCell.appendChild(newText);
		newCell.value = title;
		newRow.cell = $(newCell);
		
		if(firstSuggestion == null)
		{
			firstSuggestion = newRow.cell;
			newRow.cell.prevSuggestion = newRow.cell;
			newRow.cell.nextSuggestion = newRow.cell;
		}
		
		if(lastSuggestion != null)
		{
			lastSuggestion.nextSuggestion = newRow.cell;
			newRow.cell.prevSuggestion = lastSuggestion;
		}
		
		lastSuggestion = newRow.cell;
		
		firstSuggestion.prevSuggestion = originalValue;
		originalValue.prevSuggestion = lastSuggestion;
		
		lastSuggestion.nextSuggestion = originalValue;
		originalValue.nextSuggestion = firstSuggestion;
		
		$(newRow).addEvent('click', function(){
			/*$('q').value = title;
			suggestionsTable.setStyle('visibility', 'hidden');
			$('headerSearchForm').submit();*/
			window.open(url, "_self");
		});
		
		$(newRow).addEvent('mouseover', function(){
			if(selectedSuggestion != null)
			{
				selectedSuggestion.removeClass('selected');
			}
			
			this.cell.addClass('selected');
			selectedSuggestion = this.cell;
		});
	}
	
	function selectPrevSuggestion()
	{
		if(lastSuggestion != null)
		{
			if(selectedSuggestion == null)
			{
				selectedSuggestion = lastSuggestion;
			}
			else
			{
				selectedSuggestion.removeClass('selected');
				selectedSuggestion = selectedSuggestion.prevSuggestion;
			}
			
			// could be null if prevSuggestion was null
			if(selectedSuggestion != null)
			{
				selectedSuggestion.addClass('selected');
				suggestionsTable.setStyle('visibility', 'visible');
				$('q').value = selectedSuggestion.value;
			}
		}
	}
	
	function selectNextSuggestion()
	{
		if(firstSuggestion != null)
		{
			if(selectedSuggestion == null)
			{
				selectedSuggestion = firstSuggestion;
			}
			else
			{
				selectedSuggestion.removeClass('selected');
				selectedSuggestion = selectedSuggestion.nextSuggestion;
			}
			
			// could be null if nextSuggestion was null
			if(selectedSuggestion != null)
			{
				selectedSuggestion.addClass('selected');
				suggestionsTable.setStyle('visibility', 'visible');
				$('q').value = selectedSuggestion.value;
			}
		}
	}

/***********************************************
* Update for Categories - by Shane 
************************************************/

	function insertLabel(label)
	{
		newLabelRow = suggestionsTable.insertRow(-1);
		newLabelCell = newLabelRow.insertCell(0);
		newLabelCell.className = "label";
		newLabelCell.innerHTML = label;
	}
