'DDX - Data exchange functions

sub DDX_Combo(ctrlSelect, rs)
	DDX_ComboEx ctrlSelect, rs, 0, 1, true, " ", null
end sub 

sub DDX_ComboDef(ctrlSelect, rs)
	DDX_ComboEx ctrlSelect, rs, 0, 1, true, " ", rs.Fields.Count - 1
end sub 

sub DDX_ComboSimple(ctrlSelect, rs)
    DDX_ComboEx ctrlSelect, rs, 0, 1, false, " ", null
end sub

sub DDX_ComboEx(ctrlSelect, rs, vCodeColumn, vDescColumn, bAddCodeToValue, sSeparator, vDefColumn)
	DDX_ComboEx2 ctrlSelect, rs, vCodeColumn, vDescColumn, bAddCodeToValue, sSeparator, vDefColumn, "", ""
end sub 

sub DDX_ComboEx2(ctrlSelect, rs, vCodeColumn, vDescColumn, bAddCodeToValue, sSeparator, vDefColumn, sNoneValue, sNoneText)
	DDX_ComboEx3 ctrlSelect, rs, vCodeColumn, vDescColumn, bAddCodeToValue, sSeparator, vDefColumn, sNoneValue, sNoneText, bAddCodeToValue
end sub 

sub DDX_ComboEx3(ctrlSelect, rs, vCodeColumn, vDescColumn, bAddCodeToValue, sSeparator, vDefColumn, sNoneValue, sNoneText, bAddCodeIntoNoneText)
    DDX_ComboEx4 ctrlSelect, rs, vCodeColumn, vDescColumn, bAddCodeToValue, sSeparator, vDefColumn, sNoneValue, sNoneText, bAddCodeIntoNoneText, true
end sub

sub DDX_ComboEx4(ctrlSelect, rs, vCodeColumn, vDescColumn, bAddCodeToValue, sSeparator, vDefColumn, sNoneValue, sNoneText, bAddCodeIntoNoneText, bRemoveAllpreviousElements)
	if bRemoveAllpreviousElements then
        ' remove all previous elements
    	while ctrlSelect.length > 0
    		ctrlSelect.remove 0
    	wend
    end if

	if IsArray(sNoneValue) then
	    Dim i
	    for i = LBound(sNoneValue) to UBound(sNoneValue)
	        AddComboElement ctrlSelect, sNoneValue(i), sNoneText(i), bAddCodeIntoNoneText, sSeparator
	    next
	elseif sNoneValue <> "" or sNoneText <> "" then
        AddComboElement ctrlSelect, sNoneValue, sNoneText, bAddCodeIntoNoneText, sSeparator
	end if	

	if rs is nothing then exit sub
	if rs.State = 0 then exit sub 'closed
	if rs.eof and rs.bof then exit sub
	if rs.Fields(0).Name = "$Text" then exit sub

	rs.MoveFirst
	while not rs.EOF
		set el = AddComboElement(ctrlSelect, rs(vCodeColumn).value, rs(vDescColumn).value, bAddCodeToValue, sSeparator)
		if not IsNull(vDefColumn) then 
			On Error Resume Next
			if rs(vDefColumn).value = "default" then el.selected = true
		end if
		rs.MoveNext
	wend
end sub

sub DDX_ComboCond(ctrlSelect, rs, vCodeColumn, vDescColumn, bAddCodeToValue, sSeparator, vDefColumn, sNoneValue, sNoneText, sLeftCond, sRightCond)
' new elements are inserted into SELECT control only when condition is true
' condition is: rs(sLeftCond).value = sRightCond
	' remove all previous elements
	while ctrlSelect.length > 0
		ctrlSelect.remove 0
	wend
	
	' insert none value
	if IsArray(sNoneValue) then
	    Dim i
	    for i = LBound(sNoneValue) to UBound(sNoneValue)
	        AddComboElement ctrlSelect, sNoneValue(i), sNoneText(i), bAddCodeToValue, sSeparator
	    next
	elseif sNoneValue <> "" or sNoneText <> "" then
        AddComboElement ctrlSelect, sNoneValue, sNoneText, bAddCodeToValue, sSeparator
	end if	

	if rs is nothing then exit sub
	if rs.State = 0 then exit sub 'closed
	if rs.eof and rs.bof then exit sub
	if rs.Fields(0).Name = "$Text" then exit sub

	rs.MoveFirst
	while not rs.EOF
		if rs(sLeftCond) = sRightCond then
    		set el = AddComboElement(ctrlSelect, rs(vCodeColumn).value, rs(vDescColumn).value, bAddCodeToValue, sSeparator)
			if not IsNull(vDefColumn) then 
				On Error Resume Next
				if rs(vDefColumn).value = "default" then el.selected = true
			end if
		end if
		rs.MoveNext
	wend
end sub

function AddComboElement(ctrlSelect, sValue, sText, bAddCodeToValue, sSeparator)
	Dim el
	set el = document.createElement("OPTION")
	el.value = sValue 
	el.text = sText
    el.title = sText
	if bAddCodeToValue then el.text = el.value & sSeparator & el.text
    on error resume next
	ctrlSelect.add el
    if Err.number <> 0 then Err.Clear   ' Unspecified error
	set AddComboElement = el
end function
