function [y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14,y15,y16,y17,y18,y19,y20,y21]=dataloader(mid,start,stop,type);
% function to load the flagged mooring data.
% Inputs: mid=mooring number
% 	  start=starting year and starting month in an array
%         stop =ending year and month in an array
%         type = (1=met), (2=ctd), (3=tstring), (4=ADCP)
%

% step 1) define path prefix
mm=['m',num2str(mid)];
%pathpre=['/data/terr3/bahr/',mm,'/'];
pathpre=['/d/span9/bahr/',mm,'/'];
monc=['jan';'feb';'mar';'apr';'may';'jun';'jul';'aug';
      'sep';'oct';'nov';'dec'];
ystart=start(1);  smon=monc(start(2),:);
yend=stop(1); emon=monc(stop(2),:);
tstart=datenum(ystart,start(2),00,00,00,00);
tend=datenum(yend,stop(2),00,00,00,00);
gn=[];
switch(type)
	case 1,
		patt=['metsys/'];
		npre=[mm,'_met_'];
		met=[];
		flag=[];
		metn=[]; metf=[];
	case 2,
		patt=['ctd/'];
		npre=[mm,'_ctd_'];
		ctd=[];
		flag=[];
		ctdn=[]; ctdf=[];
	case 3,
		patt=['tstring/'];
		npre=[mm,'_tstring_'];
		for tt=1:10,
			eval(['t',num2str(tt),'=[];']);
			eval(['f',num2str(tt),'=[];']);
			eval(['t',num2str(tt),'n=[];']);
			eval(['f',num2str(tt),'n=[];']);
		end
		time=[];
		timen=[];
	case 4,
		patt=['adcp/'];
		npre1=[mm,'_adcp_uv_'];
		npre2=[mm,'_adcp_sc_'];
		cm=[]; e=[]; gpsf=[];
		uf=[]; vf=[]; g=[];
		gps=[]; pg3=[]; pg4=[];
		t=[]; u=[]; v=[];
		fsc=[]; adcpsc=[];
		tn=[]; un=[]; vn=[];
		adcpscn=[]; en=[]; fgps=[];
		cmn=[]; fu=[]; fv=[]; gn=[];
		gpsn=[]; pg3n=[]; pg4n=[]; adcpfsc=[];
	otherwise,
end
ytemp=start(1);
ystr=num2str(ytemp);
tmon=start(2);
while(tstart <= tend),
	if(type ~=4),
		fff=[pathpre,patt,ystr,'/',npre,smon,'_',ystr,'.mat'];
		fid=fopen(fff,'r');
		if fid > 2,
		fclose(fid);
		eval(['load ',pathpre,patt,ystr,'/',npre,smon,'_',ystr,';']);
		end
	end
	if(type==4),
		ff1=[pathpre,patt,ystr,'/',npre1,smon,'_',ystr,'.mat'];
		ff2=[pathpre,patt,ystr,'/',npre2,smon,'_',ystr,'.mat'];
		fid1=fopen(ff1,'r');
		fid2=fopen(ff2,'r');
		if fid1 > 2,
		fclose(fid1);
		fclose(fid2);
		eval(['load ',pathpre,patt,ystr,'/',npre1,smon,'_',ystr,'.mat']);
		eval(['load ',pathpre,patt,ystr,'/',npre2,smon,'_',ystr,'.mat']);
		end
	end
	switch(type)
		case 1,
			if isempty(metn)==0,
				ttep=ydtostr(ytemp,metn(:,1));
				metn(:,1)=ttep;
			end
			met=[met; metn];
			flag=[flag; metf];
			metn=[]; metf=[];
		case 2,
			if isempty(ctdn)==0,
				ttep=ydtostr(ytemp,ctdn(:,1));
				ctdn(:,1)=ttep;
			end
			ctd=[ctd; ctdn];
			flag=[flag; ctdf];
			ctdn=[]; ctdf=[];
		case 3,
			if isempty(timen)==0,
				ttep=ydtostr(ytemp,timen);
				timen=ttep;
			end
			time=[time; timen];
			for tt=1:10,
				eval(['jk=t',num2str(tt),'n;']);
				if isempty(jk)==0,
		eval(['ttep=ydtostr(ytemp,t',num2str(tt),'n(:,1));']);
		eval(['t',num2str(tt),'n(:,1)=ttep;']);
				end
		eval(['t',num2str(tt),'=[t',num2str(tt),'; t',num2str(tt),'n];']);
		eval(['f',num2str(tt),'=[f',num2str(tt),'; f',num2str(tt),'n];']);
		eval(['t',num2str(tt),'n=[];']);
		eval(['f',num2str(tt),'n=[];']);
			timen=[];
			end
		case 4,
			if isempty(tn)==0,
				ttep=ydtostr(ytemp,tn);
				tn=ttep;
			end
			t=[t; tn];
			if isempty(adcpscn)==0,
				ttep=ydtostr(ytemp,adcpscn(:,1));
				adcpscn(:,1)=ttep;
			end
			adcpsc=[adcpsc; adcpscn];
