// History
function cViewState(APropID)
{
  var LMapCenter = FMap.getCenter();
  var LPropType = document.getElementById('PropertyType');
  this.lat = LMapCenter.lat();
  this.lng = LMapCenter.lng();
  this.zoom = FMap.getZoom();
  this.mapType = FMap.getCurrentMapType().getName();
  this.propID = APropID;

  this.propsTypeInd = LPropType ? LPropType.selectedIndex : 0;
  this.isEqual = function(AMapInfo)
  {
    return (
      (this.lat == AMapInfo.lat)
      && (this.lng == AMapInfo.lng)
      && (this.zoom == AMapInfo.zoom)
      && (this.mapType == AMapInfo.mapType)
      && (this.propID == AMapInfo.propID)
      && (this.propsTypeInd == AMapInfo.propsTypeInd));
  }
}

function checkURL()
{
  var LHash;
  if (BrowserInfo.code == 'MSIE')
  {
    var ihistory = document.getElementById("ifrHistory");
    LHash = ihistory.contentWindow.location.hash;
  }
  else
    LHash = document.location.hash;

  LHash = LHash.replace('#','');
  if (LHash == '')
    LHash = 1;
  if (LHash < FHistory.length)
    HistoryBack();
}

function BrowserHistorySave()
{
  if(isEmbedded())
    return;
    
  var LHash = FHistory.length;

  if (BrowserInfo.code == 'MSIE')
  {
    var Liframe = document.getElementById("ifrHistory").contentWindow.document;
    Liframe.open();
    Liframe.close();
    Liframe.location.hash = LHash;
  }
  else
  {
    if (LHash > 1)
      document.location.hash = LHash;
  }
}

function BrowserHistoryBack()
{
  if(isEmbedded())
    HistoryBack()
  else
    history.back();
}

function isEmbedded()
{
  if (typeof(FIsEmbedded) == 'undefined')
    FIsEmbedded = (document.location.href.match(/[\&|\?]embedded=1/i) ? true : false);
  return FIsEmbedded;
}

/* Google analytics */
function doEventTrack(ACategory, AAction)
{
  try {
    if (gaptAH)
      gaptAH._trackEvent(ACategory, AAction);
    gaptDefault._trackEvent(ACategory, AAction);
  }
  catch(err) {alert(err)}
}

function doPageviewTrack(AName)
{
  //try {urchinTracker(AName);} catch(err) {}
  try {
    var LName = AName ? '/' + AName : '';
    if (gaptAH)
      gaptAH._trackPageview(LName);
    gaptDefault._trackPageview(LName);
  }
  catch(err) {alert(err)}
}

/* --------------- Google Map ------------------ */

var
  TOOLTIP_MRP = 3,
  MARKER_TYPE_PROPERTY = 1,
  MARKER_TYPE_CITY = 2;
  
var FInterval = 0;
var FIsIntervalAssigned = false;
var FState = 'FL';
var FIsState = true;
var FFloridaRealtorID = '0';
var FArea = 'Palm Beach FL';
var FOpacityLevel = 0;
var FIsLogoVisible = true;
var FMap;
var FTooltip;
var FTooltipMarker = null;
var FTooltipLocked = false;
var FMarkers;
var FMaxHomesCountInfo = 3;
var FSearchString = "";
var FSearchNo = 0;
var FtmrAccountHolderInfoGet = null;
var FMarkersLoadTimerID = null;
var FMarkersCacheClear = false;
var FZoomDefault = 11;
var FHistory = new Array();
var FFirstTooltipWasShowed = false;
var FRegion = {name: null, geoPos: {X: 26.8682746887207, Y: -80.1607818603516}, zoom: 11};

function RegionSet(ARegion)
{
  FRegion = {name: ARegion, zoom: FZoomDefault};
  switch (ARegion)
  {
   case "stuart":
      FRegion.geoPos = {X: 27.203817782390768, Y: -80.260963439941405};
      break;
   case "boyntondelray":
      FRegion.geoPos = {X: 26.531274696530435, Y: -80.12226104736328};
      break;
   case "bocaraton":
      FRegion.geoPos = {X: 26.31359534125592, Y: -80.208091735839845};
      break;
   case "charlotte":
      FRegion.geoPos = {X: 35.2224998474121, Y: -80.8375396728516};
      FRegion.zoom = FZoomDefault - 2;
      break;
   case "northmiami":
      FRegion.geoPos = {X: 25.993715213889827, Y: -80.282936096191405};
      break;
   case "miami":
      FRegion.geoPos = {X: 25.7676095662521865, Y: -80.243797302246095};
      break;
    case "Fort Lauderdale":
      FRegion.geoPos = {X: 26.1236705780029, Y: -80.1435623168945};
      FRegion.zoom = FZoomDefault + 1;
      break;
    case "fortlauderdale":
      FRegion.geoPos = {X: 26.1236705780029, Y: -80.1435623168945};
      break;
    case "FL":
      FRegion.geoPos = {X: 27.93, Y: -82.3007818603516};
      FRegion.zoom = FZoomDefault - 4;
      break;
    case "Palm Beach FL":
    case "palmbeach":
      FRegion.geoPos = {X: 26.8682746887207, Y: -80.1607818603516};
      break;
    case "Wilmington NC":
      FRegion.geoPos = {X: 34.1871601758213, Y: -78.0087410905783};
      FRegion.zoom = FZoomDefault - 2;
      break;
    case "wilmington":
      //FRegion.geoPos = {X: 34.1452869686028, Y: -78.01322937011719};
      FRegion.geoPos = {X: 34.270779138285498, Y: -77.89443969726562};
      FRegion.zoom = FZoomDefault - 1;
      break;
    case "Raleigh-Durham NC":
    case "rdu":
    case "opensky":
      FRegion.geoPos = {X: 35.8575792601477475, Y: -78.704681396484375};
      FRegion.zoom = FZoomDefault - 2;
      break;
    default:
      FRegion.name = 'default';
      FRegion.geoPos = {lati: 35.8575792601477475, Y: -78.704681396484375};
      FRegion.zoom = FZoomDefault - 2;
      break;
  }
}

function IsInArea2(AGeoPos/*GLatLng*/, AMinLat, AMaxLat, AMinLong, AMaxLong)
{
  return (
    (AGeoPos.lat() <= AMaxLat)
    && (AGeoPos.lat() >= AMinLat)
    && (AGeoPos.lng() <= AMaxLong)
    && (AGeoPos.lng() >= AMinLong)
  );
}

function AreaChange()
{
  FIsNewLocationLoaded = false;
  var LState = FState;
  AreaChange2();
  if (LState != FState)
    Search();
}

function AreaChange2()
{
  LegacyInfoposUpdate();
  var LMapCenter = FMap.getCenter();
  if (IsInArea2(LMapCenter, 24.6664829, 40.06561335, -86.79817199, -80.03298951))
  {
    if (FState != 'FL')
    {
      FIsState = true;
      FState = 'FL';
    }
    return;
  }
  if (IsInArea2(LMapCenter, 33.4573593, 36.5406037, -83.10733794, -75.6887511))
  {
    if (FState != 'NC')
    {
      FIsState = true;
      FState = 'NC';
    }
    return;
  }
}

function MapShow(AArea)
{
  CacheClear();
  propTypeFilterSet(0, true);
  RegionSet(AArea);
  FMap.setCenter(new GLatLng(FRegion.geoPos.X, FRegion.geoPos.Y), FRegion.zoom);
}

function DefaultSizeMapShow()
{
  if (FIsState)
    MapShow(FState)
  else
    MapShow(FArea);
}

function NodeTextGet(ANode)
{
  if (ANode.childNodes.length == 3)
    return ANode.childNodes.item(1).nodeValue
  else
    return ANode.childNodes.item(0).nodeValue;
}

function HTMLGet(AXMLDocument, AName)
{
  var LXMLList = AXMLDocument.getElementsByTagName(AName);
  if (LXMLList.length == 0)
  {
    return null;
  }
  else
    return NodeTextGet(LXMLList.item(0));
}

