function load_search_tab(container, type, city, arrival, departure, rooms, adults, children, dogs, lodging_type) {
	var search_tab_callback = {
		success : function(o) {
			container.innerHTML = o.responseText;
			YAHOO.util.Event.onContentReady('id_location', 
											function() { 
												init_city_ac("id_location", "location_matches", "location_feedback", locationFeedbackHandler);
												initClearDefaultText(container);
											} );
			if (type=='lodging') {
				YAHOO.util.Event.onContentReady('id_departure',
												function() { init_calendar_pair("id_arrival","cal_arrive_box","Check-in Date",
																				"id_departure","cal_depart_box","Check-out Date") } );
			}
		},
		failure : function(o) {
			container.innerHTML = 'Sorry. There was an error loading the search tab.';
		},
		scope : this
	}
	var tab_url = '/' + type + '/tab/search/';
	if (city != null) {
		tab_url += '?city=' + city;
		if (lodging_type) {
			tab_url += '&type=' + lodging_type;
		}
		
		if (arrival != null && departure != null && rooms != null && adults != null && children != null && dogs != null) {
			tab_url += '&arrival=' + arrival + '&departure=' + departure + '&rooms=' + rooms + '&adults=' + adults + '&children=' + children + '&dogs=' + dogs;
		}
	}
	else if (lodging_type) {
		tab_url += '?type=' + lodging_type;
	}
	var conn = YAHOO.util.Connect.asyncRequest('GET', tab_url, search_tab_callback);
}

function init_search_tabs(city, simple, arrival, departure, rooms, adults, children, dogs) {
	if (simple) {
		YAHOO.util.Event.on('btn_stay', 'click', function() { load_hotel_search_simple(city); });
	}
	else {
		YAHOO.util.Event.on('btn_stay', 'click', function() { load_hotel_search(city, arrival, departure, rooms, adults, children, dogs); });
	}
	YAHOO.util.Event.on('btn_play', 'click', function() { load_play_search(city); });
	YAHOO.util.Event.on('btn_eat', 'click', function() { load_food_search(city); });
}

function load_hotel_search(city, arrival, departure, rooms, adults, children, dogs) {
	YAHOO.util.Event.onDOMReady(function() {_load_hotel_search('lodging', city, arrival, departure, rooms, adults, children, dogs)});
}

function load_hotel_search_simple(city, lodging_type) {
	YAHOO.util.Event.onDOMReady(function() {_load_hotel_search('lodging/simple', city, null, null, null, null, null, null, lodging_type)});
}

function load_play_search(city) {
	YAHOO.util.Event.onDOMReady(function() {_load_play_search(city)});
}

function load_food_search(city) {
	YAHOO.util.Event.onDOMReady(function() {_load_food_search(city)});
}


/* ************************ */
/* *** Hotel Search Tab *** */
/* ************************ */

function _load_hotel_search(mode, city, arrival, departure, rooms, adults, children, dogs, lodging_type) {
	var btn_stay = document.getElementById('btn_stay');
	var btn_play = document.getElementById('btn_play');
	var btn_eat = document.getElementById('btn_eat');

	YAHOO.util.Dom.removeClass(btn_play, 'hover');
	YAHOO.util.Dom.removeClass(btn_eat, 'hover');
	YAHOO.util.Dom.addClass(btn_stay, 'hover');

	var search_container = document.getElementById('search_box_contents');
	load_search_tab(search_container, mode, city, arrival, departure, rooms, adults, children, dogs, lodging_type);
}

function submit_hotel_search(mode) {
	clearAllDefaultText();

	var search_form = document.getElementById('tab_search');
	search_form.action = '/' + mode + '/tab/search/';

	var container = document.getElementById('search_box_contents');
	var search_tab_callback = {
		success : function(o) {
			if (o.responseText.search(/^\s*SUCCESS:\s*([^\s]+)\s*$/)>=0) {
				var next_page = RegExp.$1;
				// form_content.innerHTML = "<span class='loading'>Loading...</span>"
				// alert("success! should now send user to booking page...");
				document.location = next_page;
			}
			else {
				container.innerHTML = o.responseText;
				if (mode=='lodging') {
					init_calendar_pair("id_arrival","cal_arrive_box","Check-in Date",
									   "id_departure","cal_depart_box","Check-out Date");
				}
				init_city_ac("id_location", "location_matches");
				initClearDefaultText(container);
			}
		},
		failure : function(o) {
			container.innerHTML = 'Sorry. There was an error loading the search tab.';
		},
		scope : this
	}	
	var post_data = YAHOO.util.Connect.setForm(search_form);
	var conn = YAHOO.util.Connect.asyncRequest('POST', search_form.action, search_tab_callback, post_data);
}

/* ***************************** */
/* *** Attraction Search Tab *** */
/* ***************************** */

function _load_play_search(city) {
	var btn_stay = document.getElementById('btn_stay');
	var btn_play = document.getElementById('btn_play');
	var btn_eat = document.getElementById('btn_eat');

	YAHOO.util.Dom.removeClass(btn_stay, 'hover');
	YAHOO.util.Dom.removeClass(btn_eat, 'hover');
	YAHOO.util.Dom.addClass(btn_play, 'hover');

	var search_container = document.getElementById('search_box_contents');
	load_search_tab(search_container, 'attraction', city);
}

function submit_attraction_search() {
	clearAllDefaultText();

	var search_form = document.getElementById('tab_search');
	search_form.action = '/attraction/tab/search/';

	var container = document.getElementById('search_box_contents');
	var search_tab_callback = {
		success : function(o) {
			if (o.responseText.search(/^\s*SUCCESS:\s*([^\s]+)\s*$/)>=0) {
				var next_page = RegExp.$1;
				document.location = next_page;
			}
			else {
				container.innerHTML = o.responseText;
				init_city_ac("id_location", "location_matches");
			}
		},
		failure : function(o) {
			container.innerHTML = 'Sorry. There was an error loading the search tab.';
		},
		scope : this
	}	
	var post_data = YAHOO.util.Connect.setForm(search_form);
	var conn = YAHOO.util.Connect.asyncRequest('POST', search_form.action, search_tab_callback, post_data);
}

