// History
function cViewState(APropID)
{
  var LMapCenter = FMap.getCenter();
  this.lat = LMapCenter.lat();
  this.lng = LMapCenter.lng();
  this.zoom = FMap.getZoom();
  this.mapType = FMap.getCurrentMapType().getName();
  this.propsType = PropertyTypeGet();
  this.propsGroup = PropertyGroupGet();
  this.propID = APropID;

  this.isEqual = function(AMapInfo)
  {
    return (
      (this.lat == AMapInfo.lat)
      && (this.lng == AMapInfo.lng)
      && (this.zoom == AMapInfo.zoom)
      && (this.mapType == AMapInfo.mapType)
      && (this.propsType == AMapInfo.propsType)
      && (this.propsGroup == AMapInfo.propsGroup)
      && (this.propID == AMapInfo.propID));
  };
}

function checkURL()
{
  var LHash;
  if ($.browser.msie && ($.browser.version < 9))
  {
    var ihistory = document.getElementById("ifrHistory");
    LHash = ihistory.contentWindow.location.hash;
  }
  else
    LHash = document.location.hash;

  LHash = LHash.replace('#','');
  if (LHash == '')
    LHash = 1;
  if (LHash < ZMT.history.length)
    HistoryBack();
}

function BrowserHistorySave()
{
  var LHash = ZMT.history.length;
  if ($.browser.msie && ($.browser.version < 9))
  {
    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 HistoryAdd(APropID)
{
  var LLength = ZMT.history.length, LViewState = new cViewState(APropID);
  if ((LLength != 0) && ((ZMT.history[LLength - 1]).isEqual(LViewState)))
    return;

  ZMT.history.push(LViewState);
  BrowserHistorySave();
}

function HistoryBack()
{
  var LLength = ZMT.history.length;
  if (LLength < 2)
    return;

  if (typeof((ZMT.history.pop()).propID) != 'undefined') {
    MapActivate(true);
    SignupDIVClose();
    return;
  }

  var LMapType = G_NORMAL_MAP, LViewState = ZMT.history[ZMT.history.length - 1];
  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.propsType, true);
  PropertyGroupSet(LViewState.propsGroup, true);
  FMap.setCenter(new GLatLng(LViewState.lat, LViewState.lng), LViewState.zoom, LMapType);
}

function isEmbedded()
{
  if (typeof(ZMT.isEmbedded) == 'undefined')
    ZMT.isEmbedded = (document.location.href.match(/[\&|\?]embedded=1/i) ? true : false);
  return ZMT.isEmbedded;
}

/* Google analytics */
function doEventTrack(ACategory, AAction)
{
  try {
    if (gaptAH) gaptAH._trackEvent(ACategory, AAction);
    if (gaptDefault) gaptDefault._trackEvent(ACategory, AAction);
  }
  catch(err) {}
}

function doPageviewTrack(AName)
{
  try {
    var LName = AName ? '/' + AName : '';
    if (gaptAH) gaptAH._trackPageview(LName);
    if (gaptDefault) gaptDefault._trackPageview(LName);
  }
  catch(err) {}
}

/* --------------- Google Map ------------------ */

var
  PATH_IMAGES = 'images/20110706/',
  MARKER_TYPE_PROPERTY = 1,
  MARKER_TYPE_CITY = 2,
  TOOLTIP_MRP = 2,
  ZOOM_DEFAULT = 11;

var FMap, ZMT = {filter: {}, history: [], markerCur: null, markers: null, markersCacheClear: false, tooltip: null, tooltipLocked: false, tooltipMarker: null, searchNo: 0, searchStr: ''};
var FRegion = {name: null, geoPos: {X: 26.8682746887207, Y: -80.1607818603516}, zoom: 11};

function RegionSet(ARegion)
{
  FRegion = {name: ARegion, zoom: ZOOM_DEFAULT};
  switch (ARegion)
  {
    case 'charlotte':
      FRegion.geoPos = {X: 35.2224998474121, Y: -80.8375396728516};
      FRegion.zoom = ZOOM_DEFAULT - 2;
      break;
    case 'Columbia SC':
      FRegion.geoPos = {X: 33.9985504150391, Y: -81.0452499389648};
      FRegion.zoom = ZOOM_DEFAULT - 2;
      break;
    case 'Peoria IL':
      FRegion.geoPos = {X: 40.692138671875, Y: -89.587760925293};
      FRegion.zoom = ZOOM_DEFAULT - 2;
      break;
    case 'Wilmington NC':
      FRegion.geoPos = {X: 34.1871601758213, Y: -78.0087410905783};
      FRegion.zoom = ZOOM_DEFAULT - 2;
      break;
    case 'wilmington':
      FRegion.geoPos = {X: 34.270779138285498, Y: -77.89443969726562};
      FRegion.zoom = ZOOM_DEFAULT - 1;
      break;
    case 'Raleigh-Durham NC':
    case 'rdu':
    case 'opensky':
      FRegion.geoPos = {X: 35.8575792601477475, Y: -78.704681396484375};
      FRegion.zoom = ZOOM_DEFAULT - 2;
      break;
    case 'cayman islands':
      FRegion.geoPos = {X: 19.308875, Y: -81.252136};
      FRegion.zoom = ZOOM_DEFAULT - 1;
      break;
    case 'triad':
      //FRegion.geoPos = {X: 36.0689926147461, Y: -79.7947006225586};
      FRegion.geoPos = {X: 36.0189926147461, Y: -80.12827};
      FRegion.zoom = ZOOM_DEFAULT - 1;
      break;
    default:
      FRegion.name = 'default';
      FRegion.geoPos = {lati: 35.8575792601477475, Y: -78.704681396484375};
      FRegion.zoom = ZOOM_DEFAULT - 2;
      break;
  }
}

function MapShow(AArea)
{
  CacheClear();
  propTypeFilterSet(0, true);
  RegionSet(AArea);
  FMap.setCenter(new GLatLng(FRegion.geoPos.X, FRegion.geoPos.Y), FRegion.zoom);
}

function DocumentURLGet()
{
  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, '&'].join(''));
}

function MarkerImageURLGet(ACount, AActive, ATransparent, AReviewedCount, ANewConstruction, ADOM)
{
  if (FRegion.zoom <= ZOOM_DEFAULT)
    return (PATH_IMAGES + 'Marks/Cities/' + (ATransparent ? 'Transparent.png' : 'city2.png'));

  var LFLN;
  if (ATransparent)
    LFLN = 'Transparent'
  else
  {
    LFLN = 'House' + (ACount > 1 ? 'Group' : '');
    if (AActive)
      LFLN += '_Active';
    else
    if (AReviewedCount != 0)
      LFLN += '_Reviewed';
    else
    if (ADOM < 4)
      LFLN += '_NewOnMarket';
    else
    if (ANewConstruction == 1)
      LFLN += '_NewConstruction';
  }
  return (PATH_IMAGES + 'Marks/Houses/' + LFLN + '.png');
}