function DocumentURLGet()
{
//  var LURL = document.URL.replace('#', '');
  var LURL = document.URL.replace(/#\d+/g, '');
  var LIndex = LURL.indexOf('?');
  if (LIndex != -1)
   LURL = LURL.substr(0, LIndex);
//  return LURL + '?TS=' + (new Date().getTime()).toString() + '&SessionID=' + FSessionID + '&';
  return ([LURL, '?TS=', (new Date().getTime()).toString(), '&SessionID=', FSessionID, '&'].join(''));
}

function MarkerImageURLGet(ACount, AActive, ATransparent, AReviewedCount, ANewConstruction, ADOM)
{
  if (FRegion.zoom <= FZoomDefault)
    return ('Images/Marks/Cities/' + (ATransparent ? 'Transparent.png' : 'city2.png'))

  var LFileName;
  if (ATransparent)
    LFileName = 'Transparent'
  else
  {
    LFileName = 'House' + (ACount > 1 ? 'Group' : '');

    if (AActive)
      LFileName = LFileName + '_Active';
    else
    if (AReviewedCount != 0)
      LFileName = LFileName + '_Reviewed';
    else
    if (ADOM < 4)
      LFileName = LFileName + '_NewOnMarket';
    else
    if (ANewConstruction == 1)
      LFileName = LFileName + '_NewConstruction';
  }

  return ('Images/Marks/Houses/' + LFileName + '.png');
}


function MarkerIconGet(APrice, ACount, AReviewedCount, ANewConstruction, ADOM)
{
  var LIcon = new GIcon();
  if (FRegion.zoom <= FZoomDefault)
  {
    LIcon.iconAnchor = new GPoint(20, 29);
    LIcon.infoWindowAnchor = new GPoint(20, 29);
    LIcon.iconSize = new GSize(40, 29);
    LIcon.image = MarkerImageURLGet(ACount, false, false, 0, ANewConstruction, ADOM);
    LIcon.transparent = MarkerImageURLGet(ACount, false, true, 0, 0, 0);
    return LIcon;
  }

  LIcon.iconAnchor = new GPoint(10, 30);
  LIcon.infoWindowAnchor = new GPoint(10, 30);
  LIcon.iconSize = new GSize(20, 30);
  LIcon.shadowSize = new GSize(64, 64);

  LIcon.image = MarkerImageURLGet(ACount, false, false, AReviewedCount, ANewConstruction, ADOM);
  LIcon.transparent = MarkerImageURLGet(ACount, false, true, 0, 0, 0);
  LIcon.imageMap =
  [
    8, 29,
    0, 11,
    0, 7,
    2, 3,
    7, 0,
    19, 6,
    19, 13,
    11, 29
  ];
  LIcon.shadow = "Images/Marks/Houses/House_Shadow.png";
  return LIcon;
}

function MarkerImageChange(AMarker, AActive)
{
  AMarker.setImage(MarkerImageURLGet(
    AMarker.info.count, AActive, false, AMarker.info.reviewed,
    AMarker.info.newConstr, AMarker.info.DOM));
}

function TooltipUnlock()
{
  FTooltipLocked=false;
  TooltipHide();
}

var FIsTooltipShowing = false;

function TooltipShow(AMarker)
{
  FIsTooltipShowing = true;
  /*OpacitySet(document.getElementById('logo'), 0);
  document.getElementById('Realtors').style.display = 'block';*/
  if (FTooltipLocked)
    return;
  if (FTooltipMarker != null)
    MarkerImageChange(FTooltipMarker, false);

  FTooltipMarker = AMarker;
  MarkerImageChange(AMarker, true);

  FTooltip.innerHTML = tooltipGet(AMarker);//AMarker.tooltip;
  var LProjection = FMap.getCurrentMapType().getProjection();
  var LPoint = LProjection.fromLatLngToPixel(
    FMap.fromDivPixelToLatLng(new GPoint(0, 0), true), FMap.getZoom());

  var LOffset = LProjection.fromLatLngToPixel(
    AMarker.getPoint(), FMap.getZoom());

  var LAnchor = AMarker.getIcon().iconAnchor;
  var LIconWidth = AMarker.getIcon().iconSize.width;
  var LIconHeight = AMarker.getIcon().iconSize.height;
  var LTooltipHeight = FTooltip.clientHeight;
  var LTooltipWidth = FTooltip.clientWidth + 2;
  var LPos = new GSize(LOffset.x - LPoint.x + 10, LOffset.y - LPoint.y - ((LTooltipHeight + LIconHeight)/ 2) - 6);

  var LMapBounds = FMap.getBounds();
  var LSouthWestPos = FMap.fromLatLngToDivPixel(LMapBounds.getSouthWest());
  var LNorthEastPos = FMap.fromLatLngToDivPixel(LMapBounds.getNorthEast());
  if ((LPos.width + LTooltipWidth > LNorthEastPos.x) && (LPos.width - LTooltipWidth - LIconWidth/2 - 7 > LSouthWestPos.x))
  {
    LPos.width = LPos.width - LTooltipWidth - LIconWidth/2 - 7;
    /*
    LPos.width = (LNorthEastPos.x - LTooltipWidth);
    LPos.height = LPos.height - (LTooltipHeight + LIconHeight)/2 + 6;
    if (LPos.height < LNorthEastPos.y)
      LPos.height = LPos.height + (LTooltipHeight + LIconHeight);
    */
  }

  if (LPos.height < LNorthEastPos.y + 28)
    LPos.height = LNorthEastPos.y + 28;

  if ((LPos.height + LTooltipHeight) > LSouthWestPos.y - 16)
    LPos.height = (LSouthWestPos.y - 16 - LTooltipHeight);

  var LControlPos = new GControlPosition(G_ANCHOR_TOP_LEFT, LPos);
  LControlPos.apply(FTooltip);
  FTooltip.style.visibility = "visible";
}

function TooltipHide()
{
  if (FTooltipLocked)
    return;

  FIsTooltipShowing = false;
  /*OpacitySet(document.getElementById('logo'), 1);
  document.getElementById('Realtors').style.display = 'none';*/

  if (FTooltipMarker != null)
  {
    MarkerImageChange(FTooltipMarker, false);
    FTooltipMarker = null;
  }
  FTooltip.style.visibility = 'hidden';
}

function MarkerGet(AMarkerID)
{
  if (FMarkers == null)
    return null;

  for (var i = 0; i < FMarkers.length; i++)
    if (FMarkers[i].info.ID == AMarkerID)
      return FMarkers[i];
  return null;
}

function MarkerZoom(AMarker, AShowError)
{
  if (AMarker == null)
    return;

  var LResult = true;
  if ((FRegion.zoom <= FZoomDefault))
    FMap.setCenter(new GLatLng(AMarker.info.lat, AMarker.info.lng),
      14 + (AMarker.info.city.match(/.*\bbeach\b/ig) ? 1 : 0))
  else
    LResult = MapFocus(AMarker.info.latMin, AMarker.info.lngMin,
      AMarker.info.latMax, AMarker.info.lngMax, true, AMarker.info.count,
      (FRegion.zoom <= FZoomDefault ? AMarker.info.city : ''));

  if (!LResult)
   if (AShowError)
     alert('Unable to magnify area. Please choose "Satellite" or "Hybrid" mode and try again')
   else
     GroupDetailsShow(AMarker);
}

function MapFocus(ALatitudeMin, ALongitudeMin, ALatitudeMax, ALongitudeMax, ACheckMaxZoom, ACount, ACity)
{
  TooltipUnlock();

  var LBounds = new GLatLngBounds(
    new GLatLng(ALatitudeMin, ALongitudeMin),
    new GLatLng(ALatitudeMax, ALongitudeMax)
  );

  var
    LZoom = Math.max(12, FMap.getBoundsZoomLevel(LBounds)),
    LMaxZoom = FMap.getCurrentMapType().getMaximumResolution(LBounds.getCenter());

  var LLongitudeShift = 0, LLatitudeShift = 0;
  if ((ACity != '') && (ACount > 10))
  {
    if (ACity.match(/.*\bbeach\b/ig))
      LZoom++;
    if (ACity.match(/\bwilmington|wrightsville beach|carolina beach|kure beach\b/ig))
      LZoom++;
    if (ACity.match(/\bcarolina beach\b/ig))
      LLongitudeShift-=0.010;
  }

  if (LZoom > LMaxZoom)
    LZoom = LMaxZoom;

  if (ACheckMaxZoom && (LZoom == FRegion.zoom) && (FRegion.zoom == LMaxZoom))
    return false
  else
  {
    var LCenter = LBounds.getCenter();
    LCenter = new GLatLng(LCenter.lat() + LLatitudeShift, LCenter.lng() + LLongitudeShift);
    FMap.setCenter(LCenter, LZoom);
  }

  return true;
}

function GroupDetailsLoad(AData, AResponseCode)
{
  var LXML = GXml.parse(AData);
  if (LXML == null)
    return;
    
  var LMarker = null, LXMLNodes = LXML.documentElement.getElementsByTagName('marker');
  for (var i = 0; i < LXMLNodes.length; i++)
  {
    LMarker = MarkerGet(parseInt(LXMLNodes[i].getAttribute('id')));
    if (!LMarker)
      continue;
      
    LMarker.info.count = parseInt(LXMLNodes[i].getAttribute('count'));
    LMarker.data = MarkerXMLPropertyInfoGet(LXMLNodes[i]);
  }
  if (LMarker)
    //FTooltip.innerHTML = tooltipPropertiesGet(LMarker, 1);
    FTooltip.innerHTML = tooltipBodyGet(tooltipPropertiesGet(LMarker, 1));
}

function GroupDetailsPageLoad(AMarkerID, APageIndex)
{
  var LMarker = MarkerGet(AMarkerID);
  if (LMarker.info.count == LMarker.data.length)
    FTooltip.innerHTML = tooltipBodyGet(tooltipPropertiesGet(LMarker, APageIndex));
    //FTooltip.innerHTML = tooltipPropertiesGet(LMarker, APageIndex)
  else
    GDownloadUrl(DocumentURLGet() + 'Section=GroupDetails' +
      '&MarkerID=' + AMarkerID + '&PageIndex=' + APageIndex + FSearchString, GroupDetailsLoad);
}

function GroupDetailsShow(AMarker)
{
  if (FTooltipLocked)
  {
    TooltipUnlock();
    TooltipShow(AMarker);
  }
  FTooltipLocked = true;
}

var FCurMarker = null;

function DetailsShow()
{
  FCurMarker = this;
  if (FRegion.zoom <= FZoomDefault)
  {
    MarkerZoom(this, false);
    return;
  }

  if (this.info.count != 1)
  {
    GroupDetailsShow(this);
    return;
  }

  if (FTooltipLocked)
  {
    TooltipUnlock();
    TooltipShow(this);
    FTooltipLocked = true;
    return;
  }

  FTooltipMarker = this;
  DetailsOpen(this.data[0].ID);
}

function MarkerXMLPropertyInfoGet(AXMLNode)
{
  function  LImgSRCGet(ALXMLNode)
  {
    var LSrc = ALXMLNode.getAttribute('imgSRC');
    if (LSrc)
      return LSrc;
    return ('default.asp?' + [
      'SessionID=', FSessionID,
      '&Section=',  'PropThumb',
      '&City=',     escape(ALXMLNode.getAttribute('city')),
      '&MLSNum=',   escape(ALXMLNode.getAttribute('mlsnum'))
    ].join(''));
  }
  
  var LNode, LResult = new Array();
  for (var i = 0; i < AXMLNode.childNodes.length; i++)
  {
    LNode = AXMLNode.childNodes[i];
    if (LNode.nodeType == 1/*NODE_ELEMENT */)
      LResult.push({
        ID:         LNode.getAttribute('propID'),
        imgSRC:     LImgSRCGet(LNode),
        price:      LNode.getAttribute('price'),
        address:    LNode.getAttribute('address'),
        bathCount:  LNode.getAttribute('bathCount'),
        bedCount:   LNode.getAttribute('bedCount'),
        buildingSF: LNode.getAttribute('buildingSF'),
        lotSF:      LNode.getAttribute('lotSF'),
        dataSourceID: LNode.getAttribute('dataSourceID'),
        status:     parseInt(LNode.getAttribute('status')),
        dateSold:   LNode.getAttribute('dateSold'),
        reviewed:   LNode.getAttribute('reviewed'),
        DOM:        parseInt(LNode.getAttribute('DOM'))
      });
  }
  return LResult;
}

function MarkerCreate(AXMLNode)
{
  var
    LLatitude = parseFloat(AXMLNode.getAttribute('lat')),
    LLongitude = parseFloat(AXMLNode.getAttribute('lng')),
    LPrice = AXMLNode.getAttribute('price'),
    LCount = parseInt(AXMLNode.getAttribute('count')),
    LReviewed = parseInt(AXMLNode.getAttribute('reviewed')),
    LNewConstr = parseInt(AXMLNode.getAttribute('newConstr')),
    LCity = AXMLNode.getAttribute('city'),
    LDOM = parseInt(AXMLNode.getAttribute('DOM'));
    
  var LMarker = new GMarker(
    new GLatLng(LLatitude, LLongitude),
    MarkerIconGet(LPrice, LCount, LReviewed, LNewConstr, LDOM));

  LMarker.info = {
    type:       null,
    ID:         parseInt(AXMLNode.getAttribute('id')),
    latMin:     parseFloat(AXMLNode.getAttribute('latMin')),
    latMax:     parseFloat(AXMLNode.getAttribute('latMax')),
    lngMin:     parseFloat(AXMLNode.getAttribute('lngMin')),
    lngMax:     parseFloat(AXMLNode.getAttribute('lngMax')),
    price:      LPrice,
    count:      LCount,
    reviewed:   LReviewed,
    newConstr:  LNewConstr,
    city:       LCity,
    DOM:        LDOM
  };

  switch (AXMLNode.childNodes[0].nodeName)
  {
    case 'property':
      LMarker.info.type = MARKER_TYPE_PROPERTY;
      LMarker.data = MarkerXMLPropertyInfoGet(AXMLNode);
      break;
    case 'city':
      LMarker.info.type = MARKER_TYPE_CITY;
      LMarker.info.lat = LLatitude,
      LMarker.info.lng = LLongitude,
      LMarker.data = [{imgSRC: AXMLNode.childNodes[0].getAttribute('imgSRC')}];
      break;
  }

  //LMarker.tooltip = NodeTextGet(AXMLNode);

  GEvent.addListener(LMarker, 'click', DetailsShow);
  GEvent.addListener(LMarker, 'mouseover', function(){TooltipShow(LMarker);});
  GEvent.addListener(LMarker, 'mouseout', TooltipHide);

  FMap.addOverlay(LMarker);

  return LMarker;
}

function MapBoundsGet()
{
  var
    LBounds = FMap.getBounds(),
    LRightTop = LBounds.getNorthEast(),
    LLeftBottom = LBounds.getSouthWest();
    
  return [
    '&Zoom=',   FMap.getZoom(),
    '&Left=',   LLeftBottom.lng(),
    '&Top=',    LRightTop.lat(),
    '&Right=',  LRightTop.lng(),
    '&Bottom=', LLeftBottom.lat(),
  ].join('');
}

function mapStateParamsGet()
{
  var LMapCenter = FMap.getCenter();
  return [
    '&Zoom=',       FMap.getZoom(),
    '&lng=',        LMapCenter.lng(),
    '&lat=',        LMapCenter.lat(),
    '&PriceFrom=',  FPriceFromSlider.value,
    '&PriceTo=',    FPriceToSlider.value,
    '&Beds=',       FBedsSlider.value,
    '&Baths=',      FBathsSlider.value,
    '&HomeSize=',   FHomeSizeSlider.value,
    '&PropertyType=', document.getElementById('PropertyType').selectedIndex
  ].join('');
}

var FLoggedDS = '';

function UserIsLoggedCheck(AData, AResponseCode, ACallback)
{
  if (AData == '0')
  {
    if (ACallback)
      window.setTimeout(ACallback, 0)
    else
      MarkersLoad(false)
  }
  else
  {
    FLoggedDS = AData;
    SignupDIVShow(ACallback);
  }
}

function MarkersLoad(AUserIsLoggedCheck)
{
  //window.clearInterval(FMarkersLoadTimerID);
  if (AUserIsLoggedCheck && (FRegion.zoom > FZoomDefault))
  {
    GDownloadUrl(
      [DocumentURLGet(), 'Section=LC', MapBoundsGet(), FSearchString].join(''),
      UserIsLoggedCheck);
    return;
  }
  
  //FMarkersLoadTimerID = window.setInterval('MarkersLoadTimer()', 10);//1000
  window.setTimeout('MarkersLoadTimer()', 10);//1000
}

function MarkersLoadTimer()
{
  //window.clearInterval(FMarkersLoadTimerID);
  GDownloadUrl(SearchURLGet(), MarkersPageLoad);
  doEventTrack('PropertiesSearch', 'MarkersLoad');
}

function SearchURLGet()
{
  var LURL = [
    DocumentURLGet(),
    'Section=MarkersXML',
    MapBoundsGet(),
    FSearchString,
    '&MRP=40',
    '&SNo=', FSearchNo
  ].join('');
  
  if (FMarkersCacheClear)
  {
    FMarkersCacheClear = false;
    LURL = LURL + '&ClearCache=1';
  }

  IndicatorVisibleSet(true);

  return LURL;
}

var FIsNewLocationLoaded = false;

function MarkersPageLoad(AData, AResponseCode)
{
  FIsNewLocationLoaded = true;
  AreaChange2();
  var LXML = GXml.parse(AData);
  try
  {
    var LXMLList = LXML.getElementsByTagName('markers');
    if ((LXMLList == null) || (LXMLList.length == 0))
    {
      IndicatorVisibleSet(false);
      return;
    }

    var
      LZoom = LXMLList[0].getAttribute('zoom'),
      LSearchNo = parseInt(LXMLList[0].getAttribute('sNo'));
    if (LZoom != FRegion.zoom || (!isNaN(LSearchNo) && LSearchNo != FSearchNo))
      return;
    var LMarkersCount = parseInt(LXMLList[0].getAttribute('totalCount'));
    var LMarkesLoaded = parseInt(LXMLList[0].getAttribute('count'));

    IndicatorVisibleSet(LMarkesLoaded < LMarkersCount);
    var LXMLNodes = LXML.documentElement.getElementsByTagName('marker');
    var LMarkers = new Array(LXMLNodes.length);
    for (var i = 0; i < LXMLNodes.length; i++)
      LMarkers[i] = MarkerCreate(LXMLNodes[i]);
    //FMapMngr.addMarkers(LMarkers, FMap.getZoom());
    //FMapMngr.refresh();

    if (FMarkers == null)
      FMarkers = LMarkers
    else
      FMarkers = FMarkers.concat(LMarkers);

    if (LXMLNodes.length != 0)
      MarkersLoad(false);
  }
  catch(err)
  {
    IndicatorVisibleSet(false);
    alert(err.description + "\n\n" + AData);
  }
}

function OnMoveEnd(AAcountHolderCheck)
{
  HistoryAdd();
  FRegion.zoom = FMap.getZoom();
  if (AAcountHolderCheck)
    AccountHolderInfoGetUpdate();
  MarkersLoad(true);
  if (FIsNewLocationLoaded)
    AreaChange();
  doEventTrack('PropertiesSearch', 'Start');
}

function AccountHolderInfoGetUpdate()
{
  return;//no need
  window.clearTimeout(FtmrAccountHolderInfoGet);
  FtmrAccountHolderInfoGet = window.setTimeout(
    'GDownloadUrl(' +
      '[DocumentURLGet(), \'Section=AHI\', MapBoundsGet(), FSearchString].join(\'\'),' +
      'AccountHolderInfoUpdate);', 3000);
}

function accountHolderImageLoaded(AData)
{
  var LLogoImg = document.getElementById('imgLogo');
  if (LLogoImg)
  {
    LLogoImg.src = AData[0].url;
    LLogoImg.alt = AData[0].name;
    document.getElementById('spAH_Phone').innerHTML = '<br>' + AData[0].phone;
  }
}

function AccountHolderInfoUpdate(AData, AResponseCode)
{
  var LData = eval(AData);
  if (!LData)
    return;
    
  var objImage = new Image();
  objImage.onLoad = accountHolderImageLoaded(LData);
  objImage.src = LData[0].url;
}

function LegacyInfoposUpdate()
{
  function  LPosUpdate(AElement, APosBottom, APosRight)
  {
    if (!AElement)
      return;

    AElement.style.bottom = APosBottom + 'px';
    if (APosRight)
      AElement.style.right = APosRight + 'px';
    AElement.style.color = '#0A0A0A';
    AElement.style.fontSize = '10px';
  }
  if (isEmbedded())
    return;

  var LMap = document.getElementById('map');
  if (!LMap)
    return;

  LLegalInfo = LMap.firstChild ? LMap.firstChild.nextSibling : null;
  LPosUpdate(LLegalInfo, -7);
  LPosUpdate(LLegalInfo ? LLegalInfo.nextSibling : null, -18, -160);
  if (LLegalInfo && LLegalInfo.nextSibling && LLegalInfo.nextSibling.lastChild)
    LLegalInfo.nextSibling.lastChild.style.color = '#0A0A0A';
}

function OnZoomEnd()
{
  HistoryAdd();
  FMap.clearOverlays();
  FMarkers = null;
  FTooltipMarker = null;
  TooltipUnlock();
  FMarkersCacheClear = true;
  LegacyInfoposUpdate();
  
  if (isEmbedded())
  {
    var LZoom = document.getElementById('zoomSlider').value = -FMap.getZoom();
    SliderReset('zoomSlider', LZoom);
  }
}

function HistoryAdd(APropID)
{
  var LLength = FHistory.length;
  var LViewState = new cViewState(APropID);
  if ((LLength != 0) && ((FHistory[LLength - 1]).isEqual(LViewState)))
    return;

  FHistory.push(LViewState);
  BrowserHistorySave();
}

function HistoryBack()
{
  var LLength = FHistory.length;
  if (LLength < 2)
    return;

  if (typeof((FHistory.pop()).propID) != 'undefined')
  {
    MapActivate();
    return;
  }

  var LViewState = FHistory[FHistory.length - 1];
  
  var LMapType = G_NORMAL_MAP;
  for (var i=0; i < G_DEFAULT_MAP_TYPES.length; i++)
  {
   if (LViewState.mapType == G_DEFAULT_MAP_TYPES[i].getName())
   {
     LMapType = G_DEFAULT_MAP_TYPES[i];
     break;
   }
  }
  propTypeFilterSet(LViewState.propsTypeInd, true);
  FMap.setCenter(new GLatLng(LViewState.lat, LViewState.lng), LViewState.zoom, LMapType);
}

function OnMapTypeChanged()
{
  HistoryAdd();
}

function MapPanLeft()
{
  FMap.panDirection(1, 0);
}

function MapPanRight()
{
  FMap.panDirection(-1, 0);
}

function MapPanUp()
{
  FMap.panDirection(0, 1);
}

function MapPanDown()
{
  FMap.panDirection(0, -1);
}

function MapZoomIn()
{
  FMap.zoomIn();
}

function MapZoomOut()
{
  FMap.zoomOut();
}

function MapControlAdd(AElementID, AX, AY)
{
  var LButton = document.getElementById(AElementID);
  if(!LButton)
    return;
  var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(AX, AY));
  pos.apply(LButton);
  //Error while 2 adding Button
  FMap.getContainer().appendChild(LButton);
  LButton.style.display = 'block';
}

