
var ignoreKeys ="8;16;17;18;46;37;38;39;40;33;34;35;36;45;";

function getlist(type)
{
    var list = null;
    var w = crawltotop();

    if (type == "email")
    {
        list = w.emaillist;
    }
    else  if (type == "sms")
    {
        list = w.smslist;
    }
    else  if (type == "pager")
    {
        list = w.pagerlist;
    }

    return list;
}

function setlist(type, list)
{
    var w = crawltotop();

    if (type == "email")
    {
        w.emaillist = list;
    }
    else  if (type == "sms")
    {
        w.smslist = list;
    }
    else  if (type == "pager")
    {
        w.pagerlist = list;
    }

    return;
}

function comparefn(a,b)
{
    var result = 0;

    if (a.searchaddress < b.searchaddress)
    {
        result = -1;
    }

    if (a.searchaddress > b.searchaddress)
    {
        result = 1;
    }

    return result;
}

function autocomplete_search(list, key)
{
    len = list.length;

    lower = 0;
    upper = len - 1;

    while (lower < upper)
    {
        index = parseInt((lower + upper) / 2);

        result = comparefn(key, list[index]);

        if (result < 0)
        {
            upper = index;
        }
        else if (result > 0)
        {
            lower = index + 1;
        }
        else
        {
            return index;
        }
    }

    return lower;
}

function autocomplete_init(type, addressStr, colsep, fieldsep)
{
    var list = null;

    if (addressStr != "")
    {
        strings = addressStr.split(colsep);
        len = strings.length;

        list = new Array();

        ix = 0;

        for (i = 0; i < len; i++)
        {
            address = "";
            displayname = "";

            elestrings = strings[i].split(fieldsep);

            if (elestrings[0] != null)
            {
                displayname = urldecode(elestrings[0]);
            }

            if (elestrings[1] != null )
            {
                address = urldecode(elestrings[1]);
            }

            if (address != "")
            {
                list[ix] = new Object();
                list[ix]["address"] = address;
                list[ix]["searchaddress"] = address.toLowerCase();

                ix++;

                if (displayname != "")
                {
                    combined = displayname + ' <' + address + '>';

                    list[ix] = new Object();
                    list[ix]["address"] = combined;
                    list[ix]["searchaddress"] = combined.toLowerCase();

                    ix++;

                    combined = '"' + displayname + '" <' + address + '>';

                    list[ix] = new Object();
                    list[ix]["address"] = combined;
                    list[ix]["searchaddress"] = combined.toLowerCase();

                    ix++;
                }
            }
        }

        list.sort(comparefn);
    }

    setlist(type, list);
}

function autocomplete_find(type, value)
{
    var result = "";

    list = getlist(type);

    if (list != null)
    {
        key = new Object();

        key["address"] = value;
        key["searchaddress"] = value.toLowerCase();

        i = autocomplete_search(list, key);

        if (i != -1)
        {
            search = value.toLowerCase();

            if(list[i].searchaddress.indexOf(search) == 0)
            {
                result = list[i].address;
            }
        }
    }

    return result;
}

function autocomplete(type, field, keyCode)
{
    if (ignoreKeys.indexOf(keyCode+";") == -1)
    {
        if (field.value.length > 0)
        {
            oldvaluelen = field.value.length;

            addresses = tokenizer(field.value, ",;");

            value = addresses[addresses.length - 1];
            value = trimEx(value, " ", true, false);

            if (value.length > 0 && value != '"')
            {
                newvalue = autocomplete_find(type, value);

                if (newvalue != "" && newvalue != value)
                {
                    newvalue = field.value + newvalue.substring(value.length, newvalue.length);

                    if (field.value != newvalue)
                    {
                        field.value = newvalue;

                        if (field.createTextRange)
                        {
                            rNew = field.createTextRange();
                            rNew.moveStart('character', oldvaluelen);
                            rNew.select();
                        }
                        else if (field.setSelectionRange)
                        {
                            field.setSelectionRange(oldvaluelen, newvalue.length);
                        }
                    }
                }
            }
        }
    }
}