function MarkerIconGet(APrice, ACount, AReviewedCount, ANewConstruction, ADOM)
{
  var LIcon = new GIcon();
  if (FRegion.zoom <= ZOOM_DEFAULT)
  {
    LIcon.iconAnchor = new GPoint(18, 12);//(20, 29);
    LIcon.infoWindowAnchor = new GPoint(0, 0);
    LIcon.iconSize = new GSize(35, 19);//(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()
{
  ZMT.tooltipLocked = false;
  TooltipHide();
}

function TooltipShow(AMarker)
{
  if (ZMT.tooltipLocked)
    return;
  if (ZMT.tooltipMarker != null)
    MarkerImageChange(ZMT.tooltipMarker, false);

  ZMT.tooltipMarker = AMarker;
  MarkerImageChange(AMarker, true);

  ZMT.tooltip.innerHTML = tooltipGet(AMarker);
  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 LIcon = AMarker.getIcon();
  var LIconWidth = LIcon.iconSize.width;
  var LIconHeight = LIcon.iconSize.height;
  var LTooltipHeight = ZMT.tooltip.clientHeight;
  var LTooltipWidth = ZMT.tooltip.clientWidth + 2;
  var LPos = (FRegion.zoom <= ZOOM_DEFAULT ?
    new GSize(LOffset.x - LPoint.x - LTooltipWidth/2 +2, LOffset.y - LPoint.y - LTooltipHeight - LIconHeight/3-1)
    :
    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(ZMT.tooltip);
  ZMT.tooltip.style.visibility = 'visible';
}

function TooltipHide()
{
  if (ZMT.tooltipLocked)
    return;

  if (ZMT.tooltipMarker != null)
  {
    MarkerImageChange(ZMT.tooltipMarker, false);
    ZMT.tooltipMarker = null;
  }
  ZMT.tooltip.style.visibility = 'hidden';
}

function MarkerGet(AMarkerID)
{
  if (ZMT.markers == null)
    return null;

  for (var i = 0; i < ZMT.markers.length; i++)
    if (ZMT.markers[i].info.ID == AMarkerID)
      return ZMT.markers[i];
  return null;
}

function MarkerZoom(AMarker, AShowError)
{
  if (AMarker == null)
    return;

  var LResult = true;
  if (FRegion.zoom <= ZOOM_DEFAULT)
    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 <= ZOOM_DEFAULT ? 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(ALatMin, ALngMin, ALatMax, ALngMax, ACheckMaxZoom, ACount, ACity)
{
  TooltipUnlock();

  var
    LLngShift = 0, LLatShift = 0,
    LBounds = new GLatLngBounds(new GLatLng(ALatMin, ALngMin), new GLatLng(ALatMax, ALngMax)),
    LZoom = Math.max(12, FMap.getBoundsZoomLevel(LBounds)),
    LMaxZoom = FMap.getCurrentMapType().getMaximumResolution(LBounds.getCenter());

  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))
      LLngShift-=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() + LLatShift, LCenter.lng() + LLngShift);
    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)
    ZMT.tooltip.innerHTML = tooltipBodyGet(tooltipPropertiesGet(LMarker, 1));
}

function GroupDetailsPageLoad(AMarkerID, APageIndex)
{
  var LMarker = MarkerGet(AMarkerID);
  if (LMarker.info.count == LMarker.data.length)
    ZMT.tooltip.innerHTML = tooltipBodyGet(tooltipPropertiesGet(LMarker, APageIndex));
  else
    GDownloadUrl(DocumentURLGet() + 'Section=GroupDetails' +
      '&MarkerID=' + AMarkerID + '&PageIndex=' + APageIndex + ZMT.searchStr, GroupDetailsLoad);
}

function GroupDetailsShow(AMarker)
{
  if (ZMT.tooltipLocked)
  {
    TooltipUnlock();
    TooltipShow(AMarker);
  }
  ZMT.tooltipLocked = true;
}

function DetailsShow()
{
  ZMT.markerCur = this;
  if (FRegion.zoom <= ZOOM_DEFAULT)
  {
    MarkerZoom(this, false);
    return;
  }

  if (this.info.count != 1)
  {
    GroupDetailsShow(this);
    return;
  }

  if (ZMT.tooltipLocked)
  {
    TooltipUnlock();
    TooltipShow(this);
    ZMT.tooltipLocked = true;
    return;
  }

  ZMT.tooltipMarker = this;
  DetailsOpen(this.data[0].ID);
}

function MarkerXMLPropertyInfoGet(AXMLNode)
{
  function  LImgSRCGet(ALXMLNode)
  {
    var LSrc = ALXMLNode.getAttribute('imgSRC');
    if (LSrc)
      return LSrc;
    return ('default.asp?' + [
      'Section=', 'PropThumb',
      '&DS=',     ALXMLNode.getAttribute('dsID'),
      '&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('ID'),
        type:       LNode.getAttribute('type'),
        dsID:       LNode.getAttribute('dsID'),
        status:     parseInt(LNode.getAttribute('status')),
        imgSRC:     LImgSRCGet(LNode),
        price:      LNode.getAttribute('price'),
        address:    LNode.getAttribute('address'),
        bathCount:  LNode.getAttribute('bathCount'),
        bedCount:   LNode.getAttribute('bedCount'),
        buildingSF: LNode.getAttribute('buildingSF'),
        acres:      LNode.getAttribute('acres'),
        DOM:        parseInt(LNode.getAttribute('DOM')),
        dateSold:   LNode.getAttribute('dateSold'),
        reviewed:   LNode.getAttribute('reviewed'),
        city:       LNode.getAttribute('city')
      });
  }
  return LResult;
}

function MarkerCreate(AXMLNode)
{
  function  LCityMarkerCanCreateCheck(ACity)
  {
    if (typeof(ZMT.isColumbiaSC) == 'undefined')
      ZMT.isColumbiaSC = (/\bcolumbiaareahomes\b/i).test(document.location.href);
    return !(ZMT.isColumbiaSC && (/\bcayce|west columbia\b/i).test(ACity))
  }
  
  var
    LLat = parseFloat(AXMLNode.getAttribute('lat')),
    LLng = 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'));

  if ((FRegion.zoom <= ZOOM_DEFAULT) && !LCityMarkerCanCreateCheck(LCity))
    return;
    
  var LMarker = new GMarker(
    new GLatLng(LLat, LLng),
    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 = LLat;
      LMarker.info.lng = LLng;
      LMarker.data = [{imgSRC: AXMLNode.childNodes[0].getAttribute('imgSRC')}];
      break;
  }
  //LMarker.tooltip = xmlNodeTextGet(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(), ',',
    'price:[',    ZMT.filter.priceFrom || 0, ',', ZMT.filter.priceTo || 10000000, '],',
    'beds:',      ZMT.filter.beds || 0, ',',
    'baths:',     ZMT.filter.baths || 0, ',',
    'homeSize:',  ZMT.filter.homeSize || 0, ',',
    'PTs:',       PropertyTypeGet() || '\'\'', ',',
    'PGs:',       PropertyGroupGet() || '\'\'',
  '}'
  ].join('');
}

function UserIsLoggedCheck(AData, AResponseCode, ACallback, AMarketType)
{
  if (AData == '0')
  {
    if (ACallback)
      window.setTimeout(ACallback, 0)
    else
      MarkersLoad(false)
  }
  else
  {
    if (typeof(AMarketType) == 'undefined')
      AMarketType = getSoldDataShow() ? 'VOW' : 'IDX';
    SignupDIVShow(ACallback, AMarketType);
    var LData = eval(AData);
    if (LData.constructor == Array && typeof(LData[0]) == 'object' && LData[0].EMAIL)
    {
      switch (parseInt(LData[0].STATUS)) {
        case 0:
          document.getElementById('SignupUN').value = LData[0].NAME;
          document.getElementById('SignupPhone').value = LData[0].PHONE;
          document.getElementById('SignupEmail').value = LData[0].EMAIL;
          try { document.getElementById('SignupPWD').focus(); } catch(e){}
          break;
        case 1:
          document.getElementById('LogonEmail').value = LData[0].EMAIL;
          try {document.getElementById('LogonPWD').focus(); } catch(e){}
          break;
      }
    }
  }
}