function mapContainerInit()
{
  var LdvMap = document.getElementById('map');
  if(isEmbedded())
  {
    var LURLPath = document.location.href, LDim = LURLPath.match(/[\&|\?]width=([\d]+)/i);
    LdvMap.style.width = (LDim ? LDim[1] : $('.TopNav').width() - 12) + 'px';
    
    LDim = LURLPath.match(/[\&|\?]height=([\d]+)/i);
    if (LDim)
      LdvMap.style.height = LDim[1] + 'px';
  }
  return LdvMap;
}

function mapDim()
{
  var LdvMap = document.getElementById('map');
  if (LdvMap.ownerDocument.defaultView)
  {
    var get = LdvMap.ownerDocument.defaultView.getComputedStyle(LdvMap, null);
    return {w: parseFloat(get.getPropertyValue('width')), h: parseFloat(get.getPropertyValue('height'))};
  }
  else
    return {w: parseFloat(LdvMap.currentStyle['width']), h: parseFloat(LdvMap.currentStyle['height'])};
}

function Execute()
{
  if (GBrowserIsCompatible())
  {
    FMap = null;
    // map initialization
    FMap = new GMap2(mapContainerInit());
    FMap.setCenter(new GLatLng(FRegion.geoPos.X, FRegion.geoPos.Y), FRegion.zoom, G_HYBRID_MAP);
    FMap.enableContinuousZoom();
    FMap.enableDoubleClickZoom();
    FMap.scrollWheelZoomEnabled();
    FMap.logoPassive = true;
    FMap.suppressCopyright = true;

    // map controls
    //FMap.addControl(new GLargeMapControl());
    //FMap.addControl(new GLargeMapControl3D());
    /*if(isEmbedded())
      FMap.addControl(new GMenuMapTypeControl());
    else
      FMap.addControl(new GMapTypeControl());*/
    //var LOverviewMapControl = new GOverviewMapControl();
    //FMap.addControl(LOverviewMapControl);
    //LOverviewMapControl.hide(true);

    var LTop = 2;
    var LLeft = 2;
    var LSpace = 2;
    var LSize = 32;
    var LX = LLeft;
    var LY = LTop;
    var LXCenter = LX + LSize / 2 + LSpace;
    var LIndicatorX;
    var LIndicatorY;
    
    // initialize controls
    LX = LXCenter;
    MapControlAdd("up_button", LX, LY);
    LIndicatorX = LX + LSize;

    LX = LLeft;
    LY = LY + LSize + LSpace;
    MapControlAdd("left_button", LX, LY);

    /*if (isEmbedded())
      MapControlAdd("Indicator", 52, 28)
    else*/
    var LMapDim = mapDim();
    MapControlAdd("Indicator", (LMapDim.w - 190) / 2, (LMapDim.h - 54) / 2 - 60);
    IndicatorVisibleSet(false);

    LX = LX + LSize + LSpace;
    MapControlAdd("right_button", LX, LY);

    LX = LXCenter;
    LY = LY + LSize + LSpace;
    MapControlAdd("down_button", LX, LY);

    LX = LLeft;
    LY = LY + LSize + LSpace;
    MapControlAdd("zoomout_button", LX, LY);

    LX = LX + LSize + LSpace;
    MapControlAdd("zoomin_button", LX, LY);

    LX = LXCenter;
    LY = LY + LSize + LSpace;
    MapControlAdd("home_button", LX, LY);

    LY = LY + LSize + LSpace;
    MapControlAdd("back_button", LX, LY);
    
    if (!isEmbedded())
    {
      MapControlAdd('imgMapTips', 461, 28);
      MapControlAdd('mapViewSelector', 461, 6);
      //document.getElementById('mapViewValue').innerHTML = FMap.getCurrentMapType().getName();
    }

    //MapControlAdd("tutorial", -5, 320);
    // map events
    GEvent.addListener(FMap, "moveend", function(){OnMoveEnd(true)});
    GEvent.addListener(FMap, "zoomend", function(){OnZoomEnd()});
    GEvent.addListener(FMap, "maptypechanged", function(){OnMapTypeChanged()});
    GEvent.addListener(FMap, "click", function(){TooltipHide();});
    if (isEmbedded())
      GEvent.addListener(FMap, "click", filterHide);

    // tooltip window initialization
    FTooltip = document.createElement("div");
    FMap.getPane(G_MAP_FLOAT_PANE).appendChild(FTooltip);
    FTooltip.style.visibility="hidden";
    //FMapMngr = new GMarkerManager(FMap);
    // house markers creation
    //OnMoveEnd();
  };
}

