﻿// JScript File
var gLocalSearch;

function OnSearchLoad(){
  var drawOptions = new google.search.DrawOptions();       

  // Add in searcher
  gLocalSearch = new google.search.LocalSearch();
  gLocalSearch.setResultSetSize(google.search.Search.LARGE_RESULTSET);
}

function executeSearch(searchParam)
{
  var queryString = searchParam.get_QueryString();
  
  //Check to see if this group already exists (de-select) so we can remove it from the searchWell
  var elementName = searchParam.get_DOMElementName();

  if (null != mySearchWell.getElementByID(elementName)) 
  {
    mySearchWell.removeSection(elementName);
  }
  
  //Save the last search result
  lastSearchParam = searchParam;
  
  var param = new Array();
  param.push(searchParam.get_ShowHeader());  
  param.push(searchParam.get_FormatterFunc());
  param.push(searchParam.get_DOMElementName());
  param.push(searchParam.get_Icon());
  
  gLocalSearch.setSearchCompleteCallback(null, OnLocalSearchComplete, param);
  gLocalSearch.setCenterPoint(map.getCenter());
  gLocalSearch.execute(queryString);
}

function FailedComplete(error)
{
  RealSystem.trace(error.get_message());
}

function OnLocalSearchComplete()
{
  var section;
  // Recreate the searchParam object -- HACK: why can't we pass the original object in the callback?
  var searchParam = new Realosophy.Web.Client.POIOptions(null, arguments[2], null, arguments[3]);
  searchParam.set_ShowHeader(arguments[0]);
  searchParam.set_FormatterFunc(arguments[1]);
    
  var formatterFunc = searchParam.get_FormatterFunc();
  
  if( searchParam.get_ShowHeader() == true ) // Means we have a HeaderText option set
    section = mySearchWell.createSection(searchParam.get_DOMElementName(), searchParam.get_Header());
  else
    section = mySearchWell.createSection(searchParam.get_DOMElementName());
  
  for(var i = 0; i < gLocalSearch.results.length; i++)
  {
    var result = gLocalSearch.results[i];
    var ri = searchParam.get_Icon();
    
    var swi = new Realosophy.Web.Client.SearchWellItem(section, result, ri.ColdIcon, ri.HotIcon);
    swi.add_disposeItem(killLocalSearchWellItem);
    
    //Setup the marker click event and HTML
    var markerHTML = formatSearchResultMarker(result);
    swi.add_MarkerClick(markerHTML);
    
    swi.className('sr-result-container');
    var obj = formatterFunc(result);  
    $addHandler(obj, 'mouseover', hilitePOIMarker);
    $addHandler(obj, 'mouseout', hilitePOIMarker);
    $addHandler(obj, 'click', showPOIInfoWindow);   
       
    swi.appendChild(obj);
    section.add_SectionItem(swi);
    swi.showMarker();
  }
  //$addHandler(section.get_Item(), 'click', hiliteMarker);      
  mySearchWell.addSection(section);
}

function killLocalSearchWellItem(sender, e){
  var child = sender.get_ListItem().firstChild;
  $removeHandler(child, 'mouseover', hilitePOIMarker);
  $removeHandler(child, 'mouseout', hilitePOIMarker);
  $removeHandler(child, 'click', showPOIInfoWindow);  
  sender.remove_disposeItem(killLocalSearchWellItem);
}

function formatLocalSearchResult(result){
  var srl1 = document.createElement('div');
  var sb = new Sys.StringBuilder();
  sb.append("<font class=\'sr-result-line1\'>");
  sb.append(result.titleNoFormatting.toUpperCase());
  sb.append("</font>");
  sb.append("<br />");
  sb.append("<font class=\'sr-result-line2\'>");
  sb.append(result.streetAddress.toUpperCase());
  sb.append("</font>");
  
  srl1.innerHTML = sb.toString();
  return srl1;
}

function formatSearchResultMarker(result){
  var srl1 = document.createElement('div');
  var sb = new Sys.StringBuilder();
  sb.append("<font class=\'sr-result-line1\'>");
  sb.append(result.titleNoFormatting.toUpperCase());
  sb.append("</font>");
  sb.append("<br />");
  sb.append("<font class=\'sr-result-line2\'>");
  sb.append(result.streetAddress.toUpperCase());
  sb.append("</font>");
  
  srl1.innerHTML = sb.toString();
  return srl1;
}

function formatLocalSearchResultOneLine(result){
  var srl1 = document.createElement('div');
  var sb = new Sys.StringBuilder();
  sb.append("<font class=\'sr-result-line1\'>");
  sb.append(result.titleNoFormatting.toUpperCase());
  sb.append("</font>");
  sb.append("  ");
  sb.append("<font class=\'sr-result-line2\'>");
  sb.append(result.streetAddress.toUpperCase());
  sb.append("</font>");
  
  srl1.innerHTML = sb.toString();
  return srl1;
}

function getSearchWellItemElement(eventType, searchElement){
  var returnElement = null;
  
  if( eventType == 'School' ){    
    while( searchElement.tagName != "TABLE" ){
      searchElement = Sys.Browser.agent == Sys.Browser.Firefox ? searchElement.parentNode : searchElement.parentElement;
    } 
    searchElement = Sys.Browser.agent == Sys.Browser.Firefox ? searchElement.parentNode : searchElement.parentElement;
  } else {
    while( searchElement.className != "sr-result-container" ){
      searchElement = Sys.Browser.agent == Sys.Browser.Firefox ? searchElement.parentNode : searchElement.parentElement;
    }    
  }
  
  if( searchElement ) {
    var parentID = searchElement.id;  
    var grandParentID = searchElement = Sys.Browser.agent == Sys.Browser.Firefox ? searchElement.parentNode.id : searchElement.parentElement.id; 
    if( parentID != null && grandParentID != null ){
      var e = mySearchWell.getSectionByID(grandParentID);
      if(e){
        returnElement = e.getItemByID(parentID);
      }
    }
  }  
  return returnElement;
}

function showPOIInfoWindow(eventElement){
  var swi = getSearchWellItemElement('POI', eventElement.target);
  if( swi )
    swi.showInfoWindow();
}

function hilitePOIMarker(eventElement){
  var swi = getSearchWellItemElement('POI', eventElement.target);
  if( swi )
    swi.hiliteMarker();
}

/////////////////////////////////////////////////////////////////////////////////////
//************************Neighbourhoods*******************************************//
/////////////////////////////////////////////////////////////////////////////////////
function findDistrictByID(districtID)
{
  Realosophy.Web.Service.FindNearby.FindDistrictByID(districtID, OnFindDistrictComplete);
}

function OnFindDistrictComplete(result)
{
  if( result.length == 0 )
    return; 

  drawPolygon(result.Points);
}