var map = null;
var label = null;
var control = null;
var i = 0;
var unmappedCount = 0;
//
var baseIcon = null;
var Icon = null;
//
var maxMappedListings = 200;
var gmarkers = [];
//var gobjects = [];
var images   = [];
var htmls    = [];
var labels   = [];

function search () {
  // hide search message
  $('p#search_message').html('Loading Search Results...');
  /* Show Loading Control */
  control.show();
  /* Clean Map */
  clean_map();
  /* Build Query String */
  queryString  = getQueryString() + '&';
  queryString += $("#search_form").formSerialize();
  /* Get Results */
  showLayer(null);
  $.getJSON("/idx/map/search.php" + queryString, function (jsonData) { process_it(jsonData) });
}

function search_new () {
  // hide search message
  $('p#search_message').html('Loading Search Results...');
  /* Show Loading Control */
  control.show();
  /* Clean Map */
  clean_map();
  /* Build Query String */
  queryString  = '?' + $("#search_form").formSerialize();
  //queryString += "&longitude=" + map.getCenter().lng() + "&latitude=" + map.getCenter().lat();
  showLayer(null);
  $.getJSON("/idx/map/search.php" + queryString, function (jsonData) { process_it(jsonData) });
}

function clean_map () {
  /* Clear Results */
  mapped_results = [];
  /* Clear Overlays */
  map.clearOverlays();
  /* Clear Side Results */
  $('#result_list').empty();
  /* Add BpLabel */
  map.addOverlay(label);
  /* Hide Statistics */
  //statistics_control.hide();
}

//process_it = function (json_file) {
process_it = function (jsonData) {

  var results_html = '';
  unmappedCount = '';

  //alert(jsonData.search_query);

  /* Get JSON Response */
  //var jsonData = eval('(' + jsonData + ')');

  if (jsonData.statistics) {
      $('#total_active').html(jsonData.statistics[0].total_active);
      $('#total_pending').html(jsonData.statistics[0].total_pending);
      $('#absorption_rate').html(jsonData.statistics[0].absorption_rate);
      $('#months_inventory').html(jsonData.statistics[0].months_inventory);
      $('#average_price').html(jsonData.statistics[0].average_price);
      $('#average_dom').html(jsonData.statistics[0].average_dom);
      //statistics_control.show();
  }

  /* Center Map */
  map.setCenter(jsonData.center);

  /* Parser Marker Data  */
  for (var i = 0; i < jsonData.markers.length; i++) {
	  /* Check for Cached Marker */
	  if (mapped_results[jsonData.markers[i].id] == undefined) {
		  /* Add Marker to Results Cache */
		  mapped_results[jsonData.markers[i].id] = jsonData.markers[i].id;
		  /* Create Marker */
		  if (jsonData.markers[i].point) {
			  var marker = createMarker(jsonData.markers[i].point, jsonData.markers[i].label, jsonData.markers[i].html);
			  map.addOverlay(marker);
			  /* Add Event Listeners To Marker */
			  var target = marker.getEventTarget();
			  GEvent.bindDom(target, 'click', marker, onMouseClick);
			  GEvent.bindDom(target, 'mouseover', marker, onMouseOver);
			  GEvent.bindDom(target, 'mouseout', marker, onMouseOut);
			  /* Add Data To Collections */
			  var index = gmarkers.length;
			  gmarkers[index]           = [];
			  gmarkers[index]['id']     = jsonData.markers[i].id;
			  gmarkers[index]['marker'] = marker;
			  images[marker.getId()]    = jsonData.markers[i].image;
			  htmls[marker.getId()]     = jsonData.markers[i].html;
			  labels[marker.getId()]    = jsonData.markers[i].label;
		  } else {
			  unmappedCount++;
		  }
	  }
	  results_html += jsonData.markers[i].list;
  }

  /* Unmapped Results */
  $('#result_list').empty();
  $('#result_list').html(results_html);
  //$('#result_list').html(jsonData.statistic_query);

  while (gmarkers.length > maxMappedListings) {
      removeMarker();
  }

  /* Hide Loading Control */
  control.hide();
}


function createMarker(point, name, html) {
  /* Create & Return BpMarker */
  var marker = new BpMarkerLight(point, { icon: HouseIcon });
  marker.setTooltip(label);
  return marker;
}

function onMouseOver() {
  //this.setImage('http://www.gmaptools.com/images/marker_yellow.png');
  // get tooltip text
  ilabel = labels[this.getId()];
  // show tooltip
  label.setHtml(ilabel);
  //alert(ilabel);
  label.setPoint(this.getTooltipPoint());
  label.show();
}

function onMouseOut() {
  //this.setImage('http://www.gmaptools.com/images/marker_red.png');
  //this.setImage('[map_icon]');
  label.hide();
}