function OnMapUnload()
{
  if (FMap != null)
  {
    GDownloadUrl(DocumentURLGet() + "Section=SessionClear");
    GUnload();
  }
}


/* --------------- Search Bar ------------------ */

var FPriceFrom = 0;
var FPriceTo = 10000000;
var FBeds = 0;
var FBaths = 0;
var FHomeSize = 0;

var LPrices = Array(
  0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100,
  110, 120, 130, 140, 150, 160, 170, 180, 190, 200,
  225, 250, 275, 300, 325, 350, 375, 400, 425, 450, 475, 500,
  550, 600, 650, 700, 750, 800, 850, 900, 950, 1000,
  1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000,
  2250, 2500, 2750, 3000, 3250, 3500, 3750, 4000, 4250, 4500, 4750, 5000,
  5500, 6000, 6500, 7000, 7500, 8000, 8500, 9000, 9500, 10000);

var LHomeSizes = Array(
  0, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500,
  550, 600, 650, 700, 750, 800, 850, 900, 950, 1000,
  1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000,
  2250, 2500, 2750, 3000, 3250, 3500, 3750, 4000,
  4250, 4500, 4750, 5000, 5500, 6000
);


var FPriceSpan;
var FPriceFromSlider;
var FPriceToSlider;

function PriceTextSet(AFrom, ATo)
{
  if (FPriceSpan == null)
    FPriceSpan = document.getElementById('PriceText');

  var LFrom = AFrom, LTo = ATo;
  if ((LFrom >= LTo) && (LFrom != 84))
    LFrom = LTo - 1;

  if (LFrom < 0)
    LFrom = 0;
  if (LTo == 0)
    LTo = 1;

  LFrom = LPrices[LFrom] * 1000;
  LTo = LPrices[LTo] * 1000;

  FPriceFrom = LFrom;
  FPriceTo = LTo;

  if (LFrom >= 1000000)
    LFrom = "$" + LFrom/1000000 + "m"
  else
    LFrom = FormatMoney(LFrom, "$", "", ",", ".", 0, 0);

  if (LTo >= 1000000)
    LTo = "$" + LTo/1000000 + "m"
  else
    LTo = FormatMoney(LTo, "$", "", ",", ".", 0, 0);
  if (LTo == '$10m')
    LTo += '+';

  FPriceSpan.firstChild.data = 'from ' + LFrom + ' to ' + LTo;
  if (isEmbedded())
  {
    $('#fcPrice .fcValue').html(LFrom + '&nbsp;-&nbsp;' + LTo);
    mapFilterBoundsUpdate();
  }
}

function PriceFromUpdate()
{
  if (FPriceFromSlider == null)
    FPriceFromSlider = document.getElementById('PriceFrom');
  if (FPriceToSlider == null)
    FPriceToSlider = document.getElementById('PriceTo');

  var LMin = parseInt(FPriceFromSlider.value);
  var LMax = parseInt(FPriceToSlider.value);

  if (LMin > LMax)
  {
    FPriceFromSlider.value = FPriceToSlider.value;
    fdSliderController.sliders["PriceFrom"].recalculate();
  }
  PriceTextSet(LMin, LMax);
}

function PriceToUpdate()
{
  if (FPriceFromSlider == null)
   FPriceFromSlider = document.getElementById('PriceFrom');
  if (FPriceToSlider == null)
   FPriceToSlider = document.getElementById('PriceTo');

  var LMin = parseInt(FPriceFromSlider.value);
  var LMax = parseInt(FPriceToSlider.value);

  if (LMax < LMin)
  {
    FPriceToSlider.value = FPriceFromSlider.value;
    fdSliderController.sliders["PriceTo"].recalculate();
  }
  PriceTextSet(LMin, LMax);
}

var
  FDateSoldFrom = 11, FDateSoldTo = 11,
  FDateSoldSliders = null, FDateSoldPriceSpan = null;
function DateSoldTextSet(AFrom, ATo)
{
  function LHTMLSet(AHTML)
  {
    FDateSoldPriceSpan.innerHTML = AHTML;
    if (isEmbedded())
    {
      $('#fcDateSold .fcValue').html(AHTML);
      mapFilterBoundsUpdate();
    }
  }
  
  if (FDateSoldPriceSpan == null)
    FDateSoldPriceSpan = document.getElementById('DateSoldText');

  FDateSoldFrom = AFrom;
  FDateSoldTo = ATo;
  if (AFrom == ATo && AFrom == 11)
  {
    LHTMLSet('This month');
    return;
  }
  var LDateFrom = new Date(), LDateTo = new Date();
  LDateFrom.setMonth(LDateFrom.getMonth() - (11 - AFrom));
  LDateTo.setMonth(LDateTo.getMonth() - (11 - ATo));
  LHTMLSet(
    MONTH_NAMES_SHORT[LDateFrom.getMonth()] + ' ' + LDateFrom.getFullYear() + ' - ' +
    MONTH_NAMES_SHORT[LDateTo.getMonth()] + ' ' + LDateTo.getFullYear());
}

function DateSoldUpdate(ASliderIDActive)
{
  if (!FDateSoldSliders)
   FDateSoldSliders = [document.getElementById('DateSoldFrom'), document.getElementById('DateSoldTo')];

  var
    LFrom = parseInt(FDateSoldSliders[0].value),
    LTo = parseInt(FDateSoldSliders[1].value);
    
  if (LFrom > LTo)
  {
    FDateSoldSliders[(ASliderIDActive + 1) % 2].value = FDateSoldSliders[ASliderIDActive].value;
    fdSliderController.sliders['DateSold' + (ASliderIDActive ? 'From' : 'To')].recalculate();
  }
  DateSoldTextSet(LFrom, LTo);
}
function DateSoldFromUpdate(){DateSoldUpdate(0)};
function DateSoldToUpdate(){DateSoldUpdate(1)};

var FBedsSlider;
var FBedsSpan;

