
function showAddress(address, zoomLevel) {
  if (address.length < 3) { return false; }
  // console.log('showAddress');
  new GClientGeocoder().getLatLng(
    address,
    function(point, zoomLevel) {
      if (!point) {
        clearMarker();
      } else {
        setMarker(point, zoomLevel);
      }
    }
  );
  return true;
}  

function clearMarker() {
  $('parkLatLon').value = '';
}

function setMarker(point, zoomLevel) {
  // console.log('setMarker(' + point + ')');
  map.setCenter(point, zoomLevel);
  var marker = new GMarker(point, {draggable: true, icon: sparkMarker});
  $('parkLatLon').value = marker.getLatLng();
  GEvent.addListener(marker, "dragend", function() { $('parkLatLon').value = marker.getLatLng() });
  map.addOverlay(marker);
}

function updateMapFromTextField(textfield, zoomLevel, displayMarker) {
    map.clearOverlays(); 
    showAddress($F(textfield), zoomLevel);
}

function updateMap(zoomLevel) {
  // console.log('display=' + $('sparkLiveSearchList').style['display']);
  if ($('sparkLiveSearchList').style['display'] == 'none') {
    updateMapFromTextField('deed_address', zoomLevel, false);
  }
}

function searchLive(query, addresses) {
  // console.log('searchLive(' + query + ')');
  matches = searchForIn(query, addresses);
  new_list = '';
  matches.each(function(item) {
    item = boldify(item, query);
    new_list += '<li>' + item + '</li>';
  });
  return '<ul>' + new_list + '</ul>';
}

function searchForIn(query, addresses) {
  query = query.toLowerCase();
  match_string = '.*';
  for(i=0; i < query.length;i++) {
    match_string = match_string + query[i] + '.*';
  };
  matches = new Array();
  addresses.each(function(address) {
    address = address.toLowerCase();
    if (address.match(match_string) != null) {
      matches.push(address);
    };
  })
  return matches;
}

function boldify(item, query) {
  query = query.toLowerCase();
  
  boldified = '';
  for(i=0; i < query.length;i++) {
    item.match('([^'+query[i]+']*)' + query[i] + '(.*)');
    item = RegExp.$2;
    // console.log('re2=' + item);
    boldified += RegExp.$1;
    // console.log('re1=' + RegExp.$1);
    // console.log('boldified = ' + boldified);
    boldified += '<b>' + query[i] + '</b>';
  }
  boldified += item;
  
  return boldified;
}

function update_field_value_on_focus(field, default_text) {
  if (field.value == default_text) { empty_field(field); }
}

function update_field_value_on_blur(field, default_text) {
  if (field.value == '') { field.value = default_text; }
}

function empty_field(field_id) {
	$(field_id).value='';
}

function setFocus() {
  id_to_focus = '<%= h(focus_id || "query") %>';
  if (element_to_focus = $(id_to_focus)) {
    element_to_focus.focus();      
  }
}

/**
	Crossbrowser DOM Scripting: Event Handlers
	By Scott Andrew LePera
	http://www.scottandrew.com/weblog/articles/cbs-events
*/
function addEvent(obj, evType, fn, useCapture){
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be attached");
  }
}

Event.observe(window, 'load',
    function() {
        Nifty('div.sparkHelpBubble', 'big');
    }
);


