I'm going to post the code to the OU browsing tool, but there is one problem I am working on atm. If you double-click the right window to open an item and you are currently sitting at the highest level view, then it will not pull in any values in the left window. Once you've gone forward in the structure, going back will take you one level back and fill in the data. Once 'Back' has been taken, this problem goes away.

[EDIT]: I fixed this problem. No bugs as far as I know. Code has been updated.

Dependencies: Kixforms 2.1.1
code:
BREAK ON
$OULOC = " / "

$OU_FORM = CreateObject("KiXtart.FORM")
$OU_FORM.CAPTION = "OU VIEW"
$OU_FORM.SCALEHEIGHT = 450
$OU_FORM.SCALEWIDTH = 530
$OU_FORM.CENTER

$lblOULocation = $OU_FORM.Label("Current Path: "+$OULOC)
$lblOULocation.HEIGHT = 38
$lblOULocation.WIDTH = 450
$lblOULocation.LEFT = 75
$lblOULocation.TOP = 10

$cmdOUBack = $OU_FORM.CommandButton("Back")
$cmdOUBack.HEIGHT = 19
$cmdOUBack.WIDTH = 60
$cmdOUBack.LEFT = 10
$cmdOUBack.TOP = 8
$cmdOUBack.OnClick = "cmdOUBack_Click()"

$lstOU1 = $OU_FORM.ListBox
$lstOU1.HEIGHT = 300
$lstOU1.WIDTH = 250
$lstOU1.LEFT = 10
$lstOU1.TOP = 60
$lstOU1.OnClick = "lstOU1_Click()"
$lstOU1.OnDblClick = "lstOU1_DblClick()"

$lstOU2 = $OU_FORM.ListBox
$lstOU2.HEIGHT = 300
$lstOU2.WIDTH = 250
$lstOU2.LEFT = 270
$lstOU2.TOP = 60
$lstOU2.OnDblClick = "lstOU2_DblClick()"

$cmdOUOK = $OU_FORM.CommandButton("OK")
$cmdOUOK.HEIGHT = 19
$cmdOUOK.WIDTH = 80
$cmdOUOK.LEFT = 165
$cmdOUOK.TOP = 390
$cmdOUOK.OnClick = "cmdOUOK_Click()"
$cmdOUOK.Default = 1

$cmdOUCancel = $OU_FORM.CommandButton("Cancel")
$cmdOUCancel.HEIGHT = 19
$cmdOUCancel.WIDTH = 80
$cmdOUCancel.LEFT = 285
$cmdOUCancel.TOP = 390
$cmdOUCancel.OnClick = "$$OU_FORM = Nothing"
$cmdOUCancel.Cancel = 1

$OU_FORM.SHOW
$POPULATE2 = "NO"
$GONEBACK = "NO"
$OUROOT = ""

$LDAP = GetObject("LDAP:")
FOR EACH $ELEMENT IN $LDAP
$lstOU1.AddItem($ELEMENT.NAME);(SUBSTR($ELEMENT.NAME,4,LEN($ELEMENT.NAME) - 3))
NEXT

WHILE $OU_FORM.VISIBLE
$=EXECUTE($OU_FORM.DoEvents)
$OU_FORM.REFRESH
LOOP
$LDAP = Nothing


FUNCTION cmdOUOK_Click()
ENDFUNCTION

FUNCTION lstOU1_Click()
IF $OUROOT = ""
$CNT = 1
FOR EACH $ELEMENT IN $LDAP
IF $ELEMENT.NAME = $lstOU1.TEXT
$OUPATH = $ELEMENT.ADSPATH
ENDIF
NEXT
$OUROOT1 = SPLIT($OUPATH,",")
WHILE $CNT <= UBOUND($OUROOT1)
$OUROOT = $OUROOT + $OUROOT1[$CNT] + ","
$CNT = $CNT + 1
LOOP
$CNT = 0
$OUROOT = SUBSTR($OUROOT,1,LEN($OUROOT) - 1)
ENDIF
IF $INDEX2 <> $lstOU1.ListIndex
$POPULATE2 = "NO"
$lstOU2.CLEAR
ENDIF
$INDEX2 = $lstOU1.ListIndex
IF $POPULATE2 = "NO"
DIM $TMPARRAY
$TMPARRAY = SPLIT($OUPATH,",")
IF $lstOU1.TEXT <> SUBSTR($TMPARRAY[0],8,LEN($TMPARRAY[0]))
$PASSVAR1 = $lstOU1.TEXT + ","
ELSE
$PASSVAR1 = ""
ENDIF
$PASSVAR2 = SUBSTR($OUPATH,8,LEN($OUPATH))
$LDAP = GetObject("LDAP://"+$PASSVAR1+$PASSVAR2)
FOR EACH $ELEMENT IN $LDAP
$lstOU2.AddItem($ELEMENT.NAME)
NEXT
$POPULATE2 = "YES"
ENDIF
ENDFUNCTION

