function RdMap() {

  this.Init = Init; 
  this.addRadius = addRadius;
  this.plotDragger = plotDragger;
  this.removeDragger = removeDragger;
  this.SetCenter = SetCenter;

  var circle;
  var dMarker;

  var zoomMap = new Array()
  zoomMap[25] = 16;
  zoomMap[50] = 15;
  zoomMap[75] = 14;
  zoomMap[1] = 14;
  zoomMap[2] = 13;
  zoomMap[3] = 12;
  zoomMap[5] = 11;
  zoomMap[7] = 11;
  zoomMap[10] = 10;
 
  function drawOnTop(marker,b) {
    return 10000;
  }

  function removeDragger() {
    map2.removeOverlay(dMarker);  
  }
 
  function plotDragger(lat,lng) {
    var baseIcon = new GIcon();
    baseIcon.image = "http://rentaldata.myapartmentmap.com/images/rdicon.png";
    baseIcon.shadow = "http://rentaldata.myapartmentmap.com/images/rdicon.shadow.png";
    baseIcon.iconSize = new GSize(50,54);
    baseIcon.shadowSize = new GSize(78, 54);
    baseIcon.iconAnchor = new GPoint(25,54);
    dMarker = new GMarker(new GLatLng(lat,lng), {draggable: true, icon:baseIcon, zIndexProcess:drawOnTop});

    GEvent.addListener(dMarker, "dragend", function() {
      newLoc = dMarker.getLatLng();
      g_lat = newLoc.lat();
      g_lng = newLoc.lng();

      SetCenter(g_lat,g_lng);

      addRadius(newLoc.lat(),newLoc.lng(),g_radius);
      stateObj.lat = g_lat;
      stateObj.lng = g_lng;
      stateObj.radius = g_radius;
      stateObj.beds = g_beds;


      //removeDragger();
      if(g_mode == 0) {
        rdApartments.GetRdApartments(stateObj);
      } else {
        rdActiveApartments.GetApartments(stateObj);
      }
      //plotDragger(g_lat,g_lng);
    });
    map2.addOverlay(dMarker);
  }

  function Init(lat,lng) {  
    if (GBrowserIsCompatible()) {
      var map = new GMap2(document.getElementById("map"));
      map2 = map; // DELETE THIS CRAP LATER

      map.addControl(new MAMCustomControl("zoom_in"));
      map.addControl(new MAMCustomControl("zoom_out"));
      map.addControl(new MAMCustomControl("pan_up"));
      map.addControl(new MAMCustomControl("pan_down"));
      map.addControl(new MAMCustomControl("pan_left"));
      map.addControl(new MAMCustomControl("pan_right"));
      SetCenter(lat,lng, g_radius);
    }
  }

  function SetCenter(lat,lng,rad) {
    if(!rad) { 
      zoom = map2.getZoom(); 
    } else {
      if(rad<1) { rad = rad * 100; }
      zoom = zoomMap[rad]; 
    }
    map2.setCenter(new GLatLng(lat,lng), zoom);
  }

  function addRadius(lat, lng, rad) {
    circleRadius = rad*1.0;
    if (circle) {
      map2.removeOverlay(circle);
    }

    var center = new GLatLng(lat,lng);
    var bounds = new GLatLngBounds();
    var circlePoints = Array();

    with (Math) {
      var d = circleRadius/3963.189;    // radians
      var lat1 = (PI/180)* center.lat(); // radians
      var lng1 = (PI/180)* center.lng(); // radians
      for (var a = 0 ; a < 361 ; a++ ) {
        var tc = (PI/180)*a;
        var y = asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc));
        var dlng = atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(y));
        var x = ((lng1-dlng+PI) % (2*PI)) - PI ; // MOD function
        var point = new GLatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI)));
        circlePoints.push(point);
        bounds.extend(point);
      }
      if (d < 1.5678565720686044) {
        circle = new GPolygon(circlePoints, '#000000', 2, 1, '#000000', 0.25);
      } else {
        circle = new GPolygon(circlePoints, '#000000', 2, 1);
      }
      map2.addOverlay(circle);
    }
  }

}

