function timeaxis(xy,Zeitoffset,JahrTicks,FORM,varargin)
% timeaxis(xy,Zeitoffset,JahrTicks,FORM) zeichnet Zeitachse
% Eingabe:
%  xy  : ob sich dies auf die X-Achse ('x',1) oder yachse ('y',sonst)
%        bezieht
%  Zeitoffset: der Nullpunkt der Zeitachse (julianische Tage), wenn
%        nicht angegeben, wird als Anfangspunkt der Zeitachse der 
%        1.1.-1 angenommen wie es auch datenum macht (in Beschreibung 
%        dort faelscherweise 1.1.0 genannt) 
%        Kann auch ein Text fuer date_transform sein, aslo z.B.
%        'days since 1.1.2000'
%  Jahrticks: Angabe, wo die Tickmarks hinsollen, wird in Jahren
%        angegeben, z.B. [2000:.5:2005]. Wenn nicht angegeben werden
%        die aktuellen Tickmarks genommen.
%        Can also be one of the following strings
%        month, month1: set tickmarks every first of each month
%        month15      : set tickmarks every 15th of each month
%        Variants thereof:
%        2months1, 3months1, 6months1: set each second,third or
%        sixth month
%        if FORM is 2 (given or by default) set it to 12=Mar00
%  FORM: das Format des Zeitstrings fuer die Tickmarks, Angabe wie
%        bei function datestr, keine angabe bedeutet FORM=20
%  Variable arguments
%  'limits'  : set the time axis limits to the min/max of JahrTicks
%  'yearday' : assumes as date yeardays, sets Zeitoffset to
%              1.1.1997 and FORM to 19 (If FORM is set to the
%              default 20)   

% Changes:
%  3.3.05: Default form is now 20;dd/mm/yy 
if exist('xy')~=1 | isempty(xy) ; xy=1; end
if ischar(xy);
  if length(xy)>1; error('Axis must be 1 char, x or y'); end
  if upper(xy)=='X'; xy=1; elseif upper(xy)=='Y'; xy=2;
  else error('Axis must be 1 char, x or y'); end
end
if exist('Zeitoffset')~=1 | isempty(Zeitoffset) ; 
  Zeitoffset=0;
elseif ischar(Zeitoffset)
  Zeitoffset=date_transform(0,Zeitoffset,'datenum');
else
  Zeitoffset=Zeitoffset-1721059;  % 1.1.-1 abziehen
end
if nargin<4; FORM=-20; end   %  'dd/mm/yy' 
if isempty(FORM); FORM=-20; end

ii=1; setaxislimits=0; 
while ii<=length(varargin)
  if strcmpi(varargin{ii},'LIMITS')
    setaxislimits=1;
    ii=ii+1;
  elseif strcmpi(varargin{ii},'YEARDAY')
    Zeitoffset=2450450-1721059;
    if FORM==-20; FORM=-19; end
    ii=ii+1;
  else
    error('unknown variable argument')
  end
end
   
if exist('JahrTicks')~=1 
  
elseif ~isempty(JahrTicks) & ischar(JahrTicks) ;
  switch lower(JahrTicks)
   case {'7day','7days'}
    IDD=[1 8 15 22]; IMM=1;
   case {'15day','15days'}
    IDD=[1 15]; IMM=1;
   case {'month','month1','months'}
    IDD=1; IMM=1;
   case {'month15'}
    IDD=15; IMM=1;
   case {'2month','2month1','2months','2months1'}
    IDD=1; IMM=2;
   case {'2month15','2months15'}
    IDD=15; IMM=2;
   case {'3month','3month1','3months','3months1'}
    IDD=1; IMM=3;
   case {'3month15','3months15'}
    IDD=15; IMM=3;
   case {'6month','6month1','6months','6months1'}
    IDD=1; IMM=6;
   case {'6month15','6months15'}
    IDD=15; IMM=6;
   otherwise
    error('wrong character string for Jahrticks')
  end
  if xy==1; a=get(gca,'XLim'); else  a=get(gca,'YLim'); end
  %keyboard
  a=a+Zeitoffset+1721059;
  [idd,imm,iyyy]=dayjulian(a(1)); dumy=[];
  imm=imm+1-IMM; if idd<=IDD; imm=imm-1; end 
  if imm<1; imm=imm+12; iyyy=iyyy-1; end
  while 1>0
    imm=imm+IMM; if imm>12; imm=imm-12; iyyy=iyyy+1; end
    if ~isempty(dumy) & julianday(IDD,imm,iyyy)>a(2); break; end
    dumy=[dumy julianday(IDD,imm,iyyy)];
  end
  %dumy=dumy+Zeitoffset+1721059;
  dumy=dumy-Zeitoffset-1721059;
  if xy==1;
    set(gca,'Xtick',dumy);
  else 
    set(gca,'Ytick',dumy);
  end
  switch FORM
   case -20; FORM=12; 
   case -19; FORM=3;
  end
elseif ~isempty(JahrTicks) ;
  if min(JahrTicks)>1721059
    JahrTicks=JahrTicks-1721059;
    JahrTicks=JahrTicks-Zeitoffset;
  else    
    if max(mod(JahrTicks,1))==0 & nargin<4; FORM=11; end
    JahrTicks=julianday(1,1,JahrTicks)-1721059;
    JahrTicks=JahrTicks-Zeitoffset;
  end
  if xy==1;
    set(gca,'Xtick',JahrTicks);
    if setaxislimits; set(gca,'Xlim',[min(JahrTicks),max(JahrTicks)]); end
  else 
    set(gca,'Ytick',JahrTicks);
    if setaxislimits; set(gca,'Ylim',[min(JahrTicks),max(JahrTicks)]); end
  end
end

a=gca;
if xy==1;
  xt=get(a,'XTick');
  xl=datestr(xt+Zeitoffset,abs(FORM));
  bereich=get(a,'Xlim');
  n=sum(xt>bereich(1) & xt<bereich(2));
  if n>12
    xl(2:2:end,:)=' ';
  end
  set(a,'XTickLabel',xl)
  set(a,'XTickLabelMode','manual')
  set(a,'XTickMode','manual')
else
  yt=get(a,'YTick');
  yl=datestr(yt+Zeitoffset,abs(FORM));
  bereich=get(a,'Ylim');
  n=sum(yt>bereich(1) & yt<bereich(2));
  if n>12
    yl(2:2:end,:)=' ';
  end
  set(a,'YTickLabel',yl)
  set(a,'YTickLabelMode','manual')
  set(a,'YTickMode','manual')
end

   
