    var textbox;
    var listbox;
    var sfsIndex       = new Object;
    sfsIndex.populated = false;
    var iFrist=0;
    /*
        Typing a name into the lender entry field will scroll the lender select
        field to a matching lender name (if any).
    */
    function sfsComplete (text, list) 
    {
    
        if (!document.getElementById) return;
        var text   = document.getElementById(text);
        var select = document.getElementById(list);

        //if (!sfsIndex.populated) 
        sfsBuildIndex(list);

        var lender = text.value.match(/,*([^,]+)$/);
        if (lender) 
        {
            var name = lender[1].toUpperCase().replace(/^\s*/, '').replace(/\s*$/, '');
            for (var i = sfsIndex[name.charAt(0)]; i < select.options.length; i++) {
                if (select.options[i].text.toUpperCase().indexOf(name) == 0) {
                    select.selectedIndex = i;
                    break;
                }
                else {
                    select.selectedIndex = -1;
                }
            }
        }
    }

    /*
        On click event for the lender select box. When clicked it populates
        the lender entry field then deselects the clicked lender. Focus is
        returned to the lender entry field.
    */
    function sfsInsert (text, list) 
    {
        
        if (!document.getElementById) return;
        var text    = document.getElementById(text);
        var select  = document.getElementById(list);
        //alert(select.value);
        // An IE bug means we need another event before select.selectedIndex
        // will update from -1. Since we need to swap the focus anyway we'll
        // do it before we look at what was clicked in the select box.
        text.focus();

        var lender = select.options[select.selectedIndex];

        // short circuit on 'show all lenders'
        if (select.selectedIndex == 0) {
            text.value = '';
            iFrist=0;
            return true;
        }

        // see if the selected lender is in the list already
        var textlenders = text.value.split(/\s*,\s*/);
        if (!textlenders) return;
        var pattern = new RegExp('\s*' + lender.text + '\s*$');
        for (var i = 0; i < textlenders.length; i++) {
            // if it's in the list don't do anything
            if (pattern.exec(textlenders[i])) return;
        }

        // its not in the list so lets add it replacing any incomplete words
        var newvalue = '';
        //if(iFrist==0)
         newvalue = text.value.replace(/(^|,)([^,]*)$/,"$1" + lender.text + ',');
       // else
           // newvalue = text.value.replace(/(^|,)([^,]*)$/,"$1" + '\r'+lender.text + ',');
        
        text.value = newvalue;
        
        iFrist++;
    }

    /*
        Builds an index based on the first occurrence of lender starting with a
        letter. This speeds up the 'for' search of the select because we can
        then skip straight to lenders starting with that letter.
    */
    function sfsBuildIndex (list) 
    {
        if (!document.getElementById) return;
        var select = document.getElementById(list);
        for (var i = select.options.length; i--;) 
        {
            sfsIndex[select.options[i].text.toUpperCase().charAt(0)] = i;
        }
        sfsIndex.populated = true;
    }


