;+
; NAME:
;        COLORBAR
;
; PURPOSE:
;        Draw a colorbar (legend) with labels
;
; CATEGORY:
;        Colors
;
; CALLING SEQUENCE:
;	colorbar,datamin,datamax,title=title,vertical=vertical,position=position,$
;	 log=log,mincolor=mincolor,maxcolor=maxcolor,tickformat=tickformat,$
;	 reverse=reverse,ticklen=ticklen,color=color,ticks=ticks,tickname=tickname
;
; INPUTS:
;	datamin, datamax -colorbar range
;
; KEYWORD PARAMETERS:
;	vertical -draw vertical color bar
;	log - logarithmic scale of the axis
;	reverse - reverse of the color bar
;	mincolor - minimum color index ( default 0)
;	maxcolor - maximum color index ( default 255)
;	
;	Graphic keywords: title,color,tickname,tickformat,ticklen,ticks,position
;
; MODIFICATION HISTORY:
; 	Written by:	Vladimir Garaimov, May 2002
;
;-

pro colorbar,datamin,datamax,title=title,vertical=vertical,position=position,$
	log=log,mincolor=mincolor,maxcolor=maxcolor,tickformat=tickformat,$
	reverse=reverse,ticklen=ticklen,color=color,ticks=ticks,tickname=tickname

if n_params(0) ne 2 then begin
	doc_library,'colorbar'
	return
end

if n_elements(tickname) eq 0 then thickn='' else tickn=tickname
if n_elements(tickformat) eq 0 then thickf='' else tickf=tickformat(0) 
if n_elements(mincolor) eq 0 then minc=0 else minc=mincolor(0)>0 <250
if n_elements(maxcolor) eq 0 then maxc=255 else maxc=maxcolor(0)>5 <255
if n_elements(title) eq 0 then tit='' else tit=string(title(0))
if keyword_set(vertical) then vv=1 else vv=0
if n_elements(ticks) eq 0 then tks=0 else tks=ticks(0)
if n_elements(ticklen) eq 0 then tlen=-0.1 else tlen=ticklen(0)
if n_elements(color) eq 0 then col=!p.color else col=color(0)
if n_elements(position) eq 4 then pos=position else begin
	if vv then pos=[0.85,0.2,0.9,0.8] else pos=[0.2,0.07,0.8,0.12]
	end
if keyword_set(log) and datamin gt 1e-5 then ll=1 else ll=0

if vv then $ 
plot,/nodata,/noerase,xsty=5,ysty=5,posit=pos,[0,1],[datamin,datamax],ylog=ll $
else $
plot,/nodata,/noerase,xsty=5,ysty=5,posit=pos,[datamin,datamax],[0,1],xlog=ll

nn=maxc-minc+1 & arr=indgen(nn)+minc
arr=congrid(arr,256,/int)
if keyword_set(reverse) then arr=reverse(arr)
i=replicate(1,40)
if vv then arr=i#arr else arr=arr#i
x_0=!x.window(0)*!d.x_vsize
x_1=!x.window(1)*!d.x_vsize
y_0=!y.window(0)*!d.y_vsize
y_1=!y.window(1)*!d.y_vsize

if !d.name ne 'PS' then arr=congrid(arr,x_1-x_0,y_1-y_0,/inter) 
tv,byte(arr),x_0,y_0,/dev,xsize=x_1-x_0,ysize=y_1-y_0

if vv then $
axis,1,ylog=ll,yax=1,ytit=tit,ytickl=tlen,ytickf=tickf,ysty=1,color=col,yticks=tks,ytickn=tickn $
else $
axis,xlog=ll,xax=0,xtit=tit,xtickl=tlen,xtickf=tickf,xsty=1,color=col,xticks=tks, xtickn=tickn 
end