function BedsUpdate()
{
  if (FBedsSlider == null)
   FBedsSlider = document.getElementById('Beds');
  if (FBedsSpan == null)
   FBedsSpan = document.getElementById('BedsText');

  var LValue = parseInt(FBedsSlider.value);
  var LText;

  FBeds = LValue;

  /*if (LValue == 0)
    LText = 'Any'
  else
    LText = '> ' + LValue;*/

  LText = LValue + "+ beds";

  FBedsSpan.firstChild.data = LText;
  if (isEmbedded())
  {
    $('#fcBedRooms .fcValue').html(LValue + '+');
    mapFilterBoundsUpdate();
  }
}

var FBathsSlider;
var FBathsSpan;

function BathsUpdate()
{
  if (FBathsSlider == null)
   FBathsSlider = document.getElementById('Baths');
  if (FBathsSpan == null)
   FBathsSpan = document.getElementById('BathsText');

  var LValue = parseInt(FBathsSlider.value);
  var LText;

  FBaths = LValue;

  /*if (LValue == 0)
    LText = 'Any'
  else
    LText = '> ' + LValue;*/

  LText = LValue + "+ baths";

  FBathsSpan.firstChild.data = LText;
  if (isEmbedded())
  {
    $('#fcBathRooms .fcValue').html(LValue + '+');
    mapFilterBoundsUpdate();
  }
}

var FHomeSizeSlider;
var FHomeSizeSpan;

function HomeSizeUpdate()
{
  if (FHomeSizeSlider == null)
   FHomeSizeSlider = document.getElementById('HomeSize');
  if (FHomeSizeSpan == null)
   FHomeSizeSpan = document.getElementById('HomeSizeText');

  var LValue = parseInt(FHomeSizeSlider.value);
  var LText;

  FHomeSize = LHomeSizes[LValue];
  LValue = FHomeSize;

  /*if (LValue == 0)
    LText = 'Any'
  else
    LText = '> ' + LValue;*/

  LText = FormatMoney(LValue, "", "", ",", ".", 0, 0) + "+ sq ft";

  FHomeSizeSpan.firstChild.data = LText;
  if (isEmbedded())
  {
    $('#fcHomeSize .fcValue').html(LText);
    mapFilterBoundsUpdate();
  }
}

function PropertyTypeGet()
{
  var LSelector = document.getElementById('PropertyType');
  return (LSelector ? LSelector.value : '');
}

function PropertyTypeSet(APropertyTypeIndex)
{
  var LSelector = document.getElementById('PropertyType');
  if (LSelector)
    LSelector.selectedIndex = (APropertyTypeIndex == 6 ? 0 : APropertyTypeIndex);
}

function PriceReducedGet()
{
  var LPriceReduced = document.getElementById('PriceReduced');
  return LPriceReduced ? LPriceReduced.checked : false;
}

function DetailsActivate()
{
   document.getElementById('map_wrapper').style.display = 'none';
   document.getElementById('details').style.display = 'block';
}

function MapActivate()
{
   document.getElementById('map_wrapper').style.display = 'block';
   document.getElementById('details').style.display = 'none';
}

function propTypeFilterOnChange()
{
  function LButtonColorSet(AIndex, AColor)
  {
    var LDV = document.getElementById('aPropTypeFilterID' + AIndex);
    if (LDV) LDV.style.background = AColor;
  }
  
  var LSelect = document.getElementById('PropertyType');
  if (LSelect)
    for (var i=0, lcount=LSelect.options.length; i < lcount; i++)
      LButtonColorSet(i, LSelect.selectedIndex == i ? '#FED757' : '#E0EBFE')
}

function propTypeFilterSet(APropTypeIndex, ADoNotSearch, ALogonBypass)
{
  if (isEmbedded())
    filterHide();
    
  if (APropTypeIndex == 6 && !(ALogonBypass || getSoldDataShow()))//check permissions before showing sold props
  {
    GDownloadUrl(
      [DocumentURLGet(), 'Section=LC&SoldDataShow=1', MapBoundsGet(), FSearchString].join(''),
      function(AData, AResponseCode)
      {
        UserIsLoggedCheck(AData, AResponseCode,
          'propTypeFilterSet(' + APropTypeIndex + ', ' + (ADoNotSearch ? 'true' : 'false') + ', true)');
      });
    return;
  }

  PropertyTypeSet(APropTypeIndex);
  propTypeFilterOnChange();
  switch (APropTypeIndex)
  {
    case 6: //sold
      if (document.URL.match(/\bsold\./i))
        return;
        
      MapActivate();
      setSoldDataShow(!getSoldDataShow());
      Reset(null, true);
      break;
    default:
      break;
  }
  if (ADoNotSearch)
    return;
    
  Search();
}

function ForeclosuresActivate()
{
  PropertyTypeSet(5);
  Search();
}

function tooltipMarkerReviewedSet(AHouseID)
{
  if (!FTooltipMarker)
    return;
  var LImage = document.getElementById('Reviewed_' + AHouseID);
  if (LImage != null)
    if (LImage.src != 'Images/reviewed.gif')
    {
      LImage.src = 'Images/reviewed.gif';
      FTooltipMarker.info.reviewed = FTooltipMarker.info.reviewed + 1;
      FTooltipMarker.tooltip = FTooltip.innerHTML;

      for (var i = 0; i < FTooltipMarker.data.length; i++)
         if (FTooltipMarker.data[i].ID == AHouseID)
          FTooltipMarker.data[i].reviewed = 1;
    }
}

function DetailsOpen(AHouseID, ALogonForce)
{
  tooltipMarkerReviewedSet(AHouseID);
  GDownloadUrl(
    DocumentURLGet() + 'Section=Details&Format=xml&HouseID=' + AHouseID + (ALogonForce ? '&LogonForce=1' : ''),
    function(AData, AResponseCode)
    {
      var LError = AData.match(/\<error\>(.*)\<\/error\>/i);
      if (LError)
      {
        FLoggedDS = AData.match(/\<logonToDS\>(.*)\<\/logonToDS\>/i)[1];
        SignupDIVShow('DetailsOpen(' + AHouseID + ')');
        return;
      }

      var LXML = GXml.parse(AData);
      if (LXML == null)
      {
        alert(AData);
        return;
      }

      var LDetails = document.getElementById('details');
      LDetails.innerHTML = HTMLGet(LXML, 'main');
      if (LDetails.innerHTML == 'null')
      {
        LDetails.innerHTML = AData;
        alert(AData);
        return;
      }
      
      HistoryAdd(AHouseID);
      DetailsActivate();
      doPageviewTrack('PropertyDetails');
    });
}

function OnPageLoad(AMapStateInitial)
{
  OpacitySet(document.getElementById('ShadowDIV'), 0.3);
  //OpacitySet(document.getElementById('map'), 0);
  MM_preloadImages('images/btn_search_over.gif');
  MM_preloadImages('images/btn_reset_over.gif');
  MM_preloadImages('images/ButtonSmall_over.gif');
  setSoldDataShow(getSoldDataShow());
  Reset(AMapStateInitial);
  if (AMapStateInitial)
  {
    FRegion.geoPos.X = AMapStateInitial.lat;
    FRegion.geoPos.Y = AMapStateInitial.lng;
    FRegion.zoom = AMapStateInitial.Zoom;
  }
  Execute();
  ForeclosuresBlinkingStart();
  Search();
}

function SliderReset(ASliderName, APosition)
{
  var LSlider = fdSliderController.sliders[ASliderName];
  var LSliderElement = document.getElementById(ASliderName);
  if (LSlider == null)
    return;
  clearTimeout(LSlider._timer);
  LSliderElement.value = APosition;
  LSlider.recalculate();
}

function getSoldDataShow()
{
  var LSoldDataFilter = document.getElementById('aPropTypeFilterID6');
  return (document.URL.match(/\bsold\./i) || (LSoldDataFilter.getAttribute('SoldDataShow') == '1'));
}

function setSoldDataShow(ASoldDataShow)
{
  var LSoldDataFilter = document.getElementById('aPropTypeFilterID6');

  LSoldDataFilter.innerHTML = '<span><div>' + (ASoldDataShow ? 'GO BACK' : 'SOLD HISTORY') + '</div></span>'; //'<div>' + 'dfsd' + '</div>'  doesn't work under FF
  LSoldDataFilter.style.background = (ASoldDataShow ? '#C44918 url(images/btn_back.gif) no-repeat 10px center' : '#B3D09D');
  LSoldDataFilter.setAttribute('SoldDataShow', (ASoldDataShow ? '1' : '0'));
  
  document.getElementById('tblFilter_Price').style.display = (ASoldDataShow ? 'none' : '');
  document.getElementById('tblFilter_DateSold').style.display = (ASoldDataShow ? '' : 'none');
  
  if (isEmbedded())
  {
    $('.filterCaption#fc' + (ASoldDataShow ? 'Price' : 'DateSold')).parent().css('display', 'none');
    $('.filterCaption#fc' + (ASoldDataShow ? 'DateSold' : 'Price')).parent().css('display', '');
  }
}

function Reset(AMapStateInitial, AZoomPreserve)
{
  PropertyTypeSet(AMapStateInitial ? AMapStateInitial.PropertyType : 0);

  var LSoldDataShow = getSoldDataShow();
  if (!LSoldDataShow && document.getElementById('PriceFromSliderWrapper')) {
    SliderReset('PriceFrom', AMapStateInitial ? AMapStateInitial.PriceFrom : 0);
    SliderReset('PriceTo', AMapStateInitial ? AMapStateInitial.PriceTo : 84);
    PriceToUpdate();
  }
  
  if (LSoldDataShow && document.getElementById('DateSoldFromSliderWrapper')) {
    SliderReset('DateSoldFrom', 6);
    SliderReset('DateSoldTo', 11);
    DateSoldUpdate(0);
  }

  SliderReset('Beds', AMapStateInitial ? AMapStateInitial.Beds : 0);
  BedsUpdate();
  
  SliderReset('Baths', AMapStateInitial ? AMapStateInitial.Baths : 0);
  BathsUpdate();
  
  SliderReset('HomeSize', AMapStateInitial ? AMapStateInitial.HomeSize : 0);
  HomeSizeUpdate();
  
  if (!AZoomPreserve && isEmbedded())
    SliderReset('zoomSlider', -9);
}

