/*
	All search functions here.
*/

// Search Event Behavior Functions

Event.addBehavior({
	
	'body div#content_wrap div#contentwithsidebar form#search_form': function()
	{
		// Intialize 
		searchForm = new SearchForm();
		if (!$('ajax')) {
			$$('body').first().insert('<div id="ajax" style="display:none"></div>');
		}
	},
	
	// more/less options events
	
	'body div#content_wrap div#contentwithsidebar form#search_form .more_options:click': function()
	{
		searchForm.changeMode('advance');
		return false;
	},
	
	'body div#content_wrap div#contentwithsidebar form#search_form .less_options:click': function()
	{
		searchForm.changeMode('basic');
		return false;
	},
	
	// category events
	
	'body div#content_wrap div#contentwithsidebar form#search_form #basic_categories input.checkbox:click': function()
	{
		if (this.id == 'check_all_basic') {
			var checked = this.checked;
			if (this.checked == true){
				if ($('business_type')) {
					$('business_type').show();
					searchForm.setBO();
				}
			} else {
				if ($('business_type')) {
					$('business_type').hide();
				}
			}
			$$('body form#search_form div#basic_categories input').each(function(o){
				if (o.id == 'check_all_basic') $continue;
				if (o.disabled == false) o.checked = checked;
			});
			return;
		}
		
		if (this.id == 'search_basic_categories_BO'){
			
			if (this.checked == true){
				if ($('business_type')) {

					$('business_type').show();
					searchForm.setBO();
				}
			} else {
				if ($('business_type')) {
					$('business_type').hide();
				}
			}
		}
		
		if (this.checked == true) {
			$('search_advance_categories_'+this.value).selected = true;
		} else {
			$('search_advance_categories_'+this.value).selected = false;
		}
		
		var i = 0;
		$$('body form#search_form div#basic_categories input').each(function(o){
			if (o.checked) {
				i++;
			}
			if (i >= 11) {
				$('check_all_basic').checked = true;
			} else {
				$('check_all_basic').checked = false;
			}
		});
	},
	
	'body div#content_wrap div#contentwithsidebar form#search_form select#search_advance_categories:change': function()
	{
		$('business_type').hide();
		$$('body form#search_form input.basic_cats').each(function(o){
			o.checked = false;
		});
		$$('body form#search_form select#search_advance_categories option').each(function(o){

			if (o.selected == true) $('search_basic_categories_'+o.value.gsub(/[\-]+.*$/, '')).checked = true;
			if (o.value.startsWith('BO') && o.selected == true) {
				$('business_type').show();
				searchForm.setBO();
			}
		});
	},
	
	// location events
	
	'body div#content_wrap div#contentwithsidebar form#search_form select#search_addr_country:change': function() {
		searchForm.updateStates();
	},
	
	'body div#content_wrap div#contentwithsidebar form#search_form select#search_addr_state:change': function() {
		searchForm.updateSearchBy();
	},
	
	'body div#content_wrap div#contentwithsidebar form#search_form div#search_by_options a.search_by:click': function() {
		$$('body form#search_form div#search_by_options a.current').first().removeClassName('current');
		this.addClassName('current');
		$('search_search_by_type').value = this.id.gsub('search_by_', '');
		searchForm.updateSearchBy();
	},
	
	// change event for price range type
	
	'body div#content_wrap div#contentwithsidebar form#search_form select#search_search_type:change': function()
	{
		searchForm.updateSearchType();
	},
	
	// change event for price range type
	
	'body div#content_wrap div#contentwithsidebar form#search_form select#search_price_range_type:change': function()
	{
		searchForm.updatePriceRangeType();
	}
	
});

// Search Form Class
var SearchForm = Class.create();