function MarkersLoad(AUserIsLoggedCheck)
{
  if (AUserIsLoggedCheck && (FRegion.zoom > ZOOM_DEFAULT))
  {
    GDownloadUrl(
      [DocumentURLGet(), 'Section=LC', MapBoundsGet(), ZMT.searchStr].join(''),
      UserIsLoggedCheck);
    return;
  }
  window.setTimeout('MarkersLoadTimer()', 10);//1000
}

function MarkersLoadTimer()
{
  GDownloadUrl(SearchURLGet(), MarkersPageLoad);
  doEventTrack('PropertiesSearch', 'MarkersLoad');
}

function SearchURLGet()
{
  var LURL = [
    DocumentURLGet(),
    'Section=MarkersXML',
    MapBoundsGet(),
    ZMT.searchStr,
    '&MRP=40',
    '&SNo=', ZMT.searchNo
  ].join('');
  
  if (ZMT.markersCacheClear)
  {
    ZMT.markersCacheClear = false;
    LURL = LURL + '&ClearCache=1';
  }

  IndicatorVisibleSet(true);
  return LURL;
}

function MarkersPageLoad(AData, AResponseCode)
{
  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 != ZMT.searchNo))
      return;
    var LMarkersCount = parseInt(LXMLList[0].getAttribute('totalCount'));
    var LMarkesLoaded = parseInt(LXMLList[0].getAttribute('count'));

//    IndicatorVisibleSet(LXMLNodes.length > 0 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 (ZMT.markers == null)
      ZMT.markers = LMarkers
    else
      ZMT.markers = ZMT.markers.concat(LMarkers);

    IndicatorVisibleSet(LXMLNodes.length > 0);
    if (LXMLNodes.length != 0)
      MarkersLoad(false);
  }
  catch(err)
  {
    IndicatorVisibleSet(false);
    alert(err.description + "\n\n" + AData);
  }
}

function OnMoveEnd()
{
  HistoryAdd();
  FRegion.zoom = FMap.getZoom();
  MarkersLoad(true);
  doEventTrack('PropertiesSearch', 'Start');
}

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, -22, 0);
  if (LLegalInfo && LLegalInfo.nextSibling && LLegalInfo.nextSibling.lastChild)
    LLegalInfo.nextSibling.lastChild.style.color = '#0A0A0A';
}

