function [xd,xr,errc] = NAGdiff(mr,x,errc)
%    SEZONNI A NESEZONNI DIFERENCOVANI REALNE 1-ROZMERNE CASOVE RADY
%         (Gateway to NAG Foundation toolbox routine G13AAF)
% VOLANI: [xd,xr,errc] = NAGdiff(mr,x,errc)
% VSTUP:
% mr   ... =d nebo [d,D,s] nebo uplny vektor radu modelu [p,d,q,P,D,Q,s]
%          vytvareny pomocnymi procedurami AR,MA,ARMA,ARIMA,SARIMA:
%          d ... rad nesezonniho diferencovani (d>=0, cele cislo)
%          D ... rad sezonniho   diferencovani (D>=0, cele cislo)
%          s ... perioda (pocet bodu) sezonni komponenty (s>=0, cele cislo)
%                D>0 => s>0.
%          rady p,q,P,Q jsou bezvyznamne pro tuto proceduru.
% x    ... vektor pozorovani casove rady X(t) delky n
% errc ... rizeni vypisu chyboveho hlaseni (nepovinny znakovy parametr):
%          '+' ... povoleni vypisu vysvetlujiciho chyboveho hlaseni
%                  pri vyskytu chyby (implicitni hodnota pri vynechani)
%          '-' ... potlaceni vypisu chyboveho hlaseni
%          Pouziti jakehokoli jineho retezce ma stejny efekt jako '+'.
%
% VYSTUP:
% xd    ... vysledny vektor po diferencovani rozmeru nd x 1, kde
%           nd=n-nr a nr=d+D*s.
% xr    ... vektor nr x 1 zbytkovych hodnot nutnych pro zpetnou rekonstrukci
% errc  ... navratovy kod uspesnosti:
%           = 0 ... uspesne provedeni
%           ~=0 ... neuspesne provedeni, kod chyby udava pricinu
%           1 ... chybny mr: d<0 nebo D<0 nebo s<0 nebo (s=0 pro D>0)
%           2 ... x je prilis kratky: n<=d+D*s
%           Je-li procedura volana z programu, mel by byt vystupni kod vzdy
%           testovan, nebot nasledny vypocet by jinak byl nekorektni.

% (C) 1999, V. Vesely, Masaryk University of Brno (Czech Republic)
%
error(nargchk(2,3,nargin));
if nargin<3, errc = []; end
%
errc = ~strcmp(errc,'-');
n = length(x);
if length(mr)==1, mr=[mr,0,0];  end
if length(mr)==7, mr=mr([2,5,7]); end
if length(mr)==3
   [xd,nd,ifail] = g13aaf(x,mr(1),mr(2),mr(3),1);
   clear mex;
else
   ifail = 1;
   xd=x; nd=n;
end
if errc
   switch ifail
   case 1, error('errc=1: invalid model range ''mr''');
   case 2, error('errc=2: time series ''x'' too short');
   otherwise
     if ifail~=0
        error(['errc=',num2str(ifail),': unidentified error code']);
     end
   end
end
errc = ifail;
xr = xd(nd+1:n);
xd = xd(1:nd);