/* ***************************** */
/* *** Restaurant Search Tab *** */
/* ***************************** */

function _load_food_search(city) {
	var btn_stay = document.getElementById('btn_stay');
	var btn_play = document.getElementById('btn_play');
	var btn_eat = document.getElementById('btn_eat');

	YAHOO.util.Dom.removeClass(btn_play, 'hover');
	YAHOO.util.Dom.removeClass(btn_stay, 'hover');
	YAHOO.util.Dom.addClass(btn_eat, 'hover');

	var search_container = document.getElementById('search_box_contents');
	load_search_tab(search_container, 'restaurant', city);
}

function submit_food_search() {
	clearAllDefaultText();

	var search_form = document.getElementById('tab_search');
	search_form.action = '/restaurant/tab/search/';

	var container = document.getElementById('search_box_contents');
	var search_tab_callback = {
		success : function(o) {
			if (o.responseText.search(/^\s*SUCCESS:\s*([^\s]+)\s*$/)>=0) {
				var next_page = RegExp.$1;
				document.location = next_page;
			}
			else {
				container.innerHTML = o.responseText;
				init_city_ac("id_location", "location_matches");
			}
		},
		failure : function(o) {
			container.innerHTML = 'Sorry. There was an error loading the search tab.';
		},
		scope : this
	}	
	var post_data = YAHOO.util.Connect.setForm(search_form);
	var conn = YAHOO.util.Connect.asyncRequest('POST', search_form.action, search_tab_callback, post_data);
}


/* ******************************** */
/* *** Advanced  Search Options *** */
/* ******************************** */

function toggle_advanced_options(control) {
	var advanced_options = document.getElementById('advanced_search_options');
	var refine_search_options = document.getElementById('refine_box');
	
	if (refine_search_options) {
		if (refine_search_options.style.display=='none') {
			refine_search_options.style.display = 'block';
			control.innerHTML = 'Basic Search';
		}
		else {
			refine_search_options.style.display = 'none';
			control.innerHTML = 'Advanced Search';
		}
	}
	else if (advanced_options) {
		if (advanced_options.style.display=='none') {
			advanced_options.style.display = 'block';
			control.innerHTML = 'Basic Search';

			if (!advanced_options.rate_slider) {
				advanced_options.rate_slider = new BFSliderControl(	'rate_sliderbg',
																	['rate_thumbmin','rate_thumbmax'],
																	['rate_labelmin','rate_labelmax'],
																	[0,1000],
																	['rate_low','rate_high'],
																	function(v) { return '$' + String(v); });
			}

			if (!advanced_options.rating_slider) {
				advanced_options.rating_slider = new BFSliderControl('rating_sliderbg',
																	['rating_thumbmin','rating_thumbmax'],
																	['rating_labelmin','rating_labelmax'],
																	[0,5],
																	['rating_low','rating_high'],
																	function(v) { return String(v) + ' Bones'; });
			}
		}
		else {
			advanced_options.style.display = 'none';
			control.innerHTML = 'Advanced Search';
		}
	}
}


/* ********************************* */
/* *** Customized Slider Control *** */
/* ********************************* */

function BFSliderControl(sliderbg, thumbs, labels, 
						 values, inputs, valueDecorator)
{
	this.sliderbg = sliderbg;
	this.slider = null;
	this.valueDecorator = valueDecorator;

	if (thumbs && thumbs.length>1) {
		this.thumbmin = thumbs[0];
		this.thumbmax = thumbs[1];
	}
	
	if (labels && labels.length>1) {
		this.labelmin = labels[0];
		this.labelmax = labels[1];
	}
	
	if (values && values.length>1) {
		this.minval = values[0];
		this.maxval = values[1];
	}
	
	if (inputs && inputs.length>1) {
		this.inputmin = inputs[0];
		this.inputmax = inputs[1];
	}

	this.init();
}

BFSliderControl.prototype.convertSliderValue = function(value) {
	var converted = Math.floor((value/170)*(this.maxval-this.minval)+this.minval);
	return converted;
}

BFSliderControl.prototype.updateSlider = function() {
	this.minval_curr = this.convertSliderValue(this.slider.minVal);
	this.maxval_curr = this.convertSliderValue(this.slider.maxVal);
	
	if (this.labelmin) {
		var displayVal = this.valueDecorator ? this.valueDecorator(this.minval_curr) : this.minval_curr;
		document.getElementById(this.labelmin).innerHTML = displayVal;
	}
	if (this.labelmax) {
		var displayVal = this.valueDecorator ? this.valueDecorator(this.maxval_curr) : this.maxval_curr;
		document.getElementById(this.labelmax).innerHTML = displayVal;
	}
	
	if (this.inputmin) {
		document.getElementById(this.inputmin).value = this.minval_curr;
	}
	if (this.inputmax) {
		document.getElementById(this.inputmax).value = this.maxval_curr;
	}
}

BFSliderControl.prototype.init = function() {
	if (!this.slider) {
		this.slider = YAHOO.widget.Slider.getHorizDualSlider(this.sliderbg,this.thumbmin,this.thumbmax,170);
		this.slider.manager = this;
		this.slider.subscribe("slideEnd", function() { this.manager.updateSlider(); } );
		this.slider.subscribe("ready", function() { this.manager.updateSlider(); } );
	}
	else {
		this.updateSlider();
	}
}
