﻿function AutoCompletion(wsurl,rbis,rbcs,tbId,boxId){ 
    var webServiceUrl=wsurl;
    var resultBoxItemStyle=rbis;
    var resultBoxCloseStyle=rbcs;
    var parameter;

    var tb=$("#"+tbId);
    var box=$("#"+boxId);
    var lastXmlHttpRequest=null;
    var lastQuery="";

    this.OnChange=function() {
        setTimeout(GetResult,500);
    }
    
    this.SetParameter=function(val){
        parameter=val;
    }
    
    function GetResult() {
        var input=tb.val();
        
        if(input.length > 0){
            if(input!=lastQuery){
            
                if(lastXmlHttpRequest!=null){
                    lastXmlHttpRequest.abort();
                }
                
                lastQuery=input;
                GetResponseWithPostSync(webServiceUrl,{query:input,mode:parameter},BuildList);
            }
        }
        else{
            box.hide();
        }
    }

    function BuildList(result){
        var list = "";
        
        for(var i=0;i<result.length;i++){
            list=list + "<li style=\""+resultBoxItemStyle+"\"><a href=\"javascript:void(0);\" onclick=\" $('#"+tbId+"').val('"+result[i]+"');$('#"+boxId+"').hide();\">";
            list=list + result[i];
            list=list + "</li>";
        }
               
        list=list + "<li style=\""+resultBoxCloseStyle+"\"><a href=\"javascript:void(0);\" onclick=\"$('#"+boxId+"').hide();\">";
        list=list + "Close";
        list=list + "</li>";
        
        box.text("");
        box.get(0).innerHTML=list;
        box.show();
    }

    function GetResponseWithPostSync(purl,params,Method){
        lastXmlHttpRequest = $.ajax({ 
            type: "POST", 
            url: purl, 
            data: params, 
            dataType: "xml",
            async:true,
            success: function(data){
                Method(eval($(data).children("string").text()));
                lastXmlHttpRequest = null;
            },
            error: function (XMLHttpRequest,textStatus,errorThrown){
            } 
        });
    }
}