function plot_map(hTsgGUI, hPlotAxes)
% Function to plot the earth map and ship trackline
%
% Input
% -----
% hTsgGUI ............ Handel to the main user interface
% hPlotAxes .......... Handels to the graphic axes
%
% Output
% ------
%
% Library : 'M_MAP'
%
% TODOS
%
% note that a decimal degree notation is used, so that a longitude of 
% 120?30'W is specified as -120.5
%
% PROBLEM NOT YET RESOLVED
%    Does M_MAP use 0-360? or -180? +180? covention ?
%
% $Id$

% Retrieve named application data
% -------------------------------
tsg = getappdata( hTsgGUI, 'tsg_data');

% Get the Geographic limit of the TSG time series
% -----------------------------------------------
dateLim = get(hPlotAxes(1), 'Xlim');
ind = find( tsg.DAYD >= dateLim(1) & tsg.DAYD <= dateLim(2));

% m_grid need the use of double instead single
% --------------------------------------------
latx = double(tsg.LATX);
lonx = double(tsg.LONX);

if ~isempty( ind )

  latMin = min(latx(ind) );
  if latMin < -90
    latMin = -90;
  end
  latMax = max( latx(ind) );
  if latMax > 90
    latMax = 90;
  end
  lonMin = min( lonx(ind) );
  lonMax = max( lonx(ind) );

  % Oversize window due to the large frame
  %--------------------------------------
  latRange = (latMax-latMin);
  latMin = max(floor(latMin), -90);
  latMax = min(ceil(latMax), 90);

  lonRange = (lonMax-lonMin);
  lonMin = floor(lonMin);
  lonMax = ceil(lonMax);

  lonRange = (lonMax-lonMin);
  if lonRange>=360
    lonMin = -183.6;     %to account for fancy frame
    lonMax = 183.6;
    tsg.lonplus = 180;
    tsg.lonmod = 360;
  else
    tsg.lonplus = 0;
    tsg.lonmod = 0;
  end

  % Positionning the right axes (set map current axe)
  % -------------------------------------------------
  axes(hPlotAxes(4));

  % Use of Mercator projection
  % --------------------------
  m_proj('Mercator','lat',[latMin latMax],'long',[lonMin lonMax]);

  switch tsg.preference.map_resolution

    case 1
      % Low-resolution coast lines
      % --------------------------
      m_coast('patch',[.7 .7 .7], 'TAG', 'TAG_PLOT4_LINE_COAST');

    case 2
      % Medium-resolution coast lines
      % -----------------------------
      m_gshhs_l('patch',[.7 .7 .7], 'TAG', 'TAG_PLOT4_LINE_COAST');

    case 3
      % Intermediate-resolution coast lines
      % ----------------------------
      m_gshhs_i('patch',[.7 .7 .7], 'TAG', 'TAG_PLOT4_LINE_COAST');
      
    case 4
      % High-resolution coast lines
      % ----------------------------
      m_gshhs_h('patch',[.7 .7 .7], 'TAG', 'TAG_PLOT4_LINE_COAST');
      
    otherwise
      tsg.preference.map_resolution = 1;
      % Low-resolution coast lines
      % --------------------------
      m_coast('patch',[.7 .7 .7], 'TAG', 'TAG_PLOT4_LINE_COAST');

  end

  % Make a grid on the map with fancy box
  % -------------------------------------
  m_grid('box', 'fancy', 'tickdir', 'in', 'TAG', 'TAG_PLOT4_LINE_GRID', ...
    'Fontsize', tsg.fontSize);

  % Plot the ship track - Check if LAT-LON in deg-decimal
  % -----------------------------------------------------
  %m_line(lonx, latx, 'TAG', 'TAG_PLOT4_LINE_SHIPTRACK', 'marker','.','markersize',3,'color','b');
  %   m_line(lonx, latx, 'LineStyle', 'none', 'marker','*','markersize',2,'color','b');

  % Plot using QC
  % -------------

  % Get list of keys from hashtable tsg.qc.hash, defined inside
  % tsg_initialisation.m
  % -----------------------------------------------------------
  qc_list = keys(tsg.qc.hash);

  % Plot Sample/TSG differences on axe 2
  % iterate (loop) on each key store inside hastable
  % Iterate from the end of the cell array : fliplr
  % ------------------------------------------------
  for key = fliplr( qc_list )

    % get  some values in hashtable
    % -----------------------------
    %qcState = tsg.qc.hash.(key).state;
    qcCode  = tsg.qc.hash.(key).code;
    qcColor = tsg.qc.hash.(key).color;

    % plot tsg salinity sample with right code/color
    % ----------------------------------------------
    ind = find( tsg.SSPS_QC == qcCode & isnan(tsg.SSPS) == 0);
    if ~isempty( ind )
      
      % Create line on the map
      % ----------------------
      m_line( mod(lonx(ind) + tsg.lonplus, tsg.lonmod) - tsg.lonplus,...
              latx(ind), 'LineStyle', 'none', 'marker','*',...
              'markersize', 2, 'color', qcColor);
    end
  end

  % Write title
  % -----------
  title( ['Cruise: ' tsg.file.name], 'fontsize',tsg.fontSize +2, ...
    'fontweight', 'bold','interpreter','none');

  % Set tag for each line
  % ---------------------
  hLines = get(hPlotAxes(4), 'Children');
  for i=1:length(hLines)
    set(hLines(i), 'Tag', ['TAG_PLOT4_LINE_MAP' int2str(i)]);
  end

  % Save tsg structure
  % ------------------
  setappdata( hTsgGUI, 'tsg_data', tsg);

end

