function search_go(page_offset) {

  $('search_progress').style.visibility = 'visible';
  $('search-results').style.opacity = 0.25;

  var query = encodeURIComponent($('searchQuery').value);
  var filter = get_filter();

	var myXHR = new XHR({method:'post',onSuccess:function(results){

		var return_obj = Json.evaluate(results);

		if (return_obj["success"]==true) {

      $('filter-hotspots').getElementsByTagName('p')[0].innerHTML = '(' + return_obj['results']['h'] + ')';

      $('filter-places').getElementsByTagName('p')[0].innerHTML = '(' + return_obj['results']['p'] + ')';

      $('filter-people').getElementsByTagName('p')[0].innerHTML = '(' + return_obj['results']['u'] + ')';

      if ($('filter-trips'))
        $('filter-trips').getElementsByTagName('p')[0].innerHTML = '(' + return_obj['results']['t'] + ')';

		  if(return_obj["results"]["results"].length > 0) {

  // populate the results
        $('search-results').innerHTML = "";

        for (var i = 0; i < return_obj["results"]["results"].length; ++i) {

          var item = return_obj["results"]["results"][i];

          var li = new Element('li').injectInside( $('search-results') );
          var h2 = new Element('h2').injectInside(li);

          switch (item.type) {

            case 'p':
              var a = new Element('a', { 'href':'javascript:place_show('+item.lat+','+item.lng+')' } ).injectInside(h2);
              break;

            case 'h':
              var a = new Element('a', { 'href':'javascript:hotspot_show('+item.id+')' } ).injectInside(h2);
              break;

            case 't':
              var a = new Element('a', { 'href':'javascript:trip_show('+item.id+')' } ).injectInside(h2);
              break;

            case 'u':
              var a = new Element('a', { 'href':'javascript:user_show('+item.id+')' } ).injectInside(h2);
              break;

            default: break;
          }
//          var score = new Element('span', { 'class':'score' }).setHTML('('+item.score+') ').injectInside(a);
          a.innerHTML += item.name;

          if (item.type != 'p') {
            if (item.geoscale)
              var h3 = new Element('h3').setHTML(item.geoscale).injectInside(li);
            var p = new Element('p').setHTML(item.short_desc).injectInside(li);
          }
        }

		  } else {

		    switch (filter) {

          case 'p':
            $('search-results').innerHTML = '<p>no place matches found</p>';
            break;

          case 'h':
            $('search-results').innerHTML = '<p>no hotspot matches found</p>';
            break;

          case 't':
            $('search-results').innerHTML = '<p>no trip matches found</p>';
            break;

          case 'u':
            $('search-results').innerHTML = '<p>no people matches found</p>';
            break;

		    }
		  }

// populate the pagination

      $('search-results-paging').innerHTML = "";

      var pages = return_obj["results"]["pages"];

      if (pages > 1) {

        var page_active = return_obj["results"]["page"];
        var page_prev = page_active == 1 ? 1 : page_active - 1;
        var page_next = page_active == pages ? pages : page_active + 1;

        var start_page = Math.floor((page_active - 1) / 5);

        start_page = (start_page * 5) + 1;

        var nav = "<p>";

        if (start_page > 1) {

  // add a link to the previoius set of pages
          nav += "<a href=\"javascript:search_go(" + (start_page - 1) + ")\">...,</a>";
        }

        for (var i = 0; i < 5 && (start_page + i) <= pages; ++i ) {

          var page = start_page + i;

          var link = "javascript:search_go(" + page + ")";

          nav += "<a href=\"" + link + "\">";

          if (page_active == (page) ) {

  // highlight the active page
            nav += "<em>" + (page) + "</em>";

          } else {

            nav += (page);
          }

          if (i < 4 && (page < pages ) ) {

            nav += ",";
          }

          nav += "</a>";

          if (i == 4 && (page < pages )) {

  // add a link to next set of pages
            nav += '<a href="javascript:search_go(' + (page + 1) + ')">, ...</a>';
          }
        }
        nav += "</p>";

        if (page_active != page_prev) {

          nav += '<a href="javascript:search_go(' + page_prev + ')" id="prev">&lt; Prev</a>';
        }

        if (page_active != page_next) {

          nav += '<a href="javascript:search_go(' + page_next + ')" id="next">Next &gt;</a>';
        }

        $('search-results-paging').innerHTML = nav;
      }

      $('search-results-container').scrollTo(0, 0);

		} else {

      $('search-results').innerHTML = return_obj["message"];

		}
    $('search_progress').style.visibility = 'hidden';
    $('search-results').style.opacity = 1.0;

	}}).send('/php/controller_hotspot.php', "action=search&query=" + query + "&page=" + page_offset + '&filter=' + filter);

}

/* filter the search results
-----------------------------------------------*/
function search_filter(filter) {

  search_reset();

  switch (filter) {

    case 'p':

      $('filter-places').className='sel';

    break;

    case 'u':

      $('filter-people').className='sel';

    break;

    case 't':

      if($('filter-trips'))
        $('filter-trips').className='sel';

    break;

    default:

      $('filter-hotspots').className='sel';

    break;
  }

  search_go(1);
}

/* filter the search results
-----------------------------------------------*/
function search_reset() {

//  $('search-results').innerHTML = '';

  $('filter-hotspots').className='';

  $('filter-places').className='';

  $('filter-people').className='';

  if ($('filter-trips'))
    $('filter-trips').className='';

}


/* filter the search results
-----------------------------------------------*/
function get_filter() {

  var filter = 'h';

  if ($('filter-places').className == 'sel') filter = 'p';
  if ($('filter-people').className == 'sel') filter = 'u';
  if ($('filter-trips') && $('filter-trips').className == 'sel') filter = 't';

  return filter;

}

/* zoom to a geographic location
-----------------------------------------------*/
function place_show(lat, lng) {

  hotspot_close();
  profile_close();

  if (map.getZoom() > 10) {

    map.setCenter(new GLatLng(lat, lng) );

  } else {


    map.setCenter(new GLatLng(lat, lng), 12 );
  }
}


/* keep the 'About' search box in synch and initiate search if Enter pressed
-----------------------------------------------*/
function checkSearchEnter(event) {

  $('searchAbout').value = $('searchQuery').value;

  var event = new Event(event);

  if (event.key == 'enter') {

    search_go(1);

    return true;
  }
  return false;
}