function OnZoomEnd()
{
  HistoryAdd();
  FMap.clearOverlays();
  ZMT.markers = null;
  ZMT.tooltipMarker = null;
  TooltipUnlock();
  ZMT.markersCacheClear = true;
  LegacyInfoposUpdate();
  $('#map_pz .ui-slider-cntr div').slider('value', FMap.getZoom());
}

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 GMapInit()
{
  if (GBrowserIsCompatible())
  {
    FMap = null;
    // map initialization
    FMap = new GMap2(mapContainerInit());
    FMap.setCenter(new GLatLng(FRegion.geoPos.X, FRegion.geoPos.Y), FRegion.zoom, (isEmbedded() || document.location.href.match(/localhost|finestudio\.net/i) ? G_NORMAL_MAP : 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
    var LMapDim = mapDim();
    MapControlAdd("Indicator", (LMapDim.w - 190) / 2, (LMapDim.h - 54) / 2 - 60);
    IndicatorVisibleSet(false);

    //MapControlAdd("tutorial", -5, 320);
    // map events
    GEvent.addListener(FMap, 'moveend', function(){OnMoveEnd()});
    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
    ZMT.tooltip = document.createElement('div');
    FMap.getPane(G_MAP_FLOAT_PANE).appendChild(ZMT.tooltip);
    ZMT.tooltip.style.visibility='hidden';
    //FMapMngr = new GMarkerManager(FMap);
    // house markers creation
    //OnMoveEnd();
  }
}

function OnMapUnload()
{
  if (FMap != null)
  {
    GDownloadUrl(DocumentURLGet() + 'Section=SessionClear');
    GUnload();
  }
}


/* --------------- Search Bar ------------------ */

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
);


function filterCaptionUpdate(AName, AValue, AValuesMap)
{
  var LValue = (AValuesMap ? AValuesMap[AValue] : AValue);
  $('#filter_' + AName).closest('.filter').find('.filter-value').html(LValue + '+');
}

function filterSliderInit(AName, ACaption, AValueRange, AValueDefault, AValueMap)
{
  var LFilter = $('#filter_' + AName);
  LFilter.closest('.filter').find('.filter-caption').html(ACaption);
  var LSlider = LFilter.find('.ui-slider-cntr div');
  LSlider.slider({
    range: false,
    min: AValueRange[0],
    max: AValueRange[1],
    change: function(event, ui) {
      var LValue = ui.value;
      if (AValueMap)
        LValue = AValueMap[LValue];
      ZMT.filter[AName] = LValue;
      filterCaptionUpdate(AName, LValue); }
  }).slider('value', (AValueDefault ? AValueDefault : 0));
  LSlider.data('default', (AValueDefault ? AValueDefault : 0));

  LFilter.find('.ui-slider-up, .ui-slider-down').click(function(){
    LSlider.slider('value', LSlider.slider('value') + ((/\bup\b/i).test(this.className) ? 1 : -1));
  });
}

function filterSliderReset(AName, AMapState)
{
  var LValue, LSlider = $('#filter_' + AName + ' .ui-slider-cntr div');
  if (AMapState && AMapState[AName])
    LValue = AMapState[AName]
  else
    LValue = LSlider.data('default');
  LSlider.slider('value' + ($.isArray(LValue) ? 's' : ''), LValue);
}

function mapPZInit()
{
  ZMT.tmrZoomSet = 0;
  var LMapPZ = $('#map_pz'), LZoom = LMapPZ.find('.ui-slider-cntr div');

  function map_ZoomSet()
  {
    var LValue = parseInt(LZoom.slider('value'));
    if (FMap && (LValue != FMap.getZoom()))
      FMap.setZoom(LValue);
  }

  LZoom.slider({
    orientation: "vertical",
    range: false,
    min: 0,
    max: 21,
    change: function(event, ui) {
      clearTimeout(ZMT.tmrZoomSet);
      ZMT.tmrZoomSet = setTimeout(function(){map_ZoomSet()}, 500);
    }
  }).slider('value', 9);

  LMapPZ.find('.ui-slider-up, .ui-slider-down').click(function() {
    LZoom.slider('value', LZoom.slider('value') + ((/\bup\b/i).test(this.className) ? 1 : -1));
  });
  LMapPZ.find('.pan').click(function() {
    switch (this.className.match(/(\bup|down|left|right|home\b)/i)[1]) {
      case 'up': MapPanUp(); break;
      case 'down': MapPanDown(); break;
      case 'left': MapPanLeft(); break;
      case 'right': MapPanRight(); break;
      case 'home': HomePageShow(); break;
    }
  });
}

function PropertyFilterValuesGet(AFilterClassName)
{
  var LRes = [];
  $('.' + AFilterClassName + '.active').each(function(index){ LRes.push($(this).attr('value')); });
  return LRes.join(',');
}

function PropertyGroupGet()
{
  return PropertyFilterValuesGet('propsGroup');
}

function PropertyGroupSet(AGroups, ANeedClear)
{
  if (ANeedClear)
    $('.propsGroup').removeClass('active');
  var LGroups = (AGroups ? AGroups.split(',') : []);
  for (var i = 0; i < LGroups.length; i++)
    $('.propsGroup[value="' + LGroups[i] + '"]').addClass('active');
}

function PropertyGroupSetCheck(ACaller)
{
  var LGroup = ACaller.attr('value');
  switch (LGroup) {
    case 'Sold':
      GDownloadUrl(
        [DocumentURLGet(), 'Section=LC&PGs=' + LGroup, MapBoundsGet()/*, ZMT.searchStr*/].join(''),
        function(AData, AResponseCode) {
          UserIsLoggedCheck(AData, AResponseCode, 'PropertyGroupSet(\'' + LGroup + '\'); setSoldDataShow(true); Search();', 'VOW');
        });
      return false;
    default:
      PropertyGroupSet(LGroup);
  }
  return true;
}

function PropertyTypeGet()
{
  return PropertyFilterValuesGet('propsType');
}

function PropertyTypeSet(APropertyType)
{
  $('.propsType').removeClass('active');
  $('.propsType[value="' + APropertyType + '"]').addClass('active').trigger('click');
}

function DetailsActivate()
{
  $('#map_wrapper').css('display', 'none');
  $('#details').css('display', 'block');
   
  ImageNavigatorInit();
  pageShareInit();
}

function DetailsActivate2(AMarketType, AIsLogged)
{
  $('#dvSignup #btnClose').add($('#MainNav a')).attr('href', 'javascript: void(0);').attr('onclick', 'return _redirect();');
  ImageNavigatorInit();
  pageShareInit();
  if (!AIsLogged)
    SignupDIVShow('void(0);', AMarketType);
}

function MapActivate(AMapCheckResize)
{
  $('#map_wrapper').css('display', 'block');
  $('#details').css('display', 'none');
  MainNavActiveSet('home');
  if (AMapCheckResize) FMap.checkResize();
}

function propTypeFilterSet(APropTypeIndex, ADoNotSearch, ALogonBypass)
{
  if (isEmbedded())
    filterHide();
    
  if (APropTypeIndex == 6 && !(ALogonBypass || getSoldDataShow()))//check permissions before showing sold props
  {
    GDownloadUrl(
      [DocumentURLGet(), 'Section=LC&PGs=' + PropertyGroupGet(), MapBoundsGet(), ZMT.searchStr].join(''),
      function(AData, AResponseCode)
      {
        UserIsLoggedCheck(AData, AResponseCode,
          'propTypeFilterSet(' + APropTypeIndex + ', ' + (ADoNotSearch ? 'true' : 'false') + ', true)', 'VOW');
      });
    return;
  }

  PropertyTypeSet(APropTypeIndex);
  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()
{
  $('#ViewSale').addClass('active');
  Search();
}

function tooltipMarkerReviewedSet(AHouseID)
{
  if (!ZMT.tooltipMarker)
    return;
  var LImage = document.getElementById('Reviewed_' + AHouseID);
  if (LImage != null)
    if (LImage.src != 'Images/reviewed.gif')
    {
      LImage.src = 'Images/reviewed.gif';
      ZMT.tooltipMarker.info.reviewed = ZMT.tooltipMarker.info.reviewed + 1;
      ZMT.tooltipMarker.tooltip = ZMT.tooltip.innerHTML;

      for (var i = 0; i < ZMT.tooltipMarker.data.length; i++)
         if (ZMT.tooltipMarker.data[i].ID == AHouseID)
          ZMT.tooltipMarker.data[i].reviewed = 1;
    }
}

function DetailsOpen(APropertyID, AMarketType)
{
  tooltipMarkerReviewedSet(APropertyID);
  
  GDownloadUrl(
    DocumentURLGet() + 'Section=Details&Format=xml&HouseID=' + APropertyID + (AMarketType ? '&MT=' + AMarketType : ''),
    function(AData, AResponseCode)
    {
      if ((/\<error\>(.*)\<\/error\>/i).test(AData))
      {
        SignupDIVShow('DetailsOpen(' + APropertyID + (AMarketType ? ', \'' + AMarketType + '\'' : '') + ')', AMarketType);
        return;
      }

      var LXML = GXml.parse(AData);
      if (LXML == null)
      {
        alert(AData);
        return;
      }

      var LDetails = document.getElementById('details');
      LDetails.innerHTML = xmlNodeValueGetCheck(LXML, 'main');
      var LLogonRequired = xmlNodeValueGetCheck(LXML, 'logonRequired');
      if (LDetails.innerHTML == 'null')
      {
        LDetails.innerHTML = AData;
        alert(AData);
        return;
      }
      HistoryAdd(APropertyID);
      if (parseInt(LLogonRequired))
        SignupDIVShow('void(0);', AMarketType);
      DetailsActivate();
      doPageviewTrack('PropertyDetails');
    });
}

function OnPageLoad(AMapStateInitial)
{
  var LMS;
  if (!AMapStateInitial && (LMS = cookieGetCheck('MapState_' + FSessionID)))
  {
    AMapStateInitial = eval(unescape(LMS));
    cookieDelete('MapState_' + FSessionID);
  }

  setSoldDataShow(getSoldDataShow());
  Reset(AMapStateInitial);
  if (AMapStateInitial)
  {
    FRegion.geoPos.X = AMapStateInitial.lat;
    FRegion.geoPos.Y = AMapStateInitial.lng;
    FRegion.zoom = AMapStateInitial.Zoom;
  }
  GMapInit();
  Search();

  $('.dropDown input[type="button"]').click(function(){
    $(this).closest('.dropDown').find('div.options').toggleClass('displayNone');
  });
  
  $('.dropDown div.option').click(function(){
    var LCaller = $(this),
      LValue = LCaller.attr('value'),
      LDD = LCaller.closest('.dropDown'),
      LInput = LDD.find('input[type="text"]');
    
    LDD.find('.option').removeClass('active');
    LCaller.addClass('active');

    LInput.val(LValue == '' ? LInput.attr('title') : LCaller.html());
    LDD.attr('value', LValue);
    LDD.find('div.options').addClass('displayNone');
    window.setTimeout(function(){eval(LDD.attr('onchange'))}, 0);
  });
  
  $('.propsGroup').not('.option').click(function(){
    var LCaller = $(this);
    if (LCaller.hasClass('active')) {
      LCaller.removeClass('active');
      setSoldDataShow(getSoldDataShow());
    }
    else
    if (!PropertyGroupSetCheck(LCaller))
      return;
    Search();
  });
  
  $('#map_search, #map_view').find('td.btn div').unbind().click(function(){
    var LThis = $(this), LParent = LThis.closest('#map_search, #map_view');
    LParent.find('.dropDown').find('div.options').addClass('displayNone');
    
    var LW = LParent.find('td.controls table').width(), LExpand = (LParent.width() < LW),
      LParams = {width: (LExpand ? '+' : '-') + '=' + LW};
    if (LParent.children('table').first().css('float') != 'right')
      LParams = $.extend(LParams, {left: (LExpand ? '-' : '+') + '=' + LW});
      
    $(this).find('span').html(//LExpand && !LParams.left ? '&laquo;' : '&raquo;');
      LParams.left ? (LExpand ? '&raquo;' : '&laquo;') : (LExpand ? '&laquo;' : '&raquo;'));
      
    LParent.stop(true, true).animate(LParams);
    if (LParent[0].id == 'map_search')
      $('#map_pz').stop(true, true).animate({left: (LExpand ? '+' : '-') + '=' + LW});
  });
//  var LBtn = document.getElementById('ViewSale');
//  FMap.getPane(G_MAP_MARKER_PANE).appendChild(LBtn);
//  var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(643, 25));
//  pos.apply(LBtn);
  //MapControlAdd('ViewSale', 643, 25);
  //MapControlAdd('map_search', 0, 25);
}

function getSoldDataShow()
{
  return $('#btnViewSold').hasClass('active');
}

function setSoldDataShow(ASoldDataShow)
{
  //ZMT.filter = {};//filter reset
  $('#btnViewSold').toggleClass('active', ASoldDataShow);
  $('#filter_dateSold').closest('.filter-wrap').css('display', ASoldDataShow ? '' : 'none');
  $('#filter_price').closest('.filter-wrap').css('display', ASoldDataShow ? 'none' : '');
  //filterSliderReset(ASoldDataShow ? 'dateSold' : 'price');
  //filterSliderReset('price');
  if (ASoldDataShow && !ZMT.filter.dateFrom)
    filterSliderReset('dateSold');
}

function Reset(AMapState, AZoomPreserve)
{
  PropertyTypeSet(AMapState ? AMapState.PTs : '');
  PropertyGroupSet(AMapState ? AMapState.PGs : '');

  if (getSoldDataShow())
    filterSliderReset('dateSold', AMapState)
  else
    filterSliderReset('price', AMapState);

  filterSliderReset('beds', AMapState);
  filterSliderReset('baths', AMapState);
  filterSliderReset('homeSize', AMapState);
  //if (!AZoomPreserve)
  //  ;
}

function Search()
{
  //alert('Search');
  if(isEmbedded())
    filterHide();

  ZMT.searchNo++;
  ZMT.searchStr = [
    '&PTs=', PropertyTypeGet(),
    '&PGs=', PropertyGroupGet(),
  ].join('') + '&' + objToQS(ZMT.filter);

  var LFilter = [];
  if (PropertyTypeGet())
    LFilter.push('<a href="#">' + $('#PropsType .select input[type="text"]').val() + '</a>');

  if (PropertyGroupGet()) {
    $('.propsGroup.active').each(function(){
      LFilter.push('<a href="#">' + $(this).attr('alt') + '</a>')});
  }

  var LP = [ZMT.filter.priceFrom ? true : false, ZMT.filter.priceTo && ZMT.filter.priceTo < 10000000 ? true : false];
  if (!getSoldDataShow() && (LP[0] || LP[1])) {
    LFilter.push('<a href="#">' +
      (LP[0] ? '$' + ZMT.filter.priceFrom / 1000 + 'K' + (LP[1] ? '' : '+') : '') +
      (LP[0] && LP[1] ? ' - ' : '') +
      (LP[1] ? '$' + ZMT.filter.priceTo / 1000 + 'K' + (LP[0] ? '' : '-') : '') +
      '</a>');
  }

  if ((ZMT.filter.beds || 0) > 0)
    LFilter.push('<a href="#">' + ZMT.filter.beds + 'BR</a>');
  if ((ZMT.filter.baths || 0) > 0)
    LFilter.push('<a href="#">' + ZMT.filter.baths + 'BA</a>');
  if ((ZMT.filter.homeSize || 0) > 0)
    LFilter.push('<a href="#">' + ZMT.filter.homeSize + 'SF</a>');
  $('#BradCramb').html('<div><span>YOUR SEARCH:</span>' + (LFilter.length > 0 ? LFilter.join(' > ') : ' All Properties') + '</div>');

  MapActivate();
  OnZoomEnd();
  OnMoveEnd();
}

function CacheClear()
{
  GDownloadUrl(DocumentURLGet() + 'Section=SessionClear', function(AData, AResponseCode){Search();});
}

/* --------------- Details ------------------ */

function BookmarkCreate(ACaller, APropID)
{
  GDownloadUrl(DocumentURLGet() + 'Section=PB&A=A&ID=' + APropID, function(AData){
    var LDlg = $('#dvConfirmation'), LPos = $(ACaller).offset();
    LDlg.css({display: 'block', opacity: '', left: LPos.left + $(ACaller).width() / 2 - 58 + 'px', top: LPos.top - LDlg.height() + 10 + 'px'});
    window.setTimeout(function(){
      LDlg.animate({opacity: 0}, 'slow', function(){$(this).css({display: 'none', left: '-99999px'})})
    }, 2000);
  })
}

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');
  if (!LShadowDIV)
    return;
  var LFormName = LShadowDIV.getAttribute('frmName');
  if (!LFormName)
    return;
  var LForm = document.getElementById(LFormName);

  LForm.style.display = LShadowDIV.style.display = 'none';
  if (window.detachEvent)
    window.detachEvent('onresize', modalFormShadowResize)
  else
    window.removeEventListener('resize', modalFormShadowResize, false);
}

function modalFormShow(AName)
{
  function LframeElementCheck()
  {
    try {
      return window.frameElement.contentWindow;
    }
    catch(e){
      return null;
    }
  }

  var
    LDim = windowDimension(window),
    LForm = document.getElementById(AName),
    LShadowDIV = document.getElementById('ShadowDIV');
  if (!LShadowDIV)
    return;
  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 = windowDimension(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';
  if (window.attachEvent)
    window.attachEvent('onresize', modalFormShadowResize)
  else
    window.addEventListener('resize', modalFormShadowResize, false);

  return LForm;
}

function modalFormShadowResize()
{
  var LDim = windowDimension(window), LEl = document.getElementById('ShadowDIV');
  LEl.style.width = LDim.W + 'px';
  LEl.style.height = LDim.H + 'px';
}

function InputQueryStringGet(AID)
{
  var LInp = $('#' + AID), LVal = LInp.val();
  return (LVal ? '&' + (LInp[0].name ? LInp[0].name : LInp[0].id) + '=' + escape(LVal) : '');
}

function RegistrationFormShow(ASignup)
{
  var LCntr = document.getElementById('dvSignup');
  var LSignUp = elementByClassNameGet(LCntr, 'SignUp');
  if (LSignUp)
    LSignUp.style.display = (ASignup ? 'block' : 'none');
  var LLogIn = elementByClassNameGet(LCntr, 'LogIn');
  if (LLogIn)
    LLogIn.style.display = (ASignup ? 'none' : 'block');
  SignupDIVClose(true);
  SignupDIVShow(LCntr.getAttribute('callback'));
}

function SignupDIVShow(ACallback, AMarketType)
{
  var LMarketType = (AMarketType ? AMarketType : 'IDX'), LSignupDIV = document.getElementById('dvSignup');
  if (LSignupDIV)
  {
    LSignupDIV.className = LSignupDIV.className.replace(/\bmt(IDX|VOW)\b/ig, '') + ('mt' + LMarketType);
    LSignupDIV.setAttribute('callback', (ACallback ? ACallback : ''));
    var LCE = document.getElementById('trCredentialsEmail');
    if (LCE) LCE.style.display = 'none';
    modalFormShow(LSignupDIV.id);
  }
  else
    GDownloadUrl(DocumentURLGet() + 'Section=TG&file=signup' + (LMarketType == 'IDX' ? '' : LMarketType) + '.htm',
      function(AData, AResponseCode) {
        var LDF = document.createDocumentFragment();
        var LCntr = LDF.appendChild(document.createElement('DIV'));
        LCntr.innerHTML = AData;
        document.body.appendChild(LCntr.firstChild);
        SignupDIVShow(ACallback, AMarketType)
      });
}

function SignupDIVClose(AIndicatorHide, AIsCompleted)
{
  if ($('#details').css('display') != 'none')
    if (!AIsCompleted)
      MapActivate(true);

  modalFormClose();
  if (AIndicatorHide)
    IndicatorVisibleSet(false);
}

function SignupOnComplete(AData, AResponseCode)
{
  $('#btnSignup').removeAttr('disabled');
  var LSignupDIV = $('#dvSignup');
  if (AData == '0')
  {
    var LCallback = LSignupDIV.attr('callback');
    SignupDIVClose(false, true);
    if (LCallback)
      window.setTimeout(LCallback, 0)
    else
      MarkersLoad(false);
    doEventTrack('Signup', 'Completed');
    PPCConversionTrackingAppend();
  }
  else
  {
    var LDiv = $('#SignupStep2DIV');
    if (LDiv.length && (AData.match(/.*\bemail message has been sent\b/ig)))
    {
      var LUserEmail = $('#SignupEmail').val();
      $('#SignupStep2Email').html(LUserEmail);

      LDiv.css({top: '-10000px', left: '0px', display: 'block'});
      LDiv.center();
      doEventTrack('Signup', 'Step2 - Activate Account');
      
      ZMT.tmrIsLoggedCheck = window.setInterval(function() {
        if ($('#dvSignup').css('display') == 'none')
          window.clearInterval(ZMT.tmrIsLoggedCheck)
        else
          GDownloadUrl([DocumentURLGet(), 'Section=LC&PGs=Sold', MapBoundsGet()].join(''),
            function(AData, AResponseCode){//PGs=3 ugly hack
              if (AData == '0')
              {
                window.clearInterval(ZMT.tmrIsLoggedCheck);
                SignupStep2DIVClose();
                if ($('#dvSignup').css('display') != 'none')
                  SignupOnComplete(AData);
              }
            });
      }, 5000);
    }
    else
    {
      doEventTrack('Signup', 'Step1 - Invalid Credentials', AData);
      alert(AData);
    }
  }
}

function SignupStep2DIVClose()
{
  document.getElementById('SignupStep2DIV').style.display = 'none';
}

function AcceptTermsGetCheck()
{
  var LCB = document.getElementById('cbAcceptTerms');
  if (LCB && !LCB.checked)
    alert('Please Accept Terms');
  return (LCB ? LCB.checked : true);
}

function doSignup()
{
  if (!SignupCredentialsValidate())
    return;

  GDownloadUrl([
    DocumentURLGet(),
    'Section=Signup',
    '&MT=' + document.getElementById('dvSignup').className.replace(/\bmt/i, ''),
    InputQueryStringGet('SignupUN'),
    InputQueryStringGet('SignupPhone'),
    InputQueryStringGet('SignupEmail'),
    InputQueryStringGet('SignupPWD'),
    '&MapState=' + escape(mapStateParamsGet()),
  ].join(''), SignupOnComplete);
  document.getElementById('btnSignup').disabled = true;
  doPageviewTrack('Signup');
  doEventTrack('Signup', 'Step1 - Credentials submitted');
}

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('dvSignup').getAttribute('callback');
    SignupDIVClose(false, true);
    if (LCallback)
      window.setTimeout(LCallback, 0)
    else
      MarkersLoad(false);
  }
  else
  {
    doEventTrack('Logon', 'Invalid Credentials', AData);
    alert(AData);
  }
}

