function RdActiveApartments(domain) {
  this.GetApartments = GetApartments;
  this.CreateApartmentMarkers = CreateApartmentMarkers;
  this.GetApartmentCount = GetApartmentCount;
  this.orderOfCreation = orderOfCreation;

  var aMarkerList = new Array(); 
  var apartmentCount = 0;
  numWords = new Array("Studio","One Bedroom","Two Bedrooms","Three Bedrooms","Four Bedrooms","Five Bedrooms","Six Bedrooms","Seven Bedrooms","Eight Bedrooms","Nine Bedrooms");


  //ICONS
  icons = new Array();
  for(i=0;i<25;i++){
    var baseIcon              = new GIcon();
    baseIcon.iconSize         = new GSize(20,34);
    baseIcon.iconAnchor       = new GPoint(10,17);
    baseIcon.shadowSize       = new GSize(38.0, 34.0);
    baseIcon.infoWindowAnchor = new GPoint(10.0, 17.0);

    baseIcon.image = "http://rentaldata.myapartmentmap.com/images/heat-" + i + ".png";
    //baseIcon.image = "http://rentaldata.myapartmentmap.com/images/a.blue.png";
    //baseIcon.image = "http://rentaldata.myapartmentmap.com/images/heat-0.png";
    baseIcon.shadow = "http://rentaldata.myapartmentmap.com/images/marker.shadow.png";
    icons[i] = baseIcon
  }
  //END ICONS



  function GetChartUrl(min,max,avg) {
    baseUrl = "http://chart.apis.google.com/chart?chxt=x,y,r&cht=bvs&chls=2.0&chs=279x150&chbh=50,10,50&chf=bg,s,F9F9F9"

    maxBase = parseInt(max) + 400;
    realMin = ((parseInt(min) / maxBase) * 100);
    realAvg = ((parseInt(avg) / maxBase) * 100);
    realMax = ((parseInt(max) / maxBase) * 100);

    data = "&chd=t:" + realMin + "," + + realAvg + "," + realMax;

    lrLabel = "&chxr=1,0," + maxBase + "|2,0," + maxBase;
    bLabel = "&chxl=0:|Low|Average|High|";
    iLabel = "&chm=t" + min + ",000000,0,0,11|t" + avg + ",000000,0,1,11|t" + max + ",000000,0,2,11";

    return baseUrl + data + bLabel + lrLabel + iLabel;
  }


  function orderOfCreation(marker,b) {
    return 0;
  }

  function ClearAllMarkers() {
    for ( key in aMarkerList ) {
      map2.removeOverlay(aMarkerList[key]);
    }
  }

  function CloseAllMarkers() {
    for ( key in aMarkerList ) {
      var w = aMarkerList[key].getUserData ? aMarkerList[key].getUserData().win : gmarker_win;
      w.hide();
    }
  }

  function onClick() {
    var w = this.getUserData ? this.getUserData().win : gmarker_win;
    if(w.getOpener() === this) {
      w.hide();
    } else {
      CloseAllMarkers();
      w.open(this,( this.getUserData ? this.getUserData().content : 'GMarker'),true);
    }
  }


  function onOpen(openerMarker)  {
    curImage = 0;
    openerMarker.setImage('http://rentaldata.myapartmentmap.com/images/a.red.png');
  }

  function onClose(openerMarker) {
    openerMarker.setImage('http://rentaldata.myapartmentmap.com/images/a.blue.png');
  }

  function CreateMarker(point, insideHtml, hIndex) {
    var marker = new GMarker(point,{ icon:icons[hIndex], zIndexProcess:this.orderOfCreation });
    //var marker = new GMarker(point,{ zIndexProcess:this.orderOfCreation });
    GEvent.addListener(marker, "click", function() {
      marker.openInfoWindowHtml(insideHtml);
    });

    //map2.addOverlay(marker);
    return marker;

    //var bpmarker_win = new BpWindow(map2);
    
    //var bpmarker = new BpMarker(point, { icon: icons[0], zIndexProcess:this.orderOfCreation  } );
    //var bpmarker = new BpMarker(point, { zIndexProcess:this.orderOfCreation  } );
    //bpmarker.setImage('http://rentaldata.myapartmentmap.com/images/a.blue.png');
    //bpmarker.setHoverImage('http://rentaldata.myapartmentmap.com/images/a.red.png');
    //bpmarker_win.setOnOpen(onOpen);
    //bpmarker_win.setOnClose(onClose);
    //bpmarker.setUserData({ win: bpmarker_win, content: insideHtml });
    //GEvent.addListener(bpmarker,'click',onClick);
    //return bpmarker;
  }

  function GetApartmentCount() { return apartmentCount; }

  function GetMarkerHtml() {
    var insideHtml = ""
    insideHtml += "<div style='width:355px;height:245px;margin-left:10px;margin-top:10px;margin-bottom:0px;'><div style='float:left;width:100%;padding-bottom:5px;text-align:left;'><a style='font-size:14px;color:#d65803;text-decoration:underline;font-weight:bold;' href='##URL##' target='_blank' rel='nofollow'>##TITLE##</a></div><div style='float:left;width:96px;'><div style='padding-bottom:5px;'>##IMG##</div><div style='border-right:1px solid #626262;margin-top:7px;height:125px'><div style='text-align:left;color:#626262;font-size:10px;font-weight:bold;padding-bottom:0px;'>This Rental Is</div><div style='line-height:24px;font-size:24px;color:##COLOR##;'>##PRICEDIFF##</div><span style='font-weight:bold;margin-top:10px;margin-bottom:50px;font-size:10px;'>##AVGWORD##Average</span></div></div><div style='float:left;width:244px;padding-left:10px;'><div style='float:left;width:145px;'><div style='text-align:left;color:#626262;font-size:12px;font-weight:bold;line-height:12px;padding-bottom:5px;'>##BEDS##</div><div style='text-align:left;color:#626262;font-size:12px;font-weight:bold;line-height:12px;padding-bottom:5px;'>##PETS##</div></div><div style='float:left;width:89px;line-height:29px;vertical-align:middle;font-size:18px;color:#626262;font-weight:bold;text-align:right;padding-right:10px;'>##PRICE##</div><div style='float:left;width:234px;margin-top:5px;'><div style='background-color:#e5e5e5;padding:5px 5px 5px 5px;text-align:left;height:110px;font-size:10px;'>##DESC##</div></div><div style='float:left;margin-top:10px;'><span style='float:left;width:25px;padding-right:3px;'><img style='display:block;' src='http://rentaldata.myapartmentmap.com/images/view_listing.gif' /></span><a rel='nofollow' target='_blank' href='##URL##' style='float:left;width:200px;text-align:left;color:#d65803;text-decoration:underline;font-size:12px;line-height:20px;vertical-align:middle;'>View Full Listing</a></div><div style='float:left;padding-top:4px;'><div style='font-size:10px;line-height:10px;padding-top:5px;'>Source: ##DSOURCE##</div></div></div></div>";
    return insideHtml;
  }
  
  function GetApartments(stateObj) {
    ClearAllMarkers();

    var apartmentList = {}
    var urlPath  = "http://rentaldata.myapartmentmap.com/apartmentsxml3.php?";
    urlPath += "lat=" + stateObj.lat + "&";
    urlPath += "lng=" + stateObj.lng + "&";
    urlPath += "radius=" + stateObj.radius + "&";
    urlPath += "pets=" + stateObj.pets + "&";
    urlPath += "beds=" + stateObj.beds + "&";
    urlPath += "min_price=" + stateObj.minPrice + "&";
    urlPath += "max_price=" + stateObj.maxPrice + "&";
    urlPath += "radius=" + stateObj.radius + "&";
    urlPath += "offset=" + stateObj.offset + "&";
    urlPath += "pagesize=" + stateObj.pageSize + "&";
    urlPath += "goBack=" + stateObj.daysOld + "&";
    urlPath += "sort=" + stateObj.sort + "&";
    urlPath += "neighborhood=" + stateObj.neighborhood + "&";
    urlPath += "user=" + stateObj.user;
    GDownloadUrl(urlPath, function(data, responseCode) {
      var xml = GXml.parse(data);

      var details = xml.documentElement.getElementsByTagName("detail");
      var avg = details[0].getAttribute("avg");
      var count = details[0].getAttribute("count");
      var min = details[0].getAttribute("min");
      document.getElementById("min").innerHTML = min;
      var max = details[0].getAttribute("max");
      document.getElementById("max").innerHTML = max;
      var half = details[0].getAttribute("half");
      document.getElementById("half").innerHTML = half;
      document.getElementById('chart').src = GetChartUrl(min,max,avg);
      document.getElementById("chartTitle").innerHTML = "Averages within Search Radius";



      var markers = xml.documentElement.getElementsByTagName("marker"); 

      if(markers.length == 0) {
        apartmentCount = 0;  
      }

      for (var i = 0; i < markers.length; i++) {
        var tmpApartment = new Array();
        tmpApartment['price'] = markers[i].getAttribute("price");
        tmpApartment['title'] = markers[i].getAttribute("title");
        tmpApartment['description'] = markers[i].getAttribute("description");
        tmpApartment['beds'] = markers[i].getAttribute("beds");
        tmpApartment['images'] = markers[i].getAttribute("images");
        tmpApartment['cityName'] = markers[i].getAttribute("name");
        tmpApartment['url'] = markers[i].getAttribute("url");
        tmpApartment['id'] = markers[i].getAttribute("id");
        tmpApartment['lat'] = markers[i].getAttribute("lat");
        tmpApartment['lng'] = markers[i].getAttribute("lng");
        tmpApartment['pets'] = markers[i].getAttribute("pets");
        tmpApartment['source'] = markers[i].getAttribute("source");
        tmpApartment['displaySource'] = markers[i].getAttribute("displaySource");
        tmpApartment['savedId'] = markers[i].getAttribute("savedId");
        tmpApartment['hIndex'] = markers[i].getAttribute("hIndex");
        tmpApartment['dupeId'] = markers[i].getAttribute("dupeId");
        apartmentCount = markers[i].getAttribute("total");
        apartmentList[tmpApartment['id']] = tmpApartment;
      }
      CreateApartmentMarkers(apartmentList,avg);
      //CheckColleges();
      //stateObj.totalApartments = apartmentCount;
      //pNavigation.updateNav();
      //tFactory.DisplayTable(apartmentList, "oTableContainer");
      //toggleThrobber();
    });
  }

  function CreateApartmentMarkers(apartmentList,avg) {

    var complexCount = 0;
    for ( var key in apartmentList ) {
      var tmpApartment = apartmentList[key];
      var mHtml = GetMarkerHtml();
      var longitude = tmpApartment['lng'];
      var latitude = tmpApartment['lat'];
      var title = tmpApartment['title'];
      var description = tmpApartment['description'];
      var price = tmpApartment['price'];
      var beds = tmpApartment['beds'];
      var img = tmpApartment['images'];
      var city = tmpApartment['cityName'];
      var url = tmpApartment['url'];
      var pets = tmpApartment['pets'];
      var source = tmpApartment['source'];
      var displaySource = tmpApartment['displaySource'];
      var hIndex = tmpApartment['hIndex'];
      var dupeId = tmpApartment['dupeId'];

      titleMod = CleanString(title);
      titleMod = ucwords(titleMod);
      titleMod = ShortenString(titleMod,35);

      mHtml = mHtml.replace("##TITLE##",titleMod);

      descriptionMod = CleanString(description);
      descriptionMod = ShortenString(descriptionMod,200);
      if(descriptionMod.length == 0) { descriptionMod = "View full listing to see description."; }
      mHtml = mHtml.replace("##DESC##",descriptionMod);
      

      var diff = parseInt(avg) - parseInt(price);
      var color = "#065802";
      var avgWord = "Below ";
      if(diff < 0) { diff = diff * -1; color = "#e50404"; avgWord = "Above ";}
      if(diff == 0) {avgWord = "Exact "; }
      diff = diff + ""
      diff = "$" + FormatNumber(diff);
      mHtml = mHtml.replace("##COLOR##",color);
      mHtml = mHtml.replace("##PRICEDIFF##",diff);
      mHtml = mHtml.replace("##AVGWORD##",avgWord);
      price = "$" + FormatNumber(price);
      mHtml = mHtml.replace("##PRICE##",price);

      bedMod = numWords[apartmentList[key].beds];
      mHtml = mHtml.replace("##BEDS##",bedMod);
      
      if(source == 3) {
        url = "http://rentaldata.myapartmentmap.com/listing/" + key + "/";
      }
      mHtml = mHtml.replace(/##URL##/g,url);
 
      mHtml = mHtml.replace(/##LNG##/g,longitude);
      mHtml = mHtml.replace(/##LAT##/g,latitude);

      
      if(apartmentList[key].pets  == 0) {
        petMod = "No Pets";
      } else if (apartmentList[key].pets  == 1 || apartmentList[key].pets == 3) {
        petMod = "Dogs & Cats Allowed";
      } else if (apartmentList[key].pets  == 2) {
        petMod = "Only Cats Allowed";
      }
      mHtml = mHtml.replace("##PETS##",petMod);

      imageHtml = "";
      if (img != 0) {
        imgPath = "http://images.myapartmentmap.com/thumbs/" + tmpApartment['id'] + "_0_t.jpg";
        imageHtml += "<img style='display:block;' src='" + imgPath + "'>";
      } else {
        imageHtml += "<div><img style='display:block;' src='http://rentaldata.myapartmentmap.com/images/no_image_grey_small.jpg'></div>";
      }
      mHtml = mHtml.replace("##IMG##",imageHtml);

      mHtml = mHtml.replace(/##ID##/g,tmpApartment['id']);

      mHtml = mHtml.replace(/##DSOURCE##/g,tmpApartment['displaySource']);

      var point = new GLatLng(latitude,longitude);

      var tmpMarker = CreateMarker(point, mHtml,hIndex);
      tmpMarker.is_multiple = 1;
      tmpMarker.is_visible = 0;
      aMarkerList[key] = tmpMarker;
      map2.addOverlay(tmpMarker);
      //END NEW

    }
  }

} //End Apartment Factory.

