﻿var WidgetController = {};

WidgetController.getWeather = function (bIsOnUiInit) {
  UIDisplay.showTab("#weatherFlowAndTide", bIsOnUiInit);

  var request = {
    Latitude: MapState.currentLatLng.lat().toString(),
    Longitude: MapState.currentLatLng.lng().toString()
  };

  $("#weatherContainer").show();
  AjaxCommands.submitJson(request, "Weather", "Weather", "weatherAjaxContainer");
};

WidgetController.getTides = function () {
  UIDisplay.showTab("#weatherFlowAndTide");

  var request = {
    Latitude: MapState.currentLatLng.lat().toString(),
    Longitude: MapState.currentLatLng.lng().toString(),
    StartDate: formatFriendlyDate(Calendar.selectedDate)
  };

  TideChart.clear();
  $("#tidesContainer").show();
  AjaxCommands.getJson(request, "Tides", "Tides", "tidesContainer", TideChart.render);
};

WidgetController.getFlows = function () {
  UIDisplay.showTab("#weatherFlowAndTide");

  var request = {
    Latitude: MapState.currentLatLng.lat().toString(),
    Longitude: MapState.currentLatLng.lng().toString(),
    StartDate: formatFriendlyDate(Calendar.selectedDate)
  };

  FlowChart.clear();
  $("#flowContainer").show();
  AjaxCommands.getJson(request, "Flow", "Flow", "flowContainer", FlowChart.render);
};

var TideSites = (function () {
  var markAllSites = function (jsonResult) {
    if (jsonResult.length == 0) {
      Modal.setContent("<p class='modal-alert'>No tide stations found nearby.</p>");
      Modal.show();
      return;
    }

    for (var i = 0; i < jsonResult.length; i++) {
      var site = jsonResult[i];

      var latlng = new google.maps.LatLng(site.Latitude, site.Longitude < 180 ? site.Longitude * -1 : site.Longitude - 180);
      var marker = new google.maps.Marker({
        position: latlng,
        map: MapState.map,
        draggable: false,
        id: i + 1000000,
        title: $.trim(site.StationName)
      });
      marker.setIcon(MarkerType.TideGauge.MarkerImage);
      marker.setShadow(MarkerType.TideGauge.MarkerShadow);

      MapState.MarkerCollection.push(marker);
      MapController.bindMarkerEvents(marker);
    }
  };

  return {
    showLocalStations: function () {
      var request = {
        Latitude: MapState.currentLatLng.lat().toString(),
        Longitude: MapState.currentLatLng.lng().toString()
      };

      AjaxCommands.getJson(request, "Tides", "NearbySites", null, markAllSites);
    }
  };
})();

var RiverGauges = (function () {
  var markAllSites = function (jsonResult) {
    if (jsonResult.length == 0) {
      Modal.setContent("<p class='modal-alert'>No stream gauges found nearby.</p>");
      Modal.show();
      return;
    }

    for (var i = 0; i < jsonResult.length; i++) {
      var site = jsonResult[i];

      var latlng = new google.maps.LatLng(site.Latitude, site.Longitude);
      var marker = new google.maps.Marker({
        position: latlng,
        map: MapState.map,
        draggable: false,
        id: i + 2000000,
        title: $.trim(site.SiteName)
      });
      marker.setIcon(MarkerType.StreamGauge.MarkerImage);
      marker.setShadow(MarkerType.StreamGauge.MarkerShadow);

      MapState.MarkerCollection.push(marker);
      MapController.bindMarkerEvents(marker);
    }
  };

  return {
    showLocalGauges: function () {
      var request = {
        Latitude: MapState.currentLatLng.lat().toString(),
        Longitude: MapState.currentLatLng.lng().toString(),
        StartDate: formatFriendlyDate(Calendar.selectedDate)
      };

      AjaxCommands.getJson(request, "Flow", "AllSites", null, markAllSites);
    }
  };
})();