function doLogon()
{
  if (!LogonCredentialsValidate())
    return;
  
  GDownloadUrl([
    DocumentURLGet(),
    'Section=Logon',
    '&MT=' + document.getElementById('dvSignup').className.replace(/\bmt/i, ''),
    InputQueryStringGet('LogonEmail'),
    InputQueryStringGet('LogonPWD'),
    InputQueryStringGet('LogonName')
  ].join(''), LogonOnComplete);
  doPageviewTrack('Logon');
  doEventTrack('Logon', 'Credentials submitted');
}

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 credentialsEmail2(AStep)
{
  switch (AStep)
  {
    case 1:
      SignupDIVClose();
      modalFormShow('dvCredentialsEmail');
      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(''),
        function(AData){
          alert(AData);
          if ((/has been sent/ig).test(AData))
          {
            modalFormClose();
            modalFormShow('dvSignup');
          }
        });
      doEventTrack('Logon', 'EmailCredentials');
      break;
  }
}

function  credentialsEmailOnComplete(AData, AResponseCode)
{
  alert(AData);
}

function ContactAgentResult(AData, AResponseCode)
{
  alert(AData);
}

function ContactAgent()
{
  var LFrm = $('#ContactAgentDIV'), LReason = LFrm.attr('contactReason');
  LFrm.find('input[type=text], textarea').trigger('focusin');
  GDownloadUrl([
    DocumentURLGet(),
    'Section=ContactAgent',
    '&HouseID=' + LFrm.attr('propertyID'),
    '&ContactURL=' + LReason,
    '&' + LFrm.find('form').serialize()
  ].join(''), ContactAgentResult);
  
  doEventTrack('PropertyDetails', LReason);
  ContactAgentDIVClose();
}