SearchForm.prototype = {
	
	mode: 'basic',
	
	initialize: function(mode)
	{
		this.setMode(mode);
	},
	
	changeMode: function(mode) {
		this.setMode(mode);
		var oppsite = mode == 'basic' ? 'advance' : 'basic';
		
		if (mode == 'basic') {
			$('basic_header').show();
			$('advance_header').hide();
		} else {
			$('basic_header').hide();
			$('advance_header').show();
		}
		
		$('search_form').removeClassName(oppsite);
		$('search_form').addClassName(mode);
		$$('body #search_form .' + oppsite).invoke('hide'); // hide elements
		$$('body #search_form .' + mode).invoke('show'); // show elements
		
		this.setStates();
		
		
		// update styles
		if (this.mode == 'advance') {
			$('property_criteria').removeClassName('withbg');

		} else {
			$('property_criteria').addClassName('withbg');
		}
		
		this.setBO();
	},
	
	setBO: function (){

		if ($F('search_search_mode') == 'advance') {
			$('search_business_type').multiple = true;
			$('search_business_type').addClassName('bo_long');
		} else {
			$('search_business_type').multiple = false;
			$('search_business_type').removeClassName('bo_long');
		}
	},
	
	setMode: function (mode)
	{
		this.mode  = mode ? mode : $F('search_search_mode');
		$('search_search_mode').writeAttribute('value', this.mode);
	},
	
	setStates: function()
	{
		if (this.mode == 'advance') {
			$('search_addr_state').multiple = true;
			$('search_addr_state').addClassName('state_advance');
			$('search_addr_state').focus();
			this.showZipCodeMap();
		} else {
			$('search_addr_state').multiple = false;
			$('search_addr_state').removeClassName('state_advance');
		}
	},
	
	updateStates: function() {
		//this.ajaxLoadingOn('for_search_addr_state');
		new Ajax.Request('/search/listings/update_state/', {
			parameters:  'country=' + $F('search_addr_country'),
			evalScripts: true,
			onSuccess: function() {
				searchForm.ajaxLoadingOff('for_search_addr_state');
			}
		});
	},
	
	updateSearchBy: function()
	{

		var state = $F('search_addr_state') + ''; // make sure return val is a string
		var US = $A(["AL","AK","AZ","AR","CA","CO","CT","DE","FL","GA","HI","ID","IL","IN","IA","KS","KY","LA","ME","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","OH","OK","OR","PA","RI","SC","SD","TN","TX","UT","VT","VA","WA","WV","WI","WY"]);
		var CA = $A(["AB","BC","MB","NB","NL","NT","NS","NU","ON","PE","QC","SK","YT"]);
		if (US.indexOf(state) > -1) {
			$$('body select#search_addr_country option').each(function(o){
				if (o.value == 'US') o.selected = true;
				$break;
			});
		}
		if (CA.indexOf(state) > -1) {
			$$('body select#search_addr_country option').each(function(o){
				if (o.value == 'CA') o.selected = true;
				$break;
			});
		}
		if (this.mode == 'advance' && $F('search_addr_country') == 'US') {
			var target = $$('body form#search_form div#search_by_options a.current').first();
			this.ajaxLoadingOn(target);
			new Ajax.Request('/search/listings/update_search_by/', {
				parameters:  'search_by_type=' + $F('search_search_by_type') + '&state=' + $F('search_addr_state'),
				evalScripts: true,
				onSuccess: function(t) {
					searchForm.ajaxLoadingOff(target);
				}
			});
			this.showZipCodeMap();
		} else if (this.mode == 'basic'){
			new Ajax.Updater('county_container', '/search/listings/county_dropdown/' + $F('search_addr_state'));
		}
				
	},
	
	setCategories: function()
	{
		var search_type = $F('search_search_type');
		$$('body #basic_categories td').invoke('removeClassName', 'subdued');
		$$('body #basic_categories input').invoke('enable');
		$$('body #search_advance_categories option').invoke('show');
		
		// enable/disable categories
		switch (search_type)
		{
			case 'auction':
			case 'sale':
			case 'sold':
				$$('body #basic_categories input').each(function(o){
					if (o.hasClassName('lease_only')) {
						o.checked = false;
						o.disable();
					}
				});
				$$('body #search_advance_categories option').each(function(o){
					if (o.hasClassName('lease_only')) {
						o.selected = false;
						o.hide();
					}
				});
			break;
			
			case 'lease':
				$$('body #basic_categories input').each(function(o){
					if (o.hasClassName('sale_only')) {
						o.checked = false;
						o.disable();
						o.up('td').addClassName('subdued');
					}
				});
				$$('body #search_advance_categories option').each(function(o){
					if (o.hasClassName('sale_only')) {
						o.selected = false;
						o.hide();
					}
				});
			break;
		}
	},
	
	updateSearchType: function()
	{

		var search_type = $F('search_search_type');
		var price_range_type = $F('search_price_range_type');

				
						
		if (search_type == 'auction') {
			//$('search_price_range_l').value = '';
			//$('search_price_range_h').value = '';
			$('price_range_l').value = '';
			$('price_range_h').value = '';
			//$('search_price_range_l').disable();
			//$('search_price_range_h').disable();
			$('price_range_l').disable();
			$('price_range_h').disable();
			$('search_price_range_type').disable();
		} else {

			//$('search_price_range_l').enable();
			//$('search_price_range_h').enable();
			$('price_range_l').enable();
			$('price_range_h').enable();		
			$('search_price_range_type').enable();

		}

		if (search_type == 'sale' && (price_range_type == 'list_price' || price_range_type == 'land_sf' || price_range_type == 'land_acre' || price_range_type == 'auctions')) {
			return;
		}
		
		if (search_type == 'lease' && (price_range_type == 'sf_month' || price_range_type == 'sf_year')) {
			return;
		}

		switch (search_type)
		{
			case 'auction':
			case 'sale':
				var dateTile = 'Date Listed';
				var dateTip = 'Posted';
			case 'sold':
				var select = 'list_price';
				var dateTitle = 'Date Sold';
				var dateTip = 'Sold';
			break;
			
			case 'lease':
				var select = 'sf_month';
				var dateTitle = 'Date Listed';
				var dateTip = 'Posted';
			break;
			
			default:
				var select = '';
				var dateTitle = 'Date Listed';				
				var dateTip = 'Posted';
			break;
		}
		
		$$('body form#search_form select#search_price_range_type option').each(function(o) {
			if (o.value == select) {
				o.selected = true;
				$break;
			}
		});
		
		if ($('search_date_listed_start_label')) {
		
			$('search_date_listed_start_label').innerHTML = dateTitle;
			$('date_listed_tip').innerHTML = dateTip;
		}

		// enable/disable cats
		this.setCategories();
	},
	
	updatePriceRangeType: function()
	{
		var price_range_type = $F('search_price_range_type');
		
		$$('body form#search_form select#search_search_type option').each(function(o) {
			switch (price_range_type)
			{
				
				case 'list_price':
				case 'land_sf':
				case 'land_acre':
				case 'bld_sf':
				case 'bld_unit':
				case 'auctions':
					if (o.value == 'sale') {
						o.selected = true;
						$break;
					}
				break;
				
				case 'sf_month':
				case 'sf_year':
					if (o.value == 'lease') {
						o.selected = true;
						$break;
					}
				break;
			
			}
		});
		
		// enable/disable cats
		this.setCategories();
	},
	
	showZipCodeMap: function(target)
	{
		if ($F('search_search_by_type') == 'zip' && $F('search_addr_state').indexOf('NV') > -1) {
			$('zip_code_map').show();
		} else {
			$('zip_code_map').hide();
		}
	},
	
	ajaxLoadingOn: function(target)
	{
		busy = false;
		$(target).addClassName('loading');
	},
	
	ajaxLoadingOff: function(target)
	{
		$(target).removeClassName('loading');
		busy = true;
	}
	
};


/******************************************************************************
	Zip Code Map
******************************************************************************/

function showZipCodeMap()
{
		var str = '';
	// preselected zip codes
	var preSelected = [];

	for(var i= 0; i < $('search_search_by').options.length; i++) {			
		if 	($('search_search_by').options[i].selected ) preSelected.push($('search_search_by').options[i].value);
	}
	child = openWindowReturn('/zip_code/map/' + preSelected.join(",") , '_blank', 497, 600, 'yes');

	$('zip_code_map').show();

	/*// preselected zip codes
	var preSelected = $F('search_search_by');
	popup = new PopUp('480px');
	
	popup.showPopUp('/map/iframe/' + preSelected.join(',').gsub(':', ',').split(',').uniq());
	*/
}

function selectZipCodes(zip_codes)
{
	$$('#search_search_by option').each(function(o){
		if (zip_codes.indexOf(o.value) != -1) {
			o.selected = true;
		} else {
			o.selected = false;
		}
	});
	if (child && !child.closed) child.close()
	child = false;
	//popup.hidePopUp();
}

// Intialize Global searchForm Variable
var searchForm;
var popup;
var child = false;