function Search()
{
  if(isEmbedded())
    filterHide();
    
  FSearchNo++;
  FSearchString = [
    '&PriceFrom=', FPriceFrom,
    '&PriceTo=', FPriceTo,
    '&Beds=', FBeds,
    '&Baths=', FBaths,
    '&HomeSize=', FHomeSize,
    '&PropertyType=', PropertyTypeGet(),
    //'&State=', FState,
    //'&PriceReduced=', PriceReducedGet()
  ].join('');
  
  if (getSoldDataShow())
    FSearchString += [
      '&SoldDataShow=1',
      '&DateFrom=', FDateSoldFrom,
      '&DateTo=', FDateSoldTo,
    ].join('');
  MapActivate();
  OnZoomEnd();
  OnMoveEnd();
}

function SessionClear(AData, AResponseCode)
{
  Search();
}

function CacheClear()
{
  GDownloadUrl(DocumentURLGet() + 'Section=SessionClear', SessionClear);
}

/* --------------- Details ------------------ */

function BookmarkCreate(ATitle, AHouseID)
{
  var LURL = DocumentURLGet() + 'Section=Details&Format=html&IsBookmark=1&HouseID=' + AHouseID;
  doEventTrack('PropertyDetails', 'Bookmark');

  if (window.sidebar)
  {
    window.sidebar.addPanel(ATitle, LURL,"");
  }
  else
  if( document.all )
  {
    window.external.AddFavorite(LURL, ATitle);
  }
  else
  if( window.opera && window.print)
  {
    return true;
  }
}

function DetailsPrint(AHouseID)
{
  LURL = DocumentURLGet() + 'Section=Details&Format=html&Print=1&HouseID=' + AHouseID;
  window.open(LURL, '', 'toolbar=no,width=720,height=500,status=yes,scrollbars=yes,resize=yes');
  return false;
}

function modalFormClose()
{
  var LShadowDIV = document.getElementById('ShadowDIV');
  var LFormName = LShadowDIV.getAttribute('frmName');
  var LForm = document.getElementById(LFormName);

  LForm.style.display = LShadowDIV.style.display = 'none';
}

function modalFormShow(AName)
{
  function LDimensionsGet(AWindow)
  {
    if( typeof( AWindow.innerWidth ) == 'number' )
      return { //Non-IE
        W: AWindow.innerWidth,
        H: AWindow.innerHeight};
    else
    if (AWindow.document.documentElement &&
      (AWindow.document.documentElement.clientWidth || AWindow.document.documentElement.clientHeight)
    )
      return {//IE 6+ in 'standards compliant mode'
        W: AWindow.document.documentElement.clientWidth,
        H: AWindow.document.documentElement.clientHeight};
    else
    if (AWindow.document.body &&
      (AWindow.document.body.clientWidth || AWindow.document.body.clientHeight)
    )
      return {//IE 4 compatible
        W: AWindow.document.body.clientWidth,
        H: AWindow.document.body.clientHeight}
  }
  
  function LframeElementCheck()
  {
    try {
      return window.frameElement.contentWindow;
    }
    catch(e){
      return null;
    }
  }
  
  var
    LDim = LDimensionsGet(window),
    LForm = document.getElementById(AName),
    LShadowDIV = document.getElementById('ShadowDIV');
  LShadowDIV.setAttribute('frmName', AName);

  LForm.style.display = LShadowDIV.style.display = 'block';

  var LPos = {left: (LDim.W - LForm.clientWidth)/2, top: (LDim.H - LForm.clientHeight)/2};
  if (isEmbedded() && LframeElementCheck())
  {
    var LDimP = LDimensionsGet(window.frameElement.contentWindow.top);
    var LTopAbs = ElementAbsTopGet(window.frameElement) + LPos.top;
    if (LTopAbs + LForm.clientHeight > LDimP.H)
      LPos.top = Math.max(0, LPos.top - ((LTopAbs + LForm.clientHeight) - LDimP.H));
  }

  LForm.style.left = Math.max(LPos.left, 0) + 'px';
  LForm.style.top = Math.max(LPos.top, 0) + 'px';

  LShadowDIV.style.width = LDim.W + 'px';
  LShadowDIV.style.height = LDim.H + 'px';

  return LForm;
}

function EmailPropertyDIVShow(AHouseID)
{
  modalFormShow('EmailPropertyDIV');
  var LInput = document.getElementById('EmailURL');
  if (LInput)
    LInput.value = DocumentURLGet() + 'Section=Details&Format=html&HouseID=' + AHouseID;
}

function EmailPropertyDIVClose()
{
  modalFormClose();
}

function InputQueryStringGet(AName)
{
  var LURL = '', LInput = document.getElementById(AName);
  if (LInput && (LInput.value.toString() != ''))
    LURL = '&' + (LInput.name ? LInput.name : AName) + '=' + escape(LInput.value);
  return LURL;
}

function EmailPropertyResult(AData, AResponseCode)
{
  alert(AData);
}

function EmailProperty()
{
  var LQueryString =
    InputQueryStringGet('YourName') +
    InputQueryStringGet('YourEmail') +
    InputQueryStringGet('FriendName') +
    InputQueryStringGet('FriendEmail') +
    InputQueryStringGet('EmailSubject') +
    InputQueryStringGet('EmailNotes') +
    InputQueryStringGet('EmailURL');

  GDownloadUrl(DocumentURLGet() + 'Section=EmailProperty' + LQueryString, EmailPropertyResult);
  EmailPropertyDIVClose();
}

function SignupDIVShow(ACallback)
{
  document.getElementById('trCredentialsEmail').style.display = 'none';
  var LSignupDIV = modalFormShow('SignupDIV');
  LSignupDIV.setAttribute('callback', (ACallback ? ACallback : ''));

  var LActiveControl = document.getElementById(document.getElementById('LogonPWD') ? 'LogonEmail' : 'LogonName');
  if (LActiveControl)
    LActiveControl.focus();
}

function SignupDIVClose(AIndicatorHide)
{
  modalFormClose();
  if (AIndicatorHide)
    IndicatorVisibleSet(false);
}

function SignupOnComplete(AData, AResponseCode)
{
  var LSignupDIV = document.getElementById('SignupDIV');
  if (AData == '0')
  {
    var LCallback = LSignupDIV.getAttribute('callback');
    SignupDIVClose();
    if (LCallback)
      window.setTimeout(LCallback, 0)
    else
      MarkersLoad(false);
  }
  else
  {
    var LDiv = document.getElementById('SignupStep2DIV');
    if (LDiv && (AData.match(/.*\bemail message has been sent\b/ig)))
    {
      var LUserEmail = document.getElementById('SignupEmail').value;
      with (document.getElementById('SignupStep2Email'))
      {
        //href = 'mailto:' + LUserEmail;
        innerHTML = LUserEmail;
      }

      LDiv.style.top = '-10000px';
      LDiv.style.left = '0px';
      LDiv.style.display = 'block';
      LDiv.style.top = (LSignupDIV.offsetTop + ((LSignupDIV.clientHeight - LDiv.clientHeight) / 2)) + 'px';
      LDiv.style.left = (LSignupDIV.offsetLeft + ((LSignupDIV.clientWidth - LDiv.clientWidth) / 2)) + 'px';
    }
    else
    {
      doEventTrack('Signup', 'Failed', AData);
      alert(AData);
    }
  }
}

function SignupStep2DIVClose()
{
  document.getElementById('SignupStep2DIV').style.display = 'none';
}

function AcceptTermsGetCheck()
{
  var LResult = document.getElementById('cbAcceptTerms').checked;
  if (!LResult)
     alert('Please Accept Terms');
  return LResult;
}

function doSignup()
{
  if (!SignupCredentialsValidate())
    return;
    
  GDownloadUrl([
    DocumentURLGet(),
    'Section=Signup',
    InputQueryStringGet('SignupUN'),
    InputQueryStringGet('SignupPhone'),
    InputQueryStringGet('SignupEmail'),
    InputQueryStringGet('SignupPWD'),
    '&LoggedDS=', FLoggedDS,
    mapStateParamsGet(),
  ].join(''), SignupOnComplete);
  doPageviewTrack('Signup');
}

function SignupCredentialsValidate()
{
  var LSignupPWD = document.getElementById('SignupPWD');
  return (
       FieldValidate(document.getElementById('SignupUN'), fvtNotEmpty, 'Name', '', true)
    && FieldValidate(document.getElementById('SignupEmail'), fvtEMailEx, 'Email', '', true)
    && (!LSignupPWD || FieldValidate(LSignupPWD, fvtNotEmpty, 'Password', '', true))
    && AcceptTermsGetCheck()
  );
}

function LogonOnComplete(AData, AResponseCode)
{
  if (AData == '0')
  {
    var LCallback = document.getElementById('SignupDIV').getAttribute('callback');
    SignupDIVClose();
    if (LCallback)
      window.setTimeout(LCallback, 0)
    else
      MarkersLoad(false);
  }
  else
  {
    doEventTrack('Logon', 'Failed', AData);
    alert(AData);
  }
}

function doLogon()
{
  if (!LogonCredentialsValidate())
    return;
  
  GDownloadUrl([
    DocumentURLGet(),
    'Section=Logon',
    InputQueryStringGet('LogonEmail'),
    InputQueryStringGet('LogonPWD'),
    InputQueryStringGet('LogonName'),
    '&LoggedDS=', FLoggedDS
  ].join(''), LogonOnComplete);
  doPageviewTrack('Logon');
}

function LogonCredentialsValidate()
{
  return (
    FieldValidate(document.getElementById('LogonEmail'), fvtEMailEx, 'E-Mail Address', '', true)
    && (
      FieldValidate(document.getElementById('LogonPWD'), fvtNotEmpty, 'Password', '', true)
      ||
      FieldValidate(document.getElementById('LogonName'), fvtNotEmpty, 'User Name', '', true)
    )
//    && AcceptTermsGetCheck()
  );
}

function credentialsEmail(AStep)
{
  switch (AStep)
  {
    case 1:
      document.getElementById("trCredentialsEmail").style.display = '';
      break;
    case 2:
      var LEmail = document.getElementById("Email2")
      if (FieldValidate(LEmail, fvtEMailEx, 'E-Mail Address', '', true))
        GDownloadUrl([
          DocumentURLGet(),
          'Section=CE',
          '&Email=' + escape(escape(LEmail.value))
        ].join(''), credentialsEmailOnComplete);
      doEventTrack('Logon', 'EmailCredentials');
      break;
  }
}

function  credentialsEmailOnComplete(AData, AResponseCode)
{
  alert(AData);
}

function ContactAgentResult(AData, AResponseCode)
{
  alert(AData);
}

var
  FRealtorEmail = '';
  FDetailsRealtorEmail = '';

