/**
 * js for the search box
 */

// For IE, document.getElementsByName is not implemented properly.
if (navigator.userAgent.indexOf('IE') !== -1) {
	document.getElementsByName = function(str){		
		str = new String(str);
		var myMatches = new Array();
		var allEls = document.getElementsByTagName("*"), l = allEls.length;
		for (var i = 0; i < l; i++) 
			if (allEls[i].name == str || allEls[i].getAttribute("name") == str) 
				myMatches[myMatches.length] = allEls[i];
		return myMatches;
	}
}

function displayTopCategories(){
	topCategoriesPanel = Dom.get('topCategories');
	topCategoriesChervron = Dom.get('locationChervron');
	display = topCategoriesPanel.className;	
	if(display == 'hide') {
		toggleDisplay = 'show';
		chervron = 'expand';	
		toggleChervron = 'minimize';	
	} else {
		toggleDisplay = 'hide';
		chervron = 'minimize';	
		toggleChervron = 'expand';
	}
	Dom.replaceClass(topCategoriesPanel,display,toggleDisplay);	
	Dom.replaceClass(topCategoriesChervron,chervron,toggleChervron);	
}

function mouseOverSuggest(el){
	Dom.addClass(el,'yui-ac-highlight');	
}

function mouseLeaveSuggest(el){
	Dom.removeClass(el,'yui-ac-highlight');		
}

function clickedSuggest(el){
	Dom.get('f').value = el.id;
	hideTopAreas();
}

function hideTopAreas(){
	topCategoriesChervron = Dom.get('locationChervron');
	Dom.replaceClass(topCategoriesChervron,'minimize','expand');
	hideElement('topCategories');
}

function hideElement(name){
	el = Dom.get(name);	
	Dom.replaceClass(el,'show','hide');	
}

/**
 * wraps settting/getting value of a radio element
 */
function createRadioHelper(formName,radioName) {
	//should return an enhanced radio element, or a new wrapper?
	
	var o ={};
	var radioObj = document.forms[formName].elements[radioName];
	
	o.getValue = function () {
		var radioLength = radioObj.length;
		if(radioLength == undefined)
			if(radioObj.checked || radioObj.checked=='checked')
				return radioObj.value;
			else
				return "";
		for(var i = 0; i < radioLength; i++) {
			if(radioObj[i].checked) {
				return radioObj[i].value;
			}
		}
		return undefined;
	}

	/**
	 * set the radio button with the given value as being checked
	 * do nothing if there are no radio buttons
	 * if the given value does not exist, all the radio buttons are reset to unchecked
	 */
	o.setValue = function (newValue) {
		var radioLength = radioObj.length;
		if(radioLength == undefined) {
			radioObj.checked = (radioObj.value == newValue.toString());
			return;
		}
		for(var i = 0; i < radioLength; i++) {
			radioObj[i].checked = false;
			if(radioObj[i].value == newValue.toString()) {
				radioObj[i].checked = true;
			}
		}
	}
	//and return the wrapper
	return o;
}

function createAutoComplete ( config ) {
	var o = {};

	var input = YAHOO.util.Dom.get(config.input);
	//turn off native autocomplete if present
	if (input.autocomplete) {
		input.autocomplete = false;
	}
	
	o.source = new YAHOO.widget.DS_XHR(config.url, [config.resultsArrayName, config.fieldName]); 
	o.source.maxCacheEntries = 0;

	o.complete = new YAHOO.widget.AutoComplete(config.input, config.suggestPlaceholder, o.source);
	o.complete.autoHighlight	= false;
	o.complete.animVert		= false;
	o.complete.queryDelay		= 0.25;
	o.complete.minQueryLength = 3;
	o.complete.maxResultsDisplayed	= 10;
	o.complete.allowBrowserAutocomplete = false;

	return o;	
}


function initSearch () {

	var auto;
	var config;

	config = {
		url:'/services/business-search.php',
		resultsArrayName:'results',
		fieldName:'name',
		input:'k',
		suggestPlaceholder:'kSuggest'
	}
	auto = createAutoComplete(config);

	//replace the default parameter name eg for ?address=string
	auto.source.scriptQueryParam = 'q'; 
	auto.complete.minQueryLength = 2;

	//location
	var autoLocation;
	autoLocation = createAutoComplete(
		{
			url:'/services/location-search.php',
			resultsArrayName:'results',
			fieldName:'name',
			input:'f',
			suggestPlaceholder:'fSuggest'
		}
	);
	autoLocation.source.scriptQueryParam = 'q'; 
	autoLocation.complete.minQueryLength = 2;

	Event.addListener('locationChervron','click',function () {displayTopCategories();});	
	Event.addListener(document.getElementsByName('top_area'), 'mouseover', function () {mouseOverSuggest(this)});	
	Event.addListener(document.getElementsByName('top_area'), 'mouseout', function () {mouseLeaveSuggest(this)});
	Event.addListener(document.getElementsByName('top_area'), 'click', function () {clickedSuggest(this)});	
}


	pageReadyEvent.subscribe(initSearch);
