// search.js
// A procedural approach to an Ajax search 

// Main search method
function startSearch(e) {

    var key                 = e.keyCode;
    var searchField    		= $('searchRequest');
    var searchText     		= searchField.value;
    var queryStringLength   = searchField.value.length;

	if (queryStringLength >= 3) {
        getSearchResults(searchText, '');
    }

}

function turnOnSearchMenu() {
	
	var searchMenu			= $('Search_Menu');
	toggleImage('', searchMenu);
	
}

function turnOffSearchMenu() {

	var searchMenu			= $('Search_Menu');
	toggleImage('', searchMenu);

}

// Fetch the search results from the server
function getSearchResults(query) {

	// Set parameters
	var url 	= 'http://www.bluerivers.org/cgi-bin/search.cgi?';
	var action	= 'ajax_search';
	var method	= 'getSearchResults';
	
	new Ajax.Request(url,   {
		method: 'get',
		parameters: {'action': action, 'query': query},
		onSuccess: function(transport){
			var xmlResponse = transport.responseXML || "No response XML from server";
			var xmlResults 	= xmlResponse.getElementsByTagName('response')[0];
			displaySearchResults(xmlResults);
		},
		onFailure: function(){ alert('System Error: Unable to complete search') }
	});

}

function parseSearchResults(xmlResults) {
 	
 	var searchResultsLength		= xmlResults.childNodes.length;
 	var searchResultsArray		= new Array();
  	
	for (var i = 0; i < searchResultsLength; i++) {	
	    searchResultsArray[i] = new Array();
						
	    searchResultsArray[i][0] = xmlResults.childNodes[i].childNodes[0].childNodes[0].data; //Story ID				
	    searchResultsArray[i][1] = xmlResults.childNodes[i].childNodes[1].childNodes[0].data; //Story Header
	    searchResultsArray[i][2] = xmlResults.childNodes[i].childNodes[2].childNodes[0].data; //Story Text
	    searchResultsArray[i][3] = xmlResults.childNodes[i].childNodes[3].childNodes[0].data; //Story Date Added
	    searchResultsArray[i][4] = xmlResults.childNodes[i].childNodes[4].childNodes[0].data; //Author

 	}

	return searchResultsArray;

}


function displaySearchResults(xmlResults) {

 	// Parse XML response	
 	var searchResultsArray	= parseSearchResults(xmlResults);
 	
 	// Set document elements
 	var searchResultsSection	= $('content');
 	searchResultsSection.style.display = 'block';
 	
	Story.hideContentToolBar();
	Comment.hideNumComments();

	// Create search display elements
  	var resultRows 		= 0;
	var rowStyle		= '';
	var myTable			= '<table class="searchTable">';			
   	var resultPlural	= searchResultsArray.length == 1 ? '' : 's';
   	
    // Begin Table with the results row use the length as the number of results
    myTable += '<tr><td class="subhead" style="border-bottom: solid #999999 1px;">' + searchResultsArray.length + ' Result' + resultPlural + '</td></tr>'; 			

  	for (var i = 0; i < searchResultsArray.length; i++) {

		resultRows++;

    	rowStyle = resultRows %2 ? 'searchEven' : 'searchOdd';
    
		//I explicitly declare for clairty
	    var storyId 	= searchResultsArray[i][0]; 
	    var storyHeader = searchResultsArray[i][1];
	    var storyText 	= searchResultsArray[i][2]; 
	    var dateAdded  	= searchResultsArray[i][3];
	    var author		= searchResultsArray[i][4];
	    
		//Format display results
	    if (storyHeader == undefined) {
	    	storyHeader = 'Summary data not available';
    	 	myTable += '<tr><td class="subhead">' + storyHeader +'</td></tr>';
	    } else if (storyId == 0) {
	   	    myTable += '<tr><td class="subhead">' + storyHeader +'</td></tr>';
	   	    myTable += '<tr><td>' + storyText +'</td></tr>';
	    } else {
	       	myTable += '<tr class="' + rowStyle + '"><td><a href="index.cgi?action=display_one&story_id=' + storyId + '" class="subhead">' + storyHeader + '</a></td></tr>';
    	 	myTable += '<tr class="' + rowStyle + '"><td>' + storyText +'</td></tr>';
	    }
 		
  	}

	// End table
	myTable += '</table>'; 	

    searchResultsSection.innerHTML = myTable;
    

}