function ContactAgent()
{
  var LForm = document.getElementById('ContactAgentDIV');
  GDownloadUrl([
    DocumentURLGet(),
    'Section=ContactAgent',
    InputQueryStringGet('ContactName'),
    InputQueryStringGet('ContactEmail'),
    InputQueryStringGet('ContactNotes'),
    '&HouseID=' + LForm.getAttribute('propertyID'),
    '&City=' + FCurMarker.info.city,
    '&ContactURL=' + LForm.getAttribute('contactReason')
  ].join(''), ContactAgentResult);
  
  doEventTrack('PropertyDetails', 'ContactAgent');
  ContactAgentDIVClose();
}

function ContactAgentDIVShow(AHouseID, AReason)
{
  var LContactAgentDIV = modalFormShow('ContactAgentDIV');
  LContactAgentDIV.setAttribute('propertyID', AHouseID);
  LContactAgentDIV.setAttribute('contactReason', escape(AReason));
}

function ContactAgentDIVClose()
{
  modalFormClose();
}

function DetailsExecute(APrint, ALatitude, ALongitude, APrice)
{
  if (!GBrowserIsCompatible())
    return;

  // map initialization
  LMap = new GMap2(document.getElementById("details_map"));
  var LMapType = G_NORMAL_MAP;
  if (APrint != 1)
    LMapType = G_SATELLITE_MAP;
  var LLatLng = new GLatLng(ALatitude, ALongitude);

  LMap.setCenter(LLatLng, 16, LMapType);
  LMap.setZoom(LMap.getCurrentMapType().getMaximumResolution(LLatLng) - 2);
  LMap.enableContinuousZoom();
  LMap.enableDoubleClickZoom();
  LMap.scrollWheelZoomEnabled();
  LMap.logoPassive = true;
  LMap.suppressCopyright = true;

  // map controls
  LMap.addControl(new GSmallMapControl());
  LMap.addControl(new GMapTypeControl());
  var LOverviewMapControl = new GOverviewMapControl();
  LMap.addControl(LOverviewMapControl);
  LOverviewMapControl.hide(true);

  var LPoint = new GLatLng(ALatitude, ALongitude);
  var LMarker = new GMarker(LPoint, MarkerIconGet(APrice, 1, 0, 0), true);

  LMap.addOverlay(LMarker);
  if (APrint == 1)
    window.print();
}

/* --------------- Images Scroller ------------------ */

function PhotoOnError()
{
  document.images["imgDisplay"].src = "Images/Houses/Common/Normal/noavailable.gif";
}

var FLockCount = 0;
function ScrollerPositionValidate()
{
  if(FLockCount > 0)
  {
    setTimeout("ScrollerPositionValidate();", 100);
    return;
  }

  LScrollerTable = document.getElementById("ScrollerTable");
  LLeft = parseInt(LScrollerTable.style.left);
  if (isNaN(LLeft))
  {
    LLeft = 0;
  }
  LLeft = Math.round(LLeft / 49.0) * 49;
  LScrollerTable.style.left = LLeft;
}

function ScrollerScroll(AShift)
{
  LdivContainer = document.getElementById("divContainer");
  LScrollerTable = document.getElementById("ScrollerTable");
  LLeft = parseInt(LScrollerTable.style.left);
  if (isNaN(LLeft))
    LLeft = 0;

  LLeft += AShift;
  if (LdivContainer.clientWidth > LScrollerTable.clientWidth)
    LLeft = (LdivContainer.clientWidth - LScrollerTable.clientWidth) / 2;
  else
  if (LLeft > 0)
    LLeft = 0;
  else
  if (LLeft < (LdivContainer.clientWidth - LScrollerTable.clientWidth))
    LLeft = (LdivContainer.clientWidth - LScrollerTable.clientWidth);
  LScrollerTable.style.left = LLeft + "px";
}

function ScrollerLeftRightScroll(AScrollMultiplier)
{
  var FShifts = [9+2, 8+2, 6+1, 6+1, 4, 4, 2, 2, 1, 1];
  var FTimes = [0, 111/2, 222/2, 333/2, 444/2, 555/2, 666/2, 777/2, 888/2, 999/2];
  FLockCount++;
  for(var i = 0; i < FShifts.length; i++)
  {
    setTimeout("ScrollerScroll(" +
      (AScrollMultiplier * FShifts[i].valueOf()).valueOf() + ");",
       FTimes[i]);
  }
   setTimeout("ScrollerPositionValidate(); FLockCount--;", FTimes[FTimes.length - 1] + 100);
}

function ScrollerLeftScroll()
{
  ScrollerLeftRightScroll(-1);
}

function ScrollerRightScroll()
{
  ScrollerLeftRightScroll(1);
}

var FHousePhotos;
var FActiveImageIndex = 0;
var FActiveImageGroup = 0;
var FLastImageGroupShowed = false;

function ImageActivate(AIndex)
{
  var LScrollerTable = document.getElementById("ScrollerTable");
  var LCells = LScrollerTable.rows[0].cells;
  LImageCount = LCells.length;
  if (AIndex < 0)
    AIndex = 0;
  else
  if (AIndex > LImageCount - 1)
    AIndex = LImageCount - 1;
    
  LCells[FActiveImageIndex].className = "nvgCellPhotos0";
  FActiveImageIndex = AIndex;
  LActiveCell = LCells[FActiveImageIndex];
  LActiveCell.className = "nvgCellPhotos1";
  var LimgDisplay = document.getElementById("imgDisplay");
  LimgDisplay.src = FHousePhotos[AIndex];

  var LimgForward = document.getElementById("imgForward");
  var LimgBackward = document.getElementById("imgBackward");
  var LIsFirstImage = (FActiveImageIndex == 0);
  var LIsLastImage = (FActiveImageIndex == (LImageCount - 1));
  if (LIsFirstImage)
  {
    LimgForward.src = "Images/DetailsPage/forward.gif";
    LimgForward.style.cursor = 'pointer';
    LimgBackward.src = "Images/DetailsPage/backward_disabled.gif";
    LimgBackward.style.cursor = 'default';
  }
  else
  if (LIsLastImage)
  {
    LimgForward.src = "Images/DetailsPage/forward_disabled.gif";
    LimgForward.style.cursor = 'default';
    LimgBackward.src = "Images/DetailsPage/backward.gif";
    LimgBackward.style.cursor = 'pointer';
  }
  else
  {
    LimgForward.src = "Images/DetailsPage/forward.gif";
    LimgForward.style.cursor = 'pointer';
    LimgBackward.src = "Images/DetailsPage/backward.gif";
    LimgBackward.style.cursor = 'pointer';
  }

  var LActiveImageGroup = Math.floor(FActiveImageIndex / 5);
  if(LActiveImageGroup == FActiveImageGroup)
    return;
    
  var LLastImageGroupCount = LImageCount % 5;
  var LIsLastImageGroup = (FActiveImageIndex >= (LImageCount - LLastImageGroupCount) || FLastImageGroupShowed);
  if (!FLastImageGroupShowed)
    FLastImageGroupShowed = LIsLastImageGroup;
  var LScrollAmount = (LIsLastImageGroup)?LLastImageGroupCount:5;
  if(LActiveImageGroup < FActiveImageGroup)
  {
    FLastImageGroupShowed = false;
    for(i=0;i<LScrollAmount;i++)
      ScrollerRightScroll();
  }
  else
  if(LActiveImageGroup > FActiveImageGroup)
  {
    for(i=0;i<LScrollAmount;i++)
      ScrollerLeftScroll();
  }
  FActiveImageGroup = LActiveImageGroup;
}

function ImageNextActivate()
{
  ImageActivate(FActiveImageIndex + 1);
}

function ImagePreviousActivate()
{
  ImageActivate(FActiveImageIndex - 1);
}

/*-----------------------------Foreclosures button blinking functions---------------------------------*/

var FIsDirectBlinking = true;
var FColorCurrent = 0;
var FColors = Array("#FFCD31", "#FDD03C", "#FED345", "#FED447", "#FED44A",
  "#FED54E", "#FED651", "#FED653", "#FED754", "#FED757");
var FIsBlinkingIntervalAssigned = false;
var FBlinkingInterval;

function BlinkingIntervalClear()
{
  if (FIsBlinkingIntervalAssigned)
    self.clearInterval(FBlinkingInterval);
  FIsBlinkingIntervalAssigned = true;
}

function ColorSet(AID, AColor)
{
  var LElement = document.getElementById('btnForeclosures');
  if (LElement)
    LElement.style.background = AColor;
}

function ForeclosuresBlinkingStart()
{
  BlinkingIntervalClear();
  FBlinkingInterval = this.setInterval("ForeclosuresBlinkingChange()", 30);
}

function ForeclosuresBlinkingChange()
{
  ColorSet('btnForeclosures', FColors[FColorCurrent]);
  if (FIsDirectBlinking)
  {
    if (FColorCurrent + 1 == FColors.length)
    {
      FIsDirectBlinking = false;
      FColorCurrent--;
    }
    else
    {
      FColorCurrent++;
    }
  }
  else
  {
    if (FColorCurrent == 0)
    {
      FIsDirectBlinking = true;
      FColorCurrent++;
    }
    else
    {
      FColorCurrent--;
    }
  }
  BlinkingIntervalClear();
  FBlinkingInterval = this.setInterval("ForeclosuresBlinkingStart()", 30);
}

function  IndicatorVisibleSet(AVisible)
{
  document.getElementById('Indicator').style.display = AVisible ? 'block' : 'none';
}

function tooltipBodyGet(ATooltip)
{
  return ([
    '<div>',
      '<table border="0" cellspacing="0" cellpadding="0">',
      ATooltip,
      '</table>',
    '</div>'
  ].join(''));
}

function tooltipGet(AMarker, APageInd)
{
  var LTooltip;
  switch (AMarker.info.type)
  {
    case MARKER_TYPE_CITY:
      LTooltip = tooltipCityGet(AMarker);
      break;
    case MARKER_TYPE_PROPERTY:
      LTooltip = tooltipPropertiesGet(AMarker, APageInd);
      break;
  }
  return tooltipBodyGet(LTooltip);
}