FUNCTION lstOU1_DblClick()
DIM $TMPARRAY
$OULOC = $OULOC + $lstOU1.TEXT + " / "
$lblOULocation.CAPTION = "Current Path: "+$OULOC
$TMPARRAY = SPLIT($OUPATH,",")
IF $lstOU1.TEXT <> SUBSTR($TMPARRAY[0],8,LEN($TMPARRAY[0]))
$PASSVAR1 = $lstOU1.TEXT+","
ELSE
$PASSVAR1 = ""
ENDIF
$PASSVAR2 = SUBSTR($OUPATH,8,LEN($OUPATH))
$OUPATH="LDAP://"+$PASSVAR1+$PASSVAR2
$LDAP = GetObject($OUPATH)
$lstOU1.CLEAR
FOR EACH $ELEMENT IN $LDAP
$lstOU1.AddItem($ELEMENT.NAME)
NEXT
$lstOU2.CLEAR
$POPULATE2 = "NO"
ENDFUNCTION

FUNCTION lstOU2_DblClick()
DIM $TMPARRAY
$OULOC = $OULOC + $lstOU1.TEXT + " / " + $lstOU2.TEXT + " / "
$lblOULocation.CAPTION = "Current Path: "+$OULOC
$TMPARRAY = SPLIT($OUPATH,",")
IF $lstOU2.TEXT <> SUBSTR($TMPARRAY[0],8,LEN($TMPARRAY[0]))
$PASSVAR1 = $lstOU2.TEXT+","
ELSE
$PASSVAR1 = ""
ENDIF
$PASSVAR2 = $lstOU1.TEXT+","
IF $GONEBACK = "NO"
$PASSVAR3 = ""
$TMPARRAY=SPLIT($OUPATH,",")
$CNT = 1
$TOTCNT = UBOUND($TMPARRAY)
WHILE $CNT <= $TOTCNT
$PASSVAR3 = $PASSVAR3 + $TMPARRAY[$CNT] + ","
$CNT = $CNT + 1
LOOP
$PASSVAR3 = SUBSTR($PASSVAR3,1,LEN($PASSVAR3) - 1)
ELSE
$PASSVAR3 = SUBSTR($OUPATH,8,LEN($OUPATH))
ENDIF
$OUPATH="LDAP://"+$PASSVAR1+$PASSVAR2+$PASSVAR3
$LDAP = GetObject($OUPATH)
$lstOU1.CLEAR
FOR EACH $ELEMENT IN $LDAP
$lstOU1.AddItem($ELEMENT.NAME)
NEXT
$lstOU2.CLEAR
$POPULATE2 = "NO"
ENDFUNCTION

FUNCTION cmdOUBack_Click()
IF $OULOC = " / "
$OU_FORM.MsgBox("You are at the top of the structure.","Error")
ELSE
$GONEBACK = "YES"
$WRKOULOC = SPLIT($OULOC,"/")
$WRKOUPATH = ""
$WRKOULOC2 = ""
$TOTCNT = UBOUND($WRKOULOC) - 2
$CNT = 0
WHILE $CNT <= $TOTCNT
$WRKOULOC2 = $WRKOULOC2 + $WRKOULOC[$CNT] + "/"
$WRKOUPATH1 = $WRKOULOC[UBOUND($WRKOULOC) - $CNT - 2]
$WRKOUPATH2 = SUBSTR($WRKOUPATH1,2,LEN($WRKOUPATH1) - 2)
$WRKOUPATH = $WRKOUPATH + $WRKOUPATH2 + ","
$CNT = $CNT + 1
LOOP
$OULOC = $WRKOULOC2+" "
$OUPATH = "LDAP://"+SUBSTR($WRKOUPATH,1,LEN($WRKOUPATH) - 1) + $OUROOT
$lstOU1.CLEAR
$lstOU2.CLEAR
IF $OULOC = " / "
$LDAP = GetObject("LDAP:")
FOR EACH $ELEMENT IN $LDAP
$lstOU1.AddItem($ELEMENT.NAME)
NEXT
ELSE
$LDAP = GetObject($OUPATH)
FOR EACH $ELEMENT IN $LDAP
$lstOU1.AddItem($ELEMENT.NAME)
NEXT
ENDIF
$lblOULocation.CAPTION = "Current Path: "+$OULOC
$POPULATE2 = "NO"
ENDIF
ENDFUNCTION

I welcome any suggestions/comments on this.

-Ben
http://www.rgcweb.org:90

[ 24. October 2002, 21:03: Message edited by: Ben Dulaney ]