// console.log();
var SearchForm = function() {

    var originDefaultValue = document.getElementById('origin').defaultValue;

    var searchTimeout;

    var clearTransientState = function() {
      $.cookie('lastCenter',null, {"path": '/', "expires": -1});
      $.cookie('lastLocation',null, {"path": '/', "expires": -1});
      $.cookie('lastZoom',null, {"path": '/', "expires": -1});
      $.cookie('trueZoom',null, {"path": '/', "expires": -1});
    };

    var buildFilters = function() {
	var out = {};

	var origin = $('#origin').val();
	var feature_filter = getFeatureFilter();
	var time_filter = getTimeFilter();

	if (origin) { out['origin'] = origin; }
	if (feature_filter.length) { out['features'] = feature_filter; }
	if (time_filter.day && time_filter.time) {
	    out['time'] = time_filter.time;
	    out['day'] = time_filter.day;
	}
	return out;
    };

    var getFeatureFilter = function() {
	return $.map($('#search_form .feature'),function(i) {
	    if ($(i).is(':checked')) {
		return $(i).val();
	    }
	});
    };

    var getTimeFilter = function() {
	if ($('#day_filter_now').is(':checked')) {
	    return {"day": "now", "time": "now"};
	} else if ($('#day_filter').is(':checked')) {
	    return {"day": $('#day').val(), "time": $('#time').val()};
	} else {
	    return {};
	}
    };

    var paramsToSWFAddress = function(obj) {
	var out = [];
	for (var i in obj) {
	    out.push([i,obj[i]].join(':'))
	}
	return '/' + out.join('/') + '/';
    };

    var toggleSpecificTime = function() {
	$('#day_filter_now').uncheck();
	if (!$('#day_filter').is(':checked')) {
	  $('#day').attr('disabled', 'disabled');
	  $('#time').attr('disabled', 'disabled');
	} else {
	  $('#day').removeAttr('disabled');
	  $('#time').removeAttr('disabled');
	}
    };

    var toggleRightNow = function() {
	$('#day_filter').uncheck();
	$('#day').attr('disabled', 'disabled');
	$('#time').attr('disabled', 'disabled');
    };

    var searchByKeyword = function() {
      $('#origin').addClass('loading');
      $.ajax({
	       url: '/locations/search_by_keyword?keywords=' + escape($('#origin').val()),
	       dataType: 'json',
	       type: 'get',
	       success: function(res) {
		   if (res.length) {
		     var items = $.map(res, function(i) {
				       return '<dt><a href="/locations/' + i.slug + '">' + i.name + '</a></dt><dd>' + i.city + ', ' + i.state + '</dd>';
			  	       });
		   } else {
		     var items = ['<dt>Sorry, nothing found for "' + $('#origin').val() + '"</dt>'];
		   }
		   items.push('<dt class="close_link"><a href="#" onclick="$(\'#keyword_search_results\').remove(); return false;">Close</a></dt>');
		   if ($('#keyword_search_results').html()) {
		     $('#keyword_search_results').html(items.join(''));
		   } else {
		     $('#origin').after('<dl id="keyword_search_results">'+items.join('')+'</dl>');
		   }
		   $('#origin').removeClass('loading');
	       }
	     });
    };

    return {
	init: function() {
  	    clearTransientState();
	    if ($('#day_filter_now').is(':checked')) {
		toggleRightNow();
	    } else if ($('#day_filter').is(':checked')) {
		toggleSpecificTime();
	    }
	    if ($('#search_by_keyword').is(':checked')) {
	      $('#origin').val('Enter Keywords');
	      originDefaultValue = 'Enter Keywords';
	      $('#search_form table').addClass('disabled');
	      $('#search_form input[type=submit]').attr('disabled', 'disabled');
	      $('#search_form input[type=checkbox]').attr('disabled', 'disabled');
	      $('#search_types span.search_type').removeClass('selected');
	      $($('#search_by_keyword').parents()[0]).addClass('selected');
	    }
	    $('#origin').bind('focus', function() {
		              if ($(this).val() == originDefaultValue) {
				$(this).val('');
			      }
			    });
	    $('#origin').bind('blur', function() {
			      if ($(this).val() == '') {
				$(this).val(originDefaultValue);
			      }
			    });
	    $('#origin').bind('keyup', function(e) {
				clearTimeout(searchTimeout);
				if (e.keyCode == 27 || !$('#origin').val()) {
				  $('#keyword_search_results').remove();
				} else if ($('#search_by_keyword').is(':checked')) {
				  searchTimeout = setTimeout(function() { searchByKeyword(); }, 700);
				}
			    });
	    $('#search_by_location').bind('click', function() {
				$('#origin').val(document.getElementById('origin').defaultValue);
           		        originDefaultValue = document.getElementById('origin').defaultValue;
                                $('#search_form table').removeClass('disabled');
				$('#search_form input[type=submit]').removeAttr('disabled');
				$('#search_form input[type=checkbox]').removeAttr('disabled');
				$('#search_types span.search_type').removeClass('selected');
				$($(this).parents()[0]).addClass('selected');
				$('#keyword_search_results').remove();
	                    });
	    $('#search_by_keyword').bind('click', function() {
	                        $('#origin').val('Enter Keywords');
				originDefaultValue = 'Enter Keywords';
			        $('#search_form table').addClass('disabled');
				$('#search_form input[type=submit]').attr('disabled', 'disabled');
				$('#search_form input[type=checkbox]').attr('disabled', 'disabled');
				$('#search_types span.search_type').removeClass('selected');
				$($(this).parents()[0]).addClass('selected');
	                    });

	},
	search: function() {
	  if (!$('#search_by_keyword').is(':checked')) {
	    if ($('#origin').val() == 'Enter Postal Code, City or Address' || $('#origin').val() == '') {
		alert('Please enter a location to search.');
		$('#origin').focus();
		$('#origin').val('');
		return false;
	    }
	    clearTransientState();
	    var params = buildFilters();
	    window.location = '/locations/map/#'+paramsToSWFAddress(params);
	  }
	  return false;
    	},
	toggleSpecificTime: function() {
	    toggleSpecificTime();
	},
	toggleRightNow: function() {
	    toggleRightNow();
	}
    };

}();

$(window).ready(SearchForm.init);