function tooltipCityGet(AMarker)
{
  return ([
    '<tr style="height:25px;">',
      '<td class="bl br" bgcolor="#A0AFCA" height="25">',
        '<table width="100%" border="0" cellspacing="0" cellpadding="0">',
        '<tr>',
          '<td height="25" class="bt" style="text-align:center;vertical-align: middle;color:#213149;" width="100%" nowrap>', AMarker.info.city, '</td>',
        '</tr>',
        '</table>',
      '</td>',
    '</tr>',
    '<tr style="height:25px;" bgcolor="#E0EBFE">',
      '<td valign="top" align=center style="padding:4px" class="bb bl br">',
        '<table border="0" cellspacing="0" cellpadding="0">',
        '<tr>',
          '<td align=center><b>', AMarker.info.count, '</b> ', (getSoldDataShow() ? 'Sold Homes' : 'Homes for Sale'), '</td>',
        '</tr>',
        '<tr>',
          '<td align=center style="padding-top: 2px; padding-bottom: 2px;">Click Now</td>',
        '</tr>',
        '<tr valign=top>',
          '<td><img src="images/cities/common/city.jpg', /*AMarker.data[0].imgSRC*/'', '" width=139 height=96></td>',//__width=160 __height=120
        '</tr>',
        '</table>',
      '</td>',
    '</tr>'
  ].join(''));
}

function  tooltipPropertiesGet(AMarker, APageInd)
{
  return ([
    '<tr style="height:25px;">',
      '<td class="bl br" bgcolor="#A0AFCA" height="25">',
        '<table width="100%" border="0" cellspacing="0" cellpadding="0">',
        '<tr>',
          '<td height="25" class="bt" style="text-align:left;color:#213149;" width="100%" nowrap>&nbsp;', AMarker.info.city, '</td>',
          '<td class="bt"> <a href="javascript: MarkerZoom(MarkerGet(', AMarker.info.ID, '), true);"><img alt="Zoom In" border=0 src="images/zoomin.gif" hspace=4></a></td>',
          '<td class="bt"> <a href="javascript: TooltipUnlock();"><img alt="Close" border=0 src="images/close.gif"></a></td>',
        '</tr>',
        '</table>',
      '</td>',
    '</tr>',
    '<tr style="height:25px;" bgcolor="#E0EBFE">',
      '<td valign="top" class="bb bl br" style="padding:4px">',
        tooltipPropertiesNavigatorGet(AMarker, APageInd ? APageInd : 0),
        '<table border="0" cellspacing="0" cellpadding="0">',
        '<tr valign=top>',
          '<td width="100%">',
            '<table width="100%" border="0" cellspacing="4" cellpadding="0">',
              tooltipPropertyRowsGet(AMarker, APageInd ? APageInd : 0),
            '</table>',
            '<font size=1 color="blue"><center>Click on balloon or picture for details</center></font>',
          '</td>',
        '</tr>',
        '</table>',
      '</td>',
    '</tr>'
  ].join(''));
}

function  tooltipPropertiesNavigatorGet(AMarker, APageInd)
{
  function navigatorLinkGet(AMarkerID, ALPageInd, AEnabled, AImgName)
  {
    var LImg = ['<img border=0 src="Images/DetailsPage/',
      AImgName, (AEnabled ? '' : '_disabled'), '.gif">'].join('');
    if (AEnabled)
      return ([
        '<a href="javascript: GroupDetailsPageLoad(', AMarkerID, ', ', ALPageInd, ');">',
        LImg, '</a>'].join(''));
    else
      return (['<font color=gray>', LImg, '</font>'].join(''));
  }
  
  var TOOLTIP_MRP = 3, LRecordCount = AMarker.info.count;
  if (LRecordCount <= TOOLTIP_MRP)
    return '';

  return ([
    '<table width="100%" cellspacing="0" cellpadding="0">',
    '<tr>',
      '<td align=center>',
        '<table cellspacing="0" cellpadding="0">',
        '<tr>',
          '<td class="smalllink">',
            navigatorLinkGet(AMarker.info.ID, APageInd - 1,
              APageInd > 0, 'backward'),
          '</td>',
          '<td>&nbsp;',
            APageInd * TOOLTIP_MRP + 1, '-',
            Math.min(LRecordCount, (APageInd + 1) * TOOLTIP_MRP), ' of ', LRecordCount, '&nbsp;',
          '</td>',
          '<td class="smalllink">',
            navigatorLinkGet(AMarker.info.ID, APageInd + 1,
              (APageInd + 1) * TOOLTIP_MRP < LRecordCount, 'forward'),
          '</td>',
        '</tr>',
        '</table>',
      '</td>',
    '</tr>',
    '</table>'
  ].join(''));
}

function  tooltipPropertyRowsGet(AMarker, APageInd)
{
  function LValueFormat(AValue)
  {
    return (AValue ? AValue : '<font color=gray>N/A</font>');
  }
  
  var LResult = '', LPropID = 0, LTo = (APageInd + 1) * TOOLTIP_MRP;
  if (LTo > AMarker.data.length)
    LTo = AMarker.data.length;
  for (var i = APageInd * TOOLTIP_MRP; i < LTo; i++)
  {
    LPropID = AMarker.data[i].ID;
    LResult = LResult + ([
    '<tr>',
    '<td>',
      '<table border="0" width="100%" cellspacing="0" cellpadding="0">',
      '<tr valign=center>',
        '<td class="smalllink" nowrap align=left>',
          '<img valign=center id="Reviewed_', LPropID, '" src="images/', (AMarker.data[i].reviewed > 0 ? 'reviewed.gif' : 'spacer.gif'), '">',
          '<b><a href="javascript: DetailsOpen(', LPropID, ')">', AMarker.data[i].address, '</a></b>',
        '</td>',
        '<td><img src="images/spacer.gif" width="8"></td>',
        '<td align=right nowrap>',
          (AMarker.data[i].status == 4 ?
            ['<b><font color=black>SOLD&nbsp;&nbsp;', AMarker.data[i].dateSold.replace(/-/g, '/'), '</font></b>']
            :
            ['<b><font color=navy>', AMarker.data[i].price, '</font></b>']
          ).join(''),
        '</td>',
      '</tr>',
      '</table>',
      '<table border="0" width="100%" cellspacing="0" cellpadding="0">',
      '<tr valign=center>',
        '<td width="100%">',
          '<table width="100%" cellspacing="4" cellpadding="0" border="0">',
          '<tr style="padding-bottom: 4px;">',
            '<td style="background: url(Images/SearchBar/Bed.gif) no-repeat center center;"><img src="images/spacer.gif" width="26px"></td>',
            '<td class="tooltipPropInfo">', LValueFormat(AMarker.data[i].bedCount), '</td>',
          '</tr>',
          '<tr style="padding-bottom: 4px;">',
            '<td style="background: url(Images/SearchBar/Bath.gif) no-repeat center center;"><img src="images/spacer.gif" width="26px"></td>',
            '<td class="tooltipPropInfo">', LValueFormat(AMarker.data[i].bathCount), '</td>',
          '</tr>',
          '<tr style="padding-bottom: 4px;">',
            '<td style="background: url(Images/SearchBar/HomeSize.gif) no-repeat center center;"><img src="images/spacer.gif" width="26px"></td>',
            '<td class="tooltipPropInfo">', LValueFormat(AMarker.data[i].buildingSF), '</td>',
          '</tr>',
          '<tr style="display: ' + (AMarker.data[i].dataSourceID == 7 || AMarker.data[i].dataSourceID == 6 ? 'none;' : '') + '">',
            '<td style="padding-top:10px;" colspan=2><img src="Images/DataSources/', AMarker.data[i].dataSourceID, '.gif" alt=""></td>',
          '</tr>',
          '</table>',
        '</td>',
        '<td><img src="images/spacer.gif" width="8"></td>',
        '<td align=center valign=center>',
          '<div style="width:164px;height:124px;border:none;overflow:none;">',
            '<table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0">',
            '<tr valign=center>',
              '<td align=center>',
                '<a href="javascript: DetailsOpen(', LPropID, ')">',
                  '<img border=0 src="', AMarker.data[i].imgSRC, '">',
                '</a>',
              '</td>',
              '</tr>',
            '</table>',
          '</div>',
        '</td>',
      '</tr>',
      '</table>',
    '</td>',
    '</tr>'].join(''));
  }
  
  return LResult;
}

function mapViewOptionsToggle()
{
  var LElem = document.getElementById('mapViewOptions');
  var LSelector = document.getElementById('mapViewState');
  LElem.style.display = LElem.style.display == 'none' ? '' : 'none';
  LElem.style.left = LElem.style.top = 'auto';
  LElem.style.left = parseInt(LSelector.offsetWidth) - parseInt(LElem.offsetWidth) + 0;
  LElem.style.top = LElem.offsetTop - 1;
}

function mapViewStateSet(AMapType)
{
  FMap.setMapType(AMapType);
  //document.getElementById('mapViewValue').innerHTML = FMap.getCurrentMapType().getName();
  if (isEmbedded())
    filterHide()
  else
    mapViewOptionsToggle();
}

function mapViewOptionsHide()
{
  document.getElementById('mapViewOptions').style.display = 'none';
  //this.event.cancelBubble = true;
}

/*!!!*/
function filterHide()
{
  $('#cntrFilters').css({opacity: '0', left: '-10000px'});
  $('#cntrFilters').children().each(function(AIndex, ADOMElement) {
    if(ADOMElement.id.match(/tblFilter\_/i))
      $('#' + ADOMElement.id).css({/*display: 'none', */left: '-10000px'});
  });
}

function filterToggle(AName)
{
  if (parseFloat($('#cntrFilters').css('opacity')) > 0)
//    if ($('#cntrFilters #tblFilter_' + AName).css('display') == 'none')
    if (parseInt($('#cntrFilters #tblFilter_' + AName).css('left')) < 0)
      $('#cntrFilters').fadeTo(100, 0, function(){filterHide(); filterShow(AName)});
    else
      $('#cntrFilters').fadeTo(200, 0, filterHide);
  else
    filterShow(AName);
}

function filterShow(AName)
{
  var
    LFilter = $('#cntrFilters #tblFilter_' + AName),
    LLeft = $('#map_filter_top div#fc' + AName).position().left;
  LFilter.css({/*display: '', */left: '0px'});
  $('#cntrFilters').
    css({width: (AName == 'MapView' ? '100px' : '254px'), height: '107px', left: (LLeft + 52) + 'px', top: '26px'}).
    css({height: (LFilter.height() - 4) + 'px'}).
    fadeTo('normal', 0.85);
}

function mapFilterBoundsUpdate()
{
  $('#map_filter_top').css('width', (Math.max($('#map_filter_top > table').width(), 563) + 50) + 'px');
//  $('#map_filter_top').css('width', $('#map_filter_top > table').width() + 50);
}

var FtmrZoomSet = 0;
function zoomSet()
{
  clearTimeout(FtmrZoomSet);
  FtmrZoomSet = setTimeout('zoomSet2()', 1500);
}

function zoomSet2()
{
  FMap.setZoom(-parseInt(fdSliderController.sliders['zoomSlider']._inp.value));
}