function array_insert, arr_a, arr_b, index

if n_params() lt 2 then begin
    message,'Incorrect arguments.  Usage: a=array_insert(array1, array2 [, index] )', /cont
    return, -1
endif

checkvar, index, 0

a_ndim = size(arr_a, /n_dim)
b_ndim = size(arr_b, /n_dim)

if a_ndim gt 2 or b_ndim gt 2 then begin
    message, 'Error. Can not handle > 2D arrays.', /cont
    return, -1
endif

sa = size(arr_a, /dim)
a_dim1 = sa[0]
a_dim2 = a_ndim le 1 ? 1 : sa[1]


sb = size(arr_b, /dim)
b_dim1 = sb[0] > 1
b_dim2 = b_ndim le 1 ? 0 : sb[1]

if b_ndim gt 1 and (b_dim2 ne a_dim2) then begin
    message, 'Error.  Second dimension of destination array and array to insert must match.', /cont
    return, -1
endif

do_rebin = a_dim2 ne b_dim2

;if index eq 0 then return, [ (do_rebin ? rebin(arr_b[*],b_dim1,a_dim2) : arr_b), arr_a]

;if index ge a_dim1 then return, [ arr_a, (do_rebin ? rebin(arr_b[*],b_dim1,a_dim2) : arr_b) ]

;return, [ arr_a[0:index-1,*], (do_rebin ? rebin(arr_b[*],b_dim1,a_dim2) : arr_b), arr_a[index:*,*] ]

if index eq 0 then return, [ (do_rebin ? reproduce(arr_b[*],a_dim2) : arr_b), arr_a]

if index ge a_dim1 then return, [ arr_a, (do_rebin ? reproduce(arr_b[*],a_dim2) : arr_b) ]

return, [ arr_a[0:index-1,*], (do_rebin ? reproduce(arr_b[*],a_dim2) : arr_b), arr_a[index:*,*] ]


en