﻿
/* 
根据用户在文本框中输入的关键字选取产品列表 (最少2位字符才开始搜索数据库)
textBox:接受用户输入的文本框
listBox:显示数据的列表框
textLabel:显示用户选中数据的文本框
    格式:ProductNo ProductName Price
valueBox:保存用户选中记录的值
    格式:CityID,Zipcode,Express,ExpressAF,EMS,EMSAF
func:当用户选中某记录后的额外处理
*/
function Bind_SearchCity(textBox,listBox,textLabel,valueBox,func)
{
    var title = "";
    var browser = new Edward.Web.Browser();
    var isFF    = browser.IsFirefox;

    if(textBox.value == null || textBox.value == "")textBox.value = title;
    textBox.onfocus = function(){ if(this.value.Trim() == title) this.value = ""; }
    textBox.onblur = function()
    {
        if(isFF)//FF
        {
            if(event.explicitOriginalTarget.id != textBox.id)
                listBox.style.display = 'none';
        }
        else//IE
        {
            if(document.activeElement.id != listBox.id)
                listBox.style.display = 'none';
        }
        if(this.value.Trim() == "") this.value = title;
    }
    listBox.onblur = function(){ listBox.style.display = 'none'; }
    textBox.onkeyup = function(event)
    {
        var e;
        e = Edward.Web.FixEvent(event);
        if(e.keyCode==40 & listBox.style.display == "block")
        {
            listBox.focus();
            if(listBox.options.length>0)
                listBox.options[0].selected=true;
        }
//        else if((e.keyCode>=48 && e.keyCode<=57)    //数字键
//            || (e.keyCode>=65 && e.keyCode<=96)     //字母
//            || e.keyCode==8                         //Backspace
//            || e.keyCode==39)                       //->(right)
        else
        {
            if(textBox.value.Trim().length >= 2)    //最少2位字符才开始搜索数据库
            {
                SearchCity(textBox,listBox,textLabel,valueBox,func);
            }
            else
            {
                listBox.length=0;
                listBox.style.display = 'none';
            }
        }
    }
}

function SearchCity(textBox,listBox,textLabel,valueBox,func)
{
    listBox.length=0;
    var key = textBox.value;
    var divCity = listBox.parentNode;
    var dt = City.Search(key).value;
    if(dt != null && typeof(dt) == "object" && dt.Rows.length > 0)
    {
        for(var i = 0; i < dt.Rows.length ; i ++)
        {
            var id = dt.Rows[i]["CityID"]+","+dt.Rows[i]["Zipcode"]+","+dt.Rows[i]["Express"]+","+dt.Rows[i]["ExpressAF"]+","+dt.Rows[i]["EMS"]+","+dt.Rows[i]["EMSAF"];
            var cityname = dt.Rows[i]["Province"] + dt.Rows[i]["CityName"];
            var option = new Option(cityname,id);
            option.title = cityname;
            listBox.options.add(option);
        }
        if(listBox.style.display == 'none')
        {
            textBox.parentNode.appendChild(listBox);
            listBox.style.display = "block";
            listBox.style.width = textBox.parentNode.offsetWidth + "px";
        }
        listBox.ondblclick = function()
        {
            textLabel.value = this.options[this.selectedIndex].text;
            valueBox.value = this.options[this.selectedIndex].value;
            listBox.style.display = 'none';
            textBox.focus();
            if(func!=null)
            {
                if(typeof(func)=="function")
                    func.call();
                else
                    func;
            }
        }
        listBox.onkeypress = function(event)
        {
            var e;
            e = Edward.Web.FixEvent(event);
            if(e.keyCode==13)
            {
                textLabel.value = this.options[this.selectedIndex].text;
                valueBox.value = this.options[this.selectedIndex].value;
                listBox.style.display = 'none';
                textBox.focus();
                if(func!=null)
                {
                    if(typeof(func)=="function")
                        func.call();
                    else
                        func;
                }
            }
        }
    }
    else
    {
        valueBox.value = "";
        listBox.style.display = 'none';
    }
}
