var imagesURL  = getImagesLoc();
var ajaxURL    = getAjaxLoc();

var SearchFilter = {
	locationType:             0,
	locationCityName:         '',
	locationCityDesc:         '',
	locationStateName:        '',
	locationStateDesc:        '',
	locationCountryName:      '',
	locationCountryDesc:      '',
  formName:                 'searchForm',
  
  setFormName: function(searchFormName) {
    SearchFilter.formName = searchFormName;
  },

  doSearch: function(formName) {
    $j("#paginate").val("0");
  	$j("#"+formName).submit();
  },
  
  displayPriceSelect: function() {
    $j("#enterPrice").fadeOut("fast", function() {
      $j("#ad_price").val("");
      // needed for SearchFilter.getResultCount() to work properly
      $j("#ad_price").trigger("change");
      
      if($j("#price_choose").val() != ""){
        $j("#price_choose").val("free");
      }
      $j("#priceSelect").fadeIn("fast");
    });
  },
  
  togglePrice: function() {
    if($j("#price_choose").val() == "notfree") {
      $j("#priceSelect").fadeOut("fast", function() {
        $j("#enterPrice").fadeIn("fast");
      });
    } else if($j("#price_choose").val() == "free") {
      $j("#ad_price").val("0");
      // needed for SearchFilter.getResultCount() to work properly
      $j("#ad_price").trigger("change");
    } else  {
      SearchFilter.displayPriceSelect();
    }
  },
  
	logLocation: function() {
		console.log("locationType = " + SearchFilter.locationType);
		console.log("locationCountryName = " + SearchFilter.locationCountryName);
		console.log("locationCountryDesc = " + SearchFilter.locationCountryDesc);
		console.log("locationStateName = " + SearchFilter.locationStateName);
		console.log("locationStateDesc = " + SearchFilter.locationStateDesc);
		console.log("locationCityName = " + SearchFilter.locationCityName);
		console.log("locationCityDesc = " + SearchFilter.locationCityDesc);
	},
  
  locationSearch: function(name, desc, locType, doSearch) {
  	var name = name ? name : '';
  	var desc = desc ? desc : '';
  	var doSearch = doSearch == false ? false : true;
  	
  	SearchFilter.locationType = locType;
  	
  	// if the location is a city then we are done searching for a location
  	if(SearchFilter.locationType == 2) { // city
  		SearchFilter.setLocationCity(name, desc);
	  	SearchFilter.hidePopup("filterLocation");
	  	
  	} else if(SearchFilter.locationType == 1) { // state
  		SearchFilter.setLocationState(name, desc);
			SearchFilter.setLocationCity('', '');
			if(doSearch) {
	  		SearchFilter.doLocationSearch(SearchFilter.locationType);
			}
	
  	} else { // country
  		SearchFilter.setLocationCountry(name, desc);
  		SearchFilter.setLocationState('', '');
			SearchFilter.setLocationCity('', '');
			if(doSearch) {
	  		SearchFilter.doLocationSearch(SearchFilter.locationType);
			}
  	}
//SearchFilter.logLocation();
  	SearchFilter.setLocationAnchorString(SearchFilter.locationType);
  },
  
  doLocationSearch: function(locationType) {
  	switch(locationType) {
  		case '1': // state
  			locationName = SearchFilter.locationStateName;
  			break;
  			
  		default: // country
  			locationName = SearchFilter.locationCountryName;
  			break;
  	}

  	var locationContent = $j.ajax({
				type: "POST",
				url: ajaxURL + "ad/location_search.php",
				data: ({ 
					'loc': locationName,
					'resultTemplate': 'ad/loc/location_results'
				}),
				success: function(msg){
				 $j("#filterLocationPopup").html(msg);
				}
			});
  },
  
  locationSearchGoBack: function(currentLocationType) {
  	// can only go back if the currentLocationType is states or cities
  	if(currentLocationType > 0) {
	  	if(currentLocationType == 2) { // city
	  		 // search for states
	  		SearchFilter.locationSearch('', '', 1);
	  		SearchFilter.setLocationAnchorString(1);
	  	
	  	} else { // state
	  		// search for countries
	  		SearchFilter.locationSearch('', '', 0);
	  		SearchFilter.setLocationAnchorString(0);
	  	}
  	}
  },
  
  setLocationCountry: function(name, desc) {
  	SearchFilter.locationCountryName = name;
		SearchFilter.locationCountryDesc = desc;
		$j("#ad_loc_country").val(name);
		
		// needed for SearchFilter.getResultCount() to work properly
		$j("#ad_loc_country").trigger("change");
  },
  
  setLocationState: function(name, desc) {
  	SearchFilter.locationStateName = name;
		SearchFilter.locationStateDesc = desc;
		$j("#ad_loc_state").val(name);
		
		// needed for SearchFilter.getResultCount() to work properly
		$j("#ad_loc_state").trigger("change");
  },
  
  setLocationCity: function(name, desc) {
  	SearchFilter.locationCityName = name;
		SearchFilter.locationCityDesc = desc;
		$j("#ad_loc_city").val(name);
		
		// needed for SearchFilter.getResultCount() to work properly
		$j("#ad_loc_city").trigger("change");
  },
  
  setLocationAnchorString: function(locationType) {
  	var anchorString;
  	var locationType = locationType ? locationType.toString() : null;

  	switch(locationType) {
  		case '0': // country
  			anchorString = SearchFilter.locationCountryDesc;
  			break;
  			
  		case '1': // state
  			anchorString = SearchFilter.locationStateDesc + " "+ SearchFilter.locationCountryDesc;
  			break;
  			
  		case '2': // city
  			anchorString = SearchFilter.locationCityDesc + ", " + SearchFilter.locationStateDesc;
  			break;
  			
  		default:
  			anchorString = "(any)";
  			break;
  	}
//  	console.log("setting anchor string to " + anchorString);
  	$j("#filterLocationAnchor").html(anchorString);
  },
  
  displayLocPopup: function() {
		var filterPopup    = $j("#filterLocationPopup");
		var filterPosition = $j("#filterLocation").offset();
		var filterAnchorPosition = $j("#filterLocationAnchor").offset();
		var dataFilterPosition = $j(".dataFilter").offset();
    filterPopup.css( { 'position': 'absolute',
				               'top': dataFilterPosition.top,
                       'left': dataFilterPosition.left + $j(".dataFilter").width() + 28,
				               'height': $j(".dataFilter").height()
										 });
    filterPopup.fadeIn("fast");
  },
  
  displayPopup: function(filterId) {
		var filterPopup    = $j("#" + filterId + "Popup");
		var filterPosition = $j("#" + filterId).offset();
		
    filterPopup.css( { 'position': 'absolute',
				               'top': filterPosition.top + $j("#" + filterId).height() + 11,
				               'left': filterPosition.left
										 });
    filterPopup.fadeIn("fast");
  },

  hidePopup: function(filterId) {
		$j("#" + filterId + "Popup").hide();
		//	  	$j("#" + filterId + "Popup").fadeOut("fast");
  },

  togglePopup: function(filterId) {
    if($j("#" + filterId + "Popup").css("display") == "block") {
      SearchFilter.hidePopup(filterId);
    } else {
      SearchFilter.displayPopup(filterId);
    }
  },
  
  locationSearchCallback: function() {
    SearchFilter.getResultCount();
  },
  
  getResultCount: function() {
    $j.ajax({
  		type: "POST",
  		url: ajaxURL + "ad/list/get_filter_result_count.php",
      data: $j("#"+SearchFilter.formName).serialize(),
  		beforeSend: function() {
  		  $j("#filterNumResultsVal").html("<img src='"+imagesURL+"loading_small.gif'/>");
  		},
  		complete: function() {
//  		  $j("loading").html("&nbsp;");
  		},
  		success: function(msg){
  		  $j("#filterNumResultsVal").html(msg);
  		  $j("#filterNumResults").show();
  		}
  	});
  },
  
  addEventListeners: function() {
    $j("#ad_gender").change(
      function() {
        SearchFilter.getResultCount();
      }
    );
    $j("#ad_size").change(
      function() {
        SearchFilter.getResultCount();
      }
    );
    $j("#ad_width").change(
      function() {
        SearchFilter.getResultCount();
      }
    );
    $j("#ad_price").change(
      function() {
        SearchFilter.getResultCount();
      }
    );
    $j("#ad_brand").change(
      function() {
        SearchFilter.getResultCount();
      }
    );
    $j("#ad_loc_country").change(
      function() {
        SearchFilter.getResultCount();
      }
    );
    $j("#ad_loc_state").change(
      function() {
        SearchFilter.getResultCount();
      }
    );
    $j("#ad_loc_city").change(
      function() {
        SearchFilter.getResultCount();
      }
    );
    
		$j("#filterLocationAnchor").hover(
			function() {
				SearchFilter.displayLocPopup();
			}, 
			function() {}
		);
		$j("#filterLocationPopup").hover(
			function() {}, 
			function() {
				SearchFilter.hidePopup("filterLocation");
			}
		);
  }
}