//Load FancyForms on pageload
Event.observe(window, 'load', function() {FancyForm.start($$('.fancyform'));});

/*
 *	Search Term Suggestion Script
 */
var suggestableSearchTerms = null;	//everythign starting with first 3 chars
var suggestableSearchTermsTerm = null;	//the term used to populate the suggestableSearchTerms
var suggestedSearchTerms = null;	//everything starting with lastTermSuggested
var lastTermSuggested = null;

function searchTermSuggest_resp(xml) {
	//check that we got JSON and not an ERROR xml
	if('<error></error>' != xml) {
		suggestableSearchTerms = eval('(' + xml + ')');
		suggestableSearchTerms.sort(sortSearchTermSuggestByTermName);

		//call getSearchTermSuggestion()
		getSearchTermSuggestion();
	} else {
		suggestableSearchTerms = null;
	}
}

function sortSearchTermSuggestByTermName(a, b) {
	return a['term'] > b['term'];
}

function sortSearchTermSuggestByNumResults(a, b) {
	a['results'] = parseInt(a['results']);
	b['results'] = parseInt(b['results']);
	return a['results'] < b['results'];
}

/*
 *	Loop through SourceArr for elements that start
 *	with compareTerm and return the resulting array
 *	(assume sourceArr is in alphabetical order)
 */
function filterSuggestedTerms(sourceArr, compareTerm) {
	ret = Array();
	var startedSuggesting = false;
	for(var i=0; i<sourceArr.length; i++) {
		if(sourceArr[i]['term'].toLowerCase().substr(0, compareTerm.length) == compareTerm) {
			ret[ret.length] = sourceArr[i];
			startedSuggesting = true;
		} else if(startedSuggesting) {
			//we've found everything we're looking for
			break;
		}
	}
	return ret;
}

function getSearchTermSuggestion() {
	var typedTerm = document.getElementById('search_field').value.toLowerCase();

	if(typedTerm.length > 2) {
		//3 or more characters are typed
		if(null == suggestableSearchTerms || typedTerm.substr(0, 3) != suggestableSearchTermsTerm) {
			suggestableSearchTermsTerm = typedTerm.substr(0, 3);
			suggestableSearchTerms = null;
			var params = Array();
			params[0] = Array();
				params[0]['name'] = 'term';
				params[0]['value'] = typedTerm.substr(0, 3);
			executeAjaxFunctionXML('getSearchTermSuggestions', searchTermSuggest_resp, params);
		} else {
			//we have an array of search terms, figure out which ones to display
			if(	null == suggestedSearchTerms || 
				(null != lastTermSuggested && lastTermSuggested.length > typedTerm.length) ||
				(null != lastTermSuggested && lastTermSuggested.length == typedTerm.length && lastTermSuggested != typedTerm)
			) {
				//characters were deleted, need to recalculate suggestedSearchTerms
				suggestedSearchTerms = filterSuggestedTerms(suggestableSearchTerms, typedTerm);
			}
			//remember the lastTermSuggested
			lastTermSuggested = typedTerm;

			//sort suggestedSearchTerms by name
			suggestedSearchTerms.sort(sortSearchTermSuggestByTermName);

			//create temp arry to hold new suggestedSearch Terms
			var newSuggestions = Array();

			//loop through suggestedSearchTerms and copy similar terms to new array
			if(null != suggestedSearchTerms) {
				newSuggestions = filterSuggestedTerms(suggestedSearchTerms, lastTermSuggested);

				//sort newSuggestions by number of results
				newSuggestions.sort(sortSearchTermSuggestByNumResults);

				//set suggestedSearchTerms to newSuggestions
				suggestedSearchTerms = newSuggestions;
				newSuggestions = null;

				//do something with the suggestedSearchTerms!!
				populateSearchSuggestions(suggestedSearchTerms);
			} else {
				//we don't have suggestedSearchTerms, so hide the pulldown
				populateSearchSuggestions(null);
			}
		}
	} else {
		//less than 3 characters are typed
		suggestableSearchTerms = null;
		populateSearchSuggestions(null);
	}
}

function populateSearchSuggestions(suggestions) {
	var searchtype = getCheckedValue(document.search.searchtype);
	box = document.getElementById('auto_suggest');
	if(undefined != box) {
		if(null == suggestions || 0 == suggestions.length) {
			//hide the suggestion box
			box.innerHTML = '';
			box.style.display = 'none';
		} else {
			//populate and display the suggestion box
			var html = '';

			for(var i=0; i < suggestions.length && i < 10; i++) {
				html += "<div class=\"auto_suggest_result\" onmouseover=\"this.style.background='#edf0f1';\" onmouseout=\"this.style.background='#ffffff';\"><a href=\"#\" onclick=\"clickAutosuggest('"+escape(suggestions[i]['term'])+" '); return false; \">"+suggestions[i]['term']+"</a></div><div class=\"auto_suggest_separator\"></div>";
			}

			box.innerHTML = html;
			box.style.display = 'block';
		}
	}
}

function clickAutosuggest(suggestion) {
	document.search.s.value=unescape(suggestion);
	getSearchTermSuggestion(); 
	
	document.search.s.focus();

	//focus() autoselects the text, this unselects it
	var tmp = document.search.s.value;
	document.search.s.value = '';
	document.search.s.value = tmp;
}

function getCheckedValue(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}


function blurSearchBox(textarea, searchterm) {
//	textarea.value=searchterm;
}

function clickSearchBox(textarea) {
	suggestableSearchTerms = null;
	populateSearchSuggestions(null);

	if(textarea.value == defaultSearchText) textarea.value='';
}