
$.fn.AutoComplete = function(url, option) {
    var me = this;
    var strKey = $(me).val();
    var strKeyBak = "";
    var isShow = false;
    var doption = {
        iwidth: '0px', //下拉框的宽度
        iLengthLower: 1, //当表单的长度大于iLengthLower小于iLengthUpper时才开始执行搜索
        iLengthUpper: 50,
        strPara: "strKeyWord", //变量名称
        zIndex: 1, //提示框的Z-INDEX值             
        hasscroll: 0, //是否出现滚动条0无1有
        hasclose: 0, //是否拥有关闭窗口
        desfun: function() { }
    };

    $.extend(doption, option);
    var iLengthLower = doption.iLengthLower;
    var iLengthUpper = doption.iLengthUpper;
    var strPara = doption.strPara;
    if ($("#autocomplete").length < 1) { $("body").append("<div id='autocomplete' class='autocompletefloor'></div>"); }
    $("#autocomplete").hide();

    $(me).keyup(function(e) { keysearch(e.keyCode); });
    $(me).keydown(function(e) { LineSelect(e.keyCode); });
    $(me).bind("blur", function() {

        strKeyBak = $("#autocomplete ul .selected .keyname").text(); //为click事件增加处理
        strKeyBak1 = $("#autocomplete ul .selected .keyextend").text();
        if (strKeyBak.length > 0 && strKeyBak != $(me).val()) {
            $(me).val(strKeyBak);
            doption.desfun();
        };
        floorHide();
    });

    var encode = function(v) {//如果包含中文就escape,避免重复escape)
        return escape(v).replace(/\+/g, '%2B').replace(/\"/g, '%22').replace(/\'/g, '%27').replace(/\//g, '%2F');
    }

    function floorHide() {
        $("#autocomplete").hide().html("");
        strKey = "";
        isShow = false;
    }

    function floorShow() {
        var p = $(me).offset();
        var w = (doption.iwidth == "0px") ? $(me).width() + 2 : doption.iwidth;
        $("#autocomplete").css({
            'z-index:': doption.zIndex,
            width: w,
            top: parseInt(p.top + $(me).outerHeight()) + "px",
            left: parseInt(p.left) + "px"
        }).show();
        strKey = "";
        isShow = true;
    }

    function keysearch(code) {
        var strKeyNow = $(me).val();
        if (code == 38 || code == 40 || code == 13 || code == 27 || code == 9) return;    //TAB/回车、ESC、向上、向下
        if ((strKey == "" || strKeyNow != strKey) && strKeyNow.length >= iLengthLower && strKeyNow.length <= iLengthUpper) {
            $.ajax({
                type: "Get",
                dataType: "json",
                url: url,
                data: strPara != "" ? strPara + "=" + encode(strKeyNow) : "",
                success: function(json) {
                    json = json.keylist;
                    if (json.length > 0) {
                        //获取搜索数据
                        var strContent = "<ul>";
                        $.each(json, function(i, n) {
                            if (n.keyname.length > 0) {	//如果
                                //							    alert(n.PrimaryKey);
                                strContent += '<li class="keyinfo"><span class="keyname">' + n.keyname + '</span>';
                                try {
                                    if (n.keyextend.length > 0)
                                    { strContent += '<span class="keyextend">' + n.PrimaryKey + '</span>'; }
                                } catch (E) { };
                                strContent += '</li>';
                            };
                        });
                        if (doption.hasclose == 1) {
                            //							strContent+= '<li class="close"><span>关闭</span></li>';
                        }
                        strContent += '</ul>';
                        $("#autocomplete").html(strContent);
                        $("#autocomplete .keyinfo").mouseover(function() { $("#autocomplete .selected").removeClass("selected"); $(this).removeClass("unselected").addClass("selected"); }).mouseout(function() { $(this).removeClass("selected").addClass("unselected"); }).click(function() { if (strKeyBak.length() > 0) { $(me).val(strKeyBak); } });
                        floorShow();
                    } else {
                        //没有搜索数据
                        floorHide();
                        return;
                    }
                }
            });
            strKey = $(me).val();
        }
        if (strKey.length == 0 || strKey.length <= iLengthLower || strKey.length >= iLengthUpper) floorHide();
    }

    function LineSelect(code) {
        if (code == 27) { floorHide(); }; //回车键、ESC键
        if (code == 13) { floorHide(); doption.desfun(); };
        if (!isShow) return;
        ObjSelected = $("#autocomplete ul .selected");
        if (ObjSelected.length > 0) {
            if (code == 38) {
                if (ObjSelected.prev().text() != "") {

                    ObjSelected.removeClass("selected").addClass("unselected").prev().removeClass("unselected").addClass("selected");
                    $(me).val($("#autocomplete ul .selected .keyname").text());
                }
                else {
                    ObjSelected.removeClass("selected").addClass("unselected");
                    $("#autocomplete .keyinfo:last").removeClass("unselected").addClass("selected");
                    $(me).val($("#autocomplete ul .selected .keyname").text());
                }
            }
            else if (code == 40) {
                if (ObjSelected.next(".keyinfo").text() != "") {	//如果不是第一个数据
                    ObjSelected.removeClass("selected").addClass("unselected").next().removeClass("unselected").addClass("selected");
                    $(me).val($("#autocomplete ul .selected .keyname").text());
                } else {
                    ObjSelected.removeClass("selected").addClass("unselected");
                    $("#autocomplete .keyinfo:first").removeClass("unselected").addClass("selected");
                    $(me).val($("#autocomplete ul .selected .keyname").text());
                }
            }

            else if (code == 38) {

                $("#autocomplete .keyinfo:last").removeClass("unselected").addClass("selected");
                $(me).val($("#autocomplete .keyinfo:last .keyname").text());



            } else if (code == 40) {
            $("#autocomplete .keyinfo:first").removeClass("unselected").addClass("selected");
            $(me).val($("#autocomplete .keyinfo:first .keyname").text());
            }


        }


    }
}
