;+
; NAME:
;   jbt_tplot_pos (function)
;
; PURPOSE:
;   Get the positions of tplot panels. The returned array has the form 
;   [n_panels, 4]. The meanings of the 4 values of each panel are:
;       [*, 0]: left x
;       [*, 1]: bottom y
;       [*, 2]: right x
;       [*, 3]: top y
;
; CATEGORIES:
;
; CALLING SEQUENCE:
;   pos = jbt_tplot_pos(npanels = npanels, xpos = xpos, ypos = ypos, $
;   enclose = enclose)
;   
;   xpos and ypos store locations for plots. For example, 
;       plots, xpos[0,*], ypos[0,*], color = 6 ; 6 = red
;   will draw lines along the top panel frame.
;
; ARGUMENTS:
;
; KEYWORDS:
;     npanels: (Output, optional)
;     xpos: (Output, optional)
;     ypos: (Output, optional)
;     /enclose: (Input, optional)
;
; COMMON BLOCKS:
;
; EXAMPLES:
;
; SEE ALSO:
;
; HISTORY:
;   2012-08-24: Created by Jianbao Tao(JBT), SSL, UC Berkeley.
;
; VERSION:
; $LastChangedBy: jianbao_tao $
; $LastChangedDate: 2012-11-02 16:35:10 -0700 (Fri, 02 Nov 2012) $
; $LastChangedRevision: 11172 $
; $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_2_00/general/missions/rbsp/efw/utils/jbt_tplot_pos.pro $
;-

function jbt_tplot_pos, npanels = npanels, xpos = xpos, ypos = ypos, $
  enclose = enclose


compile_opt idl2

@tplot_com.pro

chsize = !p.charsize
if chsize eq 0. then chsize=1.

def_opts= {ymargin:[4.,2.],xmargin:[12.,12.],position:fltarr(4), $
   title:'',ytitle:'',xtitle:'', $
   xrange:dblarr(2),xstyle:1,    $
   version:3, window:-1, wshow:0,  $
   charsize:chsize,noerase:0,overplot:0,spec:0}

extract_tags,def_opts,tplot_vars.options

varnames = tnames(/tplot)
nd = n_elements(varnames)

npanels = nd

if nd eq 0 then begin
  dprint, 'No vlaid tplot variables in memory. NaN returned.'
  return, !values.f_nan
endif

sizes = fltarr(nd)
for i=0,nd-1 do begin
   dum = 1.
   lim = 0
   get_data,tplot_vars.options.varnames[i],alim=lim
   str_element,lim,'panel_size',value=dum
   sizes[i] = dum
endfor

str_element,def_opts,'ygap',value = ygap
; dprint, 'ygap = ', ygap
; dprint, 'ymargin = ', def_opts.ymargin

nvlabs = [0.,0.,0.,1.,0.]
str_element,tplot_vars,'options.var_label',var_label
if keyword_set(var_label) then if size(/type,var_label) eq 7 then $
    if ndimen(var_label) eq 0 then var_label=tnames(var_label) ;,/extrac)
;ensure the index does not go out of range, other values will use default
if def_opts.version lt 1 or def_opts.version gt 4 then def_opts.version = 3
nvl = n_elements(var_label) + nvlabs[def_opts.version]
def_opts.ymargin = def_opts.ymargin + [nvl,0.]


old_pmulti = !p.multi

!p.multi = 0
pos = plot_positions(ysizes=sizes,options=def_opts,ygap=ygap)
!p.multi = old_pmulti

pos = transpose(pos)

if ~keyword_set(enclose) then begin
  xpos = fltarr(npanels, 4)
  ypos = fltarr(npanels, 4)

  xpos[*, 0] = pos[*, 0]
  xpos[*, 1] = pos[*, 0]
  xpos[*, 2] = pos[*, 2]
  xpos[*, 3] = pos[*, 2]

  ypos[*, 0] = pos[*, 1]
  ypos[*, 1] = pos[*, 3]
  ypos[*, 2] = pos[*, 3]
  ypos[*, 3] = pos[*, 1]
endif else begin
  xpos = fltarr(npanels, 5)
  ypos = fltarr(npanels, 5)

  xpos[*, 0] = pos[*, 0]
  xpos[*, 1] = pos[*, 0]
  xpos[*, 2] = pos[*, 2]
  xpos[*, 3] = pos[*, 2]
  xpos[*, 4] = pos[*, 0]

  ypos[*, 0] = pos[*, 1]
  ypos[*, 1] = pos[*, 3]
  ypos[*, 2] = pos[*, 3]
  ypos[*, 3] = pos[*, 1]
  ypos[*, 4] = pos[*, 1]
endelse

return, pos

end