function ContactAgentDIVShow(ACaller, APropID, AAction, AUserInfoSkip, AComments)
{
  if (!AUserInfoSkip && (typeof(FUserInfo) == 'undefined' || !FUserInfo.isValid))
  {
    GDownloadUrl(DocumentURLGet() + 'Section=UserInfo',
    function(AData, AResponseCode){
      window.FUserInfo = eval(AData)[0];
      FUserInfo.isValid = typeof(FUserInfo.EMAIL) != 'undefined';
      ContactAgentDIVShow(ACaller, APropID, AAction, true, AComments);
    });
    return;
  }

  var LCaption;
  switch (AAction) {
    case 'ContactAgent': 
    case 'ContactAgents': LCaption = 'Contact Me Regarding ' + (APropID == 0 ? 'Any Questions' : 'This Property'); break;
    case 'ScheduleShowing': LCaption = 'Request a Showing For This Property'; break;
    default: LCaption = AAction;
  }
  var LCntr = $('#ContactAgentDIV');
  LCntr.css({display: 'block', left: '-99999px'});
  LCntr.attr('propertyID', APropID).attr('contactReason', escape(AAction));
  LCntr.find('.caption').html(LCaption);
  LCntr.find('[name="ContactName"]').val(FUserInfo.isValid ? FUserInfo.NAME : '');
  LCntr.find('[name="ContactPhone"]').val(FUserInfo.isValid ? FUserInfo.PHONE : '');
  LCntr.find('[name="ContactEmail"]').val(FUserInfo.isValid ? FUserInfo.EMAIL : '');
  LCntr.find('[name="ContactNotes"]').val((AComments || (APropID == 0) ? AComments : $('#DetailsWrap .address').html() + '\r\n'));
  LCntr.find('input[type=text], textarea').trigger('focusout');

  var LPos = $(ACaller).offset(), LCenter = AComments || (APropID == 0);
  LCntr.find('table:first tr:last').css('display', LCenter ? 'none' : '');
  if (LCenter)
    LCntr.center()
  else
    LCntr.css({left: LPos.left + $(ACaller).width() / 2 - 58 + 'px', top: LPos.top - LCntr.height() + 10 + 'px'});
}

function ContactAgentDIVClose()
{
  $('#ContactAgentDIV').css({display: 'none'});
}

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 = PATH_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.childNodes;//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];

  document.getElementById("imgNext").className = (FActiveImageIndex == (LImageCount - 1) ? 'disabled' : '');
  document.getElementById("imgPrev").className = (FActiveImageIndex == 0 ? 'disabled' : '');
  
  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);
}

