    var subIndex = new Object;subIndex.populated = false;var iFirst=0;
    function subComplete (text, list) 
    {
        if (!document.getElementById) return;
        var textBox   = document.getElementById(text);
        var listBox = document.getElementById(list);
        subBuildIndex(list);
        var suburb = textBox.value.match(/,*([^,]+)$/);
        if (suburb) 
        {
            var name = suburb[1].toUpperCase().replace(/^\s*/, '').replace(/\s*$/, '');
            for (var i = subIndex[name.charAt(0)]; i < listBox.options.length; i++) {
                if (listBox.options[i].text.toUpperCase().indexOf(name) == 0) {
                    listBox.selectedIndex = i;
                    break;
                }
                else {
                    listBox.selectedIndex = -1;
                }
            }
        }
    }
    function subInsert (text, list) 
    {
        if (!document.getElementById) return;
        var textBox    = document.getElementById(text);
        var listBox  = document.getElementById(list);
        textBox.focus();
        var suburb = listBox.options[listBox.selectedIndex];
        if (listBox.selectedIndex == 0) 
        {
            textBox.value = '';
            iFirst=0;
            return true;
        }
        var textlenders = textBox.value.split(/\s*,\s*/);
        if (!textlenders) return;
        var pattern = new RegExp('\s*' + suburb.text + '\s*$');
        for (var i = 0; i < textlenders.length; i++) {
            if (pattern.exec(textlenders[i])) return;
        }
        var newvalue = '';
         newvalue = textBox.value.replace(/(^|,)([^,]*)$/,"$1" + suburb.text + ',');
        
        textBox.value = newvalue;
        
        iFirst++;
    }
    function subBuildIndex (list) 
    {
        if (!document.getElementById) return;
        var listBox = document.getElementById(list);
        for (var i = listBox.options.length; i--;) 
        {
            subIndex[listBox.options[i].text.toUpperCase().charAt(0)] = i;
        }
        subIndex.populated = true;
    }