﻿var Toolbar = (function () {
  var startDrag = function (event) {
    $("body").append("<img src='/images/markers/marker.png' id='draggable-marker' style='position:absolute; z-index:1000;' />");
    $("#draggable-marker").css("left", event.pageX - 10);
    $("#draggable-marker").css("top", event.pageY - 36);
    $("body").mousemove(Toolbar.MarkerCreator.drag);
    google.maps.event.addListener(MapState.map, "click", MapController.handleCreateMarker);
    event.stopPropagation();
  };

  var endDrag = function () {
    $("#draggable-marker").remove();
    google.maps.event.clearListeners(MapState.map, "click");
  };

  var dropPin = function () {
    var center = MapState.map.getCenter();
    MarkerController.setMarker(center.lat(), center.lng());
  };

  var setWaypointButtonState = function () {
    if (Session.authenticated && TripController.selectedTripId != null && MapState.selectedMarker != null) {
      $("#set-waypoint").removeAttr("disabled");
    } else {
      $("#set-waypoint").attr("disabled", "disabled");
    }
  };

  var setMarkerNotesButtonState = function () {
    if (Session.authenticated && MapState.selectedMarker != null) {
      $("#marker-notes").removeAttr("disabled");
    } else {
      $("#marker-notes").attr("disabled", "disabled");
    }
  };

  var setJournalPageButtonState = function () {
    if (Session.authenticated && TripController.selectedTripId != null) {
      $("#create-journal-page").removeAttr("disabled");
    } else {
      $("#create-journal-page").attr("disabled", "disabled");
    }
  };

  var bindEvents = function () {
    $("#toolbar").delegate("#create-marker[disabled!='disabled']", "click", function (event) {
      CurrentBrowser.mobile ? dropPin(event) : startDrag(event);
      this.blur();
    });

    $("#toolbar").delegate("#delete-marker[disabled!='disabled']", "click", function () {
      MarkerController.deleteMarker();
      this.blur();
    });
    $("#toolbar").delegate("#set-waypoint[disabled!='disabled']", "click", function () {

      TripController.linkMarkerToTrip();
      this.blur();
    });

    $("#toolbar").delegate("#center-map[disabled!='disabled']", "click", function () {
      MapController.centerMapToCurrentLocation();
      this.blur();
    });

    $("#toolbar").delegate("#marker-notes[disabled!='disabled']", "click", function () {
      MapController.attachNoteToMarker();
      this.blur();
    });

    $("#toolbar").delegate("#create-trip[disabled!='disabled']", "click", function () {
      TripController.createTrip();
      this.blur();
    });

    $("#toolbar").delegate("#create-journal-page[disabled!='disabled']", "click", function () {
      JournalController.createJournalPage();
      this.blur();
    });

    $("#map-toolbar").delegate("#track-location ", "click", function () {
      Location.watch();
    });

    $("#map-toolbar").delegate("#toggle-auto-center", "click", function () {
      Location.toggleAutoCenter();
    });

    $("#map-toolbar").delegate("#toggle-traffic", "click", function () {
      MapController.toggleTraffic();
    });

    $("#toolbar").delegate("#toggle-console", "click", function () {
      $("#widget-controls").toggle();

      if ($("#widget-controls").is(":visible")) {
        $(".widgetContainer").width(401);
        $("#toolbar").css("right", 400);
      }
      else {
        $(".widgetContainer").width(0);
        $("#toolbar").css("right", 0);
      }

      UIState.setUIDimensions();
      google.maps.event.trigger(MapState.map, 'resize');
      MapController.centerMapToCurrentLocation();
    });

    $("body").click(endDrag);

    $(document).bind("trip-selected", function () {
      setJournalPageButtonState();
      setWaypointButtonState();
    });

    $(document).bind("trip-deselected", function () {
      $("#set-waypoint").attr("disabled", "disabled");
      $("#create-journal-page").attr("disabled", "disabled");
      setJournalPageButtonState();
      setWaypointButtonState();
    });

    $(document).bind("marker-selected", function () {
      $("#center-map").removeAttr("disabled");
      $("#delete-marker").removeAttr("disabled");
      setMarkerNotesButtonState();
    });

    $(document).bind("marker-deselected", function () {
      $("#center-map").attr("disabled", "disabled");
      $("#delete-marker").attr("disabled", "disabled");
      setMarkerNotesButtonState();
      setWaypointButtonState();
    });

  };

  return {
    MarkerCreator: {
      drag: function (event) {
        $("#draggable-marker").css("left", event.pageX - 10);
        $("#draggable-marker").css("top", event.pageY - 36);
      }
    },
    init: function () { bindEvents(); }
  };
})();