function  IndicatorVisibleSet(AVisible)
{
  var LI = document.getElementById('Indicator');
  if (LI) LI.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>',
      '<td class="tooltip_hdr_l"><img src="images/spacer.gif" width=11px alt=""></td>',
      '<td class="tooltip_hdr_m">', AMarker.info.city, '</td>',
      '<td class="tooltip_hdr_r" width=11px><img src="images/spacer.gif" width=11px alt=""></td>',
    '</tr>',
    '<tr>',
      '<td colspan=3 class="tooltip_city_info opacity81">', AMarker.info.count, ' ', (getSoldDataShow() ? 'SOLD HOMES' : 'HOMES FOR SALE'), '</td>',
    '</tr>',
    '<tr>',
      '<td class="tooltip_ftr_l"></td>',
      '<td class="tooltip_ftr_m opacity81">CLICK HERE TO VIEW HOMES</td>',
      '<td class="tooltip_ftr_r"></td>',
    '</tr>',
    '<tr>',
      '<td colspan=3 style="height: 20px;">',
      '<center><div style="width: 41px; height: 20px; background: url(../', PATH_IMAGES, 'tooltipCity.png) left -56px no-repeat;"></div><center>',
      '</td>',
    '</tr>'
  ].join(''));
}

function  tooltipPropertiesGet(AMarker, APageInd)
{
  return ([
    '<tr>',
      '<td class="tooltip_hdr_l"><img src="images/spacer.gif" width=11px alt=""></td>',
      '<td class="tooltip_hdr_m" style="text-align: left;">',
        '<div style="position: relative;">',
          AMarker.data[0].city,
          tooltipPropertiesNavigatorGet(AMarker, APageInd ? APageInd : 0),
          '<div onclick="TooltipUnlock();" class="tooltip_close"></div>',
        '</div>',
//        AMarker.data[0].city,
//        '<div class="tooltip_close" onclick="TooltipUnlock();"></div>',
//        tooltipPropertiesNavigatorGet(AMarker, APageInd ? APageInd : 0),
      '</td>',
      '<td class="tooltip_hdr_r" width=11px><img src="images/spacer.gif" width=11px alt=""></td>',
    '</tr>',
    '<tr>',
      '<td colspan=3 align=center style="padding: 4px 8px; background: url(../', PATH_IMAGES, 'bg_tooltip.png) top left repeat;">',
        '<table width=100% border="0" cellspacing="4" cellpadding="0">',
          tooltipPropertyRowsGet(AMarker, APageInd ? APageInd : 0),
        '</table>',
      '</td>',
    '</tr>',
    '<tr>',
      '<td class="tooltip_ftr_l"></td>',
      '<td class="tooltip_ftr_m opacity81" align=center>CLICK ICON FOR MORE DETAILS</td>',
      '<td class="tooltip_ftr_r"></td>',
    '</tr>'
  ].join(''));
}

function  tooltipPropertiesNavigatorGet(AMarker, APageInd)
{
  function LAroowGet(AMarkerID, ALPageInd, AEnabled, ALeft)
  {
    return [
    '<td class="tooltip_scroll ', (ALeft ? 'left' : 'right'), (AEnabled ? '' : ' disabled'), '">',
      (AEnabled ? '<a href="javascript: GroupDetailsPageLoad(' + AMarkerID + ', ' + ALPageInd + ');">' : ''),
      '<img src="images/spacer.gif" width=20px border=0 alt="">',
      (AEnabled ? '</a>' : ''),
    '</td>'].join('');
  }
  
  var LRecordCount = AMarker.info.count;
  if (LRecordCount <= TOOLTIP_MRP)
    return '';

  return ([
    '<div class="tooltip_scroll_cntr">',
    '<table cellspacing="0" cellpadding="0" border=0>',
    '<tr>',
      LAroowGet(AMarker.info.ID, APageInd - 1, APageInd > 0, true),
      '<td><span>',
        APageInd + 1, ' of ', Math.ceil(LRecordCount / TOOLTIP_MRP),
        //APageInd * TOOLTIP_MRP + 1, '-', Math.min(LRecordCount, (APageInd + 1) * TOOLTIP_MRP), ' of ', LRecordCount,
      '</span></td>',
      LAroowGet(AMarker.info.ID, APageInd + 1, (APageInd + 1) * TOOLTIP_MRP < LRecordCount, false),
    '</tr>',
    '</table></div>'
  ].join(''));
}

function  tooltipPropertyRowsGet(AMarker, APageInd)
{
  function LValueFormat(AValue)
  {
    return (AValue ? AValue : '<font color=gray>N/A</font>');
  }
  
  var LData, 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++)
  {
    LData = AMarker.data[i]
    LPropID = LData.ID;
    LResult.push([
    '<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/', (LData.reviewed > 0 ? 'reviewed.gif' : 'spacer.gif'), '">',
          '<b><a href="javascript: DetailsOpen(', LPropID, ')">', LData.address, '</a></b>',
        '</td>',
        '<td align=right nowrap style="padding-left: 8px;">',
          '<b><font color=navy>', LData.price, '</font></b>',
        '</td>',
      '</tr>',
      '<tr valign=center>',
        '<td colspan=2 align=center>',
          '<div class="tooltip_prop_img">',
            '<a href="javascript: DetailsOpen(', LPropID, ')">',
              '<img src="', LData.imgSRC, '" border=0 alt="property">',
            '</a>',
            (getSoldDataShow() ?
              '<div class="tooltip_propSold_fg" onclick="DetailsOpen(' + LPropID + ');"><span onclick="DetailsOpen(' + LPropID + ');">SOLD</span></div>' : ''),
          '</div>',
        '</td>',
      '</tr>',
      '<tr valign=center>',
        '<td colspan=2>',
          (parseInt(LData.type) == 106 ?
          [
            '<span class="tooltip_prop_caption">ACRES:</span><span class="tooltip_prop_value">', LValueFormat(LData.acres), '</span>',
          ]
          :
          [
            '<span class="tooltip_prop_caption">BEDROOMS:</span><span class="tooltip_prop_value">', LValueFormat(LData.bedCount), '</span>',
            '<span class="tooltip_prop_caption">BATHROOMS:</span><span class="tooltip_prop_value">', LValueFormat(LData.bathCount), '</span><br>',
            '<span class="tooltip_prop_caption">SQUARE FOOTAGE:</span><span class="tooltip_prop_value">', LValueFormat(LData.buildingSF), '</span>',
          ]).join(''),
        '</td>',
      '</tr>',
      '</table>',
    '</td>',
    '</tr>'].join(''));
  }
  return LResult.join('<tr><td><hr></td></tr>');
}

function propertyFeaturesShow(ACaller)
{
  var LRow = $(ACaller).closest('tr');
  //LRow.next().css('display', '');
  LRow.closest('div').animate({scrollTop: '+=' + (LRow.height() + 80)});
  //setTimeout(function(){ LRow.closest('div')[0].doScroll('pageDown'); }, 10);
}

function mapViewStateSet(AMapType)
{
  FMap.setMapType(AMapType);
}

function financeMyHomeActivate()
{
  GDownloadUrl(DocumentURLGet() + 'Section=TG&file=FinanceMyHome.htm',
    function(AData, AResponseCode) {
      HistoryAdd(-1);
      $('#details').html(AData);
      $('#map_wrapper').css('display', 'none');
      $('#details').css('display', 'block');
      MainNavActiveSet('finance')
    });
}

function contactUsActivate()
{
  GDownloadUrl(DocumentURLGet() + 'Section=TG&file=ContactUs.htm',
    function(AData, AResponseCode) {
      HistoryAdd(-2);
      $('#details').html(AData);
      $('#map_wrapper').css('display', 'none');
      $('#details').css('display', 'block');
      MainNavActiveSet('contact')
    });
}

