﻿function Marker(markerId, latitude, longitude)
{
    this.markerId = markerId == null ? 0 : markerId;
    this.latitude = latitude == null ? 0 : latitude;
    this.longitude = longitude == null ? 0 : longitude;
}

var WaypointsController = {};

WaypointsController.waypointRowPriorCss;
WaypointsController.waypointRowSelected;

WaypointsController.Markers = [];

WaypointsController.clear = function() {
    WaypointsController.Markers = [];
};

WaypointsController.add = function(markerId, latitude, longitude) {
    var marker = new Marker(markerId, latitude, longitude);
    WaypointsController.Markers[WaypointsController.Markers.length] = marker;
};

WaypointsController.setLatitudeOnLastWaypoint = function(latitude) { 
    WaypointsController.Markers[WaypointsController.Markers.length - 1].latitude = latitude;
};

WaypointsController.setLongitudeOnLastWaypoint = function(longitude) {
    WaypointsController.Markers[WaypointsController.Markers.length - 1].longitude = longitude;
};

WaypointsController.selectWaypoint = function (markerId, event) {
  if (event)
    event.stopPropagation();

  for (var count = 0; count < WaypointsController.Markers.length; count++) {
    if (WaypointsController.Markers[count].markerId == markerId) {
      WaypointsController.setSelectedWaypointRow(markerId);
      MapController.setSelectedMarker(MapController.getMarkerById(markerId));
      MapController.centerMapToCurrentLocation();
      break;
    }
  }
};

WaypointsController.getWaypointRow = function(markerId) {
    return $(".widgetGrid tr[data-row-id='" + markerId + "']");
};

WaypointsController.deselectPriorWaypoint = function() {
    MapState.context = MapUseContext.none;
    if (WaypointsController.waypointRowSelected) {
        WaypointsController.waypointRowSelected.removeClass(WaypointsController.waypointRowSelected.attr("class"));
        WaypointsController.waypointRowSelected.addClass(WaypointsController.waypointRowPriorCss);
    }
};

WaypointsController.setSelectedWaypointRow = function(markerId) {
    WaypointsController.deselectPriorWaypoint();
    MapState.context = MapUseContext.trip;

    var row = WaypointsController.getWaypointRow(markerId);
    WaypointsController.waypointRowPriorCss = row.attr("class");
    row.removeClass(WaypointsController.waypointRowPriorCss);
    row.addClass("widgetRowSelected");
    WaypointsController.waypointRowSelected = row;
};


/* Extend the math object */
Math.precision = function(number, precision) {
    var iRemainder = 0;
    var numberString = number.toString();
    var iDotIndex = numberString.indexOf(".");

    if (iDotIndex == -1) return number;

    if (precision > numberString.length - iDotIndex)
        precision = numberString.length - iDotIndex;

    var iRoundedNumber = numberString.substr(0, numberString.indexOf(".") + precision + 1);

    /* deal with remainder rounding */
    if (numberString.length - iDotIndex > precision) {
        var iPrecisionDelta = (numberString.length - iDotIndex) - precision;
        var iModifier = Math.pow(10, iPrecisionDelta);
        var sRemainder = numberString.substring(iDotIndex, numberString.length);
        iRemainder = Math.round(sRemainder / iModifier);
    }

    /* force implicit cast, damned loose typing */
    return (iRoundedNumber * 1) + (iRemainder * 1);
};


