
	var g_url = "ajax.php";
	var g_maxResult = 10;

	function autoComplete(input,resultDivId,resultItemCls)
	{
		this.kw = '';
		this.input = $("input[id="+input+"]");
		this.resultDiv = resultDivId;
		this.results = new Array();
		this.sfor = "city";
		this.cid = 0;
		this.div; // the resultDiv Object
		this.resultItemCls = resultItemCls;
		this.hoverColor = "#0036FF";
	}
	autoComplete.prototype.setUrl= function(u){ g_url = u; }
	autoComplete.prototype.setMaxResult = function(m){ g_maxResult = m; }
	autoComplete.prototype.setCid = function(cid)
	{
		this.cid = cid;
	}
	autoComplete.prototype.setKw = function(kw){ this.kw = kw; }
	autoComplete.prototype.showResult= function()
	{
		if(this.results.length == 0)
			return
		if(!$("[id="+this.resultDiv+"]").get(0) || $("[id="+this.resultDiv+"]").get(0) == 'undefined')
			$("body").append("<div id="+this.resultDiv+"></div>");
			
		this.div = $("[id="+this.resultDiv+"]");	
		var pos = $(this.input).position();
		var h = this.input.outerHeight();
		var w = this.input.outerWidth();
		this.div.css({"position":"absolute","left": pos.left,"top": pos.top+h,"width": w});
		this.div.html("<span class='"+this.resultItemCls+"'>"+this.results.join("</span>\n<span class='"+this.resultItemCls+"'>")+"</span>");
		if(this.div.css("display") == "none")
			this.div.toggle();
		var ac = this;
		$("[class="+this.resultItemCls+"]").click(function(){
				ac.input.val($(this).html());
				ac.div.toggle();
			});
		var item = $("[class="+this.resultItemCls+"]");
		$(item).mouseover(function(){ $(this).css({"background-color":ac.hoverColor,"color": "#fff"}); });
		$(item).mouseout(function(){ $(this).css({"background-color":"#fff","color":ac.hoverColor}); });
        $("body").click(function()
        {
            ac.div.hide();
        });
	}
	autoComplete.prototype.getResult = function()
	{
		var ac = this;
		$.ajax(
		{
			url: g_url,
			dataType: 'html',
			data:{search:this.kw,maxResults: g_maxResult,cid: this.cid},
			success: function(data)
			{
				ac.gotResult(data);
			}
		});
	}
	autoComplete.prototype.gotResult = function(d)
	{
		var data = eval("(" + d + ")");
		if(data != null)
		{
			if(data.length > 0)
			{
				this.results = Array();
				for(var i=0; i < data.length;i++)
				{
					this.results[i] = data[i];
				}
				this.showResult();
			}
		}
	}
	autoComplete.prototype.init = function(cid)
	{
		var ac = this;
		ac.cid = cid;
		if(this.cid == 0 || !this.cid)
			return;
		
		if(!$(this.input).get(0))
		{
			alert("خطأ: this.input == undefined !");
			return;
		}
		$(this.input).keypress(function(e)
		{
			if(this.value.trim().length <= 2)
			{
                if(typeof ac.div != "string" && typeof ac.div != "undefined")
                {
                      if(ac.div.css("display") != "none")
                        ac.div.toggle();
                }
                return;   
			}
			var kn = e.which || e.keyCode; // Good Browsers || bad Browsers :(
			if(kn == 13 || kn == 8)
				return;
			ac.kw = this.value.trim();
			ac.getResult();
		});
	}
	
	