function  favoritesActivate()
{
  GDownloadUrl(DocumentURLGet() + 'Section=PB',
    function(AData, AResponseCode) {
      HistoryAdd(-3);
      $('#details').html(AData);
      $('#map_wrapper').css('display', 'none');
      $('#details').css('display', 'block');
      MainNavActiveSet('favorite');
      $('#Favorites_body .tdButtons input').click(function(){
        var LTR = $(this).closest('tr');
        switch(this.className) {
          case 'mapIt':
            GDownloadUrl(DocumentURLGet() + 'Section=Details&Format=xml&HouseID=' + LTR.attr('propID'), function() {
              MapActivate(true);
              FMap.setCenter(new GLatLng(parseFloat(LTR.attr('lat')), LTR.attr('lng')), ZOOM_DEFAULT + 4, G_HYBRID_MAP);
            });
            //MapActivate();
            //FMap.setCenter(new GLatLng(parseFloat(LTR.attr('lat')), LTR.attr('lng')), ZOOM_DEFAULT + 4, G_HYBRID_MAP);
            break;
          case 'scheduleShowing':
            ContactAgentDIVShow(this, parseInt(LTR.attr('propID')), 'ScheduleShowing', false, $(this).closest('tr').find('.Address').html());
            break;
          case 'remove':
            GDownloadUrl(DocumentURLGet() + 'Section=PB&A=D&ID=' + parseInt(LTR.attr('id')), function(AData){
              alert('The property has been removed from Favorites');
              LTR.remove();
            })
            break;
        }
      })
    });
}

function MainNavActiveSet(ALnkActive)
{
  $('#MainNav a').removeClass('active');
  $('#MainNav #' + ALnkActive).addClass('active');
}

function ImageNavigatorInit()
{
  var LCntr = $('#DetImgScrl #divContainer');
  FHousePhotos = (LCntr.length > 0 ? eval(LCntr.attr('images')) : []);
  if(FHousePhotos.length == 0)
    $('#btnPropertyFeatures').css('top', '342px')
  else {
    FActiveImageIndex = FActiveImageGroup = 0;
    ImageActivate(0);
  }
}

function mortgageCalc()
{
  if ($('#MortgageCalc').length > 0)
  {
    modalFormShow('MortgageCalc');
    $('#MortgageCalc #price').val($('#DetailsWrap').attr('price'));
    $('#MortgageCalc #dp').val('0');
    $('#MortgageCalc #ir').val('7.5');
    $('#MortgageCalc #term').val('30');
  }
  else
    GDownloadUrl(DocumentURLGet() + 'Section=TG&file=MortgageCalc.htm',
      function(AData, AResponseCode) {
        var LDF = document.createDocumentFragment();
        var LCntr = LDF.appendChild(document.createElement('DIV'));
        LCntr.innerHTML = AData;
        document.body.appendChild(LCntr.firstChild);
        mortgageCalc()
      });
  return false;
}

function mtgCalc_fieldValue(AName) { return parseFloat($('#MortgageCalc #' + AName).val()) || 0; }
function mtgCalc_checkCalculate() {
  function LCheck(AName, ACaption){
    var LRes = (mtgCalc_fieldValue(AName) || 0) != 0;
    if (!LRes)
    {
      alert('The ' + ACaption + ' field can\'t be 0!');
      $('#MortgageCalc #' + AName).focus();
    }
    return LRes;
  }
  
  if (LCheck('price', 'Price') && LCheck('ir', 'Interest Rate') && LCheck('term', 'Term'))
    mtgCalc_calculate();
}

function mtgCalc_calculate() {
  var princ = mtgCalc_fieldValue('price') - mtgCalc_fieldValue('dp');
  var intRate = (mtgCalc_fieldValue('ir') / 100) / 12;
  var months = mtgCalc_fieldValue('term') * 12;
  $('#MortgageCalc #pmt').val(Math.floor((princ*intRate)/(1-Math.pow(1+intRate,(-1*months)))*100)/100);
  $('#MortgageCalc #principle').val(princ);
  $('#MortgageCalc #payments').val(months);
}

function reloadSocial()
{
  var LURL = 'http://' + document.location.host + '/MLS/' + $('#DetLnk #shareDetails').attr('mls');
  $('#DetLnk .twitter').twitterbutton({
    url: LURL,
    layout:'horizontal'
  });
  $('#DetLnk .facebook').fbjlike({
    href: LURL,
    showfaces: false,
    layout: 'button_count'
  });
  $('#DetLnk .gplusone').gplusone({
    href: LURL,
    size: 'medium'
  });
}

function pageShareInit()
{
  reloadSocial();
  $('.pageShare').unbind().mouseover(function(){
    var LThis = $(this), LCntr = $('#' + LThis.attr('cntrID'));
    window.setTimeout(function(){
      var LPos = LThis.position()
      LThis.addClass('active');
      LCntr.unbind().
        mouseover(function(event){
          LCntr.stop(true, false).css({opacity: ''});
          LThis.addClass('active');
          event.stopPropagation();
        });
      LCntr.
        stop(true, true).
        css({display: 'block', left: '-99999px', opacity: ''}).
        css({
          left: LPos.left + 'px',
          top:  LPos.top - LCntr.height()
        });
      $('#map_wrapper2').mouseover(function(){
        LCntr.animate({opacity: 0}, 'slow', function(){
          LCntr.css({display: 'none', left: '-99999px'});
          LThis.removeClass('active');
          $('#map_wrapper2').unbind();
        })
      });
    }, 0);
  });
}

function termsOfAgreementShow()
{
  var LBG = $('#dvTermsBG'), LDlg = $('#dvTerms');
  if (LBG.length == 0)
    $('body').append($('<div id="dvTermsBG"></div>').css({
      opacity: 0.3, position: 'absolute', left: '0px', top: '0px', backgroundColor: '#000',
      width: $(document).width(), height: $(document).height(), zIndex: 200}))
  else
    LBG.css({display: '', left: '0px'});
  
  LDlg.
    css({left: '-99999px;', display: '', zIndex: 201}).
    css({left: (($(window).width() - LDlg.width()) / 2) + 'px', top: (($(window).height() - LDlg.height()) / 2) + 'px'});
  return false;
}

function termsOfAgreementClose()
{
  dialogClose('dvTerms');
}

function PPCConversionTrackingAppend()
{
  $('body').append($('<iframe id="ifrConversion" style="display: none;" src="default.asp?SessionID=' + FSessionID + '&Section=PPCCT"></iframe>'));
}

function privacyPolicyShow()
{
  var LBG = $('#dvPrivacyPolicyBG'), LDlg = $('#dvPrivacyPolicy');
  if (LDlg.length == 0)
    GDownloadUrl(DocumentURLGet() + 'Section=TG&file=privacyPolicy.htm',
      function(AData, AResponseCode) {
        $('body').append($('<div id="dvPrivacyPolicyBG"></div>').css({
          opacity: 0.3, position: 'absolute', left: '-999999px', top: '0px', backgroundColor: '#000',
          width: $(document).width(), height: $(document).height(), zIndex: 202}));
        $('body').append(AData);
        privacyPolicyShow();
      });
  else
  {
    LBG.css({display: '', left: '0px'});
    LDlg.
      css({left: '-99999px;', display: '', zIndex: 202}).
      css({left: (($(window).width() - LDlg.width()) / 2) + 'px', top: (($(window).height() - LDlg.height()) / 2) + 'px'});
  }
  return false;
}

function  dialogClose(ADlgID) {
  $('#' + ADlgID).add($('#' + ADlgID + 'BG')).css({display: 'none', left: '-99999px'});
}
