function xdate, base, group_leader=group_leader, wid=wid, register=register, $
    starttime=starttime, stoptime=stoptime
; 
if not keyword_set(base) then $
   b0=widget_base(/column,title='TIME WIDGET',/frame) else b0=base

bl=widget_label(b0,value='Select Time',/frame)

bb0=widget_base(b0,/row)
xmenu,['-DAY','-MONTH','-YEAR'],bb0,/row, buttons=main1
bb0l=widget_label(bb0,value='<< Delta-Date>>',/frame)
xmenu,['+DAY','+MONTH','+YEAR'],bb0,/row, buttons=main2
mainbuts=[main1,main2]

bt=widget_text(b0,value=string(replicate(32b,120)),ysize=1, $
   font=get_xfont(/fixed,closest=20,/only_one))

b1=widget_base(b0,/column,event_pro='slider_event')

if not keyword_set(starttime) then starttime=get_yo_dates(/launch)
if not keyword_set(stoptime)  then stoptime =ut_time()
startday=gt_day(starttime)
stopday=gt_day(stoptime)

help,startday,stopday
b1s=widget_slider(b1,title='Date',min=startday, max=stopday,/suppress,/drag)
b11s=widget_slider(b1,min=-15,title='Date (Fine Tune)', max=15,value=0, $
   /drag, /suppress)

; time to nearest 30 minutes
b2=widget_base(b0,/column,event_pro='slider_event')
b2s=widget_slider(b2,title='Time',min=0,max=1440./30,/suppress,/drag)

b3=widget_base(b0,/column,event_pro='timebut_events')
hour4=strmid(timegrid('00:00 1-jan','23:30 1-jan',/string,hour=4),11,5)
xmenu,['-30 MIN',hour4,'+30 MIN'],b3,/row,buttons=timebuts

if n_elements(wid) eq 0 then wid=0
topstr={top:b0,         $
        label:bl,       $
        text:bt,        $
        mainbuts:mainbuts,  $
        base1:b1,       $
        dates:b1s,      $
        datefines:b11s,     $
        base2:b2,       $
        times:b2s,      $
        timebuts:timebuts,  $
    day:0,          $           ; days since 79
        time:0l,        $               ; msod
        date_range:[startday,stopday],  $       ; min/max for dates 
        labelstr:'',        $           ; change lable
    wid:wid         $           ; text wid for output   
    }

uvals={topid:bl, type:'', value:0l}     ; for passing info 

; event types
uvals.type='DATE'
widget_control,set_uval=uvals,topstr.dates
uvals.type='DATE FINE'
widget_control,set_uval=uvals,topstr.datefines
uvals.type='TIME'
widget_control,set_uval=uvals,topstr.times

widget_control, set_uvalue=topstr, b0

widget_control,b0,/realize
widget_control, set_uvalue=topstr, bl
widget_control, set_uvalue=topstr,b0
if keyword_set(register) then xmanager,'xdate',b0

return,b0

end