;downloads eclipse predict files from http://themis.ssl.berkeley.edu/data/rbsp/MOC_data_products
;
;Creates these tplot variables.
;rbsp(a,b)_umbra
;rbsp(a,b)_penumbra
;
;
;The x-value is the start time of the umbra(penumbra) and y-value is the duration 
;
;
;probe = 'a' or 'b'
;date = '2012-10-13' format
;
;
;notes: There are some dates in which the eclipse predict file that is loaded doesn't
;		have the correct data, or that the suffix has been changed. These exceptions
;		are addressed individually below
;
;Written by Aaron W Breneman - University of Minnesota
;2013-01-30



pro rbsp_load_eclipse_predict,probe,date,remote_data_dir=remote_data_dir,local_data_dir=local_data_dir


	rbsp_spice_init

;URL stuff...

	if ~keyword_set(remote_data_dir) then $
		remote_data_dir = !rbsp_spice.remote_data_dir
	if ~keyword_set(local_data_dir) then $
		local_data_dir = !rbsp_spice.local_data_dir

	dirpath='MOC_data_products/RBSP'+strupcase(probe)+'/eclipse_predict/'
	
;Find out what files are online
	FILE_HTTP_COPY,dirpath,url_info=ui,links=links,localdir=local_data_dir,$
		serverdir=remote_data_dir


;Modify date/time strings

	date2 = time_string(time_double(date),tformat='YYYYMMDD')
	year = time_string(time_double(date),tformat='YYYY')
	doy = time_string(time_double(date),tformat='DOY')


	months = replicate(0.,n_elements(links))
	days = replicate(0.,n_elements(links))
	test = replicate(0B,n_elements(links))

	doys = strmid(links,11,3)
	years = strmid(links,6,4)



	doy_to_month_date,years,doys,months,days


	months = strtrim(floor(months),2)
	days = strtrim(floor(days),2)

	uts = years + '-' + months + '-' + days

	;fix string format
	uts = time_string(time_double(uts))


;uts holds the unix times of all the files available online to download
;Since each file holds the times for multiple eclipse dates we need to figure out
;which one to load

	test = (time_double(date) - time_double(uts))/86400.   
	goo = where(test ge 0)


	if goo[0] ne -1 then begin

		val = min(test[goo],loc)
		file = links[loc]


		;*******
		;Fix filenames for exceptions. The APL file in the below cases is messed up, maybe
		;b/c it doesn't have the data it's supposed to have, or b/c the suffix has changed.
		
		;Exceptions:
		;A: 10-23 (should work)
		;B: 10-23 (should work)
		
		;A: 10-11, 10-12
		if file eq 'rbspa_2012_285_01.pecl' then file = 'rbspa_2012_285_01.pecl.orig'

		;B: 10-05, 10-06, 10-07, 10-08, 10-09		
		if file eq 'rbspb_2012_279_01.pecl' then file = 'rbspb_2012_272_01.pecl'

		;*******

		relpathnames = dirpath + file



		;download the file
		file_loaded = file_retrieve(relpathnames,remote_data_dir=remote_data_dir,$
			local_data_dir=local_data_dir,/last_version)


	;Hopefully the file is now downloaded locally. 
	;Let's read it

		ft = [3,3,7,3,7,3,7,3,7,4,7,7,4]
		fn = ['orbit_number','daystart','monthstart','yearstart','timestart','daystop',$
				'monthstop','yearstop','timestop','duration','obstruction',$
				'current_condition','total_duration']
		fl = [0,16,19,23,28,44,47,51,56,81,90,105,138]
		fg = [indgen(13)]

		template = {version:1.,$
					datastart:6L,$
					delimiter:32B,$
					missingvalue:!values.f_nan,$
					commentsymbol:'',$
					fieldcount:13L,$
					fieldtypes:ft,$
					fieldnames:fn,$
					fieldlocations:fl,$
					fieldgroups:fg}


		vals = read_ascii(file_loaded,template=template)


		if is_struct(vals) then begin

		;Fix up date to yyyy-mm-dd/hh:mm:ss.msec format
			months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']


			;start date
			months2 = fltarr(n_elements(vals.monthstart))
			for i=0L,n_elements(vals.monthstart) - 1 do begin	$
				goo = where(vals.monthstart[i] eq months)	& $
				months2[i] = goo + 1	& $
			endfor

			ec_start = strtrim(vals.yearstart,2)+'-'+strtrim(months2,2)+'-'+strtrim(vals.daystart,2) + '/' + vals.timestart
			ec_start = time_string(time_double(ec_start))

			goo_start = where(strmid(ec_start,0,10) eq date)

			if goo_start[0] ne -1 then ec_start = ec_start[goo_start] else begin
				print,'NO ECLIPSE TIMES FOR THIS DATE(S)'
				return
			endelse

			ec_startd = time_double(ec_start)

			;stop date
			months2 = fltarr(n_elements(vals.monthstop))
			for i=0L,n_elements(vals.monthstop) - 1 do begin	$
				goo = where(vals.monthstop[i] eq months)	& $
				months2[i] = goo + 1	& $
			endfor

			ec_stop = strtrim(vals.yearstop,2)+'-'+strtrim(months2,2)+'-'+strtrim(vals.daystop,2) + '/' + vals.timestop
			ec_stop = time_string(time_double(ec_stop))

			goo_stop = where(strmid(ec_stop,0,10) eq date)

			if goo_stop[0] ne -1 then ec_stop = ec_stop[goo_stop] else begin
				print,'NO ECLIPSE TIMES FOR THIS DATE(S)'
				return
			endelse


			ec_stopd = time_double(ec_stop)


			type = vals.current_condition[goo_start]
			duration = vals.duration[goo_start]
			umb = where(type eq 'Umbra',cntu)
			pen = where(type eq 'Penumbra',cntp)




			if umb[0] ne -1 then begin
				store_data,'rbsp'+probe+'_umbra',data={x:time_double(ec_start[umb]),y:duration[umb]}
			endif else print,'NO UMBRA DATA FOUND FOR THIS TIMESPAN'
			if pen[0] ne -1 then begin
				store_data,'rbsp'+probe+'_penumbra',data={x:time_double(ec_start[pen]),y:duration[pen]}
			endif else print,'NO PENUMBRA DATA FOUND FOR THIS TIMESPAN'


		endif else print,'NO ECLIPSE DATA FOR THIS TIME'

	endif else print,'NO ECLIPSE FILE FOR THIS DAY'


end