function onMouseClick() {
  ihtml  = htmls[this.getId()];
  iimage = images[this.getId()];
  this.openInfoWindowHtml(ihtml);
//  this.openInfoWindowTabsHtml([
//	  new GInfoWindowTab("Details", ihtml),
//	  new GInfoWindowTab("Photo", "<img src=\"" + iimage + "\" style=\"width: 255px; height:200px\">"),
//	  new GInfoWindowTab("Inquire", "<form id=\"inquireForm\" onsubmit=\"return submitInquiry(this);\"><input type=\"hidden\" name=\"id\" value=\"" + this.getId() + "\"><table width=\"275\"> <tr>  <td align=\"center\" colspan=\"2\"><b>Inquire About Listing</b></td> </tr> <tr><td colspan=\"2\">&nbsp;</td></tr> <tr>  <td align=\"center\" colspan=\"2\" id=\"inquiryResponse\">&nbsp;</td> </tr> <tr>  <td align=\"right\"><b>* Full Name:</b></td>  <td align=\"left\"><input type=\"text\" name=\"full_name\" value=\"\" /></td> </tr> <tr>  <td align=\"right\"><b>Phone:</b></td>  <td align=\"left\"><input type=\"text\" name=\"phone\" value=\"\" /></td> </tr> <tr>  <td align=\"right\"><b>* Email:</b></td>  <td align=\"left\"><input type=\"text\" name=\"email\" value=\"\" /></td> </tr> <tr>  <td align=\"right\">&nbsp;</td>  <td align=\"left\"><input type=\"submit\" name=\"submit\" value=\"Send Inquiry\"></td> </tr></table></form>")
//  ]);
}


function getQueryString () {
  /* Get Map Center */
  var centerLng = map.getCenter().lng();
  var centerLat = map.getCenter().lat();
  /* Get Map Bounds */
  var southWest = map.getBounds().getSouthWest().toUrlValue();
  var northEast = map.getBounds().getNorthEast().toUrlValue();
  /* Build Query String */
  queryString  = "?longitude=" + centerLng;
  queryString += "&latitude=" + centerLat;
  queryString += '&south_west=' + southWest;
  queryString += '&north_east=' + northEast;
  //
  return queryString;
}

function submitInquiry(formObj) {
  var inquireName  = formObj.full_name.value;
  var inquirePhone = formObj.phone.value;
  var inquireEmail = formObj.email.value;
  var inquireBody  = htmls[formObj.id.value];
  var queryString = "?full_name=" + inquireName + "&phone=" + inquirePhone + "&email=" + inquireEmail + '&body=' + inquireBody;
  $.get("/idx/map/inquire.php" + queryString, { }, function (responseText) {
	  $('#inquiryResponse').html(responseText);
  });
  return false;
}

function removeMarker()
{
    var marker = gmarkers.shift();
    map.removeOverlay(marker['marker']);
}


  function resultClick (mls_number) {
      // find marker
      var marker = false;
      for (i in gmarkers) {
          if (gmarkers[i]['id'] == mls_number) {
              marker = gmarkers[i]['marker'];
              break;
          }
      }
      if (marker) {
          ihtml  = htmls[marker.getId()];
          iimage = images[marker.getId()];
          marker.openInfoWindowHtml(ihtml);
//          marker.openInfoWindowTabsHtml([
//              new GInfoWindowTab("Details", ihtml),
//              new GInfoWindowTab("Photo", "<img src=\"" + iimage + "\" style=\"width: 255px; height:200px\">"),
//              new GInfoWindowTab("Inquire", "<form id=\"inquireForm\" onsubmit=\"return submitInquiry(this);\"><input type=\"hidden\" name=\"id\" value=\"" + marker.getId() + "\"><table width=\"275\"> <tr>  <td align=\"center\" colspan=\"2\"><b>Inquire About Listing</b></td> </tr> <tr><td colspan=\"2\">&nbsp;</td></tr> <tr>  <td align=\"center\" colspan=\"2\" id=\"inquiryResponse\">&nbsp;</td> </tr> <tr>  <td align=\"right\"><b>* Full Name:</b></td>  <td align=\"left\"><input type=\"text\" name=\"full_name\" value=\"\" /></td> </tr> <tr>  <td align=\"right\"><b>Phone:</b></td>  <td align=\"left\"><input type=\"text\" name=\"phone\" value=\"\" /></td> </tr> <tr>  <td align=\"right\"><b>* Email:</b></td>  <td align=\"left\"><input type=\"text\" name=\"email\" value=\"\" /></td> </tr> <tr>  <td align=\"right\">&nbsp;</td>  <td align=\"left\"><input type=\"submit\" name=\"submit\" value=\"Send Inquiry\"></td> </tr></table></form>")
//          ]);
      } else {
          alert('This listing could not be shown on the map.');
      }
  }

  function resultMouseOver(mls_number) {
      var marker = false;
      for (i in gmarkers) {
          if (gmarkers[i]['id'] == mls_number) {
              marker = gmarkers[i]['marker'];
              break;
          }
      }
      if (marker) {
          ilabel = labels[marker.getId()];
          label.setHtml(ilabel);
          label.setPoint(marker.getTooltipPoint());
          label.show();
      } else {
          alert('This listing could not be shown on the map.');
      }
  }

  function resultMouseOut() {
      label.hide();
  }