// no-op firebug emulation.
if(!window.console) { window.console = {info: function() {}, warn: function(){}, error: function(){}}};

/** 
  submitSearch - when Search button or search link are clicked
**/

function submitSearch(page) {
	if (!page) page = 1;
	gi('pge').value = page;
	
	var searchformnodes = gi("searchform").childNodes;
	var searchbookmark = new Array();
	
	for(var i = 0; i < searchformnodes.length; i++) {
		if (searchformnodes[i].value && searchformnodes[i].type != 'submit') {
			if (searchformnodes[i].name != 'action' && searchformnodes[i].name != 'source') {
				searchbookmark.push(searchformnodes[i].name);
    				searchbookmark.push(searchformnodes[i].value);
    			}
    		}
    	}
	
	updateSearchHistory(searchbookmark.join('|'));
	return false;
}

/** 
  updateSearchHistory updates top.location.hash to include search bookmark
**/

function updateSearchHistory(searchbookmark) {
	try {
		var currentsearch = YAHOO.util.History.getCurrentState("srch");
		if (searchbookmark != currentsearch) YAHOO.util.History.navigate("srch", unescape(searchbookmark));

	} catch(e) {
		warn('Could not update history for search: '+ e);
	}
}

/**
   showSearchResults will fill in the appropriate search results div
  */
function showSearchResults(searchbookmark) {
	// if there's no div to display results, get out
	var searchnode = gi('searchdisplay');
	if (!searchnode) return false;

	// if there are elements in the bookmark array
	if (searchbookmark) {
		var bookmarkarray = searchbookmark.split("|");
		
		document.body.style.cursor = "wait";
		var anchors = document.body.getElementsByTagName("a"); 
		for (var i = 0; i < anchors.length; i++) { 
			anchors[i].style.cursor = "wait"; 
		}

		var callback = { 
				success: function(content) {
					searchnode.innerHTML = content.responseText;

					document.body.style.cursor = "";
					for (var i = 0; i < anchors.length; i++) { 
						anchors[i].style.cursor = "default"; 
					}
				},

				failure: function(e) { 
					warn('Failed to show search results: '+ e);
				}
		};

		// assign any value that's not assigned in case the form was not submitted but url was simply loaded with bookmark
		// i.e. if (gi('pge')) gi('pge').value = bookmark;
		for(var i = 0; i < bookmarkarray.length; i=i+2) {
			if (gi(bookmarkarray[i])) {
				gi(bookmarkarray[i]).value = bookmarkarray[i+1];
			}
    		}
    	
		// get form elements before we async call the search url
		var elements = document.forms[0].elements;
		var queryComponents = new Array();

		for (var i = 0; i < elements.length; i++) {
			// make sure we force action to be 'search'
			queryComponents.push(elements[i].name+'='+elements[i].value);
		}

		var searchurl = '../htsearch.cgi?'+queryComponents.join('&');
		YAHOO.util.Connect.asyncRequest('GET', searchurl, callback);

		updateSearchHistory(searchbookmark);

	} else {
		searchnode.innerHTML = '';
	}

	return false;
}

function parseBookmark() {
	// Remove the hash if any
	var bookmark = window.location.href;
	var idx = bookmark.lastIndexOf("#");

	if (idx >= 0) {
		var hashstring = bookmark.substr(idx + 1);
		var hashparams = hashstring.split("&");

		for (i = 0, len = hashparams.length; i < len; i++) {
			var tokens = hashparams[i].split("=");
			if (tokens.length >= 2) {
				if (tokens[0] == 'srch') return unescape(tokens[1]); // srch=[pagenumber]|[method]|[words]|... etc
			}
		}
	}

	return '';
}

YAHOO.util.Event.onDOMReady(function () {
	var searchbookmark = YAHOO.util.History.getBookmarkedState("srch")||'';
	YAHOO.util.History.register("srch", searchbookmark, function (state) {
		if (state) showSearchResults(state);
	});

	try {		
		// Initialize browser history management library.
		YAHOO.util.History.initialize("yui-history-field", "yui-history-iframe");

		var searchbookmark = parseBookmark();
		if (searchbookmark) showSearchResults(searchbookmark);

	} catch (e) {
		// The only exception that gets thrown is when the browser is not supported (Opera, or not A-grade). Back button won't work.
		warn('Failed to show search results: '+ e);
	}
});