% because the number of bins may change between deployments of the instrument
% (ie either change bin numbers or change instrument).  We need to pad the
% arrays.
			le=size(e,2);
			len=size(en,2);
			if (le > len)&(isempty(en)==0),
				lp=le-len;
				lw=size(en,1);
				pad=-99.*ones(lw,lp); padf=ones(lw,lp);
				pad4=-99.*(ones(lw,lp,4));
				en=[en pad];
				un=[un pad];
				vn=[vn pad];
				pg3n=[pg3n pad];
				pg4n=[pg4n pad];
				fu=[fu padf];
				fv=[fv padf];
				gn=cat(2,gn,pad4);
				cmn=cat(2,cmn,pad4);
			end
			if (len > le)&(isempty(e)==0),
				lp=len-le;
				lw=size(e,1);
				pad=-99.*ones(lw,lp); padf=ones(lw,lp);
				pad4=-99.*ones(lw,lp,4);
				e=[e pad];
				u=[u pad];
				v=[v pad];
				pg3=[pg3 pad];
				pg4=[pg4 pad];
				uf=[uf padf];
				vf=[vf padf];
				g=cat(2,g,pad4);
				cm=cat(2,cm,pad4);
			end
			e=[e; en];
			gpsf=[gpsf; fgps];
%			disp(smon);
%			disp(['size cm']);
%			disp(size(cm));
%			disp(['size cmn']);
%			disp(size(cmn));
			cm=[cm; cmn];
			uf=[uf; fu];
			vf=[vf; fv];
			g=[g; gn];
			gps=[gps; gpsn];
			pg3=[pg3; pg3n];
			pg4=[pg4; pg4n];
			u=[u; un]; v=[v; vn];
			fsc=[fsc; adcpfsc];
			tn=[];
			un=[]; vn=[]; fu=[]; fv=[];
			en=[]; fgps=[]; gpsn=[];
			adcpscn=[]; adcpfsc=[]; cmn=[]; gn=[];
			pg3n=[]; pg4n=[];
		otherwise,
	end
	tmon=tmon+1;
	if(tmon > 12),
		tmon=1;
		ytemp=ytemp+1;
	end
	ystr=num2str(ytemp);
	smon=monc(tmon,:);
	tstart=datenum(ytemp,tmon,00,00,00,00);
end
switch(type)
	case 1,
		y1=met;
		y2=flag;
	case 2,
		y1=ctd;
		y2= flag;
	case 3,
		for ii=1:10,
			eval(['y',num2str(ii),'=t',num2str(ii),';']);
			eval(['y',num2str(ii+11),'=f',num2str(ii),';']);
		end
		y11=time;
	case 4,
		y1=t; y2=u; y3=v;
		y4=uf; y5=vf;
		y6=gps; y7=gpsf;
		y8=adcpsc; y9=fsc;
		y10=e; y11=cm;
		y12=g; y13=pg3;
		y14=pg4;
	otherwise,
end
